Fossil SCM
(cherry-pick): Fix a mysterious bug in is_ticket() that was preventing me from updating the TCL repository.
Commit
c460f943523fa26f00b8f1ccdfd6b122b19b930da357d8d4e9189bc9d12bcf11
Parent
367831eaac4349e…
2 files changed
+6
+1
-3
M
src/db.c
+6
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -361,10 +361,16 @@ | ||
| 361 | 361 | rc = db_vprepare(pStmt, DB_PREPARE_PERSISTENT, zFormat, ap); |
| 362 | 362 | va_end(ap); |
| 363 | 363 | } |
| 364 | 364 | return rc; |
| 365 | 365 | } |
| 366 | + | |
| 367 | +/* Return TRUE if static Stmt object pStmt has been initialized. | |
| 368 | +*/ | |
| 369 | +int db_static_stmt_is_init(Stmt *pStmt){ | |
| 370 | + return blob_size(&pStmt->sql)>0; | |
| 371 | +} | |
| 366 | 372 | |
| 367 | 373 | /* Prepare a statement using text placed inside a Blob |
| 368 | 374 | ** using blob_append_sql(). |
| 369 | 375 | */ |
| 370 | 376 | int db_prepare_blob(Stmt *pStmt, Blob *pSql){ |
| 371 | 377 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -361,10 +361,16 @@ | |
| 361 | rc = db_vprepare(pStmt, DB_PREPARE_PERSISTENT, zFormat, ap); |
| 362 | va_end(ap); |
| 363 | } |
| 364 | return rc; |
| 365 | } |
| 366 | |
| 367 | /* Prepare a statement using text placed inside a Blob |
| 368 | ** using blob_append_sql(). |
| 369 | */ |
| 370 | int db_prepare_blob(Stmt *pStmt, Blob *pSql){ |
| 371 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -361,10 +361,16 @@ | |
| 361 | rc = db_vprepare(pStmt, DB_PREPARE_PERSISTENT, zFormat, ap); |
| 362 | va_end(ap); |
| 363 | } |
| 364 | return rc; |
| 365 | } |
| 366 | |
| 367 | /* Return TRUE if static Stmt object pStmt has been initialized. |
| 368 | */ |
| 369 | int db_static_stmt_is_init(Stmt *pStmt){ |
| 370 | return blob_size(&pStmt->sql)>0; |
| 371 | } |
| 372 | |
| 373 | /* Prepare a statement using text placed inside a Blob |
| 374 | ** using blob_append_sql(). |
| 375 | */ |
| 376 | int db_prepare_blob(Stmt *pStmt, Blob *pSql){ |
| 377 |
+1
-3
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -1108,28 +1108,26 @@ | ||
| 1108 | 1108 | static int is_ticket( |
| 1109 | 1109 | const char *zTarget, /* Ticket UUID */ |
| 1110 | 1110 | int *pClosed /* True if the ticket is closed */ |
| 1111 | 1111 | ){ |
| 1112 | 1112 | static Stmt q; |
| 1113 | - static int once = 1; | |
| 1114 | 1113 | int n; |
| 1115 | 1114 | int rc; |
| 1116 | 1115 | char zLower[HNAME_MAX+1]; |
| 1117 | 1116 | char zUpper[HNAME_MAX+1]; |
| 1118 | 1117 | n = strlen(zTarget); |
| 1119 | 1118 | memcpy(zLower, zTarget, n+1); |
| 1120 | 1119 | canonical16(zLower, n+1); |
| 1121 | 1120 | memcpy(zUpper, zLower, n+1); |
| 1122 | 1121 | zUpper[n-1]++; |
| 1123 | - if( once ){ | |
| 1122 | + if( !db_static_stmt_is_init(&q) ){ | |
| 1124 | 1123 | const char *zClosedExpr = db_get("ticket-closed-expr", "status='Closed'"); |
| 1125 | 1124 | db_static_prepare(&q, |
| 1126 | 1125 | "SELECT %s FROM ticket " |
| 1127 | 1126 | " WHERE tkt_uuid>=:lwr AND tkt_uuid<:upr", |
| 1128 | 1127 | zClosedExpr /*safe-for-%s*/ |
| 1129 | 1128 | ); |
| 1130 | - once = 0; | |
| 1131 | 1129 | } |
| 1132 | 1130 | db_bind_text(&q, ":lwr", zLower); |
| 1133 | 1131 | db_bind_text(&q, ":upr", zUpper); |
| 1134 | 1132 | if( db_step(&q)==SQLITE_ROW ){ |
| 1135 | 1133 | rc = 1; |
| 1136 | 1134 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1108,28 +1108,26 @@ | |
| 1108 | static int is_ticket( |
| 1109 | const char *zTarget, /* Ticket UUID */ |
| 1110 | int *pClosed /* True if the ticket is closed */ |
| 1111 | ){ |
| 1112 | static Stmt q; |
| 1113 | static int once = 1; |
| 1114 | int n; |
| 1115 | int rc; |
| 1116 | char zLower[HNAME_MAX+1]; |
| 1117 | char zUpper[HNAME_MAX+1]; |
| 1118 | n = strlen(zTarget); |
| 1119 | memcpy(zLower, zTarget, n+1); |
| 1120 | canonical16(zLower, n+1); |
| 1121 | memcpy(zUpper, zLower, n+1); |
| 1122 | zUpper[n-1]++; |
| 1123 | if( once ){ |
| 1124 | const char *zClosedExpr = db_get("ticket-closed-expr", "status='Closed'"); |
| 1125 | db_static_prepare(&q, |
| 1126 | "SELECT %s FROM ticket " |
| 1127 | " WHERE tkt_uuid>=:lwr AND tkt_uuid<:upr", |
| 1128 | zClosedExpr /*safe-for-%s*/ |
| 1129 | ); |
| 1130 | once = 0; |
| 1131 | } |
| 1132 | db_bind_text(&q, ":lwr", zLower); |
| 1133 | db_bind_text(&q, ":upr", zUpper); |
| 1134 | if( db_step(&q)==SQLITE_ROW ){ |
| 1135 | rc = 1; |
| 1136 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1108,28 +1108,26 @@ | |
| 1108 | static int is_ticket( |
| 1109 | const char *zTarget, /* Ticket UUID */ |
| 1110 | int *pClosed /* True if the ticket is closed */ |
| 1111 | ){ |
| 1112 | static Stmt q; |
| 1113 | int n; |
| 1114 | int rc; |
| 1115 | char zLower[HNAME_MAX+1]; |
| 1116 | char zUpper[HNAME_MAX+1]; |
| 1117 | n = strlen(zTarget); |
| 1118 | memcpy(zLower, zTarget, n+1); |
| 1119 | canonical16(zLower, n+1); |
| 1120 | memcpy(zUpper, zLower, n+1); |
| 1121 | zUpper[n-1]++; |
| 1122 | if( !db_static_stmt_is_init(&q) ){ |
| 1123 | const char *zClosedExpr = db_get("ticket-closed-expr", "status='Closed'"); |
| 1124 | db_static_prepare(&q, |
| 1125 | "SELECT %s FROM ticket " |
| 1126 | " WHERE tkt_uuid>=:lwr AND tkt_uuid<:upr", |
| 1127 | zClosedExpr /*safe-for-%s*/ |
| 1128 | ); |
| 1129 | } |
| 1130 | db_bind_text(&q, ":lwr", zLower); |
| 1131 | db_bind_text(&q, ":upr", zUpper); |
| 1132 | if( db_step(&q)==SQLITE_ROW ){ |
| 1133 | rc = 1; |
| 1134 |