# Filter expressions from the OGC CQL2 Abstract Test Suite (Annex A of OGC 21-065r2).
#
# Copyright (c) Open Geospatial Consortium. Reproduced under the OGC document licence, which
# permits copying and modification provided copyright notices are retained and modifications are
# marked. See https://www.ogc.org/about-ogc/legal-notices-term-and-conditions/
#
# MODIFICATIONS, not approved or adopted by OGC: the `{queryable}` and `{value}` placeholders are
# replaced with properties from tests/cql2testdata.ndjson so the expressions are concrete, and
# AsciiDoc escaping is removed. Expressions whose placeholders have no single sensible substitution
# are omitted.
#
# Format: <conformance class>|<cql2-text expression>
accent-insensitive-comparison|ACCENTI(textfield) = accenti('äöüéáí')
accent-insensitive-comparison|ACCENTI(textfield) <> accenti('aoueai')
accent-insensitive-comparison|ACCENTI(textfield) LIKE accenti('Ä%')
accent-insensitive-comparison|ACCENTI(textfield) LIKE accenti('A%')
accent-insensitive-comparison|ACCENTI(CASEI(textfield)) = accenti(casei('ÄÉ'))
accent-insensitive-comparison|ACCENTI(CASEI(textfield)) = accenti(casei('ae'))
accent-insensitive-comparison|ACCENTI(CASEI(textfield)) LIKE accenti(casei('Ä%'))
accent-insensitive-comparison|ACCENTI(CASEI(textfield)) LIKE accenti(casei('a%'))
advanced-comparison-operators|textfield LIKE '%'
advanced-comparison-operators|textfield like '_%'
advanced-comparison-operators|textfield like ''
advanced-comparison-operators|textfield like '%%'
advanced-comparison-operators|textfield like '\\%\\_'
advanced-comparison-operators|textfield BETWEEN 0 AND 100
advanced-comparison-operators|textfield between 100.0 and 1.0
array-functions|A_CONTAINS(intarrayfield,("foo","bar"))
array-functions|A_CONTAINEDBY(intarrayfield,("foo","bar"))
array-functions|A_EQUALS(intarrayfield,("foo","bar"))
array-functions|A_OVERLAPS(intarrayfield,("foo","bar"))
basic-cql2|intfield = 50
basic-cql2|intfield <> 50
basic-cql2|intfield > 50
basic-cql2|intfield < 50
basic-cql2|intfield >= 50
basic-cql2|intfield <= 50
basic-cql2|intfield IS NULL
basic-cql2|intfield is not null
basic-cql2|true
basic-cql2|false
basic-spatial-functions|S_INTERSECTS(geom,BBOX(-180,-90,180,90))
basic-spatial-functions|S_INTERSECTS(geom,POINT(7.02 49.92))
basic-spatial-functions|S_INTERSECTS(geom,POINT(90 180))
basic-spatial-functions|S_INTERSECTS(geom,BBOX(-180,-90,-90,90)) AND S_INTERSECTS(geom,BBOX(90,-90,180,90))
basic-spatial-functions-plus|S_INTERSECTS(geom,MULTIPOINT(7.02 49.92, 90 180))
basic-spatial-functions-plus|S_INTERSECTS(geom,LINESTRING(-180 -45, 0 -45))
basic-spatial-functions-plus|S_INTERSECTS(geom,MULTILINESTRING((-180 -45, 0 -45), (0 45, 180 45)))
basic-spatial-functions-plus|S_INTERSECTS(geom,POLYGON((-180 -90, -90 -90, -90 90, -180 90, -180 -90), (-120 -50, -100 -50, -100 -40, -120 -40, -120 -50)))
basic-spatial-functions-plus|S_INTERSECTS(geom,MULTIPOLYGON(((-180 -90, -90 -90, -90 90, -180 90, -180 -90), (-120 -50, -100 -50, -100 -40, -120 -40, -120 -50)),((0 0, 10 0, 10 10, 0 10, 0 0))))
basic-spatial-functions-plus|S_INTERSECTS(geom,GEOMETRYCOLLECTION(POINT(7.02 49.92), POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))))
case-insensitive-comparison|CASEI(textfield) = casei('foo')
case-insensitive-comparison|CASEI(textfield) <> casei('FOO')
case-insensitive-comparison|CASEI(textfield) LIKE casei('foo%')
case-insensitive-comparison|CASEI(textfield) LIKE casei('FOO%')
property-property|floatfield = intfield
property-property|floatfield <> intfield
property-property|floatfield > intfield
property-property|floatfield < intfield
property-property|floatfield >= intfield
property-property|floatfield <= intfield
property-property|intfield = intfield
property-property|intfield <> intfield
property-property|intfield > intfield
property-property|intfield < intfield
property-property|intfield >= intfield
property-property|intfield <= intfield
property-property|floatfield = floatfield
property-property|floatfield <> floatfield
property-property|floatfield > floatfield
property-property|floatfield < floatfield
property-property|floatfield >= floatfield
property-property|floatfield <= floatfield
property-property|true
spatial-functions|S_INTERSECTS(geom,BBOX(-180,-90,180,90))
spatial-functions|S_INTERSECTS(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_INTERSECTS(geom,LINESTRING(7 50, 10 51))
spatial-functions|S_INTERSECTS(geom,POINT(7.02 49.92))
spatial-functions|S_INTERSECTS(geom,POINT(90 180))
spatial-functions|S_DISJOINT(geom,BBOX(-180,-90,180,90))
spatial-functions|S_DISJOINT(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_DISJOINT(geom,LINESTRING(7 50,10 51))
spatial-functions|S_DISJOINT(geom,POINT(7.02 49.92))
spatial-functions|S_DISJOINT(geom,POINT(90 180))
spatial-functions|S_EQUALS(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_EQUALS(geom,LINESTRING(7 50,10 51))
spatial-functions|S_EQUALS(geom,POINT(7.02 49.92))
spatial-functions|S_TOUCHES(geom,BBOX(-180,-90,180,90))
spatial-functions|S_TOUCHES(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_TOUCHES(geom,LINESTRING(7 50,10 51))
spatial-functions|S_CROSSES(geom,BBOX(-180,-90,180,90))
spatial-functions|S_CROSSES(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_CROSSES(geom,LINESTRING(7 50,10 51))
spatial-functions|S_WITHIN(geom,BBOX(-180,-90,180,90))
spatial-functions|S_WITHIN(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_WITHIN(geom,LINESTRING(7 50,10 51))
spatial-functions|S_WITHIN(geom,MULTIPOINT(7 50,10 51))
spatial-functions|S_CONTAINS(geom,BBOX(-180,-90,180,90))
spatial-functions|S_CONTAINS(geom,POLYGON((-180 -90,180 -90,180 90,-180 90,-180 -90)))
spatial-functions|S_CONTAINS(geom,LINESTRING(7 50,10 51))
spatial-functions|S_CONTAINS(geom,MULTIPOINT(7 50,10 51))
temporal-functions|T_AFTER(ts_start,TIMESTAMP('2022-04-24T07:59:57Z'))
temporal-functions|T_AFTER(ts_start,INTERVAL('2021-01-01T00:00:00Z','2021-12-31T23:59:59Z'))
temporal-functions|T_BEFORE(ts_start,TIMESTAMP('2022-04-24T07:59:57Z'))
temporal-functions|T_BEFORE(ts_start,INTERVAL('2021-01-01T00:00:00Z','2021-12-31T23:59:59Z'))
temporal-functions|T_DISJOINT(ts_start,TIMESTAMP('2022-04-24T07:59:57Z'))
temporal-functions|T_DISJOINT(ts_start,INTERVAL('2021-01-01T00:00:00Z','2021-12-31T23:59:59Z'))
temporal-functions|T_EQUALS(ts_start,TIMESTAMP('2022-04-24T07:59:57Z'))
temporal-functions|T_EQUALS(ts_start,INTERVAL('2021-01-01T00:00:00Z','2021-12-31T23:59:59Z'))
temporal-functions|T_INTERSECTS(ts_start,TIMESTAMP('2022-04-24T07:59:57Z'))
temporal-functions|T_INTERSECTS(ts_start,INTERVAL('2021-01-01T00:00:00Z','2021-12-31T23:59:59Z'))
temporal-functions|T_AFTER(ts_start,DATE('2022-04-24'))
temporal-functions|T_AFTER(ts_start,INTERVAL('2021-01-01','2021-12-31'))
temporal-functions|T_BEFORE(ts_start,DATE('2022-04-24'))
temporal-functions|T_BEFORE(ts_start,INTERVAL('2021-01-01','2021-12-31'))
temporal-functions|T_DISJOINT(ts_start,DATE('2022-04-24'))
temporal-functions|T_DISJOINT(ts_start,INTERVAL('2021-01-01','2021-12-31'))
temporal-functions|T_EQUALS(ts_start,DATE('2022-04-24'))
temporal-functions|T_EQUALS(ts_start,INTERVAL('2021-01-01','2021-12-31'))
temporal-functions|T_INTERSECTS(ts_start,DATE('2022-04-24'))
temporal-functions|T_INTERSECTS(ts_start,INTERVAL('2021-01-01','2021-12-31'))
