Update of /cvsroot/monetdb/sql/src/backends/monet4
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11383/src/backends/monet4
Modified Files:
sql_gencode.mx sql_result.mx sql_server.mx
Log Message:
added support for copy select .. into 'filename';
Index: sql_result.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_result.mx,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- sql_result.mx 25 Dec 2007 21:34:30 -0000 1.75
+++ sql_result.mx 3 Jan 2008 09:41:17 -0000 1.76
@@ -682,12 +682,10 @@
}
static int
-mvc_export_row(mvc *m, stream *s, res_table *t)
+mvc_export_row(mvc *m, stream *s, res_table *t, str btag, str sep, str rsep,
str ssep)
{
- char *sep = ",\t";
- char *rsep = "\t]\n";
- int seplen= 2;
- int rseplen= 3;
+ int seplen = strlen(sep);
+ int rseplen= strlen(rsep);
char *buf = NULL;
int len = 0;
int i, ok = 1;
@@ -695,7 +693,9 @@
if (!s)
return 0;
- ok = (stream_write(s, "[ ", 2, 1) == 1);
+ (void)ssep;
+ if (btag[0])
+ ok = (stream_write(s, btag, strlen(btag), 1) == 1);
for (i = 0; i < t->nr_cols && ok; i++) {
res_col *c = t->cols + i;
@@ -717,11 +717,8 @@
}
static int
-mvc_export_table(mvc *m, stream *s, res_table *t, BAT *order, size_t offset,
size_t nr)
+mvc_export_table(mvc *m, stream *s, res_table *t, BAT *order, size_t offset,
size_t nr, char *btag, char *sep, char *rsep, char *ssep )
{
- char *sep = ",\t";
- char *rsep = "\t]\n";
-
ascii as;
ascii_io *fmt;
ssize_t i;
@@ -739,7 +736,7 @@
memset(fmt, 0, (as.nr_attrs + 1) * sizeof(ascii_io));
fmt[0].c = NULL;
- fmt[0].sep = _strdup("[ ");
+ fmt[0].sep = _strdup(btag);
fmt[0].seplen = _strlen(fmt[0].sep);
fmt[0].ws = 0;
@@ -763,6 +760,7 @@
fmt[i].len = 0;
fmt[i].nillen = 0;
fmt[i].ws = 0;
+ fmt[i].quote = ssep?ssep[0]:0;
if (c->type.type->eclass == EC_DEC) {
fmt[i].tostr = &dec_tostr;
fmt[i].frstr = &dec_frstr;
@@ -985,6 +983,34 @@
}
int
+mvc_export_file(mvc *m, res_table *t)
+{
+ int res = 0;
+ size_t count;
+ stream *s;
+ BAT *order = NULL;
+
+ s = open_wastream(t->filename);
+ if (!s || stream_errnr(s)) {
+ GDKerror("failed to open %s\n", t->filename);
+ return -1;
+ }
+
+ if (!t->order) {
+ res = mvc_export_row(m, s, t, "", t->tsep, t->rsep, t->ssep);
+ } else {
+ order = BATdescriptor(t->order);
+ count = BATcount(order);
+ res = mvc_export_table(m, s, t, order, 0, count, "", t->tsep,
t->rsep, t->ssep);
+ BBPunfix(order->batCacheid);
+ m->results = res_tables_remove(m->results, t);
+ }
+ stream_close(s);
+ stream_destroy(s);
+ return res;
+}
+
+int
mvc_export_result(mvc *m, stream *s, int res_id, str w)
{
int i, clean = 0, res = 0;
@@ -997,6 +1023,8 @@
/* we shouldn't have anything else but Q_TABLE here */
assert(t->query_type == Q_TABLE);
+ if (t->filename)
+ return mvc_export_file(m, t);
/* query type: Q_TABLE */
if (!(stream_write(s, "&1 ", 3, 1) == 1))
@@ -1077,14 +1105,14 @@
return export_error(order);
if (!t->order)
- return mvc_export_row(m, s, t);
+ return mvc_export_row(m, s, t, "[ ", ",\t", "\t]\n", "\"");
count = m->reply_size;
if (count == 0 || count >= BATcount(order)) {
count = BATcount(order);
clean = 1;
}
- res = mvc_export_table(m, s, t, order, 0, count);
+ res = mvc_export_table(m, s, t, order, 0, count, "[ ", ",\t", "\t]\n",
"\"");
BBPunfix(order->batCacheid);
if (clean)
m->results = res_tables_remove(m->results, t);
@@ -1140,7 +1168,7 @@
if (stream_write(s, "\n", 1, 1) != 1)
return export_error(order);
- res = mvc_export_table(m, s, t, order, offset, cnt);
+ res = mvc_export_table(m, s, t, order, offset, cnt, "[ ", ",\t",
"\t]\n", "\"");
BBPunfix(order->batCacheid);
return res;
}
Index: sql_server.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_server.mx,v
retrieving revision 1.184
retrieving revision 1.185
diff -u -d -r1.184 -r1.185
--- sql_server.mx 13 Dec 2007 16:08:16 -0000 1.184
+++ sql_server.mx 3 Jan 2008 09:41:17 -0000 1.185
@@ -127,6 +127,8 @@
can be shipped to the front-end for display or exported over a
stream.
@m
+ .COMMAND mvc_result_file( mvc m, int nr_cols, str filename, str tsep,
str rsep, str ssep, BAT[oid,any] order ) : int = mvc_result_file_wrap; "Create
structure to cache a file query result"
+
.COMMAND mvc_result_table( mvc m, int nr_cols, int type, any order ) :
int = mvc_result_row_wrap; "Create structure to cache a row query result"
.COMMAND mvc_result_table( mvc m, int nr_cols, int type, BAT[oid,any]
order ) : int = mvc_result_table_wrap; "Create structure to cache a table query
result"
@@ -712,6 +714,21 @@
return m->results->id;
}
+int
+mvc_result_file_wrap(int *res_id, mvc *M, int *nr_cols, str filename, str
tsep, str rsep, str ssep, BAT *order )
+{
+ mvc *m = *(mvc**)M;
+ res_table *t = res_table_create(m->session->tr, m->result_id++,
*nr_cols, Q_TABLE, m->results, order);
+ m->results = t;
+ t->filename = _strdup(filename);
+ t->tsep = _strdup(tsep);
+ t->rsep = _strdup(rsep);
+ t->ssep = _strdup(ssep);
+ *res_id = t->id;
+ if (*res_id < 0)
+ return GDK_FAIL;
+ return GDK_SUCCEED;
+}
int
mvc_result_table_wrap(int *res_id, mvc *M, int *nr_cols, int *qtype, BAT
*order)
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_gencode.mx,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -d -r1.163 -r1.164
--- sql_gencode.mx 30 Dec 2007 18:23:49 -0000 1.163
+++ sql_gencode.mx 3 Jan 2008 09:41:17 -0000 1.164
@@ -1129,7 +1129,7 @@
case st_rs_column:
dump_2(sql, s, "find", nr);
break;
- case st_bulkinsert:{
+ case st_import:{
char *tname = s->op1.stval->op1.tval->base.name;
node *n = s->op2.lval->h;
char *sep = n->data;
@@ -1188,7 +1188,8 @@
backend_dump_nil(sql, s->op1.stval);
break;
}
- case st_output:{
+ case st_output:
+ case st_export:{
stmt *order = NULL;
stmt *lst = s->op1.stval;
@@ -1213,7 +1214,8 @@
f = n->data;
/* single value result, has a fast exit */
- if (cnt == 1 && !order && f->nrcols <= 0){
+ if (cnt == 1 && !order && f->nrcols <= 0 &&
+ s->type != st_export){
stmt *c = n->data;
sql_subtype *t = tail_type(c);
char *tname = table_name(c);
@@ -1254,7 +1256,17 @@
buflen += BUFSIZ;
buf = RENEW_ARRAY(char, buf, buflen);
}
- len = snprintf(buf, buflen, "var s%d :=
mvc_result_table(myc, %d, %d, s%d);\n", -s->nr, cnt, sql->mvc->type, order->nr);
+ if (s->type == st_export) {
+ int file =
backend_dumpstmt_(s->op4.stval, nr, sql);
+ node *n = s->op2.lval->h;
+ char *sep = n->data;
+ char *rsep = n->next->data;
+ char *ssep =
sql_escape_ident(n->next->next->data);
+ len = snprintf(buf, buflen, "var s%d :=
mvc_result_file(myc, %d, s%d, \"%s\", \"%s\", \"%s\", s%d);\n", -s->nr, cnt,
file, sep, rsep, ssep, order->nr);
+ _DELETE(ssep);
+ } else {
+ len = snprintf(buf, buflen, "var s%d :=
mvc_result_table(myc, %d, %d, s%d);\n", -s->nr, cnt, sql->mvc->type, order->nr);
+ }
assert(len <= buflen);
write_command(sql, buf);
write_part(sql, buf, len);
-------------------------------------------------------------------------
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