Changeset: 68a1cd13ab6e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=68a1cd13ab6e
Modified Files:
        sql/scripts/Makefile.ag
        sql/server/rel_updates.c
        sql/server/sql_parser.y
        sql/server/sql_scan.c
Branch: resultset
Log Message:

added parser option BEST EFFORT to the copy into statement. Its passed
to the import call (which needs to be addapted first).


diffs (147 lines):

diff --git a/sql/scripts/Makefile.ag b/sql/scripts/Makefile.ag
--- a/sql/scripts/Makefile.ag
+++ b/sql/scripts/Makefile.ag
@@ -36,7 +36,6 @@ headers_sql = {
        24_zorder.sql \
        25_debug.sql \
        26_sysmon.sql \
-       27_copy_rejects.sql \
        39_analytics.sql \
        40_json.sql \
        41_jsonstore.sql \
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1048,7 +1048,7 @@ table_column_types(sql_allocator *sa, sq
 }
 
 static sql_rel *
-rel_import(mvc *sql, sql_table *t, char *tsep, char *rsep, char *ssep, char 
*ns, char *filename, lng nr, lng offset, int locked)
+rel_import(mvc *sql, sql_table *t, char *tsep, char *rsep, char *ssep, char 
*ns, char *filename, lng nr, lng offset, int locked, int best_effort)
 {
        sql_rel *res;
        list *exps, *args;
@@ -1074,12 +1074,14 @@ rel_import(mvc *sql, sql_table *t, char 
        if (filename)
                append( args, exp_atom_str(sql->sa, filename, &tpe)); 
        import = exp_op(sql->sa,  
+       append(
                append(
                        append( 
                                append( args, 
                                        exp_atom_lng(sql->sa, nr)), 
                                        exp_atom_lng(sql->sa, offset)), 
-                                       exp_atom_int(sql->sa, locked)), f); 
+                                       exp_atom_int(sql->sa, locked)),
+                                       exp_atom_int(sql->sa, best_effort)), 
f); 
        
        exps = new_exp_list(sql->sa);
        for (n = t->columns.set->h; n; n = n->next) {
@@ -1091,7 +1093,7 @@ rel_import(mvc *sql, sql_table *t, char 
 }
 
 static sql_rel *
-copyfrom(mvc *sql, dlist *qname, dlist *files, dlist *seps, dlist *nr_offset, 
str null_string, int locked, int constraint)
+copyfrom(mvc *sql, dlist *qname, dlist *files, dlist *seps, dlist *nr_offset, 
str null_string, int locked, int best_effort, int constraint)
 {
        sql_rel *rel = NULL;
        char *sname = qname_schema(qname);
@@ -1172,7 +1174,7 @@ copyfrom(mvc *sql, dlist *qname, dlist *
                                return sql_error(sql, 02, "COPY INTO: filename 
must "
                                                "have absolute path: %s", 
fname);
 
-                       nrel = rel_import(sql, t, tsep, rsep, ssep, ns, fname, 
nr, offset, locked);
+                       nrel = rel_import(sql, t, tsep, rsep, ssep, ns, fname, 
nr, offset, locked, best_effort);
 
                        if (!rel)
                                rel = nrel;
@@ -1182,7 +1184,7 @@ copyfrom(mvc *sql, dlist *qname, dlist *
                                return rel;
                }
        } else {
-               rel = rel_import(sql, t, tsep, rsep, ssep, ns, NULL, nr, 
offset, locked);
+               rel = rel_import(sql, t, tsep, rsep, ssep, ns, NULL, nr, 
offset, locked, best_effort);
        }
        if (!rel)
                return rel;
@@ -1404,7 +1406,7 @@ rel_updates(mvc *sql, symbol *s)
        {
                dlist *l = s->data.lval;
 
-               ret = copyfrom(sql, l->h->data.lval, l->h->next->data.lval, 
l->h->next->next->data.lval, l->h->next->next->next->data.lval, 
l->h->next->next->next->next->data.sval, 
l->h->next->next->next->next->next->data.i_val, 
l->h->next->next->next->next->next->next->data.i_val);
+               ret = copyfrom(sql, l->h->data.lval, l->h->next->data.lval, 
l->h->next->next->data.lval, l->h->next->next->next->data.lval, 
l->h->next->next->next->next->data.sval, 
l->h->next->next->next->next->next->data.i_val, 
l->h->next->next->next->next->next->next->data.i_val, 
l->h->next->next->next->next->next->next->next->data.i_val);
                sql->type = Q_UPDATE;
        }
                break;
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -454,6 +454,7 @@ int yydebug=1;
        opt_chain
        opt_distinct
        opt_locked
+       opt_best_effort
        opt_constraint
        set_distinct
        opt_with_check_option
@@ -482,7 +483,7 @@ int yydebug=1;
        CURRENT_DATE CURRENT_TIMESTAMP CURRENT_TIME LOCALTIMESTAMP LOCALTIME
        LEX_ERROR 
 
-%token USER CURRENT_USER SESSION_USER LOCAL LOCKED
+%token USER CURRENT_USER SESSION_USER LOCAL LOCKED BEST EFFORT
 %token  CURRENT_ROLE sqlSESSION
 %token <sval> sqlDELETE UPDATE SELECT INSERT DATABASE 
 %token <sval> LEFT RIGHT FULL OUTER NATURAL CROSS JOIN INNER
@@ -2492,7 +2493,7 @@ opt_to_savepoint:
  ;
 
 copyfrom_stmt:
-    COPY opt_nr INTO qname FROM string_commalist opt_seps opt_null_string 
opt_locked opt_constraint
+    COPY opt_nr INTO qname FROM string_commalist opt_seps opt_null_string 
opt_locked opt_best_effort opt_constraint
        { dlist *l = L();
          append_list(l, $4);
          append_list(l, $6);
@@ -2501,8 +2502,9 @@ copyfrom_stmt:
          append_string(l, $8);
          append_int(l, $9);
          append_int(l, $10);
+         append_int(l, $11);
          $$ = _symbol_create_list( SQL_COPYFROM, l ); }
-  | COPY opt_nr INTO qname FROM STDIN opt_seps opt_null_string opt_locked 
opt_constraint
+  | COPY opt_nr INTO qname FROM STDIN opt_seps opt_null_string opt_locked 
opt_best_effort opt_constraint
        { dlist *l = L();
          append_list(l, $4);
          append_list(l, NULL);
@@ -2511,6 +2513,7 @@ copyfrom_stmt:
          append_string(l, $8);
          append_int(l, $9);
          append_int(l, $10);
+         append_int(l, $11);
          $$ = _symbol_create_list( SQL_COPYFROM, l ); }
    | COPY opt_nr BINARY INTO qname FROM string_commalist /* binary copy from 
*/ opt_constraint
        { dlist *l = L();
@@ -2587,6 +2590,11 @@ opt_locked:
  |     LOCKED          { $$ = TRUE; }
  ;
 
+opt_best_effort:
+       /* empty */     { $$ = FALSE; }
+ |     BEST EFFORT     { $$ = TRUE; }
+ ;
+
 opt_constraint:
        /* empty */     { $$ = TRUE; }
  |     NO CONSTRAINT   { $$ = FALSE; }
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -63,6 +63,8 @@ scanner_init_keywords(void)
        keywords_insert("PERCENT_RANK", RANK);
        keywords_insert("CUME_DIST", RANK);
        keywords_insert("ROW_NUMBER", RANK);
+       keywords_insert("BEST", BEST);
+       keywords_insert("EFFORT", EFFORT);
 
        keywords_insert("AS", AS);
        keywords_insert("ASC", ASC);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to