Changeset: b25e8dc0bd4a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b25e8dc0bd4a
Branch: unlock
Log Message:

merged with default


diffs (79 lines):

diff --git a/monetdb5/optimizer/opt_postfix.c b/monetdb5/optimizer/opt_postfix.c
--- a/monetdb5/optimizer/opt_postfix.c
+++ b/monetdb5/optimizer/opt_postfix.c
@@ -73,22 +73,24 @@ OPTpostfixImplementation(Client cntxt, M
                                                getArg(p, 5) ^= getArg(p, 4);
                                                getArg(p, 4) ^= getArg(p, 5);
                                                if (getFunctionId(p) == 
thetajoinRef) { /* swap the comparison */
-                                                       switch 
(getVarConstant(mb, getArg(p, 6)).val.ival) {
+                                                       ValRecord *x = 
&getVarConstant(mb, getArg(p, 6)), cst = {.vtype = TYPE_int};
+                                                       switch (x->val.ival) {
                                                        case JOIN_LT:
-                                                               
getVarConstant(mb, getArg(p, 6)).val.ival = JOIN_GE;
+                                                               cst.val.ival = 
JOIN_GE;
                                                                break;
                                                        case JOIN_LE:
-                                                               
getVarConstant(mb, getArg(p, 6)).val.ival = JOIN_GT;
+                                                               cst.val.ival = 
JOIN_GT;
                                                                break;
                                                        case JOIN_GT:
-                                                               
getVarConstant(mb, getArg(p, 6)).val.ival = JOIN_LE;
+                                                               cst.val.ival = 
JOIN_LE;
                                                                break;
                                                        case JOIN_GE:
-                                                               
getVarConstant(mb, getArg(p, 6)).val.ival = JOIN_LT;
+                                                               cst.val.ival = 
JOIN_LT;
                                                                break;
                                                        default:
-                                                               break;
+                                                               cst.val.ival = 
x->val.ival;
                                                        }
+                                                       setArg(p, 6, 
defConstant(mb, TYPE_int, &cst));
                                                }
                                        }
                                        delArgument(p, p->retc -2);
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
@@ -963,7 +963,8 @@ result_datatype(sql_subtype *super, sql_
                        tpe = l->type->sqlname;
                        digits = (!r->digits)?0:l->digits;
                } else { /* both */
-                       tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
+                       tpe = !strcmp(l->type->base.name, 
"clob")?l->type->sqlname:!strcmp(r->type->base.name, "clob")?r->type->sqlname:
+                       (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
                        digits = (!l->digits||!r->digits)?0:sql_max(l->digits, 
r->digits);
                }
                sql_find_subtype(super, tpe, digits, 0);
@@ -1035,8 +1036,17 @@ supertype(sql_subtype *super, sql_subtyp
 
        lsuper = *r;
        /* EC_STRING class is superior to EC_CHAR */
-       if (i->type->base.id > r->type->base.id ||
-           (EC_VARCHAR(i->type->eclass) && !EC_VARCHAR(r->type->eclass)) || 
i->type->eclass == EC_STRING) {
+       if (EC_VARCHAR(i->type->eclass) && EC_VARCHAR(r->type->eclass)) {
+               if (!strcmp(i->type->sqlname, "clob") || 
!strcmp(r->type->sqlname, "clob")) {
+                       lsuper = !strcmp(i->type->sqlname, "clob") ? *i : *r;
+                       radix = lsuper.type->radix;
+                       tpe = lsuper.type->sqlname;
+               } else {
+                       lsuper = i->type->base.id > r->type->base.id ? *i : *r;
+                       radix = lsuper.type->radix;
+                       tpe = lsuper.type->sqlname;
+               }
+       } 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;
diff --git a/sql/test/Tests/in.test b/sql/test/Tests/in.test
--- a/sql/test/Tests/in.test
+++ b/sql/test/Tests/in.test
@@ -23,7 +23,7 @@ select i in (NULL,1) from tmp
 1
 NULL
 
-statement error 22018!conversion of string 'a' to type int failed.
+statement error
 select i in (1,'a') from tmp
 
 statement ok
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to