Update of /cvsroot/monetdb/sql/src/server
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26601/src/server
Modified Files:
Tag: SQL_2-22
sql_scope.mx sql_updates.mx
Log Message:
sum now returns NULL for empty bats
Index: sql_scope.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_scope.mx,v
retrieving revision 1.27
retrieving revision 1.27.2.1
diff -u -d -r1.27 -r1.27.2.1
--- sql_scope.mx 11 Jan 2008 10:52:13 -0000 1.27
+++ sql_scope.mx 14 Mar 2008 19:20:53 -0000 1.27.2.1
@@ -368,7 +368,7 @@
for (; n; n = n->next) {
cvar *c = n->data;
- if (strcmp(c->tname, tname) == 0 && strcmp(c->cname, cname) ==
0) {
+ if (c->tname && strcmp(c->tname, tname) == 0 &&
strcmp(c->cname, cname) == 0) {
return c;
}
}
Index: sql_updates.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_updates.mx,v
retrieving revision 1.132.2.1
retrieving revision 1.132.2.2
diff -u -d -r1.132.2.1 -r1.132.2.2
--- sql_updates.mx 14 Mar 2008 17:08:20 -0000 1.132.2.1
+++ sql_updates.mx 14 Mar 2008 19:20:54 -0000 1.132.2.2
@@ -104,7 +104,7 @@
node *m;
stmt *s = inserts[0]->op2.stval;
sql_subaggr *sum;
- stmt *count_sum = NULL;
+ stmt *ssum = NULL;
/* 1st stage: find out if original contains same values */
if (s->key && s->nrcols == 0) {
@@ -142,9 +142,9 @@
}
sum = sql_bind_aggr(sql->session->schema, "not_unique",
tail_type(ss));
- count_sum = stmt_aggr(ss, NULL, sum, 1);
+ ssum = stmt_aggr(ss, NULL, sum, 1);
/* combine results */
- s = stmt_binop(s, count_sum, or);
+ s = stmt_binop(s, ssum, or);
}
if (k->type == pkey) {
@@ -188,6 +188,7 @@
/* (count(ss) <> sum(ss)) */
sum = sql_bind_aggr(sql->session->schema, "sum",
tail_type(ss));
ssum = stmt_aggr(ss, NULL, sum, 1);
+ ssum = sql_Nop_(sql, "ifthenelse", sql_unop_(sql, NULL,
"isnull", ssum), stmt_atom_lng(0), stmt_dup(ssum), NULL);
count_sum = stmt_binop(check_types(sql,
tail_type(ssum), stmt_aggr(stmt_dup(ss), NULL, sql_dup_aggr(cnt), 1),
type_equal), ssum, sql_dup_func(ne));
/* combine results */
@@ -582,7 +583,7 @@
/* 2e stage: find out if the updated are unique */
if (idx_updates->nrcols) { /* update columns not atoms */
sql_subaggr *sum;
- stmt *count_sum = NULL;
+ stmt *count_sum = NULL, *ssum;
group *g = NULL;
stmt *ss;
sql_subfunc *or =
sql_bind_func_result(sql->session->schema, "or", bt, bt, bt);
@@ -606,7 +607,9 @@
grp_destroy(g);
/* (count(ss) <> sum(ss)) */
sum = sql_bind_aggr(sql->session->schema, "sum",
tail_type(ss));
- count_sum = stmt_binop(stmt_aggr(stmt_dup(ss), NULL,
sql_dup_aggr(cnt), 1), check_types(sql, it, stmt_aggr(ss, NULL, sum, 1),
type_equal), sql_dup_func(ne));
+ ssum = stmt_aggr(ss, NULL, sum, 1);
+ ssum = sql_Nop_(sql, "ifthenelse", sql_unop_(sql, NULL,
"isnull", ssum), stmt_atom_lng(0), stmt_dup(ssum), NULL);
+ count_sum = stmt_binop(stmt_aggr(stmt_dup(ss), NULL,
sql_dup_aggr(cnt), 1), check_types(sql, it, ssum, type_equal),
sql_dup_func(ne));
/* combine results */
s = stmt_binop(s, count_sum, or);
@@ -642,6 +645,7 @@
/* (count(ss) <> sum(ss)) */
sum = sql_bind_aggr(sql->session->schema, "sum",
tail_type(ss));
ssum = stmt_aggr(ss, NULL, sum, 1);
+ ssum = sql_Nop_(sql, "ifthenelse", sql_unop_(sql, NULL,
"isnull", ssum), stmt_atom_lng(0), stmt_dup(ssum), NULL);
count_sum = stmt_binop(check_types(sql,
tail_type(ssum), stmt_aggr(stmt_dup(ss), NULL, sql_dup_aggr(cnt), 1),
type_equal), ssum, sql_dup_func(ne));
/* combine results */
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins