Changeset: b7c83816e1d8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b7c83816e1d8
Modified Files:
        
sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.out
Branch: default
Log Message:

merging from Oct2010


diffs (truncated from 380 to 300 lines):

diff -r b02e5798091a -r b7c83816e1d8 MonetDB5/src/modules/mal/pqueue.mx
--- a/MonetDB5/src/modules/mal/pqueue.mx        Wed Sep 15 10:45:40 2010 +0200
+++ b/MonetDB5/src/modules/mal/pqueue.mx        Wed Sep 15 15:09:12 2010 +0200
@@ -954,16 +954,13 @@
        bn = BATnew(TYPE_oid, TYPE_oid, n);
        for(i=0; i<n; ) {
                oid *v = (oid*)Tloc(a,i), ov = *v; 
-               for( j=i; j<n; j++) {
-                       v = (oid*)Tloc(a,j);
-                       if (*v != ov) 
-                               break;
-               }
+               for( j=i; *v == ov; j++, v = (oid*)Tloc(a,j))
+                       ;
                if (j == i+1) {
                        BUNins(bn, Hloc(a,i), &ov, FALSE);
                } else {
                        BAT *s = BATslice(b, i, j), *sbn = NULL;
-                       wrd nn = n-j;
+                       wrd nn = n-i;
 
                        if ((b->htype == TYPE_void ? 
pqueue_topn_v...@1@2(&sbn,s,&nn) : pqueue_to...@1@2(&sbn,s,&nn)) == GDK_SUCCEED 
&& sbn) {
                                BATins(bn, sbn, FALSE);
@@ -1006,16 +1003,13 @@
        bn = BATnew(TYPE_oid, TYPE_oid, n);
        for(i=0; i<n; ) {
                oid *v = (oid*)Tloc(a,i), ov = *v; 
-               for( j=i; j<n; j++) {
-                       v = (oid*)Tloc(a,j);
-                       if (*v != ov) 
-                               break;
-               }
+               for( j=i; *v == ov; j++, v = (oid*)Tloc(a,j))
+                       ;
                if (j == i+1) {
                        BUNins(bn, Hloc(a,i), &ov, FALSE);
                } else {
                        BAT *s = BATslice(b, i, j), *sbn = NULL;
-                       wrd nn = n-j;
+                       wrd nn = n-i;
 
                        if ((b->htype == TYPE_void ? 
pqueue_utopn_v...@1@2(&sbn,s,&nn) : pqueue_uto...@1@2(&sbn,s,&nn)) == 
GDK_SUCCEED && sbn) {
                                BATins(bn, sbn, FALSE);
diff -r b02e5798091a -r b7c83816e1d8 MonetDB5/src/optimizer/opt_mergetable.mx
--- a/MonetDB5/src/optimizer/opt_mergetable.mx  Wed Sep 15 10:45:40 2010 +0200
+++ b/MonetDB5/src/optimizer/opt_mergetable.mx  Wed Sep 15 15:09:12 2010 +0200
@@ -1227,13 +1227,29 @@
                }
                pushInstruction(mb, pck);
 
+               /* first project using the current topn as the next topn
+                * operators need aligned bats 
+                */
+               var = getArg(pck,0);
+               if (cur_topn) {
+                       InstrPtr mi = bat_mirror(mb, cur_topn);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, leftjoinRef);
+                       getArg(q, 0) = newTmpVariable(mb, tpe);
+                       q = pushArgument(mb, q, getArg(mi, 0));
+                       q = pushArgument(mb, q, var);
+                       pushInstruction(mb, q);
+                       var = getArg(q,0);
+               }
+
                /* re-do the topn */
                if (!slc)
                        tpe = newBatType(TYPE_oid, TYPE_oid);
                getArg(tpn, arg++) = newTmpVariable(mb, tpe);
                if (cur_topn)
                        getArg(tpn, arg++) = cur_topn;
-               getArg(tpn, arg) = getArg(pck, 0);
+               getArg(tpn, arg) = var;
                        
                pushInstruction(mb, tpn);
                cur_topn = getArg(tpn, 0);
diff -r b02e5798091a -r b7c83816e1d8 sql/src/backends/monet5/sql_gencode.mx
--- a/sql/src/backends/monet5/sql_gencode.mx    Wed Sep 15 10:45:40 2010 +0200
+++ b/sql/src/backends/monet5/sql_gencode.mx    Wed Sep 15 15:09:12 2010 +0200
@@ -779,16 +779,6 @@
                                        q = pushInt(mb, q, 1);
                                        len = getDestVar(q);
 
-/*
-                                       if ((s->flag-1) > 0) {
-                                               q = newStmt2(mb, algebraRef, 
sortTailRef);
-                                       } else {
-                                               q = newStmt2(mb, algebraRef, 
sortReverseTailRef);
-                                       }
-                                       q = pushArgument(mb, q, l);
-                                       l = getDestVar(q);
-*/
-
                                        q = newStmt1(mb, algebraRef, "slice");
                                        q = pushArgument(mb, q, l);
                                        q = pushArgument(mb, q, offset);
diff -r b02e5798091a -r b7c83816e1d8 sql/src/server/bin_optimizer.mx
--- a/sql/src/server/bin_optimizer.mx   Wed Sep 15 10:45:40 2010 +0200
+++ b/sql/src/server/bin_optimizer.mx   Wed Sep 15 15:09:12 2010 +0200
@@ -324,19 +324,6 @@
                        os->optimized = ns->optimized = 3;
                        return ns;
                }
-               /* try to push the limit through the order */
-               if (!s->op4.stval && j->type == st_order) {
-                       s = stmt_order(stmt_limit(stmt_dup(j->op1.stval),
-                               stmt_dup(s->op2.stval),
-                               stmt_dup(s->op3.stval),
-                               LIMIT_DIRECTION(j->flag,1,0)), j->flag);
-                       ns = bin_optimizer(c, s);
-                       stmt_destroy(s);
-                       assert(os->rewritten==NULL);
-                       os->rewritten = stmt_dup(ns);
-                       os->optimized = ns->optimized = 3;
-                       return ns;
-               }
                /* try to push the limit through the reverse */
                if (!s->op4.stval && !s->flag && j->type == st_reverse) {
                        s = stmt_reverse(stmt_limit(stmt_dup(j->op1.stval),
diff -r b02e5798091a -r b7c83816e1d8 sql/src/server/rel_bin.mx
--- a/sql/src/server/rel_bin.mx Wed Sep 15 10:45:40 2010 +0200
+++ b/sql/src/server/rel_bin.mx Wed Sep 15 15:09:12 2010 +0200
@@ -263,9 +263,9 @@
                        atom *a = e->l;
                        s = stmt_atom(atom_dup(a));
                } else if (e->r) {              /* parameters */
-                       s = stmt_var(_strdup(e->r), &e->tpe, 0, e->flag);
+                       s = stmt_var(_strdup(e->r), e->tpe.type?&e->tpe:NULL, 
0, e->flag);
                } else {                        /* arguments */
-                       s = stmt_varnr(e->flag, &e->tpe);
+                       s = stmt_varnr(e->flag, e->tpe.type?&e->tpe:NULL);
                }
        }       break;
        case e_convert: {
@@ -1105,7 +1105,7 @@
        for (n = s->op1.lval->h; n; n = n->next) {
                stmt *t = n->data;
 
-               list_append(rl, stmt_join(stmt_dup(grp->ext), stmt_dup(t), 
cmp_equal));
+               list_append(rl, stmt_project(stmt_dup(grp->ext), stmt_dup(t)));
        }
 
        if (grp)
@@ -1638,7 +1638,7 @@
        }
        if (need_distinct(rel))
                psub = rel2bin_distinct(psub);
-       if (!topn && rel->r) {
+       if ((!topn || need_distinct(rel)) && rel->r) {
                list *oexps = rel->r;
                stmt *orderby = NULL;
 
diff -r b02e5798091a -r b7c83816e1d8 sql/src/server/rel_exp.mx
--- a/sql/src/server/rel_exp.mx Wed Sep 15 10:45:40 2010 +0200
+++ b/sql/src/server/rel_exp.mx Wed Sep 15 15:09:12 2010 +0200
@@ -351,7 +351,8 @@
        sql_exp *e = exp_create(e_atom);
        e->card = CARD_ATOM;
        e->flag = i;
-       e->tpe = *tpe;
+       if (tpe)
+               e->tpe = *tpe;
        return e;
 }
 
@@ -362,7 +363,8 @@
        e->r = _strdup(name);
        e->card = CARD_ATOM;
        e->flag = frame;
-       e->tpe = *tpe;
+       if (tpe)
+               e->tpe = *tpe;
        return e;
 }
 
@@ -377,7 +379,8 @@
        e->name = _strdup(acname);
        e->l = (org_rname)?_strdup(org_rname):NULL;
        e->r = _strdup(org_cname);
-       e->tpe = *t;
+       if (t)
+               e->tpe = *t;
        if (!has_nils)
                set_has_no_nil(e);
        if (intern)
@@ -395,7 +398,8 @@
        e->name = _strdup(cname);
        e->l = (rname)?_strdup(rname):NULL;
        e->r = _strdup(cname);
-       e->tpe = *t;
+       if (t)
+               e->tpe = *t;
        if (!has_nils)
                set_has_no_nil(e);
        if (intern)
@@ -460,13 +464,16 @@
                if (e->l) {
                        atom *a = e->l;
                        return atom_type(a);
-               } else { /* atom reference */
+               } else if (e->tpe.type) { /* atom reference */
                        return &e->tpe;
                }
+               break;
        }
        case e_convert:
        case e_column:
-               return &e->tpe;
+               if (e->tpe.type)
+                       return &e->tpe;
+               break;
        case e_aggr: {
                sql_subaggr *a = e->f;
                return &a->res;
@@ -483,6 +490,7 @@
        default:
                return NULL;
        }
+       return NULL;
 }
 
 char *
diff -r b02e5798091a -r b7c83816e1d8 
sql/src/storage/restrict/restrict_storage.mx
--- a/sql/src/storage/restrict/restrict_storage.mx      Wed Sep 15 10:45:40 
2010 +0200
+++ b/sql/src/storage/restrict/restrict_storage.mx      Wed Sep 15 15:09:12 
2010 +0200
@@ -376,7 +376,8 @@
 
        (void)tr;
        /* snapshot large bats */
-       if (BATcount(b) > SNAPSHOT_MINSIZE) 
+       bat_set_access(b, BAT_READ);
+       if (BATcount(b) > SNAPSHOT_MINSIZE)
                BATmode(b, PERSISTENT);
        if (BATcount(b) > (BUN) REMAP_PAGE_MAXSIZE)
                        BATmmap(b, STORE_MMAP, STORE_MMAP, STORE_MMAP, 
STORE_MMAP);
@@ -390,6 +391,7 @@
        BAT *b = temp_descriptor(bat->bid);
 
        (void)tr;
+       bat_set_access(b, BAT_READ);
        BATcommit(b);
        bat_destroy(b);
        return LOG_OK;
@@ -524,6 +526,7 @@
                bat_destroy(b);
        } else if (!bat->bid) {
                b = bat_new(TYPE_void, TYPE_oid, t->sz);
+               bat_set_access(b, BAT_READ);
                bat->bid = temp_create(b);
                bat_destroy(b);
        }
@@ -553,6 +556,7 @@
 
        (void)tr;
        /* snapshot large bats */
+       bat_set_access(b, BAT_READ);
        if (BATcount(b) > SNAPSHOT_MINSIZE) 
                BATmode(b, PERSISTENT);
        if (BATcount(b) > (BUN) REMAP_PAGE_MAXSIZE)
diff -r b02e5798091a -r b7c83816e1d8 
sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
--- 
a/sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
  Wed Sep 15 10:45:40 2010 +0200
+++ 
b/sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
  Wed Sep 15 15:09:12 2010 +0200
@@ -68,9 +68,9 @@
 # 22:29:10 >  mclient -lsql -i -umonetdb -Pmonetdb --host=pegasus --port=30332 
 # 22:29:10 >  
 
-MAPI  = mone...@rig:35972
+MAPI  = mone...@alf:32679
 QUERY = select * from env() as env where name = ( select 'prefix' from env() 
as env );
-ERROR = !SQLException:zero_or_one:cardinality violation (53>1)
+ERROR = !SQLException:zero_or_one:cardinality violation (51>1)
 
 # 13:22:15 >  
 # 13:22:15 >  Done.
diff -r b02e5798091a -r b7c83816e1d8 
sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.out
--- 
a/sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.out
  Wed Sep 15 10:45:40 2010 +0200
+++ 
b/sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.out
  Wed Sep 15 15:09:12 2010 +0200
@@ -77,7 +77,6 @@
 [ "derive_pipe"        ]
 [ "dictionary_pipe"    ]
 [ "compression_pipe"   ]
-[ "opt_debug"  ]
 [ "gdk_mem_pagebits"   ]
 [ "gdk_mem_bigsize"    ]
 [ "monet_pid"  ]
diff -r b02e5798091a -r b7c83816e1d8 
sql/src/test/BugTracker-2009/Tests/double_count_limit_bug.SF-2862146.stable.out
--- 
a/sql/src/test/BugTracker-2009/Tests/double_count_limit_bug.SF-2862146.stable.out
   Wed Sep 15 10:45:40 2010 +0200
+++ 
b/sql/src/test/BugTracker-2009/Tests/double_count_limit_bug.SF-2862146.stable.out
   Wed Sep 15 15:09:12 2010 +0200
@@ -26,8 +26,8 @@
 # 22:42:43 >  
 
 #SELECT COUNT (*) AS c1, COUNT (*) AS c2 FROM t2 limit 100;
-% .t2, . # table_name
-% c1,  single_value # name
+% .t2, .t2 # table_name
+% c1,  c2 # name
 % wrd, wrd # type
 % 1,   1 # length
 [ 0,   0       ]
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to