@@ -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