Changeset: 49b0b1eff2b3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/49b0b1eff2b3
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_upgrades.c
        sql/backends/monet5/sql_user.c
        sql/common/sql_types.c
        sql/scripts/52_describe.sql
        sql/server/rel_exp.c
        sql/server/rel_updates.c
        sql/server/rel_xml.c
        sql/server/sql_parser.y
        sql/server/sql_semantic.c
        sql/storage/store.c
Branch: cleanup_types
Log Message:

Make CLOB an alias of VARCHAR, set type of literal strings to VARCHAR.
Mostly done by Niels.


diffs (truncated from 369 to 300 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
@@ -644,7 +644,7 @@ create_table_from_emit(Client cntxt, cha
                sql_column *col = NULL;
 
                if (!strcmp(atomname, "str"))
-                       sql_find_subtype(&tpe, "clob", 0, 0);
+                       sql_find_subtype(&tpe, "varchar", 0, 0);
                else {
                        sql_subtype *t = sql_bind_localtype(atomname);
                        if (!t)
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -166,7 +166,7 @@ SQLsetTrace(Client cntxt, MalBlkPtr mb)
                throw(SQL, "sql.statement", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        }
        q = pushArgument(mb,q, k);
-       q = pushStr(mb,q,"clob");
+       q = pushStr(mb,q,"varchar");
        pushInstruction(mb, q);
 
        resultset = pushArgument(mb,resultset, getArg(q,0));
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1746,7 +1746,7 @@ rel_print(mvc *sql, sql_rel *rel, int de
                        nl, nl);
        mnstr_printf(fd, "%% .plan # table_name\n");
        mnstr_printf(fd, "%% rel # name\n");
-       mnstr_printf(fd, "%% clob # type\n");
+       mnstr_printf(fd, "%% varchar # type\n");
        mnstr_printf(fd, "%% %zu # length\n", len - 1 /* remove = */);
 
        /* output the data */
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
@@ -139,7 +139,7 @@ stmt_atom_string_nil(backend *be)
 {
        sql_subtype t;
 
-       sql_find_subtype(&t, "clob", 0, 0);
+       sql_find_subtype(&t, "varchar", 0, 0);
        return stmt_atom(be, atom_string(be->mvc->sa, &t, NULL));
 }
 
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -174,7 +174,14 @@ check_sys_tables(Client c, mvc *m, sql_s
                                                         "update sys._columns 
set type_digits = 15 where type = 'smallint' and type_digits <> 15;\n"
                                                         "update sys._columns 
set type_digits = 31 where type = 'int' and type_digits <> 31;\n"
                                                         "update sys._columns 
set type_digits = 63 where type = 'bigint' and type_digits <> 63;\n"
-                                                        "update sys._columns 
set type_digits = 127 where type = 'hugeint' and type_digits <> 127;\n",
+                                                        "update sys._columns 
set type_digits = 127 where type = 'hugeint' and type_digits <> 127;\n"
+                                                        "update sys._columns 
set type = 'varchar' where type in ('clob', 'char') and table_id in (select id 
from sys._tables where system and name <> 'netcdf_files');\n"
+                                                        "update sys.args set 
type_digits = 7 where type = 'tinyint' and type_digits <> 7;\n"
+                                                        "update sys.args set 
type_digits = 15 where type = 'smallint' and type_digits <> 15;\n"
+                                                        "update sys.args set 
type_digits = 31 where type = 'int' and type_digits <> 31;\n"
+                                                        "update sys.args set 
type_digits = 63 where type = 'bigint' and type_digits <> 63;\n"
+                                                        "update sys.args set 
type_digits = 127 where type = 'hugeint' and type_digits <> 127;\n"
+                                                        "update sys.args set 
type = 'varchar' where type in ('clob', 'char');\n",
                                                         "update", true, false, 
NULL);
        if (err)
                return err;
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -414,7 +414,7 @@ monet5_create_privileges(ptr _mvc, sql_s
        mvc_create_column_(&col, m, t, "name", "varchar", 1024);
        mvc_create_column_(&col, m, t, "fullname", "varchar", 2048);
        mvc_create_column_(&col, m, t, "default_schema", "int", 9);
-       mvc_create_column_(&col, m, t, "schema_path", "clob", 0);
+       mvc_create_column_(&col, m, t, "schema_path", "varchar", 0);
        mvc_create_column_(&col, m, t, "max_memory", "bigint", 64);
        mvc_create_column_(&col, m, t, "max_workers", "int", 32);
        mvc_create_column_(&col, m, t, "optimizer", "varchar", 1024);
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -560,8 +560,8 @@ supertype_opt_string(sql_subtype *super,
        lsuper = *r;
        /* EC_STRING class is superior to EC_CHAR */
        if (EC_VARCHAR(i->type->eclass) && EC_VARCHAR(r->type->eclass)) {
-               if (!strcmp(i->type->base.name, "clob") || 
!strcmp(r->type->base.name, "clob")) {
-                       lsuper = !strcmp(i->type->base.name, "clob") ? *i : *r;
+               if (!strcmp(i->type->base.name, "varchar") || 
!strcmp(r->type->base.name, "varchar")) {
+                       lsuper = !strcmp(i->type->base.name, "varchar") ? *i : 
*r;
                        radix = lsuper.type->radix;
                        tpe = lsuper.type->base.name;
                        eclass = lsuper.type->eclass;
@@ -926,7 +926,7 @@ static void
 sqltypeinit( sql_allocator *sa)
 {
        sql_type *ts[100];
-       sql_type **strings, **numerical;
+       sql_type **numerical;
        sql_type **decimals, **floats, **dates, **t;
        sql_type *STR, *BTE, *SHT, *INT, *LNG, *OID, *FLT, *DBL, *DEC;
 #ifdef HAVE_HGE
@@ -950,10 +950,7 @@ sqltypeinit( sql_allocator *sa)
        BIT = *t++ = sql_create_type(sa, "BOOLEAN", 1, 0, 2, EC_BIT, "bit");
        sql_create_alias(sa, BIT->base.name, "BOOL");
 
-       strings = t;
-       /* create clob type first, so functions by default will bind to the 
clob version which doesn't require length validation on some cases */
-       STR = *t++ = sql_create_type(sa, "CLOB",    0, 0, 0, EC_STRING, "str");
-       *t++ = sql_create_type(sa, "VARCHAR", 0, 0, 0, EC_STRING, "str");
+       STR = *t++ = sql_create_type(sa, "VARCHAR", 0, 0, 0, EC_STRING, "str");
        *t++ = sql_create_type(sa, "CHAR",    0, 0, 0, EC_CHAR,   "str");
 
        numerical = t;
@@ -1648,56 +1645,55 @@ sqltypeinit( sql_allocator *sa)
        sql_create_func(sa, "second", "mtime", "seconds", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, SECINT);
        sql_create_func(sa, "epoch_ms", "mtime", "epoch_ms", FALSE, FALSE, 
SCALE_NONE, 3, BigDEC, 1, SECINT);
 
-       for (t = strings; t < numerical; t++) {
-               sql_create_func(sa, "next_value_for", "sql", "next_value", 
TRUE, FALSE, SCALE_NONE, 0, LNG, 2, *t, *t);
-               sql_create_func(sa, "get_value_for", "sql", "get_value", TRUE, 
FALSE, SCALE_NONE, 0, LNG, 2, *t, *t);
-               sql_create_func(sa, "restart", "sql", "restart", TRUE, FALSE, 
SCALE_NONE, 0, LNG, 3, *t, *t, LNG);
+       sql_create_func(sa, "next_value_for", "sql", "next_value", TRUE, FALSE, 
SCALE_NONE, 0, LNG, 2, STR, STR);
+       sql_create_func(sa, "get_value_for", "sql", "get_value", TRUE, FALSE, 
SCALE_NONE, 0, LNG, 2, STR, STR);
+       sql_create_func(sa, "restart", "sql", "restart", TRUE, FALSE, 
SCALE_NONE, 0, LNG, 3, STR, STR, LNG);
 
-               sql_create_func(sa, "locate", "str", "locate", FALSE, FALSE, 
SCALE_NONE, 0, INT, 2, *t, *t);
-               sql_create_func(sa, "locate", "str", "locate3", FALSE, FALSE, 
SCALE_NONE, 0, INT, 3, *t, *t, INT);
-               sql_create_func(sa, "charindex", "str", "locate", FALSE, FALSE, 
SCALE_NONE, 0, INT, 2, *t, *t);
-               sql_create_func(sa, "charindex", "str", "locate3", FALSE, 
FALSE, SCALE_NONE, 0, INT, 3, *t, *t, INT);
-               sql_create_func(sa, "splitpart", "str", "splitpart", FALSE, 
FALSE, INOUT, 0, *t, 3, *t, *t, INT);
-               sql_create_func(sa, "substring", "str", "substring", FALSE, 
FALSE, INOUT, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "substring", "str", "substring3", FALSE, 
FALSE, INOUT, 0, *t, 3, *t, INT, INT);
-               sql_create_func(sa, "substr", "str", "substring", FALSE, FALSE, 
INOUT, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "substr", "str", "substring3", FALSE, 
FALSE, INOUT, 0, *t, 3, *t, INT, INT);
+       sql_create_func(sa, "locate", "str", "locate", FALSE, FALSE, 
SCALE_NONE, 0, INT, 2, STR, STR);
+       sql_create_func(sa, "locate", "str", "locate3", FALSE, FALSE, 
SCALE_NONE, 0, INT, 3, STR, STR, INT);
+       sql_create_func(sa, "charindex", "str", "locate", FALSE, FALSE, 
SCALE_NONE, 0, INT, 2, STR, STR);
+       sql_create_func(sa, "charindex", "str", "locate3", FALSE, FALSE, 
SCALE_NONE, 0, INT, 3, STR, STR, INT);
+       sql_create_func(sa, "splitpart", "str", "splitpart", FALSE, FALSE, 
INOUT, 0, STR, 3, STR, STR, INT);
+       sql_create_func(sa, "substring", "str", "substring", FALSE, FALSE, 
INOUT, 0, STR, 2, STR, INT);
+       sql_create_func(sa, "substring", "str", "substring3", FALSE, FALSE, 
INOUT, 0, STR, 3, STR, INT, INT);
+       sql_create_func(sa, "substr", "str", "substring", FALSE, FALSE, INOUT, 
0, STR, 2, STR, INT);
+       sql_create_func(sa, "substr", "str", "substring3", FALSE, FALSE, INOUT, 
0, STR, 3, STR, INT, INT);
 
-               sql_create_filter(sa, "like", "algebra", "like", FALSE, FALSE, 
SCALE_NONE, 0, 4, *t, *t, *t, BIT);
-               sql_create_filter(sa, "not_like", "algebra", "not_like", FALSE, 
FALSE, SCALE_NONE, 0, 4, *t, *t, *t, BIT);
+       sql_create_filter(sa, "like", "algebra", "like", FALSE, FALSE, 
SCALE_NONE, 0, 4, STR, STR, STR, BIT);
+       sql_create_filter(sa, "not_like", "algebra", "not_like", FALSE, FALSE, 
SCALE_NONE, 0, 4, STR, STR, STR, BIT);
 
-               sql_create_func(sa, "patindex", "pcre", "patindex", FALSE, 
FALSE, SCALE_NONE, 0, INT, 2, *t, *t);
-               sql_create_func(sa, "truncate", "str", "stringleft", FALSE, 
FALSE, SCALE_NONE, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "concat", "calc", "+", FALSE, FALSE, 
DIGITS_ADD, 0, *t, 2, *t, *t);
-               sql_create_func(sa, "ascii", "str", "ascii", TRUE, FALSE, 
SCALE_NONE, 0, INT, 1, *t); /* ascii of empty string is null */
-               sql_create_func(sa, "code", "str", "unicode", FALSE, FALSE, 
SCALE_NONE, 0, *t, 1, INT);
-               sql_create_func(sa, "length", "str", "length", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, *t);
-               sql_create_func(sa, "right", "str", "stringright", FALSE, 
FALSE, SCALE_NONE, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "left", "str", "stringleft", FALSE, FALSE, 
SCALE_NONE, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "upper", "str", "toUpper", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "ucase", "str", "toUpper", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "lower", "str", "toLower", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "lcase", "str", "toLower", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "btrim", "str", "trim", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "btrim", "str", "trim2", FALSE, FALSE, 
INOUT, 0, *t, 2, *t, *t);
-               sql_create_func(sa, "ltrim", "str", "ltrim", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "ltrim", "str", "ltrim2", FALSE, FALSE, 
INOUT, 0, *t, 2, *t, *t);
-               sql_create_func(sa, "rtrim", "str", "rtrim", FALSE, FALSE, 
INOUT, 0, *t, 1, *t);
-               sql_create_func(sa, "rtrim", "str", "rtrim2", FALSE, FALSE, 
INOUT, 0, *t, 2, *t, *t);
+       sql_create_func(sa, "patindex", "pcre", "patindex", FALSE, FALSE, 
SCALE_NONE, 0, INT, 2, STR, STR);
+       sql_create_func(sa, "truncate", "str", "stringleft", FALSE, FALSE, 
SCALE_NONE, 0, STR, 2, STR, INT);
+       sql_create_func(sa, "concat", "calc", "+", FALSE, FALSE, DIGITS_ADD, 0, 
STR, 2, STR, STR);
+       sql_create_func(sa, "ascii", "str", "ascii", TRUE, FALSE, SCALE_NONE, 
0, INT, 1, STR); /* ascii of empty string is null */
+       sql_create_func(sa, "code", "str", "unicode", FALSE, FALSE, SCALE_NONE, 
0, STR, 1, INT);
+       sql_create_func(sa, "length", "str", "length", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, STR);
+       sql_create_func(sa, "right", "str", "stringright", FALSE, FALSE, 
SCALE_NONE, 0, STR, 2, STR, INT);
+       sql_create_func(sa, "left", "str", "stringleft", FALSE, FALSE, 
SCALE_NONE, 0, STR, 2, STR, INT);
+       sql_create_func(sa, "upper", "str", "toUpper", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "ucase", "str", "toUpper", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "lower", "str", "toLower", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "lcase", "str", "toLower", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "btrim", "str", "trim", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "btrim", "str", "trim2", FALSE, FALSE, INOUT, 0, 
STR, 2, STR, STR);
+       sql_create_func(sa, "ltrim", "str", "ltrim", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "ltrim", "str", "ltrim2", FALSE, FALSE, INOUT, 0, 
STR, 2, STR, STR);
+       sql_create_func(sa, "rtrim", "str", "rtrim", FALSE, FALSE, INOUT, 0, 
STR, 1, STR);
+       sql_create_func(sa, "rtrim", "str", "rtrim2", FALSE, FALSE, INOUT, 0, 
STR, 2, STR, STR);
 
-               sql_create_func(sa, "lpad", "str", "lpad", FALSE, FALSE, 
SCALE_NONE, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "lpad", "str", "lpad3", FALSE, FALSE, 
SCALE_NONE, 0, *t, 3, *t, INT, *t);
-               sql_create_func(sa, "rpad", "str", "rpad", FALSE, FALSE, 
SCALE_NONE, 0, *t, 2, *t, INT);
-               sql_create_func(sa, "rpad", "str", "rpad3", FALSE, FALSE, 
SCALE_NONE, 0, *t, 3, *t, INT, *t);
+       sql_create_func(sa, "lpad", "str", "lpad", FALSE, FALSE, SCALE_NONE, 0, 
STR, 2, STR, INT);
+       sql_create_func(sa, "lpad", "str", "lpad3", FALSE, FALSE, SCALE_NONE, 
0, STR, 3, STR, INT, STR);
+       sql_create_func(sa, "rpad", "str", "rpad", FALSE, FALSE, SCALE_NONE, 0, 
STR, 2, STR, INT);
+       sql_create_func(sa, "rpad", "str", "rpad3", FALSE, FALSE, SCALE_NONE, 
0, STR, 3, STR, INT, STR);
 
-               sql_create_func(sa, "insert", "str", "insert", FALSE, FALSE, 
SCALE_NONE, 0, *t, 4, *t, INT, INT, *t);
-               sql_create_func(sa, "replace", "str", "replace", FALSE, FALSE, 
SCALE_NONE, 0, *t, 3, *t, *t, *t);
-               sql_create_func(sa, "repeat", "str", "repeat", TRUE, FALSE, 
SCALE_NONE, 0, *t, 2, *t, INT); /* repeat -1 times is null */
-               sql_create_func(sa, "space", "str", "space", TRUE, FALSE, 
SCALE_NONE, 0, *t, 1, INT); /* space -1 times is null */
-               sql_create_func(sa, "char_length", "str", "length", FALSE, 
FALSE, SCALE_NONE, 0, INT, 1, *t);
-               sql_create_func(sa, "character_length", "str", "length", FALSE, 
FALSE, SCALE_NONE, 0, INT, 1, *t);
-               sql_create_func(sa, "octet_length", "str", "nbytes", FALSE, 
FALSE, SCALE_NONE, 0, INT, 1, *t);
-       }
+       sql_create_func(sa, "insert", "str", "insert", FALSE, FALSE, 
SCALE_NONE, 0, STR, 4, STR, INT, INT, STR);
+       sql_create_func(sa, "replace", "str", "replace", FALSE, FALSE, 
SCALE_NONE, 0, STR, 3, STR, STR, STR);
+       sql_create_func(sa, "repeat", "str", "repeat", TRUE, FALSE, SCALE_NONE, 
0, STR, 2, STR, INT); /* repeat -1 times is null */
+       sql_create_func(sa, "space", "str", "space", TRUE, FALSE, SCALE_NONE, 
0, STR, 1, INT); /* space -1 times is null */
+       sql_create_func(sa, "char_length", "str", "length", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, STR);
+       sql_create_func(sa, "character_length", "str", "length", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, STR);
+       sql_create_func(sa, "octet_length", "str", "nbytes", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, STR);
+
        /* copyfrom fname (arg 12) */
        f = sql_create_union(sa, "copyfrom", "sql", "copy_from", TRUE, 
SCALE_FIX, 0, TABLE, 12, PTR, STR, STR, STR, STR, STR, LNG, LNG, INT, STR, INT, 
INT);
        f->varres = 1;
diff --git a/sql/scripts/52_describe.sql b/sql/scripts/52_describe.sql
--- a/sql/scripts/52_describe.sql
+++ b/sql/scripts/52_describe.sql
@@ -195,7 +195,7 @@ BEGIN
          ELSE 'TIME(' || (digits - 1) || ')'
        END || ' WITH TIME ZONE'
       WHEN 'tinyint' THEN 'TINYINT'
-      WHEN 'varchar' THEN 'CHARACTER VARYING(' || digits || ')'
+      WHEN 'varchar' THEN CASE WHEN digits then 'CHARACTER VARYING(' || digits 
|| ')' ELSE 'CHARACTER VARYING' END
       ELSE
         CASE
           WHEN lower(ctype) = ctype THEN upper(ctype)
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -553,7 +553,7 @@ exp_atom_clob(sql_allocator *sa, const c
 {
        sql_subtype clob;
 
-       sql_find_subtype(&clob, "clob", 0, 0);
+       sql_find_subtype(&clob, "varchar", 0, 0);
        return exp_atom(sa, atom_string(sa, &clob, s?sa_strdup(sa, s):NULL));
 }
 
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1708,7 +1708,7 @@ copyfrom(sql_query *query, dlist *qname,
                                char *fname = sa_alloc(sql->sa, l+8);
 
                                snprintf(fname, l+8, "str_to_%s", 
strcmp(cs->type.type->base.name, "timestamptz") == 0 ? "timestamp" : 
cs->type.type->base.name);
-                               sql_find_subtype(&st, "clob", 0, 0);
+                               sql_find_subtype(&st, "varchar", 0, 0);
                                if (!(f = sql_bind_func_result(sql, "sys", 
fname, F_FUNC, true, &cs->type, 2, &st, &st)))
                                        return sql_error(sql, 02, 
SQLSTATE(42000) "COPY INTO: '%s' missing for type %s", fname, 
cs->type.type->base.name);
                                append(args, e);
diff --git a/sql/server/rel_xml.c b/sql/server/rel_xml.c
--- a/sql/server/rel_xml.c
+++ b/sql/server/rel_xml.c
@@ -54,7 +54,7 @@ rel_xmlelement(sql_query *query, sql_rel
                                if (type_cmp(st->type, xml_type.type) != 0) {
                                        sql_subtype str_type;
 
-                                       sql_find_subtype(&str_type, "clob", 0, 
0);
+                                       sql_find_subtype(&str_type, "varchar", 
0, 0);
                                        /* convert to string first */
                                        c_st = exp_check_type(sql, &str_type, 
rel ? *rel : NULL, c_st, type_equal);
                                        /* then to xml */
@@ -135,7 +135,7 @@ rel_xmlforest(sql_query *query, sql_rel 
                        if (type_cmp(st->type, xml_type.type) != 0) {
                                sql_subtype str_type;
 
-                               sql_find_subtype(&str_type, "clob", 0, 0);
+                               sql_find_subtype(&str_type, "varchar", 0, 0);
                                /* convert to string first */
                                c_st = exp_check_type(sql, &str_type, rel ? 
*rel : NULL, c_st, type_equal);
                                /* then to xml */
@@ -193,7 +193,7 @@ rel_xmlattribute(sql_query *query, sql_r
        }
        sql_subtype str_type;
 
-       sql_find_subtype(&str_type, "clob", 0, 0);
+       sql_find_subtype(&str_type, "varchar", 0, 0);
        attr_name_st = exp_atom_str(query->sql->sa, attr_name, &str_type);
        return rel_binop_(query->sql, rel ? *rel : NULL, attr_name_st, attr_st, 
NULL, "attribute", card_value, false);
 }
@@ -240,7 +240,7 @@ rel_xmlpi(sql_query *query, sql_rel **re
        sql_exp *target_st, *val_st;
        sql_subtype str_type;
 
-       sql_find_subtype(&str_type, "clob", 0, 0);
+       sql_find_subtype(&str_type, "varchar", 0, 0);
        target_st = exp_atom_str(query->sql->sa, target, &str_type);
        if (!val)
                val_st = rel_value_exp(query, rel, val, f, knd);
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -4905,7 +4905,7 @@ literal:
     string     { const char *s = $1;
                  int len = UTF8_strlen(s);
                  sql_subtype t;
-                 sql_find_subtype(&t, "char", len, 0 );
+                 sql_find_subtype(&t, "varchar", len, 0 );
                  $$ = _newAtomNode( _atom_string(&t, s)); }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to