update
This commit is contained in:
@@ -109,3 +109,92 @@ end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function generate_wine_retail_sql(conditions::Dict{String, Any})::String
|
||||
# 1. Base SQL structure
|
||||
base_query = """
|
||||
SELECT
|
||||
w.winery,
|
||||
w.wine_name,
|
||||
w.wine_id,
|
||||
w.vintage,
|
||||
w.region,
|
||||
w.country,
|
||||
w.wine_type,
|
||||
w.grape,
|
||||
w.serving_temperature,
|
||||
w.sweetness,
|
||||
w.intensity,
|
||||
w.tannin,
|
||||
w.acidity,
|
||||
w.tasting_notes,
|
||||
rw.price,
|
||||
rw.currency,
|
||||
w.image_url,
|
||||
NULL AS retailer_name,
|
||||
rw.retailer_id
|
||||
FROM wine AS w
|
||||
JOIN retailer_wine AS rw
|
||||
ON w.wine_id = rw.wine_id
|
||||
"""
|
||||
|
||||
# 2. Dynamic WHERE Clause Builder
|
||||
where_clauses = String[]
|
||||
|
||||
# Iterate over each table condition provided
|
||||
for (table_name, table_conditions) in conditions
|
||||
|
||||
# Determine table alias
|
||||
alias = if table_name == "wine"
|
||||
"w"
|
||||
elseif table_name == "retailer_wine"
|
||||
"rw"
|
||||
else
|
||||
continue # Skip unsupported tables
|
||||
end
|
||||
|
||||
# Process condition dictionaries
|
||||
if isa(table_conditions, Dict) && !isempty(table_conditions)
|
||||
|
||||
for (column_name, filter_details) in table_conditions
|
||||
|
||||
if isa(filter_details, Dict) && haskey(filter_details, "operator")
|
||||
op = filter_details["operator"]
|
||||
raw_val = filter_details["value"]
|
||||
|
||||
# --- Value Type Handling ---
|
||||
# Use tryparse instead of try/catch for cleaner, faster parsing
|
||||
final_val = raw_val
|
||||
|
||||
if op in ("=", "<", ">", "<=", ">=")
|
||||
str_val = string(raw_val)
|
||||
num_val = tryparse(Float64, str_val)
|
||||
|
||||
if !isnothing(num_val)
|
||||
final_val = isinteger(num_val) ? round(Int, num_val) : num_val
|
||||
end
|
||||
end
|
||||
|
||||
# --- SQL Formatting ---
|
||||
if isa(final_val, Number)
|
||||
clause = "$(alias).$(column_name) $(op) $(final_val)"
|
||||
else
|
||||
# Escape single quotes within string values
|
||||
escaped_val = replace(string(final_val), "'" => "''")
|
||||
clause = "$(alias).$(column_name) $(op) '$(escaped_val)'"
|
||||
end
|
||||
|
||||
push!(where_clauses, clause)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# 3. Assemble Final Query
|
||||
where_sql = isempty(where_clauses) ? "" : "WHERE " * join(where_clauses, " AND ")
|
||||
|
||||
return string(base_query, where_sql, ";")
|
||||
end
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user