Changeset: a912db812a1f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a912db812a1f
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/test/BugTracker-2026/Tests/All
sql/test/Tests/limit_offset_fetchfirst.test
Branch: default
Log Message:
allow limit 0, using firstn
diffs (85 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4786,6 +4786,8 @@ sub_topn(backend *be, stmt *sub, stmt **
*Psub = stmt_list(be, npl);
}
+ if (!sub)
+ return sub;
/* also rebuild sub as multiple orderby expressions may use the sub
table (ie aren't part of the result columns) */
pl = sub->op4.lval;
npl = sa_list(be->mvc->sa);
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1346,33 +1346,20 @@ stmt_limit(backend *be, stmt *col, stmt
}
}
} else {
- int len;
-
- q = newStmt(mb, calcRef, plusRef);
- if (q == NULL)
- goto bailout;
- q = pushArgument(mb, q, offset->nr);
- q = pushArgument(mb, q, limit->nr);
- len = getDestVar(q);
- pushInstruction(mb, q);
-
- /* since both arguments of algebra.subslice are
- inclusive correct the LIMIT value by
- subtracting 1 */
- q = newStmt(mb, calcRef, minusRef);
- if (q == NULL)
- goto bailout;
- q = pushArgument(mb, q, len);
- q = pushInt(mb, q, 1);
- len = getDestVar(q);
- pushInstruction(mb, q);
-
- q = newStmt(mb, algebraRef, subsliceRef);
+ q = newStmtArgs(mb, algebraRef, firstnRef, 9);
if (q == NULL)
goto bailout;
q = pushArgument(mb, q, c);
+ q = pushNilBat(mb, q);
+ q = pushNilBat(mb, q);
+ q = pushArgument(mb, q, limit->nr);
q = pushArgument(mb, q, offset->nr);
- q = pushArgument(mb, q, len);
+ q = pushBit(mb, q, false); /* return skipped */
+ q = pushBit(mb, q, bit_nil); /* no direction */
+ q = pushBit(mb, q, bit_nil); /* nulls not handled specialy */
+ q = pushBit(mb, q, false); /* no info on distinct */
+
+ l = getArg(q, 0);
l = getDestVar(q);
pushInstruction(mb, q);
}
diff --git a/sql/test/BugTracker-2026/Tests/All
b/sql/test/BugTracker-2026/Tests/All
--- a/sql/test/BugTracker-2026/Tests/All
+++ b/sql/test/BugTracker-2026/Tests/All
@@ -149,7 +149,7 @@ KNOWNFAIL?7957-tail_type-crash
KNOWNFAIL?7961-list_empty-crash
KNOWNFAIL?7963-having-sum-or-exists-or-sum-bug
7964-optimize-limit-0-queries
-KNOWNFAIL?7965-select-1-limit-0-bug
+7965-select-1-limit-0-bug
7966-optimize-select-distinct-from-union-queries
7967-optimize-in-select-distinct-queries
7968-optimize-distinct-from-q1-except-q2
diff --git a/sql/test/Tests/limit_offset_fetchfirst.test
b/sql/test/Tests/limit_offset_fetchfirst.test
--- a/sql/test/Tests/limit_offset_fetchfirst.test
+++ b/sql/test/Tests/limit_offset_fetchfirst.test
@@ -18,8 +18,9 @@ select * from limittest ORDER BY value L
statement error
select * from limittest LIMIT +5
-statement error
+query I
select * from limittest LIMIT 0
+----
statement error
select * from limittest LIMIT -5
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]