Fossil SCM
Added --glob and --like options to /json/wiki/list, to filter the list server-side.
Commit
06cd311c17551de784d5227d673e4e4642c3c37a
Parent
bb05bf6d36377e1…
1 file changed
+19
-5
+19
-5
| --- src/json_wiki.c | ||
| +++ src/json_wiki.c | ||
| @@ -419,22 +419,36 @@ | ||
| 419 | 419 | ** Implementation of /json/wiki/list. |
| 420 | 420 | */ |
| 421 | 421 | static cson_value * json_wiki_list(){ |
| 422 | 422 | cson_value * listV = NULL; |
| 423 | 423 | cson_array * list = NULL; |
| 424 | - Stmt q; | |
| 424 | + char const * zGlob = NULL; | |
| 425 | + Stmt q = empty_Stmt; | |
| 426 | + Blob sql = empty_blob; | |
| 425 | 427 | char const verbose = json_find_option_bool("verbose",NULL,"v",0); |
| 426 | 428 | |
| 427 | 429 | if( !g.perm.RdWiki && !g.perm.Read ){ |
| 428 | 430 | json_set_err(FSL_JSON_E_DENIED, |
| 429 | 431 | "Requires 'j' or 'o' permissions."); |
| 430 | 432 | return NULL; |
| 431 | 433 | } |
| 432 | - db_prepare(&q,"SELECT" | |
| 433 | - " substr(tagname,6) as name" | |
| 434 | - " FROM tag WHERE tagname GLOB 'wiki-*'" | |
| 435 | - " ORDER BY lower(name)"); | |
| 434 | + blob_append(&sql,"SELECT" | |
| 435 | + " substr(tagname,6) as name" | |
| 436 | + " FROM tag WHERE tagname GLOB 'wiki-*' ", | |
| 437 | + -1); | |
| 438 | + zGlob = json_find_option_cstr("glob",NULL,"g"); | |
| 439 | + if(zGlob && *zGlob){ | |
| 440 | + blob_appendf(&sql," AND name GLOB %Q ", zGlob); | |
| 441 | + }else{ | |
| 442 | + zGlob = json_find_option_cstr("like",NULL,"l"); | |
| 443 | + if(zGlob && *zGlob){ | |
| 444 | + blob_appendf(&sql," AND name LIKE %Q ", zGlob); | |
| 445 | + } | |
| 446 | + } | |
| 447 | + blob_append(&sql,"ORDER BY lower(name)", -1); | |
| 448 | + db_prepare(&q,"%s", blob_str(&sql)); | |
| 449 | + blob_reset(&sql); | |
| 436 | 450 | listV = cson_value_new_array(); |
| 437 | 451 | list = cson_value_get_array(listV); |
| 438 | 452 | while( SQLITE_ROW == db_step(&q) ){ |
| 439 | 453 | cson_value * v; |
| 440 | 454 | if( verbose ){ |
| 441 | 455 |
| --- src/json_wiki.c | |
| +++ src/json_wiki.c | |
| @@ -419,22 +419,36 @@ | |
| 419 | ** Implementation of /json/wiki/list. |
| 420 | */ |
| 421 | static cson_value * json_wiki_list(){ |
| 422 | cson_value * listV = NULL; |
| 423 | cson_array * list = NULL; |
| 424 | Stmt q; |
| 425 | char const verbose = json_find_option_bool("verbose",NULL,"v",0); |
| 426 | |
| 427 | if( !g.perm.RdWiki && !g.perm.Read ){ |
| 428 | json_set_err(FSL_JSON_E_DENIED, |
| 429 | "Requires 'j' or 'o' permissions."); |
| 430 | return NULL; |
| 431 | } |
| 432 | db_prepare(&q,"SELECT" |
| 433 | " substr(tagname,6) as name" |
| 434 | " FROM tag WHERE tagname GLOB 'wiki-*'" |
| 435 | " ORDER BY lower(name)"); |
| 436 | listV = cson_value_new_array(); |
| 437 | list = cson_value_get_array(listV); |
| 438 | while( SQLITE_ROW == db_step(&q) ){ |
| 439 | cson_value * v; |
| 440 | if( verbose ){ |
| 441 |
| --- src/json_wiki.c | |
| +++ src/json_wiki.c | |
| @@ -419,22 +419,36 @@ | |
| 419 | ** Implementation of /json/wiki/list. |
| 420 | */ |
| 421 | static cson_value * json_wiki_list(){ |
| 422 | cson_value * listV = NULL; |
| 423 | cson_array * list = NULL; |
| 424 | char const * zGlob = NULL; |
| 425 | Stmt q = empty_Stmt; |
| 426 | Blob sql = empty_blob; |
| 427 | char const verbose = json_find_option_bool("verbose",NULL,"v",0); |
| 428 | |
| 429 | if( !g.perm.RdWiki && !g.perm.Read ){ |
| 430 | json_set_err(FSL_JSON_E_DENIED, |
| 431 | "Requires 'j' or 'o' permissions."); |
| 432 | return NULL; |
| 433 | } |
| 434 | blob_append(&sql,"SELECT" |
| 435 | " substr(tagname,6) as name" |
| 436 | " FROM tag WHERE tagname GLOB 'wiki-*' ", |
| 437 | -1); |
| 438 | zGlob = json_find_option_cstr("glob",NULL,"g"); |
| 439 | if(zGlob && *zGlob){ |
| 440 | blob_appendf(&sql," AND name GLOB %Q ", zGlob); |
| 441 | }else{ |
| 442 | zGlob = json_find_option_cstr("like",NULL,"l"); |
| 443 | if(zGlob && *zGlob){ |
| 444 | blob_appendf(&sql," AND name LIKE %Q ", zGlob); |
| 445 | } |
| 446 | } |
| 447 | blob_append(&sql,"ORDER BY lower(name)", -1); |
| 448 | db_prepare(&q,"%s", blob_str(&sql)); |
| 449 | blob_reset(&sql); |
| 450 | listV = cson_value_new_array(); |
| 451 | list = cson_value_get_array(listV); |
| 452 | while( SQLITE_ROW == db_step(&q) ){ |
| 453 | cson_value * v; |
| 454 | if( verbose ){ |
| 455 |