Changeset: c1a5cb65f0ca for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c1a5cb65f0ca
Modified Files:
        sql/backends/monet5/sql.c
        sql/server/rel_schema.c
        sql/test/SQLancer/Tests/sqlancer04.test
        sql/test/SQLancer/Tests/sqlancer08.test
        sql/test/SQLancer/Tests/sqlancer17.test
        sql/test/miscellaneous/Tests/simple_selects.test
Branch: default
Log Message:

Disallow ANY type as a column type (causes issues in the storage)


diffs (125 lines):

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
@@ -600,6 +600,8 @@ create_table_from_emit(Client cntxt, cha
 
                if (columns[i].name && columns[i].name[0] == '%')
                        throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE 
TABLE: generated labels not allowed in column names, use an alias instead");
+               if (tpe.type->eclass == EC_ANY)
+                       throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE 
TABLE: any type (plain null value) not allowed as a column type, use an 
explicit cast");
                switch (mvc_create_column(&col, sql, t, columns[i].name, &tpe)) 
{
                        case -1:
                                throw(SQL, "sql.catalog", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -150,6 +150,12 @@ as_subquery(mvc *sql, sql_table *t, tabl
                        if (tt != tt_view && cname && cname[0] == '%') {
                                sql_error(sql, 01, SQLSTATE(42000) "%s: 
generated labels not allowed in column names, use an alias instead", msg);
                                return -1;
+                       } else if (!tp) {
+                               sql_error(sql, 01, SQLSTATE(42000) "%s: columns 
must have a type defined", msg);
+                               return -1;
+                       } else if (tp->type->eclass == EC_ANY) {
+                               sql_error(sql, 01, SQLSTATE(42000) "%s: any 
type (plain null value) not allowed as a column type, use an explicit cast", 
msg);
+                               return -1;
                        } else if (mvc_bind_column(sql, t, cname)) {
                                sql_error(sql, 01, SQLSTATE(42S21) "%s: 
duplicate column name %s", msg, cname);
                                return -1;
@@ -171,21 +177,24 @@ as_subquery(mvc *sql, sql_table *t, tabl
                        return -1;
                }
        } else {
-               node *m;
-
-               for (m = r->exps->h; m; m = m->next) {
+               for (node *m = r->exps->h; m; m = m->next) {
                        sql_exp *e = m->data;
                        const char *cname = exp_name(e);
                        sql_subtype *tp = exp_subtype(e);
                        sql_column *col = NULL;
 
-                       if (tt != tt_view && cname && cname[0] == '%') {
+                       if (!cname)
+                               cname = "v";
+                       if (tt != tt_view && cname[0] == '%') {
                                sql_error(sql, 01, SQLSTATE(42000) "%s: 
generated labels not allowed in column names, use an alias instead", msg);
                                return -1;
-                       }
-                       if (!cname)
-                               cname = "v";
-                       if (mvc_bind_column(sql, t, cname)) {
+                       } else if (!tp) {
+                               sql_error(sql, 01, SQLSTATE(42000) "%s: columns 
must have a type defined", msg);
+                               return -1;
+                       } else if (tp->type->eclass == EC_ANY) {
+                               sql_error(sql, 01, SQLSTATE(42000) "%s: any 
type (plain null value) not allowed as a column type, use an explicit cast", 
msg);
+                               return -1;
+                       } else if (mvc_bind_column(sql, t, cname)) {
                                sql_error(sql, 01, SQLSTATE(42S21) "%s: 
duplicate column name %s", msg, cname);
                                return -1;
                        }
@@ -864,6 +873,9 @@ create_column(sql_query *query, symbol *
                if (!isView(t) && cname && cname[0] == '%') {
                        sql_error(sql, 01, SQLSTATE(42000) "%s TABLE: generated 
labels not allowed in column names, use an alias instead", 
(alter)?"ALTER":"CREATE");
                        return SQL_ERR;
+               } else if (ctype->type->eclass == EC_ANY) {
+                       sql_error(sql, 01, SQLSTATE(42000) "%s TABLE: any type 
(plain null value) not allowed as a column type, use an explicit cast", 
(alter)?"ALTER":"CREATE");
+                       return SQL_ERR;
                } else if ((cs = find_sql_column(t, cname))) {
                        sql_error(sql, 02, SQLSTATE(42S21) "%s TABLE: a column 
named '%s' already exists\n", (alter)?"ALTER":"CREATE", cname);
                        return SQL_ERR;
@@ -1081,6 +1093,7 @@ table_element(sql_query *query, symbol *
                                sql_error(sql, 02, SQLSTATE(42S21) "%s: a 
column named '%s' already exists\n", action, oc->base.name);
                                return SQL_ERR;
                        }
+                       assert(oc->type.type->eclass != EC_ANY);
                        switch (mvc_create_column(&nc, sql, t, oc->base.name, 
&oc->type)) {
                                case -1:
                                        sql_error(sql, 01, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
diff --git a/sql/test/SQLancer/Tests/sqlancer04.test 
b/sql/test/SQLancer/Tests/sqlancer04.test
--- a/sql/test/SQLancer/Tests/sqlancer04.test
+++ b/sql/test/SQLancer/Tests/sqlancer04.test
@@ -688,7 +688,7 @@ create view v38(vc0) as (select all cast
 
 statement ok
 create view v43(vc0, vc1) as (select distinct cast(case 
0.635420284843984273237538218381814658641815185546875 when
-0.94514286975825123615635448004468344151973724365234375 then 0.8788786 end as 
bigint), null
+0.94514286975825123615635448004468344151973724365234375 then 0.8788786 end as 
bigint), cast(null as clob)
 where ((-1975284152)<=(17772))) with check option
 
 query I rowsort
diff --git a/sql/test/SQLancer/Tests/sqlancer08.test 
b/sql/test/SQLancer/Tests/sqlancer08.test
--- a/sql/test/SQLancer/Tests/sqlancer08.test
+++ b/sql/test/SQLancer/Tests/sqlancer08.test
@@ -247,7 +247,7 @@ statement ok rowcount 9
 INSERT INTO "salesmart" VALUES 
('pT펈*1.{'),('1870507234'),('27825'),('/aF⯗u'),('10545346022400.000'),(''),('-1533465369'),(''),('29781')
 
 statement ok
-create view v2(vc0, vc1) as (select all 
sign(((820356984)*(scale_down(0.53676551856816223651236441583023406565189361572265625,
 0.5695062)))), null)
+create view v2(vc0, vc1) as (select all 
sign(((820356984)*(scale_down(0.53676551856816223651236441583023406565189361572265625,
 0.5695062)))), cast(null as clob))
 
 query I rowsort
 select cast(sum(count) as bigint) from (select all cast(true as int) as count 
from v2 join salesmart on not ((salesmart.city) between asymmetric 
(trim(salesmart.city, v2.vc1)) and ('0.43353835334391844'))) as res
diff --git a/sql/test/SQLancer/Tests/sqlancer17.test 
b/sql/test/SQLancer/Tests/sqlancer17.test
--- a/sql/test/SQLancer/Tests/sqlancer17.test
+++ b/sql/test/SQLancer/Tests/sqlancer17.test
@@ -359,7 +359,7 @@ SELECT json.tojsonarray('<') FROM t1, t2
 [ "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<" ]
 
 statement ok
-create or replace view v30(vc0) as (select null)
+create or replace view v30(vc0) as (select cast(null as clob))
 
 query I nosort
 select json."isvalid"(CAST(v30.vc0 AS JSON)) FROM v30
diff --git a/sql/test/miscellaneous/Tests/simple_selects.test 
b/sql/test/miscellaneous/Tests/simple_selects.test
--- a/sql/test/miscellaneous/Tests/simple_selects.test
+++ b/sql/test/miscellaneous/Tests/simple_selects.test
@@ -881,3 +881,6 @@ select json 'iamwrongjson'
 statement error
 select inet '192.168.1.0/26 thisstringshouldnotbehere'
 
+statement error 42000!CREATE TABLE: any type (plain null value) not allowed as 
a column type, use an explicit cast
+create table x as (select null as sname)
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to