Index: document_header.tcl
==================================================================
--- document_header.tcl
+++ document_header.tcl
@@ -36,11 +36,11 @@
Download
License
Support
Purchase
nodes in the document.
+ foreach li [[$dom root] search li] {
+ if {0==[releaselog_filterscript $li]} continue
+
+ set i 1
+ set ol [$li parent]
+ if {$ol=="" || [$ol tag]!="ol"} {error UNTHINKABLE!}
+ foreach c [$ol children] {
+ if {$c==$li} break
+ if {[$c tag]=="li"} {incr i}
+ }
+
+ set t [$li text]
+ db eval { INSERT INTO change VALUES($doc, $version, $i, $t) }
+ }
+}
proc rebuild_database {} {
db transaction {
# Create the database schema. If the schema already exists, then those
@@ -360,10 +416,23 @@
DROP TABLE IF EXISTS weight;
CREATE TABLE weight(id INTEGER PRIMARY KEY, percent FLOAT);
INSERT INTO page(page, rank) VALUES('rank', 'bm25(10.0,10.0,20.0,20.0)');
+
+ DROP TABLE IF EXISTS change;
+ CREATE VIRTUAL TABLE change USING fts5(
+ url UNINDEXED, -- Path to document
+ version UNINDEXED, -- SQLite version number
+ idx UNINDEXED, -- Bullet point number
+ text -- Text of change log entry
+ );
+ }
+
+ foreach doc [document_list changelog] {
+ puts "Indexing $doc..."
+ changelog_document_import $doc
}
foreach doc [document_list lang] {
puts "Indexing $doc..."
lang_document_import $doc
@@ -376,12 +445,14 @@
foreach doc [document_list generic] {
puts "Indexing $doc..."
generic_document_import $doc
}
+
db eval { INSERT INTO page(page) VALUES('optimize') }
+ db eval { INSERT INTO change(change) VALUES('optimize') }
foreach f [array names ::weight] {
set w $::weight($f)
db eval {SELECT rowid FROM page WHERE url=$f} {
db eval { INSERT INTO weight VALUES($rowid, $w); }
Index: search/search.tcl
==================================================================
--- search/search.tcl
+++ search/search.tcl
@@ -115,11 +115,10 @@
ip, -- IP query was made from
query, -- Fts5 query string
nres, -- Number of results
timestamp DEFAULT CURRENT_TIMESTAMP
);
-
INSERT INTO log(ip, query, nres) VALUES($ip, $query, $nRes);
COMMIT;
}
db2 close
@@ -221,10 +220,46 @@
proc ttime {script} {
set t [lindex [time [list uplevel $script]] 0]
if {$t>1000000} { return [format "%.2f s" [expr {$t/1000000.0}]] }
return [format "%.2f ms" [expr {$t/1000.0}]]
}
+
+proc searchchanges {} {
+ global A
+ if {![info exists A(q)]} return ""
+
+ set open {}
+ set close {}
+ set query {
+ SELECT url, version, idx, highlight(change, 3, $open, $close) AS text
+ FROM change($A(q)) ORDER BY rowid ASC
+ }
+
+ set ret [subst {
+ Change log entries mentioning: [htmlize $::A(q)]
+
+ }]
+
+ set s2 "style=\"margin-top:0\""
+ set s1 "style=\"font-size:larger; text-align:left\" class=nounderline"
+ set prev ""
+ db eval $query {
+ if {$prev!=$version} {
+ append ret [subst {
+ $version |
+ }]
+ set prev $version
+ }
+ append ret [subst { - ($idx) $text }]
+ }
+
+ append ret "
|
"
+ append ret "You can also see the entire"
+ append ret " changelog as a single page if you wish.
"
+
+ return $ret
+}
proc searchresults {} {
if {![info exists ::A(q)]} return ""
#set ::A(q) [string map {' ''} $A(q)]
#regsub -all {[^-/"A-Za-z0-9]} $::A(q) { } ::A(q)
@@ -380,21 +415,28 @@
set ::PATH ../
return [admin_list]
}
sqlite3 db search.d/search.db
+
+ set cmd searchresults
+ if {[info exists A(s)] && $A(s)=="c"} {
+ set cmd searchchanges
+ }
db transaction {
set t [ttime {
- if {[catch searchresults srchout]} {
+ if {[catch $cmd srchout]} {
set A(q) [string tolower $A(q)]
- set srchout [searchresults]
+ set srchout [$cmd]
}
set doc $srchout
}]
}
+ append doc ""
append doc "Page generated by FTS5 in about $t."
+ append doc "
"
return $doc
# return [cgi_env_dump]
}
@@ -420,10 +462,26 @@
append title " - [htmlize $::A(q)]"
} else {
set initsearch {}
}
set document [document_header $title $::PATH $initsearch]
+ append document [subst {
+
+ }]
append document $res
} else {
set document ""
append document "Error: $res\n\n"
append document $::errorInfo