update
This commit is contained in:
+4
-60
@@ -520,65 +520,6 @@ julia> response = SQLLLM.SQLexecution(executeSQL, sql)
|
||||
|
||||
# Signature
|
||||
"""
|
||||
# function SQLexecution(executeSQL::Function, sql::T
|
||||
# )::NamedTuple{(:result, :success, :errormsg, :reward, :isterminal), Tuple{Union{DataFrame, Nothing}, Bool, Union{String, Nothing}, Integer, Bool}} where {T<:AbstractString}
|
||||
# println("\n~~~ 1-01 ", @__FILE__, " ", @__LINE__)
|
||||
# #XXX dummy SQL. use for testing
|
||||
# # sql = "SELECT w.wine_name FROM wine w JOIN wine_food wf ON w.wine_id = wf.wine_id JOIN food f ON wf.food_id = f.food_id WHERE f.\"food_name\" = 'lamb';"
|
||||
# # sql = " SELECT w.wine_name FROM wine w JOIN food f ON f.food_name = 'lamb' JOIN wine_food wf ON w.wine_id = wf.wine_id AND f.food_id = wf.food_id GROUP BY w.wine_name ORDER BY COUNT(DISTINCT w.wine_id) DESC;"
|
||||
# # sql = " SELECT COUNT(DISTINCT wf.wine_id) FROM wine w JOIN wine_food wf ON w.wine_id = wf.wine_id JOIN food f ON wf.food_id = f.food_id WHERE f.food_name ILIKE '%lamb%'"
|
||||
|
||||
# #XXX use for package testing, remove when done
|
||||
# # ans = "1.schilfwein zweigelt 2.cabernet sauvignon reserve limited edition"
|
||||
# # ans = "There are 1500 wines that can be paired with lamb."
|
||||
# # ans = "1500"
|
||||
# # return (response=ans, errormsg=nothing, reward=1, isterminal=true)
|
||||
|
||||
# # add LIMIT to the SQL to prevent loading large data
|
||||
# sql = strip(sql)
|
||||
# println("\n~~~ SQL 1", @__FILE__, " ", @__LINE__)
|
||||
# println(sql)
|
||||
# println("\n~~~ 1-02 ", @__FILE__, " ", @__LINE__)
|
||||
|
||||
# if sql[end] != ';'
|
||||
# errorMsg = "Error, SQL execution failed because it does not ended with ';'"
|
||||
# return (result=nothing, success=false, errormsg=errorMsg, reward=0, isterminal=false)
|
||||
# end
|
||||
# println("\n~~~ 1-03 ", @__FILE__, " ", @__LINE__)
|
||||
# if !occursin("LIMIT", sql)
|
||||
# # sql = sql[1:end-1] * " LIMIT 100;"
|
||||
# sql = sql[1:end-1] * " ORDER BY RANDOM() LIMIT 2;"
|
||||
# end
|
||||
|
||||
# println("\n~~~ SQL 2", @__FILE__, " ", @__LINE__)
|
||||
# println(sql)
|
||||
# println("\n~~~ 1-1 ", @__FILE__, " ", @__LINE__)
|
||||
# result = executeSQL(sql)
|
||||
# println("\n~~~ 1-2 ", @__FILE__, " ", @__LINE__)
|
||||
# df = DataFrame(result)
|
||||
# println("\n~~~ raw df ", df)
|
||||
# tablesize = size(df)
|
||||
# println("\n~~~ df size ", tablesize)
|
||||
# println("\n~~~ 6 ", @__FILE__, " ", @__LINE__)
|
||||
# row = tablesize[1]
|
||||
# println("\n~~~ 7 ", @__FILE__, " ", @__LINE__)
|
||||
# if row == 0 # if 0 row
|
||||
# errorMsg = "The resulting table has 0 row. Possible causes: 1) SQL is incorrect 2) There is no data that match your search criteria."
|
||||
# return (result=nothing, success=false, errormsg=errorMsg, reward=0, isterminal=false)
|
||||
# end
|
||||
# println("\n~~~ 8 ", @__FILE__, " ", @__LINE__)
|
||||
# df1 =
|
||||
# if row > 2
|
||||
# # ramdom row to pick
|
||||
# df[sample(1:nrow(df), 2, replace=false), :] # random select 2 rows from df
|
||||
# else
|
||||
# df
|
||||
# end
|
||||
|
||||
# println("\n~~~ SQLexecution result ", @__FILE__, " ", @__LINE__)
|
||||
# println(df1)
|
||||
# return (result=df1, success=true, errormsg=nothing, reward=1, isterminal=true)
|
||||
# end
|
||||
function SQLexecution(executeSQL::Function, sql::T
|
||||
) where {T<:AbstractString}
|
||||
|
||||
@@ -596,9 +537,12 @@ function SQLexecution(executeSQL::Function, sql::T
|
||||
|
||||
# add LIMIT to the SQL to prevent loading large data
|
||||
sql = strip(sql)
|
||||
|
||||
# remove DISTINCT keyword because it is incompatible with RANDOM()
|
||||
sql = replace(sql, "DISTINCT" => "")
|
||||
|
||||
if sql[end] == ';'
|
||||
if !occursin("LIMIT", sql)
|
||||
# sql = sql[1:end-1] * " LIMIT 100;"
|
||||
sql = sql[1:end-1] * " ORDER BY RANDOM() LIMIT 2;"
|
||||
end
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user