Fossil SCM

Re-enable /forum?status=X filter. Not 100% ideal, in that the filter is performed in C instead of SQL, but it fits the restructured query code well.

stephan 2026-05-27 20:28 UTC forum-statuses
Commit d01961c346476c571cd0de4cf29e0d1668538ae94db95747e2e7beb2f4bd417e
1 file changed +16 -6
+16 -6
--- src/forum.c
+++ src/forum.c
@@ -2478,12 +2478,14 @@
24782478
"SELECT tagxref.value, forumstatus.label\n"
24792479
" FROM forumstatus, tagxref\n"
24802480
" WHERE tagid=%d AND tagtype>=1\n"
24812481
" AND forumstatus.value=tagxref.value\n"
24822482
" AND rid=:rid\n"
2483
+ " AND if(%d=0,1,tagxref.value=%Q)\n"
24832484
" ORDER BY mtime DESC",
2484
- db_int(0,"SELECT tagid FROM tag WHERE tagname='status'")
2485
+ db_int(0,"SELECT tagid FROM tag WHERE tagname='status'"),
2486
+ !!zStatusFilter, zStatusFilter
24852487
);
24862488
}
24872489
db_prepare(&q,
24882490
"WITH thread(root,endtime,lastrid) AS (\n"
24892491
" SELECT\n"
@@ -2512,18 +2514,19 @@
25122514
" ORDER BY 1;",
25132515
g.perm.ModForum ? "true" : "fpid NOT IN private" /*safe-for-%s*/,
25142516
iLimit+1, iOfst
25152517
);
25162518
while( db_step(&q)==SQLITE_ROW ){
2517
- char *zAge = human_readable_age(db_column_double(&q,0));
2518
- int nMsg = db_column_int(&q, 2);
2519
- const char *zUuid = db_column_text(&q, 3);
2520
- const char *zTitle = db_column_text(&q, 4);
2519
+ char *zAge;
2520
+ int nMsg;
2521
+ const char *zUuid;
2522
+ const char *zTitle;
25212523
const char *zStatus;
25222524
const char *zStatusLbl;
25232525
const int bShowStatus = bHasStatus && !zStatusFilter;
2524
- const int nCols = bShowStatus ? 4 : 3;
2526
+ const int nCols = bShowStatus ? 4 : 3
2527
+ /* When filtering on status, elide the status column */;
25252528
if( bHasStatus ){
25262529
db_reset(&qStat);
25272530
db_bind_int(&qStat, ":rid", db_column_int(&q,6));
25282531
if( db_step(&qStat)==SQLITE_ROW ){
25292532
zStatus = db_column_text(&qStat, 0);
@@ -2530,13 +2533,20 @@
25302533
zStatusLbl = db_column_text(&qStat, 1);
25312534
}else{
25322535
zStatus = forum_statuses()->aStatus[0].zValue;
25332536
zStatusLbl = forum_statuses()->aStatus[0].zLabel;
25342537
}
2538
+ if( zStatusFilter && 0!=fossil_strcmp(zStatusFilter,zStatus) ){
2539
+ continue;
2540
+ }
25352541
}else{
25362542
zStatus = zStatusLbl = NULL;
25372543
}
2544
+ zAge = human_readable_age(db_column_double(&q,0));
2545
+ nMsg = db_column_int(&q, 2);
2546
+ zUuid = db_column_text(&q, 3);
2547
+ zTitle = db_column_text(&q, 4);
25382548
if( iCnt==0 ){
25392549
char * zTail = zStatusFilter
25402550
? mprintf(" with status=%Q", zStatusFilter)
25412551
: 0;
25422552
if( iOfst>0 ){
25432553
--- src/forum.c
+++ src/forum.c
@@ -2478,12 +2478,14 @@
2478 "SELECT tagxref.value, forumstatus.label\n"
2479 " FROM forumstatus, tagxref\n"
2480 " WHERE tagid=%d AND tagtype>=1\n"
2481 " AND forumstatus.value=tagxref.value\n"
2482 " AND rid=:rid\n"
 
2483 " ORDER BY mtime DESC",
2484 db_int(0,"SELECT tagid FROM tag WHERE tagname='status'")
 
2485 );
2486 }
2487 db_prepare(&q,
2488 "WITH thread(root,endtime,lastrid) AS (\n"
2489 " SELECT\n"
@@ -2512,18 +2514,19 @@
2512 " ORDER BY 1;",
2513 g.perm.ModForum ? "true" : "fpid NOT IN private" /*safe-for-%s*/,
2514 iLimit+1, iOfst
2515 );
2516 while( db_step(&q)==SQLITE_ROW ){
2517 char *zAge = human_readable_age(db_column_double(&q,0));
2518 int nMsg = db_column_int(&q, 2);
2519 const char *zUuid = db_column_text(&q, 3);
2520 const char *zTitle = db_column_text(&q, 4);
2521 const char *zStatus;
2522 const char *zStatusLbl;
2523 const int bShowStatus = bHasStatus && !zStatusFilter;
2524 const int nCols = bShowStatus ? 4 : 3;
 
2525 if( bHasStatus ){
2526 db_reset(&qStat);
2527 db_bind_int(&qStat, ":rid", db_column_int(&q,6));
2528 if( db_step(&qStat)==SQLITE_ROW ){
2529 zStatus = db_column_text(&qStat, 0);
@@ -2530,13 +2533,20 @@
2530 zStatusLbl = db_column_text(&qStat, 1);
2531 }else{
2532 zStatus = forum_statuses()->aStatus[0].zValue;
2533 zStatusLbl = forum_statuses()->aStatus[0].zLabel;
2534 }
 
 
 
2535 }else{
2536 zStatus = zStatusLbl = NULL;
2537 }
 
 
 
 
2538 if( iCnt==0 ){
2539 char * zTail = zStatusFilter
2540 ? mprintf(" with status=%Q", zStatusFilter)
2541 : 0;
2542 if( iOfst>0 ){
2543
--- src/forum.c
+++ src/forum.c
@@ -2478,12 +2478,14 @@
2478 "SELECT tagxref.value, forumstatus.label\n"
2479 " FROM forumstatus, tagxref\n"
2480 " WHERE tagid=%d AND tagtype>=1\n"
2481 " AND forumstatus.value=tagxref.value\n"
2482 " AND rid=:rid\n"
2483 " AND if(%d=0,1,tagxref.value=%Q)\n"
2484 " ORDER BY mtime DESC",
2485 db_int(0,"SELECT tagid FROM tag WHERE tagname='status'"),
2486 !!zStatusFilter, zStatusFilter
2487 );
2488 }
2489 db_prepare(&q,
2490 "WITH thread(root,endtime,lastrid) AS (\n"
2491 " SELECT\n"
@@ -2512,18 +2514,19 @@
2514 " ORDER BY 1;",
2515 g.perm.ModForum ? "true" : "fpid NOT IN private" /*safe-for-%s*/,
2516 iLimit+1, iOfst
2517 );
2518 while( db_step(&q)==SQLITE_ROW ){
2519 char *zAge;
2520 int nMsg;
2521 const char *zUuid;
2522 const char *zTitle;
2523 const char *zStatus;
2524 const char *zStatusLbl;
2525 const int bShowStatus = bHasStatus && !zStatusFilter;
2526 const int nCols = bShowStatus ? 4 : 3
2527 /* When filtering on status, elide the status column */;
2528 if( bHasStatus ){
2529 db_reset(&qStat);
2530 db_bind_int(&qStat, ":rid", db_column_int(&q,6));
2531 if( db_step(&qStat)==SQLITE_ROW ){
2532 zStatus = db_column_text(&qStat, 0);
@@ -2530,13 +2533,20 @@
2533 zStatusLbl = db_column_text(&qStat, 1);
2534 }else{
2535 zStatus = forum_statuses()->aStatus[0].zValue;
2536 zStatusLbl = forum_statuses()->aStatus[0].zLabel;
2537 }
2538 if( zStatusFilter && 0!=fossil_strcmp(zStatusFilter,zStatus) ){
2539 continue;
2540 }
2541 }else{
2542 zStatus = zStatusLbl = NULL;
2543 }
2544 zAge = human_readable_age(db_column_double(&q,0));
2545 nMsg = db_column_int(&q, 2);
2546 zUuid = db_column_text(&q, 3);
2547 zTitle = db_column_text(&q, 4);
2548 if( iCnt==0 ){
2549 char * zTail = zStatusFilter
2550 ? mprintf(" with status=%Q", zStatusFilter)
2551 : 0;
2552 if( iOfst>0 ){
2553

Keyboard Shortcuts

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