Skip to content

Commit 5f046e5

Browse files
committed
dblStrHash for faster fingerprints
Signed-off-by: Mark Hannum <mhannum@bloomberg.net>
1 parent e8d983f commit 5f046e5

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

sqlite/src/vdbeInt.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#if defined(SQLITE_BUILDING_FOR_COMDB2)
2222
#include <time.h>
2323
#include <strings.h>
24+
#include <plhash_glue.h>
2425
#endif /* defined(SQLITE_BUILDING_FOR_COMDB2) */
2526

2627
/*
@@ -569,6 +570,9 @@ struct Vdbe {
569570
#ifdef SQLITE_ENABLE_NORMALIZE
570571
char *zNormSql; /* Normalization of the associated SQL statement */
571572
DblquoteStr *pDblStr; /* List of double-quoted string literals */
573+
#if defined(SQLITE_BUILDING_FOR_COMDB2)
574+
hash_t *dblStrHash;
575+
#endif
572576
#endif
573577
void *pFree; /* Free this when deleting the vdbe */
574578
VdbeFrame *pFrame; /* Parent frame */

sqlite/src/vdbeaux.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,17 @@ void sqlite3VdbeAddDblquoteStr(sqlite3 *db, Vdbe *p, const char *z){
104104
DblquoteStr *pStr = sqlite3DbMallocRawNN(db,
105105
sizeof(*pStr)+n+1-sizeof(pStr->z));
106106
if( pStr ){
107+
#if defined(SQLITE_BUILDING_FOR_COMDB2)
108+
if (!p->dblStrHash) {
109+
p->dblStrHash = hash_init_str(0);
110+
}
111+
#endif
107112
pStr->pNextStr = p->pDblStr;
108113
p->pDblStr = pStr;
109114
memcpy(pStr->z, z, n+1);
115+
#if defined(SQLITE_BUILDING_FOR_COMDB2)
116+
hash_add(p->dblStrHash, pStr->z);
117+
#endif
110118
}
111119
}
112120
}
@@ -124,15 +132,21 @@ int sqlite3VdbeUsesDoubleQuotedString(
124132
,int iDefDqId /* Return value when there is no Vdbe. */
125133
#endif /* defined(SQLITE_BUILDING_FOR_COMDB2) */
126134
){
127-
DblquoteStr *pStr;
128135
assert( zId!=0 );
129136
#if defined(SQLITE_BUILDING_FOR_COMDB2)
130137
if( pVdbe==0 ) return iDefDqId;
131138
#endif /* defined(SQLITE_BUILDING_FOR_COMDB2) */
132139
if( pVdbe->pDblStr==0 ) return 0;
140+
#if defined(SQLITE_BUILDING_FOR_COMDB2)
141+
if (pVdbe->dblStrHash) {
142+
return (hash_find(pVdbe->dblStrHash, zId)) != 0;
143+
}
144+
#else
145+
DblquoteStr *pStr;
133146
for(pStr=pVdbe->pDblStr; pStr; pStr=pStr->pNextStr){
134147
if( strcmp(zId, pStr->z)==0 ) return 1;
135148
}
149+
#endif
136150
return 0;
137151
}
138152
#endif
@@ -3485,6 +3499,13 @@ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
34853499
pNext = pThis->pNextStr;
34863500
sqlite3DbFree(db, pThis);
34873501
}
3502+
#if defined(SQLITE_BUILDING_FOR_COMDB2)
3503+
if (p->dblStrHash) {
3504+
hash_clear(p->dblStrHash);
3505+
hash_free(p->dblStrHash);
3506+
p->dblStrHash = NULL;
3507+
}
3508+
#endif
34883509
}
34893510
#endif
34903511
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS

0 commit comments

Comments
 (0)