mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 21:42:35 +01:00
merge 5.0-> 5.1
This commit is contained in:
commit
53c09b3a46
4 changed files with 271 additions and 1 deletions
50
mysql-test/include/mysqldump.inc
Normal file
50
mysql-test/include/mysqldump.inc
Normal file
|
@ -0,0 +1,50 @@
|
|||
################################################################################
|
||||
# mysqldump.inc
|
||||
#
|
||||
# SUMMARY: include file to facilitate testing the quality of mysqldump output
|
||||
#
|
||||
# INPUTS: Two variables:
|
||||
# $table_name - the name of the table that was dumped
|
||||
# $mysqldumpfile - the name of the file that captured mysqldump output
|
||||
#
|
||||
# OUTPUTS: minor echo data:
|
||||
# We 'echo' some stage information to the .result file:
|
||||
# 'altering original table', 'restoring from dumpfile', 'comparing'
|
||||
#
|
||||
# OTHER FILES: We use include/diff_tables.inc to compare the original, renamed
|
||||
# table with the 'restored' one.
|
||||
#
|
||||
# DESCRIPTION: This file works by being fed the name of the original table
|
||||
# and a mysqldump output file. The original table is then renamed
|
||||
# to <table_name>_orig, the mysqldump file is used to recreate the
|
||||
# table, then diff_tables.inc is called to compare them.
|
||||
#
|
||||
# LIMITATIONS: Does *NOT* work with xml output!
|
||||
#
|
||||
# AUTHOR: pcrews 2009-05-21
|
||||
# Bug#40465 mysqldump.test does no checking of dump or restore
|
||||
#
|
||||
# LAST CHANGE: 2009-05-21
|
||||
#
|
||||
################################################################################
|
||||
|
||||
--echo # Begin testing mysqldump output + restore
|
||||
--echo # Create 'original table name - <table>_orig
|
||||
# NOTE: We use SET then let as query_get_value has issues with the extra commas
|
||||
# used in the CONCAT statement.
|
||||
eval SET @orig_table_name = CONCAT('$table_name', '_orig');
|
||||
let $orig_table_name = query_get_value(SELECT @orig_table_name,@orig_table_name,1);
|
||||
--echo # Rename original table
|
||||
eval ALTER TABLE $table_name RENAME to $orig_table_name;
|
||||
--echo # Recreate table from mysqldump output
|
||||
--exec $MYSQL test < $mysqldumpfile
|
||||
--echo # Compare original and recreated tables
|
||||
--echo # Recreated table: $table_name
|
||||
--echo # Original table: $orig_table_name
|
||||
let $diff_table_1 = $table_name;
|
||||
let $diff_table_2 = $orig_table_name;
|
||||
--source include/diff_tables.inc
|
||||
--echo # Cleanup
|
||||
--remove_file $mysqldumpfile
|
||||
eval DROP TABLE $table_name, $orig_table_name;
|
||||
|
110
mysql-test/r/mysqldump_restore.result
Normal file
110
mysql-test/r/mysqldump_restore.result
Normal file
|
@ -0,0 +1,110 @@
|
|||
# Set concurrent_insert = 0 to prevent random errors
|
||||
# will reset to original value at the end of the test
|
||||
SET @old_concurrent_insert = @@global.concurrent_insert;
|
||||
SET @@global.concurrent_insert = 0;
|
||||
# Pre-test cleanup
|
||||
DROP TABLE IF EXISTS t1;
|
||||
# Begin tests
|
||||
#
|
||||
# Bug#2005 Long decimal comparison bug.
|
||||
#
|
||||
CREATE TABLE t1 (a DECIMAL(64, 20));
|
||||
INSERT INTO t1 VALUES ("1234567890123456789012345678901234567890"),
|
||||
("0987654321098765432109876543210987654321");
|
||||
# Begin testing mysqldump output + restore
|
||||
# Create 'original table name - <table>_orig
|
||||
SET @orig_table_name = CONCAT('test.t1', '_orig');
|
||||
# Rename original table
|
||||
ALTER TABLE test.t1 RENAME to test.t1_orig;
|
||||
# Recreate table from mysqldump output
|
||||
# Compare original and recreated tables
|
||||
# Recreated table: test.t1
|
||||
# Original table: test.t1_orig
|
||||
Comparing tables test.t1 and test.t1_orig
|
||||
# Cleanup
|
||||
DROP TABLE test.t1, test.t1_orig;
|
||||
#
|
||||
# Bug#3361 mysqldump quotes DECIMAL values inconsistently
|
||||
#
|
||||
CREATE TABLE t1 (a DECIMAL(10,5), b FLOAT);
|
||||
INSERT INTO t1 VALUES (1.2345, 2.3456);
|
||||
INSERT INTO t1 VALUES ('1.2345', 2.3456);
|
||||
INSERT INTO t1 VALUES ("1.2345", 2.3456);
|
||||
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI_QUOTES';
|
||||
INSERT INTO t1 VALUES (1.2345, 2.3456);
|
||||
INSERT INTO t1 VALUES ('1.2345', 2.3456);
|
||||
INSERT INTO t1 VALUES ("1.2345", 2.3456);
|
||||
ERROR 42S22: Unknown column '1.2345' in 'field list'
|
||||
SET SQL_MODE=@OLD_SQL_MODE;
|
||||
# Begin testing mysqldump output + restore
|
||||
# Create 'original table name - <table>_orig
|
||||
SET @orig_table_name = CONCAT('test.t1', '_orig');
|
||||
# Rename original table
|
||||
ALTER TABLE test.t1 RENAME to test.t1_orig;
|
||||
# Recreate table from mysqldump output
|
||||
# Compare original and recreated tables
|
||||
# Recreated table: test.t1
|
||||
# Original table: test.t1_orig
|
||||
Comparing tables test.t1 and test.t1_orig
|
||||
# Cleanup
|
||||
DROP TABLE test.t1, test.t1_orig;
|
||||
#
|
||||
# Bug#1994 mysqldump does not correctly dump UCS2 data
|
||||
# Bug#4261 mysqldump 10.7 (mysql 4.1.2) --skip-extended-insert drops NULL from inserts
|
||||
#
|
||||
CREATE TABLE t1 (a VARCHAR(255)) DEFAULT CHARSET koi8r;
|
||||
INSERT INTO t1 VALUES (_koi8r x'C1C2C3C4C5'), (NULL);
|
||||
# Begin testing mysqldump output + restore
|
||||
# Create 'original table name - <table>_orig
|
||||
SET @orig_table_name = CONCAT('test.t1', '_orig');
|
||||
# Rename original table
|
||||
ALTER TABLE test.t1 RENAME to test.t1_orig;
|
||||
# Recreate table from mysqldump output
|
||||
# Compare original and recreated tables
|
||||
# Recreated table: test.t1
|
||||
# Original table: test.t1_orig
|
||||
Comparing tables test.t1 and test.t1_orig
|
||||
# Cleanup
|
||||
DROP TABLE test.t1, test.t1_orig;
|
||||
#
|
||||
# WL#2319 Exclude Tables from dump
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
INSERT INTO t2 VALUES (4),(5),(6);
|
||||
# Begin testing mysqldump output + restore
|
||||
# Create 'original table name - <table>_orig
|
||||
SET @orig_table_name = CONCAT('test.t2', '_orig');
|
||||
# Rename original table
|
||||
ALTER TABLE test.t2 RENAME to test.t2_orig;
|
||||
# Recreate table from mysqldump output
|
||||
# Compare original and recreated tables
|
||||
# Recreated table: test.t2
|
||||
# Original table: test.t2_orig
|
||||
Comparing tables test.t2 and test.t2_orig
|
||||
# Cleanup
|
||||
DROP TABLE test.t2, test.t2_orig;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#8830 mysqldump --skip-extended-insert causes --hex-blob to dump wrong values
|
||||
#
|
||||
CREATE TABLE t1 (`b` blob);
|
||||
INSERT INTO `t1` VALUES (0x602010000280100005E71A);
|
||||
# Begin testing mysqldump output + restore
|
||||
# Create 'original table name - <table>_orig
|
||||
SET @orig_table_name = CONCAT('test.t1', '_orig');
|
||||
# Rename original table
|
||||
ALTER TABLE test.t1 RENAME to test.t1_orig;
|
||||
# Recreate table from mysqldump output
|
||||
# Compare original and recreated tables
|
||||
# Recreated table: test.t1
|
||||
# Original table: test.t1_orig
|
||||
Comparing tables test.t1 and test.t1_orig
|
||||
# Cleanup
|
||||
DROP TABLE test.t1, test.t1_orig;
|
||||
# End tests
|
||||
# Cleanup
|
||||
# Reset concurrent_insert to its original value
|
||||
SET @@global.concurrent_insert = @old_concurrent_insert;
|
||||
# remove mysqldumpfile
|
|
@ -1,6 +1,5 @@
|
|||
# Embedded server doesn't support external clients
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
# Binlog is required
|
||||
--source include/have_log_bin.inc
|
||||
|
|
111
mysql-test/t/mysqldump_restore.test
Normal file
111
mysql-test/t/mysqldump_restore.test
Normal file
|
@ -0,0 +1,111 @@
|
|||
###############################################################################
|
||||
# mysqldump_restore.test
|
||||
#
|
||||
# Purpose: Tests if mysqldump output can be used to successfully restore
|
||||
# tables and data.
|
||||
# We CREATE a table, mysqldump it to a file, ALTER the original
|
||||
# table's name, recreate the table from the mysqldump file, then
|
||||
# utilize include/diff_tables to compare the original and recreated
|
||||
# tables.
|
||||
#
|
||||
# We use several examples from mysqldump.test here and include
|
||||
# the relevant bug numbers and headers from that test.
|
||||
#
|
||||
# NOTE: This test is not currently complete and offers only basic
|
||||
# cases of mysqldump output being restored.
|
||||
# Also, does NOT work with -X (xml) output!
|
||||
#
|
||||
# Author: pcrews
|
||||
# Created: 2009-05-21
|
||||
# Last Change:
|
||||
# Change date:
|
||||
###############################################################################
|
||||
|
||||
# Embedded server doesn't support external clients
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
--echo # Set concurrent_insert = 0 to prevent random errors
|
||||
--echo # will reset to original value at the end of the test
|
||||
SET @old_concurrent_insert = @@global.concurrent_insert;
|
||||
SET @@global.concurrent_insert = 0;
|
||||
|
||||
# Define mysqldumpfile here. It is used to capture mysqldump output
|
||||
# in order to test the output's ability to restore an exact copy of the table
|
||||
let $mysqldumpfile = $MYSQLTEST_VARDIR/tmp/mysqldumpfile.sql;
|
||||
|
||||
--echo # Pre-test cleanup
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
--echo # Begin tests
|
||||
--echo #
|
||||
--echo # Bug#2005 Long decimal comparison bug.
|
||||
--echo #
|
||||
CREATE TABLE t1 (a DECIMAL(64, 20));
|
||||
INSERT INTO t1 VALUES ("1234567890123456789012345678901234567890"),
|
||||
("0987654321098765432109876543210987654321");
|
||||
--exec $MYSQL_DUMP --compact test t1 > $mysqldumpfile
|
||||
let $table_name = test.t1;
|
||||
--source include/mysqldump.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#3361 mysqldump quotes DECIMAL values inconsistently
|
||||
--echo #
|
||||
CREATE TABLE t1 (a DECIMAL(10,5), b FLOAT);
|
||||
# Check at first how mysql work with quoted decimal
|
||||
INSERT INTO t1 VALUES (1.2345, 2.3456);
|
||||
INSERT INTO t1 VALUES ('1.2345', 2.3456);
|
||||
INSERT INTO t1 VALUES ("1.2345", 2.3456);
|
||||
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI_QUOTES';
|
||||
INSERT INTO t1 VALUES (1.2345, 2.3456);
|
||||
INSERT INTO t1 VALUES ('1.2345', 2.3456);
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
INSERT INTO t1 VALUES ("1.2345", 2.3456);
|
||||
SET SQL_MODE=@OLD_SQL_MODE;
|
||||
|
||||
# check how mysqldump make quoting
|
||||
--exec $MYSQL_DUMP --compact test t1 > $mysqldumpfile
|
||||
let $table_name = test.t1;
|
||||
--source include/mysqldump.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#1994 mysqldump does not correctly dump UCS2 data
|
||||
--echo # Bug#4261 mysqldump 10.7 (mysql 4.1.2) --skip-extended-insert drops NULL from inserts
|
||||
--echo #
|
||||
CREATE TABLE t1 (a VARCHAR(255)) DEFAULT CHARSET koi8r;
|
||||
INSERT INTO t1 VALUES (_koi8r x'C1C2C3C4C5'), (NULL);
|
||||
--exec $MYSQL_DUMP --skip-comments --skip-extended-insert test t1 > $mysqldumpfile
|
||||
let $table_name = test.t1;
|
||||
--source include/mysqldump.inc
|
||||
|
||||
--echo #
|
||||
--echo # WL#2319 Exclude Tables from dump
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
INSERT INTO t2 VALUES (4),(5),(6);
|
||||
--exec $MYSQL_DUMP --skip-comments --ignore-table=test.t1 test > $mysqldumpfile
|
||||
let $table_name = test.t2;
|
||||
--source include/mysqldump.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#8830 mysqldump --skip-extended-insert causes --hex-blob to dump wrong values
|
||||
--echo #
|
||||
CREATE TABLE t1 (`b` blob);
|
||||
INSERT INTO `t1` VALUES (0x602010000280100005E71A);
|
||||
--exec $MYSQL_DUMP --skip-extended-insert --hex-blob test --skip-comments t1 > $mysqldumpfile
|
||||
let $table_name = test.t1;
|
||||
--source include/mysqldump.inc
|
||||
|
||||
--echo # End tests
|
||||
|
||||
--echo # Cleanup
|
||||
--echo # Reset concurrent_insert to its original value
|
||||
SET @@global.concurrent_insert = @old_concurrent_insert;
|
||||
--echo # remove mysqldumpfile
|
||||
--error 0,1
|
||||
--remove_file $mysqldumpfile
|
Loading…
Reference in a new issue