Fossil SCM

(cherry-pick): Fix a mysterious bug in is_ticket() that was preventing me from updating the TCL repository.

jan.nijtmans 2019-02-27 19:11 branch-2.8
Commit c460f943523fa26f00b8f1ccdfd6b122b19b930da357d8d4e9189bc9d12bcf11
2 files changed +6 +1 -3
+6
--- src/db.c
+++ src/db.c
@@ -361,10 +361,16 @@
361361
rc = db_vprepare(pStmt, DB_PREPARE_PERSISTENT, zFormat, ap);
362362
va_end(ap);
363363
}
364364
return rc;
365365
}
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
+}
366372
367373
/* Prepare a statement using text placed inside a Blob
368374
** using blob_append_sql().
369375
*/
370376
int db_prepare_blob(Stmt *pStmt, Blob *pSql){
371377
--- 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
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -1108,28 +1108,26 @@
11081108
static int is_ticket(
11091109
const char *zTarget, /* Ticket UUID */
11101110
int *pClosed /* True if the ticket is closed */
11111111
){
11121112
static Stmt q;
1113
- static int once = 1;
11141113
int n;
11151114
int rc;
11161115
char zLower[HNAME_MAX+1];
11171116
char zUpper[HNAME_MAX+1];
11181117
n = strlen(zTarget);
11191118
memcpy(zLower, zTarget, n+1);
11201119
canonical16(zLower, n+1);
11211120
memcpy(zUpper, zLower, n+1);
11221121
zUpper[n-1]++;
1123
- if( once ){
1122
+ if( !db_static_stmt_is_init(&q) ){
11241123
const char *zClosedExpr = db_get("ticket-closed-expr", "status='Closed'");
11251124
db_static_prepare(&q,
11261125
"SELECT %s FROM ticket "
11271126
" WHERE tkt_uuid>=:lwr AND tkt_uuid<:upr",
11281127
zClosedExpr /*safe-for-%s*/
11291128
);
1130
- once = 0;
11311129
}
11321130
db_bind_text(&q, ":lwr", zLower);
11331131
db_bind_text(&q, ":upr", zUpper);
11341132
if( db_step(&q)==SQLITE_ROW ){
11351133
rc = 1;
11361134
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button