@@ -24,61 +24,175 @@ using namespace NYdb;
24
24
using namespace NYdb ::NTable;
25
25
26
26
Y_UNIT_TEST_SUITE (KqpDecimalColumnShard) {
27
- class DecimalTestCase {
27
+ class TDecimalTestCase {
28
28
public:
29
- DecimalTestCase ()
29
+ TDecimalTestCase ()
30
30
: TestHelper(TKikimrSettings().SetWithSampleTables(false )) {
31
- Schema = {
32
- TTestHelper::TColumnSchema ().SetName (" id" ).SetType (NScheme::NTypeIds::Int32).SetNullable (false ),
33
- TTestHelper::TColumnSchema ().SetName (" int" ).SetType (NScheme::NTypeIds::Int64),
34
- TTestHelper::TColumnSchema ().SetName (" dec" ).SetType (NScheme::NTypeIds::Decimal),
35
- };
36
-
37
- TestTable.SetName (" /Root/ColumnTableTest" ).SetPrimaryKey ({ " id" }).SetSharding ({ " id" }).SetSchema (Schema);
38
- TestHelper.CreateTable (TestTable);
39
31
}
40
32
41
33
TTestHelper::TUpdatesBuilder Inserter () {
42
34
return TTestHelper::TUpdatesBuilder (TestTable.GetArrowSchema (Schema));
43
35
}
44
36
45
- void Upsert (TTestHelper::TUpdatesBuilder & inserter) {
37
+ void Upsert (TTestHelper::TUpdatesBuilder& inserter) {
46
38
TestHelper.BulkUpsert (TestTable, inserter);
47
39
}
48
40
49
41
void CheckQuery (const TString &query, const TString &expected) {
50
42
TestHelper.ReadData (query, expected);
51
43
}
52
44
45
+ void PrepareTable1 () {
46
+ Schema = {
47
+ TTestHelper::TColumnSchema ().SetName (" id" ).SetType (NScheme::NTypeIds::Int32).SetNullable (false ),
48
+ TTestHelper::TColumnSchema ().SetName (" int" ).SetType (NScheme::NTypeIds::Int64),
49
+ TTestHelper::TColumnSchema ().SetName (" dec" ).SetType (NScheme::NTypeIds::Decimal),
50
+ };
51
+ TestTable.SetName (" /Root/Table1" ).SetPrimaryKey ({ " id" }).SetSharding ({ " id" }).SetSchema (Schema);
52
+ TestHelper.CreateTable (TestTable);
53
+
54
+ {
55
+ TTestHelper::TUpdatesBuilder inserter = Inserter ();
56
+ inserter.AddRow ().Add (1 ).Add (4 ).Add (TDecimalValue (" 3.14" ));
57
+ inserter.AddRow ().Add (2 ).Add (3 ).Add (TDecimalValue (" 8.16" ));
58
+ Upsert (inserter);
59
+ }
60
+ {
61
+ TTestHelper::TUpdatesBuilder inserter = Inserter ();
62
+ inserter.AddRow ().Add (4 ).Add (1 ).Add (TDecimalValue (" 12.46" ));
63
+ inserter.AddRow ().Add (3 ).Add (2 ).Add (TDecimalValue (" 8.492" ));
64
+
65
+ Upsert (inserter);
66
+ }
67
+ }
68
+
69
+ void PrepareTable2 () {
70
+ Schema = {
71
+ TTestHelper::TColumnSchema ().SetName (" id" ).SetType (NScheme::NTypeIds::Int32).SetNullable (false ),
72
+ TTestHelper::TColumnSchema ().SetName (" table1_id" ).SetType (NScheme::NTypeIds::Int64),
73
+ TTestHelper::TColumnSchema ().SetName (" dec" ).SetType (NScheme::NTypeIds::Decimal),
74
+ };
75
+ TestTable.SetName (" /Root/Table2" ).SetPrimaryKey ({ " id" }).SetSharding ({ " id" }).SetSchema (Schema);
76
+ TestHelper.CreateTable (TestTable);
77
+
78
+ {
79
+ TTestHelper::TUpdatesBuilder inserter = Inserter ();
80
+ inserter.AddRow ().Add (1 ).Add (1 ).Add (TDecimalValue (" 12.46" ));
81
+ inserter.AddRow ().Add (2 ).Add (1 ).Add (TDecimalValue (" 8.16" ));
82
+ inserter.AddRow ().Add (3 ).Add (2 ).Add (TDecimalValue (" 12.46" ));
83
+ inserter.AddRow ().Add (4 ).Add (2 ).Add (TDecimalValue (" 8.16" ));
84
+ Upsert (inserter);
85
+ }
86
+ }
87
+
53
88
private:
54
89
TTestHelper TestHelper;
55
90
56
91
TVector<TTestHelper::TColumnSchema> Schema;
57
92
TTestHelper::TColumnTable TestTable;
58
93
};
59
94
60
- Y_UNIT_TEST (SimpleQueries) {
61
- DecimalTestCase tester;
95
+ Y_UNIT_TEST (TestSimpleQueries) {
96
+ TDecimalTestCase tester;
97
+ tester.PrepareTable1 ();
62
98
63
- {
64
- TTestHelper::TUpdatesBuilder inserter = tester.Inserter ();
65
- inserter.AddRow ().Add (1 ).Add (4 ).Add (TDecimalValue (" 3.14" ));
66
- inserter.AddRow ().Add (2 ).Add (3 ).Add (TDecimalValue (" 8.16" ));
67
- tester.Upsert (inserter);
68
- }
69
- tester.CheckQuery (" SELECT * FROM `/Root/ColumnTableTest` WHERE id=1" , " [[[\" 3.14\" ];1;[4]]]" );
99
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE id=1" , " [[[\" 3.14\" ];1;[4]]]" );
100
+ tester.CheckQuery (
101
+ " SELECT * FROM `/Root/Table1` order by id" , " [[[\" 3.14\" ];1;[4]];[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
102
+ }
70
103
71
- {
72
- TTestHelper::TUpdatesBuilder inserter = tester.Inserter ();
73
- inserter.AddRow ().Add (3 ).Add (2 ).Add (TDecimalValue (" 8.492" ));
74
- inserter.AddRow ().Add (4 ).Add (1 ).Add (TDecimalValue (" 12.46" ));
75
- tester.Upsert (inserter);
76
- }
104
+ Y_UNIT_TEST (TestFilterEqual) {
105
+ TDecimalTestCase tester;
106
+ tester.PrepareTable1 ();
107
+
108
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec == cast(\" 3.14\" as decimal(22,9))" , " [[[\" 3.14\" ];1;[4]]]" );
77
109
78
- tester.CheckQuery (" SELECT * FROM `/Root/ColumnTableTest` order by id" ,
110
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec != cast(\" 3.14\" as decimal(22,9)) order by id" ,
111
+ " [[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
112
+ }
113
+
114
+ Y_UNIT_TEST (TestFilterNulls) {
115
+ TDecimalTestCase tester;
116
+ tester.PrepareTable1 ();
117
+
118
+ TTestHelper::TUpdatesBuilder inserter = tester.Inserter ();
119
+ inserter.AddRow ().Add (5 ).Add (5 ).AddNull ();
120
+ inserter.AddRow ().Add (6 ).Add (6 ).AddNull ();
121
+ tester.Upsert (inserter);
122
+
123
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec is NULL order by id" , " [[#;5;[5]];[#;6;[6]]]" );
124
+
125
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec is not NULL order by id" ,
126
+ " [[[\" 3.14\" ];1;[4]];[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
127
+ }
128
+
129
+ Y_UNIT_TEST (TestFilterCompare) {
130
+ TDecimalTestCase tester;
131
+ tester.PrepareTable1 ();
132
+
133
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec < cast(\" 12.46\" as decimal(22,9)) order by id" ,
134
+ " [[[\" 3.14\" ];1;[4]];[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]]]" );
135
+
136
+ tester.CheckQuery (
137
+ " SELECT * FROM `/Root/Table1` WHERE dec > cast(\" 8.16\" as decimal(22,9)) order by id" , " [[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
138
+
139
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec <= cast(\" 12.46\" as decimal(22,9)) order by id" ,
79
140
" [[[\" 3.14\" ];1;[4]];[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
141
+
142
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec >= cast(\" 8.492\" as decimal(22,9)) order by id" ,
143
+ " [[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
144
+ }
145
+
146
+ Y_UNIT_TEST (TestOrderByDecimal) {
147
+ TDecimalTestCase tester;
148
+ tester.PrepareTable1 ();
149
+
150
+ tester.CheckQuery (
151
+ " SELECT * FROM `/Root/Table1` order by dec" , " [[[\" 3.14\" ];1;[4]];[[\" 8.16\" ];2;[3]];[[\" 8.492\" ];3;[2]];[[\" 12.46\" ];4;[1]]]" );
152
+ }
153
+
154
+ Y_UNIT_TEST (TestGroupByDecimal) {
155
+ TDecimalTestCase tester;
156
+ tester.PrepareTable1 ();
157
+
158
+ TTestHelper::TUpdatesBuilder inserter = tester.Inserter ();
159
+ inserter.AddRow ().Add (5 ).Add (12 ).Add (TDecimalValue (" 8.492" ));
160
+ inserter.AddRow ().Add (6 ).Add (30 ).Add (TDecimalValue (" 12.46" ));
161
+ tester.Upsert (inserter);
162
+
163
+ tester.CheckQuery (" SELECT dec, count(*) FROM `/Root/Table1` group by dec order by dec" ,
164
+ " [[[\" 3.14\" ];1u];[[\" 8.16\" ];1u];[[\" 8.492\" ];2u];[[\" 12.46\" ];2u]]" );
165
+ }
166
+
167
+ Y_UNIT_TEST (TestAggregation) {
168
+ TDecimalTestCase tester;
169
+ tester.PrepareTable1 ();
170
+ tester.CheckQuery (" SELECT min(dec) FROM `/Root/Table1`" , " [[[\" 3.14\" ]]]" );
171
+ tester.CheckQuery (" SELECT max(dec) FROM `/Root/Table1`" , " [[[\" 12.46\" ]]]" );
172
+ tester.CheckQuery (" SELECT sum(dec) FROM `/Root/Table1`" , " [[[\" 32.252\" ]]]" );
173
+ }
174
+
175
+ Y_UNIT_TEST (TestJoinById) {
176
+ TDecimalTestCase tester;
177
+ tester.PrepareTable1 ();
178
+ tester.PrepareTable2 ();
179
+
180
+ tester.CheckQuery (
181
+ " SELECT t1.id, t1.dec, t2.dec FROM `/Root/Table1` as t1 join `/Root/Table2` as t2 on t1.id = t2.table1_id order by t1.id, t1.dec, "
182
+ " t2.dec" ,
183
+ R"( [[1;["3.14"];["8.16"]];[1;["3.14"];["12.46"]];[2;["8.16"];["8.16"]];[2;["8.16"];["12.46"]]])" );
184
+ }
185
+
186
+ Y_UNIT_TEST (TestJoinByDecimal) {
187
+ TDecimalTestCase tester;
188
+ tester.PrepareTable1 ();
189
+ tester.PrepareTable2 ();
190
+
191
+ tester.CheckQuery (
192
+ " SELECT t1.id, t2.id, t1.dec FROM `/Root/Table1` as t1 join `/Root/Table2` as t2 on t1.dec = t2.dec order by t1.id, t2.id, t1.dec" ,
193
+ R"( [[2;2;["8.16"]];[2;4;["8.16"]];[4;1;["12.46"]];[4;3;["12.46"]]])" );
80
194
}
81
195
}
82
196
83
- } // namespace NKqp
84
- } // namespace NKikimr
197
+ } // namespace NKqp
198
+ } // namespace NKikimr
0 commit comments