sql_fun_server_api/
analyze_query.rs1use std::path::PathBuf;
2
3use url::Url;
4
5use crate::{
6 AnalysisProbrem, Collection, ContextHandle, Nullability, ObjectKind, ObjectSummary, TextSpan,
7 TypeReference,
8};
9
10#[derive(serde::Serialize, serde::Deserialize)]
12pub enum AnalyzeQueryInput {
13 Text(String),
15 File(PathBuf),
17 Url(Url),
19}
20
21#[derive(serde::Serialize, serde::Deserialize)]
23pub struct AnalyzeQueryArgs {
24 context_handle: ContextHandle,
26 query: AnalyzeQueryInput,
28}
29
30#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
32pub struct AnalyzeQueryResponse {
33 queries: Collection<AnalyzeQueryItem>,
34}
35
36#[derive(serde::Serialize, serde::Deserialize)]
38pub enum QueryKind {
39 Select,
41 Insert,
43 Update,
45 Delete,
47 Truncate,
49}
50
51#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
53pub struct AnalyzeQueryItem {
54 query_span: TextSpan,
56
57 query_kind: QueryKind,
59
60 probrems: Collection<AnalysisProbrem>,
62
63 accessing_relations: Collection<ObjectSummary>,
65
66 column_access: Collection<ColumnAccess>,
68
69 parameters: Collection<ParameterDescribe>,
71
72 result_columns: Collection<ResultSetColumn>,
74}
75
76#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
78pub struct ParameterDescribe {
79 name: String,
81 spans: Vec<TextSpan>,
83 type_candiate: Vec<TypeReference>,
85 nullability: Nullability,
87}
88
89#[derive(serde::Serialize, serde::Deserialize)]
91pub enum ColumnAccessKind {
92 SelectResTarget,
94
95 SelectFrom,
97
98 SelectWhere,
100
101 SelectOrderBy,
103
104 SelectGroupBy,
106
107 SelectHaving,
109
110 UpdateSet,
112
113 UpdateSetValue,
115
116 UpdateFrom,
118
119 UpdateWhere,
121
122 InsertInto,
124
125 Delete,
127}
128
129#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
131pub struct ColumnAccess {
132 accessing_span: TextSpan,
134
135 relation_schema: String,
137
138 relation_local_name: String,
140
141 relation_kind: ObjectKind,
143
144 column_name: String,
146
147 column_ordinal: usize,
149
150 access_kind: ColumnAccessKind,
152}
153
154#[derive(serde::Serialize, serde::Deserialize, derive_getters::Getters)]
156pub struct ResultSetColumn {
157 ordinal: u32,
159 name: String,
161 column_type: Option<TypeReference>,
163 nullability: Nullability,
165}