summaryrefslogtreecommitdiff
path: root/mysql-test/suite/rpl/include/rpl_lower_case_table_names.test
blob: fa48142ee919576da9312c34b7396a465cc39c06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# BUG#37656
#
#  This test aims at checking whether lower_case_table_names=1 option works
#  for database names and table names.
#
#  This test checks the following (when lower_case_table_names=1 is set on slave):
#    (i) creating a database on upper case on master results in lower case
#        database name on slave
#   (ii) creating tables with upper case names on master results in lower case
#        table names on slave
#  (iii) loading data infile into capitalized table name on master replicates to
#        lower case table name on slave
#   (iv) Propagating changes from upper case table names on into correspondent
#        lower case table names on slave works.


# setup: create database and tables
-- echo ******** [ MASTER ] ********
-- let $dbname_upper= BUG_37656
-- let $dbname_lower= `SELECT LOWER('$dbname_upper')`
-- eval CREATE DATABASE $dbname_upper
-- eval use $dbname_upper

# assert: database names are in upper case in master and lower
#         case in slave
-- eval show databases like '$dbname_upper'
sync_slave_with_master;
-- echo ******** [ SLAVE ] ********
--eval show databases like '$dbname_lower'

-- connection master
-- echo ******** [ MASTER ] ********
CREATE TABLE T1 (a int);
-- eval CREATE TABLE T2 (b int) ENGINE=$engine
CREATE TABLE T3 (txt TEXT);

# assert: that tables exist on master with upper case names
show tables;

# assert: that tables exist on slave but with lower case names
-- sync_slave_with_master
-- echo ******** [ SLAVE ] ********
-- eval use $dbname_lower
show tables;

# action: lets create t1 for asserting below that t1 does not get changes
#         from master (slave configured with --replicate-ignore-db=$dbname_lower.t1)
CREATE TABLE t1 (a INT);

# action: fill data into tables
-- connection master
-- echo ******** [ MASTER ] ********
-- eval use $dbname_upper
INSERT INTO T1 VALUES (1);
INSERT INTO T2 VALUES (1);
if (`SELECT @@session.binlog_format != 'ROW'`)
{
  -- eval LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE $dbname_upper.T3
}

if  (`SELECT @@session.binlog_format = 'ROW'`)
{
  use test;
  -- eval INSERT INTO $dbname_upper.T1 VALUES (2)
  -- eval INSERT INTO $dbname_upper.T2 VALUES (2)
  -- eval LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE $dbname_upper.T3
}
# assert: lower case tables on lower case database on slave
#         get updates from upper case tables on upper case
#         database on master
-- sync_slave_with_master
-- echo ******** [ SLAVE ] ********

# assert: changes for slave's t1 were filterd out
if (`SELECT count(*) != 0 FROM t1`)
{
  -- echo UNEXPECTED DATA on $dbname_lower.t1 as table is filtered by replicate-ignore-table rules
}

-- let $diff_tables=master:$dbname_upper.T2, slave:$dbname_lower.t2
-- source include/diff_tables.inc

-- let $diff_tables=master:$dbname_upper.T3, slave:$dbname_lower.t3
-- source include/diff_tables.inc

# clean up
-- connection master
-- echo ******** [ MASTER ] ********
-- eval DROP DATABASE $dbname_upper
-- sync_slave_with_master


#
# BUG#50653: drop procedure implicitely treats db name in a case sensitive way
#

-- connection master

-- let $dbname= B50653
-- let $procname= b50653_proc

-- eval CREATE DATABASE $dbname
-- eval USE $dbname
-- eval CREATE PROCEDURE $procname() BEGIN SELECT 1; END

if (`SELECT count(*) = 1 FROM mysql.proc WHERE name like '$dbname'`)
{
  -- die Procedure not created on MASTER
}

-- sync_slave_with_master
if (`SELECT count(*) = 1 FROM mysql.proc WHERE name like '$dbname'`)
{
  -- die Procedure not created on SLAVE
}

-- connection master
-- eval DROP PROCEDURE $procname

if (`SELECT count(*) FROM mysql.proc WHERE name like '$dbname'`)
{
  -- die Procedure not dropped on MASTER
}

-- sync_slave_with_master
if (`SELECT count(*) FROM mysql.proc WHERE name like '$dbname'`)
{
  -- die Procedure not dropped on SLAVE
}

-- let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1)
if ($last_error)
{
  -- die UNEXPECTED SLAVE SQL error: $last_error
}

-- connection master
-- eval DROP DATABASE $dbname
-- sync_slave_with_master

-- source include/rpl_end.inc