From 21dc068fb2f9c96f4ff70340c9af45ead41ee56e Mon Sep 17 00:00:00 2001 From: Jim Jones Date: Fri, 22 Mar 2024 14:24:35 +0100 Subject: [PATCH] Add regression tests for LIKE/ILIKE operations --- expected/virtuoso-dbpedia.out | 153 +++++++++++++++++++++++++++++++++- sql/virtuoso-dbpedia.sql | 64 ++++++++++++++ 2 files changed, 216 insertions(+), 1 deletion(-) diff --git a/expected/virtuoso-dbpedia.out b/expected/virtuoso-dbpedia.out index a388cda..289dda2 100644 --- a/expected/virtuoso-dbpedia.out +++ b/expected/virtuoso-dbpedia.out @@ -1826,8 +1826,157 @@ LIMIT 10 JapĆ³n (1 row) +CREATE FOREIGN TABLE public.regex_test1 ( + txt text OPTIONS (variable '?o', nodetype 'literal') +) +SERVER dbpedia OPTIONS ( + log_sparql 'true', + sparql ' + PREFIX foaf: + SELECT * { foaf:name ?o} +'); +/* + ILIKE expression containing "^" and "$" + */ +SELECT txt FROM public.regex_test1 +WHERE txt ~~* '%^___2reGeX$'; +INFO: SPARQL query sent to 'https://dbpedia.org/sparql': + + PREFIX foaf: + +SELECT ?o +{ foaf:name ?o FILTER(REGEX(?o,".*\\^...2reGeX\\$$","i")) +} + + txt +------------- + ^txt2regex$ +(1 row) + +CREATE FOREIGN TABLE public.regex_test ( + name text OPTIONS (variable '?name', nodetype 'literal'), + abstract text OPTIONS (variable '?abstract', expression 'STR(?abs)') +) +SERVER dbpedia OPTIONS ( + log_sparql 'true', + sparql ' + PREFIX foaf: + PREFIX dbo: + PREFIX dbr: + SELECT * + {?s a dbo:WrittenWork ; + dbo:genre dbr:Computer_magazine; + dbo:abstract ?abs ; + foaf:name ?name . + FILTER(LANG(?abs) = "en") + }'); +/* + LIKE and ILIKE expressions containing "." + */ +SELECT name FROM regex_test +WHERE name LIKE '%P.P.%' AND abstract ILIKE '%wITh_MAC__.'; +INFO: SPARQL query sent to 'https://dbpedia.org/sparql': + + PREFIX foaf: + PREFIX dbo: + PREFIX dbr: + +SELECT ?name (STR(?abs) AS ?abstract) +{?s a dbo:WrittenWork ; + dbo:genre dbr:Computer_magazine; + dbo:abstract ?abs ; + foaf:name ?name . + FILTER(LANG(?abs) = "en") + FILTER(REGEX(?name,".*P\\.P\\..*")) + FILTER(REGEX(STR(?abs),".*wITh.MAC..\\.$","i")) +} + + name +----------------- + Call-A.P.P.L.E. +(1 row) + +/* + LIKE and ILIKE expressions containing "(" and "[" + */ +SELECT name FROM regex_test +WHERE abstract ~~ '%(Computer%' AND abstract ~~* '%[WwW%' ; +INFO: SPARQL query sent to 'https://dbpedia.org/sparql': + + PREFIX foaf: + PREFIX dbo: + PREFIX dbr: + +SELECT ?name (STR(?abs) AS ?abstract) +{?s a dbo:WrittenWork ; + dbo:genre dbr:Computer_magazine; + dbo:abstract ?abs ; + foaf:name ?name . + FILTER(LANG(?abs) = "en") + FILTER(REGEX(STR(?abs),".*\\(Computer.*")) + FILTER(REGEX(STR(?abs),".*\\[WwW.*","i")) +} + + name +------------ + Computerra +(1 row) + +/* + LIKE and ILIKE expressions containing "-" + */ +SELECT name FROM regex_test +WHERE abstract ~~ '%VIC-_0%' AND abstract ~~* '%__-MoNtHlY%' AND name ~~ 'Your___'; +INFO: SPARQL query sent to 'https://dbpedia.org/sparql': + + PREFIX foaf: + PREFIX dbo: + PREFIX dbr: + +SELECT ?name (STR(?abs) AS ?abstract) +{?s a dbo:WrittenWork ; + dbo:genre dbr:Computer_magazine; + dbo:abstract ?abs ; + foaf:name ?name . + FILTER(LANG(?abs) = "en") + FILTER(REGEX(STR(?abs),".*VIC\\-.0.*")) + FILTER(REGEX(STR(?abs),".*..\\-MoNtHlY.*","i")) + FILTER(REGEX(?name,"^Your...")) +} + + name +--------- + Your 64 +(1 row) + +/* + LIKE and ILIKE expressions containing single and double quotes + */ +SELECT name FROM regex_test +WHERE abstract ~~ '%"serious end"%' AND abstract ~~* E'%rEADer\'s%' ; +INFO: SPARQL query sent to 'https://dbpedia.org/sparql': + + PREFIX foaf: + PREFIX dbo: + PREFIX dbr: + +SELECT ?name (STR(?abs) AS ?abstract) +{?s a dbo:WrittenWork ; + dbo:genre dbr:Computer_magazine; + dbo:abstract ?abs ; + foaf:name ?name . + FILTER(LANG(?abs) = "en") + FILTER(REGEX(STR(?abs),".*\"serious end\".*")) + FILTER(REGEX(STR(?abs),".*rEADer's.*","i")) +} + + name +----------- + ST Review +(1 row) + DROP SERVER dbpedia CASCADE; -NOTICE: drop cascades to 18 other objects +NOTICE: drop cascades to 20 other objects DETAIL: drop cascades to foreign table film drop cascades to foreign table politicians drop cascades to foreign table party_members @@ -1846,3 +1995,5 @@ drop cascades to foreign table generic_rdf_table drop cascades to foreign table generic_rdf_table2 drop cascades to foreign table generic_rdf_table3 drop cascades to foreign table generic_rdf_table4 +drop cascades to foreign table regex_test1 +drop cascades to foreign table regex_test diff --git a/sql/virtuoso-dbpedia.sql b/sql/virtuoso-dbpedia.sql index cb3b624..2127a5a 100644 --- a/sql/virtuoso-dbpedia.sql +++ b/sql/virtuoso-dbpedia.sql @@ -816,4 +816,68 @@ FROM generic_rdf_table4 WHERE uri = 'http://dbpedia.org/resource/Japan' LIMIT 10; + + +CREATE FOREIGN TABLE public.regex_test1 ( + txt text OPTIONS (variable '?o', nodetype 'literal') +) +SERVER dbpedia OPTIONS ( + log_sparql 'true', + sparql ' + PREFIX foaf: + SELECT * { foaf:name ?o} +'); + + +/* + ILIKE expression containing "^" and "$" + */ +SELECT txt FROM public.regex_test1 +WHERE txt ~~* '%^___2reGeX$'; + + + +CREATE FOREIGN TABLE public.regex_test ( + name text OPTIONS (variable '?name', nodetype 'literal'), + abstract text OPTIONS (variable '?abstract', expression 'STR(?abs)') +) +SERVER dbpedia OPTIONS ( + log_sparql 'true', + sparql ' + PREFIX foaf: + PREFIX dbo: + PREFIX dbr: + SELECT * + {?s a dbo:WrittenWork ; + dbo:genre dbr:Computer_magazine; + dbo:abstract ?abs ; + foaf:name ?name . + FILTER(LANG(?abs) = "en") + }'); + +/* + LIKE and ILIKE expressions containing "." + */ +SELECT name FROM regex_test +WHERE name LIKE '%P.P.%' AND abstract ILIKE '%wITh_MAC__.'; + +/* + LIKE and ILIKE expressions containing "(" and "[" + */ +SELECT name FROM regex_test +WHERE abstract ~~ '%(Computer%' AND abstract ~~* '%[WwW%' ; + +/* + LIKE and ILIKE expressions containing "-" + */ +SELECT name FROM regex_test +WHERE abstract ~~ '%VIC-_0%' AND abstract ~~* '%__-MoNtHlY%' AND name ~~ 'Your___'; + +/* + LIKE and ILIKE expressions containing single and double quotes + */ +SELECT name FROM regex_test +WHERE abstract ~~ '%"serious end"%' AND abstract ~~* E'%rEADer\'s%' ; + + DROP SERVER dbpedia CASCADE; \ No newline at end of file