Skip to content

Commit 0f5589b

Browse files
committed
Address normen662 comments.
- make sure to convert FieldKeyExpression#fieldName (which is internal) to user-facing name when constructing match candidates. - also, add tests for deeply nested (and repeated) structures with non-pb-compliant field names, and an index.
1 parent 43e6041 commit 0f5589b

File tree

7 files changed

+137
-28
lines changed

7 files changed

+137
-28
lines changed

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/expressions/FieldKeyExpression.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.apple.foundationdb.record.query.plan.cascades.KeyExpressionVisitor;
3434
import com.apple.foundationdb.record.query.plan.cascades.Quantifier;
3535
import com.apple.foundationdb.record.query.plan.cascades.expressions.ExplodeExpression;
36+
import com.apple.foundationdb.record.util.ProtoUtils;
3637
import com.google.common.collect.ImmutableList;
3738
import com.google.protobuf.Descriptors;
3839
import com.google.protobuf.Message;
@@ -57,6 +58,13 @@
5758
public class FieldKeyExpression extends BaseKeyExpression implements AtomKeyExpression, KeyExpressionWithoutChildren {
5859
private static final ObjectPlanHash BASE_HASH = new ObjectPlanHash("Field-Key-Expression");
5960

61+
/**
62+
* The internal field name used in the underlying protobuf message. This name may differ from the user-visible
63+
* identifier to ensure compliance with protobuf field naming conventions. When working with query planning or
64+
* user-facing operations, use {@link ProtoUtils#toUserIdentifier(String)} to convert this to the user-visible
65+
* form. However, when constructing physical operators that directly interact with stored protobuf messages,
66+
* this internal name should be used as-is.
67+
*/
6068
@Nonnull
6169
private final String fieldName;
6270
@Nonnull
@@ -216,7 +224,7 @@ public <S extends KeyExpressionVisitor.State, R> R expand(@Nonnull final KeyExpr
216224
public Quantifier.ForEach explodeField(@Nonnull Quantifier.ForEach baseQuantifier, @Nonnull List<String> fieldNamePrefix) {
217225
final List<String> fieldNames = ImmutableList.<String>builder()
218226
.addAll(fieldNamePrefix)
219-
.add(fieldName)
227+
.add(ProtoUtils.toUserIdentifier(fieldName))
220228
.build();
221229
switch (fanType) {
222230
case FanOut:

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/KeyExpressionExpansionVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ public GraphExpansion visitExpression(@Nonnull final NestingKeyExpression nestin
242242
case None:
243243
List<String> newPrefix = ImmutableList.<String>builder()
244244
.addAll(fieldNamePrefix)
245-
.add(parent.getFieldName())
245+
.add(ProtoUtils.toUserIdentifier((parent.getFieldName())))
246246
.build();
247247
if (NullableArrayTypeUtils.isArrayWrapper(nestingKeyExpression)) {
248248
final RecordKeyExpressionProto.KeyExpression childProto = nestingKeyExpression.getChild().toKeyExpression();

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/ScalarTranslationVisitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,10 @@ public Value visitExpression(@Nonnull final NestingKeyExpression nestingKeyExpre
170170
final ScalarVisitorState state = getCurrentState();
171171
final List<String> fieldNamePrefix = state.getFieldNamePrefix();
172172
final KeyExpression child = nestingKeyExpression.getChild();
173+
final String parentFieldName = ProtoUtils.toUserIdentifier(parent.getFieldName());
173174
final List<String> newPrefix = ImmutableList.<String>builder()
174175
.addAll(fieldNamePrefix)
175-
.add(parent.getFieldName())
176+
.add(parentFieldName)
176177
.build();
177178
// TODO resolve type
178179
return pop(child.expand(push(state.withFieldNamePrefix(newPrefix))));

yaml-tests/src/test/java/YamlIntegrationTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ public void castTests(YamlTest.Runner runner) throws Exception {
350350
* @see MetaDataExportUtilityTests#createValidIdentifiersMetaData() for how the custom meta-data is generated
351351
*/
352352
@TestTemplate
353+
@MaintainYamlTestConfig(YamlTestConfigFilters.CORRECT_EXPLAIN_AND_METRICS)
353354
public void validIdentifierTests(YamlTest.Runner runner) throws Exception {
354355
runner.runYamsql("valid-identifiers.yamsql");
355356
}

yaml-tests/src/test/resources/valid-identifiers.metrics.binpb

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,50 @@
1-
�
1+
�'
2+
�
3+
all-tests�EXPLAIN select B."level2$array.field.1" from "foo.table$nested.repeated" as t, (select A."level2$array.field.1" from t."level0.field1" as Y, (select "level2$array.field.1" from Y."level1$field.1") as A) as B where id = 1�%
4+
����]� ��C(+0���8<@�SCAN(<,>) | TFILTER foo__2table__1nested__2repeated | FILTER _.ID EQUALS promote(@c38 AS LONG) | FLATMAP q0 -> { EXPLODE q0.level0.field1 | FLATMAP q1 -> { EXPLODE q1.level1$field.1 AS q2 RETURN q2 } AS q2 RETURN (q2.level2$array.field.1 AS level2$array.field.1) }�#digraph G {
5+
fontname=courier;
6+
rankdir=BT;
7+
splines=polyline;
8+
1 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Nested Loop Join</td></tr><tr><td align="left">FLATMAP (q6.level2$array.field.1 AS level2$array.field.1)</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS level2$array.field.1)" ];
9+
2 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Predicate Filter</td></tr><tr><td align="left">WHERE q2.ID EQUALS promote(@c38 AS LONG)</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS ID, ARRAY(ARRAY(LONG AS level2$array.field.1, LONG AS level2$field.2) AS level1$field.1, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.2) AS level0.field1)" ];
10+
3 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Type Filter</td></tr><tr><td align="left">WHERE record IS [foo__2table__1nested__2repeated]</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS ID, ARRAY(ARRAY(LONG AS level2$array.field.1, LONG AS level2$field.2) AS level1$field.1, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.2) AS level0.field1)" ];
11+
4 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Scan</td></tr><tr><td align="left">range: &lt;-∞, ∞&gt;</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ];
12+
5 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Primary Storage</td></tr><tr><td align="left">record types: [foo__2tableA, foo__1tableC, foo__2table__1nested, foo__2table__1nested__2repeated, my__1adjacency__1list, foo__2enum__2type, foo__2tableB, __foo__0tableD, foo__2tableE]</td></tr></table>> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ];
13+
6 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Nested Loop Join</td></tr><tr><td align="left">FLATMAP q6</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS level2$array.field.1, LONG AS level2$field.2)" ];
14+
7 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Value Computation</td></tr><tr><td align="left">EXPLODE q4.level1$field.1</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS level2$array.field.1, LONG AS level2$field.2)" ];
15+
8 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Value Computation</td></tr><tr><td align="left">EXPLODE q2.level0.field1</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(ARRAY(LONG AS level2$array.field.1, LONG AS level2$field.2) AS level1$field.1, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.2)" ];
16+
3 -> 2 [ label=<&nbsp;q2> label="q2" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
17+
4 -> 3 [ label=<&nbsp;q47> label="q47" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
18+
5 -> 4 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
19+
2 -> 1 [ label=<&nbsp;q2> label="q2" color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
20+
7 -> 6 [ label=<&nbsp;q6> label="q6" color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
21+
8 -> 6 [ label=<&nbsp;q4> label="q4" color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
22+
6 -> 1 [ label=<&nbsp;q6> label="q6" color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
23+
{
24+
rank=same;
25+
rankDir=LR;
26+
2 -> 6 [ color="red" style="invis" ];
27+
}
28+
{
29+
rank=same;
30+
rankDir=LR;
31+
8 -> 7 [ color="red" style="invis" ];
32+
}
33+
}�
34+
r
35+
all-testseEXPLAIN select "level0.field1"."level1$field.1"."level2$field.1" from "foo.table$nested" where id = 1�
36+
����]r ���D(!0��84@�COVERING(foo.table$nested.idx <,> -> [ID: KEY[2], level0__2field1: [level1__1field__21: [level2__1field__21: KEY[0]]]]) | FILTER _.ID EQUALS promote(@c12 AS LONG) | MAP (_.level0.field1.level1$field.1.level2$field.1 AS level2$field.1)�digraph G {
37+
fontname=courier;
38+
rankdir=BT;
39+
splines=polyline;
40+
1 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Value Computation</td></tr><tr><td align="left">MAP (q49.level0.field1.level1$field.1.level2$field.1 AS level2$field.1)</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS level2$field.1)" ];
41+
2 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Predicate Filter</td></tr><tr><td align="left">WHERE q45.ID EQUALS promote(@c12 AS LONG)</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS ID, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.1, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.2 AS level0.field1)" ];
42+
3 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Covering Index Scan</td></tr><tr><td align="left">range: &lt;-∞, ∞&gt;</td></tr></table>> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS ID, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.1, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.2 AS level0.field1)" ];
43+
4 [ label=<<table border="0" cellborder="1" cellspacing="0" cellpadding="8"><tr><td align="left">Index</td></tr><tr><td align="left">foo.table$nested.idx</td></tr></table>> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS ID, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.1, LONG AS level2$field.1, LONG AS level2$field.2 AS level1$field.2 AS level0.field1)" ];
44+
3 -> 2 [ label=<&nbsp;q45> label="q45" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
45+
4 -> 3 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
46+
2 -> 1 [ label=<&nbsp;q49> label="q49" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ];
47+
}�
248
=
349
all-tests0EXPLAIN select "foo.tableA".* from "foo.tableA";�
450
�ϊ�5j ���&(10ĕ�8-@�COVERING(foo.tableA.idx <,> -> [foo__2tableA__2A1: KEY[0], foo__2tableA__2A2: KEY[1], foo__2tableA__2A3: KEY[2]]) | MAP (_.foo.tableA.A1 AS foo.tableA.A1, _.foo.tableA.A2 AS foo.tableA.A2, _.foo.tableA.A3 AS foo.tableA.A3)� digraph G {

yaml-tests/src/test/resources/valid-identifiers.metrics.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
11
all-tests:
2+
- query: EXPLAIN select B."level2$array.field.1" from "foo.table$nested.repeated"
3+
as t, (select A."level2$array.field.1" from t."level0.field1" as Y, (select
4+
"level2$array.field.1" from Y."level1$field.1") as A) as B where id = 1
5+
explain: SCAN(<,>) | TFILTER foo__2table__1nested__2repeated | FILTER _.ID EQUALS
6+
promote(@c38 AS LONG) | FLATMAP q0 -> { EXPLODE q0.level0.field1 | FLATMAP
7+
q1 -> { EXPLODE q1.level1$field.1 AS q2 RETURN q2 } AS q2 RETURN (q2.level2$array.field.1
8+
AS level2$array.field.1) }
9+
task_count: 621
10+
task_total_time_ms: 196
11+
transform_count: 243
12+
transform_time_ms: 141
13+
transform_yield_count: 43
14+
insert_time_ms: 16
15+
insert_new_count: 60
16+
insert_reused_count: 7
17+
- query: EXPLAIN select "level0.field1"."level1$field.1"."level2$field.1" from "foo.table$nested"
18+
where id = 1
19+
explain: 'COVERING(foo.table$nested.idx <,> -> [ID: KEY[2], level0__2field1: [level1__1field__21:
20+
[level2__1field__21: KEY[0]]]]) | FILTER _.ID EQUALS promote(@c12 AS LONG)
21+
| MAP (_.level0.field1.level1$field.1.level2$field.1 AS level2$field.1)'
22+
task_count: 474
23+
task_total_time_ms: 196
24+
transform_count: 114
25+
transform_time_ms: 143
26+
transform_yield_count: 33
27+
insert_time_ms: 10
28+
insert_new_count: 52
29+
insert_reused_count: 6
230
- query: EXPLAIN select "foo.tableA".* from "foo.tableA";
331
explain: 'COVERING(foo.tableA.idx <,> -> [foo__2tableA__2A1: KEY[0], foo__2tableA__2A2:
432
KEY[1], foo__2tableA__2A3: KEY[2]]) | MAP (_.foo.tableA.A1 AS foo.tableA.A1,

yaml-tests/src/test/resources/valid-identifiers.yamsql

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,17 @@ options:
2121
supported_version: 4.8.13.0
2222
---
2323
schema_template:
24-
CREATE TYPE AS STRUCT "foo.struct"(S1 bigint, S2 bigint)
24+
create type as struct "nested.type$level2" ("level2$field.1" bigint, "level2$field.2" bigint)
25+
create type as struct "nested.type$level1" ("level1$field.1" "nested.type$level2", "level1$field.2" "nested.type$level2")
26+
create table "foo.table$nested" (id bigint, "level0.field1" "nested.type$level1", primary key(id))
27+
create index "foo.table$nested.idx" as select "level0.field1"."level1$field.1"."level2$field.1" from "foo.table$nested" order by "level0.field1"."level1$field.1"."level2$field.1"
28+
29+
create type as struct "nested.repeated.type$level2" ("level2$array.field.1" bigint, "level2$field.2" bigint)
30+
create type as struct "nested.repeated.type$level1" ("level1$field.1" "nested.repeated.type$level2" array, "level1$field.2" "nested.type$level2")
31+
create table "foo.table$nested.repeated" (id bigint, "level0.field1" "nested.repeated.type$level1" array, primary key(id))
32+
create index "foo.table$nested.repeated.idx" as select B."level2$array.field.1" from "foo.table$nested.repeated" as t, (select A."level2$array.field.1" from t."level0.field1" as Y, (select "level2$array.field.1" from Y."level1$field.1") A) B
33+
34+
create type as struct "foo.struct"(S1 bigint, S2 bigint)
2535
create table "foo.tableA"("foo.tableA.A1" bigint, "foo.tableA.A2" bigint, "foo.tableA.A3" bigint, primary key("foo.tableA.A1"))
2636
create index "foo.tableA.idx" as select "foo.tableA.A1", "foo.tableA.A2", "foo.tableA.A3" FROM "foo.tableA" order by "foo.tableA.A1", "foo.tableA.A2", "foo.tableA.A3"
2737
create index "foo.tableA.idx2" as select sum("foo.tableA.A1") FROM "foo.tableA" group by "foo.tableA.A2"
@@ -71,39 +81,46 @@ schema_template:
7181
---
7282
setup:
7383
steps:
74-
- query: INSERT INTO "foo.tableA"
75-
VALUES (1, 10, 1),
84+
- query: insert into "foo.table$nested"
85+
values (1, ((10, 20), (30, 40))),
86+
(2, ((100, 200), (300, 400))),
87+
(3, ((1000, 2000), (3000, 4000)))
88+
- query: insert into "foo.table$nested.repeated"
89+
values (1, [([(10, 20), (30, 40), (50, 60)], (400, 500))]),
90+
(2, [([(100, 200), (300, 400), (500, 600)], (900, 1000))])
91+
- query: insert into "foo.tableA"
92+
values (1, 10, 1),
7693
(2, 10, 2)
77-
- query: INSERT INTO "foo.tableB"
78-
VALUES (1, 20, (4, 40)),
94+
- query: insert into "foo.tableB"
95+
values (1, 20, (4, 40)),
7996
(2, 20, (5, 50)),
8097
(3, 20, (6, 60))
8198

82-
- query: INSERT INTO "foo.tableE"
83-
VALUES (1, [1, 2, 3], (4, 40)),
99+
- query: insert into "foo.tableE"
100+
values (1, [1, 2, 3], (4, 40)),
84101
(2, [2, 3, 4], (5, 50)),
85102
(3, [3, 4, 5], (6, 60))
86-
- query: INSERT INTO "foo$tableC"
87-
VALUES (1, 20, 1),
103+
- query: insert into "foo$tableC"
104+
values (1, 20, 1),
88105
(2, 20, 2),
89106
(3, 20, 3),
90107
(4, 20, 4)
91-
- query: INSERT INTO "__foo__tableD"
92-
VALUES (1, 20, 1),
108+
- query: insert into "__foo__tableD"
109+
values (1, 20, 1),
93110
(2, 20, 2),
94111
(3, 20, 3),
95112
(4, 20, 4)
96-
- query: INSERT INTO "my$adjacency$list"
97-
VALUES (1, -1),
113+
- query: insert into "my$adjacency$list"
114+
values (1, -1),
98115
(2, 1),
99116
(3, 1),
100117
(4, 1),
101118
(5, 2),
102119
(6, 2)
103120

104121
# Note: the insert below flips the order of the enum__1 and enum__2 columns
105-
- query: INSERT INTO "foo.enum.type"("enum_type.id", "enum_type.enum__2", "enum_type.enum__1")
106-
VALUES ( 1, 'B$C', 'A'),
122+
- query: insert into "foo.enum.type"("enum_type.id", "enum_type.enum__2", "enum_type.enum__1")
123+
values ( 1, 'B$C', 'A'),
107124
( 2, 'B$C', 'B$C'),
108125
( 3, 'B$C', 'C.D'),
109126
( 4, 'B$C', 'E__F'),
@@ -120,13 +137,21 @@ test_block:
120137
preset: single_repetition_ordered
121138
tests:
122139
-
123-
- query: INSERT INTO "foo.tableA" ("foo.tableA.A3", "foo.tableA.A1", "foo.tableA.A2") VALUES (3, 3, 10)
140+
- query: insert into "foo.tableA" ("foo.tableA.A3", "foo.tableA.A1", "foo.tableA.A2") values (3, 3, 10)
124141
- count: 1
125142
---
126143
test_block:
127144
name: all-tests
128145
preset: single_repetition_ordered
129146
tests:
147+
- # select from nested repeated table
148+
- query: select B."level2$array.field.1" from "foo.table$nested.repeated" as t, (select A."level2$array.field.1" from t."level0.field1" as Y, (select "level2$array.field.1" from Y."level1$field.1") as A) as B where id = 1
149+
- explain: "SCAN(<,>) | TFILTER foo__2table__1nested__2repeated | FILTER _.ID EQUALS promote(@c38 AS LONG) | FLATMAP q0 -> { EXPLODE q0.level0.field1 | FLATMAP q1 -> { EXPLODE q1.level1$field.1 AS q2 RETURN q2 } AS q2 RETURN (q2.level2$array.field.1 AS level2$array.field.1) }"
150+
- result: [{10}, {30}, {50}]
151+
- # select from nested table
152+
- query: select "level0.field1"."level1$field.1"."level2$field.1" from "foo.table$nested" where id = 1
153+
- explain: "COVERING(foo.table$nested.idx <,> -> [ID: KEY[2], level0__2field1: [level1__1field__21: [level2__1field__21: KEY[0]]]]) | FILTER _.ID EQUALS promote(@c12 AS LONG) | MAP (_.level0.field1.level1$field.1.level2$field.1 AS level2$field.1)"
154+
- result: [{10}]
130155
-
131156
# qualified star
132157
- query: select "foo.tableA".* from "foo.tableA";
@@ -507,26 +532,26 @@ setup:
507532
setup:
508533
connect: "jdbc:embed:/FRL/IDENTIFIERS_PROTO_YAML?schema=TEST"
509534
steps:
510-
- query: INSERT INTO T1
511-
VALUES (1, 10, 1),
535+
- query: insert into T1
536+
values (1, 10, 1),
512537
(2, 10, 2),
513538
(3, 10, 3),
514539
(4, 10, 4),
515540
(5, 10, 5)
516-
- query: INSERT INTO T2
517-
VALUES (6, 10, 6),
541+
- query: insert into T2
542+
values (6, 10, 6),
518543
(7, 10, 7),
519544
(8, 10, 8),
520545
(9, 10, 9),
521546
(10, 10, 10)
522-
- query: INSERT INTO "__T3"
523-
VALUES (11, 10, 11, null),
547+
- query: insert into "__T3"
548+
values (11, 10, 11, null),
524549
(12, 10, 12, 'T3.E.A'),
525550
(13, 10, 13, 'T3.E.B'),
526551
(14, 10, 14, 'T3.E.C'),
527552
(15, 10, 15, 'T3.E.A')
528-
- query: INSERT INTO T4
529-
VALUES (16, (11, 16), 10, 16),
553+
- query: insert into T4
554+
values (16, (11, 16), 10, 16),
530555
(17, (11, 17), 10, 17),
531556
(18, (11, 18), 10, 18),
532557
(19, (11, 19), 10, 19),

0 commit comments

Comments
 (0)