@@ -2747,3 +2747,60 @@ def test_truncate_operation_bug_issue_155():
27472747 # Clean up
27482748 db_replicator_runner .stop ()
27492749 binlog_replicator_runner .stop ()
2750+
2751+ def test_json2 ():
2752+ cfg = config .Settings ()
2753+ cfg .load (CONFIG_FILE )
2754+
2755+ mysql = mysql_api .MySQLApi (
2756+ database = None ,
2757+ mysql_settings = cfg .mysql ,
2758+ )
2759+
2760+ ch = clickhouse_api .ClickhouseApi (
2761+ database = TEST_DB_NAME ,
2762+ clickhouse_settings = cfg .clickhouse ,
2763+ )
2764+
2765+ prepare_env (cfg , mysql , ch )
2766+
2767+ mysql .execute ("SET sql_mode = 'ALLOW_INVALID_DATES';" )
2768+
2769+ mysql .execute (f'''
2770+ CREATE TABLE `{ TEST_TABLE_NAME } ` (
2771+ `id` int unsigned NOT NULL AUTO_INCREMENT,
2772+ name varchar(255),
2773+ data json,
2774+ PRIMARY KEY (id)
2775+ );
2776+ ''' )
2777+
2778+ mysql .execute (
2779+ f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, data) VALUES " +
2780+ """('Ivan', '{"а": "б", "в": [1,2,3]}');""" ,
2781+ commit = True ,
2782+ )
2783+
2784+ binlog_replicator_runner = BinlogReplicatorRunner ()
2785+ binlog_replicator_runner .run ()
2786+ db_replicator_runner = DbReplicatorRunner (TEST_DB_NAME )
2787+ db_replicator_runner .run ()
2788+
2789+ assert_wait (lambda : TEST_DB_NAME in ch .get_databases ())
2790+
2791+ ch .execute_command (f'USE `{ TEST_DB_NAME } `' )
2792+
2793+ assert_wait (lambda : TEST_TABLE_NAME in ch .get_tables ())
2794+ assert_wait (lambda : len (ch .select (TEST_TABLE_NAME )) == 1 )
2795+
2796+ mysql .execute (
2797+ f"INSERT INTO `{ TEST_TABLE_NAME } ` (name, data) VALUES " +
2798+ """('Peter', '{"в": "б", "а": [3,2,1]}');""" ,
2799+ commit = True ,
2800+ )
2801+ assert_wait (lambda : len (ch .select (TEST_TABLE_NAME )) == 2 )
2802+
2803+ assert json .loads (ch .select (TEST_TABLE_NAME , "name='Ivan'" )[0 ]['data' ])['в' ] == [1 , 2 , 3 ]
2804+ assert json .loads (ch .select (TEST_TABLE_NAME , "name='Peter'" )[0 ]['data' ])['в' ] == 'б'
2805+ db_replicator_runner .stop ()
2806+ binlog_replicator_runner .stop ()
0 commit comments