]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove a NEVER() that is no longer true. Fix for [36ffedcb9].
authordan <dan@noemail.net>
Fri, 27 Dec 2019 20:06:32 +0000 (20:06 +0000)
committerdan <dan@noemail.net>
Fri, 27 Dec 2019 20:06:32 +0000 (20:06 +0000)
FossilOrigin-Name: 597896ed0ae9e2960a8f39576bd7f77a11dccc1da84b6a44ebb5c38d90ebc330

manifest
manifest.uuid
src/expr.c
test/window1.test

index 4467fb0d1d1fcfc165f8b66609e374fc28e917fb..3dc5335b673a2294213b1e2044a2d7a33659a177 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\sinvolving\swindow\sfunction\saliases\sbeing\sreferenced\sfrom\ssub-selects.
-D 2019-12-27T19:46:07.834
+C Remove\sa\sNEVER()\sthat\sis\sno\slonger\strue.\sFix\sfor\s[36ffedcb9].
+D 2019-12-27T20:06:32.777
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -480,7 +480,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 F src/dbstat.c 6c407e549406c10fde9ac3987f6d734459205239ad370369bc5fcd683084a4fa
 F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4
-F src/expr.c a01bfcf51be41214319d30abfcdc2a1b4fd0291b5e2a4deeb1f509cc06d59c2c
+F src/expr.c 188a8c039c95a0b4adb6c9dcde7252810c90e5145333634b924cbe348b187df8
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 92a248ec0fa4ed8ab60c98d9b188ce173aaf218f32e7737ba77deb2a684f9847
 F src/func.c ed33e38cd642058182a31a3f518f2e34f4bbe53aa483335705c153c4d3e50b12
@@ -1714,7 +1714,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 9b17982e6ffe57604946d3ec4b432a47b6449feb004fa3ae6facc151fc65184b
+F test/window1.test caf402a9726a7cbc84106c3d3ba833bbff5ae00223d61c02936bf63049564318
 F test/window2.tcl 492c125fa550cda1dd3555768a2303b3effbeceee215293adf8871efc25f1476
 F test/window2.test e466a88bd626d66edc3d352d7d7e1d5531e0079b549ba44efb029d1fbff9fd3c
 F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
@@ -1853,7 +1853,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 4e6fbb1a5100fe29209bcf668fbecf3a733034b84925265d8a15b0a84baf6cf0
-R d631658c66cc50630f2377c6822b52c7
+P e3b5fc05c00fc58be7a7c94ce1d97a5b05113f39aba03df64aab08364f85616b
+R a966e346a033c0ab1a88c0d109a734aa
 U dan
-Z 7e0f8d6ba4dc51c9e12eed15e2098a4a
+Z ba0d31a3cdb9b737f0aa85ce7fe964a5
index 8286c8856917527bad32fa6702eb45bb80b41c04..55ef3d6a9176244deca60b52f1f5e0a496a8de66 100644 (file)
@@ -1 +1 @@
-e3b5fc05c00fc58be7a7c94ce1d97a5b05113f39aba03df64aab08364f85616b
\ No newline at end of file
+597896ed0ae9e2960a8f39576bd7f77a11dccc1da84b6a44ebb5c38d90ebc330
\ No newline at end of file
index 92786732f9eb7ddb04c8e23c478aab6d87a34049..a5f9a43af674146c6bdf9ad61a104086425fcc57 100644 (file)
@@ -5449,12 +5449,13 @@ struct SrcCount {
 ** Count the number of references to columns.
 */
 static int exprSrcCount(Walker *pWalker, Expr *pExpr){
-  /* The NEVER() on the second term is because sqlite3FunctionUsesThisSrc()
-  ** is always called before sqlite3ExprAnalyzeAggregates() and so the
-  ** TK_COLUMNs have not yet been converted into TK_AGG_COLUMN.  If
-  ** sqlite3FunctionUsesThisSrc() is used differently in the future, the
-  ** NEVER() will need to be removed. */
-  if( pExpr->op==TK_COLUMN || NEVER(pExpr->op==TK_AGG_COLUMN) ){
+  /* There was once a NEVER() on the second term on the grounds that
+  ** sqlite3FunctionUsesThisSrc() was always called before 
+  ** sqlite3ExprAnalyzeAggregates() and so the TK_COLUMNs have not yet 
+  ** been converted into TK_AGG_COLUMN. But this is no longer true due
+  ** to window functions - sqlite3WindowRewrite() may now indirectly call
+  ** FunctionUsesThisSrc() when creating a new sub-select. */
+  if( pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN ){
     int i;
     struct SrcCount *p = pWalker->u.pSrcCount;
     SrcList *pSrc = p->pSrc;
index 450c649b2191aef0affa7ce892d5deadfa1c2652..60c23dbda93084ceb5cb5985020047b0b3275272 100644 (file)
@@ -1491,4 +1491,29 @@ do_catchsql_test 43.2.6 {
   SELECT a, 1+sum(b) OVER (ORDER BY a) AS abc FROM t1 ORDER BY (SELECT abc)
 } {1 {misuse of aliased window function abc}}
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 44.1 {
+  CREATE TABLE t0(c0);
+}
+
+do_catchsql_test 44.2.1 {
+  SELECT ntile(0) OVER ();
+} {1 {argument of ntile must be a positive integer}}
+do_catchsql_test 44.2.2 {
+  SELECT (0, 0) IN(SELECT MIN(c0), NTILE(0) OVER()) FROM t0;
+} {1 {argument of ntile must be a positive integer}}
+
+do_execsql_test 44.3.1 {
+  SELECT ntile(1) OVER ();
+} {1}
+do_execsql_test 44.3.2 {
+  SELECT (0, 0) IN(SELECT MIN(c0), NTILE(1) OVER()) FROM t0;
+} {0}
+
+do_execsql_test 44.4.2 {
+  INSERT INTO t0 VALUES(2), (1), (0);
+  SELECT (0, 1) IN(SELECT MIN(c0), NTILE(1) OVER()) FROM t0;
+} {1}
+
 finish_test