Skip to content

Commit 18b09ee

Browse files
authored
feat(cubesql): Improve DataGrip compatibility (cube-js#9825)
List of changes: - Parse explicit `DISTINCT` option with set operators (e.g. `UNION DISTINCT`) - `array_agg` function can now be prefixed with `pg_catalog.` - New introspection tables are supported: - `pg_auth_members` - `pg_available_extension_versions` - `pg_cast` - `pg_event_trigger` - `pg_foreign_data_wrapper` - `pg_foreign_server` - `pg_foreign_table` - `pg_language` - `pg_locks` - `pg_operator` - `pg_rewrite` - `pg_tablespace` - `pg_timezone_abbrevs` - `pg_timezone_names` - `pg_user_mapping` - New introspection functions are supported: - `pg_is_in_recovery` - `pg_postmaster_start_time` - `pg_tablespace_location` - `txid_current` - System field `xmin` added to the following introspection tables: - `pg_am` - `pg_attribute` - `pg_class` - `pg_constraint` - `pg_description` - `pg_extension` - `pg_index` - `pg_namespace` - `pg_proc` - `pg_type` - `pg_namespace`'s `nspacl` field now has correct type (`List(Utf8)`) - `AGE` function now accepts values of type `xid` - `"char"` casts are being replaced with `text` casts - `xid` casts are being replaced with `unsigned int` casts - New `PgType`s added: - `[ARRAY]PGAM` - `[ARRAY]PGCAST` - `[ARRAY]PGEVENTTRIGGER` - `[ARRAY]PGEXTENSION` - `[ARRAY]PGFOREIGNDATAWRAPPER` - `[ARRAY]PGFOREIGNSERVER` - `[ARRAY]PGLANGUAGE` - `CTID` system field is replaced with `NULL` in data queries Signed-off-by: Alex Qyoun-ae <[email protected]>
1 parent b9ff371 commit 18b09ee

File tree

80 files changed

+3589
-456
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+3589
-456
lines changed

packages/cubejs-backend-native/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubenativeutils/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesql/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesql/cubesql/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ homepage = "https://cube.dev"
1010

1111
[dependencies]
1212
arc-swap = "1"
13-
datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6", default-features = false, features = [
13+
datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "016c22f74b82f241fc01abd205020cb52b6c911e", default-features = false, features = [
1414
"regex_expressions",
1515
"unicode_expressions",
1616
] }
1717
thiserror = "2"
1818
cubeclient = { path = "../cubeclient" }
1919
pg-srv = { path = "../pg-srv" }
20-
sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "34f22de680caa5fe586def5b336d56efe43c8cc4" }
20+
sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "e14d5bf45367edd8679cbc15ccee56693da8e4fb" }
2121
base64 = "0.13.0"
2222
tokio = { version = "^1.35", features = ["full", "rt", "tracing"] }
2323
serde = { version = "^1.0", features = ["derive"] }

rust/cubesql/cubesql/e2e/tests/snapshots/e2e__tests__postgres__system_pg_catalog.pg_class.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
source: cubesql/e2e/tests/postgres.rs
3-
assertion_line: 316
43
expression: "self.print_query_result(res, true, false).await"
54
---
65
oid type: 23 (int4)
@@ -36,4 +35,5 @@ relminmxid type: 23 (int4)
3635
relacl type: 25 (text)
3736
reloptions type: 25 (text)
3837
relpartbound type: 25 (text)
38+
xmin type: 23 (int4)
3939
relhasoids type: 16 (bool)

rust/cubesql/cubesql/e2e/tests/snapshots/e2e__tests__postgres__system_pg_catalog.pg_proc.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
source: cubesql/e2e/tests/postgres.rs
3-
assertion_line: 316
43
expression: "self.print_query_result(res, true, false).await"
54
---
65
oid type: 23 (int4)
@@ -33,3 +32,4 @@ probin type: 25 (text)
3332
prosqlbody type: 25 (text)
3433
proconfig type: 25 (text)
3534
proacl type: 25 (text)
35+
xmin type: 23 (int4)

rust/cubesql/cubesql/e2e/tests/snapshots/e2e__tests__postgres__system_pg_catalog.pg_type.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
source: cubesql/e2e/tests/postgres.rs
3-
assertion_line: 316
43
expression: "self.print_query_result(res, true, false).await"
54
---
65
oid type: 23 (int4)
@@ -35,3 +34,4 @@ typcollation type: 25 (text)
3534
typdefaultbin type: 25 (text)
3635
typdefault type: 25 (text)
3736
typacl type: 25 (text)
37+
xmin type: 23 (int4)

rust/cubesql/cubesql/src/compile/engine/context_postgresql.rs

Lines changed: 67 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,21 @@ use super::information_schema::postgres::{
1717
InfoSchemaSqlImplementationInfoProvider as PostgresInfoSchemaSqlImplementationInfoProvider,
1818
InfoSchemaSqlSizingProvider as PostgresInfoSchemaSqlSizingProvider,
1919
InfoSchemaTestingBlockingProvider, InfoSchemaTestingDatasetProvider, PgCatalogAmProvider,
20-
PgCatalogAttrdefProvider, PgCatalogAttributeProvider, PgCatalogClassProvider,
20+
PgCatalogAttrdefProvider, PgCatalogAttributeProvider, PgCatalogAuthMembersProvider,
21+
PgCatalogAvailableExtensionVersionsProvider, PgCatalogCastProvider, PgCatalogClassProvider,
2122
PgCatalogConstraintProvider, PgCatalogDatabaseProvider, PgCatalogDependProvider,
22-
PgCatalogDescriptionProvider, PgCatalogEnumProvider, PgCatalogExtensionProvider,
23-
PgCatalogIndexProvider, PgCatalogInheritsProvider, PgCatalogMatviewsProvider,
24-
PgCatalogNamespaceProvider, PgCatalogPartitionedTableProvider, PgCatalogProcProvider,
25-
PgCatalogRangeProvider, PgCatalogRolesProvider, PgCatalogSequenceProvider,
23+
PgCatalogDescriptionProvider, PgCatalogEnumProvider, PgCatalogEventTriggerProvider,
24+
PgCatalogExtensionProvider, PgCatalogForeignDataWrapperProvider,
25+
PgCatalogForeignServerProvider, PgCatalogForeignTableProvider, PgCatalogIndexProvider,
26+
PgCatalogInheritsProvider, PgCatalogLanguageProvider, PgCatalogLocksProvider,
27+
PgCatalogMatviewsProvider, PgCatalogNamespaceProvider, PgCatalogOperatorProvider,
28+
PgCatalogPartitionedTableProvider, PgCatalogProcProvider, PgCatalogRangeProvider,
29+
PgCatalogRewriteProvider, PgCatalogRolesProvider, PgCatalogSequenceProvider,
2630
PgCatalogSettingsProvider, PgCatalogShdescriptionProvider, PgCatalogStatActivityProvider,
2731
PgCatalogStatUserTablesProvider, PgCatalogStatioUserTablesProvider, PgCatalogStatsProvider,
28-
PgCatalogTableProvider, PgCatalogTypeProvider, PgCatalogUserProvider, PgCatalogViewsProvider,
29-
PgPreparedStatementsProvider,
32+
PgCatalogTableProvider, PgCatalogTablespaceProvider, PgCatalogTimezoneAbbrevsProvider,
33+
PgCatalogTimezoneNamesProvider, PgCatalogTypeProvider, PgCatalogUserMappingProvider,
34+
PgCatalogUserProvider, PgCatalogViewsProvider, PgPreparedStatementsProvider,
3035
};
3136
use crate::{
3237
compile::{
@@ -138,6 +143,36 @@ impl DatabaseProtocol {
138143
"pg_catalog.pg_stat_user_tables".to_string()
139144
} else if let Some(_) = any.downcast_ref::<PgCatalogShdescriptionProvider>() {
140145
"pg_catalog.pg_shdescription".to_string()
146+
} else if let Some(_) = any.downcast_ref::<PgCatalogLocksProvider>() {
147+
"pg_catalog.pg_locks".to_string()
148+
} else if let Some(_) = any.downcast_ref::<PgCatalogTimezoneNamesProvider>() {
149+
"pg_catalog.pg_timezone_names".to_string()
150+
} else if let Some(_) = any.downcast_ref::<PgCatalogTimezoneAbbrevsProvider>() {
151+
"pg_catalog.pg_timezone_abbrevs".to_string()
152+
} else if let Some(_) = any.downcast_ref::<PgCatalogAuthMembersProvider>() {
153+
"pg_catalog.pg_auth_members".to_string()
154+
} else if let Some(_) = any.downcast_ref::<PgCatalogTablespaceProvider>() {
155+
"pg_catalog.pg_tablespace".to_string()
156+
} else if let Some(_) = any.downcast_ref::<PgCatalogEventTriggerProvider>() {
157+
"pg_catalog.pg_event_trigger".to_string()
158+
} else if let Some(_) = any.downcast_ref::<PgCatalogForeignDataWrapperProvider>() {
159+
"pg_catalog.pg_foreign_data_wrapper".to_string()
160+
} else if let Some(_) = any.downcast_ref::<PgCatalogForeignServerProvider>() {
161+
"pg_catalog.pg_foreign_server".to_string()
162+
} else if let Some(_) = any.downcast_ref::<PgCatalogUserMappingProvider>() {
163+
"pg_catalog.pg_user_mapping".to_string()
164+
} else if let Some(_) = any.downcast_ref::<PgCatalogAvailableExtensionVersionsProvider>() {
165+
"pg_catalog.pg_available_extension_versions".to_string()
166+
} else if let Some(_) = any.downcast_ref::<PgCatalogLanguageProvider>() {
167+
"pg_catalog.pg_language".to_string()
168+
} else if let Some(_) = any.downcast_ref::<PgCatalogCastProvider>() {
169+
"pg_catalog.pg_cast".to_string()
170+
} else if let Some(_) = any.downcast_ref::<PgCatalogForeignTableProvider>() {
171+
"pg_catalog.pg_foreign_table".to_string()
172+
} else if let Some(_) = any.downcast_ref::<PgCatalogOperatorProvider>() {
173+
"pg_catalog.pg_operator".to_string()
174+
} else if let Some(_) = any.downcast_ref::<PgCatalogRewriteProvider>() {
175+
"pg_catalog.pg_rewrite".to_string()
141176
} else if let Some(_) = any.downcast_ref::<RedshiftPgExternalSchemaProvider>() {
142177
"pg_catalog.pg_external_schema".to_string()
143178
} else if let Some(_) = any.downcast_ref::<RedshiftSvvTablesTableProvider>() {
@@ -404,6 +439,31 @@ impl DatabaseProtocol {
404439
)))
405440
}
406441
"pg_shdescription" => return Some(Arc::new(PgCatalogShdescriptionProvider::new())),
442+
"pg_locks" => return Some(Arc::new(PgCatalogLocksProvider::new())),
443+
"pg_timezone_names" => {
444+
return Some(Arc::new(PgCatalogTimezoneNamesProvider::new()))
445+
}
446+
"pg_timezone_abbrevs" => {
447+
return Some(Arc::new(PgCatalogTimezoneAbbrevsProvider::new()))
448+
}
449+
"pg_auth_members" => return Some(Arc::new(PgCatalogAuthMembersProvider::new())),
450+
"pg_tablespace" => return Some(Arc::new(PgCatalogTablespaceProvider::new())),
451+
"pg_event_trigger" => return Some(Arc::new(PgCatalogEventTriggerProvider::new())),
452+
"pg_foreign_data_wrapper" => {
453+
return Some(Arc::new(PgCatalogForeignDataWrapperProvider::new()))
454+
}
455+
"pg_foreign_server" => {
456+
return Some(Arc::new(PgCatalogForeignServerProvider::new()))
457+
}
458+
"pg_user_mapping" => return Some(Arc::new(PgCatalogUserMappingProvider::new())),
459+
"pg_available_extension_versions" => {
460+
return Some(Arc::new(PgCatalogAvailableExtensionVersionsProvider::new()))
461+
}
462+
"pg_language" => return Some(Arc::new(PgCatalogLanguageProvider::new())),
463+
"pg_cast" => return Some(Arc::new(PgCatalogCastProvider::new())),
464+
"pg_foreign_table" => return Some(Arc::new(PgCatalogForeignTableProvider::new())),
465+
"pg_operator" => return Some(Arc::new(PgCatalogOperatorProvider::new())),
466+
"pg_rewrite" => return Some(Arc::new(PgCatalogRewriteProvider::new())),
407467
"pg_external_schema" => {
408468
return Some(Arc::new(RedshiftPgExternalSchemaProvider::new()))
409469
}

0 commit comments

Comments
 (0)