| | @@ -2776,11 +2776,14 @@ |
| 2776 | 2776 | } |
| 2777 | 2777 | if( zArg[0]=='-' ) return 0; |
| 2778 | 2778 | if( m & SQLITE_TRACE_PROFILE ){ |
| 2779 | 2779 | sqlite3_int64 nNano = *(sqlite3_int64*)pX; |
| 2780 | 2780 | double rMillisec = 0.000001 * nNano; |
| 2781 | | - sqlite3_snprintf(sizeof(zEnd),zEnd," /* %.3fms */\n", rMillisec); |
| 2781 | + int nRun = sqlite3_stmt_status(pStmt, SQLITE_STMTSTATUS_RUN, 0); |
| 2782 | + int nVmStep = sqlite3_stmt_status(pStmt, SQLITE_STMTSTATUS_VM_STEP, 1); |
| 2783 | + sqlite3_snprintf(sizeof(zEnd),zEnd," /* %.3fms, %r run, %d vm-steps */\n", |
| 2784 | + rMillisec, nRun, nVmStep); |
| 2782 | 2785 | }else{ |
| 2783 | 2786 | zEnd[0] = '\n'; |
| 2784 | 2787 | zEnd[1] = 0; |
| 2785 | 2788 | } |
| 2786 | 2789 | zSql = sqlite3_expanded_sql(pStmt); |
| | @@ -3089,16 +3092,30 @@ |
| 3089 | 3092 | */ |
| 3090 | 3093 | char *db_get(const char *zName, const char *zDefault){ |
| 3091 | 3094 | char *z = 0; |
| 3092 | 3095 | const Setting *pSetting = db_find_setting(zName, 0); |
| 3093 | 3096 | if( g.repositoryOpen ){ |
| 3094 | | - z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName); |
| 3097 | + static Stmt q1; |
| 3098 | + const char *zRes; |
| 3099 | + db_static_prepare(&q1, "SELECT value FROM config WHERE name=$n"); |
| 3100 | + db_bind_text(&q1, "$n", zName); |
| 3101 | + if( db_step(&q1)==SQLITE_ROW && (zRes = db_column_text(&q1,0))!=0 ){ |
| 3102 | + z = fossil_strdup(zRes); |
| 3103 | + } |
| 3104 | + db_reset(&q1); |
| 3095 | 3105 | } |
| 3096 | 3106 | if( z==0 && g.zConfigDbName ){ |
| 3107 | + static Stmt q2; |
| 3108 | + const char *zRes; |
| 3097 | 3109 | db_swap_connections(); |
| 3098 | | - z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName); |
| 3110 | + db_static_prepare(&q2, "SELECT value FROM global_config WHERE name=$n"); |
| 3099 | 3111 | db_swap_connections(); |
| 3112 | + db_bind_text(&q2, "$n", zName); |
| 3113 | + if( db_step(&q2)==SQLITE_ROW && (zRes = db_column_text(&q2,0))!=0 ){ |
| 3114 | + z = fossil_strdup(zRes); |
| 3115 | + } |
| 3116 | + db_reset(&q2); |
| 3100 | 3117 | } |
| 3101 | 3118 | if( pSetting!=0 && pSetting->versionable ){ |
| 3102 | 3119 | /* This is a versionable setting, try and get the info from a |
| 3103 | 3120 | ** checked out file */ |
| 3104 | 3121 | char * zZ = z; |
| | @@ -3174,24 +3191,31 @@ |
| 3174 | 3191 | } |
| 3175 | 3192 | int db_get_int(const char *zName, int dflt){ |
| 3176 | 3193 | int v = dflt; |
| 3177 | 3194 | int rc; |
| 3178 | 3195 | if( g.repositoryOpen ){ |
| 3179 | | - Stmt q; |
| 3180 | | - db_prepare(&q, "SELECT value FROM config WHERE name=%Q", zName); |
| 3196 | + static Stmt q; |
| 3197 | + db_static_prepare(&q, "SELECT value FROM config WHERE name=$n"); |
| 3198 | + db_bind_text(&q, "$n", zName); |
| 3181 | 3199 | rc = db_step(&q); |
| 3182 | 3200 | if( rc==SQLITE_ROW ){ |
| 3183 | 3201 | v = db_column_int(&q, 0); |
| 3184 | 3202 | } |
| 3185 | | - db_finalize(&q); |
| 3203 | + db_reset(&q); |
| 3186 | 3204 | }else{ |
| 3187 | 3205 | rc = SQLITE_DONE; |
| 3188 | 3206 | } |
| 3189 | 3207 | if( rc==SQLITE_DONE && g.zConfigDbName ){ |
| 3208 | + static Stmt q2; |
| 3190 | 3209 | db_swap_connections(); |
| 3191 | | - v = db_int(dflt, "SELECT value FROM global_config WHERE name=%Q", zName); |
| 3210 | + db_static_prepare(&q2, "SELECT value FROM global_config WHERE name=$n"); |
| 3192 | 3211 | db_swap_connections(); |
| 3212 | + db_bind_text(&q2, "$n", zName); |
| 3213 | + if( db_step(&q2)==SQLITE_ROW ){ |
| 3214 | + v = db_column_int(&q2, 0); |
| 3215 | + } |
| 3216 | + db_reset(&q2); |
| 3193 | 3217 | } |
| 3194 | 3218 | return v; |
| 3195 | 3219 | } |
| 3196 | 3220 | void db_set_int(const char *zName, int value, int globalFlag){ |
| 3197 | 3221 | db_assert_protection_off_or_not_sensitive(zName); |
| 3198 | 3222 | |