]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Performance and size optimization for the sqlite3ColumnIndex() routine.
authordrh <>
Sun, 9 Feb 2025 19:49:46 +0000 (19:49 +0000)
committerdrh <>
Sun, 9 Feb 2025 19:49:46 +0000 (19:49 +0000)
FossilOrigin-Name: a93e3fe0ee8f98a7ec0dfb2e1abf432cc9d5f9d3ad345b5db261475215d43df9

manifest
manifest.uuid
src/build.c
src/select.c

index da0b642c006ed796153ae8c7835acbd49d171e2b..4b5d165af949f3e460f85fd8a3988a700f155913 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Update\sthe\s'clean'\srules\sfor\sautoconf/Makefile.in\sto\saccount\sfor\s[6092b0b8].
-D 2025-02-09T05:37:25.111
+C Performance\sand\ssize\soptimization\sfor\sthe\ssqlite3ColumnIndex()\sroutine.
+D 2025-02-09T19:49:46.297
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -722,7 +722,7 @@ F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522
 F src/btree.c 63ca6b647342e8cef643863cd0962a542f133e1069460725ba4461dcda92b03c
 F src/btree.h 18e5e7b2124c23426a283523e5f31a4bff029131b795bb82391f9d2f3136fc50
 F src/btreeInt.h 98aadb6dcb77b012cab2574d6a728fad56b337fc946839b9898c4b4c969e30b6
-F src/build.c 83c43ddb517a15673d1dc17f88ea8cd1db06e0d277e6dc666ac8985017a99ac5
+F src/build.c 602fc45ea6301a3dc03ec20a9f9b294c492b7e1766ae96651f2ba8044dc445a6
 F src/callback.c acae8c8dddda41ee85cfdf19b926eefe830f371069f8aadca3aa39adf5b1c859
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c d35723024b963edce9c0fad5b3303e8bb9266083784844baed10a6dedfe26f3b
@@ -780,7 +780,7 @@ F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c 626c24b258b111f75c22107aa5614ad89810df3026f5ca071116d3fe75925c75
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 5c8ac3f0b7dd72745719f0137119a6f9016a9c2633a7351ef11c00a43b4c0944
+F src/select.c 57893cc8b099f231f7ed5b84faff14841f2aabb4776e32e17fae00aeae0a8993
 F src/shell.c.in b377a59822f207106424f08aead37e78b609222e98f86f04cc8a03563ccf3237
 F src/sqlite.h.in d2902f13ace94d3d3609646bd6d12a2d7a4f6cbdf6a5a4097580ac305f54c3f0
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 9ae245cff49716e4c0bbd3fbb3f82276e5fb54d595d1e1d9a452edef45d7740f
-R cdceaad430550f7ec94e5d96f00f7ab4
-U stephan
-Z 4725199d04d2eeff317384520a0a53f5
+P f3a35fdc9113ad5f1fed6a2f474aee670e1793d355475a7971d376bf33823cc4
+R 07cb4b330390fc770f5d5e73fded3930
+U drh
+Z 8439106cb5dd02e83a92bb726a395093
 # Remove this line to create a well-formed Fossil manifest.
index f76b8288c00ff4636b8252db208a1183b09fe53d..bd2f91ec8d1548beaa844aaf19b317b31db4d472 100644 (file)
@@ -1 +1 @@
-f3a35fdc9113ad5f1fed6a2f474aee670e1793d355475a7971d376bf33823cc4
+a93e3fe0ee8f98a7ec0dfb2e1abf432cc9d5f9d3ad345b5db261475215d43df9
index 7b80425291ae8f9629f7901a15ae55a1985028c2..8f64d5ec30f9edb0fbb78683a6f620559f2278e4 100644 (file)
@@ -1526,8 +1526,7 @@ void sqlite3AddColumn(Parse *pParse, Token sName, Token sType){
   memcpy(z, sName.z, sName.n);
   z[sName.n] = 0;
   sqlite3Dequote(z);
-  i = sqlite3ColumnIndex(p, z);
-  if( i>=0 ){
+  if( p->nCol && sqlite3ColumnIndex(p, z)>=0 ){
     sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
     sqlite3DbFree(db, z);
     return;
index e848c46a39c25a807b97b8c3d1760d6499c79f52..e47a9b6be29acff83bcdc157316ca7c8c1034155 100644 (file)
@@ -320,31 +320,32 @@ int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
 int sqlite3ColumnIndex(Table *pTab, const char *zCol){
   int i;
   u8 h;
-  Column *pCol;
+  const Column *aCol;
+  int nCol;
 
-  if( pTab->nCol==0 ){
-    return -1;
-  }
   h = sqlite3StrIHash(zCol);
+  aCol = pTab->aCol;
+  nCol = pTab->nCol;
 
+  /* See if the aHx gives us a lucky match */
   i = pTab->aHx[h % sizeof(pTab->aHx)];
-  assert( i<pTab->nCol );
-  if( pTab->aCol[i].hName==h
-   && sqlite3StrICmp(pTab->aCol[i].zCnName, zCol)==0
+  assert( i<nCol );
+  if( aCol[i].hName==h
+   && sqlite3StrICmp(aCol[i].zCnName, zCol)==0
   ){
     return i;
   }
-  pCol = pTab->aCol;
+
+  /* No lucky match from the hash table.  Do a full search. */
   i = 0;
   while( 1 /*exit-by-break*/ ){
-    if( pCol->hName==h
-     && sqlite3StrICmp(pCol->zCnName, zCol)==0
+    if( aCol[i].hName==h
+     && sqlite3StrICmp(aCol[i].zCnName, zCol)==0
     ){
       return i;
     }
     i++;
-    if( i>=pTab->nCol ) break;
-    pCol++;
+    if( i>=nCol ) break;
   }
   return -1;
 }