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

Reply via email to