diff --git a/.sqlx/query-97da37af0d64378cb622cab14bb3b0ce33a0002d170200d77afeee60a7977278.json b/.sqlx/query-fa065a78ad10eeace15f64083f4d944b9d45eb6c60d7eece8878ed26b3530484.json similarity index 91% rename from .sqlx/query-97da37af0d64378cb622cab14bb3b0ce33a0002d170200d77afeee60a7977278.json rename to .sqlx/query-fa065a78ad10eeace15f64083f4d944b9d45eb6c60d7eece8878ed26b3530484.json index 924369cd..36723330 100644 --- a/.sqlx/query-97da37af0d64378cb622cab14bb3b0ce33a0002d170200d77afeee60a7977278.json +++ b/.sqlx/query-fa065a78ad10eeace15f64083f4d944b9d45eb6c60d7eece8878ed26b3530484.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "with\n available_tables as (\n select\n c.relname as table_name,\n c.oid as table_oid,\n c.relkind as class_kind,\n n.nspname as schema_name\n from\n pg_catalog.pg_class c\n join pg_catalog.pg_namespace n on n.oid = c.relnamespace\n where\n -- r: normal tables\n -- v: views\n -- m: materialized views\n -- f: foreign tables\n -- p: partitioned tables\n c.relkind in ('r', 'v', 'm', 'f', 'p')\n ),\n available_indexes as (\n select\n unnest (ix.indkey) as attnum,\n ix.indisprimary as is_primary,\n ix.indisunique as is_unique,\n ix.indrelid as table_oid\n from\n pg_catalog.pg_class c\n join pg_catalog.pg_index ix on c.oid = ix.indexrelid\n where\n c.relkind = 'i'\n )\nselect\n atts.attname as name,\n ts.table_name,\n ts.table_oid :: int8 as \"table_oid!\",\n ts.class_kind :: char as \"class_kind!\",\n ts.schema_name,\n atts.atttypid :: int8 as \"type_id!\",\n tps.typname as \"type_name\",\n not atts.attnotnull as \"is_nullable!\",\n nullif(\n information_schema._pg_char_max_length (atts.atttypid, atts.atttypmod),\n -1\n ) as varchar_length,\n pg_get_expr (def.adbin, def.adrelid) as default_expr,\n coalesce(ix.is_primary, false) as \"is_primary_key!\",\n coalesce(ix.is_unique, false) as \"is_unique!\",\n pg_catalog.col_description (ts.table_oid, atts.attnum) as comment\nfrom\n pg_catalog.pg_attribute atts\n join available_tables ts on atts.attrelid = ts.table_oid\n left join available_indexes ix on atts.attrelid = ix.table_oid\n and atts.attnum = ix.attnum\n left join pg_catalog.pg_attrdef def on atts.attrelid = def.adrelid\n and atts.attnum = def.adnum\n left join pg_catalog.pg_type tps on tps.oid = atts.atttypid\nwhere\n -- system columns, such as `cmax` or `tableoid`, have negative `attnum`s\n atts.attnum >= 0\norder by\n schema_name desc,\n table_name,\n atts.attnum;", + "query": "with\n available_tables as (\n select\n c.relname as table_name,\n c.oid as table_oid,\n c.relkind as class_kind,\n n.nspname as schema_name\n from\n pg_catalog.pg_class c\n join pg_catalog.pg_namespace n on n.oid = c.relnamespace\n where\n -- r: normal tables\n -- v: views\n -- m: materialized views\n -- f: foreign tables\n -- p: partitioned tables\n c.relkind in ('r', 'v', 'm', 'f', 'p')\n ),\n available_indexes as (\n select\n unnest (ix.indkey) as attnum,\n ix.indisprimary as is_primary,\n ix.indisunique as is_unique,\n ix.indrelid as table_oid\n from\n pg_catalog.pg_class c\n join pg_catalog.pg_index ix on c.oid = ix.indexrelid\n where\n c.relkind = 'i'\n )\nselect\n atts.attname as name,\n ts.table_name,\n ts.table_oid :: int8 as \"table_oid!\",\n ts.class_kind :: char as \"class_kind!\",\n ts.schema_name,\n atts.atttypid :: int8 as \"type_id!\",\n tps.typname as \"type_name\",\n not atts.attnotnull as \"is_nullable!\",\n nullif(\n information_schema._pg_char_max_length (atts.atttypid, atts.atttypmod),\n -1\n ) as varchar_length,\n pg_get_expr (def.adbin, def.adrelid) as default_expr,\n coalesce(ix.is_primary, false) as \"is_primary_key!\",\n coalesce(ix.is_unique, false) as \"is_unique!\",\n pg_catalog.col_description (ts.table_oid, atts.attnum) as comment\nfrom\n pg_catalog.pg_attribute atts\n join available_tables ts on atts.attrelid = ts.table_oid\n left join available_indexes ix on atts.attrelid = ix.table_oid\n and atts.attnum = ix.attnum\n left join pg_catalog.pg_attrdef def on atts.attrelid = def.adrelid\n and atts.attnum = def.adnum\n left join pg_catalog.pg_type tps on atts.atttypid = tps.oid\nwhere\n -- system columns, such as `cmax` or `tableoid`, have negative `attnum`s\n atts.attnum >= 0 and atts.atttypid is not null and tps.oid is not null\norder by\n schema_name desc,\n table_name,\n atts.attnum;", "describe": { "columns": [ { @@ -88,5 +88,5 @@ null ] }, - "hash": "97da37af0d64378cb622cab14bb3b0ce33a0002d170200d77afeee60a7977278" + "hash": "fa065a78ad10eeace15f64083f4d944b9d45eb6c60d7eece8878ed26b3530484" } diff --git a/crates/pgt_completions/src/providers/columns.rs b/crates/pgt_completions/src/providers/columns.rs index d18f0938..d4767f14 100644 --- a/crates/pgt_completions/src/providers/columns.rs +++ b/crates/pgt_completions/src/providers/columns.rs @@ -20,7 +20,7 @@ pub fn complete_columns<'a>(ctx: &CompletionContext<'a>, builder: &mut Completio description: format!("Table: {}.{}", col.schema_name, col.table_name), kind: CompletionItemKind::Column, completion_text: None, - detail: Some(col.type_name.to_string()), + detail: col.type_name.as_ref().map(|t| t.to_string()), }; // autocomplete with the alias in a join clause if we find one diff --git a/crates/pgt_schema_cache/src/columns.rs b/crates/pgt_schema_cache/src/columns.rs index 0eb64cc6..60d422fd 100644 --- a/crates/pgt_schema_cache/src/columns.rs +++ b/crates/pgt_schema_cache/src/columns.rs @@ -48,7 +48,7 @@ pub struct Column { pub schema_name: String, pub type_id: i64, - pub type_name: String, + pub type_name: Option, pub is_nullable: bool, pub is_primary_key: bool, diff --git a/crates/pgt_schema_cache/src/queries/columns.sql b/crates/pgt_schema_cache/src/queries/columns.sql index d0c09cd0..14b32cb2 100644 --- a/crates/pgt_schema_cache/src/queries/columns.sql +++ b/crates/pgt_schema_cache/src/queries/columns.sql @@ -52,10 +52,10 @@ from and atts.attnum = ix.attnum left join pg_catalog.pg_attrdef def on atts.attrelid = def.adrelid and atts.attnum = def.adnum - left join pg_catalog.pg_type tps on tps.oid = atts.atttypid + left join pg_catalog.pg_type tps on atts.atttypid = tps.oid where -- system columns, such as `cmax` or `tableoid`, have negative `attnum`s - atts.attnum >= 0 + atts.attnum >= 0 and atts.atttypid is not null and tps.oid is not null order by schema_name desc, table_name,