Skip to main content

sql_fun_server_api/
list_objects.rs

1use std::path::PathBuf;
2
3use crate::TextSpan;
4
5/// filter condition for string
6#[derive(serde::Serialize, serde::Deserialize)]
7pub enum StringPred {
8    /// exact matchs string
9    Exact(String),
10    /// match prefix
11    StartsWith(String),
12    /// match postfix
13    EndsWith(String),
14}
15
16/// filter condition for object name
17#[derive(serde::Serialize, serde::Deserialize)]
18pub enum NameQuery {
19    /// local name
20    LocalName(StringPred),
21    /// shcema name
22    SchemaName(StringPred),
23}
24
25/// object kind.
26#[derive(serde::Serialize, serde::Deserialize)]
27pub enum ObjectKind {
28    /// All object kind
29    ///
30    /// Used only in object query predicate.
31    All,
32    /// table
33    Table,
34    /// view
35    View,
36    /// type
37    Type,
38    /// function
39    Function,
40    /// materialized view
41    MaterializedView,
42    /// sequence
43    Sequence,
44    /// trigger
45    Trigger,
46    /// index
47    Index,
48}
49
50/// filter conditions
51#[derive(serde::Serialize, serde::Deserialize)]
52pub enum ObjectQuery {
53    /// object kind
54    Kind(ObjectKind),
55    /// object schema name, local name predicate
56    Name(NameQuery),
57    /// filter any condition
58    Or(Vec<ObjectQuery>),
59    /// filter all condition
60    And(Vec<ObjectQuery>),
61    /// negate condition
62    Not(Box<ObjectQuery>),
63}
64
65/// specify optional field to retuns API result
66#[derive(serde::Serialize, serde::Deserialize)]
67pub enum ObjectSummaryField {
68    /// returns `definition_file` field
69    DefinitionFile,
70    /// returns `definition_span` field
71    DefinitionSpan,
72}
73
74/// argument for [`SqlFunServerApi::list_object`]
75#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
76pub struct ListObjectArgs {
77    /// predicate
78    predicate: ObjectQuery,
79    /// extra field
80    extra_fields: Vec<ObjectSummaryField>,
81}
82
83/// database object summary
84#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
85pub struct ObjectSummary {
86    /// schema name
87    schema_name: String,
88    /// local name
89    local_name: String,
90    /// object kind
91    kind: ObjectKind,
92    /// definition SQL file
93    definition_file: Option<PathBuf>,
94    /// definition statement span
95    definition_span: Option<TextSpan>,
96}