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