From 6ebe40c929230c6c125c78744636c19badd75ea6 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Tue, 24 Nov 2009 22:59:21 +0000 Subject: [PATCH] Make INSERTs in user manager compatible with pre-4.1 servers by * removing the ON DUPLICATE KEY clauses * turning the INSERT into INSERT IGNORE * and doing an UPDATE afterwards if RowsAffected is 0 Fixes issue #1229 --- source/usermanager.pas | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/usermanager.pas b/source/usermanager.pas index fbdec55c..101a23ba 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -1192,7 +1192,7 @@ begin if c = 'Y' then PrivValues.Add(p.PrivNames[k]); end; // Insert new privilege definition. - sql := 'INSERT INTO ' + db + '.' + TableName; + sql := 'INSERT IGNORE INTO ' + db + '.' + TableName; if SetFieldName <> '' then PrivUpdates.Add(mask(SetFieldName) + '=' + esc(Delim(PrivValues, False))); sql := sql + ' SET ' + PrivWhere + ', ' + Delim(PrivUpdates); @@ -1208,11 +1208,11 @@ begin PrivValues.Add(mask('x509_subject') + '=' + esc('')); if PrivValues.Count > 0 then sql := sql + ', ' + Delim(PrivValues); - sql := sql + ' ON DUPLICATE KEY UPDATE'; - sql := sql + ' ' + Delim(PrivUpdates); end; try Mainform.Connection.Query(sql); + if Mainform.Connection.RowsAffected = 0 then + Mainform.Connection.Query('UPDATE ' + db + '.' + TableName + ' SET ' +Delim(PrivUpdates) + AcctWhere); except on E:Exception do begin MessageDlg(E.Message, mtError, [mbOK], 0); @@ -1236,8 +1236,6 @@ begin sql := 'INSERT INTO ' + db + '.' + PRIVTABLE_TABLES; sql := sql + ' SET ' + PrivWhere; sql := sql + ', ' + mask('column_priv') + '=' + esc(Delim(PrivValues, False)); - sql := sql + ' ON DUPLICATE KEY UPDATE'; - sql := sql + ' ' + mask('column_priv') + '=' + esc(Delim(PrivValues, False)); try Mainform.Connection.Query(sql); except