Skip to content

Commit 055625b

Browse files
committed
Add more tests
1 parent 3f0db88 commit 055625b

File tree

4 files changed

+149
-30
lines changed

4 files changed

+149
-30
lines changed

.github/config/muted_ya.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ ydb/tests/functional/ydb_cli test_ydb_impex.py.TestImpex.test_big_dataset*
104104
ydb/tests/tools/pq_read/test test_timeout.py.TestTimeout.test_timeout
105105
ydb/core/kqp/ut/query KqpStats.SysViewClientLost
106106
ydb/core/kqp/ut/olap KqpOlap.ManyColumnShards
107+
ydb/core/kqp/ut/olap KqpDecimalColumnShard.TestFilterCompare
108+
ydb/core/kqp/ut/olap KqpDecimalColumnShard.TestAggregation
107109
ydb/public/sdk/cpp/client/ydb_topic/ut TxUsage.WriteToTopic_Invalid_Session
108110
ydb/library/actors/interconnect/ut_huge_cluster HugeCluster.AllToAll
109111
ydb/tests/functional/hive test_drain.py.TestHive.test_drain_on_stop

ydb/core/kqp/query_compiler/kqp_olap_compiler.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,8 @@ ui64 ConvertValueToColumn(const TCoDataCtor& value, TKqpOlapCompileContext& ctx)
327327
ssaValue->MutableConstant()->SetTimestamp(FromString<ui64>(nodeValue));
328328
} else if (value.Maybe<TCoDate>()) {
329329
ssaValue->MutableConstant()->SetTimestamp(FromString<ui16>(nodeValue));
330+
// } else if (value.Maybe<TCoDecimal>()) {
331+
// ssaValue->MutableConstant()->SetBytes(TString(nodeValue));
330332
} else {
331333
YQL_ENSURE(false, "Unsupported content: " << value.Ref().Content());
332334
}

ydb/core/kqp/ut/olap/decimal_ut.cpp

Lines changed: 137 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,6 @@ Y_UNIT_TEST_SUITE(KqpDecimalColumnShard) {
2828
public:
2929
DecimalTestCase()
3030
: 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);
3931
}
4032

4133
TTestHelper::TUpdatesBuilder Inserter() {
@@ -50,33 +42,155 @@ Y_UNIT_TEST_SUITE(KqpDecimalColumnShard) {
5042
TestHelper.ReadData(query, expected);
5143
}
5244

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+
5388
private:
5489
TTestHelper TestHelper;
5590

5691
TVector<TTestHelper::TColumnSchema> Schema;
5792
TTestHelper::TColumnTable TestTable;
5893
};
5994

60-
Y_UNIT_TEST(SimpleQueries) {
95+
Y_UNIT_TEST(TestSimpleQueries) {
6196
DecimalTestCase tester;
97+
tester.PrepareTable1();
6298

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+
}
70103

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();
77107

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",
79140
"[[[\"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"]]])");
80194
}
81195
}
82196

ydb/core/tx/columnshard/test_helper/columnshard_ut_common.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
#pragma once
22

3-
#include <ydb/core/tx/columnshard/blob_cache.h>
4-
#include <ydb/core/tx/columnshard/common/snapshot.h>
5-
63
#include <ydb/core/formats/arrow/arrow_batch_builder.h>
7-
#include <ydb/core/tx/columnshard/test_helper/helper.h>
4+
#include <ydb/core/protos/tx_columnshard.pb.h>
85
#include <ydb/core/scheme/scheme_tabledefs.h>
96
#include <ydb/core/scheme/scheme_types_proto.h>
107
#include <ydb/core/testlib/tablet_helpers.h>
118
#include <ydb/core/testlib/test_client.h>
12-
#include <ydb/core/protos/tx_columnshard.pb.h>
9+
#include <ydb/core/tx/columnshard/blob_cache.h>
10+
#include <ydb/core/tx/columnshard/common/snapshot.h>
11+
#include <ydb/core/tx/columnshard/test_helper/helper.h>
12+
#include <ydb/core/tx/data_events/common/modification_type.h>
13+
#include <ydb/core/tx/long_tx_service/public/types.h>
14+
15+
#include <ydb/public/sdk/cpp/client/ydb_value/value.h>
1316
#include <ydb/services/metadata/abstract/fetcher.h>
1417

1518
#include <library/cpp/testing/unittest/registar.h>
16-
#include <ydb/core/tx/long_tx_service/public/types.h>
17-
#include <ydb/core/tx/data_events/common/modification_type.h>
1819

1920
namespace NKikimr::NOlap {
2021
struct TIndexInfo;

0 commit comments

Comments
 (0)