Changeset: 45744fd91741 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=45744fd91741
Modified Files:
sql/src/backends/monet5/sql_gencode.mx
Branch: Oct2010
Log Message:
add uselect2 over multiple columns (this version assumes aligned columns).
diffs (53 lines):
diff -r 5ea832cf8ecf -r 45744fd91741 sql/src/backends/monet5/sql_gencode.mx
--- a/sql/src/backends/monet5/sql_gencode.mx Wed Oct 20 09:16:10 2010 +0200
+++ b/sql/src/backends/monet5/sql_gencode.mx Wed Oct 20 09:17:32 2010 +0200
@@ -1041,10 +1041,10 @@
case st_uselect2:
case st_select2:
case st_join2:{
+ InstrPtr r,p;
int l = _dumpstmt(sql, mb, s->op1.stval);
stmt *base, *low = NULL, *high = NULL;
- int r1 = -1, r2 = -1;
- int rs = 0;
+ int r1 = -1, r2 = -1, rs = 0, k;
char *cmd =
(s->type == st_select2) ? selectRef :
@@ -1052,11 +1052,31 @@
(s->flag&ANTI ? antiuselectRef : uselectRef) :
joinRef;
- if (s->op2.stval->nrcols > 0 &&
- (s->type == st_select2 || s->type == st_uselect)) {
- /* We need to add a range function to m5 */
- /* range(a,l,h,lb:bit,hb:bit):bat[:any,:bit] */
- assert(0);
+ if ((s->op2.stval->nrcols > 0 || s->op3.stval->nrcols)
&&
+ (s->type == st_select2 || s->type == st_uselect2)) {
+ char *mod = calcRef;
+ char *op1 = "<", *op2 = "<";
+
+ r1 = _dumpstmt(sql, mb, s->op2.stval);
+ r2 = _dumpstmt(sql, mb, s->op3.stval);
+
+ if (s->flag&1)
+ op1 = "<=";
+ if (s->flag&2)
+ op2 = "<=";
+
+ q =
multiplex2(mb,mod,convertOperator(op1),l,r1,TYPE_bit);
+
+ r =
multiplex2(mb,mod,convertOperator(op2),l,r2,TYPE_bit);
+ p = newStmt1(mb, batcalcRef, "and");
+ p = pushArgument(mb, p, getDestVar(q));
+ p = pushArgument(mb, p, getDestVar(r));
+ k = getDestVar(p);
+
+ q = newStmt2(mb, algebraRef, uselectRef);
+ q = pushArgument(mb, q, k);
+ q = pushBit(mb, q, TRUE);
+ s->nr = getDestVar(q);
break;
}
/* if st_join2 try to convert to bandjoin */
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list