@@ -213,11 +213,11 @@
213 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiLastDoc[j] = iDoc;
214 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiLastOfst[j] = i;
215 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(k=1; j-k>=0 && anMatch[j-k] && aiWordIdx[j-k]==iWord-k; k++){}
216 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<k; ii++){
217 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( anMatch[j-ii]<k ){
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- anMatch[j-ii] = k;
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ anMatch[j-ii] = k*(nDoc-iDoc);
219 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiBestDoc[j-ii] = aiLastDoc[j-ii];
220 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiBestOfst[j-ii] = aiLastOfst[j-ii];
221 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
222 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
223 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -396,14 +396,18 @@
396 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_match_sqlfunc(
397 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *context,
398 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
399 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **argv
400 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zSText = (const char*)sqlite3_value_text(argv[0]);
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *azDoc[5];
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nDoc;
402 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zSText==0 ) return;
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = search_match(&gSearch, 1, &zSText);
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(nDoc=0; nDoc<ArraySize(azDoc) && nDoc<argc; nDoc++){
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ azDoc[nDoc] = (const char*)sqlite3_value_text(argv[nDoc]);
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( azDoc[nDoc]==0 ) azDoc[nDoc] = "";
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = search_match(&gSearch, nDoc, azDoc);
405 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int(context, rc);
406 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
407 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
408 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
409 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These SQL functions return the results of the last
@@ -435,16 +439,43 @@
435 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_stext_sqlfunc(
436 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *context,
437 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
438 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **argv
439 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob txt;
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType = (const char*)sqlite3_value_text(argv[0]);
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid = sqlite3_value_int(argv[1]);
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName = (const char*)sqlite3_value_text(argv[2]);
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(context, search_stext_cached(zType[0],rid,zName,0), -1,
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_TRANSIENT);
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void search_title_sqlfunc(
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType = (const char*)sqlite3_value_text(argv[0]);
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid = sqlite3_value_int(argv[1]);
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName = (const char*)sqlite3_value_text(argv[2]);
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nHdr;
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = search_stext_cached(zType[0], rid, zName, &nHdr);
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nHdr || zType[0]!='d' ){
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(context, z, nHdr, SQLITE_TRANSIENT);
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_value(context, argv[2]);
464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void search_body_sqlfunc(
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
441 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zType = (const char*)sqlite3_value_text(argv[0]);
442 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid = sqlite3_value_int(argv[1]);
443 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = (const char*)sqlite3_value_text(argv[2]);
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- search_stext(zType[0], rid, zName, &txt);
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(context, blob_materialize(&txt), -1, fossil_free);
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nHdr;
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = search_stext_cached(zType[0], rid, zName, &nHdr);
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(context, z+nHdr+1, -1, SQLITE_TRANSIENT);
446 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
447 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
448 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
449 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Encode a string for use as a query parameter in a URL
450 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -463,20 +494,24 @@
463 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** do not delete the Search object.
464 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
465 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void search_sql_setup(sqlite3 *db){
466 497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int once = 0;
467 498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( once++ ) return;
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_create_function(db, "search_match", 1, SQLITE_UTF8, 0,
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_create_function(db, "search_match", -1, SQLITE_UTF8, 0,
469 500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_match_sqlfunc, 0, 0);
470 501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(db, "search_score", 0, SQLITE_UTF8, 0,
471 502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_score_sqlfunc, 0, 0);
472 503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(db, "search_snippet", 0, SQLITE_UTF8, 0,
473 504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_snippet_sqlfunc, 0, 0);
474 505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(db, "search_init", -1, SQLITE_UTF8, 0,
475 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_init_sqlfunc, 0, 0);
476 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(db, "stext", 3, SQLITE_UTF8, 0,
477 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_stext_sqlfunc, 0, 0);
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_create_function(db, "title", 3, SQLITE_UTF8, 0,
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ search_title_sqlfunc, 0, 0);
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_create_function(db, "body", 3, SQLITE_UTF8, 0,
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ search_body_sqlfunc, 0, 0);
478 513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(db, "urlencode", 1, SQLITE_UTF8, 0,
479 514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_urlencode_sqlfunc, 0, 0);
480 515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
481 516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
482 517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -616,21 +651,23 @@
616 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zDocGlob && zDocGlob[0] && zDocBr && zDocBr[0] ){
617 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
618 653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"CREATE VIRTUAL TABLE IF NOT EXISTS temp.foci USING files_of_checkin;"
619 654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
620 655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO x(label,url,score,date,snip)"
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SELECT printf('Document: %%s',foci.filename),"
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO x(label,url,score,id,date,snip)"
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT printf('Document: %%s',title('d',blob.rid,foci.filename)),"
623 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" printf('/doc/%T/%%s',foci.filename),"
624 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_score(),"
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " 'd'||blob.rid,"
625 661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT datetime(event.mtime) FROM event"
626 662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE objid=symbolic_name_to_rid('trunk')),"
627 663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_snippet()"
628 664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM foci CROSS JOIN blob"
629 665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE checkinID=symbolic_name_to_rid('trunk')"
630 666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND blob.uuid=foci.uuid"
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND search_match(stext('d',blob.rid,foci.filename))"
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND search_match(title('d',blob.rid,foci.filename),"
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " body('d',blob.rid,foci.filename))"
632 669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND %z",
633 670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDocBr, glob_expr("foci.filename", zDocGlob)
634 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
635 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
636 673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -641,18 +678,19 @@
641 678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM tag, tagxref"
642 679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tag.tagname GLOB 'wiki-*'"
643 680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND tagxref.tagid=tag.tagid"
644 681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" GROUP BY 1"
645 682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
")"
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO x(label,url,score,date,snip)"
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO x(label,url,score,id,date,snip)"
647 684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT printf('Wiki: %%s',name),"
648 685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" printf('/wiki?name=%%s',urlencode(name)),"
649 686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_score(),"
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " 'w'||rid,"
650 688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" datetime(mtime),"
651 689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_snippet()"
652 690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM wiki"
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE search_match(stext('w',rid,name));"
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE search_match(title('w',rid,name),body('w',rid,name));"
654 692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
655 693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
656 694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (srchFlags & SRCH_CKIN)!=0 ){
657 695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
658 696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"WITH ckin(uuid,rid,mtime) AS ("
@@ -659,34 +697,45 @@
659 697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT blob.uuid, event.objid, event.mtime"
660 698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM event, blob"
661 699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE event.type='ci'"
662 700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND blob.rid=event.objid"
663 701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
")"
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO x(label,url,score,date,snip)"
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO x(label,url,score,id,date,snip)"
665 703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT printf('Check-in [%%.10s] on %%s',uuid,datetime(mtime)),"
666 704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" printf('/timeline?c=%%s&n=8&y=ci',uuid),"
667 705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_score(),"
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " 'c'||rid,"
668 707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" datetime(mtime),"
669 708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_snippet()"
670 709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM ckin"
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE search_match(stext('c',rid,NULL));"
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE search_match('',body('c',rid,NULL));"
672 711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
673 712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
674 713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (srchFlags & SRCH_TKT)!=0 ){
675 714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO x(label,url,score, date,snip)"
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SELECT printf('Ticket [%%.17s] on %%s',"
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "tkt_uuid,datetime(tkt_mtime)),"
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO x(label,url,score,id,date,snip)"
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT printf('Ticket: %%s (%%s)',title('t',tkt_id,NULL),"
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "datetime(tkt_mtime)),"
679 718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" printf('/tktview/%%.20s',tkt_uuid),"
680 719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_score(),"
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " 't'||tkt_id,"
681 721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" datetime(tkt_mtime),"
682 722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" search_snippet()"
683 723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM ticket"
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE search_match(stext('t',tkt_id,NULL));"
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE search_match(title('t',tkt_id,NULL),body('t',tkt_id,NULL));"
685 725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
686 726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
687 727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Number of significant bits in a u32
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int nbits(u32 x){
733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( x ){ n++; x >>= 1; }
735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return n;
736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
688 737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
689 738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
690 739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implemenation of the rank() function used with rank(matchinfo(*,'pcsx')).
691 740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
692 741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_rank_sqlfunc(
@@ -694,24 +743,45 @@
694 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
695 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **argv
696 745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
697 746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned *aVal = (unsigned int*)sqlite3_value_blob(argv[0]);
698 747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVal = sqlite3_value_bytes(argv[0])/4;
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCol; /* Number of columns in the index */
699 749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTerm; /* Number of search terms in the query */
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i; /* Loop counter */
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double r = 1.0; /* Score */
750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, j; /* Loop counter */
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r = 0.0; /* Score */
752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const unsigned *aX, *aS;
702 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nVal<6 ) return;
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aVal[1]!=1 ) return;
754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nVal<2 ) return;
705 755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTerm = aVal[0];
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- r *= 1<<((30*(aVal[2]-1))/nTerm);
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<=nTerm; i++){
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int hits_this_row = aVal[3*i];
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int hits_all_rows = aVal[3*i+1];
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rows_with_hit = aVal[3*i+2];
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double avg_hits_per_row = (double)hits_all_rows/(double)rows_with_hit;
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- r *= hits_this_row/avg_hits_per_row;
756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nCol = aVal[1];
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nVal<2+3*nCol*nTerm+nCol ) return;
758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aS = aVal+2;
759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aX = aS+nCol;
760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=0; j<nCol; j++){
761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double x;
762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aS[j]>0 ){
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x = 0.0;
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nTerm; i++){
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int hits_this_row;
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int hits_all_rows;
767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rows_with_hit;
768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double avg_hits_per_row;
769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hits_this_row = aX[j + i*nCol*3];
771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( hits_this_row==0 )continue;
772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hits_all_rows = aX[j + i*nCol*3 + 1];
773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rows_with_hit = aX[j + i*nCol*3 + 2];
774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rows_with_hit==0 ) continue;
775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ avg_hits_per_row = hits_all_rows/(double)rows_with_hit;
776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x += hits_this_row/(avg_hits_per_row*nbits(rows_with_hit));
777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x *= (1<<((30*(aS[j]-1))/nTerm));
779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x = 0.0;
781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r = r*10.0 + x;
713 783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
714 784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SEARCH_DEBUG_RANK 0
715 785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SEARCH_DEBUG_RANK
716 786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
717 787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob x;
@@ -746,14 +816,15 @@
746 816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( srchFlags==0 ) return;
747 817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8, 0,
748 818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_rank_sqlfunc, 0, 0);
749 819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&sql, 0, 0);
750 820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&sql,
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO x(label,url,score,date,snip) "
821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO x(label,url,score,id,date,snip) "
752 822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT ftsdocs.label,"
753 823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ftsdocs.url,"
754 824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" rank(matchinfo(ftsidx,'pcsx')),"
825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " ftsdocs.type || ftsdocs.rid,"
755 826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" datetime(ftsdocs.mtime),"
756 827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" snippet(ftsidx,'<mark>','</mark>',' ... ',-1,35)"
757 828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM ftsidx CROSS JOIN ftsdocs"
758 829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE ftsidx MATCH %Q"
759 830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND ftsdocs.rowid=ftsidx.docid",
@@ -838,29 +909,30 @@
838 909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
839 910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the number of rows.
840 911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
841 912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int search_run_and_output(
842 913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPattern, /* The query pattern */
843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned int srchFlags /* What to search over */
914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int srchFlags, /* What to search over */
915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fDebug /* Extra debugging output */
844 916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
845 917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
846 918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRow = 0;
847 919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
848 920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srchFlags = search_restrict(srchFlags);
849 921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( srchFlags==0 ) return 0;
850 922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_sql_setup(g.db);
851 923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
add_content_sql_commands(g.db);
852 924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "CREATE TEMP TABLE x(label,url,score,date,snip);"
925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "CREATE TEMP TABLE x(label,url,score,id,date,snip);"
854 926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
855 927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !search_index_exists() ){
856 928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_fullscan(zPattern, srchFlags);
857 929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
858 930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_update_index(srchFlags);
859 931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_indexed(zPattern, srchFlags);
860 932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_prepare(&q, "SELECT url, snip, label"
933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_prepare(&q, "SELECT url, snip, label, score, id"
862 934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM x"
863 935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY score DESC, date DESC;");
864 936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
865 937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUrl = db_column_text(&q, 0);
866 938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSnippet = db_column_text(&q, 1);
@@ -867,12 +939,15 @@
867 939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zLabel = db_column_text(&q, 2);
868 940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRow==0 ){
869 941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <ol>
870 942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
871 943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRow++;
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <li><p><a href='%R%s(zUrl)'>%h(zLabel)</a><br>
873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <span class='snippet'>%z(cleanSnippet(zSnippet))</span></li>
944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <li><p><a href='%R%s(zUrl)'>%h(zLabel)</a>
945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fDebug ){
946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ (%e(db_column_double(&q,3)), %s(db_column_text(&q,4)))
947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <br><span class='snippet'>%z(cleanSnippet(zSnippet))</span></li>
874 949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
875 950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
876 951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRow ){
877 952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </ol>
878 953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -900,10 +975,11 @@
900 975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zType = 0;
901 976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zClass = 0;
902 977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDisable1;
903 978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDisable2;
904 979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPattern;
980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fDebug = PB("debug");
905 981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srchFlags = search_restrict(srchFlags);
906 982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( srchFlags ){
907 983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRCH_CKIN: zType = " Check-ins"; zClass = "Ckin"; break;
908 984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRCH_DOC: zType = " Docs"; zClass = "Doc"; break;
909 985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRCH_TKT: zType = " Tickets"; zClass = "Tkt"; break;
@@ -947,10 +1023,13 @@
947 1023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_printf(">%s</option>\n", aY[i].zNm);
948 1024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
949 1025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </select>
950 1026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srchFlags = newFlags;
951 1027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fDebug ){
1029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="hidden" name="debug" value="1">
1030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
952 1031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" value="Search%s(zType)"%s(zDisable2)>
953 1032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( srchFlags==0 ){
954 1033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <p class="generalError">Search is disabled</p>
955 1034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
956 1035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </div></form>
@@ -959,11 +1038,11 @@
959 1038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zClass ){
960 1039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <div class='searchResult searchResult%s(zClass)'>
961 1040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
962 1041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <div class='searchResult'>
963 1042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( search_run_and_output(zPattern, srchFlags)==0 ){
1043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( search_run_and_output(zPattern, srchFlags, fDebug)==0 ){
965 1044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <p class='searchEmpty'>No matches for: <span>%h(zPattern)</span></p>
966 1045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
967 1046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </div>
968 1047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
969 1048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -983,10 +1062,14 @@
983 1062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
984 1063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
985 1064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
986 1065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is a helper function for search_stext(). Writing into pOut
987 1066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the search text obtained from pIn according to zMimetype.
1067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The title of the document is the first line of text. All subsequent
1069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** lines are the body. If the document has no title, the first line
1070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is blank.
988 1071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
989 1072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void get_stext_by_mimetype(
990 1073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pIn,
991 1074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zMimetype,
992 1075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pOut
@@ -994,41 +1077,74 @@
994 1077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob html, title;
995 1078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&html, 0, 0);
996 1079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&title, 0, 0);
997 1080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zMimetype==0 ) zMimetype = "text/plain";
998 1081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fossil_strcmp(zMimetype,"text/x-fossil-wiki")==0 ){
999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- wiki_convert(pIn, &html, 0);
1082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob tail;
1083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&tail, 0, 0);
1084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( wiki_find_title(pIn, &title, &tail) ){
1085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, "%s\n", blob_str(&title));
1086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wiki_convert(&tail, &html, 0);
1087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&tail);
1088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pOut, "\n", 1);
1090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wiki_convert(pIn, &html, 0);
1091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1000 1092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
html_to_plaintext(blob_str(&html), pOut);
1001 1093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( fossil_strcmp(zMimetype,"text/x-markdown")==0 ){
1002 1094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
markdown_to_html(pIn, &title, &html);
1095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_size(&title) ){
1096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, "%s\n", blob_str(&title));
1097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pOut, "\n", 1);
1099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1003 1100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
html_to_plaintext(blob_str(&html), pOut);
1004 1101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( fossil_strcmp(zMimetype,"text/html")==0 ){
1102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( doc_is_embedded_html(pIn, &title) ){
1103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, "%s\n", blob_str(&title));
1104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1005 1105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
html_to_plaintext(blob_str(pIn), pOut);
1006 1106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pOut = *pIn;
1008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_init(pIn, 0, 0);
1107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pOut, blob_buffer(pIn), blob_size(pIn));
1009 1108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1010 1109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&html);
1011 1110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&title);
1012 1111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1013 1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1014 1113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1015 1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Query pQuery is pointing at a single row of output. Append a text
1016 1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** representation of every text-compatible column to pAccum.
1017 1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void append_all_ticket_fields(Blob *pAccum, Stmt *pQuery){
1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void append_all_ticket_fields(Blob *pAccum, Stmt *pQuery, int iTitle){
1019 1118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = db_column_count(pQuery);
1020 1119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zMime = 0;
1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iTitle>=0 && iTitle<n ){
1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_column_type(pQuery,iTitle)==SQLITE_TEXT ){
1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pAccum, db_column_text(pQuery,iTitle), -1);
1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pAccum, "\n", 1);
1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1021 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<n; i++){
1022 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zColName = db_column_name(pQuery,i);
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eType = db_column_type(pQuery,i);
1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==iTitle ) continue;
1023 1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fossil_strnicmp(zColName,"tkt_",4)==0 ) continue;
1024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fossil_stricmp(zColName,"mimetype")==0 ) continue;
1025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- switch( db_column_type(pQuery,i) ){
1026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case SQLITE_INTEGER:
1027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case SQLITE_FLOAT:
1028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case SQLITE_TEXT:
1029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_appendf(pAccum, "%s: %s |\n", zColName, db_column_text(pQuery,i));
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_strnicmp(zColName,"private_",8)==0 ) continue;
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==SQLITE_BLOB || eType==SQLITE_NULL ) continue;
1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_stricmp(zColName,"mimetype")==0 ){
1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zMime = db_column_text(pQuery,i);
1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_strcmp(zMime,"text/plain")==0 ) zMime = 0;
1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( zMime==0 || eType!=SQLITE_TEXT ){
1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pAccum, "%s: %s |\n", zColName, db_column_text(pQuery,i));
1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob txt;
1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&txt, db_column_text(pQuery,i), -1);
1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pAccum, "%s: ", zColName);
1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ get_stext_by_mimetype(&txt, zMime, pAccum);
1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pAccum, " |", 2);
1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&txt);
1030 1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1031 1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1032 1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1033 1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1034 1150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1054,11 +1170,11 @@
1054 1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1055 1171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(pOut, 0, 0);
1056 1172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( cType ){
1057 1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'd': { /* Documents */
1058 1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob doc;
1059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- content_get(rid, &doc);
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ content_get(rid, &doc);
1060 1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_to_utf8_no_bom(&doc, 0);
1061 1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
get_stext_by_mimetype(&doc, mimetype_from_name(zName), pOut);
1062 1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&doc);
1063 1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1064 1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1073,10 +1189,11 @@
1073 1189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_destroy(pWiki);
1074 1190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1075 1191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1076 1192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'c': { /* Check-in Comments */
1077 1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Stmt q;
1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int isPlainText = -1;
1078 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_static_prepare(&q,
1079 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT coalesce(ecomment,comment)"
1080 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ||' (user: '||coalesce(euser,user,'?')"
1081 1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ||', tags: '||"
1082 1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT group_concat(substr(tag.tagname,5),',')"
@@ -1083,44 +1200,99 @@
1083 1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM tag, tagxref"
1084 1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagname GLOB 'sym-*' AND tag.tagid=tagxref.tagid"
1085 1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND tagxref.rid=event.objid AND tagxref.tagtype>0)"
1086 1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ||')'"
1087 1204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM event WHERE objid=:x AND type='ci'");
1205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isPlainText<0 ){
1206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isPlainText = db_get_boolean("timeline-plaintext",0);
1207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1088 1208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_int(&q, ":x", rid);
1089 1209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_step(&q)==SQLITE_ROW ){
1090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_column_blob(&q, 0, pOut);
1091 1210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(pOut, "\n", 1);
1211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isPlainText ){
1212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_column_blob(&q, 0, pOut);
1213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob x;
1215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&x,0,0);
1216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_column_blob(&q, 0, &x);
1217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ get_stext_by_mimetype(&x, "text/x-fossil-wiki", pOut);
1218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&x);
1219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1092 1220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1093 1221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&q);
1094 1222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1095 1223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1096 1224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 't': { /* Tickets */
1097 1225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Stmt q1;
1098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob raw;
1226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int iTitle = -1;
1099 1227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_static_prepare(&q1, "SELECT * FROM ticket WHERE tkt_id=:rid");
1100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_init(&raw,0,0);
1101 1228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_int(&q1, ":rid", rid);
1102 1229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_step(&q1)==SQLITE_ROW ){
1103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- append_all_ticket_fields(&raw, &q1);
1230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iTitle<0 ){
1231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = db_column_count(&q1);
1232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iTitle=0; iTitle<n; iTitle++){
1233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_stricmp(db_column_name(&q1,iTitle),"title")==0 ) break;
1234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_all_ticket_fields(pOut, &q1, iTitle);
1104 1237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1105 1238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&q1);
1106 1239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_table_exists("repository","ticketchng") ){
1107 1240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Stmt q2;
1108 1241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_static_prepare(&q2, "SELECT * FROM ticketchng WHERE tkt_id=:rid"
1109 1242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY tkt_mtime");
1110 1243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_int(&q2, ":rid", rid);
1111 1244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q2)==SQLITE_ROW ){
1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- append_all_ticket_fields(&raw, &q2);
1245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_all_ticket_fields(pOut, &q2, -1);
1113 1246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1114 1247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&q2);
1115 1248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- html_to_plaintext(blob_str(&raw), pOut);
1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_reset(&raw);
1118 1249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1119 1250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1120 1251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1121 1252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine is a wrapper around search_stext().
1256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine looks up the search text, stores it in an internal
1258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** buffer, and returns a pointer to the text. Subsequent requests
1259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the same document return the same pointer. The returned pointer
1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is valid until the next invocation of this routine. Call this routine
1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with an eType of 0 to clear the cache.
1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *search_stext_cached(
1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char cType, /* Type of document */
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid, /* BLOB.RID or TAG.TAGID value for document */
1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName, /* Auxiliary information */
1267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pnTitle /* OUT: length of title in bytes excluding \n */
1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
1269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct {
1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob stext; /* Cached search text */
1271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char cType; /* The type */
1272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid; /* The RID */
1273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTitle; /* Number of bytes in title */
1274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } cache;
1275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
1276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z;
1277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cType!=cache.cType || rid!=cache.rid ){
1278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cache.rid>0 ){
1279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&cache.stext);
1280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&cache.stext,0,0);
1282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cache.cType = cType;
1284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cache.rid = rid;
1285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cType==0 ) return 0;
1286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ search_stext(cType, rid, zName, &cache.stext);
1287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = blob_str(&cache.stext);
1288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; z[i] && z[i]!='\n'; i++){}
1289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cache.nTitle = i;
1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pnTitle ) *pnTitle = cache.nTitle;
1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return blob_str(&cache.stext);
1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1122 1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1123 1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1124 1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-search-stext
1125 1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1126 1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: fossil test-search-stext TYPE ARG1 ARG2
@@ -1131,10 +1303,30 @@
1131 1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=5 ) usage("TYPE RID NAME");
1132 1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_stext(g.argv[2][0], atoi(g.argv[3]), g.argv[4], &out);
1133 1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%s\n",blob_str(&out));
1134 1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&out);
1135 1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** COMMAND: test-convert-stext
1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usage: fossil test-convert-stext FILE MIMETYPE
1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Read the content of FILE and convert it to stext according to MIMETYPE.
1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Send the result to standard output.
1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void test_convert_stext(void){
1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob in, out;
1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_find_and_open_repository(0,0);
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.argc!=4 ) usage("FILENAME MIMETYPE");
1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_read_from_file(&in, g.argv[2]);
1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&out, 0, 0);
1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ get_stext_by_mimetype(&in, g.argv[3], &out);
1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("%s\n",blob_str(&out));
1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&in);
1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&out);
1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1136 1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1137 1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The schema for the full-text index
1138 1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1139 1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zFtsSchema[] =
1140 1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ -- One entry for each possible search result
@@ -1145,20 +1337,21 @@
1145 1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ name TEXT, -- Additional document description
1146 1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ idxed BOOLEAN, -- True if currently in the index
1147 1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ label TEXT, -- Label to print on search results
1148 1340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ url TEXT, -- URL to access this document
1149 1341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ mtime DATE, -- Date when document created
1342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ bx TEXT, -- Temporary "body" content cache
1150 1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ UNIQUE(type,rid)
1151 1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ );
1152 1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE INDEX "%w".ftsdocIdxed ON ftsdocs(type,rid,name) WHERE idxed==0;
1153 1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE INDEX "%w".ftsdocName ON ftsdocs(name) WHERE type='w';
1154 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE VIEW IF NOT EXISTS "%w".ftscontent AS
1155 1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ SELECT rowid, type, rid, name, idxed, label, url, mtime,
1156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ stext(type,rid,name) AS 'stext'
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ title(type,rid,name) AS 'title', body(type,rid,name) AS 'body'
1157 1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ FROM ftsdocs;
1158 1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE VIRTUAL TABLE IF NOT EXISTS "%w".ftsidx
1159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ USING fts4(content="ftscontent", stext);
1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ USING fts4(content="ftscontent", title, body%s);
1160 1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
;
1161 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zFtsDrop[] =
1162 1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ DROP TABLE IF EXISTS "%w".ftsidx;
1163 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ DROP VIEW IF EXISTS "%w".ftscontent;
1164 1357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ DROP TABLE IF EXISTS "%w".ftsdocs;
@@ -1168,13 +1361,15 @@
1168 1361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Create or drop the tables associated with a full-text index.
1169 1362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1170 1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int searchIdxExists = -1;
1171 1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void search_create_index(void){
1172 1365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDb = db_name("repository");
1366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int useStemmer = db_get_boolean("search-stemmer",0);
1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zExtra = useStemmer ? ",tokenize=porter" : "";
1173 1368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_sql_setup(g.db);
1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_multi_exec(zFtsSchema/*works-like:"%w%w%w%w%w"*/,
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDb, zDb, zDb, zDb, zDb);
1369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec(zFtsSchema/*works-like:"%w%w%w%w%w%s"*/,
1370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb, zDb, zDb, zDb, zDb, zExtra/*safe-for-%s*/);
1176 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
searchIdxExists = 1;
1177 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1178 1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void search_drop_index(void){
1179 1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDb = db_name("repository");
1180 1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(zFtsDrop/*works-like:"%w%w%w"*/, zDb, zDb, zDb);
@@ -1292,34 +1487,39 @@
1292 1487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1293 1488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM ftsdocs WHERE type='d'"
1294 1489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND rid NOT IN (SELECT rid FROM current_docs)"
1295 1490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1296 1491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT OR IGNORE INTO ftsdocs(type,rid,name,idxed,label,url,mtime)"
1492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT OR IGNORE INTO ftsdocs(type,rid,name,idxed,label,bx,url,mtime)"
1298 1493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT 'd', rid, name, 0,"
1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " printf('Document: %%s',name),"
1494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " title('d',rid,name),"
1495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " body('d',rid,name),"
1300 1496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" printf('/doc/%q/%%s',urlencode(name)),"
1301 1497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" %.17g"
1302 1498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM current_docs",
1303 1499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBrUuid, rTime
1304 1500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1305 1501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,stext)"
1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SELECT rowid, stext FROM ftscontent WHERE type='d' AND NOT idxed"
1502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(docid,title,body)"
1503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT rowid, label, bx FROM ftsdocs WHERE type='d' AND NOT idxed"
1308 1504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1309 1505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "UPDATE ftsdocs SET idxed=1 WHERE type='d' AND NOT idxed"
1506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "UPDATE ftsdocs SET"
1507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " idxed=1,"
1508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " bx=NULL,"
1509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " label='Document: '||label"
1510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE type='d' AND NOT idxed"
1311 1511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1312 1512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1313 1513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1314 1514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1315 1515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 'c' terms in FTSDOCS
1316 1516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1317 1517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_checkin_index(void){
1318 1518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,stext)"
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SELECT rowid, stext('c',rid,NULL) FROM ftsdocs"
1519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(docid,title,body)"
1520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT rowid, '', body('c',rid,NULL) FROM ftsdocs"
1321 1521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='c' AND NOT idxed;"
1322 1522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1323 1523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1324 1524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)"
1325 1525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT ftsdocs.rowid, 1, 'c', ftsdocs.rid, NULL,"
@@ -1336,19 +1536,20 @@
1336 1536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1337 1537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 't' terms in FTSDOCS
1338 1538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1339 1539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_ticket_index(void){
1340 1540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,stext)"
1342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SELECT rowid, stext('t',rid,NULL) FROM ftsdocs"
1541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(docid,title,body)"
1542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT rowid, title('t',rid,NULL), body('t',rid,NULL) FROM ftsdocs"
1343 1543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='t' AND NOT idxed;"
1344 1544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1345 1545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_changes()==0 ) return;
1346 1546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1347 1547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)"
1348 1548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT ftsdocs.rowid, 1, 't', ftsdocs.rid, NULL,"
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " printf('Ticket [%%.16s] on %%s',tkt_uuid,datetime(tkt_mtime)),"
1549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " printf('Ticket: %%s (%%s)',title('t',tkt_id,null),"
1550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " datetime(tkt_mtime)),"
1350 1551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" printf('/tktview/%%.20s',tkt_uuid),"
1351 1552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" tkt_mtime"
1352 1553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM ftsdocs, ticket"
1353 1554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE ftsdocs.type='t' AND NOT ftsdocs.idxed"
1354 1555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND ticket.tkt_id=ftsdocs.rid"
@@ -1358,12 +1559,12 @@
1358 1559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1359 1560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deal with all of the unindexed 'w' terms in FTSDOCS
1360 1561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1361 1562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void search_update_wiki_index(void){
1362 1563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO ftsidx(docid,stext)"
1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SELECT rowid, stext('w',rid,NULL) FROM ftsdocs"
1564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO ftsidx(docid,title,body)"
1565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT rowid, title('w',rid,NULL),body('w',rid,NULL) FROM ftsdocs"
1365 1566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type='w' AND NOT idxed;"
1366 1567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1367 1568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_changes()==0 ) return;
1368 1569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
1369 1570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)"
@@ -1416,19 +1617,22 @@
1416 1617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: fossil fts-config ?SUBCOMMAND? ?ARGUMENT?
1417 1618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1418 1619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The "fossil fts-config" command configures the full-text search capabilities
1419 1620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the repository. Subcommands:
1420 1621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** reindex Rebuild the search index. Create it if it does
1422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** not already exist
1622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** reindex Rebuild the search index. This is a no-op if
1623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index search is disabled
1423 1624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1424 1625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index (on|off) Turn the search index on or off
1425 1626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1426 1627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** enable cdtw Enable various kinds of search. c=Check-ins,
1427 1628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** d=Documents, t=Tickets, w=Wiki.
1428 1629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1429 1630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disable cdtw Disable versious kinds of search
1631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** stemmer (on|off) Turn the Porter stemmer on or off for indexed
1633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** search. (Unindexed search is never stemmed.)
1430 1634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1431 1635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The current search settings are displayed after any changes are applied.
1432 1636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Run this command with no arguments to simply see the settings.
1433 1637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1434 1638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_fts_cmd(void){
@@ -1435,16 +1639,17 @@
1435 1639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const struct { int iCmd; const char *z; } aCmd[] = {
1436 1640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ 1, "reindex" },
1437 1641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ 2, "index" },
1438 1642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ 3, "disable" },
1439 1643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ 4, "enable" },
1644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { 5, "stemmer" },
1440 1645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1441 1646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const struct { char *zSetting; char *zName; char *zSw; } aSetng[] = {
1442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "search-ckin", "check-in search:", "c" },
1443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "search-doc", "document search:", "d" },
1444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "search-tkt", "ticket search:", "t" },
1445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "search-wiki", "wiki search:", "w" },
1647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "search-ckin", "check-in search:", "c" },
1648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "search-doc", "document search:", "d" },
1649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "search-tkt", "ticket search:", "t" },
1650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "search-wiki", "wiki search:", "w" },
1446 1651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1447 1652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zSubCmd;
1448 1653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j, n;
1449 1654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCmd = 0;
1450 1655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iAction = 0;
@@ -1464,11 +1669,11 @@
1464 1669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
1465 1670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1466 1671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCmd = aCmd[i].iCmd;
1467 1672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1468 1673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCmd==1 ){
1469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iAction = 2;
1674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( search_index_exists() ) iAction = 2;
1470 1675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1471 1676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCmd==2 ){
1472 1677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc<3 ) usage("index (on|off)");
1473 1678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iAction = 1 + is_truth(g.argv[3]);
1474 1679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1475,18 +1680,23 @@
1475 1680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
1476 1681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1477 1682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Adjust search settings */
1478 1683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCmd==3 || iCmd==4 ){
1479 1684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zCtrl;
1480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.argc<4 ) usage("enable STRING");
1685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.argc<4 ) usage(mprintf("%s STRING",zSubCmd));
1481 1686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCtrl = g.argv[3];
1482 1687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<ArraySize(aSetng); j++){
1483 1688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strchr(zCtrl, aSetng[j].zSw[0])!=0 ){
1484 1689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_set_int(aSetng[j].zSetting, iCmd-3, 0);
1485 1690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1486 1691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1487 1692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCmd==5 ){
1694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.argc<4 ) usage("porter ON/OFF");
1695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set_int("search-stemmer", is_truth(g.argv[3]), 0);
1696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1488 1698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1489 1699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* destroy or rebuild the index, if requested */
1490 1700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iAction>=1 ){
1491 1701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
search_drop_index();
1492 1702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1497,14 +1707,16 @@
1497 1707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Always show the status before ending */
1498 1708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ArraySize(aSetng); i++){
1499 1709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%-16s %s\n", aSetng[i].zName,
1500 1710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_get_boolean(aSetng[i].zSetting,0) ? "on" : "off");
1501 1711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("%-16s %s\n", "Porter stemmer:",
1713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_get_boolean("search-stemmer",0) ? "on" : "off");
1502 1714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( search_index_exists() ){
1503 1715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%-16s enabled\n", "full-text index:");
1504 1716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%-16s %d\n", "documents:",
1505 1717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_int(0, "SELECT count(*) FROM ftsdocs"));
1506 1718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1507 1719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%-16s disabled\n", "full-text index:");
1508 1720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1509 1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
1510 1722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1511 1723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!