1#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum SelectInputFormat {
6 #[default]
7 Csv,
8 Json,
9 Parquet,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
14pub enum SelectOutputFormat {
15 #[default]
16 Csv,
17 Json,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
22pub enum SelectCompression {
23 #[default]
24 None,
25 Gzip,
26 Bzip2,
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
31pub enum SelectCsvFileHeaderInfo {
32 #[default]
33 None,
34 Ignore,
35 Use,
36}
37
38#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
40pub enum SelectJsonInputType {
41 #[default]
42 Lines,
43 Document,
44}
45
46#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
48pub enum SelectQuoteFields {
49 Always,
50 #[default]
51 AsNeeded,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Default)]
56pub struct SelectCsvInputOptions {
57 pub file_header_info: SelectCsvFileHeaderInfo,
58 pub field_delimiter: Option<String>,
59 pub quote_character: Option<String>,
60 pub quote_escape_character: Option<String>,
61 pub comments: Option<String>,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Default)]
66pub struct SelectCsvOutputOptions {
67 pub field_delimiter: Option<String>,
68 pub record_delimiter: Option<String>,
69 pub quote_character: Option<String>,
70 pub quote_escape_character: Option<String>,
71 pub quote_fields: SelectQuoteFields,
72}
73
74#[derive(Debug, Clone, PartialEq, Eq, Default)]
76pub struct SelectJsonInputOptions {
77 pub input_type: SelectJsonInputType,
78}
79
80#[derive(Debug, Clone, PartialEq, Eq, Default)]
82pub struct SelectJsonOutputOptions {
83 pub record_delimiter: Option<String>,
84}
85
86#[derive(Debug, Clone, PartialEq, Eq, Default)]
88pub struct SelectScanRangeOptions {
89 pub start: Option<i64>,
90 pub end: Option<i64>,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Default)]
95pub struct SelectSseCustomerOptions {
96 pub algorithm: Option<String>,
97 pub key: Option<String>,
98 pub key_md5: Option<String>,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq)]
103pub struct SelectOptions {
104 pub expression: String,
106 pub input_format: SelectInputFormat,
107 pub output_format: SelectOutputFormat,
108 pub compression: SelectCompression,
109 pub csv_input: SelectCsvInputOptions,
110 pub csv_output: SelectCsvOutputOptions,
111 pub json_input: SelectJsonInputOptions,
112 pub json_output: SelectJsonOutputOptions,
113 pub scan_range: SelectScanRangeOptions,
114 pub sse_customer: SelectSseCustomerOptions,
115}
116
117impl Default for SelectOptions {
118 fn default() -> Self {
119 Self {
120 expression: String::new(),
121 input_format: SelectInputFormat::Csv,
122 output_format: SelectOutputFormat::Csv,
123 compression: SelectCompression::None,
124 csv_input: SelectCsvInputOptions::default(),
125 csv_output: SelectCsvOutputOptions::default(),
126 json_input: SelectJsonInputOptions::default(),
127 json_output: SelectJsonOutputOptions::default(),
128 scan_range: SelectScanRangeOptions::default(),
129 sse_customer: SelectSseCustomerOptions::default(),
130 }
131 }
132}