Changeset: ced8b287140b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ced8b287140b
Branch: Oct2020
Log Message:
merged
diffs (164 lines):
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -398,14 +398,10 @@ char *
case SQL_NOP: {
dnode *lst = se->data.lval->h, *ops =
lst->next->next->data.lval->h, *aux;
const char *op = symbol_escape_ident(sql->ta,
qname_schema_object(lst->data.lval)),
- *sname = qname_schema(lst->data.lval);
+ *sname = symbol_escape_ident(sql->ta,
qname_schema(lst->data.lval));
int i = 0, nargs = 0;
char** inputs = NULL, *res;
- size_t inputs_length = 0;
-
- if (!sname)
- sname = sql->session->schema->base.name;
- sname = symbol_escape_ident(sql->ta, sname);
+ size_t inputs_length = 0, extra = sname ? strlen(sname) + 3 : 0;
for (aux = ops; aux; aux = aux->next)
nargs++;
@@ -420,8 +416,11 @@ char *
i++;
}
- if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(sname) +
strlen(op) + inputs_length + 6 + (nargs - 1 /* commas */) + 2))) {
- char *concat = stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res,
"\""), sname), "\".\""), op), "\"(");
+ if ((res = SA_NEW_ARRAY(sql->ta, char, extra + strlen(op) +
inputs_length + 3 + (nargs - 1 /* commas */) + 2))) {
+ char *concat = res;
+ if (sname)
+ concat = stpcpy(stpcpy(stpcpy(res, "\""),
sname), "\".");
+ concat = stpcpy(stpcpy(stpcpy(concat, "\""), op),
"\"(");
i = 0;
for (aux = ops; aux; aux = aux->next) {
concat = stpcpy(concat, inputs[i]);
@@ -432,55 +431,56 @@ char *
concat = stpcpy(concat, ")");
}
return res;
- } break;
+ }
case SQL_BINOP: {
dnode *lst = se->data.lval->h;
const char *op = symbol_escape_ident(sql->ta,
qname_schema_object(lst->data.lval)),
- *sname = qname_schema(lst->data.lval);
+ *sname = symbol_escape_ident(sql->ta,
qname_schema(lst->data.lval));
char *l = NULL, *r = NULL, *res;
-
- if (!sname)
- sname = sql->session->schema->base.name;
- sname = symbol_escape_ident(sql->ta, sname);
+ size_t extra = sname ? strlen(sname) + 3 : 0;
if (!(l = _symbol2string(sql, lst->next->next->data.sym,
expression, err)) || !(r = _symbol2string(sql, lst->next->next->next->data.sym,
expression, err)))
return NULL;
- if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(sname) +
strlen(op) + strlen(l) + strlen(r) + 9)))
-
stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res, "\""),
sname), "\".\""), op), "\"("), l), ","), r), ")");
-
+ if ((res = SA_NEW_ARRAY(sql->ta, char, extra + strlen(op) +
strlen(l) + strlen(r) + 6))) {
+ char *concat = res;
+ if (sname)
+ concat = stpcpy(stpcpy(stpcpy(res, "\""),
sname), "\".");
+
stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(concat, "\""), op), "\"("),
l), ","), r), ")");
+ }
return res;
- } break;
+ }
case SQL_OP: {
dnode *lst = se->data.lval->h;
const char *op = symbol_escape_ident(sql->ta,
qname_schema_object(lst->data.lval)),
- *sname = qname_schema(lst->data.lval);
+ *sname = symbol_escape_ident(sql->ta,
qname_schema(lst->data.lval));
char *res;
+ size_t extra = sname ? strlen(sname) + 3 : 0;
- if (!sname)
- sname = sql->session->schema->base.name;
- sname = symbol_escape_ident(sql->ta, sname);
-
- if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(sname) +
strlen(op) + 8)))
- stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res, "\""), sname),
"\".\""), op), "\"()");
-
+ if ((res = SA_NEW_ARRAY(sql->ta, char, extra + strlen(op) +
5))) {
+ char *concat = res;
+ if (sname)
+ concat = stpcpy(stpcpy(stpcpy(res, "\""),
sname), "\".");
+ stpcpy(stpcpy(stpcpy(concat, "\""), op), "\"()");
+ }
return res;
- } break;
+ }
case SQL_UNOP: {
dnode *lst = se->data.lval->h;
const char *op = symbol_escape_ident(sql->ta,
qname_schema_object(lst->data.lval)),
- *sname = qname_schema(lst->data.lval);
+ *sname = symbol_escape_ident(sql->ta,
qname_schema(lst->data.lval));
char *l = _symbol2string(sql, lst->next->next->data.sym,
expression, err), *res;
+ size_t extra = sname ? strlen(sname) + 3 : 0;
- if (!sname)
- sname = sql->session->schema->base.name;
- sname = symbol_escape_ident(sql->ta, sname);
if (!l)
return NULL;
- if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(sname) +
strlen(op) + strlen(l) + 8)))
- stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res,
"\""), sname), "\".\""), op), "\"("), l), ")");
-
+ if ((res = SA_NEW_ARRAY(sql->ta, char, extra + strlen(op) +
strlen(l) + 5))) {
+ char *concat = res;
+ if (sname)
+ concat = stpcpy(stpcpy(stpcpy(res, "\""),
sname), "\".");
+ stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(concat, "\""), op),
"\"("), l), ")");
+ }
return res;
}
case SQL_PARAMETER:
@@ -541,9 +541,8 @@ char *
dlist *dl = se->data.lval;
char *val = NULL, *tpe = NULL, *res;
- if (!(val = _symbol2string(sql, dl->h->data.sym, expression,
err)) || !(tpe = subtype2string2(sql->ta, &dl->h->next->data.typeval))) {
+ if (!(val = _symbol2string(sql, dl->h->data.sym, expression,
err)) || !(tpe = subtype2string2(sql->ta, &dl->h->next->data.typeval)))
return NULL;
- }
if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(val) +
strlen(tpe) + 11)))
stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res, "cast("), val),
" as "), tpe), ")");
return res;
diff --git a/sql/test/merge-partitions/Tests/mergepart20.sql
b/sql/test/merge-partitions/Tests/mergepart20.sql
--- a/sql/test/merge-partitions/Tests/mergepart20.sql
+++ b/sql/test/merge-partitions/Tests/mergepart20.sql
@@ -1,4 +1,4 @@
-CREATE MERGE TABLE testme (a int, b varchar(32)) PARTITION BY RANGE USING
(md5(a));
+CREATE MERGE TABLE testme (a int, b varchar(32)) PARTITION BY RANGE USING
(sys.md5(a));
CREATE TABLE subtable1 (a int, b varchar(32));
CREATE TABLE subtable2 (a int, b varchar(32));
SELECT column_id, expression FROM table_partitions;
@@ -25,7 +25,7 @@ CREATE MERGE TABLE testme (a int, b varc
CREATE FUNCTION iamdummy(a int) RETURNS INT BEGIN RETURN a + 1; END;
-CREATE MERGE TABLE testme (a int, b varchar(32)) PARTITION BY RANGE USING
(iamdummy(a));
+CREATE MERGE TABLE testme (a int, b varchar(32)) PARTITION BY RANGE USING
(sys.iamdummy(a));
CREATE TABLE subtable1 (a int, b varchar(32));
CREATE TABLE subtable2 (a int, b varchar(32));
CREATE TABLE subtable3 (a int, b varchar(32));
@@ -54,7 +54,7 @@ DROP TABLE testme;
DROP FUNCTION iamdummy;
CREATE FUNCTION iamdummy(a int, b int, c int) RETURNS INT BEGIN RETURN a + b +
c; END;
-CREATE MERGE TABLE testme(d int, e int, f int) PARTITION BY RANGE USING
(iamdummy(d, e, f));
+CREATE MERGE TABLE testme(d int, e int, f int) PARTITION BY RANGE USING
(sys.iamdummy(d, e, f));
SELECT column_id, expression FROM table_partitions;
DROP TABLE testme;
DROP FUNCTION iamdummy;
@@ -62,7 +62,7 @@ DROP FUNCTION iamdummy;
/* Testing bad expressions */
CREATE FUNCTION iamdummy(a int) RETURNS INT BEGIN RETURN SELECT a UNION ALL
SELECT a; END;
-CREATE MERGE TABLE testme(a int) PARTITION BY RANGE USING (iamdummy(a));
+CREATE MERGE TABLE testme(a int) PARTITION BY RANGE USING (sys.iamdummy(a));
CREATE TABLE subtable1 (a int);
ALTER TABLE testme ADD TABLE subtable1 AS PARTITION FROM RANGE MINVALUE TO
RANGE MAXVALUE;
INSERT INTO testme VALUES (1); --error, more than one row
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list