Skip to content

Commit

Permalink
fix type casting as part of larger mutation
Browse files Browse the repository at this point in the history
  • Loading branch information
drizk1 committed Aug 29, 2024
1 parent 4447478 commit c76cca1
Show file tree
Hide file tree
Showing 12 changed files with 35 additions and 29 deletions.
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# TidierDB.jl updates

## v0.3.3 - 2024-08-29
- Bugfix: `@mutate` allows type conversion as part of larger mutate expressions

## v0.3.2 - 2024-08-26
- adds `@head` for limiting number of collected rows
Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "TidierDB"
uuid = "86993f9b-bbba-4084-97c5-ee15961ad48b"
authors = ["Daniel Rizk <rizk.daniel.12@gmail.com> and contributors"]
version = "0.3.2"
version = "0.3.3"

[deps]
Arrow = "69666777-d1a9-59fb-9406-91d4454c9d45"
Expand Down
6 changes: 5 additions & 1 deletion src/TidierDB.jl
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,13 @@ function finalize_query(sqlquery::SQLQuery)
if !isempty(sqlquery.ch_settings) && current_sql_mode[] == clickhouse()
complete_query = complete_query * " \n " * string(sqlquery.ch_settings)
end

complete_query = replace(complete_query, "&&" => " AND ", "||" => " OR ",
"FROM )" => ")" , "SELECT SELECT " => "SELECT ", "SELECT SELECT " => "SELECT ", "DISTINCT SELECT " => "DISTINCT ",
"SELECT SELECT SELECT " => "SELECT ", "PARTITION BY GROUP BY" => "PARTITION BY", "GROUP BY GROUP BY" => "GROUP BY", "HAVING HAVING" => "HAVING", )
"SELECT SELECT SELECT " => "SELECT ", "PARTITION BY GROUP BY" => "PARTITION BY", "GROUP BY GROUP BY" => "GROUP BY", "HAVING HAVING" => "HAVING",
r"var\"(.*?)\"" => s"\1")

complete_query = replace(complete_query, ", AS " => " AS ")

if current_sql_mode[] == postgres() || current_sql_mode[] == duckdb() || current_sql_mode[] == mysql() || current_sql_mode[] == mssql() || current_sql_mode[] == clickhouse() || current_sql_mode[] == athena() || current_sql_mode[] == gbq() || current_sql_mode[] == oracle() || current_sql_mode[] == snowflake() || current_sql_mode[] == databricks()
complete_query = replace(complete_query, "\"" => "'", "==" => "=")
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_athena.jl
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,13 @@ function expr_to_sql_trino(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INT)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INT"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_duckdb.jl
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,13 @@ function expr_to_sql_duckdb(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INT)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INT"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_gbq.jl
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,13 @@ function expr_to_sql_gbq(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INT)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INT"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_mssql.jl
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,13 @@ function expr_to_sql_mssql(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INTEGER)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INTEGER"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_mysql.jl
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,13 @@ function expr_to_sql_mysql(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS UNSIGNED)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS UNSIGNED"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_oracle.jl
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,13 @@ function expr_to_sql_oracle(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INTEGER)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INTEGER"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_postgres.jl
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,13 @@ function expr_to_sql_postgres(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INT)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INT"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_snowflake.jl
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,13 @@ function expr_to_sql_snowflake(expr, sq; from_summarize::Bool)
return parse_if_else(x)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS DECIMAL)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DECIMAL"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INT)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INT"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && x.args[1] != :!= && length(x.args) == 2
Expand Down
6 changes: 3 additions & 3 deletions src/parsing_sqlite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@ function expr_to_sql_lite(expr, sq; from_summarize::Bool)
elseif x.args[1] == :as_float && length(x.args) == 2
column = x.args[2]
# Return the SQL CAST statement directly as a string
return "CAST(" * string(column) * " AS DOUBLE)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS DOUBLE"))
elseif x.args[1] == :as_integer && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS INT)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS INT"))
elseif x.args[1] == :as_string && length(x.args) == 2
column = x.args[2]
return "CAST(" * string(column) * " AS STRING)"
return Expr(:call, Symbol("CAST"), column, Symbol("AS STRING"))
elseif x.args[1] == :case_when
return parse_case_when(x)
elseif isa(x, Expr) && x.head == :call && x.args[1] == :! && length(x.args) == 2
Expand Down

0 comments on commit c76cca1

Please sign in to comment.