Skip to content

Commit cea3338

Browse files
committed
test: datagrip startup queries
1 parent 4d71aec commit cea3338

1 file changed

Lines changed: 92 additions & 0 deletions

File tree

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
mod common;
2+
3+
use common::*;
4+
use pgwire::api::query::SimpleQueryHandler;
5+
6+
const DATAGRIP_QUERIES: &[&str] = &[
7+
"SET extra_float_digits = 3",
8+
"SET application_name = ''",
9+
"select version()",
10+
"SET application_name = 'DataGrip 2025.2.3'",
11+
"select current_database() as a, current_schemas(false) as b",
12+
"SHOW TRANSACTION ISOLATION LEVEL",
13+
"select round(extract(epoch from pg_postmaster_start_time() at time zone 'UTC')) as startup_time",
14+
"select L.transactionid::varchar::bigint as transaction_id
15+
from pg_catalog.pg_locks L
16+
where L.transactionid is not null
17+
order by pg_catalog.age(L.transactionid) desc
18+
limit 1",
19+
"select case
20+
when pg_catalog.pg_is_in_recovery()
21+
then null
22+
else
23+
(pg_catalog.txid_current() % 4294967296)::varchar::bigint
24+
end as current_txid",
25+
r#"select N.oid::bigint as id,
26+
datname as name,
27+
D.description,
28+
datistemplate as is_template,
29+
datallowconn as allow_connections,
30+
pg_catalog.pg_get_userbyid(N.datdba) as "owner"
31+
from pg_catalog.pg_database N
32+
left join pg_catalog.pg_shdescription D on N.oid = D.objoid
33+
order by case when datname = pg_catalog.current_database() then -1::bigint else N.oid::bigint end"#,
34+
r#"select N.oid::bigint as id,
35+
N.xmin as state_number,
36+
nspname as name,
37+
D.description,
38+
pg_catalog.pg_get_userbyid(N.nspowner) as "owner"
39+
from pg_catalog.pg_namespace N
40+
left join pg_catalog.pg_description D on N.oid = D.objoid
41+
order by case when nspname = pg_catalog.current_schema() then -1::bigint else N.oid::bigint end"#,
42+
r#"SELECT typinput='pg_catalog.array_in'::regproc as is_array, typtype, typname, pg_type.oid FROM pg_catalog.pg_type LEFT JOIN (select ns.oid as nspoid, ns.nspname, r.r from pg_namespace as ns join ( select s.r, (current_schemas(false))[s.r] as nspname from generate_series(1, array_upper(current_schemas(false), 1)) as s(r) ) as r using ( nspname ) ) as sp ON sp.nspoid = typnamespace WHERE pg_type.oid = '28' ORDER BY sp.r, pg_type.oid DESC"#,
43+
r#"show DateStyle"#,
44+
r#"select name, is_dst from pg_catalog.pg_timezone_names
45+
union distinct
46+
select abbrev as name, is_dst from pg_catalog.pg_timezone_abbrevs"#,
47+
r#"select R.oid::bigint as role_id, rolname as role_name,
48+
rolsuper is_super, rolinherit is_inherit,
49+
rolcreaterole can_createrole, rolcreatedb can_createdb,
50+
rolcanlogin can_login, rolreplication /* false */ is_replication,
51+
rolconnlimit conn_limit, rolvaliduntil valid_until,
52+
rolbypassrls /* false */ bypass_rls, rolconfig config,
53+
D.description
54+
from pg_catalog.pg_roles R
55+
left join pg_catalog.pg_shdescription D on D.objoid = R.oid"#,
56+
r#"select member id, roleid role_id, admin_option
57+
from pg_catalog.pg_auth_members order by id, roleid::text"#,
58+
r#"select T.oid::bigint as id, T.spcname as name,
59+
T.xmin as state_number, pg_catalog.pg_get_userbyid(T.spcowner) as owner,
60+
pg_catalog.pg_tablespace_location(T.oid) /* null */ as location,
61+
T.spcoptions /* null */ as options,
62+
D.description as comment
63+
from pg_catalog.pg_tablespace T
64+
left join pg_catalog.pg_shdescription D on D.objoid = T.oid
65+
-- where pg_catalog.age(T.xmin) <= #TXAGE"#,
66+
r#"select T.oid as object_id,
67+
T.spcacl as acl
68+
from pg_catalog.pg_tablespace T
69+
union all
70+
select T.oid as object_id,
71+
T.datacl as acl
72+
from pg_catalog.pg_database T"#,
73+
r#" SELECT typinput='pg_catalog.array_in'::regproc as is_array, typtype, typname, pg_type.oid FROM pg_catalog.pg_type LEFT JOIN (select ns.oid as nspoid, ns.nspname, r.r from pg_namespace as ns join ( select s.r, (current_schemas(false))[s.r] as nspname from generate_series(1, array_upper(current_schemas(false), 1)) as s(r) ) as r using ( nspname ) ) as sp ON sp.nspoid = typnamespace WHERE pg_type.oid = '1034' ORDER BY sp.r, pg_type.oid DESC"#,
74+
r#"SELECT e.typdelim FROM pg_catalog.pg_type t, pg_catalog.pg_type e WHERE t.oid = '1034' and t.typelem = e.oid"#,
75+
r#" SELECT e.oid, n.nspname = ANY(current_schemas(true)), n.nspname, e.typname FROM pg_catalog.pg_type t JOIN pg_catalog.pg_type e ON t.typelem = e.oid JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid WHERE t.oid = '1034'"#,
76+
r#"SELECT typinput='pg_catalog.array_in'::regproc as is_array, typtype, typname, pg_type.oid FROM pg_catalog.pg_type LEFT JOIN (select ns.oid as nspoid, ns.nspname, r.r from pg_namespace as ns join ( select s.r, (current_schemas(false))[s.r] as nspname from generate_series(1, array_upper(current_schemas(false), 1)) as s(r) ) as r using ( nspname ) ) as sp ON sp.nspoid = typnamespace WHERE pg_type.oid = '1033' ORDER BY sp.r, pg_type.oid DESC"#,
77+
];
78+
79+
#[tokio::test]
80+
pub async fn test_datagrip_startup_sql() {
81+
env_logger::init();
82+
let service = setup_handlers();
83+
let mut client = MockClient::new();
84+
85+
for query in DATAGRIP_QUERIES {
86+
SimpleQueryHandler::do_query(&service, &mut client, query)
87+
.await
88+
.unwrap_or_else(|e| {
89+
panic!("failed to run sql:\n-----------------\n {query}\n-----------------\n {e}")
90+
});
91+
}
92+
}

0 commit comments

Comments
 (0)