From 6198ac395a6ed0de6567fee10daa4d9d89fea3b1 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sun, 18 Jan 2026 17:31:11 -0500 Subject: [PATCH] ide: add builtin operators & parser fix --- crates/squawk_ide/src/builtins.sql | 1598 +++++++++++++++++ crates/squawk_ide/src/generated/keywords.rs | 3 + crates/squawk_ide/src/quote.rs | 12 +- .../src/generated/syntax_kind.rs | 3 + .../squawk_parser/src/generated/token_sets.rs | 3 + crates/squawk_parser/src/grammar.rs | 2 +- .../tests/data/ok/create_function.sql | 6 + .../snapshots/tests__create_function_ok.snap | 74 + .../squawk_syntax/src/ast/generated/nodes.rs | 3 + .../squawk_syntax/src/ast/generated/tokens.rs | 3 + crates/xtask/src/codegen.rs | 30 +- crates/xtask/src/sync_builtins.rs | 45 +- 12 files changed, 1764 insertions(+), 18 deletions(-) diff --git a/crates/squawk_ide/src/builtins.sql b/crates/squawk_ide/src/builtins.sql index 6f6525ce..b24577b3 100644 --- a/crates/squawk_ide/src/builtins.sql +++ b/crates/squawk_ide/src/builtins.sql @@ -7955,3 +7955,1601 @@ create function pg_catalog.xpath_exists(text, xml) returns boolean language inte create function pg_catalog.xpath_exists(text, xml, text[]) returns boolean language internal; +create operator pg_catalog.!! (rightarg = tsquery); + +create operator pg_catalog.!~ (leftarg = text, rightarg = text); + +create operator pg_catalog.!~ (leftarg = character, rightarg = text); + +create operator pg_catalog.!~ (leftarg = name, rightarg = text); + +create operator pg_catalog.!~* (leftarg = name, rightarg = text); + +create operator pg_catalog.!~* (leftarg = text, rightarg = text); + +create operator pg_catalog.!~* (leftarg = character, rightarg = text); + +create operator pg_catalog.!~~ (leftarg = character, rightarg = text); + +create operator pg_catalog.!~~ (leftarg = name, rightarg = text); + +create operator pg_catalog.!~~ (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.!~~ (leftarg = text, rightarg = text); + +create operator pg_catalog.!~~* (leftarg = text, rightarg = text); + +create operator pg_catalog.!~~* (leftarg = character, rightarg = text); + +create operator pg_catalog.!~~* (leftarg = name, rightarg = text); + +create operator pg_catalog.# (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.# (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.# (leftarg = integer, rightarg = integer); + +create operator pg_catalog.# (leftarg = box, rightarg = box); + +create operator pg_catalog.# (rightarg = path); + +create operator pg_catalog.# (leftarg = line, rightarg = line); + +create operator pg_catalog.# (leftarg = bit, rightarg = bit); + +create operator pg_catalog.# (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.# (rightarg = polygon); + +create operator pg_catalog.## (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.## (leftarg = point, rightarg = line); + +create operator pg_catalog.## (leftarg = point, rightarg = lseg); + +create operator pg_catalog.## (leftarg = point, rightarg = box); + +create operator pg_catalog.## (leftarg = lseg, rightarg = box); + +create operator pg_catalog.## (leftarg = line, rightarg = lseg); + +create operator pg_catalog.#- (leftarg = jsonb, rightarg = text[]); + +create operator pg_catalog.#> (leftarg = jsonb, rightarg = text[]); + +create operator pg_catalog.#> (leftarg = json, rightarg = text[]); + +create operator pg_catalog.#>> (leftarg = json, rightarg = text[]); + +create operator pg_catalog.#>> (leftarg = jsonb, rightarg = text[]); + +create operator pg_catalog.% (leftarg = integer, rightarg = integer); + +create operator pg_catalog.% (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.% (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.% (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.& (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.& (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.& (leftarg = integer, rightarg = integer); + +create operator pg_catalog.& (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.& (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.& (leftarg = inet, rightarg = inet); + +create operator pg_catalog.& (leftarg = bit, rightarg = bit); + +create operator pg_catalog.&& (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.&& (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.&& (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.&& (leftarg = inet, rightarg = inet); + +create operator pg_catalog.&& (leftarg = box, rightarg = box); + +create operator pg_catalog.&& (leftarg = circle, rightarg = circle); + +create operator pg_catalog.&& (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.&& (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.&& (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.&& (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.&< (leftarg = circle, rightarg = circle); + +create operator pg_catalog.&< (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.&< (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.&< (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.&< (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.&< (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.&< (leftarg = box, rightarg = box); + +create operator pg_catalog.&<| (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.&<| (leftarg = circle, rightarg = circle); + +create operator pg_catalog.&<| (leftarg = box, rightarg = box); + +create operator pg_catalog.&> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.&> (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.&> (leftarg = box, rightarg = box); + +create operator pg_catalog.&> (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.&> (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.&> (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.&> (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.* (leftarg = box, rightarg = point); + +create operator pg_catalog.* (leftarg = real, rightarg = double precision); + +create operator pg_catalog.* (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.* (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.* (leftarg = integer, rightarg = integer); + +create operator pg_catalog.* (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.* (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.* (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.* (leftarg = real, rightarg = real); + +create operator pg_catalog.* (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.* (leftarg = double precision, rightarg = interval); + +create operator pg_catalog.* (leftarg = interval, rightarg = double precision); + +create operator pg_catalog.* (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.* (leftarg = circle, rightarg = point); + +create operator pg_catalog.* (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.* (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.* (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.* (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.* (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.* (leftarg = point, rightarg = point); + +create operator pg_catalog.* (leftarg = path, rightarg = point); + +create operator pg_catalog.* (leftarg = double precision, rightarg = real); + +create operator pg_catalog.* (leftarg = money, rightarg = real); + +create operator pg_catalog.* (leftarg = real, rightarg = money); + +create operator pg_catalog.* (leftarg = money, rightarg = double precision); + +create operator pg_catalog.* (leftarg = money, rightarg = bigint); + +create operator pg_catalog.* (leftarg = money, rightarg = integer); + +create operator pg_catalog.* (leftarg = money, rightarg = smallint); + +create operator pg_catalog.* (leftarg = double precision, rightarg = money); + +create operator pg_catalog.* (leftarg = bigint, rightarg = money); + +create operator pg_catalog.* (leftarg = integer, rightarg = money); + +create operator pg_catalog.* (leftarg = smallint, rightarg = money); + +create operator pg_catalog.*< (leftarg = record, rightarg = record); + +create operator pg_catalog.*<= (leftarg = record, rightarg = record); + +create operator pg_catalog.*<> (leftarg = record, rightarg = record); + +create operator pg_catalog.*= (leftarg = record, rightarg = record); + +create operator pg_catalog.*> (leftarg = record, rightarg = record); + +create operator pg_catalog.*>= (leftarg = record, rightarg = record); + +create operator pg_catalog.+ (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.+ (leftarg = real, rightarg = double precision); + +create operator pg_catalog.+ (leftarg = pg_lsn, rightarg = numeric); + +create operator pg_catalog.+ (leftarg = numeric, rightarg = pg_lsn); + +create operator pg_catalog.+ (leftarg = aclitem[], rightarg = aclitem); + +create operator pg_catalog.+ (leftarg = timestamp without time zone, rightarg = interval); + +create operator pg_catalog.+ (leftarg = date, rightarg = integer); + +create operator pg_catalog.+ (leftarg = date, rightarg = interval); + +create operator pg_catalog.+ (leftarg = box, rightarg = point); + +create operator pg_catalog.+ (leftarg = integer, rightarg = date); + +create operator pg_catalog.+ (leftarg = interval, rightarg = timestamp with time zone); + +create operator pg_catalog.+ (leftarg = circle, rightarg = point); + +create operator pg_catalog.+ (leftarg = double precision, rightarg = real); + +create operator pg_catalog.+ (leftarg = timestamp with time zone, rightarg = interval); + +create operator pg_catalog.+ (rightarg = bigint); + +create operator pg_catalog.+ (leftarg = interval, rightarg = interval); + +create operator pg_catalog.+ (leftarg = money, rightarg = money); + +create operator pg_catalog.+ (leftarg = date, rightarg = time without time zone); + +create operator pg_catalog.+ (leftarg = date, rightarg = time with time zone); + +create operator pg_catalog.+ (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.+ (leftarg = integer, rightarg = integer); + +create operator pg_catalog.+ (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.+ (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.+ (leftarg = inet, rightarg = bigint); + +create operator pg_catalog.+ (leftarg = time with time zone, rightarg = interval); + +create operator pg_catalog.+ (leftarg = bigint, rightarg = inet); + +create operator pg_catalog.+ (leftarg = interval, rightarg = time without time zone); + +create operator pg_catalog.+ (leftarg = time without time zone, rightarg = interval); + +create operator pg_catalog.+ (leftarg = real, rightarg = real); + +create operator pg_catalog.+ (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.+ (leftarg = time without time zone, rightarg = date); + +create operator pg_catalog.+ (leftarg = time with time zone, rightarg = date); + +create operator pg_catalog.+ (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.+ (leftarg = path, rightarg = point); + +create operator pg_catalog.+ (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.+ (rightarg = smallint); + +create operator pg_catalog.+ (rightarg = integer); + +create operator pg_catalog.+ (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.+ (leftarg = path, rightarg = path); + +create operator pg_catalog.+ (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.+ (leftarg = point, rightarg = point); + +create operator pg_catalog.+ (leftarg = interval, rightarg = date); + +create operator pg_catalog.+ (leftarg = interval, rightarg = time with time zone); + +create operator pg_catalog.+ (leftarg = interval, rightarg = timestamp without time zone); + +create operator pg_catalog.+ (rightarg = real); + +create operator pg_catalog.+ (rightarg = double precision); + +create operator pg_catalog.+ (rightarg = numeric); + +create operator pg_catalog.+ (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.+ (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.+ (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.- (leftarg = inet, rightarg = bigint); + +create operator pg_catalog.- (leftarg = time with time zone, rightarg = interval); + +create operator pg_catalog.- (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.- (leftarg = integer, rightarg = integer); + +create operator pg_catalog.- (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.- (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.- (rightarg = integer); + +create operator pg_catalog.- (rightarg = smallint); + +create operator pg_catalog.- (rightarg = real); + +create operator pg_catalog.- (rightarg = double precision); + +create operator pg_catalog.- (leftarg = real, rightarg = real); + +create operator pg_catalog.- (leftarg = money, rightarg = money); + +create operator pg_catalog.- (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.- (leftarg = aclitem[], rightarg = aclitem); + +create operator pg_catalog.- (leftarg = jsonb, rightarg = text); + +create operator pg_catalog.- (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.- (leftarg = pg_lsn, rightarg = numeric); + +create operator pg_catalog.- (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.- (leftarg = timestamp without time zone, rightarg = interval); + +create operator pg_catalog.- (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.- (leftarg = circle, rightarg = point); + +create operator pg_catalog.- (leftarg = date, rightarg = date); + +create operator pg_catalog.- (leftarg = date, rightarg = integer); + +create operator pg_catalog.- (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.- (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.- (leftarg = double precision, rightarg = real); + +create operator pg_catalog.- (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.- (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.- (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.- (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.- (leftarg = point, rightarg = point); + +create operator pg_catalog.- (leftarg = path, rightarg = point); + +create operator pg_catalog.- (leftarg = interval, rightarg = interval); + +create operator pg_catalog.- (rightarg = interval); + +create operator pg_catalog.- (leftarg = timestamp with time zone, rightarg = interval); + +create operator pg_catalog.- (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.- (leftarg = date, rightarg = interval); + +create operator pg_catalog.- (leftarg = box, rightarg = point); + +create operator pg_catalog.- (leftarg = jsonb, rightarg = integer); + +create operator pg_catalog.- (leftarg = jsonb, rightarg = text[]); + +create operator pg_catalog.- (leftarg = real, rightarg = double precision); + +create operator pg_catalog.- (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.- (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.- (rightarg = numeric); + +create operator pg_catalog.- (rightarg = bigint); + +create operator pg_catalog.- (leftarg = time without time zone, rightarg = interval); + +create operator pg_catalog.- (leftarg = inet, rightarg = inet); + +create operator pg_catalog.-> (leftarg = jsonb, rightarg = integer); + +create operator pg_catalog.-> (leftarg = json, rightarg = integer); + +create operator pg_catalog.-> (leftarg = json, rightarg = text); + +create operator pg_catalog.-> (leftarg = jsonb, rightarg = text); + +create operator pg_catalog.->> (leftarg = json, rightarg = text); + +create operator pg_catalog.->> (leftarg = jsonb, rightarg = text); + +create operator pg_catalog.->> (leftarg = jsonb, rightarg = integer); + +create operator pg_catalog.->> (leftarg = json, rightarg = integer); + +create operator pg_catalog.-|- (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.-|- (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.-|- (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.-|- (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog./ (leftarg = money, rightarg = double precision); + +create operator pg_catalog./ (leftarg = money, rightarg = integer); + +create operator pg_catalog./ (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog./ (leftarg = bigint, rightarg = integer); + +create operator pg_catalog./ (leftarg = money, rightarg = smallint); + +create operator pg_catalog./ (leftarg = integer, rightarg = bigint); + +create operator pg_catalog./ (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog./ (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog./ (leftarg = double precision, rightarg = real); + +create operator pg_catalog./ (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog./ (leftarg = interval, rightarg = double precision); + +create operator pg_catalog./ (leftarg = point, rightarg = point); + +create operator pg_catalog./ (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog./ (leftarg = path, rightarg = point); + +create operator pg_catalog./ (leftarg = real, rightarg = real); + +create operator pg_catalog./ (leftarg = integer, rightarg = smallint); + +create operator pg_catalog./ (leftarg = smallint, rightarg = integer); + +create operator pg_catalog./ (leftarg = integer, rightarg = integer); + +create operator pg_catalog./ (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog./ (leftarg = money, rightarg = money); + +create operator pg_catalog./ (leftarg = box, rightarg = point); + +create operator pg_catalog./ (leftarg = money, rightarg = real); + +create operator pg_catalog./ (leftarg = real, rightarg = double precision); + +create operator pg_catalog./ (leftarg = money, rightarg = bigint); + +create operator pg_catalog./ (leftarg = circle, rightarg = point); + +create operator pg_catalog.< (leftarg = date, rightarg = date); + +create operator pg_catalog.< (leftarg = xid8, rightarg = xid8); + +create operator pg_catalog.< (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.< (leftarg = uuid, rightarg = uuid); + +create operator pg_catalog.< (leftarg = text, rightarg = name); + +create operator pg_catalog.< (leftarg = text, rightarg = text); + +create operator pg_catalog.< (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.< (leftarg = path, rightarg = path); + +create operator pg_catalog.< (leftarg = real, rightarg = double precision); + +create operator pg_catalog.< (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.< (leftarg = interval, rightarg = interval); + +create operator pg_catalog.< (leftarg = time with time zone, rightarg = time with time zone); + +create operator pg_catalog.< (leftarg = anyenum, rightarg = anyenum); + +create operator pg_catalog.< (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.< (leftarg = timestamp with time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.< (leftarg = tid, rightarg = tid); + +create operator pg_catalog.< (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.< (leftarg = boolean, rightarg = boolean); + +create operator pg_catalog.< (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.< (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.< (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.< (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.< (leftarg = record, rightarg = record); + +create operator pg_catalog.< (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.< (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.< (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.< (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.< (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.< (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.< (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.< (leftarg = real, rightarg = real); + +create operator pg_catalog.< (leftarg = inet, rightarg = inet); + +create operator pg_catalog.< (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.< (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.< (leftarg = date, rightarg = timestamp without time zone); + +create operator pg_catalog.< (leftarg = "char", rightarg = "char"); + +create operator pg_catalog.< (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.< (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.< (leftarg = bit, rightarg = bit); + +create operator pg_catalog.< (leftarg = date, rightarg = timestamp with time zone); + +create operator pg_catalog.< (leftarg = timestamp without time zone, rightarg = date); + +create operator pg_catalog.< (leftarg = timestamp with time zone, rightarg = date); + +create operator pg_catalog.< (leftarg = name, rightarg = text); + +create operator pg_catalog.< (leftarg = money, rightarg = money); + +create operator pg_catalog.< (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.< (leftarg = timestamp without time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.< (leftarg = integer, rightarg = integer); + +create operator pg_catalog.< (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.< (leftarg = box, rightarg = box); + +create operator pg_catalog.< (leftarg = oid, rightarg = oid); + +create operator pg_catalog.< (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.< (leftarg = double precision, rightarg = real); + +create operator pg_catalog.< (leftarg = circle, rightarg = circle); + +create operator pg_catalog.< (leftarg = oidvector, rightarg = oidvector); + +create operator pg_catalog.< (leftarg = name, rightarg = name); + +create operator pg_catalog.< (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.< (leftarg = character, rightarg = character); + +create operator pg_catalog.< (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.<-> (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.<-> (leftarg = point, rightarg = point); + +create operator pg_catalog.<-> (leftarg = point, rightarg = line); + +create operator pg_catalog.<-> (leftarg = line, rightarg = point); + +create operator pg_catalog.<-> (leftarg = point, rightarg = lseg); + +create operator pg_catalog.<-> (leftarg = lseg, rightarg = point); + +create operator pg_catalog.<-> (leftarg = point, rightarg = box); + +create operator pg_catalog.<-> (leftarg = box, rightarg = point); + +create operator pg_catalog.<-> (leftarg = lseg, rightarg = line); + +create operator pg_catalog.<-> (leftarg = line, rightarg = lseg); + +create operator pg_catalog.<-> (leftarg = lseg, rightarg = box); + +create operator pg_catalog.<-> (leftarg = box, rightarg = lseg); + +create operator pg_catalog.<-> (leftarg = point, rightarg = path); + +create operator pg_catalog.<-> (leftarg = path, rightarg = point); + +create operator pg_catalog.<-> (leftarg = box, rightarg = box); + +create operator pg_catalog.<-> (leftarg = path, rightarg = path); + +create operator pg_catalog.<-> (leftarg = line, rightarg = line); + +create operator pg_catalog.<-> (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.<-> (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.<-> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.<-> (leftarg = point, rightarg = circle); + +create operator pg_catalog.<-> (leftarg = circle, rightarg = point); + +create operator pg_catalog.<-> (leftarg = point, rightarg = polygon); + +create operator pg_catalog.<-> (leftarg = polygon, rightarg = point); + +create operator pg_catalog.<-> (leftarg = circle, rightarg = polygon); + +create operator pg_catalog.<-> (leftarg = polygon, rightarg = circle); + +create operator pg_catalog.<< (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.<< (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.<< (leftarg = integer, rightarg = integer); + +create operator pg_catalog.<< (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.<< (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.<< (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.<< (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.<< (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.<< (leftarg = point, rightarg = point); + +create operator pg_catalog.<< (leftarg = inet, rightarg = inet); + +create operator pg_catalog.<< (leftarg = circle, rightarg = circle); + +create operator pg_catalog.<< (leftarg = box, rightarg = box); + +create operator pg_catalog.<< (leftarg = bit, rightarg = integer); + +create operator pg_catalog.<<= (leftarg = inet, rightarg = inet); + +create operator pg_catalog.<<| (leftarg = circle, rightarg = circle); + +create operator pg_catalog.<<| (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.<<| (leftarg = box, rightarg = box); + +create operator pg_catalog.<<| (leftarg = point, rightarg = point); + +create operator pg_catalog.<= (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.<= (leftarg = boolean, rightarg = boolean); + +create operator pg_catalog.<= (leftarg = double precision, rightarg = real); + +create operator pg_catalog.<= (leftarg = record, rightarg = record); + +create operator pg_catalog.<= (leftarg = integer, rightarg = integer); + +create operator pg_catalog.<= (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.<= (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.<= (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.<= (leftarg = bit, rightarg = bit); + +create operator pg_catalog.<= (leftarg = box, rightarg = box); + +create operator pg_catalog.<= (leftarg = date, rightarg = date); + +create operator pg_catalog.<= (leftarg = money, rightarg = money); + +create operator pg_catalog.<= (leftarg = timestamp with time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.<= (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.<= (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.<= (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.<= (leftarg = timestamp without time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.<= (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.<= (leftarg = timestamp with time zone, rightarg = date); + +create operator pg_catalog.<= (leftarg = interval, rightarg = interval); + +create operator pg_catalog.<= (leftarg = name, rightarg = text); + +create operator pg_catalog.<= (leftarg = path, rightarg = path); + +create operator pg_catalog.<= (leftarg = timestamp without time zone, rightarg = date); + +create operator pg_catalog.<= (leftarg = date, rightarg = timestamp with time zone); + +create operator pg_catalog.<= (leftarg = date, rightarg = timestamp without time zone); + +create operator pg_catalog.<= (leftarg = circle, rightarg = circle); + +create operator pg_catalog.<= (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.<= (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.<= (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.<= (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.<= (leftarg = text, rightarg = name); + +create operator pg_catalog.<= (leftarg = text, rightarg = text); + +create operator pg_catalog.<= (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.<= (leftarg = name, rightarg = name); + +create operator pg_catalog.<= (leftarg = uuid, rightarg = uuid); + +create operator pg_catalog.<= (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.<= (leftarg = "char", rightarg = "char"); + +create operator pg_catalog.<= (leftarg = real, rightarg = double precision); + +create operator pg_catalog.<= (leftarg = real, rightarg = real); + +create operator pg_catalog.<= (leftarg = anyenum, rightarg = anyenum); + +create operator pg_catalog.<= (leftarg = oidvector, rightarg = oidvector); + +create operator pg_catalog.<= (leftarg = oid, rightarg = oid); + +create operator pg_catalog.<= (leftarg = xid8, rightarg = xid8); + +create operator pg_catalog.<= (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.<= (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.<= (leftarg = character, rightarg = character); + +create operator pg_catalog.<= (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.<= (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.<= (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.<= (leftarg = tid, rightarg = tid); + +create operator pg_catalog.<= (leftarg = time with time zone, rightarg = time with time zone); + +create operator pg_catalog.<= (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.<= (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.<= (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.<= (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.<= (leftarg = inet, rightarg = inet); + +create operator pg_catalog.<= (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.<= (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.<> (leftarg = oid, rightarg = oid); + +create operator pg_catalog.<> (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.<> (leftarg = character, rightarg = character); + +create operator pg_catalog.<> (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.<> (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.<> (leftarg = text, rightarg = name); + +create operator pg_catalog.<> (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.<> (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.<> (leftarg = timestamp with time zone, rightarg = date); + +create operator pg_catalog.<> (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.<> (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.<> (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.<> (leftarg = interval, rightarg = interval); + +create operator pg_catalog.<> (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.<> (leftarg = boolean, rightarg = boolean); + +create operator pg_catalog.<> (leftarg = timestamp without time zone, rightarg = date); + +create operator pg_catalog.<> (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.<> (leftarg = text, rightarg = text); + +create operator pg_catalog.<> (leftarg = time with time zone, rightarg = time with time zone); + +create operator pg_catalog.<> (leftarg = date, rightarg = timestamp with time zone); + +create operator pg_catalog.<> (leftarg = point, rightarg = point); + +create operator pg_catalog.<> (leftarg = date, rightarg = timestamp without time zone); + +create operator pg_catalog.<> (leftarg = real, rightarg = double precision); + +create operator pg_catalog.<> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.<> (leftarg = name, rightarg = text); + +create operator pg_catalog.<> (leftarg = integer, rightarg = integer); + +create operator pg_catalog.<> (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.<> (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.<> (leftarg = record, rightarg = record); + +create operator pg_catalog.<> (leftarg = uuid, rightarg = uuid); + +create operator pg_catalog.<> (leftarg = name, rightarg = name); + +create operator pg_catalog.<> (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.<> (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.<> (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.<> (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.<> (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.<> (leftarg = tid, rightarg = tid); + +create operator pg_catalog.<> (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.<> (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.<> (leftarg = "char", rightarg = "char"); + +create operator pg_catalog.<> (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.<> (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.<> (leftarg = xid, rightarg = xid); + +create operator pg_catalog.<> (leftarg = real, rightarg = real); + +create operator pg_catalog.<> (leftarg = double precision, rightarg = real); + +create operator pg_catalog.<> (leftarg = anyenum, rightarg = anyenum); + +create operator pg_catalog.<> (leftarg = date, rightarg = date); + +create operator pg_catalog.<> (leftarg = bit, rightarg = bit); + +create operator pg_catalog.<> (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.<> (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.<> (leftarg = xid, rightarg = integer); + +create operator pg_catalog.<> (leftarg = timestamp with time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.<> (leftarg = inet, rightarg = inet); + +create operator pg_catalog.<> (leftarg = xid8, rightarg = xid8); + +create operator pg_catalog.<> (leftarg = money, rightarg = money); + +create operator pg_catalog.<> (leftarg = oidvector, rightarg = oidvector); + +create operator pg_catalog.<> (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.<> (leftarg = timestamp without time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.<> (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.<@ (leftarg = anyelement, rightarg = anymultirange); + +create operator pg_catalog.<@ (leftarg = lseg, rightarg = box); + +create operator pg_catalog.<@ (leftarg = point, rightarg = path); + +create operator pg_catalog.<@ (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.<@ (leftarg = point, rightarg = box); + +create operator pg_catalog.<@ (leftarg = box, rightarg = box); + +create operator pg_catalog.<@ (leftarg = point, rightarg = circle); + +create operator pg_catalog.<@ (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.<@ (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.<@ (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.<@ (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.<@ (leftarg = point, rightarg = lseg); + +create operator pg_catalog.<@ (leftarg = lseg, rightarg = line); + +create operator pg_catalog.<@ (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.<@ (leftarg = point, rightarg = polygon); + +create operator pg_catalog.<@ (leftarg = anyelement, rightarg = anyrange); + +create operator pg_catalog.<@ (leftarg = circle, rightarg = circle); + +create operator pg_catalog.<@ (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.<@ (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.<@ (leftarg = point, rightarg = line); + +create operator pg_catalog.<^ (leftarg = point, rightarg = point); + +create operator pg_catalog.<^ (leftarg = box, rightarg = box); + +create operator pg_catalog.= (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.= (leftarg = time with time zone, rightarg = time with time zone); + +create operator pg_catalog.= (leftarg = date, rightarg = date); + +create operator pg_catalog.= (leftarg = real, rightarg = double precision); + +create operator pg_catalog.= (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.= (leftarg = double precision, rightarg = real); + +create operator pg_catalog.= (leftarg = character, rightarg = character); + +create operator pg_catalog.= (leftarg = aclitem, rightarg = aclitem); + +create operator pg_catalog.= (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.= (leftarg = money, rightarg = money); + +create operator pg_catalog.= (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.= (leftarg = interval, rightarg = interval); + +create operator pg_catalog.= (leftarg = path, rightarg = path); + +create operator pg_catalog.= (leftarg = circle, rightarg = circle); + +create operator pg_catalog.= (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.= (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.= (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.= (leftarg = real, rightarg = real); + +create operator pg_catalog.= (leftarg = oidvector, rightarg = oidvector); + +create operator pg_catalog.= (leftarg = oid, rightarg = oid); + +create operator pg_catalog.= (leftarg = line, rightarg = line); + +create operator pg_catalog.= (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.= (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.= (leftarg = inet, rightarg = inet); + +create operator pg_catalog.= (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.= (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.= (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.= (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.= (leftarg = box, rightarg = box); + +create operator pg_catalog.= (leftarg = bit, rightarg = bit); + +create operator pg_catalog.= (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.= (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.= (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.= (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.= (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.= (leftarg = tid, rightarg = tid); + +create operator pg_catalog.= (leftarg = record, rightarg = record); + +create operator pg_catalog.= (leftarg = cid, rightarg = cid); + +create operator pg_catalog.= (leftarg = boolean, rightarg = boolean); + +create operator pg_catalog.= (leftarg = xid8, rightarg = xid8); + +create operator pg_catalog.= (leftarg = xid, rightarg = integer); + +create operator pg_catalog.= (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.= (leftarg = xid, rightarg = xid); + +create operator pg_catalog.= (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.= (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.= (leftarg = text, rightarg = name); + +create operator pg_catalog.= (leftarg = date, rightarg = timestamp without time zone); + +create operator pg_catalog.= (leftarg = date, rightarg = timestamp with time zone); + +create operator pg_catalog.= (leftarg = timestamp without time zone, rightarg = date); + +create operator pg_catalog.= (leftarg = timestamp with time zone, rightarg = date); + +create operator pg_catalog.= (leftarg = name, rightarg = text); + +create operator pg_catalog.= (leftarg = timestamp without time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.= (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.= (leftarg = timestamp with time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.= (leftarg = text, rightarg = text); + +create operator pg_catalog.= (leftarg = integer, rightarg = integer); + +create operator pg_catalog.= (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.= (leftarg = name, rightarg = name); + +create operator pg_catalog.= (leftarg = "char", rightarg = "char"); + +create operator pg_catalog.= (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.= (leftarg = anyenum, rightarg = anyenum); + +create operator pg_catalog.= (leftarg = uuid, rightarg = uuid); + +create operator pg_catalog.= (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.> (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.> (leftarg = record, rightarg = record); + +create operator pg_catalog.> (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.> (leftarg = tid, rightarg = tid); + +create operator pg_catalog.> (leftarg = boolean, rightarg = boolean); + +create operator pg_catalog.> (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.> (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.> (leftarg = time with time zone, rightarg = time with time zone); + +create operator pg_catalog.> (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.> (leftarg = oid, rightarg = oid); + +create operator pg_catalog.> (leftarg = date, rightarg = date); + +create operator pg_catalog.> (leftarg = xid8, rightarg = xid8); + +create operator pg_catalog.> (leftarg = oidvector, rightarg = oidvector); + +create operator pg_catalog.> (leftarg = real, rightarg = real); + +create operator pg_catalog.> (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.> (leftarg = "char", rightarg = "char"); + +create operator pg_catalog.> (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.> (leftarg = uuid, rightarg = uuid); + +create operator pg_catalog.> (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.> (leftarg = name, rightarg = name); + +create operator pg_catalog.> (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.> (leftarg = text, rightarg = name); + +create operator pg_catalog.> (leftarg = text, rightarg = text); + +create operator pg_catalog.> (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.> (leftarg = double precision, rightarg = real); + +create operator pg_catalog.> (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.> (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.> (leftarg = character, rightarg = character); + +create operator pg_catalog.> (leftarg = date, rightarg = timestamp without time zone); + +create operator pg_catalog.> (leftarg = name, rightarg = text); + +create operator pg_catalog.> (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.> (leftarg = date, rightarg = timestamp with time zone); + +create operator pg_catalog.> (leftarg = path, rightarg = path); + +create operator pg_catalog.> (leftarg = timestamp without time zone, rightarg = date); + +create operator pg_catalog.> (leftarg = interval, rightarg = interval); + +create operator pg_catalog.> (leftarg = timestamp with time zone, rightarg = date); + +create operator pg_catalog.> (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.> (leftarg = timestamp without time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.> (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.> (leftarg = real, rightarg = double precision); + +create operator pg_catalog.> (leftarg = box, rightarg = box); + +create operator pg_catalog.> (leftarg = bit, rightarg = bit); + +create operator pg_catalog.> (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.> (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.> (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.> (leftarg = integer, rightarg = integer); + +create operator pg_catalog.> (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.> (leftarg = money, rightarg = money); + +create operator pg_catalog.> (leftarg = anyenum, rightarg = anyenum); + +create operator pg_catalog.> (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.> (leftarg = inet, rightarg = inet); + +create operator pg_catalog.> (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.> (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.> (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.> (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.> (leftarg = timestamp with time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.> (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.>= (leftarg = inet, rightarg = inet); + +create operator pg_catalog.>= (leftarg = bigint, rightarg = smallint); + +create operator pg_catalog.>= (leftarg = tid, rightarg = tid); + +create operator pg_catalog.>= (leftarg = money, rightarg = money); + +create operator pg_catalog.>= (leftarg = character, rightarg = character); + +create operator pg_catalog.>= (leftarg = date, rightarg = timestamp with time zone); + +create operator pg_catalog.>= (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.>= (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.>= (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.>= (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.>= (leftarg = name, rightarg = text); + +create operator pg_catalog.>= (leftarg = record, rightarg = record); + +create operator pg_catalog.>= (leftarg = integer, rightarg = smallint); + +create operator pg_catalog.>= (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.>= (leftarg = date, rightarg = date); + +create operator pg_catalog.>= (leftarg = time with time zone, rightarg = time with time zone); + +create operator pg_catalog.>= (leftarg = xid8, rightarg = xid8); + +create operator pg_catalog.>= (leftarg = timestamp without time zone, rightarg = date); + +create operator pg_catalog.>= (leftarg = oid, rightarg = oid); + +create operator pg_catalog.>= (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.>= (leftarg = interval, rightarg = interval); + +create operator pg_catalog.>= (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.>= (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.>= (leftarg = oidvector, rightarg = oidvector); + +create operator pg_catalog.>= (leftarg = path, rightarg = path); + +create operator pg_catalog.>= (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.>= (leftarg = boolean, rightarg = boolean); + +create operator pg_catalog.>= (leftarg = real, rightarg = real); + +create operator pg_catalog.>= (leftarg = anyenum, rightarg = anyenum); + +create operator pg_catalog.>= (leftarg = timestamp with time zone, rightarg = date); + +create operator pg_catalog.>= (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.>= (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.>= (leftarg = "char", rightarg = "char"); + +create operator pg_catalog.>= (leftarg = uuid, rightarg = uuid); + +create operator pg_catalog.>= (leftarg = timestamp with time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.>= (leftarg = time without time zone, rightarg = time without time zone); + +create operator pg_catalog.>= (leftarg = pg_lsn, rightarg = pg_lsn); + +create operator pg_catalog.>= (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.>= (leftarg = name, rightarg = name); + +create operator pg_catalog.>= (leftarg = real, rightarg = double precision); + +create operator pg_catalog.>= (leftarg = timestamp without time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.>= (leftarg = timestamp without time zone, rightarg = timestamp with time zone); + +create operator pg_catalog.>= (leftarg = text, rightarg = name); + +create operator pg_catalog.>= (leftarg = integer, rightarg = integer); + +create operator pg_catalog.>= (leftarg = timestamp with time zone, rightarg = timestamp without time zone); + +create operator pg_catalog.>= (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.>= (leftarg = text, rightarg = text); + +create operator pg_catalog.>= (leftarg = double precision, rightarg = real); + +create operator pg_catalog.>= (leftarg = circle, rightarg = circle); + +create operator pg_catalog.>= (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.>= (leftarg = box, rightarg = box); + +create operator pg_catalog.>= (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.>= (leftarg = smallint, rightarg = bigint); + +create operator pg_catalog.>= (leftarg = integer, rightarg = bigint); + +create operator pg_catalog.>= (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.>= (leftarg = date, rightarg = timestamp without time zone); + +create operator pg_catalog.>= (leftarg = bit, rightarg = bit); + +create operator pg_catalog.>= (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.>> (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.>> (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.>> (leftarg = box, rightarg = box); + +create operator pg_catalog.>> (leftarg = point, rightarg = point); + +create operator pg_catalog.>> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.>> (leftarg = inet, rightarg = inet); + +create operator pg_catalog.>> (leftarg = bit, rightarg = integer); + +create operator pg_catalog.>> (leftarg = smallint, rightarg = integer); + +create operator pg_catalog.>> (leftarg = integer, rightarg = integer); + +create operator pg_catalog.>> (leftarg = bigint, rightarg = integer); + +create operator pg_catalog.>> (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.>> (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.>> (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.>>= (leftarg = inet, rightarg = inet); + +create operator pg_catalog.>^ (leftarg = box, rightarg = box); + +create operator pg_catalog.>^ (leftarg = point, rightarg = point); + +create operator pg_catalog.? (leftarg = jsonb, rightarg = text); + +create operator pg_catalog.?# (leftarg = lseg, rightarg = box); + +create operator pg_catalog.?# (leftarg = line, rightarg = line); + +create operator pg_catalog.?# (leftarg = box, rightarg = box); + +create operator pg_catalog.?# (leftarg = path, rightarg = path); + +create operator pg_catalog.?# (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.?# (leftarg = lseg, rightarg = line); + +create operator pg_catalog.?# (leftarg = line, rightarg = box); + +create operator pg_catalog.?& (leftarg = jsonb, rightarg = text[]); + +create operator pg_catalog.?- (rightarg = lseg); + +create operator pg_catalog.?- (leftarg = point, rightarg = point); + +create operator pg_catalog.?- (rightarg = line); + +create operator pg_catalog.?-| (leftarg = line, rightarg = line); + +create operator pg_catalog.?-| (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.?| (rightarg = line); + +create operator pg_catalog.?| (leftarg = point, rightarg = point); + +create operator pg_catalog.?| (leftarg = jsonb, rightarg = text[]); + +create operator pg_catalog.?| (rightarg = lseg); + +create operator pg_catalog.?|| (leftarg = line, rightarg = line); + +create operator pg_catalog.?|| (leftarg = lseg, rightarg = lseg); + +create operator pg_catalog.@ (rightarg = integer); + +create operator pg_catalog.@ (rightarg = numeric); + +create operator pg_catalog.@ (rightarg = smallint); + +create operator pg_catalog.@ (rightarg = double precision); + +create operator pg_catalog.@ (rightarg = real); + +create operator pg_catalog.@ (rightarg = bigint); + +create operator pg_catalog.@-@ (rightarg = path); + +create operator pg_catalog.@-@ (rightarg = lseg); + +create operator pg_catalog.@> (leftarg = polygon, rightarg = point); + +create operator pg_catalog.@> (leftarg = circle, rightarg = point); + +create operator pg_catalog.@> (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.@> (leftarg = path, rightarg = point); + +create operator pg_catalog.@> (leftarg = anymultirange, rightarg = anyelement); + +create operator pg_catalog.@> (leftarg = box, rightarg = box); + +create operator pg_catalog.@> (leftarg = box, rightarg = point); + +create operator pg_catalog.@> (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.@> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.@> (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.@> (leftarg = anyarray, rightarg = anyarray); + +create operator pg_catalog.@> (leftarg = anyrange, rightarg = anymultirange); + +create operator pg_catalog.@> (leftarg = aclitem[], rightarg = aclitem); + +create operator pg_catalog.@> (leftarg = anymultirange, rightarg = anymultirange); + +create operator pg_catalog.@> (leftarg = anyrange, rightarg = anyelement); + +create operator pg_catalog.@> (leftarg = anyrange, rightarg = anyrange); + +create operator pg_catalog.@> (leftarg = anymultirange, rightarg = anyrange); + +create operator pg_catalog.@? (leftarg = jsonb, rightarg = jsonpath); + +create operator pg_catalog.@@ (leftarg = tsvector, rightarg = tsquery); + +create operator pg_catalog.@@ (leftarg = tsquery, rightarg = tsvector); + +create operator pg_catalog.@@ (rightarg = circle); + +create operator pg_catalog.@@ (rightarg = polygon); + +create operator pg_catalog.@@ (leftarg = text, rightarg = text); + +create operator pg_catalog.@@ (rightarg = box); + +create operator pg_catalog.@@ (leftarg = text, rightarg = tsquery); + +create operator pg_catalog.@@ (leftarg = jsonb, rightarg = jsonpath); + +create operator pg_catalog.@@ (rightarg = lseg); + +create operator pg_catalog.@@@ (leftarg = tsvector, rightarg = tsquery); + +create operator pg_catalog.@@@ (leftarg = tsquery, rightarg = tsvector); + +create operator pg_catalog.^ (leftarg = double precision, rightarg = double precision); + +create operator pg_catalog.^ (leftarg = numeric, rightarg = numeric); + +create operator pg_catalog.^@ (leftarg = text, rightarg = text); + +create operator pg_catalog.| (leftarg = smallint, rightarg = smallint); + +create operator pg_catalog.| (leftarg = bit, rightarg = bit); + +create operator pg_catalog.| (leftarg = inet, rightarg = inet); + +create operator pg_catalog.| (leftarg = bigint, rightarg = bigint); + +create operator pg_catalog.| (leftarg = macaddr8, rightarg = macaddr8); + +create operator pg_catalog.| (leftarg = macaddr, rightarg = macaddr); + +create operator pg_catalog.| (leftarg = integer, rightarg = integer); + +create operator pg_catalog.|&> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.|&> (leftarg = box, rightarg = box); + +create operator pg_catalog.|&> (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.|/ (rightarg = double precision); + +create operator pg_catalog.|>> (leftarg = box, rightarg = box); + +create operator pg_catalog.|>> (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.|>> (leftarg = point, rightarg = point); + +create operator pg_catalog.|>> (leftarg = circle, rightarg = circle); + +create operator pg_catalog.|| (leftarg = text, rightarg = text); + +create operator pg_catalog.|| (leftarg = bit varying, rightarg = bit varying); + +create operator pg_catalog.|| (leftarg = tsvector, rightarg = tsvector); + +create operator pg_catalog.|| (leftarg = jsonb, rightarg = jsonb); + +create operator pg_catalog.|| (leftarg = anycompatiblearray, rightarg = anycompatiblearray); + +create operator pg_catalog.|| (leftarg = anycompatible, rightarg = anycompatiblearray); + +create operator pg_catalog.|| (leftarg = text, rightarg = anynonarray); + +create operator pg_catalog.|| (leftarg = anynonarray, rightarg = text); + +create operator pg_catalog.|| (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.|| (leftarg = tsquery, rightarg = tsquery); + +create operator pg_catalog.|| (leftarg = anycompatiblearray, rightarg = anycompatible); + +create operator pg_catalog.||/ (rightarg = double precision); + +create operator pg_catalog.~ (leftarg = character, rightarg = text); + +create operator pg_catalog.~ (rightarg = macaddr8); + +create operator pg_catalog.~ (leftarg = name, rightarg = text); + +create operator pg_catalog.~ (rightarg = macaddr); + +create operator pg_catalog.~ (rightarg = inet); + +create operator pg_catalog.~ (leftarg = text, rightarg = text); + +create operator pg_catalog.~ (rightarg = bigint); + +create operator pg_catalog.~ (rightarg = bit); + +create operator pg_catalog.~ (rightarg = smallint); + +create operator pg_catalog.~ (rightarg = integer); + +create operator pg_catalog.~* (leftarg = name, rightarg = text); + +create operator pg_catalog.~* (leftarg = text, rightarg = text); + +create operator pg_catalog.~* (leftarg = character, rightarg = text); + +create operator pg_catalog.~<=~ (leftarg = character, rightarg = character); + +create operator pg_catalog.~<=~ (leftarg = text, rightarg = text); + +create operator pg_catalog.~<~ (leftarg = text, rightarg = text); + +create operator pg_catalog.~<~ (leftarg = character, rightarg = character); + +create operator pg_catalog.~= (leftarg = point, rightarg = point); + +create operator pg_catalog.~= (leftarg = circle, rightarg = circle); + +create operator pg_catalog.~= (leftarg = box, rightarg = box); + +create operator pg_catalog.~= (leftarg = polygon, rightarg = polygon); + +create operator pg_catalog.~>=~ (leftarg = text, rightarg = text); + +create operator pg_catalog.~>=~ (leftarg = character, rightarg = character); + +create operator pg_catalog.~>~ (leftarg = character, rightarg = character); + +create operator pg_catalog.~>~ (leftarg = text, rightarg = text); + +create operator pg_catalog.~~ (leftarg = bytea, rightarg = bytea); + +create operator pg_catalog.~~ (leftarg = name, rightarg = text); + +create operator pg_catalog.~~ (leftarg = text, rightarg = text); + +create operator pg_catalog.~~ (leftarg = character, rightarg = text); + +create operator pg_catalog.~~* (leftarg = character, rightarg = text); + +create operator pg_catalog.~~* (leftarg = text, rightarg = text); + +create operator pg_catalog.~~* (leftarg = name, rightarg = text); + diff --git a/crates/squawk_ide/src/generated/keywords.rs b/crates/squawk_ide/src/generated/keywords.rs index 1e081b33..adee7a42 100644 --- a/crates/squawk_ide/src/generated/keywords.rs +++ b/crates/squawk_ide/src/generated/keywords.rs @@ -1,3 +1,6 @@ +// Generated via: +// cargo xtask codegen + pub(crate) const RESERVED_KEYWORDS: &[&str] = &[ "all", "analyse", diff --git a/crates/squawk_ide/src/quote.rs b/crates/squawk_ide/src/quote.rs index b72ce7ee..95f2c60d 100644 --- a/crates/squawk_ide/src/quote.rs +++ b/crates/squawk_ide/src/quote.rs @@ -87,27 +87,29 @@ pub(crate) fn normalize_identifier(text: &str) -> String { #[cfg(test)] mod tests { + use insta::assert_snapshot; + use super::*; #[test] fn quote_column_alias_handles_embedded_quotes() { - assert_eq!(quote_column_alias(r#"foo"bar"#), r#""foo""bar""#); + assert_snapshot!(quote_column_alias(r#"foo"bar"#), @r#""foo""bar""#); } #[test] fn quote_column_alias_doesnt_quote_reserved_words() { // Keywords are allowed as column labels in AS clauses - assert_eq!(quote_column_alias("case"), "case"); - assert_eq!(quote_column_alias("array"), "array"); + assert_snapshot!(quote_column_alias("case"), @"case"); + assert_snapshot!(quote_column_alias("array"), @"array"); } #[test] fn quote_column_alias_doesnt_quote_simple_identifiers() { - assert_eq!(quote_column_alias("col_name"), "col_name"); + assert_snapshot!(quote_column_alias("col_name"), @"col_name"); } #[test] fn quote_column_alias_handles_special_column_name() { - assert_eq!(quote_column_alias("?column?"), r#""?column?""#); + assert_snapshot!(quote_column_alias("?column?"), @r#""?column?""#); } } diff --git a/crates/squawk_parser/src/generated/syntax_kind.rs b/crates/squawk_parser/src/generated/syntax_kind.rs index fe201f2c..8ed5f408 100644 --- a/crates/squawk_parser/src/generated/syntax_kind.rs +++ b/crates/squawk_parser/src/generated/syntax_kind.rs @@ -1,3 +1,6 @@ +// Generated via: +// cargo xtask codegen + #![allow(bad_style, missing_docs, clippy::upper_case_acronyms)] #[doc = r"The kind of syntax node, e.g. `IDENT`, `SELECT_KW`, or `WHERE_CLAUSE`. Needs to be compatible with [`rowan::SyntaxKind`]"] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] diff --git a/crates/squawk_parser/src/generated/token_sets.rs b/crates/squawk_parser/src/generated/token_sets.rs index d257ef1b..0e4504f1 100644 --- a/crates/squawk_parser/src/generated/token_sets.rs +++ b/crates/squawk_parser/src/generated/token_sets.rs @@ -1,3 +1,6 @@ +// Generated via: +// cargo xtask codegen + use crate::syntax_kind::SyntaxKind; use crate::token_set::TokenSet; diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index b26ac14e..2f228b27 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -1653,7 +1653,7 @@ fn path_segment(p: &mut Parser<'_>, kind: SyntaxKind) { // TODO: does this need to be flagged? // Might want to disallow operators in some paths. // Like `create table +()` doesn't make sense. - if !p.at(OPERATOR_KW) && current_operator(p).is_some() { + if p.at_ts(OPERATOR_FIRST) && !p.at(OPERATOR_KW) && current_operator(p).is_some() { // check for operator kw so we can parse things like: // create table operator(); diff --git a/crates/squawk_parser/tests/data/ok/create_function.sql b/crates/squawk_parser/tests/data/ok/create_function.sql index d520a5bb..e8583995 100644 --- a/crates/squawk_parser/tests/data/ok/create_function.sql +++ b/crates/squawk_parser/tests/data/ok/create_function.sql @@ -415,3 +415,9 @@ create function f (foo.bar.buzz.boo, t.u[], bool) returns void as '' language sql; +-- overlaps doesn't need quoting +create function overlaps() returns int8 as 'select 1' language sql; + +-- like doesn't need quoting +create function like() returns int8 as 'select 1' language sql; + diff --git a/crates/squawk_parser/tests/snapshots/tests__create_function_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_function_ok.snap index 9e408655..b0bd4a1e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_function_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_function_ok.snap @@ -3225,3 +3225,77 @@ SOURCE_FILE SQL_KW "sql" SEMICOLON ";" WHITESPACE "\n\n" + COMMENT "-- overlaps doesn't need quoting" + WHITESPACE "\n" + CREATE_FUNCTION + CREATE_KW "create" + WHITESPACE " " + FUNCTION_KW "function" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + OVERLAPS_KW "overlaps" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" + WHITESPACE " " + RET_TYPE + RETURNS_KW "returns" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "int8" + WHITESPACE " " + FUNC_OPTION_LIST + AS_FUNC_OPTION + AS_KW "as" + WHITESPACE " " + LITERAL + STRING "'select 1'" + WHITESPACE " " + LANGUAGE_FUNC_OPTION + LANGUAGE_KW "language" + WHITESPACE " " + SQL_KW "sql" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- like doesn't need quoting" + WHITESPACE "\n" + CREATE_FUNCTION + CREATE_KW "create" + WHITESPACE " " + FUNCTION_KW "function" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + LIKE_KW "like" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" + WHITESPACE " " + RET_TYPE + RETURNS_KW "returns" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "int8" + WHITESPACE " " + FUNC_OPTION_LIST + AS_FUNC_OPTION + AS_KW "as" + WHITESPACE " " + LITERAL + STRING "'select 1'" + WHITESPACE " " + LANGUAGE_FUNC_OPTION + LANGUAGE_KW "language" + WHITESPACE " " + SQL_KW "sql" + SEMICOLON ";" + WHITESPACE "\n\n" diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index c728be6f..aafbfd54 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -1,3 +1,6 @@ +// Generated via: +// cargo xtask codegen + use crate::SyntaxKind; use crate::ast::AstNode; use crate::ast::{AstChildren, support}; diff --git a/crates/squawk_syntax/src/ast/generated/tokens.rs b/crates/squawk_syntax/src/ast/generated/tokens.rs index debbc3ea..017f34bb 100644 --- a/crates/squawk_syntax/src/ast/generated/tokens.rs +++ b/crates/squawk_syntax/src/ast/generated/tokens.rs @@ -1,3 +1,6 @@ +// Generated via: +// cargo xtask codegen + use crate::{SyntaxKind, SyntaxToken, ast::AstToken}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] diff --git a/crates/xtask/src/codegen.rs b/crates/xtask/src/codegen.rs index d792c145..eddf73b5 100644 --- a/crates/xtask/src/codegen.rs +++ b/crates/xtask/src/codegen.rs @@ -217,6 +217,12 @@ fn generate_kind_src( } } +const PRELUDE: &str = "\ +// Generated via: +// cargo xtask codegen + +"; + fn generate_reserved_keywords_array(reserved_keywords: &[String]) -> Result { let mut reserved_keywords = reserved_keywords .iter() @@ -224,14 +230,16 @@ fn generate_reserved_keywords_array(reserved_keywords: &[String]) -> Result>(); reserved_keywords.sort(); - Ok(reformat( + let output = reformat( quote! { pub(crate) const RESERVED_KEYWORDS: &[&str] = &[ #(#reserved_keywords),* ]; } .to_string(), - )) + ); + + Ok(format!("{PRELUDE}{output}")) } fn generate_syntax_kinds(grammar: KindsSrc) -> Result { @@ -291,7 +299,7 @@ fn generate_syntax_kinds(grammar: KindsSrc) -> Result { .map(|name| format_ident!("{}", name)) .collect::>(); - Ok(reformat(reformat( + let output = reformat(reformat( quote! { #![allow(bad_style, missing_docs, clippy::upper_case_acronyms)] @@ -326,7 +334,9 @@ fn generate_syntax_kinds(grammar: KindsSrc) -> Result { } } .to_string(), - ).replace("#[space_hack]", ""))) + ).replace("#[space_hack]", "")); + + Ok(format!("{PRELUDE}{output}")) } fn generate_token_sets(keyword_kinds: &KeywordKinds) -> Result { @@ -363,7 +373,7 @@ fn generate_token_sets(keyword_kinds: &KeywordKinds) -> Result { .map(|key| format_ident!("{}_KW", key.to_case(Case::UpperSnake))) .collect::>(); - Ok(reformat( + let output = reformat( quote! { use crate::syntax_kind::SyntaxKind; use crate::token_set::TokenSet; @@ -394,7 +404,9 @@ fn generate_token_sets(keyword_kinds: &KeywordKinds) -> Result { } .to_string(), ) - .replace("pub(crate)", "\npub(crate)")) + .replace("pub(crate)", "\npub(crate)"); + + Ok(format!("{PRELUDE}{output}")) } #[derive(Debug, Default)] @@ -879,7 +891,8 @@ fn generate_nodes(nodes: &[AstNodeSrc], enums: &[AstEnumSrc]) -> String { #(#node_boilerplate_impls)* #(#enums_boilierplate_impls)* }; - reformat(file.to_string()).replace("#[derive", "\n#[derive") + let output = reformat(file.to_string()).replace("#[derive", "\n#[derive"); + format!("{PRELUDE}{output}") } fn generate_tokens(tokens: &[(&'static str, &'static str)]) -> String { @@ -920,5 +933,6 @@ fn generate_tokens(tokens: &[(&'static str, &'static str)]) -> String { #(#tokens)* }; - reformat(file.to_string()).replace("#[derive", "\n#[derive") + let output = reformat(file.to_string()).replace("#[derive", "\n#[derive"); + format!("{PRELUDE}{output}") } diff --git a/crates/xtask/src/sync_builtins.rs b/crates/xtask/src/sync_builtins.rs index 3c797829..b0dfe55d 100644 --- a/crates/xtask/src/sync_builtins.rs +++ b/crates/xtask/src/sync_builtins.rs @@ -55,6 +55,18 @@ where n.nspname not like 'pg_temp%' order by n.nspname, p.proname; "; +const BUILTIN_OPERATORS_QUERY: &str = r" +select n.nspname, o.oprname, + format_type(o.oprleft, null) as left_type, + format_type(o.oprright, null) as right_type +from pg_operator o +join pg_namespace n on n.oid = o.oprnamespace +where n.nspname not like 'pg_temp%' + and n.nspname not like 'pg_toast%' + and n.nspname <> 'public' +order by n.nspname, o.oprname; +"; + const PG_VERSION_QUERY: &str = "show server_version;"; fn write_table(sql: &mut String, schema: &str, table_name: &str, columns: &[(String, String)]) { @@ -68,7 +80,14 @@ fn write_table(sql: &mut String, schema: &str, table_name: &str, columns: &[(Str fn run_sql(query: &str) -> Result { let output = Command::new("psql") - .args(["--tuples-only", "--no-align", "--command", query]) + .args([ + "--tuples-only", + "--no-align", + "--field-separator", + "\t", + "--command", + query, + ]) .stdout(Stdio::piped()) .stderr(Stdio::piped()) .output() @@ -112,7 +131,7 @@ pub(crate) fn sync_builtins() -> Result<()> { .lines() .filter(|line| !line.is_empty()) { - let mut parts = line.split('|'); + let mut parts = line.split('\t'); let schema = parts.next().context("expected schema name")?; let type_name = parts.next().context("expected type name")?; let type_size = parts.next().context("expected type size")?; @@ -132,7 +151,7 @@ pub(crate) fn sync_builtins() -> Result<()> { .lines() .filter(|line| !line.is_empty()) { - let mut parts = line.split('|'); + let mut parts = line.split('\t'); let schema = parts.next().context("expected schema name")?; let table_name = parts.next().context("expected table name")?; let col_name = parts.next().context("expected column name")?; @@ -161,7 +180,7 @@ pub(crate) fn sync_builtins() -> Result<()> { .lines() .filter(|line| !line.is_empty()) { - let mut parts = line.split('|'); + let mut parts = line.split('\t'); let schema = parts.next().context("expected schema name")?; let func_name = parts.next().context("expected function name")?; let args = parts.next().context("expected function arguments")?; @@ -171,6 +190,24 @@ pub(crate) fn sync_builtins() -> Result<()> { )); } + for line in run_sql(BUILTIN_OPERATORS_QUERY)? + .lines() + .filter(|line| !line.is_empty()) + { + let mut parts = line.split('\t'); + let schema = parts.next().context("expected schema name")?; + let op_name = parts.next().context("expected operator name")?; + let left_type = parts.next().context("expected left type")?; + let right_type = parts.next().context("expected right type")?; + + let args = match (left_type, right_type) { + ("-", r) => format!("rightarg = {r}"), + (l, "-") => format!("leftarg = {l}"), + (l, r) => format!("leftarg = {l}, rightarg = {r}"), + }; + sql.push_str(&format!("create operator {schema}.{op_name} ({args});\n\n")); + } + let builtins_path = project_root().join("crates/squawk_ide/src/builtins.sql"); std::fs::write(&builtins_path, sql).context("Failed to write builtins.sql")?;