Changeset: 1dcc8b80f363 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1dcc8b80f363
Modified Files:
        sql/server/rel_bin.c
        sql/server/sql_rel2bin.c
        sql/server/sql_semantic.c
        sql/server/sql_statement.c
        sql/server/sql_statement.h
        
sql/test/BugTracker/Tests/mdb_starts_with_sql_debug_64.SF-1999354.stable.out
Branch: default
Log Message:

stmt_conver now copies the subtypes in case the types are kept
on the stack (which maybe released for example for function calls)


diffs (93 lines):

diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c
--- a/sql/server/rel_bin.c
+++ b/sql/server/rel_bin.c
@@ -288,7 +288,7 @@
                sql_subtype *to = tps->h->next->data;
                if (!l) 
                        return NULL;
-               s = stmt_convert(sql->sa, l, from, to);
+               s = stmt_convert(sql->sa, l, from, to, 0);
        }       break;
        case e_func: {
                node *en;
diff --git a/sql/server/sql_rel2bin.c b/sql/server/sql_rel2bin.c
--- a/sql/server/sql_rel2bin.c
+++ b/sql/server/sql_rel2bin.c
@@ -829,7 +829,7 @@
                stmt *op1 = select->op1;
 
                op1 = push_semijoin(sql, op1, s);
-               return stmt_convert(sql->sa, op1, f, t);
+               return stmt_convert(sql->sa, op1, f, t, 0);
        }
        if (select->type == st_unop){ 
                stmt *op1 = select->op1;
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
@@ -599,7 +599,7 @@
                    (c == 3 && tpe != type_cast)) { 
                        s = NULL;
                } else {
-                       s = stmt_convert(sql->sa, s, st, ct);
+                       s = stmt_convert(sql->sa, s, st, ct, 1);
                }
        } 
        if (!s) {
diff --git a/sql/server/sql_statement.c b/sql/server/sql_statement.c
--- a/sql/server/sql_statement.c
+++ b/sql/server/sql_statement.c
@@ -1438,13 +1438,25 @@
        return s;
 }
 
+static sql_subtype*
+dup_subtype(sql_allocator *sa, sql_subtype *st)
+{
+       sql_subtype *res = SA_NEW(sa, sql_subtype);
+
+       *res = *st;
+       return res;
+}
 
 stmt *
-stmt_convert(sql_allocator *sa, stmt *v, sql_subtype *from, sql_subtype *to)
+stmt_convert(sql_allocator *sa, stmt *v, sql_subtype *from, sql_subtype *to, 
int dup)
 {
        stmt *s = stmt_create(sa, st_convert);
        list *l = list_new(sa);
 
+       if (dup) {
+               from = dup_subtype(sa, from);
+               to = dup_subtype(sa, to);
+       }
        list_append(l, from);
        list_append(l, to);
        s->op1 = v;
diff --git a/sql/server/sql_statement.h b/sql/server/sql_statement.h
--- a/sql/server/sql_statement.h
+++ b/sql/server/sql_statement.h
@@ -284,7 +284,7 @@
 extern stmt *stmt_order(sql_allocator *sa, stmt *s, int direction);
 extern stmt *stmt_reorder(sql_allocator *sa, stmt *s, stmt *t, int direction);
 
-extern stmt *stmt_convert(sql_allocator *sa, stmt *v, sql_subtype *from, 
sql_subtype *to);
+extern stmt *stmt_convert(sql_allocator *sa, stmt *v, sql_subtype *from, 
sql_subtype *to, int dup);
 extern stmt *stmt_unop(sql_allocator *sa, stmt *op1, sql_subfunc *op);
 extern stmt *stmt_binop(sql_allocator *sa, stmt *op1, stmt *op2, sql_subfunc 
*op);
 extern stmt *stmt_Nop(sql_allocator *sa, stmt *ops, sql_subfunc *op);
diff --git 
a/sql/test/BugTracker/Tests/mdb_starts_with_sql_debug_64.SF-1999354.stable.out 
b/sql/test/BugTracker/Tests/mdb_starts_with_sql_debug_64.SF-1999354.stable.out
--- 
a/sql/test/BugTracker/Tests/mdb_starts_with_sql_debug_64.SF-1999354.stable.out
+++ 
b/sql/test/BugTracker/Tests/mdb_starts_with_sql_debug_64.SF-1999354.stable.out
@@ -15,8 +15,9 @@
 % . # table_name
 % f2_single_value # name
 % varchar # type
-% 7 # length
-[ "0004044"    ]
+% 12 # length
+[ "00:04:00.004"       ]
+#SELECT f2(p.ra,8,p."dec") FROM t1999354a as p;
 % sys. # table_name
 % f2_ra # name
 % varchar # type
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to