Changeset: 471d097c13bd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=471d097c13bd
Modified Files:
        monetdb5/optimizer/opt_pushselect.c
        sql/backends/monet5/sql_gencode.c
        sql/server/rel_bin.c
        sql/server/sql_rel2bin.c
        sql/server/sql_statement.c
        sql/server/sql_statement.h
Branch: default
Log Message:

push limit's down again (sofar only without mitosis/mergetable)
cleanup of dead code


diffs (truncated from 310 to 300 lines):

diff --git a/monetdb5/optimizer/opt_pushselect.c 
b/monetdb5/optimizer/opt_pushselect.c
--- a/monetdb5/optimizer/opt_pushselect.c
+++ b/monetdb5/optimizer/opt_pushselect.c
@@ -102,7 +102,7 @@ subselect_find_subselect( subselect_t *s
 int
 OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
-       int i, j, limit, slimit, actions=0, *vars, push_down_delta = 0;
+       int i, j, limit, slimit, actions=0, *vars, push_down_delta = 0, nr_topn 
= 0;
        InstrPtr p, *old;
        subselect_t subselects;
 
@@ -132,6 +132,9 @@ OPTpushselectImplementation(Client cntxt
                        (getFunctionId(p) == tintersectRef || getFunctionId(p) 
== tdifferenceRef)) 
                        return 0;
 
+               if (getModuleId(p) == algebraRef && getFunctionId(p) == 
sliceRef)
+                       nr_topn++;
+
                if (getModuleId(p) == sqlRef && getFunctionId(p) == deltaRef)
                        push_down_delta++;
 
@@ -185,7 +188,7 @@ OPTpushselectImplementation(Client cntxt
                }
        }
 
-       if (!subselects.nr || newMalBlkStmt(mb, mb->ssize+20) <0 ) {
+       if ((!subselects.nr && !nr_topn)  || newMalBlkStmt(mb, mb->ssize+20) <0 
) {
                GDKfree(vars);
                return 0;
        }
@@ -247,7 +250,7 @@ OPTpushselectImplementation(Client cntxt
                                /* c = sql.delta(b,uid,uval,ins);
                                 * l = leftfetchjoin(x, c); 
                                 * into
-                                * l = sql.projectdelta(b,x,ins,upd);
+                                * l = sql.projectdelta(x,b,uid,uval,ins);
                                 */
                                else if (getModuleId(q) == sqlRef && 
getFunctionId(q) == deltaRef && q->argc == 5) {
                                        q = copyInstruction(q);
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1994,12 +1994,6 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st
                        q = (void*)s->op1->rewritten;
                        s->nr = getArg(q,s->flag);
                } break;
-               case st_ordered:{
-                       int l = _dumpstmt(sql, mb, s->op1);
-
-                       _dumpstmt(sql, mb, s->op2);
-                       s->nr = l;
-               } break;
                case st_affected_rows:{
                        InstrPtr q;
                        int o1 = _dumpstmt(sql, mb, s->op1);
@@ -2013,28 +2007,21 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st
                } break;
                case st_output:
                case st_export:{
-                       stmt *order = NULL;
                        stmt *lst = s->op1;
 
                        _dumpstmt(sql, mb, lst);
 
-                       if (lst->type == st_ordered) {
-                               order = lst->op1;
-                               lst = lst->op2;
-                       }
                        if (lst->type == st_list) {
                                list *l = lst->op4.lval;
                                int file, cnt = list_length(l);
-                               stmt *f;
+                               stmt *first;
                                InstrPtr k;
 
                                n = l->h;
-                               f = n->data;
+                               first = n->data;
 
                                /* single value result, has a fast exit */
-                               if (cnt == 1 && !order && f->nrcols <= 0 &&
-                                               s->type != st_export)
-                               {
+                               if (cnt == 1 && first->nrcols <= 0 && s->type 
!= st_export) {
                                        stmt *c = n->data;
                                        sql_subtype *t = tail_type(c);
                                        char *tname = table_name(sql->mvc->sa, 
c);
@@ -2066,11 +2053,6 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st
                                        _DELETE(fqtn);
                                        break;
                                }
-                               if (n) {
-                                       if (!order) {
-                                               order = n->data;
-                                       }
-                               }
                                k = newStmt2(mb, sqlRef, resultSetRef);
                                s->nr = getDestVar(k);
                                k = pushInt(mb, k, cnt);
@@ -2088,7 +2070,7 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st
                                } else {
                                        k = pushInt(mb, k, sql->mvc->type);
                                }
-                               (void) pushArgument(mb, k, order->nr);
+                               (void) pushArgument(mb, k, first->nr);
                                dump_header(sql->mvc, mb, s, l);
 
                                if (s->type == st_export && s->op2) {
@@ -2111,22 +2093,6 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st
                                        q = newStmt(mb, "io", "stdout");
                                        file = getDestVar(q);
                                }
-/*
-
-                               q = newStmt2(mb, sqlRef, 
putName("exportHead",10));
-                               q = pushArgument(mb, q, file);
-                               q = pushArgument(mb, q, s->nr);
-                               q = newStmt2(mb, sqlRef, 
putName("exportChunk",11));
-                               q = pushArgument(mb, q, file);
-                               q = pushArgument(mb, q, s->nr);
-                               q = pushInt(mb,q,0);
-                               q = pushInt(mb,q,10);
-                               q = newStmt2(mb, sqlRef, 
putName("exportChunk",11));
-                               q = pushArgument(mb, q, file);
-                               q = pushArgument(mb, q, s->nr);
-                               q = pushInt(mb,q,10);
-                               q = pushInt(mb,q,0);
-*/
                                q = newStmt2(mb, sqlRef, exportResultRef);
                                q = pushArgument(mb, q, file);
                                (void) pushArgument(mb, q, s->nr);
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
@@ -2162,8 +2162,7 @@ rel2bin_project( mvc *sql, sql_rel *rel,
                sql_exp *le = topn_limit(topn);
                sql_exp *oe = topn_offset(topn);
 
-               if (!le) { /* for now only handle topn 
-                               including limit, ie not just offset */
+               if (!le) { /* Don't push only offset */
                        topn = NULL;
                } else {
                        l = exp_bin(sql, le, NULL, NULL, NULL, NULL, NULL, 
NULL);
@@ -2190,11 +2189,7 @@ rel2bin_project( mvc *sql, sql_rel *rel,
                        sub = subrel_bin(sql, rel->l, refs);
                }
                if (!sub) 
-                       return NULL;    
-               if (sub->type == st_ordered) {
-                       stmt *n = sql_reorder(sql, sub->op1, sub->op2);
-                       sub = n;
-               }
+                       return NULL;
        }
 
        pl = sa_list(sql->sa);
@@ -2495,9 +2490,8 @@ rel2bin_groupby( mvc *sql, sql_rel *rel,
 static stmt *
 rel2bin_topn( mvc *sql, sql_rel *rel, list *refs)
 {
-       list *newl;
        sql_exp *oe = NULL, *le = NULL;
-       stmt *sub = NULL, *order = NULL, *l = NULL, *o = NULL;
+       stmt *sub = NULL, *l = NULL, *o = NULL;
        node *n;
 
        if (rel->l) { /* first construct the sub relation */
@@ -2515,20 +2509,12 @@ rel2bin_topn( mvc *sql, sql_rel *rel, li
        le = topn_limit(rel);
        oe = topn_offset(rel);
 
-       if (sub->type == st_ordered) {
-               stmt *s = sub->op2;
-               order = column(sql->sa, sub->op1);
-               sub = s;
-       }
        n = sub->op4.lval->h;
-       newl = sa_list(sql->sa);
-
        if (n) {
-               stmt *limit = NULL;
-               /*
-               sql_rel *rl = rel->l;
-               int including = (rl && need_distinct(rl)) || 
need_including(rel);
-               */
+               stmt *limit = NULL, *sc = n->data;
+               char *cname = column_name(sql->sa, sc);
+               char *tname = table_name(sql->sa, sc);
+               list *newl = sa_list(sql->sa);
                int including = need_including(rel);
 
                if (le)
@@ -2541,16 +2527,8 @@ rel2bin_topn( mvc *sql, sql_rel *rel, li
                if (!o)
                        o = stmt_atom_wrd(sql->sa, 0);
 
-               if (order) {
-                       limit = stmt_limit(sql->sa, order, o, l, 
LIMIT_DIRECTION(0,0,including));
-               } else {
-                       stmt *sc = n->data;
-                       char *cname = column_name(sql->sa, sc);
-                       char *tname = table_name(sql->sa, sc);
-
-                       sc = column(sql->sa, sc);
-                       limit = stmt_limit(sql->sa, stmt_alias(sql->sa, sc, 
tname, cname), o, l, LIMIT_DIRECTION(0,0,including));
-               }
+               sc = column(sql->sa, sc);
+               limit = stmt_limit(sql->sa, stmt_alias(sql->sa, sc, tname, 
cname), o, l, LIMIT_DIRECTION(0,0,including));
 
                limit = stmt_reverse(sql->sa, stmt_mark_tail(sql->sa, limit, 
0));
                for ( ; n; n = n->next) {
@@ -2562,13 +2540,7 @@ rel2bin_topn( mvc *sql, sql_rel *rel, li
                        sc = stmt_project(sql->sa, limit, sc);
                        list_append(newl, stmt_alias(sql->sa, sc, tname, 
cname));
                }
-               if (order) 
-                       order = stmt_project(sql->sa, limit, order);
-       }
-       sub = stmt_list(sql->sa, newl);
-       if (order) {
-               assert(0);
-               return stmt_ordered(sql->sa, order, sub);
+               sub = stmt_list(sql->sa, newl);
        }
        return sub;
 }
@@ -3041,11 +3013,6 @@ rel2bin_insert( mvc *sql, sql_rel *rel, 
        if (!inserts)  
                return NULL;    
 
-       if (inserts->type == st_ordered) {
-               stmt *n = sql_reorder(sql, inserts->op1, inserts->op1);
-               inserts = n;
-       }
-
        if (idx_ins)
                pin = refs_find_rel(refs, prel);
 
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
@@ -170,7 +170,6 @@ rel2bin(mvc *c, stmt *s)
        case st_unique:
        case st_order:
        case st_reorder:
-       case st_ordered:
 
        case st_alias:
        case st_exception:
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
@@ -91,7 +91,6 @@ st_type2string(st_type type)
                ST(order);
                ST(reorder);
 
-               ST(ordered);
                ST(output);
                ST(affected_rows);
 
@@ -373,7 +372,6 @@ stmt_deps(list *dep_list, stmt *s, int d
                case st_sample:
                case st_order:
                case st_reorder:
-               case st_ordered:
                case st_output:
                case st_affected_rows:
 
@@ -1216,20 +1214,6 @@ stmt_list(sql_allocator *sa, list *l)
 }
 
 stmt *
-stmt_ordered(sql_allocator *sa, stmt *order, stmt *res)
-{
-       stmt *ns = stmt_create(sa, st_ordered);
-
-       ns->type = st_ordered;
-       ns->op1 = order;
-       ns->op2 = res;
-       ns->nrcols = res->nrcols;
-       ns->key = res->key;
-       ns->aggr = res->aggr;
-       return ns;
-}
-
-stmt *
 stmt_output(sql_allocator *sa, stmt *l)
 {
        stmt *s = stmt_create(sa, st_output);
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
@@ -66,7 +66,6 @@ typedef enum stmt_type {
        st_order,
        st_reorder,
 
-       st_ordered,
        st_output,
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to