Software /
code /
prosody
Changeset
10038:7dd0dddd8e02 0.11
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.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 30 May 2019 23:50:28 +0200 |
parents | 10036:045209b41b3a |
children | 10039:e90c9857a880 10045:6714578cfd6e |
files | util/sql.lua |
diffstat | 1 files changed, 6 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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