Changeset: 34304387fcc2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=34304387fcc2
Added Files:
sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.sql
sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.stable.err
sql/test/BugTracker-2017/Tests/copy_into_crash.Bug-6404.stable.out
sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.sql
sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.stable.err
sql/test/BugTracker-2017/Tests/null_matches_in_outer.Bug-6398.stable.out
sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.err
sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.out
sql/test/bugs/Tests/unicode_varchar-bug-sf-1041324_JdbcClient.stable.out.Windows
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
monetdb5/modules/mal/tablet.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_statement.c
sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out
sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows
sql/include/sql_relation.h
sql/jdbc/tests/Tests/Test_CisValid.stable.out
sql/server/rel_optimizer.c
sql/server/rel_updates.c
sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out
sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
sql/test/BugTracker-2017/Tests/All
sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.sql
Branch: default
Log Message:
Merge with Jul2017 branch.
diffs (truncated from 1502 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -8335,19 +8335,15 @@ Ready.
[ "sql", "dec_round", "command sql.dec_round(v:int, r:int):int ",
"int_dec_round_wrap;", "round off the value v to nearests multiple of r"
]
[ "sql", "dec_round", "command sql.dec_round(v:lng, r:lng):lng ",
"lng_dec_round_wrap;", "round off the value v to nearests multiple of r"
]
[ "sql", "dec_round", "command sql.dec_round(v:sht, r:sht):sht ",
"sht_dec_round_wrap;", "round off the value v to nearests multiple of r"
]
-[ "sql", "declaredTable", "pattern
sql.declaredTable(name:str):int ", "mvc_declared_table_wrap;", "Prepare
a declared table" ]
[ "sql", "delete", "pattern sql.delete(mvc:int, sname:str,
tname:str, b:any):int ", "mvc_delete_wrap;", "Delete a row from a
table. Returns sequence number for order dependece." ]
[ "sql", "delta", "command sql.delta(col:bat[:any_3],
uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ", "DELTAbat2;", "Return
column bat with delta's applied." ]
[ "sql", "delta", "command sql.delta(col:bat[:any_3],
uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ",
"DELTAbat;", "Return column bat with delta's applied." ]
[ "sql", "dense_rank", "pattern sql.dense_rank(b:any_1, p:bit,
o:bit):int ", "SQLdense_rank;", "return the densely ranked groups"
]
[ "sql", "diff", "pattern sql.diff(b:any_1):bit ", "SQLdiff;",
"return true if cur != prev row" ]
[ "sql", "diff", "pattern sql.diff(p:bit, b:any_1):bit ",
"SQLdiff;", "return true if cur != prev row" ]
-[ "sql", "dropDeclaredTable", "pattern
sql.dropDeclaredTable(name:str):void ", "mvc_drop_declared_table_wrap;",
"drop a declared table" ]
-[ "sql", "dropDeclaredTables", "pattern
sql.dropDeclaredTables(nr:int):void ", "mvc_drop_declared_tables_wrap;",
"drop top n declared tables" ]
[ "sql", "drop_func_upgrade_oct2014", "pattern
sql.drop_func_upgrade_oct2014(id:int):int ", "UPGdrop_func;", "Drop
the function identified by id, needed for the Oct2014 upgrade" ]
[ "sql", "drop_hash", "pattern sql.drop_hash(sch:str, tbl:str):void
", "SQLdrop_hash;", "Drop hash indices for the given table" ]
[ "sql", "droporderindex", "pattern sql.droporderindex(sch:str,
tbl:str, col:str):void ", "sql_droporderindex;", "Drop the order index on a
column" ]
-[ "sql", "dtColumn", "pattern sql.dtColumn(rs:int, tname:str,
name:str, typename:str, digits:int, scale:int):void ",
"mvc_declared_table_column_wrap;", "" ]
[ "sql", "dump_cache", "pattern sql.dump_cache() (query:bat[:str],
count:bat[:int]) ", "dump_cache;", "dump the content of the query cache" ]
[ "sql", "dump_opt_stats", "pattern sql.dump_opt_stats()
(rewrite:bat[:str], count:bat[:int]) ", "dump_opt_stats;", "dump the
optimizer rewrite statistics" ]
[ "sql", "dump_trace", "pattern sql.dump_trace() (event:bat[:int],
clk:bat[:str], pc:bat[:str], thread:bat[:int], ticks:bat[:lng],
rssMB:bat[:lng], vmMB:bat[:lng], reads:bat[:lng], writes:bat[:lng],
minflt:bat[:lng], majflt:bat[:lng], nvcsw:bat[:lng], stmt:bat[:str]) ",
"dump_trace;", "dump the trace statistics" ]
@@ -8374,6 +8370,7 @@ Ready.
[ "sql", "getVariable", "pattern sql.getVariable(mvc:int,
varname:str):any_1 ", "getVariable;", "Get the value of a session variable" ]
[ "sql", "getVersion", "command sql.getVersion(clientid:int):lng ",
"mvc_getVersion;", "Return the database version identifier for a client."
]
[ "sql", "get_value", "pattern sql.get_value(sname:str,
sequence:str):lng ", "mvc_get_value;", "return the current value of the
sequence" ]
+[ "sql", "grow", "pattern sql.grow(tid:bat[:oid], X_0:any_1):int ",
"mvc_grow_wrap;", "Resize the tid column of a declared table." ]
[ "sql", "importTable", "pattern sql.importTable(sname:str, tname:str,
fname:str...):bat[:any]... ", "mvc_bin_import_table_wrap;", "Import a
table from the files (fname)" ]
[ "sql", "include", "pattern sql.include(fname:str):void ",
"SQLinclude;", "Compile and execute a sql statements on the file" ]
[ "sql", "init", "pattern sql.init():void ", "SQLinitEnvironment;",
"Initialize the environment for MAL" ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -10698,19 +10698,15 @@ Ready.
[ "sql", "dec_round", "command sql.dec_round(v:int, r:int):int ",
"int_dec_round_wrap;", "round off the value v to nearests multiple of r"
]
[ "sql", "dec_round", "command sql.dec_round(v:lng, r:lng):lng ",
"lng_dec_round_wrap;", "round off the value v to nearests multiple of r"
]
[ "sql", "dec_round", "command sql.dec_round(v:sht, r:sht):sht ",
"sht_dec_round_wrap;", "round off the value v to nearests multiple of r"
]
-[ "sql", "declaredTable", "pattern
sql.declaredTable(name:str):int ", "mvc_declared_table_wrap;", "Prepare
a declared table" ]
[ "sql", "delete", "pattern sql.delete(mvc:int, sname:str,
tname:str, b:any):int ", "mvc_delete_wrap;", "Delete a row from a
table. Returns sequence number for order dependece." ]
[ "sql", "delta", "command sql.delta(col:bat[:any_3],
uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ", "DELTAbat2;", "Return
column bat with delta's applied." ]
[ "sql", "delta", "command sql.delta(col:bat[:any_3],
uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ",
"DELTAbat;", "Return column bat with delta's applied." ]
[ "sql", "dense_rank", "pattern sql.dense_rank(b:any_1, p:bit,
o:bit):int ", "SQLdense_rank;", "return the densely ranked groups"
]
[ "sql", "diff", "pattern sql.diff(b:any_1):bit ", "SQLdiff;",
"return true if cur != prev row" ]
[ "sql", "diff", "pattern sql.diff(p:bit, b:any_1):bit ",
"SQLdiff;", "return true if cur != prev row" ]
-[ "sql", "dropDeclaredTable", "pattern
sql.dropDeclaredTable(name:str):void ", "mvc_drop_declared_table_wrap;",
"drop a declared table" ]
-[ "sql", "dropDeclaredTables", "pattern
sql.dropDeclaredTables(nr:int):void ", "mvc_drop_declared_tables_wrap;",
"drop top n declared tables" ]
[ "sql", "drop_func_upgrade_oct2014", "pattern
sql.drop_func_upgrade_oct2014(id:int):int ", "UPGdrop_func;", "Drop
the function identified by id, needed for the Oct2014 upgrade" ]
[ "sql", "drop_hash", "pattern sql.drop_hash(sch:str, tbl:str):void
", "SQLdrop_hash;", "Drop hash indices for the given table" ]
[ "sql", "droporderindex", "pattern sql.droporderindex(sch:str,
tbl:str, col:str):void ", "sql_droporderindex;", "Drop the order index on a
column" ]
-[ "sql", "dtColumn", "pattern sql.dtColumn(rs:int, tname:str,
name:str, typename:str, digits:int, scale:int):void ",
"mvc_declared_table_column_wrap;", "" ]
[ "sql", "dump_cache", "pattern sql.dump_cache() (query:bat[:str],
count:bat[:int]) ", "dump_cache;", "dump the content of the query cache" ]
[ "sql", "dump_opt_stats", "pattern sql.dump_opt_stats()
(rewrite:bat[:str], count:bat[:int]) ", "dump_opt_stats;", "dump the
optimizer rewrite statistics" ]
[ "sql", "dump_trace", "pattern sql.dump_trace() (event:bat[:int],
clk:bat[:str], pc:bat[:str], thread:bat[:int], ticks:bat[:lng],
rssMB:bat[:lng], vmMB:bat[:lng], reads:bat[:lng], writes:bat[:lng],
minflt:bat[:lng], majflt:bat[:lng], nvcsw:bat[:lng], stmt:bat[:str]) ",
"dump_trace;", "dump the trace statistics" ]
@@ -10737,6 +10733,7 @@ Ready.
[ "sql", "getVariable", "pattern sql.getVariable(mvc:int,
varname:str):any_1 ", "getVariable;", "Get the value of a session variable" ]
[ "sql", "getVersion", "command sql.getVersion(clientid:int):lng ",
"mvc_getVersion;", "Return the database version identifier for a client."
]
[ "sql", "get_value", "pattern sql.get_value(sname:str,
sequence:str):lng ", "mvc_get_value;", "return the current value of the
sequence" ]
+[ "sql", "grow", "pattern sql.grow(tid:bat[:oid], X_0:any_1):int ",
"mvc_grow_wrap;", "Resize the tid column of a declared table." ]
[ "sql", "importTable", "pattern sql.importTable(sname:str, tname:str,
fname:str...):bat[:any]... ", "mvc_bin_import_table_wrap;", "Import a
table from the files (fname)" ]
[ "sql", "include", "pattern sql.include(fname:str):void ",
"SQLinclude;", "Compile and execute a sql statements on the file" ]
[ "sql", "init", "pattern sql.init():void ", "SQLinitEnvironment;",
"Initialize the environment for MAL" ]
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
@@ -133,7 +133,7 @@ str
TABLETcreate_bats(Tablet *as, BUN est)
{
Column *fmt = as->format;
- BUN i;
+ BUN i, nr = 0;
for (i = 0; i < as->nr_attrs; i++) {
if (fmt[i].skip)
@@ -147,7 +147,10 @@ TABLETcreate_bats(Tablet *as, BUN est)
throw(SQL, "copy", "Failed to create bat of size "
BUNFMT "\n", as->nr);
}
fmt[i].ci = bat_iterator(fmt[i].c);
+ nr++;
}
+ if (!nr)
+ throw(SQL, "copy", "At least one column should be read from the
input\n");
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -357,7 +357,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
stmt *r = exp_bin(be, e->l, left, right, grp, ext, cnt,
sel);
return stmt_assign(be, e->name, r,
GET_PSM_LEVEL(e->flag));
} else if (e->flag & PSM_VAR) {
- if (e->f) /* TODO TABLE */
+ if (e->f)
return stmt_vars(be, e->name, e->f, 1,
GET_PSM_LEVEL(e->flag));
else
return stmt_var(be, e->name, &e->tpe, 1,
GET_PSM_LEVEL(e->flag));
@@ -365,6 +365,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
sql_exp *l = e->l;
stmt *r = exp_bin(be, l, left, right, grp, ext, cnt,
sel);
+ if (!r)
+ return NULL;
/* handle table returning functions */
if (l->type == e_psm && l->flag & PSM_REL) {
stmt *lst = r->op1;
@@ -1952,11 +1954,12 @@ rel2bin_semijoin(backend *be, sql_rel *r
idx = 1;
/* stop on first non equality join */
if (!join) {
+ if (en->next && s->type != st_join && s->type
!= st_join2 && s->type != st_joinN)
+ break;
join = s;
} else if (s->type != st_join && s->type != st_join2 &&
s->type != st_joinN) {
/* handle select expressions */
- assert(0);
- return NULL;
+ break;
}
if (s->type == st_join || s->type == st_join2 ||
s->type == st_joinN) {
list_append(lje, s->op1);
@@ -1986,7 +1989,7 @@ rel2bin_semijoin(backend *be, sql_rel *r
/* construct relation */
nl = sa_list(sql->sa);
- /* first project using equi-joins */
+ /* first project after equi-joins */
for( n = left->op4.lval->h; n; n = n->next ) {
stmt *c = n->data;
const char *rnme = table_name(sql->sa, c);
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
@@ -1089,6 +1089,42 @@ str mvc_append_column(sql_trans *t, sql_
return MAL_SUCCEED;
}
+/*mvc_grow_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */
+str
+mvc_grow_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ int *res = getArgReference_int(stk, pci, 0);
+ bat Tid = *getArgReference_bat(stk, pci, 1);
+ ptr Ins = getArgReference(stk, pci, 2);
+ int tpe = getArgType(mb, pci, 2);
+ BAT *tid = 0, *ins = 0;
+ size_t cnt = 1;
+ oid v = 0;
+
+ (void)cntxt;
+ *res = 0;
+ if ((tid = BATdescriptor(Tid)) == NULL)
+ throw(SQL, "sql.grow", "Cannot access descriptor");
+ if (tpe > GDKatomcnt)
+ tpe = TYPE_bat;
+ if (tpe == TYPE_bat && (ins = BATdescriptor(*(int *) Ins)) == NULL)
+ throw(SQL, "sql.append", "Cannot access descriptor");
+ if (ins) {
+ cnt = BATcount(ins);
+ BBPunfix(ins->batCacheid);
+ }
+ if (BATcount(tid))
+ v = *Tloc(tid, BATcount(tid)-1)+1;
+ for(;cnt>0; cnt--, v++) {
+ if (BUNappend(tid, &v, FALSE) != GDK_SUCCEED) {
+ BBPunfix(Tid);
+ throw(SQL, "sql", MAL_MALLOC_FAIL);
+ }
+ }
+ BBPunfix(Tid);
+ return MAL_SUCCEED;
+}
+
/*mvc_append_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */
str
mvc_append_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
@@ -2263,112 +2299,6 @@ mvc_table_result_wrap(Client cntxt, MalB
return res;
}
-/* str mvc_declared_table_wrap(int *res_id, str *name); */
-str
-mvc_declared_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
-{
- mvc *m = NULL;
- str msg;
- sql_schema *s = NULL;
- int *res_id = getArgReference_int(stk, pci, 0);
- const char *name = *getArgReference_str(stk, pci, 1);
-
- if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- s = mvc_bind_schema(m, dt_schema);
- if (s == NULL)
- throw(SQL, "sql.declared_table", SQLSTATE(3F000) "Schema
missing %s",dt_schema);
- (void) mvc_create_table(m, s, name, tt_table, TRUE, SQL_DECLARED_TABLE,
CA_DROP, 0);
- *res_id = 0;
- return MAL_SUCCEED;
-}
-
-/* str mvc_declared_table_column_wrap(int *ret, int *rs, str *tname, str
*name, str *type, int *digits, int *scale); */
-str
-mvc_declared_table_column_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci)
-{
- mvc *m = NULL;
- str msg;
- sql_schema *s = NULL;
- sql_table *t = NULL;
- sql_type *type = NULL;
- sql_subtype tpe;
- int rs = *getArgReference_int(stk, pci, 1);
- const char *tname = *getArgReference_str(stk, pci, 2);
- const char *name = *getArgReference_str(stk, pci, 3);
- const char *typename = *getArgReference_str(stk, pci, 4);
- int digits = *getArgReference_int(stk, pci, 5);
- int scale = *getArgReference_int(stk, pci, 6);
-
- if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- if (rs != 0)
- throw(SQL, "sql.dtColumn", SQLSTATE(HY005) "Cannot access
declared table");
- if (!sql_find_subtype(&tpe, typename, digits, scale) && (type =
mvc_bind_type(m, typename)) == NULL)
- throw(SQL, "sql.dtColumn", SQLSTATE(42S22) "Cannot find column
type");
- if (type)
- sql_init_subtype(&tpe, type, 0, 0);
- s = mvc_bind_schema(m, dt_schema);
- if (s == NULL)
- throw(SQL, "sql.declared_table_column", SQLSTATE(3F000) "Schema
missing %s",dt_schema);
- t = mvc_bind_table(m, s, tname);
- if (t == NULL)
- throw(SQL, "sql.declared_table_column", SQLSTATE(42S02) "Table
missing");
- (void) mvc_create_column(m, t, name, &tpe);
- return MAL_SUCCEED;
-}
-
-str
-mvc_drop_declared_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci)
-{
- mvc *m = NULL;
- const char *name = *getArgReference_str(stk, pci, 1);
- str msg;
- sql_schema *s = NULL;
- sql_table *t = NULL;
-
- if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- s = mvc_bind_schema(m, dt_schema);
- if (s == NULL)
- throw(SQL, "sql.drop", SQLSTATE(3F000) "Schema missing
%s",dt_schema);
- t = mvc_bind_table(m, s, name);
- if (t == NULL)
- throw(SQL, "sql.drop", SQLSTATE(42S02) "Table missing");
- (void) mvc_drop_table(m, s, t, 0);
- return MAL_SUCCEED;
-}
-
-str
-mvc_drop_declared_tables_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci)
-{
- mvc *m = NULL;
- int i = *getArgReference_int(stk, pci, 1);
- str msg;
- sql_schema *s = NULL;
- sql_table *t = NULL;
-
- if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- s = mvc_bind_schema(m, dt_schema);
- if (s == NULL)
- throw(SQL, "sql.drop", SQLSTATE(3F000) "Schema missing
%s",dt_schema);
- while (i && s->tables.set->t) {
- t = s->tables.set->t->data;
- (void) mvc_drop_table(m, s, t, 0);
- i--;
- }
- return MAL_SUCCEED;
-}
-
/* str mvc_affected_rows_wrap(int *m, int m, lng *nr, str *w); */
str
mvc_affected_rows_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -67,6 +67,7 @@ sql5_export str SQLshutdown_wrap(Client
sql5_export str SQLtransaction2(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str SQLcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
+sql5_export str mvc_grow_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str mvc_append_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str mvc_append_column(sql_trans *t, sql_column *c, BAT *ins);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list