uqa-sql 0.4.0

PostgreSQL-compatible SQL compiler built on libpg_query
Documentation
{
  "postgresql": "PostgreSQL 18.4 (Debian 18.4-1.pgdg13+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit",
  "image": "sha256:a02db8cac496f15b094798a38254f14d6e00741f709360e5e00bb6668ea31636",
  "operators": ["=", "<>", "<", "<=", ">", ">="],
  "cases": [
    {"left": "1.0", "right": "0", "type": "boolean", "values": [false, true, false, false, true, true]},
    {"left": "0", "right": "1.0", "type": "boolean", "values": [false, true, true, true, false, false]},
    {"left": "1.0", "right": "1", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "1", "right": "1.0", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "0.1::numeric", "right": "0.1::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "0.1::double precision", "right": "0.1::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9007199254740993::bigint", "right": "9007199254740992::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9007199254740992::double precision", "right": "9007199254740993::bigint", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9007199254740993::numeric", "right": "9007199254740992::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9007199254740992::double precision", "right": "9007199254740993::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9223372036854774784::bigint", "right": "9223372036854775000::numeric", "type": "boolean", "values": [false, true, true, true, false, false]},
    {"left": "9223372036854775000::numeric", "right": "9223372036854774784::bigint", "type": "boolean", "values": [false, true, false, false, true, true]},
    {"left": "9223372036854774784::double precision", "right": "9223372036854775000::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9223372036854775000::numeric", "right": "9223372036854774784::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9223372036854775807::bigint", "right": "9223372036854775808::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "9223372036854775808::double precision", "right": "9223372036854775807::bigint", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "(-9223372036854775808)::bigint", "right": "(-9223372036854775808)::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "(-9223372036854775808)::double precision", "right": "(-9223372036854775808)::bigint", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "0.1::real", "right": "0.1::numeric", "type": "boolean", "values": [false, true, false, false, true, true]},
    {"left": "0.1::numeric", "right": "0.1::real", "type": "boolean", "values": [false, true, true, true, false, false]},
    {"left": "16777217::integer", "right": "16777216::real", "type": "boolean", "values": [false, true, false, false, true, true]},
    {"left": "16777216::real", "right": "16777217::integer", "type": "boolean", "values": [false, true, true, true, false, false]},
    {"left": "'NaN'::double precision", "right": "'NaN'::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'NaN'::numeric", "right": "'NaN'::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'NaN'::numeric", "right": "'Infinity'::double precision", "type": "boolean", "values": [false, true, false, false, true, true]},
    {"left": "'Infinity'::double precision", "right": "'NaN'::numeric", "type": "boolean", "values": [false, true, true, true, false, false]},
    {"left": "'Infinity'::real", "right": "'Infinity'::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'Infinity'::numeric", "right": "'Infinity'::real", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'-Infinity'::double precision", "right": "'-Infinity'::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'-Infinity'::numeric", "right": "'-Infinity'::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'-0'::double precision", "right": "0.000::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "0.000::numeric", "right": "'-0'::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "'5e-324'::double precision", "right": "5e-324::numeric", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "5e-324::numeric", "right": "'5e-324'::double precision", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "1e-400::numeric", "right": "0::double precision", "sqlstate": "22003"},
    {"left": "0::double precision", "right": "1e-400::numeric", "sqlstate": "22003"},
    {"left": "1e400::numeric", "right": "'Infinity'::double precision", "sqlstate": "22003"},
    {"left": "'Infinity'::double precision", "right": "1e400::numeric", "sqlstate": "22003"},
    {"left": "NULL::numeric", "right": "1::double precision", "type": "boolean", "values": [null, null, null, null, null, null]},
    {"left": "1::double precision", "right": "NULL::numeric", "type": "boolean", "values": [null, null, null, null, null, null]},
    {"left": "NULL::boolean", "right": "0", "sqlstate": "42883"},
    {"left": "0", "right": "NULL::boolean", "sqlstate": "42883"},
    {"left": "'1'", "right": "1.0", "type": "boolean", "values": [true, false, false, true, false, true]},
    {"left": "1.0", "right": "'1'", "type": "boolean", "values": [true, false, false, true, false, true]}
  ],
  "relations": {
    "setup": [
      "CREATE TABLE numeric_comparison (id integer PRIMARY KEY, i bigint, f double precision, n numeric, matched boolean GENERATED ALWAYS AS (i = f) STORED)",
      "INSERT INTO numeric_comparison(id,i,f,n) VALUES (1,9007199254740992,9007199254740992,9007199254740992), (2,9007199254740993,9007199254740992,9007199254740993), (3,9223372036854774784,9223372036854774784,9223372036854775000), (4,0,0.1,0.1), (5,0,0,0.0), (6,0,'-0',0), (7,1,'NaN','NaN'), (8,-1,'-Infinity','-Infinity'), (9,1,'Infinity','Infinity'), (10,NULL,NULL,NULL)"
    ],
    "queries": [
      {"sql": "SELECT id, matched FROM numeric_comparison ORDER BY id", "rows": [[1, true], [2, true], [3, true], [4, false], [5, true], [6, true], [7, false], [8, false], [9, false], [10, null]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE i = f ORDER BY id", "rows": [[1], [2], [3], [5], [6]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE f = n ORDER BY id", "rows": [[1], [2], [3], [4], [5], [6], [7], [8], [9]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE n = i ORDER BY id", "rows": [[1], [2], [5], [6]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE i = 9007199254740992::float8 ORDER BY id", "rows": [[1], [2]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE i > 9007199254740992::float8 ORDER BY id", "rows": [[3]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE n = 9007199254740992::float8 ORDER BY id", "rows": [[1], [2]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE f = 0.1::numeric ORDER BY id", "rows": [[4]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE n = 0.1::float8 ORDER BY id", "rows": [[4]]},
      {"sql": "SELECT id FROM numeric_comparison WHERE n = 9007199254740993::bigint ORDER BY id", "rows": [[2]]},
      {"sql": "SELECT count(DISTINCT n) AS n, count(DISTINCT f) AS f FROM numeric_comparison", "rows": [[8, 7]]},
      {"sql": "SELECT min(id) AS first_id, count(*) AS n FROM numeric_comparison GROUP BY f ORDER BY first_id", "rows": [[1, 2], [3, 1], [4, 1], [5, 2], [7, 1], [8, 1], [9, 1], [10, 1]]},
      {"sql": "SELECT min(id) AS first_id, count(*) AS n FROM numeric_comparison GROUP BY n ORDER BY first_id", "rows": [[1, 1], [2, 1], [3, 1], [4, 1], [5, 2], [7, 1], [8, 1], [9, 1], [10, 1]]},
      {"sql": "SELECT l.id AS left_id, r.id AS right_id FROM numeric_comparison l JOIN numeric_comparison r ON l.i = r.f ORDER BY left_id, right_id", "rows": [[1, 1], [1, 2], [2, 1], [2, 2], [3, 3], [4, 5], [4, 6], [5, 5], [5, 6], [6, 5], [6, 6]]},
      {"sql": "SELECT min(v) = '0'::float8 AS min_correct, max(v) = 'NaN'::float8 AS max_correct FROM (VALUES ('NaN'::float8), ('0'::float8)) t(v)", "rows": [[true, true]]},
      {"sql": "SELECT min(v) = '0'::float8 AS min_correct, max(v) = 'NaN'::float8 AS max_correct FROM (VALUES ('0'::float8), ('NaN'::float8)) t(v)", "rows": [[true, true]]},
      {"sql": "SELECT min(v) = '0'::numeric AS min_correct, max(v) = 'NaN'::numeric AS max_correct FROM (VALUES ('NaN'::numeric), ('0'::numeric)) t(v)", "rows": [[true, true]]},
      {"sql": "SELECT min(v) = '0'::numeric AS min_correct, max(v) = 'NaN'::numeric AS max_correct FROM (VALUES ('0'::numeric), ('NaN'::numeric)) t(v)", "rows": [[true, true]]}
    ],
    "unique": [
      {"sql": "CREATE TABLE numeric_unique (n numeric UNIQUE, f double precision UNIQUE)"},
      {"sql": "INSERT INTO numeric_unique VALUES (9007199254740992,9007199254740992)"},
      {"sql": "INSERT INTO numeric_unique VALUES (9007199254740993,NULL)"},
      {"sql": "INSERT INTO numeric_unique VALUES (NULL,9007199254740993)", "sqlstate": "23505"},
      {"sql": "INSERT INTO numeric_unique VALUES (0,0)"},
      {"sql": "INSERT INTO numeric_unique VALUES (NULL,'-0')", "sqlstate": "23505"},
      {"sql": "INSERT INTO numeric_unique VALUES (0.000,NULL)", "sqlstate": "23505"},
      {"sql": "INSERT INTO numeric_unique VALUES ('NaN','NaN')"},
      {"sql": "INSERT INTO numeric_unique VALUES ('NaN',NULL)", "sqlstate": "23505"},
      {"sql": "INSERT INTO numeric_unique VALUES (NULL,'NaN')", "sqlstate": "23505"}
    ]
  }
}