Skip to content

Commit

Permalink
add function core:index-keys-for-field()
Browse files Browse the repository at this point in the history
  • Loading branch information
peterstadler committed Oct 1, 2020
1 parent afcf3b7 commit 5d40748
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 18 deletions.
8 changes: 8 additions & 0 deletions modules/core.xqm
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,11 @@ declare function core:undated($docType as xs:string) as document-node()* {
case 'letters' case 'writings' case 'documents' return crud:data-collection($docType)/tei:TEI[ft:query(., 'date:undated')][not(tei:ref)]/root()
default return ()
};

declare function core:index-keys-for-field($coll as document-node()*, $field as xs:string) as xs:string* {
distinct-values(
for $i in $coll/tei:TEI[ft:query(., (), map { "fields": $field })] | $coll/tei:ab[ft:query(., (), map { "fields": $field })] | $coll/tei:biblStruct[ft:query(., (), map { "fields": $field })]
return
ft:field($i, $field)
)
};
22 changes: 4 additions & 18 deletions modules/search.xqm
Original file line number Diff line number Diff line change
Expand Up @@ -391,15 +391,8 @@ declare %private function search:facsimile-filter($collection as document-node()
declare %private function search:get-earliest-date($coll as document-node()*, $docType as xs:string) as xs:string? {
if(count($coll) gt 0) then
switch ($docType)
case 'news' case 'biblio' return
(: reverse order :)
let $date := query:get-normalized-date($coll[last()])
return
if(exists($date)) then string($date)
else if(count($coll) gt 1) then search:get-earliest-date(subsequence($coll, 1, count($coll) -1), $docType)
else ()
case 'letters' case 'writings' case 'diaries' case 'documents' return
string(query:get-normalized-date($coll[1]))
case 'news' case 'biblio' case 'letters' case 'writings' case 'diaries' case 'documents' return
min(core:index-keys-for-field($coll, 'date')[not(.='undated')])
case 'persons' case 'orgs' return ()
case 'works' return ()
case 'places' return ()
Expand All @@ -413,15 +406,8 @@ declare %private function search:get-earliest-date($coll as document-node()*, $d
declare %private function search:get-latest-date($coll as document-node()*, $docType as xs:string) as xs:string? {
if(count($coll) gt 0) then
switch ($docType)
case 'news' case 'biblio' return
(: reverse order :)
string(query:get-normalized-date($coll[1]))
case 'letters' case 'writings' case 'diaries' case 'documents' return
let $date := query:get-normalized-date(wdt:lookup($docType, ($coll except core:undated($docType)))?('sort')(())[last()])
return
if(exists($date)) then string($date)
else if(count($coll) gt 1) then search:get-latest-date(subsequence($coll, 1, count($coll) -1), $docType)
else ()
case 'news' case 'biblio' case 'letters' case 'writings' case 'diaries' case 'documents' return
max(core:index-keys-for-field($coll, 'date')[not(.='undated')])
case 'persons' case 'orgs' return ()
case 'works' return ()
case 'places' return ()
Expand Down

0 comments on commit 5d40748

Please sign in to comment.