KingofBeast / gmsv_mysqloo

OO MySQL Module
5 stars 2 forks source link

db:escape() causes async query to block #1

Open Aerizeon opened 10 years ago

Aerizeon commented 10 years ago

Pretty much just the title. Whenever you use escape from the db object that a query is running on, it forces it to block until the query is completed. Basic Example:

local db = mysqloo.connect(Host, User, Pass, DBName, DBPort)
db:connect()
db:wait()
for i = 1, 100 do
  local query = db:query(string.format("SELECT * FROM table WHERE name = '%s'", db:escape(pl:Nick())))
  query.onError = function(_, e, s) print("Could not complete query") end
  query:start()
end

This causes massive lag spikes during execution, as each query blocks until it completes. If you remove db:escape(), or use a dummy connection, no such spike occurs:

local db = mysqloo.connect(Host, User, Pass, DBName, DBPort)
local dbesc = mysqloo.connect("","","","",0)
db:connect()
db:wait()
for i = 1, 100 do
  local query = db:query(string.format("SELECT * FROM table WHERE name = '%s'", dbesc:escape(pl:Nick())))
  query.onError = function(_, e, s) print("Could not complete query") end
  query:start()
end
8BallBomBom commented 10 years ago

Try without db:wait() Same result?