Fossil SCM

Added --glob and --like options to /json/wiki/list, to filter the list server-side.

stephan 2012-03-25 03:10 trunk
Commit 06cd311c17551de784d5227d673e4e4642c3c37a
1 file changed +19 -5
+19 -5
--- src/json_wiki.c
+++ src/json_wiki.c
@@ -419,22 +419,36 @@
419419
** Implementation of /json/wiki/list.
420420
*/
421421
static cson_value * json_wiki_list(){
422422
cson_value * listV = NULL;
423423
cson_array * list = NULL;
424
- Stmt q;
424
+ char const * zGlob = NULL;
425
+ Stmt q = empty_Stmt;
426
+ Blob sql = empty_blob;
425427
char const verbose = json_find_option_bool("verbose",NULL,"v",0);
426428
427429
if( !g.perm.RdWiki && !g.perm.Read ){
428430
json_set_err(FSL_JSON_E_DENIED,
429431
"Requires 'j' or 'o' permissions.");
430432
return NULL;
431433
}
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);
436450
listV = cson_value_new_array();
437451
list = cson_value_get_array(listV);
438452
while( SQLITE_ROW == db_step(&q) ){
439453
cson_value * v;
440454
if( verbose ){
441455
--- 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

Keyboard Shortcuts

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