]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix error handling for the case where a window function is passed the wrong number...
authordan <dan@noemail.net>
Sat, 13 Jul 2019 17:45:25 +0000 (17:45 +0000)
committerdan <dan@noemail.net>
Sat, 13 Jul 2019 17:45:25 +0000 (17:45 +0000)
FossilOrigin-Name: 871796bb19e61c1282d8ac97a82d8b57bde50f2a2a08004ab53136d77c138df4

manifest
manifest.uuid
src/resolve.c
test/filter1.test
test/window1.test
test/windowerr.tcl
test/windowerr.test

index 517bd8c1ef32ada826265357e201311e31d86486..596800764312320df9f2bfb67ac0661188eb32a6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sdouble-quoted\sstring\sliteral\sused\sin\sthe\s".schema"\scommand\sof\sthe\sCLI.
-D 2019-07-13T17:21:47.833
+C Fix\serror\shandling\sfor\sthe\scase\swhere\sa\swindow\sfunction\sis\spassed\sthe\swrong\snumber\sof\sarguments.
+D 2019-07-13T17:45:25.999
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -520,7 +520,7 @@ F src/pragma.h 4a9fabff14db4487a734dfeeb4be984ce662bfdccfae16145b9c732327735e13
 F src/prepare.c d633c3610c23dc98239ea445803c2a6188c2b8ab647e3df4243f369516e6c8d1
 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
-F src/resolve.c 6d96d5c1cfa48e49df160aee6032dbb1f79e1d04163c34f9be5625828ac9a2ec
+F src/resolve.c 17d61645b0782809aa2cc68225e93c3ed6a55ca59edcdbf599b5b4a828cec9fb
 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
 F src/select.c 1ac359aed1a83239ce3434c0620e488ad9cf25dee829b86c89f7fe4b5cd366c5
 F src/shell.c.in 5c0171b66ee0aa4be9d5ca112f1ef50aec33dd48e8cbcb36779b9ddba068854a
@@ -856,7 +856,7 @@ F test/extraquick.test cb254400bd42bfb777ff675356aabf3287978f79
 F test/fallocate.test 37a62e396a68eeede8f8d2ecf23573a80faceb630788d314d0a073d862616717
 F test/filectrl.test 6e871c2d35dead1d9a88e176e8d2ca094fec6bb3
 F test/filefmt.test f393e80c4b8d493b7a7f8f3809a8425bbf4292af1f5140f01cb1427798a2bbd4
-F test/filter1.test 5830d6214399abb874f2c0293d299b8cbd02d56b8e529e509befd322f1bc2003
+F test/filter1.test b6d80d882bc2dfc8f5e6eff3799a2b24f23681cae18a5dc7c1770929cd5bc47e
 F test/filter2.tcl 44e525497ce07382915f01bd29ffd0fa49dab3adb87253b5e5103ba8f93393e8
 F test/filter2.test 485cf95d1f6d6ceee5632201ca52a71868599836f430cdee42e5f7f14666e30a
 F test/fkey1.test d11dbb8a93ead9b5c46ae5d02da016d61245d47662fb2d844c99214f6163f768
@@ -1698,7 +1698,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
 F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
-F test/window1.test 8d453bfaa3f8f0873ba16ca1270c7368f18445065a0003a1b5954ac4e95797b4
+F test/window1.test 18ec9bbd5b01a21504817b278fffa1678d9a2339d7fbe8548a1822eb19f94b15
 F test/window2.tcl a44834af6267be6e14882311ef8790bf5047f1b9bc25685ee1762d48dc24f1e7
 F test/window2.test 2f3ae63e171dce7f2ac29a41020f4da413b1d7bdaba48ee124fd336b152e34c5
 F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
@@ -1712,8 +1712,8 @@ F test/window7.test ce7f865241fdd1c5c4db869cd7bb2986c3be836bc2e73649a6846dd920f6
 F test/window8.tcl 9e9a82ae9eea90a4a83481d641a812b974980c38f9247f3b89a6e3c8bed45518
 F test/window8.test df187dc19921f7be0ab709d531d681bd80ccaac96a913a89ecee8b272b91d43f
 F test/window9.test 06495ac733843849b1fca8a79d13ba330d04aba02099703198af2ba7e231f90c
-F test/windowerr.tcl abf4d6d0c6d360213af98ed7d538295d905689e83692106f3ece0e3afb9d7f36
-F test/windowerr.test 675b5e6debfc9370bfacb0b91e2a93a8923512f92600b16f4ea70a1cd9b8e6e4
+F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0
+F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3cc1819b
 F test/windowfault.test 403693d7d951c5473f052f7ecddb61ed15ac9d212f238b8904ea270ba90f83e5
 F test/with1.test d32792084dcb5f6c047d77bb8a032822ef9fe050ade07d0aeffa37753a05e3c9
 F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab
@@ -1834,7 +1834,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P ee293e5aeac0b05a8b809095610fd8b4fdaf8e68cd368de90ec0d45e3582ffe5
-R 8c50384212355af59289eabe0add16fd
-U drh
-Z 03a48f8a632fec3742ab8189dd22e077
+P fcd937d9786a82ef4147e657d54ea0beb6ac87e2eb1677186b318493d473077b
+R d26f001a613609b213ec4312466e7422
+U dan
+Z b3f894d87d1da0039bf83bf1734fe28d
index 34ecc147f19573aab44e40e792d1fe45a9f3c0a5..80e79c0a7b650c026224612ce85c75ebdd4651c7 100644 (file)
@@ -1 +1 @@
-fcd937d9786a82ef4147e657d54ea0beb6ac87e2eb1677186b318493d473077b
\ No newline at end of file
+871796bb19e61c1282d8ac97a82d8b57bde50f2a2a08004ab53136d77c138df4
\ No newline at end of file
index 872d04f57acd7526e99f0d00f2e455af124a9986..54475f6d0394e6be8e46b6f961bb76fd20cb1880 100644 (file)
@@ -851,13 +851,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
           sqlite3ErrorMsg(pParse, "misuse of %s function %.*s()",zType,nId,zId);
           pNC->nErr++;
           is_agg = 0;
-        }else if( is_agg==0 && ExprHasProperty(pExpr, EP_WinFunc) ){
-          assert( !IsWindowFunc(pExpr) );
-          sqlite3ErrorMsg(pParse, 
-              "filter clause may not be used with non-aggregate %.*s()", 
-              nId, zId
-          );
-          pNC->nErr++;
         }
 #else
         if( (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) ){
@@ -878,6 +871,15 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
                nId, zId);
           pNC->nErr++;
         }
+#ifndef SQLITE_OMIT_WINDOWFUNC
+        else if( is_agg==0 && ExprHasProperty(pExpr, EP_WinFunc) ){
+          sqlite3ErrorMsg(pParse, 
+              "FILTER may not be used with non-aggregate %.*s()", 
+              nId, zId
+          );
+          pNC->nErr++;
+        }
+#endif
         if( is_agg ){
           /* Window functions may not be arguments of aggregate functions.
           ** Or arguments of other window functions. But aggregate functions
index f0667c91cbeca85bcb4c7a0e58cd3a82d1d270fe..b4a7ba8e6b2a351d417b3d5a8ab64cf28224b28d 100644 (file)
@@ -91,7 +91,7 @@ do_execsql_test 2.0 {
 
 do_catchsql_test 2.1 {
   SELECT upper(a) FILTER (WHERE a=1) FROM t1
-} {1 {filter clause may not be used with non-aggregate upper()}}
+} {1 {FILTER may not be used with non-aggregate upper()}}
 
 do_catchsql_test 2.2 {
   SELECT sum(a) FILTER (WHERE 1 - max(a) OVER () > 0) FROM t1
index 681573896c478c0fe8f31d4123374c831ed91ca1..3f11df1575a2a6759c513892195e8a7b40cc17f1 100644 (file)
@@ -257,6 +257,9 @@ do_catchsql_test 7.1.6 {
 do_catchsql_test 7.1.7 {
   SELECT max(x) OVER abc FROM t1 WINDOW def AS (ORDER BY y);
 } {1 {no such window: abc}}
+do_catchsql_test 7.1.8 {
+  SELECT row_number(x) OVER () FROM t1
+} {1 {wrong number of arguments to function row_number}}
 
 do_execsql_test 7.2 {
   SELECT 
index 272ce6bae783d61491095aea897b775f3f756fc1..294e68dc1811295f4fa3768ab4f371c48710aa66 100644 (file)
@@ -64,6 +64,9 @@ errorsql_test 3.2 {
   WINDOW win AS (ROWS BETWEEN 10 PRECEDING AND x'ABCD' FOLLOWING)
 }
 
+errorsql_test 3.3 {
+  SELECT row_number(a) OVER () FROM t1;
+}
 
 finish_test
 
index 9a4f0a64640d5e2278dadd934dfe112ea6a448d3..40d994de85a40dfa09fe50947cc4b612044d3256 100644 (file)
@@ -108,4 +108,9 @@ do_test 3.2 { catch { execsql {
   WINDOW win AS (ROWS BETWEEN 10 PRECEDING AND x'ABCD' FOLLOWING)
 } } } 1
 
+# PG says ERROR:  function row_number(integer) does not exist
+do_test 3.3 { catch { execsql {
+  SELECT row_number(a) OVER () FROM t1;
+} } } 1
+
 finish_test