Skip to content

Commit cbf55f6

Browse files
authored
upgrade sqlparser (#223)
* wip * update sql parser * fix more build errors * Fixing build failures when handling more insert stmt variants * fix quoted string * fix the way to retrieve the table identifier * fix translate_expr * fix ValuewithSpan * fix clippy * comment out CTE until it's supported * fix test snapshots * exhaustively handle all data types
1 parent cdc5ac2 commit cbf55f6

File tree

14 files changed

+360
-160
lines changed

14 files changed

+360
-160
lines changed

Cargo.lock

Lines changed: 23 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ walkdir = "2.5.0"
2222
clap = { version = "3.2.25", features = ["derive"] }
2323
serde = { version = "=1.0.209", features = ["derive"] }
2424
serde_json = { version = "1.0.143" }
25-
sqlparser = { version = "0.45.0" }
25+
sqlparser = { version = "0.59.0" }
2626
regex = { version = "1.12.2" }
2727
convert_case = "0.8.0"
2828
colored = "3.0.0"

src/ts_generator/sql_parser/expressions/translate_data_type.rs

Lines changed: 115 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,31 @@ pub fn translate_value(value: &Value) -> Option<TsFieldType> {
1010
Value::EscapedStringLiteral(_) => Some(TsFieldType::String),
1111
Value::SingleQuotedByteStringLiteral(_) => Some(TsFieldType::String),
1212
Value::DoubleQuotedByteStringLiteral(_) => Some(TsFieldType::String),
13-
Value::RawStringLiteral(_) => Some(TsFieldType::String),
13+
Value::SingleQuotedRawStringLiteral(_) => Some(TsFieldType::String),
14+
Value::DoubleQuotedRawStringLiteral(_) => Some(TsFieldType::String),
15+
Value::TripleSingleQuotedString(_) => Some(TsFieldType::String),
16+
Value::TripleDoubleQuotedString(_) => Some(TsFieldType::String),
17+
Value::UnicodeStringLiteral(_) => Some(TsFieldType::String),
18+
Value::TripleSingleQuotedRawStringLiteral(_) => Some(TsFieldType::String),
19+
Value::TripleDoubleQuotedRawStringLiteral(_) => Some(TsFieldType::String),
20+
Value::TripleSingleQuotedByteStringLiteral(_) => Some(TsFieldType::String),
21+
Value::TripleDoubleQuotedByteStringLiteral(_) => Some(TsFieldType::String),
1422
Value::NationalStringLiteral(_) => Some(TsFieldType::String),
1523
Value::HexStringLiteral(_) => Some(TsFieldType::String),
1624
Value::DoubleQuotedString(_) => Some(TsFieldType::String),
1725
Value::Boolean(_) => Some(TsFieldType::Boolean),
1826
Value::Null => Some(TsFieldType::Null),
19-
Value::UnQuotedString(_) => Some(TsFieldType::String),
2027
Value::Placeholder(_) => None,
2128
}
2229
}
2330

2431
pub fn translate_data_type(data_type: &DataType) -> TsFieldType {
2532
match &data_type {
33+
// Table types
34+
DataType::Table(_) => TsFieldType::Object,
35+
DataType::NamedTable { .. } => TsFieldType::Object,
36+
37+
// String types
2638
DataType::Character(_) => TsFieldType::String,
2739
DataType::Char(_) => TsFieldType::String,
2840
DataType::CharacterVarying(_) => TsFieldType::String,
@@ -33,67 +45,140 @@ pub fn translate_data_type(data_type: &DataType) -> TsFieldType {
3345
DataType::CharacterLargeObject(_) => TsFieldType::String,
3446
DataType::CharLargeObject(_) => TsFieldType::String,
3547
DataType::Clob(_) => TsFieldType::String,
48+
DataType::Text => TsFieldType::String,
49+
DataType::TinyText => TsFieldType::String,
50+
DataType::MediumText => TsFieldType::String,
51+
DataType::LongText => TsFieldType::String,
52+
DataType::String(_) => TsFieldType::String,
53+
DataType::FixedString(_) => TsFieldType::String,
54+
55+
// Binary types
3656
DataType::Binary(_) => TsFieldType::String,
3757
DataType::Varbinary(_) => TsFieldType::String,
3858
DataType::Blob(_) => TsFieldType::String,
59+
DataType::TinyBlob => TsFieldType::String,
60+
DataType::MediumBlob => TsFieldType::String,
61+
DataType::LongBlob => TsFieldType::String,
62+
DataType::Bytes(_) => TsFieldType::String,
63+
DataType::Bytea => TsFieldType::String,
64+
DataType::Bit(_) => TsFieldType::String,
65+
DataType::BitVarying(_) => TsFieldType::String,
66+
DataType::VarBit(_) => TsFieldType::String,
67+
68+
// Numeric types
3969
DataType::Numeric(_) => TsFieldType::Number,
4070
DataType::Decimal(_) => TsFieldType::Number,
71+
DataType::DecimalUnsigned(_) => TsFieldType::Number,
4172
DataType::BigNumeric(_) => TsFieldType::Number,
4273
DataType::BigDecimal(_) => TsFieldType::Number,
4374
DataType::Dec(_) => TsFieldType::Number,
75+
DataType::DecUnsigned(_) => TsFieldType::Number,
4476
DataType::Float(_) => TsFieldType::Number,
77+
DataType::FloatUnsigned(_) => TsFieldType::Number,
78+
DataType::Float4 => TsFieldType::Number,
79+
DataType::Float32 => TsFieldType::Number,
80+
DataType::Float64 => TsFieldType::Number,
81+
DataType::Float8 => TsFieldType::Number,
82+
DataType::Real => TsFieldType::Number,
83+
DataType::RealUnsigned => TsFieldType::Number,
84+
DataType::Double(_) => TsFieldType::Number,
85+
DataType::DoubleUnsigned(_) => TsFieldType::Number,
86+
DataType::DoublePrecision => TsFieldType::Number,
87+
DataType::DoublePrecisionUnsigned => TsFieldType::Number,
88+
89+
// Integer types
4590
DataType::TinyInt(_) => TsFieldType::Number,
46-
DataType::UnsignedTinyInt(_) => TsFieldType::Number,
91+
DataType::TinyIntUnsigned(_) => TsFieldType::Number,
92+
DataType::UTinyInt => TsFieldType::Number,
4793
DataType::SmallInt(_) => TsFieldType::Number,
48-
DataType::UnsignedSmallInt(_) => TsFieldType::Number,
94+
DataType::SmallIntUnsigned(_) => TsFieldType::Number,
95+
DataType::USmallInt => TsFieldType::Number,
4996
DataType::MediumInt(_) => TsFieldType::Number,
50-
DataType::UnsignedMediumInt(_) => TsFieldType::Number,
97+
DataType::MediumIntUnsigned(_) => TsFieldType::Number,
5198
DataType::Int(_) => TsFieldType::Number,
99+
DataType::IntUnsigned(_) => TsFieldType::Number,
100+
DataType::Int2(_) => TsFieldType::Number,
101+
DataType::Int2Unsigned(_) => TsFieldType::Number,
102+
DataType::Int4(_) => TsFieldType::Number,
103+
DataType::Int4Unsigned(_) => TsFieldType::Number,
104+
DataType::Int8(_) => TsFieldType::Number,
105+
DataType::Int8Unsigned(_) => TsFieldType::Number,
106+
DataType::Int16 => TsFieldType::Number,
107+
DataType::Int32 => TsFieldType::Number,
108+
DataType::Int64 => TsFieldType::Number,
109+
DataType::Int128 => TsFieldType::Number,
110+
DataType::Int256 => TsFieldType::Number,
52111
DataType::Integer(_) => TsFieldType::Number,
53-
DataType::UnsignedInt(_) => TsFieldType::Number,
54-
DataType::UnsignedInteger(_) => TsFieldType::Number,
112+
DataType::IntegerUnsigned(_) => TsFieldType::Number,
55113
DataType::BigInt(_) => TsFieldType::Number,
56-
DataType::UnsignedBigInt(_) => TsFieldType::Number,
57-
DataType::Real => TsFieldType::Number,
58-
DataType::Double => TsFieldType::Number,
59-
DataType::DoublePrecision => TsFieldType::Number,
114+
DataType::BigIntUnsigned(_) => TsFieldType::Number,
115+
DataType::HugeInt => TsFieldType::Number,
116+
DataType::UHugeInt => TsFieldType::Number,
117+
DataType::UBigInt => TsFieldType::Number,
118+
DataType::UInt8 => TsFieldType::Number,
119+
DataType::UInt16 => TsFieldType::Number,
120+
DataType::UInt32 => TsFieldType::Number,
121+
DataType::UInt64 => TsFieldType::Number,
122+
DataType::UInt128 => TsFieldType::Number,
123+
DataType::UInt256 => TsFieldType::Number,
124+
DataType::Signed => TsFieldType::Number,
125+
DataType::SignedInteger => TsFieldType::Number,
126+
DataType::Unsigned => TsFieldType::Number,
127+
DataType::UnsignedInteger => TsFieldType::Number,
128+
129+
// Boolean types
60130
DataType::Boolean => TsFieldType::Boolean,
131+
DataType::Bool => TsFieldType::Boolean,
132+
133+
// Date/Time types
61134
DataType::Date => TsFieldType::Date,
135+
DataType::Date32 => TsFieldType::Date,
62136
DataType::Time(_, _) => TsFieldType::Date,
63137
DataType::Datetime(_) => TsFieldType::Date,
138+
DataType::Datetime64(_, _) => TsFieldType::Date,
64139
DataType::Timestamp(_, _) => TsFieldType::String,
65-
DataType::Interval => TsFieldType::Any,
140+
DataType::TimestampNtz => TsFieldType::String,
141+
DataType::Interval { .. } => TsFieldType::Any,
142+
143+
// JSON types
66144
DataType::JSON => TsFieldType::Object,
67145
DataType::JSONB => TsFieldType::Object,
146+
147+
// PostgreSQL specific types
68148
DataType::Regclass => TsFieldType::String,
69-
DataType::Text => TsFieldType::String,
70-
DataType::String(_) => TsFieldType::String,
71-
DataType::Bytea => TsFieldType::String,
149+
DataType::GeometricType(_) => TsFieldType::Object,
150+
DataType::TsVector => TsFieldType::String,
151+
DataType::TsQuery => TsFieldType::String,
152+
153+
// Complex types
72154
DataType::Custom(_, _) => TsFieldType::Any,
73155
DataType::Array(array_element_type_def) => match array_element_type_def {
74156
sqlparser::ast::ArrayElemTypeDef::None => TsFieldType::Array(Box::new(TsFieldType::Any)),
75157
sqlparser::ast::ArrayElemTypeDef::AngleBracket(data_type) => {
76158
TsFieldType::Array(Box::new(translate_data_type(data_type)))
77159
}
78-
sqlparser::ast::ArrayElemTypeDef::SquareBracket(data_type) => {
160+
sqlparser::ast::ArrayElemTypeDef::SquareBracket(data_type, _) => {
161+
TsFieldType::Array(Box::new(translate_data_type(data_type)))
162+
}
163+
sqlparser::ast::ArrayElemTypeDef::Parenthesis(data_type) => {
79164
TsFieldType::Array(Box::new(translate_data_type(data_type)))
80165
}
81166
},
82-
DataType::Enum(_) => TsFieldType::Array(Box::new(TsFieldType::String)),
167+
DataType::Map(_, _) => TsFieldType::Object,
168+
DataType::Tuple(_) => TsFieldType::Object,
169+
DataType::Nested(_) => TsFieldType::Object,
170+
DataType::Enum(_, _) => TsFieldType::Array(Box::new(TsFieldType::String)),
83171
DataType::Set(_) => TsFieldType::Array(Box::new(TsFieldType::String)),
84-
DataType::Bytes(_) => TsFieldType::String,
85-
DataType::Int2(_) => TsFieldType::Number,
86-
DataType::UnsignedInt2(_) => TsFieldType::Number,
87-
DataType::Int4(_) => TsFieldType::Number,
88-
DataType::Int64 => TsFieldType::Number,
89-
DataType::UnsignedInt4(_) => TsFieldType::Number,
90-
DataType::Int8(_) => TsFieldType::Number,
91-
DataType::UnsignedInt8(_) => TsFieldType::Number,
92-
DataType::Float4 => TsFieldType::Number,
93-
DataType::Float64 => TsFieldType::Number,
94-
DataType::Float8 => TsFieldType::Number,
95-
DataType::Bool => TsFieldType::Boolean,
96-
DataType::Struct(_) => TsFieldType::Object,
172+
DataType::Struct(_, _) => TsFieldType::Object,
173+
DataType::Union(_) => TsFieldType::Object,
174+
175+
// ClickHouse wrapper types
176+
DataType::Nullable(inner_type) => translate_data_type(inner_type),
177+
DataType::LowCardinality(inner_type) => translate_data_type(inner_type),
178+
179+
// Special types
97180
DataType::Unspecified => TsFieldType::Any,
181+
DataType::Trigger => TsFieldType::Any,
182+
DataType::AnyType => TsFieldType::Any,
98183
}
99184
}

0 commit comments

Comments
 (0)