\set VERBOSITY terse \pset null NULL --SET search_path TO sparql, pg_catalog; SELECT sparql.rdf_fdw_arguments_compatible('"abc"','"b"'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"','"b"^^'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"^^','"b"'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"^^','"b"^^'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"@en','"b"'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"@en','"b"^^xsd:string'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"@en','"b"@en'); rdf_fdw_arguments_compatible ------------------------------ t (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"@fr','"b"@ja'); rdf_fdw_arguments_compatible ------------------------------ f (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"','"b"@ja'); rdf_fdw_arguments_compatible ------------------------------ f (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"','"b"@en'); rdf_fdw_arguments_compatible ------------------------------ f (1 row) SELECT sparql.rdf_fdw_arguments_compatible('"abc"^^xsd:string','"b"@en'); rdf_fdw_arguments_compatible ------------------------------ f (1 row) /* LEX */ SELECT sparql.lex('"foo"'); lex ----- foo (1 row) SELECT sparql.lex('foo'); lex ----- foo (1 row) SELECT sparql.lex('"foo"@en'); lex ----- foo (1 row) SELECT sparql.lex('"foo"^^xsd:string'); lex ----- foo (1 row) SELECT sparql.lex(''); lex ----- (1 row) SELECT sparql.lex('""'); lex ----- (1 row) SELECT sparql.lex('"\""'); lex ----- \" (1 row) SELECT sparql.lex(NULL); lex ------ NULL (1 row) /* STRDT */ SELECT sparql.strdt(NULL, 'http://www.w3.org/2001/XMLSchema#string'); strdt ------- NULL (1 row) SELECT sparql.strdt('foo', NULL); strdt ------- NULL (1 row) SELECT sparql.strdt('', ''); strdt ------------------------------- ""^^ (1 row) SELECT sparql.strdt('foo', ''); ERROR: datatype IRI cannot be empty SELECT sparql.strdt('foo', ' '); ERROR: datatype IRI cannot contain whitespaces SELECT sparql.strdt('foo', ' xsd:boolean '); ERROR: datatype IRI cannot contain whitespaces SELECT sparql.strdt('foo', 'http://www.w3.org/2001/XMLSchema#string'); strdt -------------------------------------------------- "foo"^^ (1 row) SELECT sparql.strdt('f"oo', 'http://example.org/type'); strdt ------------------------------------ "f\"oo"^^ (1 row) SELECT sparql.strdt('"foo"@en', 'http://www.w3.org/2001/XMLSchema#int'); strdt ----------------------------------------------- "foo"^^ (1 row) SELECT sparql.strdt('"f\"oo"^^xsd:string', 'http://example.org/newtype'); strdt --------------------------------------- "f\"oo"^^ (1 row) SELECT sparql.strdt('foo', ''); strdt ---------------------------------- "foo"^^ (1 row) SELECT sparql.strdt('foo', 'foo:bar'); strdt ------------------ "foo"^^ (1 row) SELECT sparql.strdt('foo', 'xsd:string'); strdt -------------------------------------------------- "foo"^^ (1 row) SELECT sparql.strdt('foo', ''); strdt ------------------- "foo"^^ (1 row) /* STRLANG */ SELECT sparql.strlang('foo',NULL); strlang --------- NULL (1 row) SELECT sparql.strlang(NULL,'de'); strlang --------- NULL (1 row) SELECT sparql.strlang('','es'); strlang --------- ""@es (1 row) SELECT sparql.strlang(' ','en'); strlang --------- " "@en (1 row) SELECT sparql.strlang('foo','pt'); strlang ---------- "foo"@pt (1 row) SELECT sparql.strlang('"foo"@en','fr'); strlang ---------- "foo"@fr (1 row) SELECT sparql.strlang('"foo"','it'); strlang ---------- "foo"@it (1 row) SELECT sparql.strlang('"foo"^^xsd:string','pt'); strlang ---------- "foo"@pt (1 row) SELECT sparql.strlang('"foo"^^','es'); strlang ---------- "foo"@es (1 row) SELECT sparql.strlang(sparql.strlang('"foo"^^','es'),'de'); strlang ---------- "foo"@de (1 row) SELECT sparql.strlang(sparql.strlang('f"o"o','en'),'de'); strlang -------------- "f\"o\"o"@de (1 row) SELECT sparql.strlang(sparql.strlang('x\"y','pl'),'it'); strlang ----------- "x\"y"@it (1 row) SELECT sparql.strlang('foo', 'xyz'); strlang ----------- "foo"@xyz (1 row) /* STR */ SELECT sparql.str('foo'); str ------- "foo" (1 row) SELECT sparql.str('"foo"'); str ------- "foo" (1 row) SELECT sparql.str('"foo"@en'); str ------- "foo" (1 row) SELECT sparql.str('"foo"^^xsd:string'); str ------- "foo" (1 row) SELECT sparql.str('f"oo'); str --------- "f\"oo" (1 row) SELECT sparql.str('"f\"oo"'); str --------- "f\"oo" (1 row) SELECT sparql.str(''); str -------------------------- "http://example.org/foo" (1 row) SELECT sparql.str(''); str ----- "" (1 row) SELECT sparql.str(' '); str ----- " " (1 row) SELECT sparql.str(NULL); str ------ NULL (1 row) /* LANG */ SELECT sparql.lang('"foo"@en'); lang ------ en (1 row) SELECT sparql.lang(sparql.strlang('foo','fr')); lang ------ fr (1 row) SELECT sparql.lang(sparql.strdt('foo','xsd:string')); lang ------ (1 row) SELECT sparql.lang('"f"oo"@it'); lang ------ (1 row) SELECT sparql.lang(''); lang ------ (1 row) SELECT sparql.lang(' '); lang ------ (1 row) SELECT sparql.lang(NULL); lang ------ NULL (1 row) SELECT sparql.lang(''); lang ------ (1 row) /* DATATYPE */ SELECT sparql.datatype('"foo"^^xsd:string'); datatype ------------------------------------------- (1 row) SELECT sparql.datatype('"foo"^^'); datatype ------------------------------------------- (1 row) SELECT sparql.datatype(sparql.strdt('foo','xsd:string')); datatype ------------------------------------------- (1 row) SELECT sparql.datatype('"42"^^'); datatype ---------------------------------------- (1 row) SELECT sparql.datatype(sparql.strdt('foo','bar:xyz')); datatype ----------- (1 row) SELECT sparql.datatype(''); datatype ---------- NULL (1 row) SELECT sparql.datatype('_:bnode42'); datatype ---------- NULL (1 row) SELECT sparql.datatype('"foo"@es'); datatype --------------------------------------------------------- (1 row) SELECT sparql.datatype('"foo"@es'::name); datatype --------------------------------------------------------- (1 row) SELECT sparql.datatype(''); datatype ------------------------------------------- (1 row) SELECT sparql.datatype(''::name); datatype ------------------------------------------- (1 row) SELECT sparql.datatype(' '); datatype ------------------------------------------- (1 row) SELECT sparql.datatype('"foo"^'); datatype ------------------------------------------- (1 row) SELECT sparql.datatype('"foo"^^xsd:string>'); datatype ------------------------------------------- (1 row) SELECT sparql.datatype('"foo"^^ (1 row) SELECT sparql.datatype(cast('2018-05-01' AS date)); datatype ----------------------------------------- (1 row) SELECT sparql.datatype(cast('2018-05-01 11:30:00' AS timestamp without time zone)); datatype --------------------------------------------- (1 row) SELECT sparql.datatype(cast('2018-05-01 11:30:00' AS timestamp with time zone)); datatype --------------------------------------------- (1 row) SELECT sparql.datatype(cast('11:30:00' AS time)); datatype ----------------------------------------- (1 row) SELECT sparql.datatype(42); datatype -------------------------------------------- (1 row) SELECT sparql.datatype(42.73); datatype -------------------------------------------- (1 row) SELECT sparql.datatype(cast(42 AS smallint)); datatype -------------------------------------------- (1 row) SELECT sparql.datatype(cast(42 AS bigint)); datatype -------------------------------------------- (1 row) SELECT sparql.datatype(cast(42.73 AS double precision)); datatype ------------------------------------------- (1 row) SELECT sparql.datatype(cast(42.73 AS numeric)); datatype -------------------------------------------- (1 row) SELECT sparql.datatype(cast(42.73 AS real)); datatype ------------------------------------------ (1 row) SELECT sparql.datatype(true); datatype -------------------------------------------- (1 row) SELECT sparql.datatype(NULL); datatype ---------- NULL (1 row) /* ENCODE_FOR_URI */ SELECT sparql.encode_for_uri('"Los Angeles"'); encode_for_uri ----------------- "Los%20Angeles" (1 row) SELECT sparql.encode_for_uri('"Los Angeles"@en'); encode_for_uri ----------------- "Los%20Angeles" (1 row) SELECT sparql.encode_for_uri('"Los Angeles"^^xsd:string'); encode_for_uri ----------------- "Los%20Angeles" (1 row) SELECT sparql.encode_for_uri('"Los Angeles"^^'); encode_for_uri ----------------- "Los%20Angeles" (1 row) SELECT sparql.encode_for_uri('"Los Angeles"^^'); encode_for_uri ----------------- "Los%20Angeles" (1 row) SELECT sparql.encode_for_uri('foo! *''();:@&=+$,/?#[]'); encode_for_uri ---------------------------------------------------------------- "foo%21%20%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D" (1 row) SELECT sparql.encode_for_uri('foo'); encode_for_uri ---------------- "foo" (1 row) SELECT sparql.encode_for_uri(''); encode_for_uri ---------------- "" (1 row) SELECT sparql.encode_for_uri(NULL); encode_for_uri ---------------- NULL (1 row) /* IRI / URI */ SELECT sparql.iri('"http://example/"'), sparql.iri('http://example/'), sparql.iri(''); iri | iri | iri -------------------+-------------------+------------------- | | (1 row) SELECT sparql.iri('"mailto:foo@example.com"'), sparql.iri('mailto:foo@example.com'), sparql.iri(''); iri | iri | iri --------------------------+--------------------------+-------------------------- | | (1 row) SELECT sparql.iri('"urn:uuid:123e4567-e89b-12d3-a456-426614174000"'), sparql.iri('urn:uuid:123e4567-e89b-12d3-a456-426614174000'), sparql.iri(''); iri | iri | iri -------------------------------------------------+-------------------------------------------------+------------------------------------------------- | | (1 row) SELECT sparql.iri('"file://etc/passwd"'), sparql.iri('file://etc/passwd'), sparql.iri(''); iri | iri | iri ---------------------+---------------------+--------------------- | | (1 row) SELECT sparql.iri('"foo:bar"'), sparql.iri('foo:bar'), sparql.iri(''); iri | iri | iri -----------+-----------+----------- | | (1 row) SELECT sparql.iri('"foo"'), sparql.iri('foo'), sparql.iri(''); iri | iri | iri -------+-------+------- | | (1 row) SELECT sparql.iri('"a:b:c"'), sparql.iri('a:b:c'), sparql.iri(''); iri | iri | iri ---------+---------+--------- | | (1 row) SELECT sparql.iri('"http:/not-a-scheme"'), sparql.iri('http:/not-a-scheme'), sparql.iri(''); iri | iri | iri ----------------------+----------------------+---------------------- | | (1 row) SELECT sparql.iri('"foo"@en'); iri ------- (1 row) SELECT sparql.iri('"42"^^'); iri ------ <42> (1 row) /* isIRI / isURI */ SELECT sparql.isIRI(''); isiri ------- t (1 row) SELECT sparql.isIRI(''); isiri ------- t (1 row) SELECT sparql.isIRI('http://example/'); isiri ------- f (1 row) SELECT sparql.isIRI('"http://example/"'); isiri ------- f (1 row) SELECT sparql.isIRI('path'); isiri ------- f (1 row) SELECT sparql.isIRI('"path"'); isiri ------- f (1 row) SELECT sparql.isIRI('"foo"^^xsd:string'); isiri ------- f (1 row) SELECT sparql.isIRI('"foo"^^'); isiri ------- f (1 row) SELECT sparql.isIRI(sparql.strdt('foo', 'xsd:string')); isiri ------- f (1 row) SELECT sparql.isIRI('"foo"@en'); isiri ------- f (1 row) SELECT sparql.isIRI(''); isiri ------- f (1 row) SELECT sparql.isIRI(NULL); isiri ------- f (1 row) SELECT sparql.isIRI(''); isuri ------- t (1 row) SELECT sparql.isURI('path'); isuri ------- f (1 row) /* STRSTARTS */ SELECT sparql.strstarts('"foobar"','"foo"'), sparql.strstarts('foobar','foo'); strstarts | strstarts -----------+----------- t | t (1 row) SELECT sparql.strstarts('"foobar"@en','"foo"@en'); strstarts ----------- t (1 row) SELECT sparql.strstarts('"foobar"^^','"foo"^^'); strstarts ----------- t (1 row) SELECT sparql.strstarts('"foobar"^^','"foo"'); strstarts ----------- t (1 row) SELECT sparql.strstarts('"foobar"','"foo"^^'); strstarts ----------- t (1 row) SELECT sparql.strstarts('"foobar"@en','"foo"'); strstarts ----------- t (1 row) SELECT sparql.strstarts('"foobar"@en','"foo"^^'); strstarts ----------- t (1 row) SELECT sparql.strstarts('foobar',''); strstarts ----------- t (1 row) SELECT sparql.strstarts('','xyz'); strstarts ----------- f (1 row) SELECT sparql.strstarts('foobar',NULL); strstarts ----------- NULL (1 row) SELECT sparql.strstarts(NULL,'xyz'); strstarts ----------- NULL (1 row) SELECT sparql.strstarts(NULL, NULL); strstarts ----------- NULL (1 row) SELECT sparql.strstarts(sparql.strlang('foobar','en'),'"foo"@fr'); strstarts ----------- NULL (1 row) SELECT sparql.strstarts(sparql.strlang('foobar','en'), sparql.strlang('foo','fr')); strstarts ----------- NULL (1 row) SELECT sparql.strstarts(sparql.strlang('foobar','en'), '"foo"^^'); strstarts ----------- t (1 row) SELECT sparql.strstarts(sparql.strlang('foobar','en'), sparql.strdt('foo','xsd:string')); strstarts ----------- t (1 row) SELECT sparql.strstarts('foobar', sparql.strdt('foo','xsd:string')); strstarts ----------- t (1 row) SELECT sparql.strstarts('foobar','"foo"^^'); strstarts ----------- t (1 row) SELECT sparql.strstarts('foobar', sparql.strlang('foo','it')); strstarts ----------- NULL (1 row) SELECT sparql.strstarts('foobar','"foo"@de'); strstarts ----------- NULL (1 row) /* STRENDS */ SELECT sparql.strends('"foobar"','"bar"'), sparql.strends('foobar','bar'); strends | strends ---------+--------- t | t (1 row) SELECT sparql.strends('"foobar"@en','"bar"@en'); strends --------- t (1 row) SELECT sparql.strends('"foobar"^^xsd:string', '"bar"^^xsd:string'); strends --------- t (1 row) SELECT sparql.strends('"foobar"^^xsd:string', '"bar"'); strends --------- t (1 row) SELECT sparql.strends('"foobar"', '"bar"^^xsd:string'); strends --------- t (1 row) SELECT sparql.strends('"foobar"@en', '"bar"'); strends --------- t (1 row) SELECT sparql.strends('"foobar"@en', '"bar"^^xsd:string'); strends --------- t (1 row) SELECT sparql.strends('foobar','xyz'); strends --------- f (1 row) SELECT sparql.strends('foobar',''); strends --------- t (1 row) SELECT sparql.strends('','xyz'); strends --------- f (1 row) SELECT sparql.strends('foobar',NULL); strends --------- NULL (1 row) SELECT sparql.strends(NULL,'xyz'); strends --------- NULL (1 row) SELECT sparql.strends(NULL, NULL); strends --------- NULL (1 row) SELECT sparql.strends('"foobar"@en','"bar"@fr'); strends --------- NULL (1 row) SELECT sparql.strends(sparql.strlang('foobar','en'),'"bar"@fr'); strends --------- NULL (1 row) SELECT sparql.strends(sparql.strlang('foobar','en'), '"bar"^^'); strends --------- t (1 row) SELECT sparql.strends(sparql.strlang('foobar','en'), sparql.strdt('bar','xsd:string')); strends --------- t (1 row) SELECT sparql.strends('foobar', sparql.strdt('bar','xsd:string')); strends --------- t (1 row) SELECT sparql.strends('foobar','"bar"^^'); strends --------- t (1 row) SELECT sparql.strends('foobar','"bar"@de'); strends --------- NULL (1 row) /* STRBEFORE */ SELECT sparql.strbefore('abc','b'), sparql.strbefore('"abc"','"b"'); strbefore | strbefore -----------+----------- "a" | "a" (1 row) SELECT sparql.strbefore('"abc"@en','bc'); strbefore ----------- "a"@en (1 row) SELECT sparql.strbefore('"abc"@en','"b"@cy'); strbefore ----------- NULL (1 row) SELECT sparql.strbefore('"abc"^^xsd:string',''), sparql.strbefore('"abc"^^xsd:string','""'); strbefore | strbefore -----------------------------------------------+----------------------------------------------- ""^^ | ""^^ (1 row) SELECT sparql.strbefore('abc','xyz'), sparql.strbefore('"abc"','"xyz"'); strbefore | strbefore -----------+----------- "" | "" (1 row) SELECT sparql.strbefore('"abc"@en', '"z"@en'); strbefore ----------- "" (1 row) SELECT sparql.strbefore('"abc"@en', '"z"'), sparql.strbefore('"abc"@en', 'z'); strbefore | strbefore -----------+----------- "" | "" (1 row) SELECT sparql.strbefore('"abc"@en', '""@en'); strbefore ----------- ""@en (1 row) SELECT sparql.strbefore('"abc"@en', '""'); strbefore ----------- ""@en (1 row) SELECT sparql.strbefore('"abc"^^','c'); strbefore ------------------------------------------------- "ab"^^ (1 row) SELECT sparql.strbefore('"abc"^^','"c"^^'); strbefore ------------------------------------------------- "ab"^^ (1 row) SELECT sparql.strbefore('"abc"^^','"c"^^xsd:string'); strbefore ------------------------------------------------- "ab"^^ (1 row) SELECT sparql.strbefore('"abc"^^http://www.w3.org/2001/XMLSchema#string','"c"^^'); strbefore ------------------------------------------------- "ab"^^ (1 row) SELECT sparql.strbefore('"abc"^^xsd:string','"c"^^'); strbefore ------------------------------------------------- "ab"^^ (1 row) SELECT sparql.strbefore('"abc"@fr','"b"^^xsd:string'); strbefore ----------- "a"@fr (1 row) SELECT sparql.strbefore('"abc"^^','"b"@de'); strbefore ----------- NULL (1 row) SELECT sparql.strbefore('"abc"@en','"b"^^'); strbefore ----------- NULL (1 row) SELECT sparql.strbefore('abc', NULL); strbefore ----------- NULL (1 row) SELECT sparql.strbefore(NULL, 'xyz'); strbefore ----------- NULL (1 row) SELECT sparql.strbefore(NULL, NULL); strbefore ----------- NULL (1 row) SELECT sparql.strbefore('abc', ''); strbefore ----------- "" (1 row) SELECT sparql.strbefore('"abc"', ''); strbefore ----------- "" (1 row) SELECT sparql.strbefore('', 'xyz'); strbefore ----------- "" (1 row) SELECT sparql.strbefore('', ''); strbefore ----------- "" (1 row) SELECT sparql.strbefore('""','""'); strbefore ----------- "" (1 row) /* STRAFTER */ SELECT sparql.strafter('"abc"','"b"'); strafter ---------- "c" (1 row) SELECT sparql.strafter('"abc"@en','ab'); strafter ---------- "c"@en (1 row) SELECT sparql.strafter('"abc"@en','"b"@cy'); strafter ---------- NULL (1 row) SELECT sparql.strafter('"abc"^^xsd:string','""'); strafter -------------------------------------------------- "abc"^^ (1 row) SELECT sparql.strafter('"abc"^^','b'); strafter ------------------------------------------------ "c"^^ (1 row) SELECT sparql.strafter('"abc"^^','"b"^^'); strafter ------------------------------------------------ "c"^^ (1 row) SELECT sparql.strafter('"abc"^^','"b"^^xsd:string'); strafter ------------------------------------------------ "c"^^ (1 row) SELECT sparql.strafter('"abc"^^http://www.w3.org/2001/XMLSchema#string','"b"^^'); strafter ------------------------------------------------ "c"^^ (1 row) SELECT sparql.strafter('"abc"^^xsd:string','"b"^^'); strafter ------------------------------------------------ "c"^^ (1 row) SELECT sparql.strafter('"abc"@fr','"b"^^xsd:string'); strafter ---------- "c"@fr (1 row) SELECT sparql.strafter('"abc"','"xyz"'); strafter ---------- "" (1 row) SELECT sparql.strafter('"abc"@en', '"z"@en'); strafter ---------- "" (1 row) SELECT sparql.strafter('"abc"@en', '"z"'); strafter ---------- "" (1 row) SELECT sparql.strafter('"abc"@en', '""@en'); strafter ---------- "abc"@en (1 row) SELECT sparql.strafter('"abc"@en', '""'); strafter ---------- "abc"@en (1 row) SELECT sparql.strafter('abc','b'); strafter ---------- "c" (1 row) SELECT sparql.strafter('abc','xyz'); strafter ---------- "" (1 row) SELECT sparql.strafter('abc', NULL); strafter ---------- NULL (1 row) SELECT sparql.strafter(NULL, 'xyz'); strafter ---------- NULL (1 row) SELECT sparql.strafter(NULL, NULL); strafter ---------- NULL (1 row) SELECT sparql.strafter('abc', ''); strafter ---------- "abc" (1 row) SELECT sparql.strafter('', 'xyz'); strafter ---------- "" (1 row) SELECT sparql.strafter('', ''); strafter ---------- "" (1 row) /* CONTAINS */ SELECT sparql.contains('"foobar"', '"bar"'), sparql.contains('foobar', 'bar'); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('"foobar"@en', '"foo"@en'), sparql.contains(sparql.strlang('"foobar"','en'), sparql.strlang('foo','en')); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('"foobar"^^xsd:string', '"bar"^^xsd:string'), sparql.contains(sparql.strdt('"foobar"','xsd:string'), sparql.strdt('"bar"','xsd:string')); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('"foobar"^^xsd:string', '"foo"'), sparql.contains('"foobar"^^xsd:string', 'foo'); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('"foobar"', '"bar"^^xsd:string'), sparql.contains('foobar', '"bar"^^xsd:string'); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('"foobar"@en', '"foo"'), sparql.contains('"foobar"@en', 'foo'); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('"foobar"@en', '"bar"^^xsd:string'); contains ---------- t (1 row) SELECT sparql.contains('"foobar"', '""'), sparql.contains('foobar', ''); contains | contains ----------+---------- t | t (1 row) SELECT sparql.contains('""', '"foo"'), sparql.contains('', 'foo'); contains | contains ----------+---------- f | f (1 row) SELECT sparql.contains('"foobar"', NULL), sparql.contains('foobar', NULL); contains | contains ----------+---------- NULL | NULL (1 row) SELECT sparql.contains(NULL, '"foo"'), sparql.contains(NULL, 'foo'); contains | contains ----------+---------- NULL | NULL (1 row) SELECT sparql.contains(NULL, NULL); contains ---------- NULL (1 row) SELECT sparql.contains('"foobar"@en', '"foo"@fr'); contains ---------- NULL (1 row) SELECT sparql.contains('"123"^^', '"2"'); contains ---------- t (1 row) SELECT sparql.contains('"abc"', '"def"@en'); contains ---------- f (1 row) /* LANGMATCHES */ SELECT sparql.langmatches(sparql.lang('"hello"@en'), '"en"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@EN-US'), '"en-us"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@fr'), '"FR"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en'), '"*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@fr-ca'), '"*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en-us'), '"en-*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en'), '"en-*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@fr-ca'), '"fr-*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@fr'), '"en"'); langmatches ------------- f (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en-us'), '"fr-*"'); langmatches ------------- f (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en'), '"en-us-*"'); langmatches ------------- f (1 row) SELECT sparql.langmatches(sparql.lang('"hello"'), '"en"'); langmatches ------------- f (1 row) SELECT sparql.langmatches(sparql.lang('"hello"'), '"*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('""@en'), '"en"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('""'), '"*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"^^xsd:string'), '"en"'); langmatches ------------- f (1 row) SELECT sparql.langmatches(sparql.lang('"hello"^^xsd:string'), '"*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en'), '"en"^^xsd:string'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en'), '"*"^^xsd:string'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en-us'), '"EN-*"^^xsd:string'); langmatches ------------- t (1 row) SELECT sparql.langmatches('', '"en"'); langmatches ------------- f (1 row) SELECT sparql.langmatches('en', '"en"'); langmatches ------------- t (1 row) SELECT sparql.langmatches(sparql.lang('"hello"@en'), ''); langmatches ------------- f (1 row) SELECT sparql.langmatches('', '"*"'); langmatches ------------- t (1 row) SELECT sparql.langmatches('en-US', 'en'); langmatches ------------- t (1 row) /* ISBLANK */ SELECT sparql.isblank('_:b1'); isblank --------- t (1 row) SELECT sparql.isblank('_:node123'); isblank --------- t (1 row) SELECT sparql.isblank(''); isblank --------- f (1 row) SELECT sparql.isblank('"hello"'); isblank --------- f (1 row) SELECT sparql.isblank('"hello"@en'); isblank --------- f (1 row) SELECT sparql.isblank('"42"^^xsd:integer'); isblank --------- f (1 row) SELECT sparql.isblank('_notblank'); isblank --------- f (1 row) SELECT sparql.isblank(''); isblank --------- f (1 row) SELECT sparql.isblank('b1'); isblank --------- f (1 row) SELECT sparql.isblank('_:'); isblank --------- f (1 row) SELECT sparql.isblank('_'); isblank --------- f (1 row) SELECT sparql.isblank(' '); isblank --------- f (1 row) SELECT sparql.isblank(''); isblank --------- f (1 row) SELECT sparql.isblank(NULL); isblank --------- NULL (1 row) /* ISNUMERIC */ SELECT sparql.isnumeric('12'); isnumeric ----------- f (1 row) SELECT sparql.isnumeric('"12"'); isnumeric ----------- f (1 row) SELECT sparql.isnumeric('"12"^^xsd:nonNegativeInteger'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"1200"^^xsd:byte'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric(''); isnumeric ----------- f (1 row) SELECT sparql.isnumeric('"12"^^xsd:integer'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:positiveInteger'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:negativeInteger'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:nonPositiveInteger'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:long'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:int'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:short'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:unsignedLong'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:unsignedInt'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:unsignedShort'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:unsignedByte'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:double'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:float'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric('"12"^^xsd:decimal'); isnumeric ----------- t (1 row) SELECT sparql.isnumeric(''); isnumeric ----------- f (1 row) SELECT sparql.isnumeric(' '); isnumeric ----------- f (1 row) SELECT sparql.isnumeric('""'); isnumeric ----------- f (1 row) SELECT sparql.isnumeric('" "'); isnumeric ----------- f (1 row) SELECT sparql.isnumeric(NULL); isnumeric ----------- f (1 row) /* ISLITERAL */ SELECT sparql.isliteral('"hello"'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"123"'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"12"^^xsd:integer'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"12"^^xsd:nonNegativeInteger'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"12.34"^^xsd:double'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"true"^^xsd:boolean'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"abc"^^'); -- true isliteral ----------- t (1 row) SELECT sparql.isliteral('"hello"@en'); isliteral ----------- t (1 row) SELECT sparql.isliteral('"bonjour"@fr'); isliteral ----------- t (1 row) SELECT sparql.isliteral('12'); isliteral ----------- t (1 row) SELECT sparql.isliteral(''); isliteral ----------- f (1 row) SELECT sparql.isliteral('_:bnode'); isliteral ----------- f (1 row) SELECT sparql.isliteral(''); isliteral ----------- t (1 row) SELECT sparql.isliteral('" "'); isliteral ----------- t (1 row) SELECT sparql.isliteral('""'); isliteral ----------- t (1 row) SELECT sparql.isliteral(NULL); isliteral ----------- f (1 row) /* BNODE */ SELECT sparql.isblank(sparql.bnode()); isblank --------- t (1 row) SELECT sparql.bnode('xyz'); bnode ------- _:xyz (1 row) SELECT sparql.bnode('xyz'); bnode ------- _:xyz (1 row) SELECT sparql.bnode('"xyz"'); bnode ------- _:xyz (1 row) SELECT sparql.bnode('"xyz"@en'); bnode ------- _:xyz (1 row) SELECT sparql.bnode('"xyz"^^xsd:string'); bnode ------- _:xyz (1 row) SELECT sparql.bnode('hello world'); bnode --------------- _:hello_world (1 row) SELECT sparql.bnode('123!'); bnode -------- _:123_ (1 row) SELECT sparql.bnode(''); bnode ------- NULL (1 row) SELECT sparql.bnode('_:bnode'); bnode ------- NULL (1 row) SELECT sparql.bnode(''); bnode ------- NULL (1 row) SELECT sparql.bnode(NULL); bnode ------- NULL (1 row) /* UUID (not pushable) */ SELECT sparql.uuid()::text ~ '^$'; ?column? ---------- t (1 row) /* STRUUID() (not pushable) */ SELECT sparql.struuid()::text ~ '^"[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"$' AS struuid_format; struuid_format ---------------- t (1 row) /* LCASE */ SELECT sparql.lcase('BAR'); lcase ------- "bar" (1 row) SELECT sparql.lcase('"BAR"'); lcase ------- "bar" (1 row) SELECT sparql.lcase('"BAR"@en'), sparql.lcase(sparql.strlang('BAR','en')); lcase | lcase ----------+---------- "bar"@en | "bar"@en (1 row) SELECT sparql.lcase('"BAR"^^xsd:string'), sparql.lcase(sparql.strdt('BAR','xsd:string')); lcase | lcase --------------------------------------------------+-------------------------------------------------- "bar"^^ | "bar"^^ (1 row) SELECT sparql.lcase(''); ERROR: LCASE does not allow IRIs: SELECT sparql.lcase('_:xyz'); ERROR: LCASE does not allow blank nodes: _:xyz SELECT sparql.lcase(sparql.bnode('foo')); ERROR: LCASE does not allow blank nodes: _:foo SELECT sparql.lcase('123'); lcase ------- "123" (1 row) SELECT sparql.lcase('"123"'); lcase ------- "123" (1 row) SELECT sparql.lcase('"123"^^xsd:integer'); ERROR: LCASE does not allow non-string literals: SELECT sparql.lcase('"1990-10-03"^^xsd:date'); ERROR: LCASE does not allow non-string literals: SELECT sparql.lcase('"!§$%&/()?ß}{}[]°^|<>*"'); lcase ------------------------- "!§$%&/()?ß}{}[]°^|<>*" (1 row) SELECT sparql.lcase(NULL); lcase ------- NULL (1 row) SELECT sparql.lcase(''); lcase ------- "" (1 row) SELECT sparql.lcase('""'); lcase ------- "" (1 row) SELECT sparql.lcase('" "'); lcase ------- " " (1 row) SELECT sparql.lcase(' '); lcase ------- " " (1 row) /* UCASE */ SELECT sparql.ucase('bar'); ucase ------- "BAR" (1 row) SELECT sparql.ucase('"bar"'); ucase ------- "BAR" (1 row) SELECT sparql.ucase('"bar"@en'), sparql.ucase(sparql.strlang('bar','en')); ucase | ucase ----------+---------- "BAR"@en | "BAR"@en (1 row) SELECT sparql.ucase('"bar"^^xsd:string'), sparql.ucase(sparql.strdt('bar','xsd:string')); ucase | ucase --------------------------------------------------+-------------------------------------------------- "BAR"^^ | "BAR"^^ (1 row) SELECT sparql.ucase(''); ERROR: UCASE does not allow IRIs: SELECT sparql.ucase('_:xyz'); ERROR: UCASE does not allow blank nodes: _:xyz SELECT sparql.ucase(sparql.bnode('foo')); ERROR: UCASE does not allow blank nodes: _:foo SELECT sparql.ucase('123'); ucase ------- "123" (1 row) SELECT sparql.ucase('"123"'); ucase ------- "123" (1 row) SELECT sparql.ucase('"123"^^xsd:integer'); ERROR: UCASE does not allow non-string literals: SELECT sparql.ucase('"1990-10-03"^^xsd:date'); ERROR: UCASE does not allow non-string literals: SELECT sparql.ucase('"!§$%&/()?ß}{}[]°^|<>*"'); ucase ------------------------- "!§$%&/()?ß}{}[]°^|<>*" (1 row) SELECT sparql.ucase(NULL); ucase ------- NULL (1 row) SELECT sparql.ucase(''); ucase ------- "" (1 row) SELECT sparql.ucase('""'); ucase ------- "" (1 row) SELECT sparql.ucase('" "'); ucase ------- " " (1 row) SELECT sparql.ucase(' '); ucase ------- " " (1 row) /* STRLEN */ SELECT sparql.strlen('chat'), sparql.strlen('"chat"'); strlen | strlen --------+-------- 4 | 4 (1 row) SELECT sparql.strlen('"chat"@en'), sparql.strlen(sparql.strlang('chat','en')); strlen | strlen --------+-------- 4 | 4 (1 row) SELECT sparql.strlen('"chat"^^xsd:string'), sparql.strlen(sparql.strdt('chat','xsd:string')); strlen | strlen --------+-------- 4 | 4 (1 row) SELECT sparql.strlen('""'), sparql.strlen(''); strlen | strlen --------+-------- 0 | 0 (1 row) SELECT sparql.strlen('" "'), sparql.strlen(' '); strlen | strlen --------+-------- 1 | 1 (1 row) SELECT sparql.strlen('"łø"'), sparql.strlen('łø'); strlen | strlen --------+-------- 2 | 2 (1 row) SELECT sparql.strlen(NULL); strlen -------- NULL (1 row) /* SUBSTR */ SELECT sparql.substr('"foobar"', 4), sparql.substr('foobar', 4); substr | substr --------+-------- "bar" | "bar" (1 row) SELECT sparql.substr('"foobar"@en', 4), sparql.substr(sparql.strlang('foobar','en'), 4); substr | substr ----------+---------- "bar"@en | "bar"@en (1 row) SELECT sparql.substr('"foobar"^^xsd:string', 4), sparql.substr(sparql.strdt('foobar','xsd:string'), 4); substr | substr --------------------------------------------------+-------------------------------------------------- "bar"^^ | "bar"^^ (1 row) SELECT sparql.substr('"foobar"', 4, 1), sparql.substr('foobar', 4, 1); substr | substr --------+-------- "b" | "b" (1 row) SELECT sparql.substr('"foobar"@en', 4, 1), sparql.substr(sparql.strlang('foobar','en'), 4, 1); substr | substr --------+-------- "b"@en | "b"@en (1 row) SELECT sparql.substr('"foobar"^^xsd:string', 4, 1), sparql.substr(sparql.strdt('foobar','xsd:string'), 4, 1); substr | substr ------------------------------------------------+------------------------------------------------ "b"^^ | "b"^^ (1 row) SELECT sparql.substr('""', 42); substr -------- "" (1 row) SELECT sparql.substr('', 42); substr -------- "" (1 row) SELECT sparql.substr(NULL, 42); substr -------- NULL (1 row) SELECT sparql.substr('"foo"', NULL); substr -------- NULL (1 row) /* CONCAT */ SELECT sparql.concat('"foo"', '"bar"'), sparql.concat('foo', 'bar'); concat | concat ----------+---------- "foobar" | "foobar" (1 row) SELECT sparql.concat('"foo"@en', '"bar"@en'), sparql.concat(sparql.strlang('foo','en'), sparql.strlang('bar','en')); concat | concat -------------+------------- "foobar"@en | "foobar"@en (1 row) SELECT sparql.concat('"foo"^^xsd:string', '"bar"^^xsd:string'), sparql.concat(sparql.strdt('foo','xsd:string'), sparql.strdt('bar','xsd:string')); concat | concat -----------------------------------------------------+----------------------------------------------------- "foobar"^^ | "foobar"^^ (1 row) SELECT sparql.concat('"foo"', '"bar"^^xsd:string'), sparql.concat('foo', sparql.strdt('bar','xsd:string')); concat | concat ----------+---------- "foobar" | "foobar" (1 row) SELECT sparql.concat('"foo"@en', '"bar"'), sparql.concat(sparql.strlang('foo','en'), 'bar'); concat | concat ----------+---------- "foobar" | "foobar" (1 row) SELECT sparql.concat('"foo"@en', '"bar"^^xsd:string'), sparql.concat(sparql.strlang('foo','en'), sparql.strdt('bar','xsd:string')); concat | concat ----------+---------- "foobar" | "foobar" (1 row) SELECT sparql.concat(NULL, 'bar'), sparql.concat('foo', NULL), sparql.concat(NULL, NULL); concat | concat | concat --------+--------+-------- NULL | NULL | NULL (1 row) SELECT sparql.concat('foo', ''), sparql.concat('', 'bar'), sparql.concat('', ''), sparql.concat('""', '""'); concat | concat | concat | concat --------+--------+--------+-------- "foo" | "bar" | "" | "" (1 row) SELECT sparql.concat('"foo"^^foo:bar', 'bar'), sparql.concat('"foo"', '"bar"^^foo:bar'); ERROR: CONCAT arguments must be simple literals or 'xsd:string' SELECT sparql.concat('"foo"@en','"&"@en', '"bar"@en'); concat -------------- "foo&bar"@en (1 row) SELECT sparql.concat('"foo"^^xsd:string','"&"^^xsd:string', '"bar"^^xsd:string'); concat ------------------------------------------------------ "foo&bar"^^ (1 row) SELECT sparql.concat('"foo"','"&"', '"bar"'); concat ----------- "foo&bar" (1 row) SELECT sparql.concat('"foo"^^xsd:string','"&"^^xsd:string', NULL); concat -------- NULL (1 row) /* REPLACE */ SELECT sparql.replace('"abcd"', '"b"', '"Z"'), sparql.replace('abcd', 'b', 'Z'); replace | replace ---------+--------- "aZcd" | "aZcd" (1 row) SELECT sparql.replace('"abab"', '"B"', '"Z"','"i"'), sparql.replace('abab', 'B', 'Z','i'); replace | replace ---------+--------- "aZaZ" | "aZaZ" (1 row) SELECT sparql.replace('"abab"', '"B."', '"Z"','"i"'), sparql.replace('abab', 'B.', 'Z','i'); replace | replace ---------+--------- "aZb" | "aZb" (1 row) SELECT sparql.replace('"abcd"@en', '"b"', '"Z"'), sparql.replace(sparql.strlang('abcd','en'), 'b', 'Z'); replace | replace ---------+--------- "aZcd" | "aZcd" (1 row) SELECT sparql.replace('"abab"^^xsd:string', '"B"', '"Z"','"i"'), sparql.replace(sparql.strdt('abab','xsd:string'), 'B', 'Z','i'); replace | replace ---------+--------- "aZaZ" | "aZaZ" (1 row) SELECT sparql.replace('"abcd"', '"b"@en', '"Z"'), sparql.replace('abcd', sparql.strlang('b','en'), 'Z'); replace | replace ---------+--------- "aZcd" | "aZcd" (1 row) SELECT sparql.replace('"abab"', '"B"^^xsd:string', '"Z"','"i"'), sparql.replace('abab', sparql.strdt('B','xsd:string'), 'Z','i'); replace | replace ---------+--------- "aZaZ" | "aZaZ" (1 row) SELECT sparql.replace('""', '"b"', '"Z"'), sparql.replace('', 'b', 'Z'); replace | replace ---------+--------- "" | "" (1 row) SELECT sparql.replace('"abcd"', '""', '"Z"'), sparql.replace('abcd', '', 'Z'); ERROR: pattern cannot be empty in REPLACE() SELECT sparql.replace('"abcd"', '"b"', '""'), sparql.replace('abcd', 'b', ''); replace | replace ---------+--------- "acd" | "acd" (1 row) SELECT sparql.replace('"ab\"cd"', '"b"', '"Z"'), sparql.replace('ab\"cd', 'b', 'Z'); replace | replace ----------+---------- "aZ\"cd" | "aZ\"cd" (1 row) SELECT sparql.replace(NULL, 'b', 'Z'), sparql.replace('abcd', NULL, 'Z'), sparql.replace('abcd', 'b', NULL), sparql.replace('abcd', 'b', 'Z', NULL); replace | replace | replace | replace ---------+---------+---------+--------- NULL | NULL | NULL | NULL (1 row) SELECT sparql.replace('', 'a', 'Z'); -- Empty input string replace --------- "" (1 row) SELECT sparql.replace('abcd', '', 'Z'); -- Empty pattern ERROR: pattern cannot be empty in REPLACE() SELECT sparql.replace('abcd', 'a', ''); -- Empty replacement replace --------- "bcd" (1 row) SELECT sparql.replace('', '', 'Z'); -- Empty pattern and replacement ERROR: pattern cannot be empty in REPLACE() SELECT sparql.replace('abcd', 'a', 'Z'); -- Pattern at the beginning replace --------- "Zbcd" (1 row) SELECT sparql.replace('abcd', 'd', 'Z'); -- Pattern at the end replace --------- "abcZ" (1 row) SELECT sparql.replace('abcd', 'bc', 'Z'); -- Pattern in the middle replace --------- "aZd" (1 row) SELECT sparql.replace('aabbcc', 'b', 'Z'); -- Multiple occurrences of the pattern replace ---------- "aaZZcc" (1 row) SELECT sparql.replace('Abcd', 'a', 'Z'); -- Case mismatch pattern replace --------- "Abcd" (1 row) SELECT sparql.replace('abcd', 'A', 'Z'); -- Case mismatch pattern (uppercase in input) replace --------- "abcd" (1 row) SELECT sparql.replace('abcd', 'A', 'Z','i'); -- Case-insensitive replacement replace --------- "Zbcd" (1 row) SELECT sparql.replace('"abcd"', '"b"', '"Z"'); -- Special characters inside quotes replace --------- "aZcd" (1 row) SELECT sparql.replace('ab\cd', 'b\\', 'Z'); -- Escaped backslashes replace --------- "ab\cd" (1 row) SELECT sparql.replace('ab"cd', '"b"', '"Z"'); -- Quotes in the input replace ---------- "aZ\"cd" (1 row) SELECT sparql.replace('ab"cd', 'b"', 'Z'); -- Quotes in pattern replace --------- "aZcd" (1 row) SELECT sparql.replace('abcdef', 'bc', 'ZY'); -- Multi-character pattern in the middle replace ---------- "aZYdef" (1 row) SELECT sparql.replace('abc abc', 'abc', 'XYZ'); -- Multiple occurrences of a multi-character pattern replace ----------- "XYZ XYZ" (1 row) SELECT sparql.replace('abcd', 'a', 'Z'); -- Pattern at the start replace --------- "Zbcd" (1 row) SELECT sparql.replace('abcd', 'd', 'Z'); -- Pattern at the end replace --------- "abcZ" (1 row) SELECT sparql.replace('abcdabcd', 'abcd', 'XYZ'); -- Pattern at the start and repeated replace ---------- "XYZXYZ" (1 row) SELECT sparql.replace(NULL, 'a', 'Z'); -- Input is NULL replace --------- NULL (1 row) SELECT sparql.replace('abcd', NULL, 'Z'); -- Pattern is NULL replace --------- NULL (1 row) SELECT sparql.replace('abcd', 'a', NULL); -- Replacement is NULL replace --------- NULL (1 row) SELECT sparql.replace(NULL, NULL, NULL); -- All NULLs replace --------- NULL (1 row) SELECT sparql.replace('"ab\"cd"', '"b"', '"Z"'); -- Escaped double quotes replace ---------- "aZ\"cd" (1 row) SELECT sparql.replace('"ab\"cd"', 'b', 'Z'); -- Escaped double quotes, no pattern replace ---------- "aZ\"cd" (1 row) SELECT sparql.replace('"abcd"@en', 'a', 'Z'); -- Language-tagged literal replace --------- "Zbcd" (1 row) SELECT sparql.replace('"abcd"^^xsd:string', 'a', 'Z'); -- Datatype-literal (xsd:string) replace --------- "Zbcd" (1 row) SELECT sparql.replace('"abcd"^^xsd:date', 'a', 'Z'); -- Datatype-literal (xsd:date) ERROR: invalid lexical form for xsd:date: "abcd" SELECT sparql.replace('ababab', 'ab', 'XY', 'g'); -- Global replacement replace ---------- "XYXYXY" (1 row) SELECT sparql.replace('ababab', 'ab', 'XY'); -- Non-global replacement (should only replace first occurrence) replace ---------- "XYXYXY" (1 row) SELECT sparql.replace('abcd', '', 'Z', 'g'); -- Empty pattern with global flag ERROR: pattern cannot be empty in REPLACE() SELECT sparql.replace('abcd', '', 'Z'); -- Empty pattern without global flag ERROR: pattern cannot be empty in REPLACE() SELECT sparql.replace('abcd', 'z', 'Z'); -- No pattern match replace --------- "abcd" (1 row) SELECT sparql.replace('abcd', 'xy', 'Z'); -- No match for multi-character pattern replace --------- "abcd" (1 row) SELECT sparql.replace('a' || repeat('b', 1000) || 'c', 'b'::text, 'Z'::text); -- Long string with repeated pattern replace ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "aZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZc" (1 row) SELECT sparql.replace('abcd', 'abcd', 'XYZ'); -- Pattern matches the entire string replace --------- "XYZ" (1 row) SELECT sparql.replace('abcdabcd', 'abcd', 'XYZ'); -- Pattern matches at the start replace ---------- "XYZXYZ" (1 row) SELECT sparql.replace('""', '"b"', '"Z"'); -- Empty literal as input replace --------- "" (1 row) SELECT sparql.replace('"b"', '""', '"Z"'); -- Empty pattern in replacement ERROR: pattern cannot be empty in REPLACE() SELECT sparql.replace('abcd', 'a.b', 'Z', 'g'); -- Dot in pattern (regex) replace --------- "abcd" (1 row) SELECT sparql.replace('abcd', '[a-b]', 'Z', 'g'); -- Range in regex pattern replace --------- "ZZcd" (1 row) SELECT sparql.replace('abcd', '(ab)', 'Z', 'g'); -- Group in regex pattern replace --------- "Zcd" (1 row) /* REGEX */ SELECT sparql.regex('"abcd"', '"bc"'); regex ------- t (1 row) SELECT sparql.regex('"abcd"', '"xy"'); regex ------- f (1 row) SELECT sparql.regex('"abcd"', '"BC"', '"i"'); regex ------- t (1 row) SELECT sparql.regex('"abcd"', '"^bc"'); regex ------- f (1 row) SELECT sparql.regex('"abcd"', '"^ab"'); regex ------- t (1 row) SELECT sparql.regex('"abc\ndef"', '"^def$"', '"m"'); ERROR: Unsupported REGEX() flag: "m" (only "i" is supported) SELECT sparql.regex('"abc\ndef"', '"c.d"', '"s"'); ERROR: Unsupported REGEX() flag: "s" (only "i" is supported) SELECT sparql.regex('"abcd"@en', '"bc"'); regex ------- t (1 row) SELECT sparql.regex('"123"^^xsd:int', '"23"'); regex ------- t (1 row) SELECT sparql.regex('""', '"a"'); regex ------- f (1 row) SELECT sparql.regex('""', '"(.*)"'); regex ------- t (1 row) SELECT sparql.regex('"abcd"', '""'); regex ------- f (1 row) SELECT sparql.regex(NULL, '"a"'), sparql.regex('"abcd"', NULL), sparql.regex('"abcd"', '"a"', NULL); regex | regex | regex -------+-------+------- NULL | NULL | NULL (1 row) SELECT sparql.regex('"abcd"', '"[a"'); ERROR: invalid regular expression: brackets [] not balanced /* ABS */ SELECT sparql.abs('"-1"^^xsd:int'); abs --------------------------------------------- "1"^^ (1 row) SELECT sparql.abs('"-1.42"^^xsd:double'); abs --------------------------------------------------- "1.42"^^ (1 row) SELECT sparql.abs(sparql.strdt('-1.42','xsd:double')); abs --------------------------------------------------- "1.42"^^ (1 row) SELECT sparql.abs(sparql.strdt('-1.42238','xsd:double')); abs ------------------------------------------------------ "1.42238"^^ (1 row) SELECT sparql.abs(''); ERROR: invalid value for ABS(): "" SELECT sparql.abs(' '); ERROR: invalid value for ABS(): " " SELECT sparql.abs(NULL); abs ------ NULL (1 row) SELECT sparql.abs(CAST(-1.42 AS numeric)); abs ---------------------------------------------------- "1.42"^^ (1 row) SELECT sparql.abs(CAST(-1.42 AS double precision)); abs --------------------------------------------------- "1.42"^^ (1 row) --SELECT sparql.abs(CAST(-1.42 AS real)); SELECT sparql.abs(CAST(-1 AS bigint)); abs ---------------------------------------------- "1"^^ (1 row) SELECT sparql.abs(CAST(-1 AS smallint)); abs ----------------------------------------------- "1"^^ (1 row) SELECT sparql.abs(CAST(-1 AS int)); abs --------------------------------------------- "1"^^ (1 row) /* ROUND */ SELECT sparql.round('"2.4999"^^xsd:double'); round ------------------------------------------------ "2"^^ (1 row) SELECT sparql.round('"2.5"^^xsd:double'); round ------------------------------------------------ "3"^^ (1 row) SELECT sparql.round('"-2.5"^^xsd:decimal'); round -------------------------------------------------- "-2"^^ (1 row) SELECT sparql.round(''); ERROR: invalid value for ROUND(): "" SELECT sparql.round('""'); ERROR: invalid value for ROUND(): "" SELECT sparql.round(' '); ERROR: invalid value for ROUND(): " " SELECT sparql.round('" "'); ERROR: invalid value for ROUND(): " " SELECT sparql.round(NULL); round ------- NULL (1 row) SELECT sparql.round(CAST(2.49999 AS numeric)); round ------------------------------------------------ "2"^^ (1 row) SELECT sparql.round(CAST(2.5 AS double precision)); round ------------------------------------------------ "3"^^ (1 row) --SELECT sparql.round(CAST(-2.5 AS real)); SELECT sparql.round(CAST(42 AS bigint)); round ------------------------------------------------- "42"^^ (1 row) SELECT sparql.round(CAST(42 AS smallint)); round ------------------------------------------------- "42"^^ (1 row) SELECT sparql.round(CAST(42 AS int)); round ------------------------------------------------- "42"^^ (1 row) /* CEIL */ SELECT sparql.ceil('"10.5"^^xsd:double'); ceil ------------------------------------------------- "11"^^ (1 row) SELECT sparql.ceil('"-10.5"^^xsd:decimal'); ceil --------------------------------------------------- "-10"^^ (1 row) SELECT sparql.ceil(NULL); ceil ------ NULL (1 row) SELECT sparql.ceil(CAST(10.5 AS numeric)); ceil -------------------------------------------------- "11"^^ (1 row) SELECT sparql.ceil(CAST(-10.5 AS double precision)); ceil -------------------------------------------------- "-10"^^ (1 row) SELECT sparql.ceil(CAST(10.5 AS real)); ceil ------------------------------------------------- "11"^^ (1 row) SELECT sparql.ceil(CAST(-42 AS bigint)); ceil -------------------------------------------------- "-42"^^ (1 row) SELECT sparql.ceil(CAST(42 AS smallint)); ceil ------------------------------------------------- "42"^^ (1 row) SELECT sparql.ceil(CAST(-42 AS int)); ceil -------------------------------------------------- "-42"^^ (1 row) /* FLOOR */ SELECT sparql.floor('"10.5"^^xsd:double'); floor ------------------------------------------------- "10"^^ (1 row) SELECT sparql.floor('"-10.5"^^xsd:decimal'); floor --------------------------------------------------- "-11"^^ (1 row) SELECT sparql.floor(CAST(10.5 AS numeric)); floor -------------------------------------------------- "10"^^ (1 row) SELECT sparql.floor(CAST(-10.5 AS double precision)); floor -------------------------------------------------- "-11"^^ (1 row) SELECT sparql.floor(CAST(10.5 AS real)); floor ------------------------------------------------- "10"^^ (1 row) SELECT sparql.floor(CAST(-42 AS bigint)); floor -------------------------------------------------- "-42"^^ (1 row) SELECT sparql.floor(CAST(42 AS smallint)); floor ------------------------------------------------- "42"^^ (1 row) SELECT sparql.floor(CAST(-42 AS int)); floor -------------------------------------------------- "-42"^^ (1 row) /* YEAR */ SELECT sparql.year('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); year ------ 2011 (1 row) SELECT sparql.year('"2011-01-10T14:45:13.815-05:00"'); year ------ 2011 (1 row) SELECT sparql.year('2011-01-10T14:45:13.815-05:00'); year ------ 2011 (1 row) SELECT sparql.year('2011-01-10T14:45:13.815-05:00'::date); year ------ 2011 (1 row) SELECT sparql.year('2011-01-10T14:45:13.815-05:00'::timestamp); year ------ 2011 (1 row) /* MONTH */ SELECT sparql.month('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); month ------- 1 (1 row) SELECT sparql.month('"2011-01-10T14:45:13.815-05:00"'); month ------- 1 (1 row) SELECT sparql.month('2011-01-10T14:45:13.815-05:00'); month ------- 1 (1 row) SELECT sparql.month('2011-01-10T14:45:13.815-05:00'::date); month ------- 1 (1 row) SELECT sparql.month('2011-01-10T14:45:13.815-05:00'::timestamp); month ------- 1 (1 row) /* DAYS */ SELECT sparql.day('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); day ----- 10 (1 row) SELECT sparql.day('"2011-01-10T14:45:13.815-05:00"'); day ----- 10 (1 row) SELECT sparql.day('2011-01-10T14:45:13.815-05:00'); day ----- 10 (1 row) SELECT sparql.day('2011-01-10T14:45:13.815-05:00'::date); day ----- 10 (1 row) SELECT sparql.day('2011-01-10T14:45:13.815-05:00'::timestamp); day ----- 10 (1 row) /* HOURS */ SELECT sparql.hours('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); hours ------- 14 (1 row) SELECT sparql.hours('"2011-01-10T14:45:13.815-05:00"'); hours ------- 14 (1 row) SELECT sparql.hours('2011-01-10T14:45:13.815-05:00'); hours ------- 14 (1 row) SELECT sparql.hours('2011-01-10T14:45:13.815-05:00'::date); hours ------- 0 (1 row) SELECT sparql.hours('2011-01-10T14:45:13.815-05:00'::timestamp); hours ------- 14 (1 row) /* MINUTES */ SELECT sparql.minutes('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); minutes --------- 45 (1 row) SELECT sparql.minutes('"2011-01-10T14:45:13.815-05:00"'); minutes --------- 45 (1 row) SELECT sparql.minutes('2011-01-10T14:45:13.815-05:00'); minutes --------- 45 (1 row) SELECT sparql.minutes('2011-01-10T14:45:13.815-05:00'::date); minutes --------- 0 (1 row) SELECT sparql.minutes('2011-01-10T14:45:13.815-05:00'::timestamp); minutes --------- 45 (1 row) /* SECONDS */ SELECT pg_catalog.round(sparql.seconds('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'),3); round -------- 14.000 (1 row) SELECT pg_catalog.round(sparql.seconds('"2011-01-10T14:45:13.815-05:00"'),3); round -------- 14.000 (1 row) SELECT pg_catalog.round(sparql.seconds('2011-01-10T14:45:13.815-05:00'),3); round -------- 14.000 (1 row) SELECT pg_catalog.round(sparql.seconds('2011-01-10T14:45:13.815-05:00'::date),3); round ------- 0.000 (1 row) SELECT pg_catalog.round(sparql.seconds('2011-01-10T14:45:13.815-05:00'::timestamp),3); round -------- 13.815 (1 row) /* TIMEZONE */ SELECT sparql.timezone('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); timezone ------------------------------------------------------------- "-PT5H"^^ (1 row) SELECT sparql.timezone('"2011-01-10T14:45:13.815Z"^^xsd:dateTime'); timezone ------------------------------------------------------------ "PT0S"^^ (1 row) SELECT sparql.timezone('"2011-01-10T14:45:13.815"^^xsd:dateTime'); ERROR: TIMEZONE(): datetime has no time zone: 2011-01-10T14:45:13.815 SELECT sparql.timezone('"2020-12-01T08:00:00-05:00"^^xsd:dateTime'); timezone ------------------------------------------------------------- "-PT5H"^^ (1 row) SELECT sparql.timezone('"2020-12-01T08:00:00+02:30"^^xsd:dateTime'); timezone --------------------------------------------------------------- "PT2H30M"^^ (1 row) SELECT sparql.timezone('"2020-12-01T08:00:00Z"^^xsd:dateTime'); timezone ------------------------------------------------------------ "PT0S"^^ (1 row) SELECT sparql.timezone('"2020-12-01T08:00:00.123+00:00"^^xsd:dateTime'); timezone ------------------------------------------------------------ "PT0S"^^ (1 row) SELECT sparql.timezone('"2020-12-01T08:00:00.123456-04:45"^^xsd:dateTime'); timezone ---------------------------------------------------------------- "-PT4H45M"^^ (1 row) SELECT sparql.timezone('"2020-12-01T08:00:00"^^xsd:dateTime'); ERROR: TIMEZONE(): datetime has no time zone: 2020-12-01T08:00:00 SELECT sparql.timezone('"2020-12-01T08:00:00+25:00"^^xsd:dateTime'); ERROR: TIMEZONE(): invalid timezone offset: +25:00 SELECT sparql.timezone('"2020-12-01T08:00:00-99:99"^^xsd:dateTime'); ERROR: TIMEZONE(): invalid timezone offset: -99:99 SELECT sparql.timezone('"invalid-date"^^xsd:dateTime'); ERROR: invalid lexical form for xsd:dateTime: "invalid-date" SELECT sparql.timezone('""^^xsd:dateTime'); ERROR: invalid lexical form for xsd:dateTime: "" SELECT sparql.timezone(NULL); timezone ---------- NULL (1 row) SELECT sparql.timezone('"not a date"^^xsd:string'); timezone ---------- NULL (1 row) /* TZ */ SELECT sparql.tz('"2011-01-10T14:45:13.815-05:00"^^xsd:dateTime'); tz ---------- "-05:00" (1 row) SELECT sparql.tz('"2011-01-10T14:45:13.815Z"^^xsd:dateTime'); tz ----- "Z" (1 row) SELECT sparql.tz('"2011-01-10T14:45:13.815"^^xsd:dateTime'); ERROR: TZ(): datetime has no timezone SELECT sparql.tz('"2020-12-01T08:00:00-05:00"^^xsd:dateTime'); tz ---------- "-05:00" (1 row) SELECT sparql.tz('"2020-12-01T08:00:00+02:30"^^xsd:dateTime'); tz ---------- "+02:30" (1 row) SELECT sparql.tz('"2020-12-01T08:00:00Z"^^xsd:dateTime'); tz ----- "Z" (1 row) SELECT sparql.tz('"2020-12-01T08:00:00.123+00:00"^^xsd:dateTime'); tz ---------- "+00:00" (1 row) SELECT sparql.tz('"2020-12-01T08:00:00.123456-04:45"^^xsd:dateTime'); tz ---------- "-04:45" (1 row) SELECT sparql.tz('"2020-12-01T08:00:00"^^xsd:dateTime'); ERROR: TZ(): datetime has no timezone SELECT sparql.tz('"2020-12-01T08:00:00+25:00"^^xsd:dateTime'); tz ---------- "+25:00" (1 row) SELECT sparql.tz('"2020-12-01T08:00:00-99:99"^^xsd:dateTime'); tz ---------- "-99:99" (1 row) SELECT sparql.tz('"invalid-date"^^xsd:dateTime'); ERROR: invalid lexical form for xsd:dateTime: "invalid-date" SELECT sparql.tz('""^^xsd:dateTime'); ERROR: invalid lexical form for xsd:dateTime: "" SELECT sparql.tz(NULL); tz ------ NULL (1 row) SELECT sparql.tz('"not a date"^^xsd:string'); ERROR: TZ(): datetime has no timezone /*BOUND */ SELECT sparql.bound(NULL); bound ------- f (1 row) SELECT sparql.bound('abc'); bound ------- t (1 row) /* SAMETERM */ SELECT sparql.sameterm('"abc"', '"abc"'); sameterm ---------- t (1 row) SELECT sparql.sameterm('"abc"@en', '"abc"@en'); sameterm ---------- t (1 row) SELECT sparql.sameterm('"abc"@en', '"abc"'); sameterm ---------- f (1 row) SELECT sparql.sameterm('"abc"^^xsd:string', '"abc"'); sameterm ---------- f (1 row) SELECT sparql.sameterm(NULL, '"abc"'); sameterm ---------- NULL (1 row) SELECT sparql.sameterm(NULL, NULL); sameterm ---------- NULL (1 row) /* COALESCE */ SELECT sparql.coalesce(NULL, NULL, 'foo'); coalesce ---------- "foo" (1 row) SELECT sparql.coalesce(NULL, NULL, '"foo"'); coalesce ---------- "foo" (1 row) SELECT sparql.coalesce(NULL, NULL, '"foo"^^xsd:string'); coalesce -------------------------------------------------- "foo"^^ (1 row) SELECT sparql.coalesce(NULL, NULL, '"foo"@fr'); coalesce ---------- "foo"@fr (1 row) SELECT sparql.coalesce(NULL, NULL, ''); coalesce ------------------- (1 row) SELECT sparql.coalesce(NULL, NULL, sparql.iri('"http://example/"')); coalesce ------------------- (1 row) SELECT sparql.coalesce(NULL, NULL, sparql.bnode('foo')); coalesce ---------- _:foo (1 row) /* MD5 */ SELECT sparql.md5('abc'); md5 ------------------------------------ "900150983cd24fb0d6963f7d28e17f72" (1 row) SELECT sparql.md5('"abc"'); md5 ------------------------------------ "900150983cd24fb0d6963f7d28e17f72" (1 row) SELECT sparql.md5('"abc"^^xsd:string'); md5 ------------------------------------ "900150983cd24fb0d6963f7d28e17f72" (1 row) SELECT sparql.md5('"abc"^^xsd:string') = sparql.md5('abc'); ?column? ---------- t (1 row) SELECT sparql.md5('"abc"@en') = sparql.md5('"abc"'); ?column? ---------- t (1 row) SELECT sparql.md5('"abc"^^xsd:normalizedString'); md5 ------------------------------------ "900150983cd24fb0d6963f7d28e17f72" (1 row) SELECT sparql.md5('"abc"^^xsd:anyURI'); md5 ------------------------------------ "900150983cd24fb0d6963f7d28e17f72" (1 row) SELECT sparql.md5('123'); -- xsd:integer md5 ------------------------------------ "202cb962ac59075b964b07152d234b70" (1 row) SELECT sparql.md5('"2020-01-01T00:00:00Z"^^xsd:dateTime'); md5 ------------------------------------ "cbedd1c35c83b21c73dd2416abbe8f0b" (1 row) SELECT sparql.md5('"not_a_uri"^^xsd:anyURI'); md5 ------------------------------------ "e45ec53c1ba6595b0685f760b2cf4fc5" (1 row) SELECT sparql.md5('""'); md5 ------------------------------------ "d41d8cd98f00b204e9800998ecf8427e" (1 row) SELECT sparql.md5(NULL); md5 ------ NULL (1 row) SELECT sparql.md5('"Münster"'); md5 ------------------------------------ "9bb43a4ce6b060e4766588c1d88fcb1b" (1 row) SELECT sparql.md5(repeat('a', 10000)); md5 ------------------------------------ "0d0c9c4db6953fee9e03f528cafd7d3e" (1 row)