Changeset

7174:d350e475f94e

util.sql: Raw query debug logging (needs to be explicitly enabled by a plugin)
author Kim Alvefur <zash@zash.se>
date Sun, 21 Feb 2016 19:25:01 +0100
parents 7173:d8c060615aa1
children 7175:3e7c69190193
files util/sql.lua
diffstat 1 files changed, 31 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/util/sql.lua	Sun Feb 21 19:01:26 2016 +0100
+++ b/util/sql.lua	Sun Feb 21 19:25:01 2016 +0100
@@ -147,6 +147,11 @@
 	rowcount = function(self) return self.__stmt:rowcount(); end;
 } };
 
+local function debugquery(where, sql, ...)
+	local i = 0; local a = {...}
+	log("debug", "[%s] %s", where, sql:gsub("%?", function () i = i + 1; local v = a[i]; if type(v) == "string" then v = ("%q"):format(v); end return tostring(v); end));
+end
+
 function engine:execute_query(sql, ...)
 	if self.params.driver == "PostgreSQL" then
 		sql = sql:gsub("`", "\"");
@@ -172,6 +177,26 @@
 engine.select = engine.execute_query;
 engine.delete = engine.execute_update;
 engine.update = engine.execute_update;
+local function debugwrap(name, f)
+	return function (self, sql, ...)
+		debugquery(name, sql, ...)
+		return f(self, sql, ...)
+	end
+end
+function engine:debug(enable)
+	self._debug = enable;
+	if enable then
+		engine.insert = debugwrap("insert", engine.execute_update);
+		engine.select = debugwrap("select", engine.execute_query);
+		engine.delete = debugwrap("delete", engine.execute_update);
+		engine.update = debugwrap("update", engine.execute_update);
+	else
+		engine.insert = engine.execute_update;
+		engine.select = engine.execute_query;
+		engine.delete = engine.execute_update;
+		engine.update = engine.execute_update;
+	end
+end
 function engine:_transaction(func, ...)
 	if not self.conn then
 		local ok, err = self:connect();
@@ -221,7 +246,9 @@
 	if index.unique then
 		sql = sql:gsub("^CREATE", "CREATE UNIQUE");
 	end
-	--print(sql);
+	if self._debug then
+		debugquery("create", sql);
+	end
 	return self:execute(sql);
 end
 function engine:_create_table(table)
@@ -252,6 +279,9 @@
 	elseif self.params.driver == "MySQL" then
 		sql = sql:gsub(";$", (" CHARACTER SET '%s' COLLATE '%s_bin';"):format(self.charset, self.charset));
 	end
+	if self._debug then
+		debugquery("create", sql);
+	end
 	local success,err = self:execute(sql);
 	if not success then return success,err; end
 	for i,v in ipairs(table.__table__) do