\pset null NULL \set VERBOSITY terse SET timezone <> 'UTC'; ERROR: syntax error at or near "<>" at character 14 -- Tests for inequality (<>) operator on rdfnode type -- basically -- the same tests in rdfnode_eq but with a <> operator. Just for -- peace of mind :) -- Language-tagged literals (case-insensitive) SELECT '"foo"@EN'::rdfnode <> '"foo"@en'::rdfnode; ?column? ---------- f (1 row) SELECT '"foo"@en-us'::rdfnode <> '"foo"@EN-US'::rdfnode; ?column? ---------- f (1 row) SELECT '"foo"@en'::rdfnode <> '"foo"@en-us'::rdfnode; ?column? ---------- t (1 row) SELECT '"café"@fr'::rdfnode <> '"café"@fr'::rdfnode; ?column? ---------- f (1 row) SELECT '"café"@fr'::rdfnode <> '"cafe"@fr'::rdfnode; ?column? ---------- t (1 row) SELECT '"foo"^^xsd:string'::rdfnode <> '" foo "^^xsd:string'::rdfnode; ?column? ---------- t (1 row) -- Unicode escapes SELECT '"\u0020"^^xsd:string'::rdfnode <> '" "^^xsd:string'::rdfnode; ?column? ---------- f (1 row) SELECT '"\U0001F600"^^xsd:string'::rdfnode <> '"😀"^^xsd:string'::rdfnode; ?column? ---------- f (1 row) SELECT '"\U0001F600"^^xsd:string'::rdfnode <> '"😀"'::rdfnode; ?column? ---------- f (1 row) SELECT '"\uD834\uDD1E"^^xsd:string'::rdfnode <> '𝄞'::rdfnode; ?column? ---------- f (1 row) SELECT '"\""'::rdfnode <> '"'::rdfnode; -- True ?column? ---------- f (1 row) SELECT '"\\\\u0020"'::rdfnode <> '"\\u0020"'::rdfnode; -- False, first is two literal backslashes ?column? ---------- t (1 row) SELECT '"\u0020"'::rdfnode <> '" "'::rdfnode; -- True ?column? ---------- f (1 row) SELECT '"\u0009"'::rdfnode <> E'\t'::rdfnode; -- True ?column? ---------- f (1 row) SELECT '"\uD834"^^xsd:string'::rdfnode; -- Invalid alone rdfnode ------------------------------------------------ "�"^^ (1 row) SELECT '"\uDD1E"^^xsd:string'::rdfnode; -- Invalid alone rdfnode ------------------------------------------------ "�"^^ (1 row) SELECT '"\u12"^^xsd:string'::rdfnode; -- Too short rdfnode --------------------------------------------------- "\u12"^^ (1 row) SELECT '"\u12GZ"^^xsd:string'::rdfnode; -- Invalid hex digits rdfnode ----------------------------------------------------- "\u12GZ"^^ (1 row) SELECT '"\u123456"^^xsd:string'::rdfnode; -- Overflow (only 4 digits allowed for \u) rdfnode ------------------------------------------------------- "\u123456"^^ (1 row) -- Typed literals, same datatype IRI SELECT '"foo"^^'::rdfnode <> '"foo"^^'::rdfnode; ?column? ---------- f (1 row) SELECT '"foo"^^'::rdfnode <> '"foo"^^xsd:string'::rdfnode; ?column? ---------- t (1 row) SELECT '"foo"^^'::rdfnode <> '"foo"^^'::rdfnode; ?column? ---------- f (1 row) -- Integer comparisons SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^'::rdfnode; ?column? ---------- f (1 row) SELECT '"-42"^^xsd:int'::rdfnode <> '"-42"^^xsd:int'::rdfnode; ?column? ---------- f (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"-42"^^xsd:int'::rdfnode; ?column? ---------- t (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42.00"^^xsd:decimal'::rdfnode; ?column? ---------- f (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^xsd:integer'::rdfnode; ?column? ---------- f (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^'::rdfnode; ?column? ---------- f (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42.0000000000"^^xsd:double'::rdfnode; ?column? ---------- f (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^xsd:short'::rdfnode; ?column? ---------- f (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42.73"^^xsd:decimal'::rdfnode; ?column? ---------- t (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42.0000000001"^^xsd:double'::rdfnode; ?column? ---------- t (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"foo"^^xsd:string'::rdfnode; ?column? ---------- t (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^xsd:string'::rdfnode; ?column? ---------- t (1 row) SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^xsd:date'::rdfnode; ?column? ---------- t (1 row) SELECT '"-0"^^xsd:int'::rdfnode <> '"0"^^xsd:int'::rdfnode; ?column? ---------- f (1 row) SELECT '"999999999999999999"^^xsd:integer'::rdfnode <> '"999999999999999999.0"^^xsd:decimal'::rdfnode; ?column? ---------- f (1 row) -- Date and time comparisons SELECT '"2011-10-08"^^xsd:date'::rdfnode <> '"2011-10-08"^^xsd:date'::rdfnode; ?column? ---------- f (1 row) SELECT '"2011-10-08"^^xsd:date'::rdfnode <> '"2011-10-08"^^xsd:string'::rdfnode; ?column? ---------- t (1 row) SELECT '"2011-10-08"^^xsd:date'::rdfnode <> '"2011-10-08"'::rdfnode; ?column? ---------- t (1 row) SELECT '"2011-10-08"^^xsd:date'::rdfnode <> '"2011-10-11"^^xsd:date'::rdfnode; ?column? ---------- t (1 row) SELECT '"2011-10-08"^^xsd:date'::rdfnode <> '""^^xsd:date'::rdfnode; ERROR: invalid input syntax for type date: "" SELECT '"0001-01-01"^^xsd:date'::rdfnode <> '"0001-01-01"^^xsd:date'::rdfnode; ?column? ---------- f (1 row) -- Invalid datetime SELECT '"2025-13-01T12:00:00"^^xsd:dateTime'::rdfnode <> '"2025-13-01T12:00:00"^^xsd:dateTime'::rdfnode; ?column? ---------- f (1 row) SELECT '"2025-04-25T25:00:00Z"^^xsd:dateTime'::rdfnode <> '"2025-04-25T25:00:00Z"^^xsd:dateTime'::rdfnode; ?column? ---------- f (1 row) SELECT '"1.0E308"^^xsd:double'::rdfnode <> '"1.0E308"^^xsd:double'::rdfnode; ?column? ---------- f (1 row) SELECT '"invalid"^^xsd:dateTime'::rdfnode <> '"invalid"^^xsd:dateTime'::rdfnode; ?column? ---------- f (1 row) -- Time SELECT '"18:44:38"^^xsd:time'::rdfnode <> '"18:44:38"^^xsd:time'::rdfnode; ?column? ---------- f (1 row) SELECT '"18:44:38"^^xsd:time'::rdfnode <> '"18:44:38"^^'::rdfnode; ?column? ---------- f (1 row) SELECT '"18:44:38"^^xsd:time'::rdfnode <> '"20:44:38"^^xsd:time'::rdfnode; ?column? ---------- t (1 row) SELECT '"18:44:38"^^xsd:time'::rdfnode <> '"18:44:38"'::rdfnode; ?column? ---------- t (1 row) -- timezone-naive equality SELECT '"10:00:00"^^xsd:time'::rdfnode <> '"10:00:00"^^xsd:time'::rdfnode; ?column? ---------- f (1 row) SELECT '"10:00:00"^^xsd:time'::rdfnode <> '"11:00:00"^^xsd:time'::rdfnode; ?column? ---------- t (1 row) -- timezone-aware equality SELECT '"10:00:00+02:00"^^xsd:time'::rdfnode <> '"10:00:00+02:00"^^xsd:time'::rdfnode; ?column? ---------- f (1 row) SELECT '"10:00:00+02:00"^^xsd:time'::rdfnode <> '"11:00:00+02:00"^^xsd:time'::rdfnode; ?column? ---------- t (1 row) -- UTC variants SELECT '"10:00:00Z"^^xsd:time'::rdfnode <> '"10:00:00+00:00"^^xsd:time'::rdfnode; ?column? ---------- f (1 row) -- mixed tz/no-tz SELECT '"10:00:00"^^xsd:time'::rdfnode <> '"10:00:00+02:00"^^xsd:time'::rdfnode; ?column? ---------- t (1 row) SELECT '"10:00:00+02:00"^^xsd:time'::rdfnode <> '"10:00:00"^^xsd:time'::rdfnode; ?column? ---------- t (1 row) -- String comparison fallbacks SELECT '"2025-04-25 18:44:38"^^xsd:dateTime'::rdfnode <> '"2025-04-25 18:44:38"^^xsd:dateTime'::rdfnode; ?column? ---------- f (1 row) SELECT '"2025-04-25 18:44:38"^^xsd:dateTime'::rdfnode <> '"2025-04-25 18:44:38"^^'::rdfnode; ?column? ---------- t (1 row) SELECT '"2025-04-25T18:44:38.149101Z"^^xsd:dateTime'::rdfnode <> '"2025-04-25T18:44:38.149101Z"^^xsd:dateTime'::rdfnode; ?column? ---------- f (1 row) SELECT '"2025-04-25T18:44:38.149101Z"^^xsd:dateTime'::rdfnode <> '"2025-04-25T18:44:38.149101Z"^^'::rdfnode; ?column? ---------- f (1 row) SELECT '"2025-04-25T18:44:38"^^xsd:dateTime'::rdfnode <> '"2025-04-25T18:44:38Z"^^xsd:dateTime'::rdfnode; ?column? ---------- t (1 row) SELECT '"2025-04-25T18:44:38+00:00"^^xsd:dateTime'::rdfnode <> '"2025-04-25T18:44:38Z"^^xsd:dateTime'::rdfnode; -- Both are TZ-aware and equal in UTC; +00:00 and Z are the same offset ?column? ---------- f (1 row) SELECT '"2025-04-25T12:00:00+02:00"^^xsd:dateTime'::rdfnode <> '"2025-04-25T10:00:00Z"^^xsd:dateTime'::rdfnode; -- Different offsets, same UTC instant ?column? ---------- f (1 row) SELECT '"2025-04-25T12:00:00+02:00"^^xsd:dateTime'::rdfnode <> '"2025-04-25T12:00:00Z"^^xsd:dateTime'::rdfnode; -- Same clock time, different UTC instant ?column? ---------- t (1 row) SELECT '"2025-04-25T12:00:00"^^xsd:dateTime'::rdfnode <> '"2025-04-25T12:00:00"^^xsd:dateTime'::rdfnode; -- Both naive: equal ?column? ---------- f (1 row) SELECT '"2025-04-25T12:00:00"^^xsd:dateTime'::rdfnode <> '"2025-04-25T13:00:00"^^xsd:dateTime'::rdfnode; -- Both naive, different times ?column? ---------- t (1 row) SELECT '"2025-04-25T12:00:00"^^xsd:dateTime'::rdfnode <> '"2025-04-25T12:00:00Z"^^xsd:dateTime'::rdfnode; -- The canonical mixed-tz case ?column? ---------- t (1 row) -- === RDF 1.1 §17.4.1.7: term equality of identical ill-typed literals === -- These all must return TRUE, not raise type errors. SELECT '"forty-two"^^xsd:int'::rdfnode <> '"forty-two"^^xsd:int'::rdfnode; -- t ?column? ---------- f (1 row) SELECT '"2025-13-01"^^xsd:date'::rdfnode <> '"2025-13-01"^^xsd:date'::rdfnode; -- t ?column? ---------- f (1 row) SELECT '"25:00:00"^^xsd:time'::rdfnode <> '"25:00:00"^^xsd:time'::rdfnode; -- t ?column? ---------- f (1 row) SELECT '"nAn"^^xsd:double'::rdfnode <> '"nAn"^^xsd:double'::rdfnode; -- t ?column? ---------- f (1 row) SELECT '""^^xsd:integer'::rdfnode <> '""^^xsd:integer'::rdfnode; -- t ?column? ---------- f (1 row) SELECT '"NaN"^^xsd:double'::rdfnode <> '"NaN"^^xsd:double'::rdfnode; -- f ?column? ---------- f (1 row) SELECT '"NaN"^^xsd:double'::rdfnode <> '"4.2"^^xsd:double'::rdfnode; -- f ?column? ---------- t (1 row) SELECT '"4.2"^^xsd:double'::rdfnode <> '"NaN"^^xsd:double'::rdfnode; -- f ?column? ---------- t (1 row) -- Datatype prefix expansion: these are byte-equal after normalization SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^'::rdfnode; -- t ?column? ---------- f (1 row) -- Different ill-typed literals: behavior depends on policy -- (currently raises ERROR; that's allowed per SPARQL §17.3.1) -- SELECT '"foo"^^xsd:int'::rdfnode <> '"bar"^^xsd:int'::rdfnode; -- Datatype mismatch with ill-typed values: should return f, not error SELECT '"42"^^xsd:int'::rdfnode <> '"42"^^xsd:date'::rdfnode; -- f ?column? ---------- t (1 row) SELECT '"invalid"^^xsd:dateTime'::rdfnode <> '"invalid"^^xsd:time'::rdfnode; -- f ?column? ---------- t (1 row) -- Boolean comparisons SELECT '"true"^^xsd:boolean'::rdfnode <> '"false"^^xsd:boolean'::rdfnode; ?column? ---------- t (1 row) SELECT '"false"^^xsd:boolean'::rdfnode <> '"true"^^xsd:boolean'::rdfnode; ?column? ---------- t (1 row) SELECT '"true"^^xsd:boolean'::rdfnode <> '"true"^^xsd:boolean'::rdfnode; ?column? ---------- f (1 row) SELECT '"false"^^xsd:boolean'::rdfnode <> '"false"^^xsd:boolean'::rdfnode; ?column? ---------- f (1 row) -- Durations SELECT '"P1Y"^^xsd:duration'::rdfnode <> '"-P1Y"^^xsd:duration'::rdfnode; ?column? ---------- t (1 row) SELECT '"-P1Y"^^xsd:duration'::rdfnode <> '"P1Y"^^xsd:duration'::rdfnode; ?column? ---------- t (1 row) SELECT '"-P1Y"^^xsd:duration'::rdfnode <> '"-P1Y"^^xsd:duration'::rdfnode; ?column? ---------- f (1 row) SELECT '"-P1Y"^^xsd:duration'::rdfnode <> '"-P2Y"^^xsd:duration'::rdfnode; ?column? ---------- t (1 row) SELECT '"P7D"^^xsd:duration'::rdfnode <> '"P1W"^^xsd:duration'::rdfnode; ?column? ---------- f (1 row) SELECT '"P1M"^^xsd:duration'::rdfnode <> '"P1M"^^xsd:duration'::rdfnode; ?column? ---------- f (1 row) SELECT '"PT0S"^^xsd:duration'::rdfnode <> '"P0D"^^xsd:duration'::rdfnode; ?column? ---------- f (1 row)