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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list