Skip to content

Commit 89f5595

Browse files
authored
Merge pull request ClickHouse#78807 from Avogar/json-to-json-cast-simple
Fix conversion between different JSON types by using simple, inefficient but reliable code
2 parents 3f1a8ab + 879226e commit 89f5595

10 files changed

+199
-627
lines changed

src/Functions/FunctionsConversion.h

Lines changed: 13 additions & 411 deletions
Large diffs are not rendered by default.

tests/queries/0_stateless/03272_json_to_json_alter.reference

Lines changed: 63 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ k3
99
k4
1010
k5
1111
k7
12+
k9
1213
Shared data paths:
1314
k6
1415
k8
15-
k9
1616
\N 1 2020-01-01 31 [1,2,3] str1 \N 2020-01-01 \N 91
1717
\N 2 2020-01-02 \N Hello \N false \N \N 92
1818
\N 3 2020-01-03 32 \N 42 \N 73 \N \N
@@ -23,23 +23,23 @@ Decrease max_dynamic_paths to 3, max_dynamic_types to 1
2323
{"k1":3,"k2":"2020-01-03","k3":"32","k5":"42","k7":"73"}
2424
{"k1":4,"k2":"2020-01-04","k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
2525
Dynamic paths:
26+
k3
2627
k4
2728
k5
28-
k7
2929
Shared data paths:
30-
k3
3130
k6
31+
k7
3232
k8
3333
k9
3434
\N 1 2020-01-01 31 [1,2,3] str1 \N 2020-01-01 \N 91
3535
\N 2 2020-01-02 \N Hello \N false \N \N 92
3636
\N 3 2020-01-03 32 \N 42 \N 73 \N \N
3737
\N 4 2020-01-04 \N false str1 true \N 84.84 94
3838
Change typed paths
39-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k5":"str1","k6":false,"k7":"2020-01-01","k9":"91"}
40-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
41-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k5":"42","k6":false,"k7":"73"}
42-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
39+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k5":"str1","k6":false,"k7":"2020-01-01","k9":"91"}
40+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
41+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k5":"42","k6":false,"k7":"73"}
42+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
4343
Dynamic paths:
4444
k1
4545
k4
@@ -53,10 +53,10 @@ k9
5353
0 3 2020-01-03 32 \N 42 false 73 \N \N
5454
0 4 2020-01-04 0 false str1 true \N 84.84 94
5555
Add new skip rules
56-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
57-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
58-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
59-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
56+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
57+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
58+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
59+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
6060
Dynamic paths:
6161
k1
6262
k4
@@ -68,10 +68,10 @@ k9
6868
0 3 2020-01-03 32 \N \N false 73 \N \N
6969
0 4 2020-01-04 0 false \N true \N \N 94
7070
Decrease max_dynamic_paths and max_dynamic_types to 0
71-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
72-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
73-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
74-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
71+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
72+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
73+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
74+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
7575
Dynamic paths:
7676
Shared data paths:
7777
k1
@@ -83,35 +83,25 @@ k9
8383
0 3 2020-01-03 32 \N \N false 73 \N \N
8484
0 4 2020-01-04 0 false \N true \N \N 94
8585
max_dynamic_paths=3
86-
Dynamic paths
86+
All paths:
8787
k1
8888
k2
8989
k3
9090
k4
91-
Shared data paths
92-
k1
9391
max_dynamic_paths=2
94-
Dynamic paths
92+
All paths:
9593
k1
9694
k2
9795
k3
9896
k4
99-
Shared data paths
100-
k1
101-
k2
10297
max_dynamic_paths=1
103-
Dynamic paths
98+
All paths:
10499
k1
105100
k2
106101
k3
107102
k4
108-
Shared data paths
109-
k1
110-
k2
111-
k3
112103
max_dynamic_paths=0
113-
Dynamic paths
114-
Shared data paths
104+
All paths:
115105
k1
116106
k2
117107
k3
@@ -127,10 +117,10 @@ k3
127117
k4
128118
k5
129119
k7
120+
k9
130121
Shared data paths:
131122
k6
132123
k8
133-
k9
134124
\N 1 2020-01-01 31 [1,2,3] str1 \N 2020-01-01 \N 91
135125
\N 2 2020-01-02 \N Hello \N false \N \N 92
136126
\N 3 2020-01-03 32 \N 42 \N 73 \N \N
@@ -141,23 +131,23 @@ Decrease max_dynamic_paths to 3, max_dynamic_types to 1
141131
{"k1":3,"k2":"2020-01-03","k3":"32","k5":"42","k7":"73"}
142132
{"k1":4,"k2":"2020-01-04","k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
143133
Dynamic paths:
134+
k3
144135
k4
145136
k5
146-
k7
147137
Shared data paths:
148-
k3
149138
k6
139+
k7
150140
k8
151141
k9
152142
\N 1 2020-01-01 31 [1,2,3] str1 \N 2020-01-01 \N 91
153143
\N 2 2020-01-02 \N Hello \N false \N \N 92
154144
\N 3 2020-01-03 32 \N 42 \N 73 \N \N
155145
\N 4 2020-01-04 \N false str1 true \N 84.84 94
156146
Change typed paths
157-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k5":"str1","k6":false,"k7":"2020-01-01","k9":"91"}
158-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
159-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k5":"42","k6":false,"k7":"73"}
160-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
147+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k5":"str1","k6":false,"k7":"2020-01-01","k9":"91"}
148+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
149+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k5":"42","k6":false,"k7":"73"}
150+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
161151
Dynamic paths:
162152
k1
163153
k4
@@ -171,25 +161,25 @@ k9
171161
0 3 2020-01-03 32 \N 42 false 73 \N \N
172162
0 4 2020-01-04 0 false str1 true \N 84.84 94
173163
Add new skip rules
174-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
175-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
176-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
177-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
164+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
165+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
166+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
167+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
178168
Dynamic paths:
179169
k1
180170
k4
181-
Shared data paths:
182171
k7
172+
Shared data paths:
183173
k9
184174
0 1 2020-01-01 31 [1,2,3] \N false 2020-01-01 \N 91
185175
0 2 2020-01-02 0 Hello \N false \N \N 92
186176
0 3 2020-01-03 32 \N \N false 73 \N \N
187177
0 4 2020-01-04 0 false \N true \N \N 94
188178
Decrease max_dynamic_paths and max_dynamic_types to 0
189-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
190-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
191-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
192-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
179+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
180+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
181+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
182+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
193183
Dynamic paths:
194184
Shared data paths:
195185
k1
@@ -201,29 +191,25 @@ k9
201191
0 3 2020-01-03 32 \N \N false 73 \N \N
202192
0 4 2020-01-04 0 false \N true \N \N 94
203193
max_dynamic_paths=3
204-
Dynamic paths
194+
All paths:
205195
k1
196+
k2
206197
k3
207198
k4
208-
Shared data paths
209-
k2
210199
max_dynamic_paths=2
211-
Dynamic paths
200+
All paths:
212201
k1
213-
k4
214-
Shared data paths
215202
k2
216203
k3
204+
k4
217205
max_dynamic_paths=1
218-
Dynamic paths
206+
All paths:
219207
k1
220-
Shared data paths
221208
k2
222209
k3
223210
k4
224211
max_dynamic_paths=0
225-
Dynamic paths
226-
Shared data paths
212+
All paths:
227213
k1
228214
k2
229215
k3
@@ -239,10 +225,10 @@ k3
239225
k4
240226
k5
241227
k7
228+
k9
242229
Shared data paths:
243230
k6
244231
k8
245-
k9
246232
\N 1 2020-01-01 31 [1,2,3] str1 \N 2020-01-01 \N 91
247233
\N 2 2020-01-02 \N Hello \N false \N \N 92
248234
\N 3 2020-01-03 32 \N 42 \N 73 \N \N
@@ -253,23 +239,23 @@ Decrease max_dynamic_paths to 3, max_dynamic_types to 1
253239
{"k1":3,"k2":"2020-01-03","k3":"32","k5":"42","k7":"73"}
254240
{"k1":4,"k2":"2020-01-04","k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
255241
Dynamic paths:
242+
k3
256243
k4
257244
k5
258-
k7
259245
Shared data paths:
260-
k3
261246
k6
247+
k7
262248
k8
263249
k9
264250
\N 1 2020-01-01 31 [1,2,3] str1 \N 2020-01-01 \N 91
265251
\N 2 2020-01-02 \N Hello \N false \N \N 92
266252
\N 3 2020-01-03 32 \N 42 \N 73 \N \N
267253
\N 4 2020-01-04 \N false str1 true \N 84.84 94
268254
Change typed paths
269-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k5":"str1","k6":false,"k7":"2020-01-01","k9":"91"}
270-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
271-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k5":"42","k6":false,"k7":"73"}
272-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
255+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k5":"str1","k6":false,"k7":"2020-01-01","k9":"91"}
256+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
257+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k5":"42","k6":false,"k7":"73"}
258+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k5":"str1","k6":true,"k8":84.84,"k9":"94"}
273259
Dynamic paths:
274260
k1
275261
k4
@@ -283,25 +269,25 @@ k9
283269
0 3 2020-01-03 32 \N 42 false 73 \N \N
284270
0 4 2020-01-04 0 false str1 true \N 84.84 94
285271
Add new skip rules
286-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
287-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
288-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
289-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
272+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
273+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
274+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
275+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
290276
Dynamic paths:
291277
k1
292278
k4
293-
Shared data paths:
294279
k7
280+
Shared data paths:
295281
k9
296282
0 1 2020-01-01 31 [1,2,3] \N false 2020-01-01 \N 91
297283
0 2 2020-01-02 0 Hello \N false \N \N 92
298284
0 3 2020-01-03 32 \N \N false 73 \N \N
299285
0 4 2020-01-04 0 false \N true \N \N 94
300286
Decrease max_dynamic_paths and max_dynamic_types to 0
301-
{"k0":0,"k1":1,"k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
302-
{"k0":0,"k1":2,"k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
303-
{"k0":0,"k1":3,"k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
304-
{"k0":0,"k1":4,"k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
287+
{"k0":0,"k1":"1","k2":"2020-01-01","k3":31,"k4":["1","2","3"],"k6":false,"k7":"2020-01-01","k9":"91"}
288+
{"k0":0,"k1":"2","k2":"2020-01-02","k3":0,"k4":"Hello","k6":false,"k9":"92"}
289+
{"k0":0,"k1":"3","k2":"2020-01-03","k3":32,"k6":false,"k7":"73"}
290+
{"k0":0,"k1":"4","k2":"2020-01-04","k3":0,"k4":false,"k6":true,"k9":"94"}
305291
Dynamic paths:
306292
Shared data paths:
307293
k1
@@ -313,29 +299,25 @@ k9
313299
0 3 2020-01-03 32 \N \N false 73 \N \N
314300
0 4 2020-01-04 0 false \N true \N \N 94
315301
max_dynamic_paths=3
316-
Dynamic paths
302+
All paths:
317303
k1
304+
k2
318305
k3
319306
k4
320-
Shared data paths
321-
k2
322307
max_dynamic_paths=2
323-
Dynamic paths
308+
All paths:
324309
k1
325-
k4
326-
Shared data paths
327310
k2
328311
k3
312+
k4
329313
max_dynamic_paths=1
330-
Dynamic paths
314+
All paths:
331315
k1
332-
Shared data paths
333316
k2
334317
k3
335318
k4
336319
max_dynamic_paths=0
337-
Dynamic paths
338-
Shared data paths
320+
All paths:
339321
k1
340322
k2
341323
k3

0 commit comments

Comments
 (0)