13
13
from mysql_ch_replicator import config
14
14
from mysql_ch_replicator import mysql_api
15
15
from mysql_ch_replicator import clickhouse_api
16
- from mysql_ch_replicator .binlog_replicator import State as BinlogState , FileReader , EventType
16
+ from mysql_ch_replicator .binlog_replicator import State as BinlogState , FileReader , EventType , BinlogReplicator
17
17
from mysql_ch_replicator .db_replicator import State as DbReplicatorState , DbReplicator
18
18
from mysql_ch_replicator .converter import MysqlToClickhouseConverter
19
19
@@ -69,14 +69,16 @@ def prepare_env(
69
69
cfg : config .Settings ,
70
70
mysql : mysql_api .MySQLApi ,
71
71
ch : clickhouse_api .ClickhouseApi ,
72
- db_name : str = TEST_DB_NAME
72
+ db_name : str = TEST_DB_NAME ,
73
+ set_mysql_db : bool = True
73
74
):
74
75
if os .path .exists (cfg .binlog_replicator .data_dir ):
75
76
shutil .rmtree (cfg .binlog_replicator .data_dir )
76
77
os .mkdir (cfg .binlog_replicator .data_dir )
77
78
mysql .drop_database (db_name )
78
79
mysql .create_database (db_name )
79
- mysql .set_database (db_name )
80
+ if set_mysql_db :
81
+ mysql .set_database (db_name )
80
82
ch .drop_database (db_name )
81
83
assert_wait (lambda : db_name not in ch .get_databases ())
82
84
@@ -784,7 +786,7 @@ def _get_last_insert_name():
784
786
f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, age) "
785
787
f"VALUES ('TEST_VALUE_{ i } _{ base_value } ', { i } );" , commit = i % 20 == 0 ,
786
788
)
787
-
789
+ #`replication-test_db`
788
790
mysql .execute (f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, age) VALUES ('TEST_VALUE_FINAL', 0);" , commit = True )
789
791
790
792
print ("running db_replicator" )
@@ -823,12 +825,12 @@ def test_different_types_1():
823
825
clickhouse_settings = cfg .clickhouse ,
824
826
)
825
827
826
- prepare_env (cfg , mysql , ch )
828
+ prepare_env (cfg , mysql , ch , set_mysql_db = False )
827
829
828
830
mysql .execute ("SET sql_mode = 'ALLOW_INVALID_DATES';" )
829
831
830
832
mysql .execute (f'''
831
- CREATE TABLE `{ TEST_TABLE_NAME } ` (
833
+ CREATE TABLE `{ TEST_DB_NAME } `.` { TEST_TABLE_NAME } ` (
832
834
`id` int unsigned NOT NULL AUTO_INCREMENT,
833
835
name varchar(255),
834
836
`employee` int unsigned NOT NULL,
@@ -866,7 +868,7 @@ def test_different_types_1():
866
868
''' )
867
869
868
870
mysql .execute (
869
- f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, modified_date) VALUES ('Ivan', '0000-00-00 00:00:00');" ,
871
+ f"INSERT INTO `{ TEST_DB_NAME } `.` { TEST_TABLE_NAME } ` (name, modified_date) VALUES ('Ivan', '0000-00-00 00:00:00');" ,
870
872
commit = True ,
871
873
)
872
874
@@ -883,15 +885,30 @@ def test_different_types_1():
883
885
assert_wait (lambda : len (ch .select (TEST_TABLE_NAME )) == 1 )
884
886
885
887
mysql .execute (
886
- f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, modified_date) VALUES ('Alex', '0000-00-00 00:00:00');" ,
888
+ f"INSERT INTO `{ TEST_DB_NAME } `.` { TEST_TABLE_NAME } ` (name, modified_date) VALUES ('Alex', '0000-00-00 00:00:00');" ,
887
889
commit = True ,
888
890
)
889
891
mysql .execute (
890
- f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, modified_date) VALUES ('Givi', '2023-01-08 03:11:09');" ,
892
+ f"INSERT INTO `{ TEST_DB_NAME } `.` { TEST_TABLE_NAME } ` (name, modified_date) VALUES ('Givi', '2023-01-08 03:11:09');" ,
891
893
commit = True ,
892
894
)
893
895
assert_wait (lambda : len (ch .select (TEST_TABLE_NAME )) == 3 )
894
896
897
+ mysql .execute (f'''
898
+ CREATE TABLE `{ TEST_DB_NAME } `.`{ TEST_TABLE_NAME_2 } ` (
899
+ `id` int unsigned NOT NULL AUTO_INCREMENT,
900
+ name varchar(255),
901
+ PRIMARY KEY (id)
902
+ );
903
+ ''' )
904
+
905
+ mysql .execute (
906
+ f"INSERT INTO `{ TEST_DB_NAME } `.`{ TEST_TABLE_NAME_2 } ` (name) VALUES ('Ivan');" ,
907
+ commit = True ,
908
+ )
909
+
910
+ assert_wait (lambda : TEST_TABLE_NAME_2 in ch .get_tables ())
911
+
895
912
db_replicator_runner .stop ()
896
913
binlog_replicator_runner .stop ()
897
914
@@ -1535,3 +1552,42 @@ def test_alter_tokens_split():
1535
1552
print ("Match? " , result == expected )
1536
1553
print ("-" * 60 )
1537
1554
assert result == expected
1555
+
1556
+
1557
+ @pytest .mark .parametrize ("query,expected" , [
1558
+ ("CREATE TABLE `mydb`.`mytable` (id INT)" , "mydb" ),
1559
+ ("CREATE TABLE mydb.mytable (id INT)" , "mydb" ),
1560
+ ("ALTER TABLE `mydb`.mytable ADD COLUMN name VARCHAR(50)" , "mydb" ),
1561
+ ("CREATE TABLE IF NOT EXISTS mydb.mytable (id INT)" , "mydb" ),
1562
+ ("CREATE TABLE mytable (id INT)" , "" ),
1563
+ (" CREATE TABLE `mydb` . `mytable` \n ( id INT )" , "mydb" ),
1564
+ ('ALTER TABLE "testdb"."tablename" ADD COLUMN flag BOOLEAN' , "testdb" ),
1565
+ ("create table mydb.mytable (id int)" , "mydb" ),
1566
+ ("DROP DATABASE mydb" , "" ),
1567
+ ("CREATE TABLE mydbmytable (id int)" , "" ), # missing dot between DB and table
1568
+ ("""
1569
+ CREATE TABLE IF NOT EXISTS
1570
+ `multidb`
1571
+ .
1572
+ `multitable`
1573
+ (
1574
+ id INT,
1575
+ name VARCHAR(100)
1576
+ )
1577
+ """ , "multidb" ),
1578
+ ("""
1579
+ ALTER TABLE
1580
+ `justtable`
1581
+ ADD COLUMN age INT;
1582
+ """ , "" ),
1583
+ ("""
1584
+ CREATE TABLE `replication-test_db`.`test_table_2` (
1585
+ `id` int unsigned NOT NULL AUTO_INCREMENT,
1586
+ name varchar(255),
1587
+ PRIMARY KEY (id)
1588
+ )
1589
+ """ , "replication-test_db" ),
1590
+ ("BEGIN" , "" ),
1591
+ ])
1592
+ def test_parse_db_name_from_query (query , expected ):
1593
+ assert BinlogReplicator ._try_parse_db_name_from_query (query ) == expected
0 commit comments