]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Speed this branch up a bit by filtering before the virtual table layer when schemalint-failure
authordan <dan@noemail.net>
Thu, 20 Apr 2017 16:43:32 +0000 (16:43 +0000)
committerdan <dan@noemail.net>
Thu, 20 Apr 2017 16:43:32 +0000 (16:43 +0000)
sampling user data.

FossilOrigin-Name: 8e57c31340dd9ffc457da63c5996fb1b573f8154f864ec2b52c15f399906ac8b

ext/expert/sqlite3expert.c
manifest
manifest.uuid

index d57897310123c6bd6858f4c82273c1c571fd5b87..3ee74b5710383a018a26a9ff3e90679403f62b88 100644 (file)
@@ -349,11 +349,6 @@ typedef struct ExpertCsr ExpertCsr;
 struct ExpertCsr {
   sqlite3_vtab_cursor base;
   sqlite3_stmt *pData;
-
-  int iTarget;                    /* Target as a percentage */
-  double target;                  /* Target nRet/nRow value */
-  double nRow;                    /* Rows seen */
-  double nRet;                    /* Rows returned */
 };
 
 static char *expertDequote(const char *zIn){
@@ -545,28 +540,16 @@ static int expertEof(sqlite3_vtab_cursor *cur){
 static int expertNext(sqlite3_vtab_cursor *cur){
   ExpertCsr *pCsr = (ExpertCsr*)cur;
   int rc = SQLITE_OK;
-  int bRet;
-  assert( pCsr->pData );
 
-  do {
-    rc = sqlite3_step(pCsr->pData);
-    if( rc!=SQLITE_ROW ){
-      rc = sqlite3_finalize(pCsr->pData);
-      pCsr->pData = 0;
-      bRet = 1;
-    }else{
-      rc = SQLITE_OK;
-      bRet = (pCsr->nRow==0.0 || pCsr->nRow/pCsr->nRet < pCsr->target);
-      if( bRet==0 ){
-        unsigned short rnd;
-        sqlite3_randomness(2, (void*)&rnd);
-        bRet = ((int)rnd % 100) <= pCsr->iTarget;
-      }
-    }
-    pCsr->nRow += 1.0;
-  }while( bRet==0 );
+  assert( pCsr->pData );
+  rc = sqlite3_step(pCsr->pData);
+  if( rc!=SQLITE_ROW ){
+    rc = sqlite3_finalize(pCsr->pData);
+    pCsr->pData = 0;
+  }else{
+    rc = SQLITE_OK;
+  }
 
-  pCsr->nRet += 1.0;
   return rc;
 }
 
@@ -606,14 +589,9 @@ static int expertFilter(
 
   rc = sqlite3_finalize(pCsr->pData);
   pCsr->pData = 0;
-  pCsr->nRow = 0.0;
-  pCsr->nRet = 0.0;
-  pCsr->iTarget = pExpert->iSample;
-  pCsr->target = (double)pExpert->iSample / 100.0;
-
   if( rc==SQLITE_OK ){
     rc = idxPrintfPrepareStmt(pExpert->db, &pCsr->pData, &pVtab->base.zErrMsg,
-        "SELECT * FROM main.%Q", pVtab->pTab->zName
+        "SELECT * FROM main.%Q WHERE sample()", pVtab->pTab->zName
     );
   }
 
@@ -1703,9 +1681,9 @@ static int idxPopulateStat1(sqlite3expert *p, char **pzErr){
     rc = idxPopulateOneStat1(p, pIndexXInfo, pWrite, zTab, zIdx, pzErr);
     iPrev = iRowid;
   }
-  if( p->iSample<100 ){
-    rc = sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp." UNIQUE_TABLE_NAME,
-        0,0,0
+  if( rc==SQLITE_OK && p->iSample<100 ){
+    rc = sqlite3_exec(p->dbv, 
+        "DROP TABLE IF EXISTS temp." UNIQUE_TABLE_NAME, 0,0,0
     );
   }
 
index 86d64841b657d7678470a7321ac55d2a4292c6aa..78e4264cc9073d72a4c4e88990fa31882e4b726e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Avoid\screating\sa\stemp\stable\sin\sthe\suser\sdatabase\sin\sthe\ssqlite3_expert\scode.\nTrouble\sis,\sthis\smakes\ssampling\sfor\sstat1\sdata\smuch\sslower.
-D 2017-04-20T16:08:33.333
+C Speed\sthis\sbranch\sup\sa\sbit\sby\sfiltering\sbefore\sthe\svirtual\stable\slayer\swhen\nsampling\suser\sdata.
+D 2017-04-20T16:43:32.927
 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 6a8c838220f7c00820e1fc0ac1bccaaa8e5676067e1dbfa1bafa7a4ffecf8ae6
@@ -43,7 +43,7 @@ F ext/async/sqlite3async.h f489b080af7e72aec0e1ee6f1d98ab6cf2e4dcef
 F ext/expert/README.md 9f15075ec5ad772808eff55ef044c31140fd1146aa0a3c47eafd155e71851b01
 F ext/expert/expert.c 33842ef151d84c5f8000f9c7b938998c6b999eaef7ce1f4eeb0df8ffe6739496
 F ext/expert/expert1.test 1033e43071b69dc2f4e88fbf03fc7f18846c9865cac14f28c80f581437f09acb
-F ext/expert/sqlite3expert.c 68acd26b0520408f0c5e76bd9ddaf70d776d397f8aa1bd6eda91f42f34c0a8cf
+F ext/expert/sqlite3expert.c fde366d8c1b1970b2c18196ca2e64d01c2106bd9431c371a26e8d5b79f37f90b
 F ext/expert/sqlite3expert.h af6354f8ee5c9e025024e63fec3bd640a802afcc3099a44d804752cf0791d811
 F ext/expert/test_expert.c b01a5115f9444a9b416582c985138f5dfdb279848ce8b7452be383530be27f01
 F ext/fts1/README.txt 20ac73b006a70bcfd80069bdaf59214b6cf1db5e
@@ -1579,10 +1579,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 c69c3e21db6e141f7e24226c6432f2ed31fe5f177bd23781915871f8600ee56a
-R 02fc06fd99e34f4a0d95661da624b768
-T *branch * schemalint-failure
-T *sym-schemalint-failure *
-T -sym-schemalint *
+P c62e358243d96cb38a7ce2aa679fc640b62bf46080eab4bd5fc2acf5997d6cd5
+R 73307a63b82b2606f65f28fc989fd3ae
 U dan
-Z 8a7b9cb83c65b8cfdb4d171254abdcee
+Z b05e3391f67ce73794363163fdd05070
index 147295502407783a26e0b3e9c833a4c4bbcb8444..a17ccd88b92b6b1d966a0b7ae4140903d28852c9 100644 (file)
@@ -1 +1 @@
-c62e358243d96cb38a7ce2aa679fc640b62bf46080eab4bd5fc2acf5997d6cd5
\ No newline at end of file
+8e57c31340dd9ffc457da63c5996fb1b573f8154f864ec2b52c15f399906ac8b
\ No newline at end of file