Changeset: 7b3416a36c5d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7b3416a36c5d Modified Files: monetdb5/modules/mal/tablet.c monetdb5/modules/mal/tablet.h monetdb5/optimizer/opt_prelude.c monetdb5/optimizer/opt_prelude.h sql/backends/monet5/UDF/Tests/udf-fuse.stable.out sql/backends/monet5/UDF/Tests/udf-reverse.stable.out sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql.mal sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_result.c sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128 sql/benchmarks/tpch/Tests/01-explain.stable.out.int128 sql/benchmarks/tpch/Tests/02-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out.int128 sql/benchmarks/tpch/Tests/04-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out.int128 sql/benchmarks/tpch/Tests/07-explain.stable.out.int128 sql/benchmarks/tpch/Tests/08-explain.stable.out.int128 sql/benchmarks/tpch/Tests/09-explain.stable.out.int128 sql/benchmarks/tpch/Tests/10-explain.stable.out.int128 sql/benchmarks/tpch/Tests/11-explain.stable.out.int128 sql/benchmarks/tpch/Tests/12-explain.stable.out.int128 sql/benchmarks/tpch/Tests/13-explain.stable.out sql/benchmarks/tpch/Tests/15-explain.stable.out.int128 sql/benchmarks/tpch/Tests/16-explain.stable.out sql/benchmarks/tpch/Tests/18-explain.stable.out.int128 sql/benchmarks/tpch/Tests/20-explain.stable.out.int128 sql/benchmarks/tpch/Tests/21-explain.stable.out sql/benchmarks/tpch/Tests/22-explain.stable.out.int128 sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128 sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out sql/test/BugTracker/Tests/explain.SF-1739353.stable.out Branch: resultset Log Message:
New result set and export interface diffs (truncated from 2939 to 300 lines): diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c --- a/monetdb5/modules/mal/tablet.c +++ b/monetdb5/modules/mal/tablet.c @@ -227,7 +227,7 @@ TABLETcreate_bats(Tablet *as, BUN est) BAT ** TABLETcollect(Tablet *as) { - BAT **bats = GDKmalloc(sizeof(BAT *) * as->nr_attrs); + BAT **bats = GDKmalloc(sizeof(BAT *) * as->nr_attrs + 4); Column *fmt = as->format; BUN i; BUN cnt = BATcount(fmt[0].c); @@ -257,7 +257,7 @@ TABLETcollect(Tablet *as) BAT ** TABLETcollect_parts(Tablet *as, BUN offset) { - BAT **bats = GDKmalloc(sizeof(BAT *) * as->nr_attrs); + BAT **bats = GDKmalloc(sizeof(BAT *) * as->nr_attrs +4); Column *fmt = as->format; BUN i; BUN cnt = BATcount(fmt[0].c); diff --git a/monetdb5/modules/mal/tablet.h b/monetdb5/modules/mal/tablet.h --- a/monetdb5/modules/mal/tablet.h +++ b/monetdb5/modules/mal/tablet.h @@ -91,6 +91,10 @@ typedef struct Table_t { str error; /* last error */ int tryall; /* skip erroneous lines */ BAT *complaints; /* lines that did not match the required input */ + BAT *error_row; /* line number */ + BAT *error_fld; /* field with error */ + BAT *error_msg; /* reason */ + BAT *error_input; /* original input */ } Tablet; tablet_export BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, char *csep, char *rsep, char quote, lng skip, lng maxrow); diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c --- a/monetdb5/optimizer/opt_prelude.c +++ b/monetdb5/optimizer/opt_prelude.c @@ -71,7 +71,7 @@ str countRef; str subcountRef; str copyRef; str copy_fromRef; -str copy_intoRef; +str export_tableRef; str count_no_nilRef; str crossRef; str createRef; @@ -328,7 +328,7 @@ void optimizerInit(void) subcountRef = putName("subcount",8); copyRef = putName("copy",4); copy_fromRef = putName("copy_from",9); - copy_intoRef = putName("copy_into",9); + export_tableRef = putName("export_table",12); count_no_nilRef = putName("count_no_nil",12); crossRef = putName("crossproduct",12); createRef = putName("create",6); diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h --- a/monetdb5/optimizer/opt_prelude.h +++ b/monetdb5/optimizer/opt_prelude.h @@ -69,7 +69,7 @@ opt_export str countRef; opt_export str subcountRef; opt_export str copyRef; opt_export str copy_fromRef; -opt_export str copy_intoRef; +opt_export str export_tableRef; opt_export str count_no_nilRef; opt_export str crossRef; opt_export str createRef; diff --git a/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out b/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out --- a/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out +++ b/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out @@ -95,16 +95,16 @@ end s4_1; % clob # type % 78 # length function user.s8_1{autoCommit=true}():void; - X_24 := bat.new(nil:oid,nil:str); - X_33 := bat.append(X_24,"sys.L"); - X_27 := bat.new(nil:oid,nil:str); - X_35 := bat.append(X_27,"fuse_a"); + X_25 := bat.new(nil:oid,nil:str); + X_33 := bat.append(X_25,"sys.L"); X_28 := bat.new(nil:oid,nil:str); - X_37 := bat.append(X_28,"smallint"); - X_29 := bat.new(nil:oid,nil:int); - X_39 := bat.append(X_29,16); - X_31 := bat.new(nil:oid,nil:int); - X_41 := bat.append(X_31,0); + X_35 := bat.append(X_28,"fuse_a"); + X_29 := bat.new(nil:oid,nil:str); + X_37 := bat.append(X_29,"smallint"); + X_30 := bat.new(nil:oid,nil:int); + X_39 := bat.append(X_30,16); + X_32 := bat.new(nil:oid,nil:int); + X_41 := bat.append(X_32,0); X_2 := sql.mvc(); X_3:bat[:oid,:oid] := sql.tid(X_2,"sys","udf_fuse"); X_6:bat[:oid,:bte] := sql.bind(X_2,"sys","udf_fuse","a",0); @@ -127,16 +127,16 @@ end s8_1; % clob # type % 78 # length function user.s9_1{autoCommit=true}():void; - X_24 := bat.new(nil:oid,nil:str); - X_33 := bat.append(X_24,"sys.L"); - X_27 := bat.new(nil:oid,nil:str); - X_35 := bat.append(X_27,"fuse_c"); + X_25 := bat.new(nil:oid,nil:str); + X_33 := bat.append(X_25,"sys.L"); X_28 := bat.new(nil:oid,nil:str); - X_37 := bat.append(X_28,"int"); - X_29 := bat.new(nil:oid,nil:int); - X_39 := bat.append(X_29,32); - X_31 := bat.new(nil:oid,nil:int); - X_41 := bat.append(X_31,0); + X_35 := bat.append(X_28,"fuse_c"); + X_29 := bat.new(nil:oid,nil:str); + X_37 := bat.append(X_29,"int"); + X_30 := bat.new(nil:oid,nil:int); + X_39 := bat.append(X_30,32); + X_32 := bat.new(nil:oid,nil:int); + X_41 := bat.append(X_32,0); X_2 := sql.mvc(); X_3:bat[:oid,:oid] := sql.tid(X_2,"sys","udf_fuse"); X_6:bat[:oid,:sht] := sql.bind(X_2,"sys","udf_fuse","c",0); @@ -159,16 +159,16 @@ end s9_1; % clob # type % 78 # length function user.s10_1{autoCommit=true}():void; - X_24 := bat.new(nil:oid,nil:str); - X_33 := bat.append(X_24,"sys.L"); - X_27 := bat.new(nil:oid,nil:str); - X_35 := bat.append(X_27,"fuse_e"); + X_25 := bat.new(nil:oid,nil:str); + X_33 := bat.append(X_25,"sys.L"); X_28 := bat.new(nil:oid,nil:str); - X_37 := bat.append(X_28,"bigint"); - X_29 := bat.new(nil:oid,nil:int); - X_39 := bat.append(X_29,64); - X_31 := bat.new(nil:oid,nil:int); - X_41 := bat.append(X_31,0); + X_35 := bat.append(X_28,"fuse_e"); + X_29 := bat.new(nil:oid,nil:str); + X_37 := bat.append(X_29,"bigint"); + X_30 := bat.new(nil:oid,nil:int); + X_39 := bat.append(X_30,64); + X_32 := bat.new(nil:oid,nil:int); + X_41 := bat.append(X_32,0); X_2 := sql.mvc(); X_3:bat[:oid,:oid] := sql.tid(X_2,"sys","udf_fuse"); X_6:bat[:oid,:int] := sql.bind(X_2,"sys","udf_fuse","e",0); diff --git a/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out b/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out --- a/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out +++ b/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out @@ -84,16 +84,16 @@ end s2_1; % clob # type % 82 # length function user.s6_1{autoCommit=true}():void; - X_17 := bat.new(nil:oid,nil:str); - X_26 := bat.append(X_17,"sys.L"); - X_20 := bat.new(nil:oid,nil:str); - X_28 := bat.append(X_20,"reverse_x"); + X_18 := bat.new(nil:oid,nil:str); + X_26 := bat.append(X_18,"sys.L"); X_21 := bat.new(nil:oid,nil:str); - X_30 := bat.append(X_21,"clob"); - X_22 := bat.new(nil:oid,nil:int); - X_32 := bat.append(X_22,0); - X_24 := bat.new(nil:oid,nil:int); - X_33 := bat.append(X_24,0); + X_28 := bat.append(X_21,"reverse_x"); + X_22 := bat.new(nil:oid,nil:str); + X_30 := bat.append(X_22,"clob"); + X_23 := bat.new(nil:oid,nil:int); + X_32 := bat.append(X_23,0); + X_25 := bat.new(nil:oid,nil:int); + X_33 := bat.append(X_25,0); X_2 := sql.mvc(); X_3:bat[:oid,:oid] := sql.tid(X_2,"sys","udf_reverse"); X_6:bat[:oid,:str] := sql.bind(X_2,"sys","udf_reverse","x",0); diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -26,6 +26,7 @@ */ #include "monetdb_config.h" #include "sql.h" +#include "streams.h" #include "sql_result.h" #include "sql_gencode.h" #include <sql_storage.h> @@ -2314,89 +2315,6 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt return MAL_SUCCEED; } -static int -mvc_result_row(mvc *m, int nr_cols, int qtype) -{ - m->results = res_table_create(m->session->tr, m->result_id++, nr_cols, qtype, m->results, NULL); - return m->results->id; -} - -/* str mvc_result_row_wrap(int *res_id, int *nr_cols, int *qtype, int *o); */ -str -mvc_result_row_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) -{ - mvc *m = NULL; - str msg; - int *res_id = getArgReference_int(stk, pci, 0); - int *nr_cols = getArgReference_int(stk, pci, 1); - int *qtype = getArgReference_int(stk, pci, 2); - void *o = getArgReference(stk, pci, 3); - - if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL) - return msg; - if ((msg = checkSQLContext(cntxt)) != NULL) - return msg; - (void) o; /* dummy order */ - *res_id = mvc_result_row(m, *nr_cols, *qtype); - if (*res_id < 0) - throw(SQL, "sql.resultSet", "failed"); - return MAL_SUCCEED; -} - -/* str mvc_result_file_wrap(int *res_id, int *nr_cols, unsigned char* *T, unsigned char* *R, unsigned char* *S, unsigned char* *N, bat *order_bid); */ -str -mvc_result_file_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) -{ - str res = MAL_SUCCEED; - BAT *order = NULL; - mvc *m = NULL; - str msg; - res_table *t = NULL; - unsigned char *tsep = NULL, *rsep = NULL, *ssep = NULL, *ns = NULL; - ssize_t len; - int *res_id = getArgReference_int(stk, pci, 0); - int *nr_cols = getArgReference_int(stk, pci, 1); - unsigned char **T = (unsigned char **) getArgReference(stk, pci, 2); - unsigned char **R = (unsigned char **) getArgReference(stk, pci, 3); - unsigned char **S = (unsigned char **) getArgReference(stk, pci, 4); - unsigned char **N = (unsigned char **) getArgReference(stk, pci, 5); - int mtype = getArgType(mb, pci, 6); - - if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL) - return msg; - if ((msg = checkSQLContext(cntxt)) != NULL) - return msg; - if (isaBatType(mtype)) { - bat *order_bid = getArgReference_bat(stk, pci, 6); - if ((order = BATdescriptor(*order_bid)) == NULL) { - throw(SQL, "sql.resultSet", "Cannot access descriptor"); - } - } - m->results = t = res_table_create(m->session->tr, m->result_id++, *nr_cols, Q_TABLE, m->results, order); - len = strlen((char *) (*T)); - GDKstrFromStr(tsep = GDKmalloc(len + 1), *T, len); - len = 0; - len = strlen((char *) (*R)); - GDKstrFromStr(rsep = GDKmalloc(len + 1), *R, len); - len = 0; - len = strlen((char *) (*S)); - GDKstrFromStr(ssep = GDKmalloc(len + 1), *S, len); - len = 0; - len = strlen((char *) (*N)); - GDKstrFromStr(ns = GDKmalloc(len + 1), *N, len); - len = 0; - t->tsep = (char *) tsep; - t->rsep = (char *) rsep; - t->ssep = (char *) ssep; - t->ns = (char *) ns; - *res_id = t->id; - if (*res_id < 0) - res = createException(SQL, "sql.resultSet", "failed"); - if (order) - BBPunfix(order->batCacheid); - return res; -} - /* pattern resultSet{unsafe}(tbl:bat[:oid,:str], attr:bat[:oid,:str], tpe:bat[:oid,:str], len:bat[:oid,:int],scale:bat[:oid,:int], cols:bat[:oid,:any]...) :int */ /* New result set rendering infrastructure */ static str @@ -2472,47 +2390,67 @@ wrapup_result_set: /* Copy the result set into a CSV file */ str -mvc_copy_into_wrap( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +mvc_export_table_wrap( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { int *res_id =getArgReference_int(stk,pci,0); - str fname = *getArgReference_str(stk,pci,1); - str colsep = *getArgReference_str(stk,pci,2); - str rowsep = *getArgReference_str(stk,pci,3); - str quoterep = *getArgReference_str(stk,pci,4); - str nullrep = *getArgReference_str(stk,pci,5); - - bat tblId= *getArgReference_bat(stk, pci,6); - bat atrId= *getArgReference_bat(stk, pci,7); - bat tpeId= *getArgReference_bat(stk, pci,8); - bat lenId= *getArgReference_bat(stk, pci,9); - bat scaleId= *getArgReference_bat(stk, pci,10); + str filename = *getArgReference_str(stk,pci,1); + str format = *getArgReference_str(stk,pci,2); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list