2016-05-13 11 views
3

Warum sollte die fn:last()-Funktion nicht funktionieren, während Sie spawnen? last() in erzeugten Funktionen

Dies schlug fehl:

xquery version "1.0-ml"; 
let $items := (1, 2, 3) 
return xdmp:spawn-function(function() { 
    $items[3 to fn:last()] 
}) 

Nach einiger Zeit habe ich den Auftrag abbrechen, weil es nichts tut.

Ausgabe: Das Abbrechen der Meldung mit Fehlermeldung muss manuell gestoppt werden.

Dies funktioniert gut:

xquery version "1.0-ml"; 
let $items := (1, 2, 3)[3 to fn:last()] 
return xdmp:spawn-function(function() { 
    $items 
}) 

Ausgang: Abfrage erfolgreich

abgeschlossen
+0

"Failed" ist nicht wirklich eine angemessene Problembeschreibung. Wie ist es gescheitert, gibt es eine Fehlermeldung? –

+0

Die erste gibt ein XDMP-MEMORY an meinem Ende zurück. Ich denke, es lohnt sich, einen Fehler beim MarkLogic-Support einzureichen. Brauchst du Hilfe? – grtjn

+0

In diesem Fall werde ich es melden. Vielen Dank. – chriskelly

Antwort

4

Das Beispiel für die Dokumentation von fn:last() ist eine sehr ähnliche Nutzung dieser Funktion zeigt. Der Nachteil bei der Verwendung von Funktionen in Prädikaten besteht jedoch darin, dass sie für jedes Element in der Sequenz ausgewertet werden. Mit fn:subsequence und optional fn:count sollten beide effizienter sein, und By-Pass Ihr Problem:

let $items := (1, 2, 3) 
return xdmp:spawn-function(function() { 
    xdmp:log(subsequence($items, 3, count($items))) (: you can omit 3rd param with same effect :) 
}) 

HTH!

+0

Das löst mein Problem sicher. Ich werde es trotzdem melden, da es sich um ein unerwartetes Verhalten handelt. Vielen Dank! – chriskelly