]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Backport the "x IS NULL" query planner enhancement of [2353176811f] to
authordrh <drh@noemail.net>
Thu, 17 Mar 2011 01:53:00 +0000 (01:53 +0000)
committerdrh <drh@noemail.net>
Thu, 17 Mar 2011 01:53:00 +0000 (01:53 +0000)
the 3.7.2 branch.

FossilOrigin-Name: 68daf20d019a0a84764d635a91eaa9faeeabbab4

manifest
manifest.uuid
src/where.c

index 1c8cf637d85929dd45d7f7a5bd389003394483e5..6054817eb32ba9b2903e395bde49894c5c439f7b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,8 @@
-C Backport\sthe\sSQLITE_OMIT_UNIQUE_ENFORCEMENT\schange\sfrom\scheckin\sb86999436e\son\sthe\strunk.
-D 2011-03-12T05:55:38.900
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+C Backport\sthe\s"x\sIS\sNULL"\squery\splanner\senhancement\sof\s[2353176811f]\sto\nthe\s3.7.2\sbranch.
+D 2011-03-17T01:53:00.823
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 543f91f24cd7fee774ecc0a61c19704c0c3e78fd
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -230,7 +233,7 @@ F src/vtab.c 0e8e0cb30dffb078367e843e84e37ef99236c7e4
 F src/wal.c 5ac2119e23ee4424599d4275b66dc88d612a0543
 F src/wal.h 96669b645e27cd5a111ba59f0cae7743a207bc3c
 F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
-F src/where.c 124e56fc30ffc1d8284bcd60151829afb5d55a2f
+F src/where.c deee5203073e0f63d79fd104b15dbebb6083dc03
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
 F test/all.test 6745008c144bd2956d58864d21f7b304689c1cce
@@ -847,7 +850,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 2d55234ea3b8a8d6f18683d51f05945394e97275
-R 1db94dc3291fba1026c28b4049abf650
-U shaneh
-Z 84dd2ae494c40f1290217661561c5409
+P 668b91dbff036c6b76a5611cc3ebe455d277ed59
+R 3deac5f89493711dcb01d153d7e3d240
+U drh
+Z c3047dd905fb57f35c3045f1bdcf4daf
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFNgWmAoxKgR168RlERAkI3AJ46nXurlFqON8jJkpUsMsyM4a2EqwCeJzde
+XXyg86cVMugwqsg1J9KaC2s=
+=slbW
+-----END PGP SIGNATURE-----
index ec6b70c56bd928e4c15eb4cb72429cee61373201..e04ff4770d08b6bba263a244666b6e00839824f3 100644 (file)
@@ -1 +1 @@
-668b91dbff036c6b76a5611cc3ebe455d277ed59
\ No newline at end of file
+68daf20d019a0a84764d635a91eaa9faeeabbab4
\ No newline at end of file
index 89f3f33b06552e336b1fa574a0614b89efbde804..4f69258a2d4627184755b3c24bb96ef4bb517f35 100644 (file)
@@ -2546,8 +2546,12 @@ int whereEqualScanEst(
 
   assert( p->aSample!=0 );
   aff = p->pTable->aCol[p->aiColumn[0]].affinity;
-  rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
-  if( rc ) goto whereEqualScanEst_cancel;
+  if( pExpr ){
+    rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
+    if( rc ) goto whereEqualScanEst_cancel;
+  }else{
+    pRhs = sqlite3ValueNew(pParse->db);
+  }
   if( pRhs==0 ) return SQLITE_NOTFOUND;
   rc = whereRangeRegion(pParse, p, pRhs, 0, &iLower);
   if( rc ) goto whereEqualScanEst_cancel;
@@ -2936,7 +2940,9 @@ static void bestBtreeIndex(
     ** VALUE and how common that value is according to the histogram.
     */
     if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 ){
-      if( pFirstTerm->eOperator==WO_EQ ){
+      if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
+        testcase( pFirstTerm->eOperator==WO_EQ );
+        testcase( pFirstTerm->pOperator==WO_ISNULL );
         whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
       }else if( pFirstTerm->eOperator==WO_IN && bInEst==0 ){
         whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);