Update of /cvsroot/monetdb/sql/src/server
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11383/src/server
Modified Files:
bin_optimizer.mx sql_optimize.mx sql_parser.mx sql_rel2bin.mx
sql_semantic.mx sql_statement.mx sql_updates.mx
Log Message:
added support for copy select .. into 'filename';
Index: sql_semantic.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_semantic.mx,v
retrieving revision 1.175
retrieving revision 1.176
diff -u -d -r1.175 -r1.176
--- sql_semantic.mx 27 Nov 2007 09:13:24 -0000 1.175
+++ sql_semantic.mx 3 Jan 2008 09:41:18 -0000 1.176
@@ -1082,6 +1082,7 @@
break;
}
case SQL_COPYFROM:
+ case SQL_COPYTO:
case SQL_INSERT:
case SQL_UPDATE:
case SQL_DELETE:
Index: sql_updates.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_updates.mx,v
retrieving revision 1.128
retrieving revision 1.129
diff -u -d -r1.128 -r1.129
--- sql_updates.mx 13 Dec 2007 16:08:18 -0000 1.128
+++ sql_updates.mx 3 Jan 2008 09:41:18 -0000 1.129
@@ -1375,7 +1375,7 @@
where import is a function returning a table of to be inserted values.
*/
static stmt *
-sql_bulkinsert(mvc *sql, sql_table *t, char *tsep, char *rsep, char *ssep,
char *filename, int nr, int offset)
+sql_import(mvc *sql, sql_table *t, char *tsep, char *rsep, char *ssep, char
*filename, int nr, int offset)
{
stmt *rs = NULL;
stmt *fname = (filename) ? stmt_atom_string(_strdup(filename)) : NULL;
@@ -1383,7 +1383,7 @@
int i, len = 0;
stmt **inserts, *res = NULL;
- rs = stmt_bulkinsert(stmt_basetable(t, t->base.name), _strdup(tsep),
_strdup(rsep), _strdup(ssep), fname, nr, offset);
+ rs = stmt_import(stmt_basetable(t, t->base.name), _strdup(tsep),
_strdup(rsep), _strdup(ssep), fname, nr, offset);
len = list_length(t->columns.set);
inserts = NEW_ARRAY(stmt *, len);
@@ -1436,12 +1436,35 @@
for (slist = create_stmt_list(); n; n = n->next) {
char *fname = n->data.sval;
- list_append(slist, sql_bulkinsert(sql, t, tsep, rsep,
ssep, fname, nr, offset));
+ list_append(slist, sql_import(sql, t, tsep, rsep, ssep,
fname, nr, offset));
}
return stmt_list(slist);
}
slist = create_stmt_list();
- list_append(slist, sql_bulkinsert(sql, t, tsep, rsep, ssep, NULL, nr,
offset));
+ list_append(slist, sql_import(sql, t, tsep, rsep, ssep, NULL, nr,
offset));
+ return stmt_list(slist);
+}
+
+static stmt *
+copyto(mvc *sql, symbol *sq, str file, dlist *seps)
+{
+ char *tsep = seps->h->data.sval;
+ char *rsep = seps->h->next->data.sval;
+ char *ssep = (seps->h->next->next)?seps->h->next->next->data.sval:"";
+ stmt *s = flat_subquery(sql, sq);
+ list *slist;
+
+ if (!s)
+ return NULL;
+
+ slist = create_stmt_list();
+ list_append(slist, stmt_export(s, _strdup(tsep), _strdup(rsep),
_strdup(ssep), stmt_atom_string(_strdup(file))));
+ if (s->type == st_list && ((stmt*)s->op1.lval->h->data)->nrcols != 0) {
+ stmt *cnt = stmt_aggr(stmt_dup(s->op1.lval->h->data), NULL,
sql_bind_aggr(sql->session->schema, "count", NULL), 1);
+ list_append(slist, stmt_affected_rows(cnt));
+ } else {
+ list_append(slist, stmt_affected_rows(stmt_atom_int(1)));
+ }
return stmt_list(slist);
}
@@ -1948,6 +1971,14 @@
sql->type = Q_UPDATE;
}
break;
+ case SQL_COPYTO:
+ {
+ dlist *l = s->data.lval;
+
+ ret = copyto(sql, l->h->data.sym, l->h->next->data.sval,
l->h->next->next->data.lval);
+ sql->type = Q_UPDATE;
+ }
+ break;
case SQL_INSERT:
{
dlist *l = s->data.lval;
Index: sql_rel2bin.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_rel2bin.mx,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -d -r1.113 -r1.114
--- sql_rel2bin.mx 30 Dec 2007 18:25:27 -0000 1.113
+++ sql_rel2bin.mx 3 Jan 2008 09:41:18 -0000 1.114
@@ -218,7 +218,8 @@
case st_output:
case st_affected_rows:
- case st_bulkinsert:
+ case st_import:
+ case st_export:
case st_exception:
@@ -838,7 +839,8 @@
case st_basetable:
case st_atom:
- case st_bulkinsert:
+ case st_import:
+ case st_export:
case st_var:
case st_table_clear:
Index: sql_statement.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_statement.mx,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -d -r1.155 -r1.156
--- sql_statement.mx 21 Dec 2007 17:02:26 -0000 1.155
+++ sql_statement.mx 3 Jan 2008 09:41:18 -0000 1.156
@@ -91,7 +91,8 @@
st_intersect,
st_union,
- st_bulkinsert,
+ st_import,
+ st_export,
st_append,
st_table_clear,
st_exception,
@@ -218,7 +219,8 @@
extern stmt *stmt_append(stmt *c, stmt *values);
extern stmt *stmt_table_clear(sql_table *t);
-extern stmt *stmt_bulkinsert(stmt *t, char *sep, char *rsep, char *ssep, stmt
*file, int nr, int offset);
+extern stmt *stmt_import(stmt *t, char *sep, char *rsep, char *ssep, stmt
*file, int nr, int offset);
+extern stmt *stmt_export(stmt *t, char *sep, char *rsep, char *ssep, stmt
*file);
extern stmt *stmt_temp(sql_subtype *t);
extern stmt *stmt_atom(atom *op1);
extern stmt *stmt_atom_string(char *s);
@@ -384,7 +386,8 @@
ST(intersect);
ST(union);
- ST(bulkinsert);
+ ST(import);
+ ST(export);
ST(append);
ST(table_clear);
ST(exception);
@@ -711,7 +714,8 @@
stmt_destroy(s->op3.stval);
break;
- case st_bulkinsert:
+ case st_import:
+ case st_export:
if (s->op1.stval)
stmt_destroy(s->op1.stval);
if (s->op2.lval)
@@ -941,7 +945,8 @@
if (s->op3.stval)
dep_list = list_merge_destroy(dep_list,
stmt_list_dependencies(s->op3.stval, depend_type), (fdup)NULL);
break;
- case st_bulkinsert:
+ case st_import:
+ case st_export:
if (s->op1.stval)
dep_list = list_merge_destroy(dep_list,
stmt_list_dependencies(s->op1.stval, depend_type), (fdup)NULL);
if (s->op4.stval)
@@ -1806,9 +1811,9 @@
}
stmt *
-stmt_bulkinsert(stmt *t, char *sep, char *rsep, char *ssep, stmt *file, int
nr, int offset)
+stmt_import(stmt *t, char *sep, char *rsep, char *ssep, stmt *file, int nr,
int offset)
{
- stmt *s = stmt_create(st_bulkinsert);
+ stmt *s = stmt_create(st_import);
int *l;
s->op1.stval = t;
@@ -1825,6 +1830,20 @@
}
stmt *
+stmt_export(stmt *t, char *sep, char *rsep, char *ssep, stmt *file)
+{
+ stmt *s = stmt_create(st_export);
+
+ s->op1.stval = t;
+ s->op2.lval = list_create((fdestroy)& GDKfree);
+ list_append(s->op2.lval, sep);
+ list_append(s->op2.lval, rsep);
+ list_append(s->op2.lval, ssep);
+ s->op4.stval = file;
+ return s;
+}
+
+stmt *
stmt_list(list *l)
{
int nrcols = 0;
@@ -2810,11 +2829,13 @@
case st_uselect: case st_uselect2:
case st_semijoin:
- case st_bulkinsert:
+ case st_import:
+ case st_export:
if (s->op1.stval)
fprintf(fp, "id%d -> id%d [headlabel=\"1\"];\n",
stmt_stmt2dot(s->op1.stval, l, i, fp),
-(s->optimized));
- if (s->type == st_bulkinsert && s->op4.stval)
+ if ((s->type == st_import ||
+ s->type == st_export) && s->op4.stval)
fprintf(fp, "id%d -> id%d [headlabel=\"4\"];\n",
stmt_stmt2dot(s->op4.stval, l, i, fp),
-(s->optimized));
break;
@@ -2906,8 +2927,9 @@
case st_exception:
printf("exception\n"); break;
case st_rs_column:
- case st_bulkinsert:
- printf("bulkinsert\n"); break;
+ case st_import:
+ case st_export:
+ printf("import/export\n"); break;
case st_affected_rows:
case st_while:
case st_if:
Index: sql_optimize.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_optimize.mx,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -d -r1.87 -r1.88
--- sql_optimize.mx 30 Dec 2007 18:25:27 -0000 1.87
+++ sql_optimize.mx 3 Jan 2008 09:41:18 -0000 1.88
@@ -1684,7 +1684,7 @@
case st_bat:
case st_atom:
- case st_bulkinsert:
+ case st_import:
case st_var:
s->optimized = 1;
@@ -1774,6 +1774,7 @@
case st_return:
case st_table:
case st_assign:
+ case st_export:
if (s->op1.stval) {
stmt *os = s->op1.stval;
@@ -1784,6 +1785,11 @@
stmt_destroy(os);
}
+ if (s->type == st_export || s->type == st_convert) {
+ s->optimized = 1;
+ return stmt_dup(s);
+ }
+
case st_append_col:
case st_append_idx:
case st_update_col:
@@ -1791,23 +1797,21 @@
case st_delete:
case st_table_clear:
- if (s->type != st_convert) {
- if (s->op2.stval) {
- stmt *os = s->op2.stval;
- stmt *ns = optimize(c, os);
+ if (s->op2.stval) {
+ stmt *os = s->op2.stval;
+ stmt *ns = optimize(c, os);
- assert(ns != s);
- s->op2.stval = ns;
- stmt_destroy(os);
- }
- if (s->op3.stval) {
- stmt *os = s->op3.stval;
- stmt *ns = optimize(c, os);
+ assert(ns != s);
+ s->op2.stval = ns;
+ stmt_destroy(os);
+ }
+ if (s->op3.stval) {
+ stmt *os = s->op3.stval;
+ stmt *ns = optimize(c, os);
- assert(ns != s);
- s->op3.stval = ns;
- stmt_destroy(os);
- }
+ assert(ns != s);
+ s->op3.stval = ns;
+ stmt_destroy(os);
}
s->optimized = 1;
return stmt_dup(s);
Index: bin_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/bin_optimizer.mx,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- bin_optimizer.mx 30 Dec 2007 18:25:27 -0000 1.8
+++ bin_optimizer.mx 3 Jan 2008 09:41:18 -0000 1.9
@@ -252,7 +252,8 @@
case st_idxbat:
case st_atom:
- case st_bulkinsert:
+ case st_import:
+ case st_export:
case st_var:
case st_table_clear:
Index: sql_parser.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_parser.mx,v
retrieving revision 1.267
retrieving revision 1.268
diff -u -d -r1.267 -r1.268
--- sql_parser.mx 20 Dec 2007 08:52:02 -0000 1.267
+++ sql_parser.mx 3 Jan 2008 09:41:18 -0000 1.268
@@ -2394,6 +2394,12 @@
append_list(l, $7);
append_list(l, $2);
$$ = _symbol_create_list( SQL_COPYFROM, l ); }
+ | COPY select_no_parens INTO string opt_seps
+ { dlist *l = L();
+ append_symbol(l, $2);
+ append_string(l, $4);
+ append_list(l, $5);
+ $$ = _symbol_create_list( SQL_COPYTO, l ); }
;
opt_seps:
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins