Skip to content

Commit

Permalink
fix(cubesql): has_schema_privilege - compatiblity with PostgreSQL (#8098
Browse files Browse the repository at this point in the history
)
  • Loading branch information
ovr committed Apr 9, 2024
1 parent 1a0cf1c commit 42586cf
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 28 deletions.
33 changes: 25 additions & 8 deletions rust/cubesql/cubesql/src/compile/engine/udf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2697,16 +2697,33 @@ pub fn create_has_schema_privilege_udf(state: Arc<SessionState>) -> ScalarUDF {
}
};

match privilege {
"CREATE" => Some(false),
"USAGE" => Some(true),
_ => {
return Err(DataFusionError::Execution(format!(
"unrecognized privilege type: \"{}\"",
privilege
)))
let requested = if privilege.contains(",") {
privilege
.split(",")
.map(|v| v.trim().to_lowercase())
.collect()
} else {
vec![privilege.to_lowercase()]
};

let mut result = true;

for request in requested {
match request.as_str() {
"create" => {
result = false;
}
"usage" => {}
_ => {
return Err(DataFusionError::Execution(format!(
"unrecognized privilege type: \"{}\"",
privilege
)))
}
}
}

Some(result)
}
_ => None,
})
Expand Down
28 changes: 24 additions & 4 deletions rust/cubesql/cubesql/src/compile/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9884,8 +9884,10 @@ ORDER BY
execute_query(
"SELECT
nspname,
has_schema_privilege('ovr', nspname, 'CREATE') create,
has_schema_privilege('ovr', nspname, 'USAGE') usage
has_schema_privilege('ovr', nspname, 'CREATE') create_top,
has_schema_privilege('ovr', nspname, 'create') create_lower,
has_schema_privilege('ovr', nspname, 'USAGE') usage_top,
has_schema_privilege('ovr', nspname, 'usage') usage_lower
FROM pg_namespace
ORDER BY nspname ASC
"
Expand All @@ -9900,8 +9902,26 @@ ORDER BY
execute_query(
"SELECT
nspname,
has_schema_privilege(nspname, 'CREATE') create,
has_schema_privilege(nspname, 'USAGE') usage
has_schema_privilege(nspname, 'CREATE') create_top,
has_schema_privilege(nspname, 'create') create_lower,
has_schema_privilege(nspname, 'USAGE') usage_top,
has_schema_privilege(nspname, 'usage') usage_lower
FROM pg_namespace
ORDER BY nspname ASC
"
.to_string(),
DatabaseProtocol::PostgreSQL
)
.await?
);

insta::assert_snapshot!(
"has_schema_privilege_multiple",
execute_query(
"SELECT
nspname,
has_schema_privilege(nspname, 'create,usage') create_usage,
has_schema_privilege(nspname, 'usage,create') usage_create
FROM pg_namespace
ORDER BY nspname ASC
"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
---
source: cubesql/src/compile/mod.rs
expression: "execute_query(\"SELECT\n nspname,\n has_schema_privilege('ovr', nspname, 'CREATE') create,\n has_schema_privilege('ovr', nspname, 'USAGE') usage\n FROM pg_namespace\n ORDER BY nspname ASC\n \".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
assertion_line: 9882
expression: "execute_query(\"SELECT\n nspname,\n has_schema_privilege('ovr', nspname, 'CREATE') create_top,\n has_schema_privilege('ovr', nspname, 'create') create_lower,\n has_schema_privilege('ovr', nspname, 'USAGE') usage_top,\n has_schema_privilege('ovr', nspname, 'usage') usage_lower\n FROM pg_namespace\n ORDER BY nspname ASC\n \".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
---
+--------------------+--------+-------+
| nspname | create | usage |
+--------------------+--------+-------+
| information_schema | false | true |
| pg_catalog | false | true |
| public | false | true |
+--------------------+--------+-------+
+--------------------+------------+--------------+-----------+-------------+
| nspname | create_top | create_lower | usage_top | usage_lower |
+--------------------+------------+--------------+-----------+-------------+
| information_schema | false | false | true | true |
| pg_catalog | false | false | true | true |
| public | false | false | true | true |
+--------------------+------------+--------------+-----------+-------------+
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
---
source: cubesql/src/compile/mod.rs
expression: "execute_query(\"SELECT\n nspname,\n has_schema_privilege(nspname, 'CREATE') create,\n has_schema_privilege(nspname, 'USAGE') usage\n FROM pg_namespace\n ORDER BY nspname ASC\n \".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
assertion_line: 9900
expression: "execute_query(\"SELECT\n nspname,\n has_schema_privilege(nspname, 'CREATE') create_top,\n has_schema_privilege(nspname, 'create') create_lower,\n has_schema_privilege(nspname, 'USAGE') usage_top,\n has_schema_privilege(nspname, 'usage') usage_lower\n FROM pg_namespace\n ORDER BY nspname ASC\n \".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
---
+--------------------+--------+-------+
| nspname | create | usage |
+--------------------+--------+-------+
| information_schema | false | true |
| pg_catalog | false | true |
| public | false | true |
+--------------------+--------+-------+
+--------------------+------------+--------------+-----------+-------------+
| nspname | create_top | create_lower | usage_top | usage_lower |
+--------------------+------------+--------------+-----------+-------------+
| information_schema | false | false | true | true |
| pg_catalog | false | false | true | true |
| public | false | false | true | true |
+--------------------+------------+--------------+-----------+-------------+
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
source: cubesql/src/compile/mod.rs
assertion_line: 9918
expression: "execute_query(\"SELECT\n nspname,\n has_schema_privilege(nspname, 'create,usage') create_usage,\n has_schema_privilege(nspname, 'usage,create') usage_create\n FROM pg_namespace\n ORDER BY nspname ASC\n \".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
---
+--------------------+--------------+--------------+
| nspname | create_usage | usage_create |
+--------------------+--------------+--------------+
| information_schema | false | false |
| pg_catalog | false | false |
| public | false | false |
+--------------------+--------------+--------------+

0 comments on commit 42586cf

Please sign in to comment.