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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list