blob: 2e1afeb6e1612cab14fe742f9b3f8c462b1a912e [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
# Syntax:
# * lines that start with spaces belong to the previous line
# * lines starting with "#" are remarks.
# * lines starting with "select" are queries, followed by expected results and an empty line
# * lines starting with "explain" are followed by expected query plan and an empty line
# * lines starting with "sql1" are run using the sql1 language
# * lines starting with "xpath2sql" are just converted from xpath to sql2
# * all other lines are are committed into the microkernel (line by line)
# * new tests are typically be added on top, after the syntax docs
# * use ascii character only
explain select [jcr:path], [jcr:score], * from [nt:base] as a where lower([test]) <> 'lower'
[nt:base] as [a] /* traverse "*"
where lower([a].[test]) <> 'lower' */
explain select * from [nt:base] where [jcr:uuid] <> '1'
[nt:base] as [nt:base] /* property uuid IS NOT NULL
where [nt:base].[jcr:uuid] <> '1' */
explain select * from [nt:base] as a
left outer join [nt:base] as b on a.x=b.y
where a.y is null and b.z = 1
[nt:base] as [a] /* traverse "*"
where [a].[y] is null */ left outer join [nt:base] as [b] /* traverse "*"
where [b].[z] = 1 */
on [a].[x] = [b].[y]
explain select * from [nt:base] as a
right outer join [nt:base] as b on a.x=b.y
where a.y is null and b.z = 1
[nt:base] as [b] /* traverse "*"
where [b].[z] = 1 */ left outer join [nt:base] as [a] /* traverse "*" */
on [a].[x] = [b].[y]
explain select * from [nt:base] where (p=1 or p=2) and (p=3 or p=4)
[nt:base] as [nt:base] /* traverse "*"
where ([nt:base].[p] in(1, 2))
and ([nt:base].[p] in(3, 4)) */
explain select *
from [nt:base]
where [jcr:uuid] like '%'
[nt:base] as [nt:base] /* property uuid IS NOT NULL
where [nt:base].[jcr:uuid] like '%' */
explain select e.[jcr:path]
from [nt:base] as a
inner join [nt:base] as b on ischildnode(b, a)
inner join [nt:base] as c on ischildnode(c, b)
inner join [nt:base] as d on ischildnode(d, c)
inner join [nt:base] as e on ischildnode(e, d)
where name(a) = 'a'
and isdescendantnode(a, '/')
and name(b) = 'c'
and name(c) = 'd'
and name(d) = 'e'
and (e.[jcr:uuid] = '1' or e.[jcr:uuid] = '2' or e.[jcr:uuid] = '3' or e.[jcr:uuid] = '4')
[nt:base] as [e] /* property uuid IN (1, 2, 3, 4)
where [e].[jcr:uuid] in('1', '2', '3', '4') */
inner join [nt:base] as [d] /* traverse "* && //parent/of/join"
where name([d]) = 'e' */
on ischildnode([e], [d])
inner join [nt:base] as [c] /* traverse "* && //parent/of/join"
where name([c]) = 'd' */
on ischildnode([d], [c])
inner join [nt:base] as [b] /* traverse "* && //parent/of/join"
where name([b]) = 'c' */
on ischildnode([c], [b])
inner join [nt:base] as [a] /* traverse "//* && //parent/of/join"
where (name([a]) = 'a')
and (isdescendantnode([a], [/])) */
on ischildnode([b], [a])
explain select e.[jcr:path]
from [nt:base] as a
inner join [nt:base] as b on ischildnode(b, a)
inner join [nt:base] as c on ischildnode(c, b)
inner join [nt:base] as d on ischildnode(d, c)
inner join [nt:base] as e on ischildnode(e, d)
where name(a) = 'a'
and isdescendantnode(a, '/')
and name(b) = 'c'
and name(c) = 'd'
and name(d) = 'e'
and (e.[jcr:uuid] = '1' or e.[jcr:uuid] = '2' or e.[jcr:uuid] = '3' or e.[jcr:uuid] = '4')
[nt:base] as [e] /* property uuid IN (1, 2, 3, 4)
where [e].[jcr:uuid] in('1', '2', '3', '4') */
inner join [nt:base] as [d] /* traverse "* && //parent/of/join"
where name([d]) = 'e' */
on ischildnode([e], [d])
inner join [nt:base] as [c] /* traverse "* && //parent/of/join"
where name([c]) = 'd' */
on ischildnode([d], [c])
inner join [nt:base] as [b] /* traverse "* && //parent/of/join"
where name([b]) = 'c' */
on ischildnode([c], [b])
inner join [nt:base] as [a] /* traverse "//* && //parent/of/join"
where (name([a]) = 'a')
and (isdescendantnode([a], [/])) */
on ischildnode([b], [a])
explain select excerpt(.)
from [nt:resource]
where contains(*, 'jackrabbit')
[nt:resource] as [nt:resource] /* traverse "*"
where contains([nt:resource].[*], 'jackrabbit') */
explain select excerpt(.)
from [nt:resource]
where contains(*, 'jackrabbit') or contains(*, 'jackrabbit')
[nt:resource] as [nt:resource] /* traverse "*"
where contains([nt:resource].[*], 'jackrabbit') */
explain select excerpt(.)
from [nt:resource]
where (contains(*, 'jackrabbit') or contains(*, 'jackrabbit'))
and x = '1'
[nt:resource] as [nt:resource] /* traverse "*"
where (contains([nt:resource].[*], 'jackrabbit'))
and ([nt:resource].[x] = '1') */
explain select *
from [nt:base]
where [jcr:uuid]=1 or [b]=2
[nt:base] as [nt:base] /* traverse "*"
where ([nt:base].[jcr:uuid] = 1) or ([nt:base].[b] = 2) */
explain select b.[jcr:uuid]
from [nt:base] as a
inner join [nt:base] as b on isdescendantnode(b, a)
where (a.[jcr:uuid] = '1' or a.[jcr:uuid] = '2')
[nt:base] as [a] /* property uuid IN (1, 2)
where [a].[jcr:uuid] in('1', '2') */
inner join [nt:base] as [b] /* traverse "* && //path/from/join//*" */
on isdescendantnode([b], [a])
explain select b.[jcr:uuid]
from [nt:base] as a
inner join [nt:base] as b on isdescendantnode(b, a)
where (a.[jcr:uuid] = '1' or a.[jcr:uuid] = '2')
and b.[jcr:uuid] is not null
[nt:base] as [a] /* property uuid IN (1, 2)
where [a].[jcr:uuid] in('1', '2') */
inner join [nt:base] as [b] /* property uuid IS NOT NULL
where [b].[jcr:uuid] is not null */
on isdescendantnode([b], [a])
explain select *
from [nt:base]
where length([jcr:uuid])=1 or upper([jcr:uuid])='1' or lower([jcr:uuid])='3'
[nt:base] as [nt:base] /* property uuid IS NOT NULL
where ([nt:base].[jcr:uuid] is not null)
and ((length([nt:base].[jcr:uuid]) = 1) or (upper([nt:base].[jcr:uuid]) = '1') or (lower([nt:base].[jcr:uuid]) = '3')) */
explain select *
from [nt:base]
where [jcr:uuid] = '1' or ([jcr:uuid] = '2'
and [b] = '3')
[nt:base] as [nt:base] /* property uuid IN (1, 2)
where ([nt:base].[jcr:uuid] is not null)
and ([nt:base].[jcr:uuid] in('1', '2')) */
explain select *
from [nt:base]
where [jcr:uuid] in('1', '2')
[nt:base] as [nt:base] /* property uuid IN (1, 2)
where [nt:base].[jcr:uuid] in('1', '2') */
explain select *
from [nt:base]
where [jcr:uuid] = '1' or [jcr:uuid] = '2'
[nt:base] as [nt:base] /* property uuid IN (1, 2)
where [nt:base].[jcr:uuid] in('1', '2') */
explain select *
from [nt:base]
where [jcr:uuid] = '123'
[nt:base] as [nt:base] /* property uuid = 123
where [nt:base].[jcr:uuid] = '123' */
explain select *
from [nt:base]
where [jcr:uuid] is not null
[nt:base] as [nt:base] /* property uuid IS NOT NULL
where [nt:base].[jcr:uuid] is not null */
explain select *
from [nt:base] as a
inner join [nt:base] as b on isdescendantnode(b, a)
where a.[jcr:uuid] is not null
and b.[jcr:uuid] is not null
[nt:base] as [a] /* property uuid IS NOT NULL
where [a].[jcr:uuid] is not null */
inner join [nt:base] as [b] /* property uuid IS NOT NULL
where [b].[jcr:uuid] is not null */
on isdescendantnode([b], [a])
explain select *
from [nt:base] as a
inner join [nt:base] as b on isdescendantnode(b, a)
where (a.[jcr:uuid]=1 or a.[jcr:uuid]=2)
and (b.[jcr:uuid]=3 or b.[jcr:uuid]=4)
[nt:base] as [a] /* property uuid IN (1, 2)
where [a].[jcr:uuid] in(1, 2) */
inner join [nt:base] as [b] /* property uuid IN (3, 4)
where [b].[jcr:uuid] in(3, 4) */
on isdescendantnode([b], [a])
explain select *
from [nt:base] as a
inner join [nt:base] as b on isdescendantnode(b, a)
where a.[jcr:uuid] is not null
and b.[x] is not null
[nt:base] as [a] /* property uuid IS NOT NULL
where [a].[jcr:uuid] is not null */
inner join [nt:base] as [b] /* traverse "* && //path/from/join//*"
where [b].[x] is not null */
on isdescendantnode([b], [a])
explain select [rep:excerpt]
from [nt:base]
where [jcr:uuid] is not null
[nt:base] as [nt:base] /* property uuid IS NOT NULL
where [nt:base].[jcr:uuid] is not null */
commit / + "test": { "jcr:uuid": "xyz", "a": { "jcr:uuid": "123" } }
select [jcr:path]
from [nt:base]
where [jcr:uuid] is not null
/test
/test/a
select [jcr:path]
from [nt:base]
where [jcr:uuid] = '123'
union select [jcr:path]
from [nt:base]
where [jcr:uuid] = '312'
union select [jcr:path]
from [nt:base]
where [jcr:uuid] = '231'
/test/a
select [jcr:path]
from [nt:base]
where [jcr:uuid] = '123'
union select [jcr:path]
from [nt:base]
where [jcr:uuid] = '312'
/test/a
select [jcr:path]
from [nt:base]
where [jcr:uuid] = 'xyz'
/test
commit / - "test"