1
+ /*
2
+ * Licensed under the Apache License, Version 2.0 (the "License");
3
+ * you may not use this file except in compliance with the License.
4
+ * You may obtain a copy of the License at
5
+ *
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Unless required by applicable law or agreed to in writing, software
9
+ * distributed under the License is distributed on an "AS IS" BASIS,
10
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ * See the License for the specific language governing permissions and
12
+ * limitations under the License.
13
+ */
14
+ package com .github .shyiko .mysql .binlog .event .deserialization .json ;
15
+
16
+ import java .io .IOException ;
17
+
18
+ import org .junit .Assert ;
19
+ import org .junit .Test ;
20
+
21
+ /**
22
+ * The column value
23
+ * <pre>
24
+ * {
25
+ * "17fc9889474028063990914001f6854f6b8b5784":"test_field_for_remove_fields_behaviour_2",
26
+ * "1f3a2ea5bc1f60258df20521bee9ac636df69a3a":{
27
+ * "currency":"USD"
28
+ * },
29
+ * "4f4d99a438f334d7dbf83a1816015b361b848b3b":{
30
+ * "currency":"USD"
31
+ * },
32
+ * "9021162291be72f5a8025480f44bf44d5d81d07c":"test_field_for_remove_fields_behaviour_3_will_be_removed",
33
+ * "9b0ed11532efea688fdf12b28f142b9eb08a80c5":{
34
+ * "currency":"USD"
35
+ * },
36
+ * "e65ad0762c259b05b4866f7249eabecabadbe577":"test_field_for_remove_fields_behaviour_1_updated",
37
+ * "ff2c07edcaa3e987c23fb5cc4fe860bb52becf00":{
38
+ * "currency":"USD"
39
+ * }
40
+ * }
41
+ * </pre>
42
+ * is partially updated using
43
+ * <pre>
44
+ * JSON_REMOVE(custom_fields, '$.\"17fc9889474028063990914001f6854f6b8b5784\"')
45
+ * </pre>
46
+ * MySQL 5.7 and MySQL 8.0 emits different values in binlog (MySQL 8 value is sparse and requires strict using of offsets)
47
+ */
48
+ public class JsonPartialUpdateParseTest {
49
+
50
+ private static final byte [] BINLOG_UPDATE_57 = { 0 , 6 , 0 , -28 , 1 , 46 , 0 , 40 , 0 , 86 , 0 , 40 , 0 , 126 , 0 , 40 , 0 , -90 , 0 ,
51
+ 40 , 0 , -50 , 0 , 40 , 0 , -10 , 0 , 40 , 0 , 0 , 30 , 1 , 0 , 53 , 1 , 12 , 76 , 1 , 0 , -123 , 1 , 12 , -100 , 1 , 0 , -51 , 1 , 49 ,
52
+ 102 , 51 , 97 , 50 , 101 , 97 , 53 , 98 , 99 , 49 , 102 , 54 , 48 , 50 , 53 , 56 , 100 , 102 , 50 , 48 , 53 , 50 , 49 , 98 , 101 ,
53
+ 101 , 57 , 97 , 99 , 54 , 51 , 54 , 100 , 102 , 54 , 57 , 97 , 51 , 97 , 52 , 102 , 52 , 100 , 57 , 57 , 97 , 52 , 51 , 56 , 102 ,
54
+ 51 , 51 , 52 , 100 , 55 , 100 , 98 , 102 , 56 , 51 , 97 , 49 , 56 , 49 , 54 , 48 , 49 , 53 , 98 , 51 , 54 , 49 , 98 , 56 , 52 , 56 ,
55
+ 98 , 51 , 98 , 57 , 48 , 50 , 49 , 49 , 54 , 50 , 50 , 57 , 49 , 98 , 101 , 55 , 50 , 102 , 53 , 97 , 56 , 48 , 50 , 53 , 52 , 56 ,
56
+ 48 , 102 , 52 , 52 , 98 , 102 , 52 , 52 , 100 , 53 , 100 , 56 , 49 , 100 , 48 , 55 , 99 , 57 , 98 , 48 , 101 , 100 , 49 , 49 , 53 ,
57
+ 51 , 50 , 101 , 102 , 101 , 97 , 54 , 56 , 56 , 102 , 100 , 102 , 49 , 50 , 98 , 50 , 56 , 102 , 49 , 52 , 50 , 98 , 57 , 101 , 98 ,
58
+ 48 , 56 , 97 , 56 , 48 , 99 , 53 , 101 , 54 , 53 , 97 , 100 , 48 , 55 , 54 , 50 , 99 , 50 , 53 , 57 , 98 , 48 , 53 , 98 , 52 , 56 ,
59
+ 54 , 54 , 102 , 55 , 50 , 52 , 57 , 101 , 97 , 98 , 101 , 99 , 97 , 98 , 97 , 100 , 98 , 101 , 53 , 55 , 55 , 102 , 102 , 50 , 99 ,
60
+ 48 , 55 , 101 , 100 , 99 , 97 , 97 , 51 , 101 , 57 , 56 , 55 , 99 , 50 , 51 , 102 , 98 , 53 , 99 , 99 , 52 , 102 , 101 , 56 , 54 ,
61
+ 48 , 98 , 98 , 53 , 50 , 98 , 101 , 99 , 102 , 48 , 48 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 , 99 , 117 , 114 , 114 , 101 ,
62
+ 110 , 99 , 121 , 3 , 85 , 83 , 68 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 , 99 , 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 ,
63
+ 85 , 83 , 68 , 56 , 116 , 101 , 115 , 116 , 95 , 102 , 105 , 101 , 108 , 100 , 95 , 102 , 111 , 114 , 95 , 114 , 101 , 109 , 111 ,
64
+ 118 , 101 , 95 , 102 , 105 , 101 , 108 , 100 , 115 , 95 , 98 , 101 , 104 , 97 , 118 , 105 , 111 , 117 , 114 , 95 , 51 , 95 , 119 ,
65
+ 105 , 108 , 108 , 95 , 98 , 101 , 95 , 114 , 101 , 109 , 111 , 118 , 101 , 100 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 , 99 ,
66
+ 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 , 85 , 83 , 68 , 48 , 116 , 101 , 115 , 116 , 95 , 102 , 105 , 101 , 108 , 100 , 95 ,
67
+ 102 , 111 , 114 , 95 , 114 , 101 , 109 , 111 , 118 , 101 , 95 , 102 , 105 , 101 , 108 , 100 , 115 , 95 , 98 , 101 , 104 , 97 ,
68
+ 118 , 105 , 111 , 117 , 114 , 95 , 49 , 95 , 117 , 112 , 100 , 97 , 116 , 101 , 100 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 ,
69
+ 99 , 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 , 85 , 83 , 68 };
70
+
71
+ private static final byte [] BINLOG_UPDATE_80 = { 0 , 6 , 0 , 60 , 2 , 93 , 0 , 40 , 0 , -123 , 0 , 40 , 0 , -83 , 0 , 40 , 0 , -43 ,
72
+ 0 , 40 , 0 , -3 , 0 , 40 , 0 , 37 , 1 , 40 , 0 , 0 , 118 , 1 , 0 , -115 , 1 , 12 , -92 , 1 , 0 , -35 , 1 , 12 , -12 , 1 , 0 , 37 , 2 , 1 ,
73
+ 12 , -12 , 1 , 0 , 37 , 2 , 49 , 55 , 102 , 99 , 57 , 56 , 56 , 57 , 52 , 55 , 52 , 48 , 50 , 56 , 48 , 54 , 51 , 57 , 57 , 48 , 57 ,
74
+ 49 , 52 , 48 , 48 , 49 , 102 , 54 , 56 , 53 , 52 , 102 , 54 , 98 , 56 , 98 , 53 , 55 , 56 , 52 , 49 , 102 , 51 , 97 , 50 , 101 , 97 ,
75
+ 53 , 98 , 99 , 49 , 102 , 54 , 48 , 50 , 53 , 56 , 100 , 102 , 50 , 48 , 53 , 50 , 49 , 98 , 101 , 101 , 57 , 97 , 99 , 54 , 51 , 54 ,
76
+ 100 , 102 , 54 , 57 , 97 , 51 , 97 , 52 , 102 , 52 , 100 , 57 , 57 , 97 , 52 , 51 , 56 , 102 , 51 , 51 , 52 , 100 , 55 , 100 , 98 ,
77
+ 102 , 56 , 51 , 97 , 49 , 56 , 49 , 54 , 48 , 49 , 53 , 98 , 51 , 54 , 49 , 98 , 56 , 52 , 56 , 98 , 51 , 98 , 57 , 48 , 50 , 49 , 49 ,
78
+ 54 , 50 , 50 , 57 , 49 , 98 , 101 , 55 , 50 , 102 , 53 , 97 , 56 , 48 , 50 , 53 , 52 , 56 , 48 , 102 , 52 , 52 , 98 , 102 , 52 , 52 ,
79
+ 100 , 53 , 100 , 56 , 49 , 100 , 48 , 55 , 99 , 57 , 98 , 48 , 101 , 100 , 49 , 49 , 53 , 51 , 50 , 101 , 102 , 101 , 97 , 54 , 56 ,
80
+ 56 , 102 , 100 , 102 , 49 , 50 , 98 , 50 , 56 , 102 , 49 , 52 , 50 , 98 , 57 , 101 , 98 , 48 , 56 , 97 , 56 , 48 , 99 , 53 , 101 ,
81
+ 54 , 53 , 97 , 100 , 48 , 55 , 54 , 50 , 99 , 50 , 53 , 57 , 98 , 48 , 53 , 98 , 52 , 56 , 54 , 54 , 102 , 55 , 50 , 52 , 57 , 101 ,
82
+ 97 , 98 , 101 , 99 , 97 , 98 , 97 , 100 , 98 , 101 , 53 , 55 , 55 , 102 , 102 , 50 , 99 , 48 , 55 , 101 , 100 , 99 , 97 , 97 , 51 ,
83
+ 101 , 57 , 56 , 55 , 99 , 50 , 51 , 102 , 98 , 53 , 99 , 99 , 52 , 102 , 101 , 56 , 54 , 48 , 98 , 98 , 53 , 50 , 98 , 101 , 99 ,
84
+ 102 , 48 , 48 , 40 , 116 , 101 , 115 , 116 , 95 , 102 , 105 , 101 , 108 , 100 , 95 , 102 , 111 , 114 , 95 , 114 , 101 , 109 , 111 ,
85
+ 118 , 101 , 95 , 102 , 105 , 101 , 108 , 100 , 115 , 95 , 98 , 101 , 104 , 97 , 118 , 105 , 111 , 117 , 114 , 95 , 50 , 1 , 0 , 23 ,
86
+ 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 , 99 , 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 , 85 , 83 , 68 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 ,
87
+ 12 , 19 , 0 , 99 , 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 , 85 , 83 , 68 , 56 , 116 , 101 , 115 , 116 , 95 , 102 , 105 , 101 ,
88
+ 108 , 100 , 95 , 102 , 111 , 114 , 95 , 114 , 101 , 109 , 111 , 118 , 101 , 95 , 102 , 105 , 101 , 108 , 100 , 115 , 95 , 98 ,
89
+ 101 , 104 , 97 , 118 , 105 , 111 , 117 , 114 , 95 , 51 , 95 , 119 , 105 , 108 , 108 , 95 , 98 , 101 , 95 , 114 , 101 , 109 , 111 ,
90
+ 118 , 101 , 100 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 , 99 , 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 , 85 , 83 , 68 , 48 ,
91
+ 116 , 101 , 115 , 116 , 95 , 102 , 105 , 101 , 108 , 100 , 95 , 102 , 111 , 114 , 95 , 114 , 101 , 109 , 111 , 118 , 101 , 95 ,
92
+ 102 , 105 , 101 , 108 , 100 , 115 , 95 , 98 , 101 , 104 , 97 , 118 , 105 , 111 , 117 , 114 , 95 , 49 , 95 , 117 , 112 , 100 , 97 ,
93
+ 116 , 101 , 100 , 1 , 0 , 23 , 0 , 11 , 0 , 8 , 0 , 12 , 19 , 0 , 99 , 117 , 114 , 114 , 101 , 110 , 99 , 121 , 3 , 85 , 83 , 68 };
94
+
95
+ @ Test
96
+ public void test57PartialUpdateBinlog () throws IOException {
97
+ final String json = JsonBinary .parseAsString (BINLOG_UPDATE_57 );
98
+ Assert .assertFalse (json .contains ("17fc9889474028063990914001f6854f6b8b5784" ));
99
+ Assert .assertTrue (json .contains ("1f3a2ea5bc1f60258df20521bee9ac636df69a3a" ));
100
+ }
101
+
102
+ @ Test
103
+ public void test80PartialUpdateBinlog () throws IOException {
104
+ final String json = JsonBinary .parseAsString (BINLOG_UPDATE_80 );
105
+ Assert .assertFalse (json .contains ("17fc9889474028063990914001f6854f6b8b5784" ));
106
+ System .out .println (json );
107
+ Assert .assertTrue (json .contains ("1f3a2ea5bc1f60258df20521bee9ac636df69a3a" ));
108
+ }
109
+ }
0 commit comments