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

Reply via email to