util.sql: Ignore if tables and indices already exist on creation (fixes #1064) 0.11
authorKim Alvefur <zash@zash.se>
Thu, 30 May 2019 23:50:28 +0200
branch0.11
changeset 10042 7dd0dddd8e02
parent 10040 045209b41b3a
child 10043 e90c9857a880
child 10049 6714578cfd6e
util.sql: Ignore if tables and indices already exist on creation (fixes #1064) Tested with SQLite3 3.16.2 and 3.27.2 and Postgres 11. MySQL does not support IF NOT EXISTS for indices so not handled here.
util/sql.lua
--- a/util/sql.lua	Thu May 30 15:16:56 2019 +0200
+++ b/util/sql.lua	Thu May 30 23:50:28 2019 +0200
@@ -238,6 +238,9 @@
 end
 function engine:_create_index(index)
 	local sql = "CREATE INDEX \""..index.name.."\" ON \""..index.table.."\" (";
+	if self.params.driver ~= "MySQL" then
+		sql = sql:gsub("^CREATE INDEX", "%1 IF NOT EXISTS");
+	end
 	for i=1,#index do
 		sql = sql.."\""..index[i].."\"";
 		if i ~= #index then sql = sql..", "; end
@@ -256,6 +259,9 @@
 end
 function engine:_create_table(table)
 	local sql = "CREATE TABLE \""..table.name.."\" (";
+	do
+		sql = sql:gsub("^CREATE TABLE", "%1 IF NOT EXISTS");
+	end
 	for i,col in ipairs(table.c) do
 		local col_type = col.type;
 		if col_type == "MEDIUMTEXT" and self.params.driver ~= "MySQL" then