diff --git a/crates/squawk_ide/src/column_name.rs b/crates/squawk_ide/src/column_name.rs index 672b3883..47115bcf 100644 --- a/crates/squawk_ide/src/column_name.rs +++ b/crates/squawk_ide/src/column_name.rs @@ -75,13 +75,15 @@ fn name_from_type(ty: ast::Type, unknown_column: bool) -> Option<(ColumnName, Sy .and_then(|x| x.segment()) .and_then(|x| x.name_ref()) { - return name_from_name_ref(name_ref, true).map(|(column, node)| { - let column = match column { - ColumnName::Column(c) => ColumnName::new(c, unknown_column), - _ => column, - }; - (column, node) - }); + return name_from_name_ref(name_ref, true, path_type.arg_list().as_ref()).map( + |(column, node)| { + let column = match column { + ColumnName::Column(c) => ColumnName::new(c, unknown_column), + _ => column, + }; + (column, node) + }, + ); } } ast::Type::BitType(bit_type) => { @@ -158,7 +160,11 @@ fn name_from_type(ty: ast::Type, unknown_column: bool) -> Option<(ColumnName, Sy None } -fn name_from_name_ref(name_ref: ast::NameRef, in_type: bool) -> Option<(ColumnName, SyntaxNode)> { +fn name_from_name_ref( + name_ref: ast::NameRef, + in_type: bool, + arg_list: Option<&ast::ArgList>, +) -> Option<(ColumnName, SyntaxNode)> { if in_type { for node in name_ref.syntax().children_with_tokens() { match node.kind() { @@ -174,12 +180,32 @@ fn name_from_name_ref(name_ref: ast::NameRef, in_type: bool) -> Option<(ColumnNa name_ref.syntax().clone(), )); } - SyntaxKind::DECIMAL_KW => { + SyntaxKind::DEC_KW | SyntaxKind::DECIMAL_KW => { return Some(( ColumnName::Column("numeric".to_owned()), name_ref.syntax().clone(), )); } + SyntaxKind::FLOAT_KW => { + let precision = arg_list.and_then(|arg| { + arg.args_().find_map(|arg| { + if let ast::Expr::Literal(lit) = arg.expr()? { + lit.syntax().text().to_string().parse::().ok() + } else { + None + } + }) + }); + let name = if matches!(precision, Some(p) if p <= 24) { + "float4" + } else { + "float8" + }; + return Some(( + ColumnName::Column(name.to_owned()), + name_ref.syntax().clone(), + )); + } SyntaxKind::INT_KW | SyntaxKind::INTEGER_KW => { return Some(( ColumnName::Column("int4".to_owned()), @@ -409,11 +435,11 @@ fn name_from_expr(expr: ast::Expr, in_type: bool) -> Option<(ColumnName, SyntaxN | ast::Expr::SliceExpr(_) => unreachable!("not possible in the grammar"), ast::Expr::FieldExpr(field_expr) => { if let Some(name_ref) = field_expr.field() { - return name_from_name_ref(name_ref, in_type); + return name_from_name_ref(name_ref, in_type, None); } } ast::Expr::NameRef(name_ref) => { - return name_from_name_ref(name_ref, in_type); + return name_from_name_ref(name_ref, in_type, None); } } } @@ -446,7 +472,7 @@ fn name_from_expr(expr: ast::Expr, in_type: bool) -> Option<(ColumnName, SyntaxN } ast::Expr::FieldExpr(field_expr) => { if let Some(name_ref) = field_expr.field() { - return name_from_name_ref(name_ref, in_type); + return name_from_name_ref(name_ref, in_type, None); } } ast::Expr::IndexExpr(index_expr) => { @@ -472,7 +498,7 @@ fn name_from_expr(expr: ast::Expr, in_type: bool) -> Option<(ColumnName, SyntaxN _ => return Some((ColumnName::UnknownColumn(None), node)), }, ast::Expr::NameRef(name_ref) => { - return name_from_name_ref(name_ref, in_type); + return name_from_name_ref(name_ref, in_type, None); } ast::Expr::ParenExpr(paren_expr) => { if let Some(expr) = paren_expr.expr() { @@ -614,13 +640,23 @@ fn examples() { // bit types assert_snapshot!(name("cast('1010' as bit varying(10))"), @"varbit"); + assert_snapshot!(name("cast('1010' as bit varying)"), @"varbit"); + assert_snapshot!(name("cast('1010' as bit)"), @"bit"); + + // decimal + assert_snapshot!(name("cast('1010' as dec)"), @"numeric"); + assert_snapshot!(name("cast('1010' as dec(10))"), @"numeric"); + assert_snapshot!(name("cast('1010' as decimal)"), @"numeric"); + assert_snapshot!(name("cast('1010' as decimal(10))"), @"numeric"); // char types assert_snapshot!(name("cast('hello' as character varying(10))"), @"varchar"); assert_snapshot!(name("cast('hello' as char varying(5))"), @"varchar"); + assert_snapshot!(name("cast('hello' as nchar varying(10))"), @"varchar"); assert_snapshot!(name("cast('hello' as char(5))"), @"bpchar"); assert_snapshot!(name("cast('hello' as character)"), @"bpchar"); assert_snapshot!(name("cast('hello' as bpchar)"), @"bpchar"); + assert_snapshot!(name("cast('hello' as nchar(10))"), @"bpchar"); assert_snapshot!(name(r#"cast('hello' as "char")"#), @"char"); @@ -628,6 +664,8 @@ fn examples() { assert_snapshot!(name("cast(1.5 as double precision)"), @"float8"); // real assert_snapshot!(name("cast(1.5 as real)"), @"float4"); + assert_snapshot!(name("cast(1.5 as float(8))"), @"float4"); + assert_snapshot!(name("cast(2.5 as float(25))"), @"float8"); // interval types assert_snapshot!(name("cast('1 hour' as interval hour to minute)"), @"interval"); diff --git a/crates/squawk_ide/src/generated/extensions/btree_gin.sql b/crates/squawk_ide/src/generated/extensions/btree_gin.sql new file mode 100644 index 00000000..5ca93788 --- /dev/null +++ b/crates/squawk_ide/src/generated/extensions/btree_gin.sql @@ -0,0 +1,266 @@ +-- squawk-ignore-file +-- pg version: 18.3 +-- update via: +-- cargo xtask sync-builtins + +create function public.gin_btree_consistent(internal, smallint, anyelement, integer, internal, internal) returns boolean + language c; + +create function public.gin_compare_prefix_anyenum(anyenum, anyenum, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_bit(bit, bit, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_bool(boolean, boolean, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_bpchar(character, character, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_bytea(bytea, bytea, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_char("char", "char", smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_cidr(cidr, cidr, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_date(date, date, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_float4(real, real, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_float8(double precision, double precision, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_inet(inet, inet, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_int2(smallint, smallint, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_int4(integer, integer, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_int8(bigint, bigint, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_interval(interval, interval, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_macaddr(macaddr, macaddr, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_macaddr8(macaddr8, macaddr8, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_money(money, money, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_name(name, name, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_numeric(numeric, numeric, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_oid(oid, oid, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_text(text, text, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_time(time without time zone, time without time zone, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_timestamp(timestamp without time zone, timestamp without time zone, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_timestamptz(timestamp with time zone, timestamp with time zone, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_timetz(time with time zone, time with time zone, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_uuid(uuid, uuid, smallint, internal) returns integer + language c; + +create function public.gin_compare_prefix_varbit(bit varying, bit varying, smallint, internal) returns integer + language c; + +create function public.gin_enum_cmp(anyenum, anyenum) returns integer + language c; + +create function public.gin_extract_query_anyenum(anyenum, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_bit(bit, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_bool(boolean, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_bpchar(character, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_bytea(bytea, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_char("char", internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_cidr(cidr, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_date(date, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_float4(real, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_float8(double precision, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_inet(inet, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_int2(smallint, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_int4(integer, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_int8(bigint, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_interval(interval, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_macaddr(macaddr, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_macaddr8(macaddr8, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_money(money, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_name(name, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_numeric(numeric, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_oid(oid, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_text(text, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_time(time without time zone, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_timestamp(timestamp without time zone, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_timestamptz(timestamp with time zone, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_timetz(time with time zone, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_uuid(uuid, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_query_varbit(bit varying, internal, smallint, internal, internal) returns internal + language c; + +create function public.gin_extract_value_anyenum(anyenum, internal) returns internal + language c; + +create function public.gin_extract_value_bit(bit, internal) returns internal + language c; + +create function public.gin_extract_value_bool(boolean, internal) returns internal + language c; + +create function public.gin_extract_value_bpchar(character, internal) returns internal + language c; + +create function public.gin_extract_value_bytea(bytea, internal) returns internal + language c; + +create function public.gin_extract_value_char("char", internal) returns internal + language c; + +create function public.gin_extract_value_cidr(cidr, internal) returns internal + language c; + +create function public.gin_extract_value_date(date, internal) returns internal + language c; + +create function public.gin_extract_value_float4(real, internal) returns internal + language c; + +create function public.gin_extract_value_float8(double precision, internal) returns internal + language c; + +create function public.gin_extract_value_inet(inet, internal) returns internal + language c; + +create function public.gin_extract_value_int2(smallint, internal) returns internal + language c; + +create function public.gin_extract_value_int4(integer, internal) returns internal + language c; + +create function public.gin_extract_value_int8(bigint, internal) returns internal + language c; + +create function public.gin_extract_value_interval(interval, internal) returns internal + language c; + +create function public.gin_extract_value_macaddr(macaddr, internal) returns internal + language c; + +create function public.gin_extract_value_macaddr8(macaddr8, internal) returns internal + language c; + +create function public.gin_extract_value_money(money, internal) returns internal + language c; + +create function public.gin_extract_value_name(name, internal) returns internal + language c; + +create function public.gin_extract_value_numeric(numeric, internal) returns internal + language c; + +create function public.gin_extract_value_oid(oid, internal) returns internal + language c; + +create function public.gin_extract_value_text(text, internal) returns internal + language c; + +create function public.gin_extract_value_time(time without time zone, internal) returns internal + language c; + +create function public.gin_extract_value_timestamp(timestamp without time zone, internal) returns internal + language c; + +create function public.gin_extract_value_timestamptz(timestamp with time zone, internal) returns internal + language c; + +create function public.gin_extract_value_timetz(time with time zone, internal) returns internal + language c; + +create function public.gin_extract_value_uuid(uuid, internal) returns internal + language c; + +create function public.gin_extract_value_varbit(bit varying, internal) returns internal + language c; + +create function public.gin_numeric_cmp(numeric, numeric) returns integer + language c; + diff --git a/crates/squawk_ide/src/generated/extensions/btree_gist.sql b/crates/squawk_ide/src/generated/extensions/btree_gist.sql new file mode 100644 index 00000000..ec9103d4 --- /dev/null +++ b/crates/squawk_ide/src/generated/extensions/btree_gist.sql @@ -0,0 +1,731 @@ +-- squawk-ignore-file +-- pg version: 18.3 +-- update via: +-- cargo xtask sync-builtins + +-- size: 16, align: 4 +create type public.gbtreekey16; + +-- size: 2, align: 4 +create type public.gbtreekey2; + +-- size: 32, align: 4 +create type public.gbtreekey32; + +-- size: 4, align: 4 +create type public.gbtreekey4; + +-- size: 8, align: 4 +create type public.gbtreekey8; + +-- size: -1, align: 4 +create type public.gbtreekey_var; + +create function public.cash_dist(money, money) returns money + language c; + +create function public.date_dist(date, date) returns integer + language c; + +create function public.float4_dist(real, real) returns real + language c; + +create function public.float8_dist(double precision, double precision) returns double precision + language c; + +create function public.gbt_bit_compress(internal) returns internal + language c; + +create function public.gbt_bit_consistent(internal, bit, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_bit_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_bit_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_bit_same(gbtreekey_var, gbtreekey_var, internal) returns internal + language c; + +create function public.gbt_bit_sortsupport(internal) returns void + language c; + +create function public.gbt_bit_union(internal, internal) returns gbtreekey_var + language c; + +create function public.gbt_bool_compress(internal) returns internal + language c; + +create function public.gbt_bool_consistent(internal, boolean, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_bool_fetch(internal) returns internal + language c; + +create function public.gbt_bool_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_bool_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_bool_same(gbtreekey2, gbtreekey2, internal) returns internal + language c; + +create function public.gbt_bool_sortsupport(internal) returns void + language c; + +create function public.gbt_bool_union(internal, internal) returns gbtreekey2 + language c; + +create function public.gbt_bpchar_compress(internal) returns internal + language c; + +create function public.gbt_bpchar_consistent(internal, character, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_bpchar_sortsupport(internal) returns void + language c; + +create function public.gbt_bytea_compress(internal) returns internal + language c; + +create function public.gbt_bytea_consistent(internal, bytea, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_bytea_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_bytea_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_bytea_same(gbtreekey_var, gbtreekey_var, internal) returns internal + language c; + +create function public.gbt_bytea_sortsupport(internal) returns void + language c; + +create function public.gbt_bytea_union(internal, internal) returns gbtreekey_var + language c; + +create function public.gbt_cash_compress(internal) returns internal + language c; + +create function public.gbt_cash_consistent(internal, money, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_cash_distance(internal, money, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_cash_fetch(internal) returns internal + language c; + +create function public.gbt_cash_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_cash_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_cash_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_cash_sortsupport(internal) returns void + language c; + +create function public.gbt_cash_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_date_compress(internal) returns internal + language c; + +create function public.gbt_date_consistent(internal, date, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_date_distance(internal, date, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_date_fetch(internal) returns internal + language c; + +create function public.gbt_date_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_date_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_date_same(gbtreekey8, gbtreekey8, internal) returns internal + language c; + +create function public.gbt_date_sortsupport(internal) returns void + language c; + +create function public.gbt_date_union(internal, internal) returns gbtreekey8 + language c; + +create function public.gbt_decompress(internal) returns internal + language c; + +create function public.gbt_enum_compress(internal) returns internal + language c; + +create function public.gbt_enum_consistent(internal, anyenum, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_enum_fetch(internal) returns internal + language c; + +create function public.gbt_enum_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_enum_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_enum_same(gbtreekey8, gbtreekey8, internal) returns internal + language c; + +create function public.gbt_enum_sortsupport(internal) returns void + language c; + +create function public.gbt_enum_union(internal, internal) returns gbtreekey8 + language c; + +create function public.gbt_float4_compress(internal) returns internal + language c; + +create function public.gbt_float4_consistent(internal, real, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_float4_distance(internal, real, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_float4_fetch(internal) returns internal + language c; + +create function public.gbt_float4_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_float4_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_float4_same(gbtreekey8, gbtreekey8, internal) returns internal + language c; + +create function public.gbt_float4_sortsupport(internal) returns void + language c; + +create function public.gbt_float4_union(internal, internal) returns gbtreekey8 + language c; + +create function public.gbt_float8_compress(internal) returns internal + language c; + +create function public.gbt_float8_consistent(internal, double precision, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_float8_distance(internal, double precision, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_float8_fetch(internal) returns internal + language c; + +create function public.gbt_float8_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_float8_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_float8_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_float8_sortsupport(internal) returns void + language c; + +create function public.gbt_float8_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_inet_compress(internal) returns internal + language c; + +create function public.gbt_inet_consistent(internal, inet, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_inet_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_inet_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_inet_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_inet_sortsupport(internal) returns void + language c; + +create function public.gbt_inet_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_int2_compress(internal) returns internal + language c; + +create function public.gbt_int2_consistent(internal, smallint, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_int2_distance(internal, smallint, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_int2_fetch(internal) returns internal + language c; + +create function public.gbt_int2_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_int2_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_int2_same(gbtreekey4, gbtreekey4, internal) returns internal + language c; + +create function public.gbt_int2_sortsupport(internal) returns void + language c; + +create function public.gbt_int2_union(internal, internal) returns gbtreekey4 + language c; + +create function public.gbt_int4_compress(internal) returns internal + language c; + +create function public.gbt_int4_consistent(internal, integer, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_int4_distance(internal, integer, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_int4_fetch(internal) returns internal + language c; + +create function public.gbt_int4_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_int4_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_int4_same(gbtreekey8, gbtreekey8, internal) returns internal + language c; + +create function public.gbt_int4_sortsupport(internal) returns void + language c; + +create function public.gbt_int4_union(internal, internal) returns gbtreekey8 + language c; + +create function public.gbt_int8_compress(internal) returns internal + language c; + +create function public.gbt_int8_consistent(internal, bigint, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_int8_distance(internal, bigint, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_int8_fetch(internal) returns internal + language c; + +create function public.gbt_int8_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_int8_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_int8_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_int8_sortsupport(internal) returns void + language c; + +create function public.gbt_int8_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_intv_compress(internal) returns internal + language c; + +create function public.gbt_intv_consistent(internal, interval, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_intv_decompress(internal) returns internal + language c; + +create function public.gbt_intv_distance(internal, interval, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_intv_fetch(internal) returns internal + language c; + +create function public.gbt_intv_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_intv_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_intv_same(gbtreekey32, gbtreekey32, internal) returns internal + language c; + +create function public.gbt_intv_sortsupport(internal) returns void + language c; + +create function public.gbt_intv_union(internal, internal) returns gbtreekey32 + language c; + +create function public.gbt_macad8_compress(internal) returns internal + language c; + +create function public.gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_macad8_fetch(internal) returns internal + language c; + +create function public.gbt_macad8_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_macad8_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_macad8_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_macad8_sortsupport(internal) returns void + language c; + +create function public.gbt_macad8_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_macad_compress(internal) returns internal + language c; + +create function public.gbt_macad_consistent(internal, macaddr, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_macad_fetch(internal) returns internal + language c; + +create function public.gbt_macad_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_macad_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_macad_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_macad_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_macaddr_sortsupport(internal) returns void + language c; + +create function public.gbt_numeric_compress(internal) returns internal + language c; + +create function public.gbt_numeric_consistent(internal, numeric, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_numeric_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_numeric_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_numeric_same(gbtreekey_var, gbtreekey_var, internal) returns internal + language c; + +create function public.gbt_numeric_sortsupport(internal) returns void + language c; + +create function public.gbt_numeric_union(internal, internal) returns gbtreekey_var + language c; + +create function public.gbt_oid_compress(internal) returns internal + language c; + +create function public.gbt_oid_consistent(internal, oid, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_oid_distance(internal, oid, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_oid_fetch(internal) returns internal + language c; + +create function public.gbt_oid_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_oid_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_oid_same(gbtreekey8, gbtreekey8, internal) returns internal + language c; + +create function public.gbt_oid_sortsupport(internal) returns void + language c; + +create function public.gbt_oid_union(internal, internal) returns gbtreekey8 + language c; + +create function public.gbt_text_compress(internal) returns internal + language c; + +create function public.gbt_text_consistent(internal, text, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_text_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_text_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_text_same(gbtreekey_var, gbtreekey_var, internal) returns internal + language c; + +create function public.gbt_text_sortsupport(internal) returns void + language c; + +create function public.gbt_text_union(internal, internal) returns gbtreekey_var + language c; + +create function public.gbt_time_compress(internal) returns internal + language c; + +create function public.gbt_time_consistent(internal, time without time zone, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_time_distance(internal, time without time zone, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_time_fetch(internal) returns internal + language c; + +create function public.gbt_time_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_time_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_time_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_time_sortsupport(internal) returns void + language c; + +create function public.gbt_time_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_timetz_compress(internal) returns internal + language c; + +create function public.gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_ts_compress(internal) returns internal + language c; + +create function public.gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_ts_fetch(internal) returns internal + language c; + +create function public.gbt_ts_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_ts_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_ts_same(gbtreekey16, gbtreekey16, internal) returns internal + language c; + +create function public.gbt_ts_sortsupport(internal) returns void + language c; + +create function public.gbt_ts_union(internal, internal) returns gbtreekey16 + language c; + +create function public.gbt_tstz_compress(internal) returns internal + language c; + +create function public.gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal) returns double precision + language c; + +create function public.gbt_uuid_compress(internal) returns internal + language c; + +create function public.gbt_uuid_consistent(internal, uuid, smallint, oid, internal) returns boolean + language c; + +create function public.gbt_uuid_fetch(internal) returns internal + language c; + +create function public.gbt_uuid_penalty(internal, internal, internal) returns internal + language c; + +create function public.gbt_uuid_picksplit(internal, internal) returns internal + language c; + +create function public.gbt_uuid_same(gbtreekey32, gbtreekey32, internal) returns internal + language c; + +create function public.gbt_uuid_sortsupport(internal) returns void + language c; + +create function public.gbt_uuid_union(internal, internal) returns gbtreekey32 + language c; + +create function public.gbt_var_decompress(internal) returns internal + language c; + +create function public.gbt_var_fetch(internal) returns internal + language c; + +create function public.gbt_varbit_sortsupport(internal) returns void + language c; + +create function public.gbtreekey16_in(cstring) returns gbtreekey16 + language c; + +create function public.gbtreekey16_out(gbtreekey16) returns cstring + language c; + +create function public.gbtreekey2_in(cstring) returns gbtreekey2 + language c; + +create function public.gbtreekey2_out(gbtreekey2) returns cstring + language c; + +create function public.gbtreekey32_in(cstring) returns gbtreekey32 + language c; + +create function public.gbtreekey32_out(gbtreekey32) returns cstring + language c; + +create function public.gbtreekey4_in(cstring) returns gbtreekey4 + language c; + +create function public.gbtreekey4_out(gbtreekey4) returns cstring + language c; + +create function public.gbtreekey8_in(cstring) returns gbtreekey8 + language c; + +create function public.gbtreekey8_out(gbtreekey8) returns cstring + language c; + +create function public.gbtreekey_var_in(cstring) returns gbtreekey_var + language c; + +create function public.gbtreekey_var_out(gbtreekey_var) returns cstring + language c; + +create function public.gist_translate_cmptype_btree(integer) returns smallint + language c; + +create function public.int2_dist(smallint, smallint) returns smallint + language c; + +create function public.int4_dist(integer, integer) returns integer + language c; + +create function public.int8_dist(bigint, bigint) returns bigint + language c; + +create function public.interval_dist(interval, interval) returns interval + language c; + +create function public.oid_dist(oid, oid) returns oid + language c; + +create function public.time_dist(time without time zone, time without time zone) returns interval + language c; + +create function public.ts_dist(timestamp without time zone, timestamp without time zone) returns interval + language c; + +create function public.tstz_dist(timestamp with time zone, timestamp with time zone) returns interval + language c; + +create operator public.<-> ( + leftarg = bigint, + rightarg = bigint, + function = public.int8_dist +); + +create operator public.<-> ( + leftarg = date, + rightarg = date, + function = public.date_dist +); + +create operator public.<-> ( + leftarg = double precision, + rightarg = double precision, + function = public.float8_dist +); + +create operator public.<-> ( + leftarg = integer, + rightarg = integer, + function = public.int4_dist +); + +create operator public.<-> ( + leftarg = interval, + rightarg = interval, + function = public.interval_dist +); + +create operator public.<-> ( + leftarg = money, + rightarg = money, + function = public.cash_dist +); + +create operator public.<-> ( + leftarg = oid, + rightarg = oid, + function = public.oid_dist +); + +create operator public.<-> ( + leftarg = real, + rightarg = real, + function = public.float4_dist +); + +create operator public.<-> ( + leftarg = smallint, + rightarg = smallint, + function = public.int2_dist +); + +create operator public.<-> ( + leftarg = time without time zone, + rightarg = time without time zone, + function = public.time_dist +); + +create operator public.<-> ( + leftarg = timestamp with time zone, + rightarg = timestamp with time zone, + function = public.tstz_dist +); + +create operator public.<-> ( + leftarg = timestamp without time zone, + rightarg = timestamp without time zone, + function = public.ts_dist +); + diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index bd6ddc7a..01ef805c 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -2094,6 +2094,10 @@ impl ArgList { support::children(&self.syntax) } #[inline] + pub fn args_(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] pub fn expr(&self) -> Option { support::child(&self.syntax) } @@ -8820,10 +8824,6 @@ pub struct ForPortionOf { pub(crate) syntax: SyntaxNode, } impl ForPortionOf { - #[inline] - pub fn alias(&self) -> Option { - support::child(&self.syntax) - } #[inline] pub fn expr(&self) -> Option { support::child(&self.syntax) diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 2f81179b..b5402174 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -61,6 +61,8 @@ ArgList = '(' '*' ')' | '(' ('distinct' | 'all') 'variadic'? Expr ')' | '(' args:(Expr (',' Expr)*)? ')' +// TODO: Arg should be a union of *, Expr, or Expr list. Right now it doesn't do much +| '(' args_:(Arg (',' Arg)*)? ')' CallExpr = Expr ArgList WithinClause? FilterClause? OverClause? diff --git a/crates/xtask/src/sync_builtins.rs b/crates/xtask/src/sync_builtins.rs index a9f6c76f..7d6dfcad 100644 --- a/crates/xtask/src/sync_builtins.rs +++ b/crates/xtask/src/sync_builtins.rs @@ -322,6 +322,8 @@ declare begin foreach extension_name in array array[ 'bloom', + 'btree_gin', + 'btree_gist', 'citext', 'cube', 'h3',