1use std::sync::Arc;
16
17use common_catalog::consts::{METRIC_ENGINE, MITO_ENGINE};
18use datatypes::schema::{Schema, SchemaRef};
19use datatypes::vectors::{Int64Vector, StringVector, VectorRef};
20
21use crate::system_schema::information_schema::table_names::*;
22use crate::system_schema::utils::tables::{
23 bigint_column, string_column, string_columns, timestamp_micro_column,
24};
25
26const NO_VALUE: &str = "NO";
27
28pub(super) fn get_schema_columns(table_name: &str) -> (SchemaRef, Vec<VectorRef>) {
31 let (column_schemas, columns): (_, Vec<VectorRef>) = match table_name {
32 COLUMN_PRIVILEGES => (
33 string_columns(&[
34 "GRANTEE",
35 "TABLE_CATALOG",
36 "TABLE_SCHEMA",
37 "TABLE_NAME",
38 "COLUMN_NAME",
39 "PRIVILEGE_TYPE",
40 "IS_GRANTABLE",
41 ]),
42 vec![],
43 ),
44
45 COLUMN_STATISTICS => (
46 string_columns(&[
47 "SCHEMA_NAME",
48 "TABLE_NAME",
49 "COLUMN_NAME",
50 "HISTOGRAM",
52 ]),
53 vec![],
54 ),
55
56 ENGINES => (
57 string_columns(&[
58 "ENGINE",
59 "SUPPORT",
60 "COMMENT",
61 "TRANSACTIONS",
62 "XA",
63 "SAVEPOINTS",
64 ]),
65 vec![
66 Arc::new(StringVector::from(vec![MITO_ENGINE, METRIC_ENGINE])),
67 Arc::new(StringVector::from(vec!["DEFAULT", "YES"])),
68 Arc::new(StringVector::from(vec![
69 "Storage engine for time-series data",
70 "Storage engine for observability scenarios, which is adept at handling a large number of small tables, making it particularly suitable for cloud-native monitoring",
71 ])),
72 Arc::new(StringVector::from(vec![NO_VALUE, NO_VALUE])),
73 Arc::new(StringVector::from(vec![NO_VALUE, NO_VALUE])),
74 Arc::new(StringVector::from(vec![NO_VALUE, NO_VALUE])),
75 ],
76 ),
77
78 BUILD_INFO => {
79 let build_info = common_version::build_info();
80 (
81 string_columns(&[
82 "GIT_BRANCH",
83 "GIT_COMMIT",
84 "GIT_COMMIT_SHORT",
85 "GIT_CLEAN",
86 "PKG_VERSION",
87 ]),
88 vec![
89 Arc::new(StringVector::from(vec![build_info.branch.to_string()])),
90 Arc::new(StringVector::from(vec![build_info.commit.to_string()])),
91 Arc::new(StringVector::from(vec![build_info
92 .commit_short
93 .to_string()])),
94 Arc::new(StringVector::from(vec![build_info.clean.to_string()])),
95 Arc::new(StringVector::from(vec![build_info.version.to_string()])),
96 ],
97 )
98 }
99
100 CHARACTER_SETS => (
101 vec![
102 string_column("CHARACTER_SET_NAME"),
103 string_column("DEFAULT_COLLATE_NAME"),
104 string_column("DESCRIPTION"),
105 bigint_column("MAXLEN"),
106 ],
107 vec![
108 Arc::new(StringVector::from(vec!["utf8"])),
109 Arc::new(StringVector::from(vec!["utf8_bin"])),
110 Arc::new(StringVector::from(vec!["UTF-8 Unicode"])),
111 Arc::new(Int64Vector::from_slice([4])),
112 ],
113 ),
114
115 COLLATIONS => (
116 vec![
117 string_column("COLLATION_NAME"),
118 string_column("CHARACTER_SET_NAME"),
119 bigint_column("ID"),
120 string_column("IS_DEFAULT"),
121 string_column("IS_COMPILED"),
122 bigint_column("SORTLEN"),
123 ],
124 vec![
125 Arc::new(StringVector::from(vec!["utf8_bin"])),
126 Arc::new(StringVector::from(vec!["utf8"])),
127 Arc::new(Int64Vector::from_slice([1])),
128 Arc::new(StringVector::from(vec!["Yes"])),
129 Arc::new(StringVector::from(vec!["Yes"])),
130 Arc::new(Int64Vector::from_slice([1])),
131 ],
132 ),
133
134 COLLATION_CHARACTER_SET_APPLICABILITY => (
135 vec![
136 string_column("COLLATION_NAME"),
137 string_column("CHARACTER_SET_NAME"),
138 ],
139 vec![
140 Arc::new(StringVector::from(vec!["utf8_bin"])),
141 Arc::new(StringVector::from(vec!["utf8"])),
142 ],
143 ),
144
145 CHECK_CONSTRAINTS => (
146 string_columns(&[
147 "CONSTRAINT_CATALOG",
148 "CONSTRAINT_SCHEMA",
149 "CONSTRAINT_NAME",
150 "CHECK_CLAUSE",
151 ]),
152 vec![],
154 ),
155
156 EVENTS => (
157 vec![
158 string_column("EVENT_CATALOG"),
159 string_column("EVENT_SCHEMA"),
160 string_column("EVENT_NAME"),
161 string_column("DEFINER"),
162 string_column("TIME_ZONE"),
163 string_column("EVENT_BODY"),
164 string_column("EVENT_DEFINITION"),
165 string_column("EVENT_TYPE"),
166 timestamp_micro_column("EXECUTE_AT"),
167 bigint_column("INTERVAL_VALUE"),
168 string_column("INTERVAL_FIELD"),
169 string_column("SQL_MODE"),
170 timestamp_micro_column("STARTS"),
171 timestamp_micro_column("ENDS"),
172 string_column("STATUS"),
173 string_column("ON_COMPLETION"),
174 timestamp_micro_column("CREATED"),
175 timestamp_micro_column("LAST_ALTERED"),
176 timestamp_micro_column("LAST_EXECUTED"),
177 string_column("EVENT_COMMENT"),
178 bigint_column("ORIGINATOR"),
179 string_column("CHARACTER_SET_CLIENT"),
180 string_column("COLLATION_CONNECTION"),
181 string_column("DATABASE_COLLATION"),
182 ],
183 vec![],
184 ),
185
186 FILES => (
187 vec![
188 bigint_column("FILE_ID"),
189 string_column("FILE_NAME"),
190 string_column("FILE_TYPE"),
191 string_column("TABLESPACE_NAME"),
192 string_column("TABLE_CATALOG"),
193 string_column("TABLE_SCHEMA"),
194 string_column("TABLE_NAME"),
195 string_column("LOGFILE_GROUP_NAME"),
196 bigint_column("LOGFILE_GROUP_NUMBER"),
197 string_column("ENGINE"),
198 string_column("FULLTEXT_KEYS"),
199 bigint_column("DELETED_ROWS"),
200 bigint_column("UPDATE_COUNT"),
201 bigint_column("FREE_EXTENTS"),
202 bigint_column("TOTAL_EXTENTS"),
203 bigint_column("EXTENT_SIZE"),
204 bigint_column("INITIAL_SIZE"),
205 bigint_column("MAXIMUM_SIZE"),
206 bigint_column("AUTOEXTEND_SIZE"),
207 timestamp_micro_column("CREATION_TIME"),
208 timestamp_micro_column("LAST_UPDATE_TIME"),
209 timestamp_micro_column("LAST_ACCESS_TIME"),
210 timestamp_micro_column("RECOVER_TIME"),
211 bigint_column("TRANSACTION_COUNTER"),
212 string_column("VERSION"),
213 string_column("ROW_FORMAT"),
214 bigint_column("TABLE_ROWS"),
215 bigint_column("AVG_ROW_LENGTH"),
216 bigint_column("DATA_LENGTH"),
217 bigint_column("MAX_DATA_LENGTH"),
218 bigint_column("INDEX_LENGTH"),
219 bigint_column("DATA_FREE"),
220 timestamp_micro_column("CREATE_TIME"),
221 timestamp_micro_column("UPDATE_TIME"),
222 timestamp_micro_column("CHECK_TIME"),
223 string_column("CHECKSUM"),
224 string_column("STATUS"),
225 string_column("EXTRA"),
226 ],
227 vec![],
228 ),
229
230 OPTIMIZER_TRACE => (
231 vec![
232 string_column("QUERY"),
233 string_column("TRACE"),
234 bigint_column("MISSING_BYTES_BEYOND_MAX_MEM_SIZE"),
235 bigint_column("INSUFFICIENT_PRIVILEGES"),
236 ],
237 vec![],
238 ),
239
240 PARAMETERS => (
245 vec![
246 string_column("SPECIFIC_CATALOG"),
247 string_column("SPECIFIC_SCHEMA"),
248 string_column("SPECIFIC_NAME"),
249 bigint_column("ORDINAL_POSITION"),
250 string_column("PARAMETER_MODE"),
251 string_column("PARAMETER_NAME"),
252 string_column("DATA_TYPE"),
253 bigint_column("CHARACTER_MAXIMUM_LENGTH"),
254 bigint_column("CHARACTER_OCTET_LENGTH"),
255 bigint_column("NUMERIC_PRECISION"),
256 bigint_column("NUMERIC_SCALE"),
257 bigint_column("DATETIME_PRECISION"),
258 string_column("CHARACTER_SET_NAME"),
259 string_column("COLLATION_NAME"),
260 string_column("DTD_IDENTIFIER"),
261 string_column("ROUTINE_TYPE"),
262 ],
263 vec![],
264 ),
265
266 PROFILING => (
267 vec![
268 bigint_column("QUERY_ID"),
269 bigint_column("SEQ"),
270 string_column("STATE"),
271 bigint_column("DURATION"),
272 bigint_column("CPU_USER"),
273 bigint_column("CPU_SYSTEM"),
274 bigint_column("CONTEXT_VOLUNTARY"),
275 bigint_column("CONTEXT_INVOLUNTARY"),
276 bigint_column("BLOCK_OPS_IN"),
277 bigint_column("BLOCK_OPS_OUT"),
278 bigint_column("MESSAGES_SENT"),
279 bigint_column("MESSAGES_RECEIVED"),
280 bigint_column("PAGE_FAULTS_MAJOR"),
281 bigint_column("PAGE_FAULTS_MINOR"),
282 bigint_column("SWAPS"),
283 string_column("SOURCE_FUNCTION"),
284 string_column("SOURCE_FILE"),
285 bigint_column("SOURCE_LINE"),
286 ],
287 vec![],
288 ),
289
290 REFERENTIAL_CONSTRAINTS => (
292 vec![
293 string_column("CONSTRAINT_CATALOG"),
294 string_column("CONSTRAINT_SCHEMA"),
295 string_column("CONSTRAINT_NAME"),
296 string_column("UNIQUE_CONSTRAINT_CATALOG"),
297 string_column("UNIQUE_CONSTRAINT_SCHEMA"),
298 string_column("UNIQUE_CONSTRAINT_NAME"),
299 string_column("MATCH_OPTION"),
300 string_column("UPDATE_RULE"),
301 string_column("DELETE_RULE"),
302 string_column("TABLE_NAME"),
303 string_column("REFERENCED_TABLE_NAME"),
304 ],
305 vec![],
306 ),
307
308 ROUTINES => (
309 vec![
310 string_column("SPECIFIC_NAME"),
311 string_column("ROUTINE_CATALOG"),
312 string_column("ROUTINE_SCHEMA"),
313 string_column("ROUTINE_NAME"),
314 string_column("ROUTINE_TYPE"),
315 string_column("DATA_TYPE"),
316 bigint_column("CHARACTER_MAXIMUM_LENGTH"),
317 bigint_column("CHARACTER_OCTET_LENGTH"),
318 bigint_column("NUMERIC_PRECISION"),
319 bigint_column("NUMERIC_SCALE"),
320 bigint_column("DATETIME_PRECISION"),
321 string_column("CHARACTER_SET_NAME"),
322 string_column("COLLATION_NAME"),
323 string_column("DTD_IDENTIFIER"),
324 string_column("ROUTINE_BODY"),
325 string_column("ROUTINE_DEFINITION"),
326 string_column("EXTERNAL_NAME"),
327 string_column("EXTERNAL_LANGUAGE"),
328 string_column("PARAMETER_STYLE"),
329 string_column("IS_DETERMINISTIC"),
330 string_column("SQL_DATA_ACCESS"),
331 string_column("SQL_PATH"),
332 string_column("SECURITY_TYPE"),
333 timestamp_micro_column("CREATED"),
334 timestamp_micro_column("LAST_ALTERED"),
335 string_column("SQL_MODE"),
336 string_column("ROUTINE_COMMENT"),
337 string_column("DEFINER"),
338 string_column("CHARACTER_SET_CLIENT"),
339 string_column("COLLATION_CONNECTION"),
340 string_column("DATABASE_COLLATION"),
341 ],
342 vec![],
343 ),
344
345 SCHEMA_PRIVILEGES => (
346 vec![
347 string_column("GRANTEE"),
348 string_column("TABLE_CATALOG"),
349 string_column("TABLE_SCHEMA"),
350 string_column("PRIVILEGE_TYPE"),
351 string_column("IS_GRANTABLE"),
352 ],
353 vec![],
354 ),
355
356 TABLE_PRIVILEGES => (
357 vec![
358 string_column("GRANTEE"),
359 string_column("TABLE_CATALOG"),
360 string_column("TABLE_SCHEMA"),
361 string_column("TABLE_NAME"),
362 string_column("PRIVILEGE_TYPE"),
363 string_column("IS_GRANTABLE"),
364 ],
365 vec![],
366 ),
367
368 TRIGGERS => (
369 vec![
370 string_column("TRIGGER_CATALOG"),
371 string_column("TRIGGER_SCHEMA"),
372 string_column("TRIGGER_NAME"),
373 string_column("EVENT_MANIPULATION"),
374 string_column("EVENT_OBJECT_CATALOG"),
375 string_column("EVENT_OBJECT_SCHEMA"),
376 string_column("EVENT_OBJECT_TABLE"),
377 bigint_column("ACTION_ORDER"),
378 string_column("ACTION_CONDITION"),
379 string_column("ACTION_STATEMENT"),
380 string_column("ACTION_ORIENTATION"),
381 string_column("ACTION_TIMING"),
382 string_column("ACTION_REFERENCE_OLD_TABLE"),
383 string_column("ACTION_REFERENCE_NEW_TABLE"),
384 string_column("ACTION_REFERENCE_OLD_ROW"),
385 string_column("ACTION_REFERENCE_NEW_ROW"),
386 timestamp_micro_column("CREATED"),
387 string_column("SQL_MODE"),
388 string_column("DEFINER"),
389 string_column("CHARACTER_SET_CLIENT"),
390 string_column("COLLATION_CONNECTION"),
391 string_column("DATABASE_COLLATION"),
392 ],
393 vec![],
394 ),
395
396 GLOBAL_STATUS => (
399 vec![
400 string_column("VARIABLE_NAME"),
401 string_column("VARIABLE_VALUE"),
402 ],
403 vec![],
404 ),
405
406 SESSION_STATUS => (
407 vec![
408 string_column("VARIABLE_NAME"),
409 string_column("VARIABLE_VALUE"),
410 ],
411 vec![],
412 ),
413
414 _ => unreachable!("Unknown table in information_schema: {}", table_name),
415 };
416
417 (Arc::new(Schema::new(column_schemas)), columns)
418}