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