-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlib-xquery.xqy
95 lines (81 loc) · 2.69 KB
/
lib-xquery.xqy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
xquery version "0.9-ml"
(:
: cq: lib-xquery.xqy
:
: Copyright (c) 2008-2011 MarkLogic Corporation. All Rights Reserved.
:
: Licensed under the Apache License, Version 2.0 (the "License");
: you may not use this file except in compliance with the License.
: You may obtain a copy of the License at
:
: http://www.apache.org/licenses/LICENSE-2.0
:
: Unless required by applicable law or agreed to in writing, software
: distributed under the License is distributed on an "AS IS" BASIS,
: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
: See the License for the specific language governing permissions and
: limitations under the License.
:
: The use of the Apache License does not indicate that this project is
: affiliated with the Apache Software Foundation.
:
: This library contains things that should be in XQuery in the first place.
:
:)
module "com.marklogic.developer.cq.xquery"
default function namespace = "http://www.w3.org/2003/05/xpath-functions"
declare namespace x = "com.marklogic.developer.cq.xquery"
define variable $x:NBSP as xs:string { codepoints-to-string(160) }
define variable $x:NL as xs:string { codepoints-to-string(10) }
(:~ for 1.0-ml modules - why did the committee remove useful functions? :)
define function x:string-pad(
$padString as xs:string?,
$padCount as xs:integer)
as xs:string?
{
(: for 1.0-ml modules - why did the committee remove useful functions? :)
string-pad($padString, $padCount)
}
(:~ get the epoch seconds :)
define function x:get-epoch-seconds($dt as xs:dateTime)
as xs:unsignedLong
{
xs:unsignedLong(
($dt - xs:dateTime('1970-01-01T00:00:00Z'))
div xdt:dayTimeDuration('PT1S') )
}
(:~ get the epoch seconds :)
define function x:get-epoch-seconds()
as xs:unsignedLong
{
x:get-epoch-seconds(current-dateTime())
}
(:~ convert epoch seconds to dateTime :)
define function x:epoch-seconds-to-dateTime($v)
as xs:dateTime
{
xs:dateTime("1970-01-01T00:00:00-00:00")
+ xdt:dayTimeDuration(concat("PT", $v, "S"))
}
define function x:duration-to-microseconds($d as xs:dayTimeDuration)
as xs:unsignedLong {
xs:unsignedLong( $d div xdt:dayTimeDuration('PT0.000001S') )
}
define function x:lead-nbsp($v as xs:string, $len as xs:integer)
as xs:string {
x:lead-string($v, $x:NBSP, $len)
}
define function x:lead-space($v as xs:string, $len as xs:integer)
as xs:string {
x:lead-string($v, ' ', $len)
}
define function x:lead-zero($v as xs:string, $len as xs:integer)
as xs:string {
x:lead-string($v, '0', $len)
}
define function x:lead-string(
$v as xs:string, $pad as xs:string, $len as xs:integer)
as xs:string {
concat(x:string-pad($pad, $len - string-length(string($v))), string($v))
}
(: lib-xquery.xqy :)