Changeset: ef11c38c6769 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef11c38c6769
Modified Files:
        debian/rules
        monetdb5/optimizer/opt_pushselect.c
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_gencode.c
        
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
        sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
Branch: default
Log Message:

merged changes from Feb2013


diffs (truncated from 301 to 300 lines):

diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -48,13 +48,13 @@ override_dh_auto_configure:
 # currently the test suite fails
 override_dh_auto_test:
 
-override_dh_auto_install:
-       dh_auto_install
-       cd clients/python2 && python setup.py install 
--root=$(CURDIR)/debian/tmp --install-layout=deb
-       cd clients/python3 && python3 setup.py install 
--root=$(CURDIR)/debian/tmp --install-layout=deb
-
 override_dh_clean:
        dh_clean
        cd clients/python2 && python setup.py clean
        cd clients/python3 && python3 setup.py clean
 
+override_dh_python2:
+       dh_python2 clients/python2
+
+override_dh_python3:
+       dh_python3 clients/python3
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
@@ -111,7 +111,7 @@ OPTpushselectImplementation(Client cntxt
                return 0;
 
        OPTDEBUGpushselect
-               mnstr_printf(cntxt->fdout,"#Range select optimizer started\n");
+               mnstr_printf(cntxt->fdout,"#Push select optimizer started\n");
        (void) stk;
        (void) pci;
         vars= (int*) GDKmalloc(sizeof(int)* mb->vtop);
@@ -370,9 +370,10 @@ OPTpushselectImplementation(Client cntxt
                                setFunctionId(u, subdeltaRef);
                                getArg(u, 0) = getArg(p,0);
                                getArg(u, 1) = getArg(r,0);
-                               getArg(u, 2) = getArg(q,2); /* update ids */
-                               getArg(u, 3) = getArg(s,0);
-                               getArg(u, 4) = getArg(t,0);
+                               getArg(u, 2) = getArg(p,2); /* pre-cands */
+                               getArg(u, 3) = getArg(q,2); /* update ids */
+                               getArg(u, 4) = getArg(s,0);
+                               u = pushArgument(mb, u, getArg(t,0));
                                pushInstruction(mb,u);  
                                freeInstruction(p);
                                continue;
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -250,7 +250,7 @@ command projectdelta( subselect:bat[:oid
 address DELTAproject
 comment "Return column bat with delta's applied.";
 
-command subdelta ( col:bat[:oid,:oid], uid:bat[:oid,:oid], 
uval:bat[:oid,:oid], ins:bat[:oid,:oid] ) :bat[:oid,:oid]
+command subdelta ( col:bat[:oid,:oid], cand:bat[:oid,:oid], 
uid:bat[:oid,:oid], uval:bat[:oid,:oid], ins:bat[:oid,:oid] ) :bat[:oid,:oid]
 address DELTAsub
 comment "Return a single bat of subselected delta.";
 
@@ -262,7 +262,7 @@ command projectdelta( subselect:bat[:oid
 address DELTAproject2
 comment "Return column bat with delta's applied.";
 
-command subdelta ( col:bat[:oid,:oid], uid:bat[:oid,:oid], 
uval:bat[:oid,:oid]) :bat[:oid,:oid]
+command subdelta ( col:bat[:oid,:oid], cand:bat[:oid,:oid], 
uid:bat[:oid,:oid], uval:bat[:oid,:oid]) :bat[:oid,:oid]
 address DELTAsub2
 comment "Return a single bat of subselected delta.";
 
@@ -1378,10 +1378,10 @@ sql5_export str mvc_clear_table_wrap(Cli
 sql5_export str mvc_delete_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLtid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str DELTAbat(bat *result, bat *col, bat *uid, bat *uval, bat *ins);
-sql5_export str DELTAsub(bat *result, bat *col, bat *uid, bat *uval, bat *ins);
+sql5_export str DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval, 
bat *ins);
 sql5_export str DELTAproject(bat *result, bat *subselect, bat *col, bat *uid, 
bat *uval, bat *ins);
 sql5_export str DELTAbat2(bat *result, bat *col, bat *uid, bat *uval);
-sql5_export str DELTAsub2(bat *result, bat *col, bat *uid, bat *uval);
+sql5_export str DELTAsub2(bat *result, bat *col, bat *cid, bat *uid, bat 
*uval);
 sql5_export str DELTAproject2(bat *result, bat *subselect, bat *col, bat *uid, 
bat *uval);
 sql5_export str mvc_result_row_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str mvc_result_file_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
@@ -3503,9 +3503,9 @@ DELTAbat2(bat *result, bat *col, bat *ui
 }
 
 str 
-DELTAsub2(bat *result, bat *col, bat *uid, bat *uval)
-{
-       return DELTAsub(result, col, uid, uval, NULL);
+DELTAsub2(bat *result, bat *col, bat *cid, bat *uid, bat *uval)
+{
+       return DELTAsub(result, col, cid, uid, uval, NULL);
 }
 
 str 
@@ -3565,7 +3565,7 @@ DELTAbat(bat *result, bat *col, bat *uid
 }
 
 str 
-DELTAsub(bat *result, bat *col, bat *uid, bat *uval, bat *ins)
+DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval, bat *ins)
 {
        BAT *c, *cminu, *u_id, *u_val, *u, *i = NULL, *res;
 
@@ -3595,7 +3595,7 @@ DELTAsub(bat *result, bat *col, bat *uid
                u_id = BATdescriptor(*uid);
                cminu = BATkdiff(BATmirror(c), BATmirror(u_id));
                BBPunfix(c->batCacheid);
-               c = BATmirror(BATmark(cminu, 0));
+               res = c = BATmirror(BATmark(cminu, 0));
                BBPunfix(cminu->batCacheid);
 
                if ((u_val = BATdescriptor(*uval)) == NULL) {
@@ -3604,17 +3604,44 @@ DELTAsub(bat *result, bat *col, bat *uid
                        throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
                }
                u = BATleftfetchjoin(u_val, u_id, BATcount(u_val));
+               BBPunfix(u_val->batCacheid);
                BBPunfix(u_id->batCacheid);
-               BBPunfix(u_val->batCacheid);
+               if (BATcount(u)) { /* check selected updated values against 
candidates */
+                       BAT *c_ids = BATdescriptor(*cid);
+
+                       cminu = BATsemijoin(BATmirror(u), BATmirror(c_ids));
+                       BBPunfix(c_ids->batCacheid);
+                       BBPunfix(u->batCacheid);
+                       u = BATmirror(cminu);
+               }
                res = BATappend(c, u, TRUE);
                BBPunfix(u->batCacheid);
+
+               u = BATsort(BATmirror(res));
+               BBPunfix(res->batCacheid);
+               res = BATmirror(BATmark(u, 0));
+               BBPunfix(u->batCacheid);
        }
 
        if (i) {
                i = BATdescriptor(*ins);
+               if (BATcount(u_id)) {
+                       u_id = BATdescriptor(*uid);
+                       cminu = BATkdiff(BATmirror(i), BATmirror(u_id));
+                       BBPunfix(i->batCacheid);
+                       BBPunfix(u_id->batCacheid);
+                       i = BATmirror(BATmark(cminu, 0));
+                       BBPunfix(cminu->batCacheid);
+               }
                res = BATappend(res, i, TRUE);
                BBPunfix(i->batCacheid);
-       }
+
+               u = BATsort(BATmirror(res));
+               BBPunfix(res->batCacheid);
+               res = BATmirror(BATmark(u, 0));
+               BBPunfix(u->batCacheid);
+       }
+       BATkey(BATmirror(res),TRUE);
        BBPkeepref(*result = res->batCacheid);
        return MAL_SUCCEED;
 }
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
@@ -618,38 +618,6 @@ multiplex2(MalBlkPtr mb, char *mod, char
        return q;
 }
 
-#if 0
-static InstrPtr
-dump_crossproduct(MalBlkPtr mb, int l, int r)
-{
-       int z;
-       InstrPtr q;
-
-       q = newStmt1(mb, calcRef, "int");
-       q = pushInt(mb, q, 0);
-       z = getDestVar(q);
-
-       q = newStmt2(mb, algebraRef, projectRef);
-       q = pushArgument(mb, q, r);
-       q = pushArgument(mb, q, z);
-       r = getDestVar(q);
-
-       q = newStmt2(mb, batRef, reverseRef);
-       q = pushArgument(mb, q, r);
-       r = getDestVar(q);
-
-       q = newStmt2(mb, algebraRef, projectRef);
-       q = pushArgument(mb, q, l);
-       q = pushArgument(mb, q, z);
-       l = getDestVar(q);
-
-       q = newStmt2(mb, algebraRef, crossRef);
-       q = pushArgument(mb, q, l);
-       q = pushArgument(mb, q, r);
-       return q;
-}
-#endif
-
 static InstrPtr
 multiplexN(MalBlkPtr mb, char *mod, char *name)
 {
diff --git 
a/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
 
b/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
--- 
a/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
+++ 
b/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
@@ -39,7 +39,7 @@ function user.s0_1(A0:str):void;
     X_49 := algebra.likesubselect(r1_9,A0,"",false);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_50 := algebra.likesubselect(X_12,X_3,A0,"",false);
-    X_15 := sql.subdelta(X_48,X_9,X_49,X_50);
+    X_15 := sql.subdelta(X_48,X_3,X_9,X_49,X_50);
     X_17 := sql.projectdelta(X_15,X_6,X_9,r1_9,X_12);
     X_18 := sql.bind(X_2,"sys","functions","func",0);
     (X_20,r1_28) := sql.bind(X_2,"sys","functions","func",2);
@@ -65,7 +65,7 @@ function user.s1_1(A0:str):void;
     X_49 := algebra.likesubselect(r1_9,A0,"",true);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_50 := algebra.likesubselect(X_12,X_3,A0,"",true);
-    X_15 := sql.subdelta(X_48,X_9,X_49,X_50);
+    X_15 := sql.subdelta(X_48,X_3,X_9,X_49,X_50);
     X_17 := sql.projectdelta(X_15,X_6,X_9,r1_9,X_12);
     X_18 := sql.bind(X_2,"sys","functions","func",0);
     (X_20,r1_28) := sql.bind(X_2,"sys","functions","func",2);
@@ -91,7 +91,7 @@ function user.s2_1(A0:str):void;
     X_49 := algebra.ilikesubselect(r1_9,A0,"",false);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_50 := algebra.ilikesubselect(X_12,X_3,A0,"",false);
-    X_15 := sql.subdelta(X_48,X_9,X_49,X_50);
+    X_15 := sql.subdelta(X_48,X_3,X_9,X_49,X_50);
     X_17 := sql.projectdelta(X_15,X_6,X_9,r1_9,X_12);
     X_18 := sql.bind(X_2,"sys","functions","func",0);
     (X_20,r1_28) := sql.bind(X_2,"sys","functions","func",2);
@@ -117,7 +117,7 @@ function user.s3_1(A0:str):void;
     X_49 := algebra.ilikesubselect(r1_9,A0,"",true);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_50 := algebra.ilikesubselect(X_12,X_3,A0,"",true);
-    X_15 := sql.subdelta(X_48,X_9,X_49,X_50);
+    X_15 := sql.subdelta(X_48,X_3,X_9,X_49,X_50);
     X_17 := sql.projectdelta(X_15,X_6,X_9,r1_9,X_12);
     X_18 := sql.bind(X_2,"sys","functions","func",0);
     (X_20,r1_28) := sql.bind(X_2,"sys","functions","func",2);
@@ -165,7 +165,7 @@ function user.s4_1(A0:str):void;
     X_56 := algebra.likesubselect(r1_9,X_52,"",false,false);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_57 := algebra.likesubselect(X_12,X_3,X_52,"",false,false);
-    X_14 := sql.subdelta(X_55,X_9,X_56,X_57);
+    X_14 := sql.subdelta(X_55,X_3,X_9,X_56,X_57);
     X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
     X_16 := sql.bind(X_2,"sys","functions","func",0);
     (X_18,r1_35) := sql.bind(X_2,"sys","functions","func",2);
@@ -193,7 +193,7 @@ function user.s5_1(A0:str):void;
     X_57 := algebra.likesubselect(r1_9,X_52,"",false,true);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_58 := algebra.likesubselect(X_12,X_3,X_52,"",false,true);
-    X_14 := sql.subdelta(X_56,X_9,X_57,X_58);
+    X_14 := sql.subdelta(X_56,X_3,X_9,X_57,X_58);
     X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
     X_16 := sql.bind(X_2,"sys","functions","func",0);
     (X_18,r1_35) := sql.bind(X_2,"sys","functions","func",2);
@@ -221,7 +221,7 @@ function user.s6_1(A0:str):void;
     X_57 := algebra.likesubselect(r1_9,X_52,"",true,false);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_58 := algebra.likesubselect(X_12,X_3,X_52,"",true,false);
-    X_14 := sql.subdelta(X_56,X_9,X_57,X_58);
+    X_14 := sql.subdelta(X_56,X_3,X_9,X_57,X_58);
     X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
     X_16 := sql.bind(X_2,"sys","functions","func",0);
     (X_18,r1_35) := sql.bind(X_2,"sys","functions","func",2);
@@ -249,7 +249,7 @@ function user.s7_1(A0:str):void;
     X_56 := algebra.likesubselect(r1_9,X_52,"",true,true);
     X_12 := sql.bind(X_2,"sys","functions","name",1);
     X_57 := algebra.likesubselect(X_12,X_3,X_52,"",true,true);
-    X_14 := sql.subdelta(X_55,X_9,X_56,X_57);
+    X_14 := sql.subdelta(X_55,X_3,X_9,X_56,X_57);
     X_15 := sql.projectdelta(X_14,X_6,X_9,r1_9,X_12);
     X_16 := sql.bind(X_2,"sys","functions","func",0);
     (X_18,r1_35) := sql.bind(X_2,"sys","functions","func",2);
diff --git a/sql/test/BugTracker/Tests/explain.SF-1739353.stable.out 
b/sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
--- a/sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
+++ b/sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
@@ -36,7 +36,7 @@ Operation successful
 |     X_62 := algebra.subselect(r1_12,2:sht,2:sht,true,true,true);             
|
 |     X_15 := sql.bind(X_2,"sys","_tables","type",1);            |
 |     X_63 := algebra.subselect(X_15,X_6,2:sht,2:sht,true,true,true);          
|
-|     X_17 := sql.subdelta(X_61,X_12,X_62,X_63);                               
|
+|     X_17 := sql.subdelta(X_61,X_6,X_12,X_62,X_63);                           
|
 |     X_18 := sql.bind(X_2,"sys","_tables","name",0);                  |
 |     (X_20,r1_28) := sql.bind(X_2,"sys","_tables","name",2);          |
 |     X_22 := sql.bind(X_2,"sys","_tables","name",1);                  |
diff --git a/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out 
b/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
--- a/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
+++ b/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
@@ -60,7 +60,7 @@ Operation successful
 |     X_68 := algebra.subselect(r1_12,2:sht,2:sht,true,true,true);         |
 |     X_15 := sql.bind(X_2,"sys","_tables","type",1);         |
 |     X_69 := algebra.subselect(X_15,X_6,2:sht,2:sht,true,true,true);      |
-|     X_17 := sql.subdelta(X_67,X_12,X_68,X_69);                           |
+|     X_17 := sql.subdelta(X_67,X_6,X_12,X_68,X_69);                       |
 |     X_18 := sql.bind(X_2,"sys","_tables","id",0);                    |
 |     (X_20,r1_28) := sql.bind(X_2,"sys","_tables","id",2);            |
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to