Changeset: 636832e361e7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/636832e361e7
Branch: default
Log Message:
merged
diffs (272 lines):
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -484,8 +484,7 @@ SQLhelp sqlhelp1[] = {
"[ HAVING condition [',' ...] ]\n"
"[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] [ CORRESPONDING ]
select ]\n"
"[ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [','
...] ]\n"
- "[ LIMIT { count | param } ]\n"
- "[ OFFSET { count | param } ]\n"
+ "[ limit_offset_clause | offset_fetchfirst_clause ]\n"
"[ SAMPLE size [ SEED size ] ]",
"cte_list,expression,group_by_element,window_definition",
"See also
https://www.monetdb.org/documentation/user-guide/sql-manual/data-manipulation/table-expressions/"},
@@ -832,8 +831,8 @@ SQLhelp sqlhelp2[] = {
NULL},
{"query_expression",
NULL,
- "select_no_parens [ order_by_clause ] [ limit_clause ] [ offset_clause
] [ sample_clause ]",
-
"select_no_parens,order_by_clause,limit_clause,offset_clause,sample_clause",
+ "select_no_parens [ order_by_clause ] [ limit_offset_clause |
offset_fetchfirst_clause ] [ sample_clause ]",
+ "select_no_parens",
NULL},
{"select_no_parens",
NULL,
@@ -842,6 +841,21 @@ SQLhelp sqlhelp2[] = {
"| '(' select_no_parens ')' }",
"column_exp_commalist,from_clause,window_clause,where_clause,group_by_clause,having_clause,corresponding",
NULL},
+ {"order_by_clause",
+ NULL,
+ "ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [','
...]",
+ "",
+ NULL},
+ {"limit_offset_clause",
+ NULL,
+ "[ LIMIT { count | param } ] [ OFFSET { count | param } ]",
+ "",
+ NULL},
+ {"offset_fetchfirst_clause",
+ NULL,
+ "[ OFFSET { count | param } [ {ROW|ROWS} ] ] [ FETCH {FIRST|NEXT} [
count | param ] {ROW|ROWS} ONLY ]",
+ "",
+ NULL},
{"corresponding",
NULL,
"{ CORRESPONDING | CORRESPONDING BY '(' column_ref_commalist ')' }",
diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -1,3 +1,18 @@
# ChangeLog file for sql
# This file is updated with Maddlog
+* Fri Jul 7 2023 Niels Nes <[email protected]>
+- Added SQL support for: <result offset clause> and <fetch first clause>
+ in <query expression> ::=
+ [ <with clause> ] <query expression body>
+ [ <order by clause> ]
+ [ <result offset clause> ]
+ [ <fetch first clause> ]
+ [ <sample clause> ]
+
+ <result offset clause> ::=
+ OFFSET <offset row count> [ {ROW|ROWS} ]
+
+ <fetch first clause> ::=
+ FETCH {FIRST|NEXT} <fetch first row count> {ROW|ROWS} ONLY
+
diff --git a/sql/test/Tests/All b/sql/test/Tests/All
--- a/sql/test/Tests/All
+++ b/sql/test/Tests/All
@@ -70,6 +70,7 @@ create_in_schema
null-byte-hang
orderby_limit
orderby_non_selection_column
+limit_offset_fetchfirst
psm
diff --git a/sql/test/Tests/limit_offset_fetchfirst.test
b/sql/test/Tests/limit_offset_fetchfirst.test
new file mode 100644
--- /dev/null
+++ b/sql/test/Tests/limit_offset_fetchfirst.test
@@ -0,0 +1,188 @@
+-- tests [ LIMIT y ] [ OFFSET x ]
+
+statement ok
+drop table if exists limittest
+
+statement ok
+create table limittest as select * from "sys"."generate_series"(1, 221)
+
+query I nosort
+select * from limittest LIMIT 5
+----
+1
+2
+3
+4
+5
+
+statement error
+select * from limittest LIMIT +5
+
+statement error
+select * from limittest LIMIT 0
+
+statement error
+select * from limittest LIMIT -5
+
+statement error
+select * from limittest LIMIT 20, 50
+
+statement error
+select * from limittest LIMIT OFFSET 20, 50
+
+statement error
+select * from limittest OFFSET 20 LIMIT 50
+
+query I rowsort
+select * from limittest LIMIT 5 OFFSET 20
+----
+21
+22
+23
+24
+25
+
+statement error
+select * from limittest LIMIT 5 OFFSET 20 ROWS
+
+statement error
+select * from limittest LIMIT 5 ROWS OFFSET 20
+
+
+-- tests [ OFFSET pos_lng [ {ROW|ROWS} ] ] [ FETCH {FIRST|NEXT} nonzero_lng
{ROW|ROWS} ONLY ]
+
+statement error
+select * from limittest OFFSET
+
+statement error
+select * from limittest OFFSET ROW
+
+query I rowsort
+select * from limittest OFFSET 218
+----
+219
+220
+
+query I rowsort
+select * from limittest OFFSET 219 ROW
+----
+220
+
+query I rowsort
+select * from limittest OFFSET 218 ROWS
+----
+219
+220
+
+statement error
+select * from limittest OFFSET (200 + 18) ROWS
+
+statement error
+select * from limittest FETCH ROWS
+
+statement error
+select * from limittest FETCH ROWS ONLY
+
+statement error
+select * from limittest FETCH 0 ROWS ONLY
+
+query I rowsort
+select * from limittest FETCH NEXT ROW ONLY
+----
+1
+
+query I rowsort
+select * from limittest FETCH FIRST 4 ROWS ONLY
+----
+1
+2
+3
+4
+
+query I rowsort
+select * from limittest OFFSET 5 FETCH FIRST 4 ROWS ONLY
+----
+6
+7
+8
+9
+
+query I rowsort
+select * from limittest OFFSET 5 FETCH NEXT 4 ROWS ONLY
+----
+6
+7
+8
+9
+
+query I rowsort
+select * from limittest FETCH FIRST ROW ONLY
+----
+1
+
+query I rowsort
+select * from limittest FETCH FIRST 3 ROWS ONLY
+----
+1
+2
+3
+
+query I rowsort
+select * from limittest OFFSET 10 FETCH FIRST 3 ROWS ONLY
+----
+11
+12
+13
+
+query I rowsort
+select * from limittest OFFSET 218
+----
+219
+220
+
+query I rowsort
+select * from limittest OFFSET 220
+----
+
+query I rowsort
+select * from limittest OFFSET 222
+----
+
+
+statement error
+select * from limittest LIMIT 6 OFFSET 5 FETCH NEXT 4 ROWS ONLY
+
+statement error
+select * from limittest LIMIT 6 FETCH NEXT 4 ROWS ONLY
+
+statement error
+select * from limittest FETCH NEXT 4 ROWS ONLY LIMIT 6
+
+statement error
+select * from limittest FETCH NEXT 4 ROWS ONLY OFFSET 5
+
+query I rowsort
+select * from limittest FETCH FIRST 3 ROWS ONLY
+----
+1
+2
+3
+
+query I rowsort
+select * from (select * from limittest OFFSET 50 ROWS FETCH FIRST 10 ROWS
ONLY) t OFFSET 5 ROW FETCH FIRST 4 ROWS ONLY
+----
+56
+57
+58
+59
+
+query I rowsort
+select * from (select * from limittest order by 1 desc OFFSET 50 ROWS FETCH
FIRST 10 ROWS ONLY) t order by 1 asc OFFSET 5 ROW FETCH FIRST 4 ROWS ONLY
+----
+166
+167
+168
+169
+
+statement ok
+drop table if exists limittest
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]