Skip to content

Commit

Permalink
Merge pull request #59 from TidierOrg/fix-mutate-after-type-cast
Browse files Browse the repository at this point in the history
fix type casting as part of larger mutation
  • Loading branch information
drizk1 committed Aug 29, 2024
2 parents 4447478 + c76cca1 commit a06cab3
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

2 comments on commit a06cab3

@drizk1
Copy link
Member Author

@drizk1 drizk1 commented on a06cab3 Aug 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator register

Release notes:

  • Bugfix: @mutate allows type conversions as part of larger mutate expressions for all backends

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/114101

Tagging

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v0.3.3 -m "<description of version>" a06cab35530184a686367e1dc53380a271b89903
git push origin v0.3.3

Please sign in to comment.