From da4f027b1e7c0bf90efe6782a326448af164cd37 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 29 Jan 1996 17:31:45 +0000 Subject: [PATCH] More general multi-search algorithm with cached records. --- www/egwindex.html | 14 +++---- www/mquery.egw | 4 +- www/msearch.egw | 6 +-- www/mtargets.egw | 4 +- www/showfull.egw | 30 ++------------ www/z39util.tcl | 116 +++++++++++++++++++++++++++++++++++++++++++---------- www/ztargets.conf | 4 +- 7 files changed, 114 insertions(+), 64 deletions(-) diff --git a/www/egwindex.html b/www/egwindex.html index 39ce406..f8dfb75 100644 --- a/www/egwindex.html +++ b/www/egwindex.html @@ -3,26 +3,26 @@ Europagate WWW index -

Europagate WWW index, $Id: egwindex.html,v 1.8 1996/01/26 17:41:25 adam Exp $

+

Europagate WWW index, $Id: egwindex.html,v 1.9 1996/01/29 17:31:45 adam Exp $

diff --git a/www/mquery.egw b/www/mquery.egw index af33dda..3cf1ca1 100644 --- a/www/mquery.egw +++ b/www/mquery.egw @@ -4,7 +4,7 @@ { -# $Id: mquery.egw,v 1.11 1996/01/26 15:50:07 adam Exp $ +# $Id: mquery.egw,v 1.12 1996/01/29 17:31:45 adam Exp $ if {[info commands saveState] == ""} { source z39util.tcl @@ -41,7 +41,7 @@ lappend hist($setNo,$i,database) $base } set oSetNo [lindex $sessionParms 0] - if {$i == 0 && $oSetNo != ""} { + if {$i == 0 && [info exists hist($oSetNo,0,host)]} { for {set i 1} {$i <= $hist($oSetNo,0,host)} {incr i} { set hist($setNo,$i,host) $hist($oSetNo,$i,host) set hist($setNo,$i,idAuthentication) \ diff --git a/www/msearch.egw b/www/msearch.egw index 2ca5eb5..f6defa0 100644 --- a/www/msearch.egw +++ b/www/msearch.egw @@ -1,6 +1,6 @@ { -# $Id: msearch.egw,v 1.13 1996/01/26 15:50:07 adam Exp $ +# $Id: msearch.egw,v 1.14 1996/01/29 17:31:47 adam Exp $ if {[info commands saveState] == ""} { source z39util.tcl @@ -32,7 +32,7 @@ } set hist($setNo,maxPresent) [egw_form hits] if {$hist($setNo,maxPresent) == ""} { - set hist($setNo,maxPresent) 30 + set hist($setNo,maxPresent) 20 } } @@ -42,7 +42,7 @@ button-new-target 0 html "
\n" - z39msearch $setNo 1 B + z39msearch $setNo B 1 $hist($setNo,maxPresent) 1 html "
\n" set not $hist($setNo,0,host) diff --git a/www/mtargets.egw b/www/mtargets.egw index 5b641f5..306fe16 100644 --- a/www/mtargets.egw +++ b/www/mtargets.egw @@ -1,6 +1,6 @@ { -# $Id: mtargets.egw,v 1.13 1996/01/26 17:41:25 adam Exp $ +# $Id: mtargets.egw,v 1.14 1996/01/29 17:31:47 adam Exp $ set setNo 1 source ztargets.conf if {[info commands saveState] == ""} { @@ -46,7 +46,7 @@ set desc [lindex $targets($t) 4] if {$desc != ""} { - html "$desc
\n" + html "$desc
\n" } foreach d $databases { html { { -# $Id: showfull.egw,v 1.17 1996/01/26 15:50:09 adam Exp $ +# $Id: showfull.egw,v 1.18 1996/01/29 17:31:48 adam Exp $ proc buttons {setNo tno no format count host after} { global sessionId @@ -67,31 +67,9 @@ proc buttons {setNo tno no format count host after} { } else { html {">Result Set} " | \n" } - html {} - } else { - html {">New Query} " | \n" - } - html {} - } else { - html {">New Target} - } + + button-new-query 1 $setNo + button-new-target 0 html "

\n" } diff --git a/www/z39util.tcl b/www/z39util.tcl index e703062..1d78f64 100644 --- a/www/z39util.tcl +++ b/www/z39util.tcl @@ -1,5 +1,5 @@ # -# $Id: z39util.tcl,v 1.27 1996/01/26 17:41:26 adam Exp $ +# $Id: z39util.tcl,v 1.28 1996/01/29 17:31:48 adam Exp $ # proc saveState {} { uplevel #0 { @@ -782,15 +782,48 @@ proc fail-m-response {i} { incr zleft -1 } -proc search-m-response {setNo i} { +proc search-m-response {setNo i start number} { global zleft global zstatus + global hist - incr zleft -1 - set zstatus($i) 2 + egw_log debug "search-m-response" + set status [z39$i.$setNo responseStatus] + egw_log debug "search-m-response1" + if {[lindex $status 0] != "DBOSD"} { + egw_log debug "search-m-response2" + incr zleft -1 + set zstatus($i) 2 + return + } + set nor [z39$i.$setNo numberOfRecordsReturned] + egw_log debug "search-m-response3" + set hist($setNo,$i,offset) [expr $start + $nor -1] + if {[expr $nor + $start] >= [z39$i.$setNo resultCount]} { + egw_log debug "search-m-response4" + incr zleft -1 + set zstatus($i) 2 + return + } + egw_log debug "search-m-response5" + if {$nor >= $number} { + egw_log debug "search-m-response6" + incr zleft -1 + set zstatus($i) 2 + return + } + egw_log debug "search-m-response7" + set start [expr $start + $nor] + set number [expr $number - $nor] + if {[expr $start + $number - 1] > [z39$i.$setNo resultCount]} { + set number [expr [z39$i.$setNo resultCount] - $start + 1] + } + z39$i callback [list search-m-response $setNo $i $start $number] + egw_log debug "mpresent start=$number number=$number" + z39$i.$setNo present $start $number } -proc z39msearch {setNo piggy elements} { +proc z39msearch {setNo elements start number cache} { global zleft global zstatus global hist @@ -800,12 +833,10 @@ proc z39msearch {setNo piggy elements} { for {set i 1} {$i <= $not} {incr i} { set host $hist($setNo,$i,host) - if {[catch {z39 failback fail-response}]} { + if {[catch [list z39$i failback fail-m-response $i]]} { ir z39$i } - if {[catch {set oldHost [z39$i connect]}]} { - set oldHost "" - } + set oldHost [z39$i connect] set thisHost [splitHostSpec $host] if {$oldHost != $thisHost} { catch {z39$i disconnect} @@ -819,9 +850,9 @@ proc z39msearch {setNo piggy elements} { set host $hist($setNo,$i,host) set thisHost [splitHostSpec $host] if {$oldHost == $thisHost} { - set zstatus($i) 1 continue } + egw_log debug "old=$oldHost this=$thisHost" z39$i idAuthentication $hist($setNo,$i,idAuthentication) html "Connecting to target " $thisHost "
\n" set zstatus($i) -1 @@ -831,15 +862,20 @@ proc z39msearch {setNo piggy elements} { } while {$zleft > 0} { egw_log debug "Waiting for init response" - if {[catch {egw_wait zleft 10}]} { + if {[catch {egw_wait zleft 20}]} { break } } set zleft 0 for {set i 1} {$i <= $not} {incr i} { html "host " [splitHostSpec $hist($setNo,$i,host)] ": " - if {$zstatus($i) >= 1} { - html "ok
\n" + egw_log debug "i=$i zstatus=$zstatus($i)" + if {$zstatus($i) < 1} { + html "fail
\n" + continue + } + if {[catch [list z39$i.$setNo preferredRecordSyntax USMARC]]} { + html "ok
\n" ir-set z39$i.$setNo z39$i set hist($setNo,$i,offset) 0 eval z39$i.$setNo databaseNames $hist($setNo,$i,database) @@ -851,38 +887,74 @@ proc z39msearch {setNo piggy elements} { } z39$i.$setNo smallSetElementSetNames $thisElements z39$i.$setNo mediumSetElementSetNames $thisElements + z39$i.$setNo elementSetNames $thisElements z39$i.$setNo recordElements $thisElements z39$i.$setNo preferredRecordSyntax USMARC - z39$i callback [list search-m-response $setNo $i] + z39$i callback [list search-m-response $setNo $i $start $number] - if {$piggy} { + if {$start == 1} { z39$i.$setNo largeSetLowerBound 999999 z39$i.$setNo smallSetUpperBound 0 - z39$i.$setNo mediumSetPresentNumber $hist($setNo,maxPresent) + z39$i.$setNo mediumSetPresentNumber $number } else { z39$i.$setNo largeSetLowerBound 2 z39$i.$setNo smallSetUpperBound 0 z39$i.$setNo mediumSetPresentNumber 0 } set zstatus($i) 1 - egw_log debug "search " $hist($setNo,$i,query) + incr zleft + egw_log debug "setNo=$setNo msearch " $hist($setNo,$i,query) z39$i.$setNo search $hist($setNo,$i,query) + } elseif {[z39$i.$setNo resultCount] >= $start} { + if {[expr $start + $number - 1] > [z39$i.$setNo resultCount]} { + set tnumber [expr [z39$i.$setNo resultCount] - $start + 1] + } else { + set tnumber $number + } + if {![lindex $targets($hist($setNo,$i,host)) 5]} { + set thisElements {} + } else { + set thisElements $elements + } + z39$i.$setNo smallSetElementSetNames $thisElements + z39$i.$setNo mediumSetElementSetNames $thisElements + z39$i.$setNo elementSetNames $thisElements + z39$i.$setNo recordElements $thisElements + + for {set n 0} {$n < $tnumber} {incr n} { + if {[z39$i.$setNo type [expr $start + $n]] == ""} { + if {$n > 0} { + egw_log debug "failed on $n" + } + break + } + } + if {$n == $tnumber} { + html "cached
\n" + continue + } + + html "present
\n" + z39$i.$setNo preferredRecordSyntax USMARC + z39$i callback [list search-m-response $setNo $i $start $tnumber] incr zleft + egw_log debug "mpresent start=$start number=$tnumber" + z39$i.$setNo present $start $tnumber } else { - html "fail
\n" + html "ok
\n" } } while {$zleft > 0} { - egw_log debug "Waiting for search response" - if {[catch {egw_wait zleft 30}]} { + egw_log debug "Waiting for search/present response" + if {[catch {egw_wait zleft 60}]} { break } } for {set i 1} {$i <= $not} {incr i} { if {$zstatus($i) != 2} continue set status [z39$i.$setNo responseStatus] - if {[lindex $status 0] != "NSD"} { + if {0 && [lindex $status 0] != "NSD"} { set hist($setNo,$i,offset) [z39$i.$setNo numberOfRecordsReturned] } } @@ -1177,7 +1249,7 @@ proc button-scan-window {more setNo} { proc maintenance {} { html {


This page is maintained by } html { Peter Wad Hansen .} - html {Last modified 26. january 1996.
} + html {Last modified 29. january 1996.
} html { This and the following pages are under construction and } html {will continue to be so until the end of January 1996.} } diff --git a/www/ztargets.conf b/www/ztargets.conf index 312492f..955c1b7 100644 --- a/www/ztargets.conf +++ b/www/ztargets.conf @@ -1,4 +1,4 @@ -# $Id: ztargets.conf,v 1.20 1996/01/26 15:50:12 adam Exp $ +# $Id: ztargets.conf,v 1.21 1996/01/29 17:31:49 adam Exp $ set commonFields { { Title {@attr 1=4} } { Author {@attr 1=1} } @@ -116,6 +116,6 @@ set targets(localhost:210.Default) [list \ $commonFields \ {} \ {Server for testing purposes only.} \ - 1 \ + 0 \ ] -- 1.7.10.4