Thanks for the great summary provided by Taewoo! The XQuery’s signature shows that it always returns a string: fn:substring-before($arg1 as xs:string?, $arg2 as xs:string?) as xs:string
And the Marklogic's returns an option[string]. fn.substringBefore( $input <https://docs.marklogic.com/fn.substringBefore#input> as String?, $before <https://docs.marklogic.com/fn.substringBefore#before> as String?, [$collation <https://docs.marklogic.com/fn.substringBefore#collation> as String] ) as String? Since all the rest string functions are either return a string or throw exceptions, I think return an empty string should be a consistent behavior. > On Sep 28, 2015, at 9:12 PM, Mike Carey <[email protected]> wrote: > > Yes, and the Marklogic entry reminded me - the answer should probably be > modeled (for us) after XQuery - where the answers are fully spelled out > already (having been debated by a group of smart people first and implemented > by a bunch of XQuery engine providers): > http://www.w3.org/TR/xpath-functions-30/#func-substring-before > http://www.w3.org/TR/xpath-functions-30/#func-substring-after > Cheers, > Mike > > On 9/28/15 6:10 PM, Taewoo Kim wrote: >> Perhaps we can start from here: >> https://docs.google.com/spreadsheets/d/1j6_YSCc_8gEReAWFP84geI30wlnsz7uMFq4TCm7GRz8/edit?usp=sharing >> >> >> Best, >> Taewoo >> >> On Mon, Sep 28, 2015 at 6:05 PM, Mike Carey <[email protected]> wrote: >> >>> At times like this it's useful to take a quick look at what other systems >>> do, if they have such functions - e.g., are there precedents we should base >>> our answer on? (In Java, Postgres, MySQL, ...) >>> >>> >>> On 9/28/15 6:03 PM, Jianfeng Jia wrote: >>> >>>> Hi Devs, >>>> >>>> Another question about the string functions. >>>> >>>> The example code on the >>>> http://asterixdb.ics.uci.edu/documentation/aql/functions.html#StringFunctions >>>> < >>>> http://asterixdb.ics.uci.edu/documentation/aql/functions.html#StringFunctions> >>>> shows that these two function are suppose to be called after contains(). I >>>> wonder what is the expected behavior if the they can't find the match >>>> pattern? >>>> >>>> The current result is confusing. >>>> >>>> e.g. >>>> let $x := "substring" >>>> return [ substring-before($x, "subx"), substring-after($x, “subx”)] >>>> >>>> it will return >>>> [ [ "subst", "" ] >>>> ] >>>> Should we always return an empty string in such case, or throw an >>>> exception like “you shall filter the result by contain() first” ? >>>> IMHO, I’d like to return a null string. Any opinion? >>>> >>>> >>>> Best, >>>> >>>> Jianfeng Jia >>>> PhD Candidate of Computer Science >>>> University of California, Irvine >>>> >>>> >>>> > Best, Jianfeng Jia PhD Candidate of Computer Science University of California, Irvine
