Changeset: 633cf44eaf65 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=633cf44eaf65
Modified Files:
        sql/server/sql_semantic.c
Branch: default
Log Message:

Clobs have digits


diffs (57 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
@@ -1032,6 +1032,7 @@ supertype(sql_subtype *super, sql_subtyp
        unsigned int idigits = i->digits;
        unsigned int rdigits = r->digits;
        unsigned int scale = sql_max(i->scale, r->scale);
+       sql_class eclass = r->type->eclass;
        sql_subtype lsuper;
 
        lsuper = *r;
@@ -1041,20 +1042,25 @@ supertype(sql_subtype *super, sql_subtyp
                        lsuper = !strcmp(i->type->sqlname, "clob") ? *i : *r;
                        radix = lsuper.type->radix;
                        tpe = lsuper.type->sqlname;
+                       eclass = lsuper.type->eclass;
                } else {
                        lsuper = i->type->base.id > r->type->base.id ? *i : *r;
                        radix = lsuper.type->radix;
                        tpe = lsuper.type->sqlname;
+                       eclass = lsuper.type->eclass;
                }
        } else if (i->type->base.id > r->type->base.id || 
(EC_VARCHAR(i->type->eclass) && !EC_VARCHAR(r->type->eclass))) {
                lsuper = *i;
                radix = i->type->radix;
                tpe = i->type->sqlname;
+               eclass = i->type->eclass;
        }
        if (EC_VARCHAR(lsuper.type->eclass))
                scale = 0; /* strings don't have scale */
-       if (!lsuper.type->localtype)
+       if (!lsuper.type->localtype) {
                tpe = "smallint";
+               eclass = EC_NUM;
+       }
        /*
         * In case of different radix we should change one.
         */
@@ -1073,13 +1079,15 @@ supertype(sql_subtype *super, sql_subtyp
                }
        }
        /* handle OID horror */
-       if (i->type->radix == r->type->radix && i->type->base.id < 
r->type->base.id && strcmp(i->type->sqlname, "oid") == 0)
+       if (i->type->radix == r->type->radix && i->type->base.id < 
r->type->base.id && strcmp(i->type->sqlname, "oid") == 0) {
                tpe = i->type->sqlname;
-       if (scale == 0 && (idigits == 0 || rdigits == 0 || !strcmp(tpe, 
"clob"))) { /* clob falls here */
+               eclass = EC_POS;
+       }
+       if (scale == 0 && (idigits == 0 || rdigits == 0)) {
                sql_find_subtype(&lsuper, tpe, 0, 0);
        } else {
                /* for strings use the max of both */
-               if (!strcmp(tpe, "char") || !strcmp(tpe, "varchar"))
+               if (EC_VARCHAR(eclass))
                        digits = sql_max(type_digits_to_char_digits(i), 
type_digits_to_char_digits(r));
                else
                        digits = sql_max(idigits - i->scale, rdigits - 
r->scale);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to