Skip to content

Commit c7926b2

Browse files
Merge pull request #1606 from ClickHouse/back_compatible_dynamic_json
Backwards compatible `Dynamic` and `JSON`
2 parents d087281 + 1a9ef0a commit c7926b2

File tree

10 files changed

+1520
-9
lines changed

10 files changed

+1520
-9
lines changed

lib/column/codegen/column.tpl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ func (t Type) Column(name string, sc *ServerContext) (Interface, error) {
122122
return &Point{name: name}, nil
123123
case "String":
124124
return &String{name: name, col: colStrProvider(name)}, nil
125+
case "SharedVariant":
126+
return &SharedVariant{name: name}, nil
125127
case "Object('json')":
126128
return &JSONObject{name: name, root: true, sc: sc}, nil
127129
}
@@ -134,9 +136,17 @@ func (t Type) Column(name string, sc *ServerContext) (Interface, error) {
134136
case strings.HasPrefix(string(t), "Variant("):
135137
return (&Variant{name: name}).parse(t, sc)
136138
case strings.HasPrefix(string(t), "Dynamic"):
137-
return (&Dynamic{name: name}).parse(t, sc)
139+
if sc.VersionMajor >= 25 && sc.VersionMinor >= 6 {
140+
return (&Dynamic{name: name}).parse(t, sc)
141+
} else {
142+
return (&Dynamic_v1{name: name}).parse(t, sc)
143+
}
138144
case strings.HasPrefix(string(t), "JSON"):
139-
return (&JSON{name: name}).parse(t, sc)
145+
if sc.VersionMajor >= 25 && sc.VersionMinor >= 6 {
146+
return (&JSON{name: name}).parse(t, sc)
147+
} else {
148+
return (&JSON_v1{name: name}).parse(t, sc)
149+
}
140150
case strings.HasPrefix(string(t), "Decimal("):
141151
return (&Decimal{name: name}).parse(t)
142152
case strings.HasPrefix(strType, "Nested("):

lib/column/column_gen.go

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/column/dynamic.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
)
2929

3030
const SupportedDynamicSerializationVersion = 3
31-
const DeprecatedSupportedDynamicSerializationVersion = 1
3231
const DefaultMaxDynamicTypes = 32
3332
const DynamicNullDiscriminator = -1 // The Null index changes as data is being built, use -1 as placeholder for writes.
3433

@@ -318,7 +317,7 @@ func (c *Dynamic) decodeHeader(reader *proto.Reader) error {
318317
return fmt.Errorf("failed to read dynamic serialization version: %w", err)
319318
}
320319

321-
if dynamicSerializationVersion == DeprecatedSupportedDynamicSerializationVersion {
320+
if dynamicSerializationVersion == DeprecatedDynamicSerializationVersion {
322321
return fmt.Errorf("deprecated dynamic serialization version: %d, enable \"output_format_native_use_flattened_dynamic_and_json_serialization\" in your settings", dynamicSerializationVersion)
323322
} else if dynamicSerializationVersion != SupportedDynamicSerializationVersion {
324323
return fmt.Errorf("unsupported dynamic serialization version: %d", dynamicSerializationVersion)

0 commit comments

Comments
 (0)