@@ -28,14 +28,6 @@ Y_UNIT_TEST_SUITE(KqpDecimalColumnShard) {
28
28
public:
29
29
DecimalTestCase ()
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 () {
@@ -50,33 +42,155 @@ Y_UNIT_TEST_SUITE(KqpDecimalColumnShard) {
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 ) {
95
+ Y_UNIT_TEST (TestSimpleQueries ) {
61
96
DecimalTestCase 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
+ DecimalTestCase tester;
106
+ tester.PrepareTable1 ();
77
107
78
- tester.CheckQuery (" SELECT * FROM `/Root/ColumnTableTest` order by id" ,
108
+ tester.CheckQuery (" SELECT * FROM `/Root/Table1` WHERE dec == cast(\" 3.14\" as decimal(22,9))" , " [[[\" 3.14\" ];1;[4]]]" );
109
+
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
+ DecimalTestCase 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
+ DecimalTestCase 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
+ DecimalTestCase 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
+ DecimalTestCase 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
+ DecimalTestCase 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
+ DecimalTestCase 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
+ DecimalTestCase 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
0 commit comments