Revert r3976 (removal of SQL_MODE handling in export), and revert r3988. Use a IF(@OLD_XYZ IS NULL, 0, @OLD_XYZ) approach instead. This way we fix unwanted auto_increment values for "0", and foreign_key_checks are restored to its previous value instead of 0. Fixes issue #2870 and might also be related to issue #2619.

This commit is contained in:
Ansgar Becker
2012-06-17 10:43:26 +00:00
parent 8af6d3c900
commit f31867bd5c

View File

@ -163,7 +163,8 @@ const
DATA_INSERT = 'INSERT';
DATA_INSERTNEW = 'INSERT IGNORE (do not update existing)';
DATA_UPDATE = 'REPLACE existing data';
EXPORT_FILE_FOOTER = '/*!40014 SET FOREIGN_KEY_CHECKS=1 */;'+CRLF+
EXPORT_FILE_FOOTER = '/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '''') */;'+CRLF+
'/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;'+CRLF+
'/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;'+CRLF;
{$R *.DFM}
@ -610,7 +611,8 @@ begin
if Assigned(ExportStream) then begin
Output(EXPORT_FILE_FOOTER, False, True, False, False, False);
Output('/*!40014 SET FOREIGN_KEY_CHECKS=1 */', True, False, False, True, True);
Output('/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '''') */', True, False, False, True, True);
Output('/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */', True, False, False, True, True);
if comboExportOutputType.Text = OUTPUT_CLIPBOARD then
StreamToClipboard(ExportStream, nil, false);
FreeAndNil(ExportStream);
@ -1163,9 +1165,11 @@ begin
'-- --------------------------------------------------------' + CRLF + CRLF +
'/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;' + CRLF +
'/*!40101 SET NAMES '+DBObj.Connection.CharacterSet+' */;' + CRLF +
'/*!40014 SET FOREIGN_KEY_CHECKS=0 */;';
'/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;' + CRLF +
'/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''NO_AUTO_VALUE_ON_ZERO'' */;';
Output(Header, False, DBObj.Database<>ExportLastDatabase, True, False, False);
Output('/*!40014 SET FOREIGN_KEY_CHECKS=0 */', True, False, False, True, True);
Output('/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */', True, False, False, True, True);
Output('/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''NO_AUTO_VALUE_ON_ZERO'' */', True, False, False, True, True);
FHeaderCreated := True;
end;
@ -1273,11 +1277,11 @@ begin
if ToDb then
Insert(Quoter.QuoteIdent(FinalDbName)+'.', Struc, Pos('TRIGGER', Struc) + 8 );
if ToFile or ToClipboard or ToDir then begin
Struc := 'SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=' + esc(StrucResult.Col('sql_mode')) + ';' + CRLF +
Struc := 'SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE=' + esc(StrucResult.Col('sql_mode')) + ';' + CRLF +
'DELIMITER ' + TempDelim + CRLF +
Struc + TempDelim + CRLF +
'DELIMITER ;' + CRLF +
'SET SQL_MODE=@OLD_SQL_MODE';
'SET SQL_MODE=@OLDTMP_SQL_MODE';
end;
end;