From 3e992d1ab72ba48c4896d18b6ea29b4f184bb7d3 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 1 Jan 2021 19:17:01 +0000 Subject: [PATCH] Use the column name hash to improve performance of column name collision detection while parsing CREATE TABLE statements. FossilOrigin-Name: d02820f03575e4633a7917427f11c19f99bd7b92f37d0ffe6fdc2418ad729813 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/build.c | 7 +++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 022d55e936..1aca84feb2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Modify\sthe\smakefile\srule\sfor\s"startup"\sso\sthat\sit\salways\sbuilds\swith\n-Os\sand\s-DSQLITE_THREADSAFE=0\sand\sno\sother\soptions,\sfor\sconsistency\sof\nperformance. -D 2021-01-01T18:32:15.639 +C Use\sthe\scolumn\sname\shash\sto\simprove\sperformance\sof\scolumn\sname\scollision\ndetection\swhile\sparsing\sCREATE\sTABLE\sstatements. +D 2021-01-01T19:17:01.346 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -484,7 +484,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 0f9cb686871ae668817673f0823b55d1bcadbc86ea28bd22c590b064a8322d5a F src/btree.h 285f8377aa1353185a32bf455faafa9ff9a0d40d074d60509534d14990c7829e F src/btreeInt.h 7614cae30f95b6aed0c7cac7718276a55cfe2c77058cbfd8bef5b75329757331 -F src/build.c f6449d4e85e998e14d3f537e8ea898dca2fcb83c277db3e60945af9b9177db81 +F src/build.c f5610708b09e6e2aed20e9f87e41abc9cb7d9c524b2af473b6b8f979185fcc3c F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 2a322b9a3d75771fb4d99e0702851f4f68dda982507a0f798eefb0712969a410 @@ -1895,7 +1895,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 41f45c8e894f48049325ccfef12cec0887b636bfad5d531a47628eb9e8612924 -R c6a646e99c7a838404fe08a2f6524679 +P 5ac939e0adc923378173297e934c3664254a4fefbcddcc842bf4cc42dbaacf4f +R 76ed3eb5d9ad1369259443b69c6d4eb4 U drh -Z f3be154d8c50c2d6e064126a71c3cb12 +Z 392a8d945c1dcd1bc8026b48aa7097cf diff --git a/manifest.uuid b/manifest.uuid index 0f871a741e..7ce76aea34 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5ac939e0adc923378173297e934c3664254a4fefbcddcc842bf4cc42dbaacf4f \ No newline at end of file +d02820f03575e4633a7917427f11c19f99bd7b92f37d0ffe6fdc2418ad729813 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 9779e93732..3a35530400 100644 --- a/src/build.c +++ b/src/build.c @@ -1255,6 +1255,8 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){ char *zType; Column *pCol; sqlite3 *db = pParse->db; + u8 hName; + if( (p = pParse->pNewTable)==0 ) return; if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){ sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName); @@ -1266,8 +1268,9 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){ memcpy(z, pName->z, pName->n); z[pName->n] = 0; sqlite3Dequote(z); + hName = sqlite3StrIHash(z); for(i=0; inCol; i++){ - if( sqlite3_stricmp(z, p->aCol[i].zName)==0 ){ + if( p->aCol[i].hName==hName && sqlite3StrICmp(z, p->aCol[i].zName)==0 ){ sqlite3ErrorMsg(pParse, "duplicate column name: %s", z); sqlite3DbFree(db, z); return; @@ -1285,7 +1288,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){ pCol = &p->aCol[p->nCol]; memset(pCol, 0, sizeof(p->aCol[0])); pCol->zName = z; - pCol->hName = sqlite3StrIHash(z); + pCol->hName = hName; sqlite3ColumnPropertiesFromName(p, pCol); if( pType->n==0 ){ -- 2.47.2