Changeset: b165c80af1f8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b165c80af1f8
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
monetdb5/modules/mal/wlc.mal
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sqlcatalog.mal
sql/backends/monet5/wlr.mal
sql/scripts/22_clients.sql
sql/server/rel_propagate.c
sql/server/rel_psm.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/server/rel_updates.c
sql/test/BugTracker-2015/Tests/window_function_crash.Bug-3861.stable.err
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
sql/test/subquery/Tests/subquery3.sql
sql/test/subquery/Tests/subquery3.stable.err
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: default
Log Message:
Merged with linear-hashing
diffs (truncated from 840 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
@@ -11572,6 +11572,7 @@ stdout of test 'MAL-signatures` in direc
[ "sqlcatalog", "alter_add_value_partition", "pattern
sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str,
ptnme:str, nills:int, update:int):void ",
"SQLalter_add_value_partition;", "Catalog operation
alter_add_value_partition" ]
[ "sqlcatalog", "alter_add_value_partition", "pattern
sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str,
ptnme:str, nills:int, update:int, arg:any...):void ",
"SQLalter_add_value_partition;", "Catalog operation
alter_add_value_partition" ]
[ "sqlcatalog", "alter_del_table", "pattern
sqlcatalog.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str,
action:int):void ", "SQLalter_del_table;", "Catalog operation
alter_del_table" ]
+[ "sqlcatalog", "alter_seq", "pattern
sqlcatalog.alter_seq(sname:str, seqname:str, seq:ptr, val:bat[:lng]):void ",
"SQLalter_seq;", "Catalog operation alter_seq" ]
[ "sqlcatalog", "alter_seq", "pattern
sqlcatalog.alter_seq(sname:str, seqname:str, seq:ptr, val:lng):void ",
"SQLalter_seq;", "Catalog operation alter_seq" ]
[ "sqlcatalog", "alter_set_table", "pattern
sqlcatalog.alter_set_table(sname:str, tnme:str, access:int):void ",
"SQLalter_set_table;", "Catalog operation alter_set_table" ]
[ "sqlcatalog", "alter_table", "pattern
sqlcatalog.alter_table(sname:str, tname:str, tbl:ptr, action:int):void ",
"SQLalter_table;", "Catalog operation alter_table" ]
@@ -11789,6 +11790,7 @@ stdout of test 'MAL-signatures` in direc
[ "wlc", "alter_add_value_partition", "pattern
wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int):void ", "WLCgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlc", "alter_add_value_partition", "pattern
wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int, arg:str...):void ", "WLCgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlc", "alter_del_table", "pattern wlc.alter_del_table(sname:str,
mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLCgeneric;",
"Catalog operation alter_del_table" ]
+[ "wlc", "alter_seq", "pattern wlc.alter_seq(sname:str, seqname:str,
seq:ptr, val:bat[:lng]):void ", "WLCgeneric;", "Catalog operation alter_seq"
]
[ "wlc", "alter_seq", "pattern wlc.alter_seq(sname:str, seqname:str,
val:lng):void ", "WLCgeneric;", "Catalog operation alter_seq" ]
[ "wlc", "alter_set_table", "pattern wlc.alter_set_table(sname:str,
tnme:str, access:int):void ", "WLCgeneric;", "Catalog operation
alter_set_table" ]
[ "wlc", "alter_table", "pattern wlc.alter_table(sname:str, tname:str,
action:int):void ", "WLCgeneric;", "Catalog operation alter_table" ]
@@ -11858,6 +11860,7 @@ stdout of test 'MAL-signatures` in direc
[ "wlr", "alter_add_value_partition", "pattern
wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int):void ", "WLRgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlr", "alter_add_value_partition", "pattern
wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int, arg:str...):void ", "WLRgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlr", "alter_del_table", "pattern wlr.alter_del_table(sname:str,
mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLRgeneric;",
"Catalog operation alter_del_table" ]
+[ "wlr", "alter_seq", "pattern wlr.alter_seq(sname:str, seqname:str,
seq:ptr, val:bat[:lng]):void ", "WLRgeneric;", "Catalog operation alter_seq"
]
[ "wlr", "alter_seq", "pattern wlr.alter_seq(sname:str, seqname:str,
val:lng):void ", "WLRgeneric;", "Catalog operation alter_seq" ]
[ "wlr", "alter_set_table", "pattern wlr.alter_set_table(sname:str,
tnme:str, access:int):void ", "WLRgeneric;", "Catalog operation
alter_set_table" ]
[ "wlr", "alter_table", "pattern wlr.alter_table(sname:str, tname:str,
action:int):void ", "WLRgeneric;", "Catalog operation alter_table" ]
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
@@ -16016,6 +16016,7 @@ stdout of test 'MAL-signatures` in direc
[ "sqlcatalog", "alter_add_value_partition", "pattern
sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str,
ptnme:str, nills:int, update:int):void ",
"SQLalter_add_value_partition;", "Catalog operation
alter_add_value_partition" ]
[ "sqlcatalog", "alter_add_value_partition", "pattern
sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str,
ptnme:str, nills:int, update:int, arg:any...):void ",
"SQLalter_add_value_partition;", "Catalog operation
alter_add_value_partition" ]
[ "sqlcatalog", "alter_del_table", "pattern
sqlcatalog.alter_del_table(sname:str, mtnme:str, psnme:str, ptnme:str,
action:int):void ", "SQLalter_del_table;", "Catalog operation
alter_del_table" ]
+[ "sqlcatalog", "alter_seq", "pattern
sqlcatalog.alter_seq(sname:str, seqname:str, seq:ptr, val:bat[:lng]):void ",
"SQLalter_seq;", "Catalog operation alter_seq" ]
[ "sqlcatalog", "alter_seq", "pattern
sqlcatalog.alter_seq(sname:str, seqname:str, seq:ptr, val:lng):void ",
"SQLalter_seq;", "Catalog operation alter_seq" ]
[ "sqlcatalog", "alter_set_table", "pattern
sqlcatalog.alter_set_table(sname:str, tnme:str, access:int):void ",
"SQLalter_set_table;", "Catalog operation alter_set_table" ]
[ "sqlcatalog", "alter_table", "pattern
sqlcatalog.alter_table(sname:str, tname:str, tbl:ptr, action:int):void ",
"SQLalter_table;", "Catalog operation alter_table" ]
@@ -16234,6 +16235,7 @@ stdout of test 'MAL-signatures` in direc
[ "wlc", "alter_add_value_partition", "pattern
wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int):void ", "WLCgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlc", "alter_add_value_partition", "pattern
wlc.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int, arg:str...):void ", "WLCgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlc", "alter_del_table", "pattern wlc.alter_del_table(sname:str,
mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLCgeneric;",
"Catalog operation alter_del_table" ]
+[ "wlc", "alter_seq", "pattern wlc.alter_seq(sname:str, seqname:str,
seq:ptr, val:bat[:lng]):void ", "WLCgeneric;", "Catalog operation alter_seq"
]
[ "wlc", "alter_seq", "pattern wlc.alter_seq(sname:str, seqname:str,
val:lng):void ", "WLCgeneric;", "Catalog operation alter_seq" ]
[ "wlc", "alter_set_table", "pattern wlc.alter_set_table(sname:str,
tnme:str, access:int):void ", "WLCgeneric;", "Catalog operation
alter_set_table" ]
[ "wlc", "alter_table", "pattern wlc.alter_table(sname:str, tname:str,
action:int):void ", "WLCgeneric;", "Catalog operation alter_table" ]
@@ -16303,6 +16305,7 @@ stdout of test 'MAL-signatures` in direc
[ "wlr", "alter_add_value_partition", "pattern
wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int):void ", "WLRgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlr", "alter_add_value_partition", "pattern
wlr.alter_add_value_partition(sname:str, mtnme:str, psnme:str, ptnme:str,
nills:int, update:int, arg:str...):void ", "WLRgeneric;", "Catalog operation
alter_add_value_partition" ]
[ "wlr", "alter_del_table", "pattern wlr.alter_del_table(sname:str,
mtnme:str, psnme:str, ptnme:str, action:int):void ", "WLRgeneric;",
"Catalog operation alter_del_table" ]
+[ "wlr", "alter_seq", "pattern wlr.alter_seq(sname:str, seqname:str,
seq:ptr, val:bat[:lng]):void ", "WLRgeneric;", "Catalog operation alter_seq"
]
[ "wlr", "alter_seq", "pattern wlr.alter_seq(sname:str, seqname:str,
val:lng):void ", "WLRgeneric;", "Catalog operation alter_seq" ]
[ "wlr", "alter_set_table", "pattern wlr.alter_set_table(sname:str,
tnme:str, access:int):void ", "WLRgeneric;", "Catalog operation
alter_set_table" ]
[ "wlr", "alter_table", "pattern wlr.alter_table(sname:str, tname:str,
action:int):void ", "WLRgeneric;", "Catalog operation alter_table" ]
diff --git a/monetdb5/modules/mal/wlc.mal b/monetdb5/modules/mal/wlc.mal
--- a/monetdb5/modules/mal/wlc.mal
+++ b/monetdb5/modules/mal/wlc.mal
@@ -99,6 +99,10 @@ pattern alter_seq( sname:str, seqname:st
address WLCgeneric
comment "Catalog operation alter_seq";
+pattern alter_seq( sname:str, seqname:str, seq:ptr, val:bat[:lng])
+address WLCgeneric
+comment "Catalog operation alter_seq";
+
pattern drop_seq( sname:str, nme:str, action:int)
address WLCgeneric
comment "Catalog operation drop_seq";
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
@@ -1309,7 +1309,7 @@ rel_parse_value(backend *be, char *query
if (sn->selection->h->data.sym->token == SQL_COLUMN ||
sn->selection->h->data.sym->token == SQL_IDENT) {
sql_rel *rel = NULL;
sql_query *query = query_create(m);
- sql_exp *e = rel_value_exp2(query, &rel,
sn->selection->h->data.sym->data.lval->h->data.sym, sql_sel, ek);
+ sql_exp *e = rel_value_exp2(query, &rel,
sn->selection->h->data.sym->data.lval->h->data.sym, sql_sel | sql_values, ek);
if (!rel)
s = exp_bin(be, e, NULL, NULL, NULL, NULL,
NULL, NULL);
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -975,14 +975,31 @@ SQLalter_seq(Client cntxt, MalBlkPtr mb,
str seqname = *getArgReference_str(stk, pci, 2);
sql_sequence *s = *(sql_sequence **) getArgReference(stk, pci, 3);
lng *val = NULL;
+ BAT *b = NULL;
initcontext();
if (getArgType(mb, pci, 4) == TYPE_lng)
val = getArgReference_lng(stk, pci, 4);
+ else if (isaBatType(getArgType(mb, pci, 4))) {
+ bat *bid = getArgReference_bat(stk, pci, 4);
+
+ if (!(b = BATdescriptor(*bid)))
+ throw(SQL, "sql.alter_seq", SQLSTATE(HY005) "Cannot
access column descriptor");
+ if (BATcount(b) != 1) {
+ BBPunfix(b->batCacheid);
+ throw(SQL, "sql.alter_seq", SQLSTATE(42000) "Only one
value allowed to alter a sequence value");
+ }
+ if (getBatType(getArgType(mb, pci, 4)) == TYPE_lng)
+ val = (lng*)Tloc(b, 0);
+ }
+
if (val == NULL || is_lng_nil(*val))
msg = createException(SQL,"sql.alter_seq", SQLSTATE(42M36)
"ALTER SEQUENCE: cannot (re)start with NULL");
else
msg = alter_seq(sql, sname, seqname, s, val);
+
+ if (b)
+ BBPunfix(b->batCacheid);
return msg;
}
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2923,7 +2923,7 @@ stmt_Nop(backend *be, stmt *ops, sql_sub
return NULL;
mod = sql_func_mod(f->func);
fimp = sql_func_imp(f->func);
- if (o && o->nrcols > 0 && f->func->type != F_LOADER) {
+ if (o && o->nrcols > 0 && f->func->type != F_LOADER && f->func->type !=
F_PROC) {
sql_subtype *res = f->res->h->data;
fimp = convertMultiplexFcn(fimp);
q = NULL;
diff --git a/sql/backends/monet5/sqlcatalog.mal
b/sql/backends/monet5/sqlcatalog.mal
--- a/sql/backends/monet5/sqlcatalog.mal
+++ b/sql/backends/monet5/sqlcatalog.mal
@@ -15,6 +15,10 @@ pattern alter_seq( sname:str, seqname:st
address SQLalter_seq
comment "Catalog operation alter_seq";
+pattern alter_seq( sname:str, seqname:str, seq:ptr, val:bat[:lng])
+address SQLalter_seq
+comment "Catalog operation alter_seq";
+
pattern drop_seq( sname:str, nme:str, action:int)
address SQLdrop_seq
comment "Catalog operation drop_seq";
diff --git a/sql/backends/monet5/wlr.mal b/sql/backends/monet5/wlr.mal
--- a/sql/backends/monet5/wlr.mal
+++ b/sql/backends/monet5/wlr.mal
@@ -103,6 +103,10 @@ pattern alter_seq( sname:str, seqname:st
address WLRgeneric
comment "Catalog operation alter_seq";
+pattern alter_seq( sname:str, seqname:str, seq:ptr, val:bat[:lng])
+address WLRgeneric
+comment "Catalog operation alter_seq";
+
pattern drop_seq( sname:str, nme:str, action:int)
address WLRgeneric
comment "Catalog operation drop_seq";
diff --git a/sql/scripts/22_clients.sql b/sql/scripts/22_clients.sql
--- a/sql/scripts/22_clients.sql
+++ b/sql/scripts/22_clients.sql
@@ -26,15 +26,15 @@ returns table(
)
external name sql.sessions;
create view sys.sessions as select * from sys.sessions();
-/* we won't grant sys.sessions to the public */
+-- we won't grant sys.sessions to the public
-- routines to bring the system down quickly
-create procedure sys.shutdown("delay" tinyint)
+create procedure sys.shutdown(delay tinyint)
external name sql.shutdown;
-/* we won't grant sys.shutdown to the public */
-create procedure sys.shutdown("delay" tinyint, "force" bool)
+-- we won't grant sys.shutdown to the public
+create procedure sys.shutdown(delay tinyint, force bool)
external name sql.shutdown;
-/* we won't grant sys.shutdown to the public */
+-- we won't grant sys.shutdown to the public
-- control the query and session time out.
-- As of December 2019, the procedures settimeout and setsession are
deprecated.
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -160,7 +160,7 @@ generate_partition_limits(sql_query *que
return exp_atom(sql->sa, amax);
} else {
exp_kind ek = {type_value, card_value, FALSE};
- sql_exp *e = rel_value_exp2(query, r, s, sql_sel, ek);
+ sql_exp *e = rel_value_exp2(query, r, s, sql_sel | sql_values, ek);
if (!e)
return NULL;
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -80,7 +80,7 @@ psm_set_exp(sql_query *query, dnode *n)
tpe = stack_find_type(sql, name);
}
- e = rel_value_exp2(query, &rel, val, sql_sel, ek);
+ e = rel_value_exp2(query, &rel, val, sql_sel | sql_update_set,
ek);
if (!e)
return NULL;
if (e->card > CARD_AGGR) {
@@ -154,7 +154,7 @@ rel_psm_call(sql_query * query, symbol *
exp_kind ek = {type_value, card_none, FALSE};
sql_rel *rel = NULL;
- res = rel_value_exp(query, &rel, se, sql_sel, ek);
+ res = rel_value_exp(query, &rel, se, sql_sel | psm_call, ek);
if (!res || rel || ((t=exp_subtype(res)) && t->type)) /* only
procedures */
return sql_error(sql, 01, SQLSTATE(42000) "Function calls are
ignored");
return res;
diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -13,7 +13,7 @@
#include "sql_relation.h"
#include "sql_semantic.h"
-#define sql_from (1 << 0)
+#define sql_from (1 << 0) //ORed
#define sql_where (1 << 1)
#define sql_sel (1 << 2)
#define sql_having (1 << 3)
@@ -26,7 +26,8 @@
#define sql_outer (1 << 10) //ORed
#define sql_group_totals (1 << 11) //ORed
#define sql_update_set (1 << 12) //ORed
-#define sql_update_where (1 << 13) //ORed
+#define sql_values (1 << 13) //ORed
+#define psm_call (1 << 14) //ORed
#define is_sql_from(X) ((X & sql_from) == sql_from)
#define is_sql_where(X) ((X & sql_where) == sql_where)
@@ -41,7 +42,8 @@
#define is_sql_outer(X) ((X & sql_outer) == sql_outer)
#define is_sql_group_totals(X) ((X & sql_group_totals) == sql_group_totals)
#define is_sql_update_set(X) ((X & sql_update_set) == sql_update_set)
-#define is_sql_update_where(X) ((X & sql_update_where) == sql_update_where)
+#define is_sql_values(X) ((X & sql_values) == sql_values)
+#define is_psm_call(X) ((X & psm_call) == psm_call)
#define is_updateble(rel) \
(rel->op == op_basetable || \
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -641,7 +641,7 @@ rel_named_table_function(sql_query *quer
return NULL;
} else {
for ( ; n; n = n->next) {
- sql_exp *e = rel_value_exp(query,
&outer, n->data.sym, sql_sel, iek);
+ sql_exp *e = rel_value_exp(query,
&outer, n->data.sym, sql_sel | sql_from, iek);
if (!e)
return NULL;
@@ -808,7 +808,7 @@ rel_values(sql_query *query, symbol *tab
for (n = values->h, m = exps->h; n && m; n = n->next, m
= m->next) {
sql_exp *vals = m->data;
list *vals_list = vals->f;
- sql_exp *e = rel_value_exp(query, NULL,
n->data.sym, sql_sel, ek);
+ sql_exp *e = rel_value_exp(query, NULL,
n->data.sym, sql_sel | sql_values, ek);
if (!e)
return NULL;
list_append(vals_list, e);
@@ -3226,7 +3226,7 @@ static sql_exp *
sql_subfunc *a = NULL;
int no_nil = 0, group = 0, has_freevar = 0;
unsigned int all_freevar = 0;
- sql_rel *groupby = *rel, *sel = NULL, *gr, *og = NULL, *res = groupby;
+ sql_rel *groupby = rel ? *rel : NULL, *sel = NULL, *gr, *og = NULL,
*res = groupby;
sql_rel *subquery = NULL;
list *exps = NULL;
bool is_grouping = !strcmp(aname, "grouping"), has_args = false;
@@ -3246,9 +3246,9 @@ static sql_exp *
if (uaname)
GDKfree(uaname);
return e;
- } else if (is_sql_update_where(f)) { /* the is_sql_update_where
test must come before is_sql_where, because is_sql_update_where are handled
with sql_where */
+ } else if (is_sql_values(f)) {
char *uaname = GDKmalloc(strlen(aname) + 1);
- sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in WHERE clauses inside UPDATE statements (use
subquery)",
+ sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed inside a list of VALUES",
uaname ? toUpperCopy(uaname,
aname) : aname);
if (uaname)
GDKfree(uaname);
@@ -3269,7 +3269,7 @@ static sql_exp *
return e;
} else if (is_sql_update_set(f)) {
char *uaname = GDKmalloc(strlen(aname) + 1);
- sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in UPDATE SET clause (use subquery)",
+ sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s:
aggregate functions not allowed in SET clause (use subquery)",
uaname ? toUpperCopy(uaname,
aname) : aname);
if (uaname)
GDKfree(uaname);
@@ -3281,6 +3281,20 @@ static sql_exp *
if (uaname)
GDKfree(uaname);
return e;
+ } else if (is_psm_call(f)) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list