Update of /cvsroot/monetdb/sql/src/backends/monet4
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8510/src/backends/monet4
Modified Files:
Tag: SQL_2-24
sql_gencode.mx
Log Message:
fixes for the limit/offset with order bug
U sql_gencode.mx
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_gencode.mx,v
retrieving revision 1.174.2.1
retrieving revision 1.174.2.2
diff -u -d -r1.174.2.1 -r1.174.2.2
--- sql_gencode.mx 4 Jun 2008 20:19:12 -0000 1.174.2.1
+++ sql_gencode.mx 11 Jun 2008 16:09:33 -0000 1.174.2.2
@@ -570,20 +570,26 @@
break;
case st_limit:{
int l = backend_dumpstmt_(s->op1.stval, nr, sql);
- int r1 = backend_dumpstmt_(s->op2.stval, nr, sql);
- int r2 = backend_dumpstmt_(s->op3.stval, nr, sql);
+ int offset = backend_dumpstmt_(s->op2.stval, nr, sql);
+ int topn = backend_dumpstmt_(s->op3.stval, nr, sql);
if (s->flag) { /* topN direction */
buf = NEW_ARRAY(char, BUFSIZ + 1);
- len = snprintf(buf, BUFSIZ, "var s%d :=
s%d.pqueue_topn(s%d + s%d, %d);\n", -s->nr, l, r1, r2, s->flag-1);
- if (s->op2.stval->op1.aval->data.val.ival)
- len += snprintf(buf+len, BUFSIZ-len,
"s%d := s%d.pqueue_topn(s%d, %d);\n", -s->nr, -s->nr, r2, (s->flag-1)?0:1);
+ len = snprintf(buf, BUFSIZ, "var s%d :=
s%d.pqueue_topn(s%d + s%d, %d);\n", -s->nr, l, offset, topn, s->flag-1);
+ if (s->op2.stval->op1.aval->data.val.ival) {
+ if ((s->flag-1) > 0)
+ len += snprintf(buf+len,
BUFSIZ-len, "s%d := s%d.reverse().sort()", -s->nr, -s->nr);
+ else
+ len += snprintf(buf+len,
BUFSIZ-len, "s%d := s%d.reverse().sort_rev()", -s->nr, l);
+ len += snprintf(buf + len, BUFSIZ -
len, ".reverse();\n");
+ len += snprintf(buf+len, BUFSIZ-len,
"s%d := s%d.slice(s%d, s%d + s%d - 1);\n", -s->nr, -s->nr, offset, offset, topn
);
+ }
dump(sql, buf, len, -s->nr);
} else {
buf = NEW_ARRAY(char, BUFSIZ + 1);
- len = snprintf(buf, BUFSIZ, "var s%d :=
s%d.slice(s%d, s%d + s%d - 1);\n", -s->nr, l, r1, r1, r2);
+ len = snprintf(buf, BUFSIZ, "var s%d :=
s%d.slice(s%d, s%d + s%d - 1);\n", -s->nr, l, offset, offset, topn);
dump(sql, buf, len, -s->nr);
}
_DELETE(buf);
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins