Skip to content

Commit ca91b07

Browse files
JasonShinLeo5878
andauthored
PR-244: replace any unknown (#264)
* Replace any with unknown # Conflicts: # src/ts_generator/sql_parser/expressions/translate_expr.rs * Remove unnecessary * Update tests * Running fmt * fmt * fix * fmt --------- Co-authored-by: Leo5878 <leonardo587@yandex.ru>
1 parent 29340aa commit ca91b07

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+305
-276
lines changed

src/ts_generator/sql_parser/expressions/function_handlers/json_functions.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,13 @@ pub async fn handle_json_build_function(
147147
}
148148

149149
// For other build functions or on failure, return Any
150-
ctx
151-
.ts_query
152-
.insert_result(Some(ctx.alias), &[TsFieldType::Any], ctx.is_selection, false, expr_log)
150+
ctx.ts_query.insert_result(
151+
Some(ctx.alias),
152+
&[TsFieldType::Unknown],
153+
ctx.is_selection,
154+
false,
155+
expr_log,
156+
)
153157
}
154158

155159
/// Handle JSON aggregation functions (jsonb_agg, json_agg, etc.)

src/ts_generator/sql_parser/expressions/translate_data_type.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ pub fn translate_data_type(data_type: &DataType) -> TsFieldType {
138138
DataType::Datetime64(_, _) => TsFieldType::Date,
139139
DataType::Timestamp(_, _) => TsFieldType::String,
140140
DataType::TimestampNtz => TsFieldType::String,
141-
DataType::Interval { .. } => TsFieldType::Any,
141+
DataType::Interval { .. } => TsFieldType::Unknown,
142142

143143
// JSON types
144144
DataType::JSON => TsFieldType::Object,
@@ -151,9 +151,9 @@ pub fn translate_data_type(data_type: &DataType) -> TsFieldType {
151151
DataType::TsQuery => TsFieldType::String,
152152

153153
// Complex types
154-
DataType::Custom(_, _) => TsFieldType::Any,
154+
DataType::Custom(_, _) => TsFieldType::Unknown,
155155
DataType::Array(array_element_type_def) => match array_element_type_def {
156-
sqlparser::ast::ArrayElemTypeDef::None => TsFieldType::Array(Box::new(TsFieldType::Any)),
156+
sqlparser::ast::ArrayElemTypeDef::None => TsFieldType::Array(Box::new(TsFieldType::Unknown)),
157157
sqlparser::ast::ArrayElemTypeDef::AngleBracket(data_type) => {
158158
TsFieldType::Array(Box::new(translate_data_type(data_type)))
159159
}
@@ -177,8 +177,8 @@ pub fn translate_data_type(data_type: &DataType) -> TsFieldType {
177177
DataType::LowCardinality(inner_type) => translate_data_type(inner_type),
178178

179179
// Special types
180-
DataType::Unspecified => TsFieldType::Any,
181-
DataType::Trigger => TsFieldType::Any,
180+
DataType::Unspecified => TsFieldType::Unknown,
181+
DataType::Trigger => TsFieldType::Unknown,
182182
DataType::AnyType => TsFieldType::Any,
183183
}
184184
}

src/ts_generator/sql_parser/expressions/translate_expr.rs

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -485,13 +485,13 @@ pub async fn translate_expr(
485485
ts_query.insert_param(&inferred_type, &false, &Some(placeholder.to_string()))
486486
}
487487
Expr::JsonAccess { value: _, path: _ } => {
488-
ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging)?;
489-
ts_query.insert_param(&TsFieldType::Any, &false, &None)
488+
ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging)?;
489+
ts_query.insert_param(&TsFieldType::Unknown, &false, &None)
490490
}
491491
Expr::IsNotDistinctFrom(_, placeholder) | Expr::IsDistinctFrom(_, placeholder) => {
492492
// IsDistinctFrom and IsNotDistinctFrom are the same and can have a placeholder
493493
ts_query.insert_param(&TsFieldType::String, &false, &Some(placeholder.to_string()))?;
494-
ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging)
494+
ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging)
495495
}
496496
Expr::SimilarTo {
497497
negated: _,
@@ -577,10 +577,12 @@ pub async fn translate_expr(
577577
ts_query.insert_result(alias, &[TsFieldType::String], is_selection, false, expr_for_logging)
578578
}
579579
Expr::Collate { expr: _, collation: _ } => {
580-
ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging)
580+
ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging)
581581
}
582-
Expr::TypedString(_) => ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging),
583-
Expr::Map(_) => ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging),
582+
Expr::TypedString(_) => {
583+
ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging)
584+
}
585+
Expr::Map(_) => ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging),
584586
// Note: AggregateExpressionWithFilter was removed in sqlparser 0.59.0
585587
// Aggregate functions with filters are now part of the Function variant
586588
Expr::Case {
@@ -589,22 +591,22 @@ pub async fn translate_expr(
589591
else_result: _,
590592
case_token: _,
591593
end_token: _,
592-
} => ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging),
594+
} => ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging),
593595
Expr::Exists { subquery, negated: _ } => {
594596
ts_query.insert_result(alias, &[TsFieldType::Boolean], is_selection, false, expr_for_logging)?;
595597
translate_query(ts_query, &None, subquery, db_conn, alias, false).await
596598
}
597599
// Note: ListAgg and ArrayAgg were removed in sqlparser 0.59.0
598600
// They are now represented as Function variants
599601
Expr::GroupingSets(_) | Expr::Cube(_) | Expr::Rollup(_) | Expr::Tuple(_) | Expr::Array(_) => {
600-
ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging)
602+
ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging)
601603
}
602604
// Note: ArrayIndex was replaced with CompoundFieldAccess in sqlparser 0.59.0
603605
// CompoundFieldAccess handles array indexing, map access, and composite field access
604606
Expr::CompoundFieldAccess {
605607
root: _,
606608
access_chain: _,
607-
} => ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging),
609+
} => ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging),
608610
Expr::Interval(_) => ts_query.insert_result(alias, &[TsFieldType::Number], is_selection, false, expr_for_logging),
609611
Expr::MatchAgainst {
610612
columns: _,
@@ -655,7 +657,13 @@ pub async fn translate_expr(
655657
FunctionArguments::List(arg_list) => &arg_list.args,
656658
_ => {
657659
// If no arguments or subquery, return Any
658-
return ts_query.insert_result(Some(alias), &[TsFieldType::Any], is_selection, false, expr_for_logging);
660+
return ts_query.insert_result(
661+
Some(alias),
662+
&[TsFieldType::Unknown],
663+
is_selection,
664+
false,
665+
expr_for_logging,
666+
);
659667
}
660668
};
661669

@@ -680,7 +688,13 @@ pub async fn translate_expr(
680688
FunctionArguments::List(arg_list) => &arg_list.args,
681689
_ => {
682690
// If no arguments or subquery, return Any
683-
return ts_query.insert_result(Some(alias), &[TsFieldType::Any], is_selection, false, expr_for_logging);
691+
return ts_query.insert_result(
692+
Some(alias),
693+
&[TsFieldType::Unknown],
694+
is_selection,
695+
false,
696+
expr_for_logging,
697+
);
684698
}
685699
};
686700

@@ -723,7 +737,13 @@ pub async fn translate_expr(
723737
expr_for_logging,
724738
)?;
725739
} else {
726-
ts_query.insert_result(Some(alias), &[TsFieldType::Any], is_selection, false, expr_for_logging)?;
740+
ts_query.insert_result(
741+
Some(alias),
742+
&[TsFieldType::Unknown],
743+
is_selection,
744+
false,
745+
expr_for_logging,
746+
)?;
727747
}
728748

729749
Ok(())
@@ -756,8 +776,8 @@ pub async fn translate_expr(
756776
expr: _,
757777
array_expr: _,
758778
negated: _,
759-
} => ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging),
760-
_ => ts_query.insert_result(alias, &[TsFieldType::Any], is_selection, false, expr_for_logging),
779+
} => ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging),
780+
_ => ts_query.insert_result(alias, &[TsFieldType::Unknown], is_selection, false, expr_for_logging),
761781
}
762782
}
763783

src/ts_generator/types/ts_query.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ pub enum TsFieldType {
116116
Null,
117117
Enum(Vec<String>),
118118
Any,
119+
Unknown,
119120
#[allow(dead_code)]
120121
Array2D(Array2DContent),
121122
Array(Box<TsFieldType>),
@@ -149,6 +150,7 @@ impl fmt::Display for TsFieldType {
149150
TsFieldType::Any => write!(f, "any"),
150151
TsFieldType::Null => write!(f, "null"),
151152
TsFieldType::Never => write!(f, "never"),
153+
TsFieldType::Unknown => write!(f, "unknown"),
152154
TsFieldType::Array(ts_field_type) => {
153155
let ts_field_type = ts_field_type.clone();
154156
let ts_field_type = *ts_field_type;
@@ -201,17 +203,17 @@ impl TsFieldType {
201203
"character" | "character varying" | "bytea" | "uuid" | "text" => Self::String,
202204
"boolean" => Self::Boolean,
203205
"json" | "jsonb" => Self::Object,
204-
"ARRAY" | "array" => Self::Any,
206+
"ARRAY" | "array" => Self::Unknown,
205207
"date" => Self::Date,
206208
"USER-DEFINED" => {
207209
if let Some(enum_values) = enum_values {
208210
return Self::Enum(enum_values);
209211
}
210212
let warning_message = format!("Failed to find enum values for field {field_name} of table {table_name}");
211213
warning!(warning_message);
212-
Self::Any
214+
Self::Unknown
213215
}
214-
_ => Self::Any,
216+
_ => Self::Unknown,
215217
}
216218
}
217219

@@ -234,9 +236,9 @@ impl TsFieldType {
234236

235237
let warning_message = format!("Failed to find enum values for field {field_name} of table {table_name}");
236238
warning!(warning_message);
237-
Self::Any
239+
Self::Unknown
238240
}
239-
_ => Self::Any,
241+
_ => Self::Unknown,
240242
}
241243
}
242244

@@ -252,7 +254,7 @@ impl TsFieldType {
252254
} else if annotated_type == "null" {
253255
return Self::Null;
254256
}
255-
Self::Any
257+
Self::Unknown
256258
}
257259

258260
/// Converts a sqlparser DataType from table alias column definitions to TsFieldType

tests/demo/aggregate_functions/basic_aggregates.queries.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ export type StddevAndVarianceParams = [];
4545

4646
export interface IStddevAndVarianceResult {
4747
rarity: string | null;
48-
stddevId: any;
49-
varianceId: any;
48+
stddevId: unknown;
49+
varianceId: unknown;
5050
}
5151

5252
export interface IStddevAndVarianceQuery {

tests/demo/aggregate_functions/basic_aggregates.snapshot.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ export type StddevAndVarianceParams = [];
4545

4646
export interface IStddevAndVarianceResult {
4747
rarity: string | null;
48-
stddevId: any;
49-
varianceId: any;
48+
stddevId: unknown;
49+
varianceId: unknown;
5050
}
5151

5252
export interface IStddevAndVarianceQuery {

tests/demo/case_expressions/case_in_clauses.queries.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export type CaseInGroupByHavingParams = [];
2828

2929
export interface ICaseInGroupByHavingResult {
3030
count: number;
31-
rarityGroup: any;
31+
rarityGroup: unknown;
3232
}
3333

3434
export interface ICaseInGroupByHavingQuery {

tests/demo/case_expressions/case_in_clauses.snapshot.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export type CaseInGroupByHavingParams = [];
2828

2929
export interface ICaseInGroupByHavingResult {
3030
count: number;
31-
rarityGroup: any;
31+
rarityGroup: unknown;
3232
}
3333

3434
export interface ICaseInGroupByHavingQuery {

tests/demo/case_expressions/nested_case.queries.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export type NestedCaseBasicParams = [];
22

33
export interface INestedCaseBasicResult {
4-
detailedRarity: any;
4+
detailedRarity: unknown;
55
id: number;
66
name: string;
77
rarity: string | null;
@@ -17,7 +17,7 @@ export type NestedCaseMultipleLevelsParams = [];
1717
export interface INestedCaseMultipleLevelsResult {
1818
id: number;
1919
name: string;
20-
tier: any;
20+
tier: unknown;
2121
}
2222

2323
export interface INestedCaseMultipleLevelsQuery {

tests/demo/case_expressions/nested_case.snapshot.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export type NestedCaseBasicParams = [];
22

33
export interface INestedCaseBasicResult {
4-
detailedRarity: any;
4+
detailedRarity: unknown;
55
id: number;
66
name: string;
77
rarity: string | null;
@@ -17,7 +17,7 @@ export type NestedCaseMultipleLevelsParams = [];
1717
export interface INestedCaseMultipleLevelsResult {
1818
id: number;
1919
name: string;
20-
tier: any;
20+
tier: unknown;
2121
}
2222

2323
export interface INestedCaseMultipleLevelsQuery {

0 commit comments

Comments
 (0)