Skip to main content

mz_expr/scalar/func/impls/
catalog.rs

1// Copyright Materialize, Inc. and contributors. All rights reserved.
2//
3// Use of this software is governed by the Business Source License
4// included in the LICENSE file.
5//
6// As of the Change Date specified in that file, in accordance with
7// the Business Source License, use of this software will be governed
8// by the Apache License, Version 2.0.
9
10//! Scalar functions that decode durable catalog data for the builtin catalog
11//! views. The decoders live in `mz_catalog_decode`, documented there.
12
13use mz_catalog_decode::{audit_log, create_sql, durable};
14use mz_expr_derive::sqlfunc;
15use mz_repr::ArrayRustType;
16use mz_repr::adt::jsonb::{Jsonb, JsonbRef};
17use mz_repr::adt::mz_acl_item::MzAclItem;
18
19use crate::EvalError;
20
21fn catalog_err(e: String) -> EvalError {
22    EvalError::InvalidCatalogJson(e.into())
23}
24
25fn to_jsonb(val: serde_json::Value) -> Jsonb {
26    Jsonb::from_serde_json(val).expect("valid JSONB")
27}
28
29#[sqlfunc]
30fn parse_catalog_id<'a>(a: JsonbRef<'a>) -> Result<String, EvalError> {
31    durable::catalog_id(a).map_err(catalog_err)
32}
33
34#[sqlfunc]
35fn parse_catalog_privileges<'a>(a: JsonbRef<'a>) -> Result<ArrayRustType<MzAclItem>, EvalError> {
36    durable::privileges(a)
37        .map(ArrayRustType)
38        .map_err(catalog_err)
39}
40
41/// Returns the PostgreSQL ACL char-code string (e.g. `"ar"`) of a catalog
42/// `AclMode`.
43#[sqlfunc]
44fn parse_catalog_acl_mode<'a>(a: JsonbRef<'a>) -> Result<String, EvalError> {
45    durable::acl_mode(a)
46        .map(|mode| mode.to_string())
47        .map_err(catalog_err)
48}
49
50#[sqlfunc]
51fn parse_catalog_audit_log_details<'a>(a: JsonbRef<'a>) -> Result<Jsonb, EvalError> {
52    audit_log::details(a).map_err(catalog_err)
53}
54
55#[sqlfunc]
56fn parse_catalog_create_sql<'a>(a: &'a str) -> Result<Jsonb, EvalError> {
57    create_sql::item_details(a)
58        .map(to_jsonb)
59        .map_err(catalog_err)
60}
61
62#[sqlfunc]
63fn parse_catalog_item_references<'a>(a: &'a str) -> Result<Jsonb, EvalError> {
64    create_sql::item_references(a)
65        .map(to_jsonb)
66        .map_err(catalog_err)
67}
68
69#[sqlfunc]
70fn parse_postgres_source_details<'a>(a: &'a str) -> Result<Jsonb, EvalError> {
71    create_sql::postgres_source_details(a)
72        .map(to_jsonb)
73        .map_err(catalog_err)
74}
75
76#[sqlfunc]
77fn parse_kafka_source_details<'a>(a: &'a str) -> Result<Jsonb, EvalError> {
78    create_sql::kafka_source_details(a)
79        .map(to_jsonb)
80        .map_err(catalog_err)
81}
82
83#[sqlfunc]
84fn parse_source_export_details<'a>(a: &'a str) -> Result<Jsonb, EvalError> {
85    create_sql::source_export_details(a)
86        .map(to_jsonb)
87        .map_err(catalog_err)
88}
89
90#[sqlfunc]
91fn parse_connection_details<'a>(a: &'a str) -> Result<Jsonb, EvalError> {
92    create_sql::connection_details(a)
93        .map(to_jsonb)
94        .map_err(catalog_err)
95}