@@ -609,6 +609,7 @@ Y_UNIT_TEST_SUITE(KqpParams) {
609
609
.AddParam (" $ParamDouble" ).Double (40.5 ).Build ()
610
610
.AddParam (" $ParamDecimal" ).Decimal (TDecimalValue (" 50.5" , 22 , 9 )).Build ()
611
611
.AddParam (" $ParamDecimal35" ).Decimal (TDecimalValue (" 655555555555555.5" , 35 , 10 )).Build ()
612
+ .AddParam (" $ParamDecimal0" ).Decimal (TDecimalValue (" 9" , 1 , 0 )).Build ()
612
613
.AddParam (" $ParamDyNumber" ).DyNumber (" 60.5" ).Build ()
613
614
.AddParam (" $ParamString" ).String (" StringValue" ).Build ()
614
615
.AddParam (" $ParamUtf8" ).Utf8 (" Utf8Value" ).Build ()
@@ -670,6 +671,7 @@ Y_UNIT_TEST_SUITE(KqpParams) {
670
671
DECLARE $ParamDouble AS Double;
671
672
DECLARE $ParamDecimal AS Decimal(22, 9);
672
673
DECLARE $ParamDecimal35 AS Decimal(35, 10);
674
+ DECLARE $ParamDecimal0 AS Decimal(1, 0);
673
675
DECLARE $ParamDyNumber AS DyNumber;
674
676
DECLARE $ParamString AS String;
675
677
DECLARE $ParamUtf8 AS Utf8;
@@ -704,6 +706,7 @@ Y_UNIT_TEST_SUITE(KqpParams) {
704
706
$ParamDouble AS ValueDouble,
705
707
$ParamDecimal AS ValueDecimal,
706
708
$ParamDecimal35 AS ValueDecimal35,
709
+ $ParamDecimal0 AS ValueDecimal0,
707
710
$ParamDyNumber AS ValueDyNumber,
708
711
$ParamString AS ValueString,
709
712
$ParamUtf8 AS ValueUtf8,
@@ -729,13 +732,13 @@ Y_UNIT_TEST_SUITE(KqpParams) {
729
732
730
733
auto actual = ReformatYson (FormatResultSetYson (result.GetResultSet (0 )));
731
734
auto expected1 = ReformatYson (R"( [[
732
- %true;-5;5u;-8;8u;-10;10u;-20;20u;30.5;40.5;"50.5";"655555555555555.5";".605e2";"StringValue";"Utf8Value";"[{Value=50}]";
735
+ %true;-5;5u;-8;8u;-10;10u;-20;20u;30.5;40.5;"50.5";"655555555555555.5";"9";" .605e2";"StringValue";"Utf8Value";"[{Value=50}]";
733
736
"[{\"Value\":60}]";"[{\"Value\":70}]";18271u;1578755093u;1578863917000000u;3600;"2022-03-14,GMT";
734
737
"2022-03-14T00:00:00,GMT";"2022-03-14T00:00:00.123000,GMT";["Opt"];["Tuple0";1];[17u;19u];[];["Paul";-5];
735
738
[["Key2";20u];["Key1";10u]]
736
739
]])" );
737
740
auto expected2 = ReformatYson (R"( [[
738
- %true;-5;5u;-8;8u;-10;10u;-20;20u;30.5;40.5;"50.5";"655555555555555.5";".605e2";"StringValue";"Utf8Value";"[{Value=50}]";
741
+ %true;-5;5u;-8;8u;-10;10u;-20;20u;30.5;40.5;"50.5";"655555555555555.5";"9";" .605e2";"StringValue";"Utf8Value";"[{Value=50}]";
739
742
"[{\"Value\":60}]";"[{\"Value\":70}]";18271u;1578755093u;1578863917000000u;3600;"2022-03-14,GMT";
740
743
"2022-03-14T00:00:00,GMT";"2022-03-14T00:00:00.123000,GMT";["Opt"];["Tuple0";1];[17u;19u];[];["Paul";-5];
741
744
[["Key1";10u];["Key2";20u]]
@@ -793,6 +796,7 @@ Y_UNIT_TEST_SUITE(KqpParams) {
793
796
--!syntax_v1
794
797
CREATE TABLE Table (
795
798
Key Int32,
799
+ Value1 Decimal(1,0),
796
800
Value22 Decimal(22,9),
797
801
Value35 Decimal(35,10),
798
802
PRIMARY KEY (Key)
@@ -814,18 +818,19 @@ Y_UNIT_TEST_SUITE(KqpParams) {
814
818
auto execSelectQuery = [&] (const TString& query, const NYdb::TParams& params) -> std::tuple<NYdb::EStatus, TString, TResultSet> {
815
819
if (QueryService) {
816
820
auto result = queryClient.ExecuteQuery (query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx (), params).ExtractValueSync ();
817
- return {result.GetStatus (), result.GetIssues ().ToString (), result.GetResultSet (0 )};
821
+ return {result.GetStatus (), result.GetIssues ().ToString (), result.GetResultSets (). size () ? result. GetResultSet (0 ) : TResultSet ({} )};
818
822
}
819
823
else {
820
824
auto result = session.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx (), params).ExtractValueSync ();
821
- return {result.GetStatus (), result.GetIssues ().ToString (), result.GetResultSet (0 )};
825
+ return {result.GetStatus (), result.GetIssues ().ToString (), result.GetResultSets (). size () ? result. GetResultSet (0 ) : TResultSet ({} )};
822
826
}
823
827
};
824
828
825
829
// Good case
826
830
{
827
831
auto upsertParams = tableClient.GetParamsBuilder ()
828
832
.AddParam (" $key" ).Int32 (1 ).Build ()
833
+ .AddParam (" $value1" ).Decimal (TDecimalValue (" 9" , 1 , 0 )).Build ()
829
834
.AddParam (" $value22" ).Decimal (TDecimalValue (" 123.321" , 22 , 9 )).Build ()
830
835
.AddParam (" $value35" ).Decimal (TDecimalValue (" 555555555555555.1234567890" , 35 , 10 )).Build ()
831
836
.Build ();
@@ -834,26 +839,28 @@ Y_UNIT_TEST_SUITE(KqpParams) {
834
839
{
835
840
auto [status, issues] = execUpsertQuery (Q1_ (R"(
836
841
DECLARE $key AS Int32;
842
+ DECLARE $value1 AS Decimal(1,0);
837
843
DECLARE $value22 AS Decimal(22,9);
838
844
DECLARE $value35 AS Decimal(35,10);
839
845
840
- UPSERT INTO Table (Key, Value22, Value35) VALUES
841
- ($key, $value22, $value35);
846
+ UPSERT INTO Table (Key, Value1, Value22, Value35) VALUES
847
+ ($key, $value1, $ value22, $value35);
842
848
)" ), upsertParams);
843
849
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
844
850
}
845
851
// No upsert parameters is declared
846
852
{
847
853
auto [status, issues] = execUpsertQuery (Q1_ (R"(
848
- UPSERT INTO Table (Key, Value22, Value35) VALUES
849
- ($key, $value22, $value35);
854
+ UPSERT INTO Table (Key, Value1, Value22, Value35) VALUES
855
+ ($key, $value1, $ value22, $value35);
850
856
)" ), upsertParams);
851
857
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
852
858
}
853
859
854
- TString expected = R"( [[[1];["123.321"];["555555555555555.123456789"]]])" ;
860
+ TString expected = R"( [[[1];["9"];[" 123.321"];["555555555555555.123456789"]]])" ;
855
861
auto selectParams = tableClient.GetParamsBuilder ()
856
862
.AddParam (" $key" ).Int32 (1 ).Build ()
863
+ .AddParam (" $value1" ).Decimal (TDecimalValue (" 9" , 1 , 0 )).Build ()
857
864
.AddParam (" $value22" ).Decimal (TDecimalValue (" 123.321" , 22 , 9 )).Build ()
858
865
.AddParam (" $value35" ).Decimal (TDecimalValue (" 555555555555555.1234567890" , 35 , 10 )).Build ()
859
866
.Build ();
@@ -862,10 +869,11 @@ Y_UNIT_TEST_SUITE(KqpParams) {
862
869
{
863
870
auto [status, issues, resultSet] = execSelectQuery (Q1_ (R"(
864
871
DECLARE $key AS Int32;
872
+ DECLARE $value1 AS Decimal(1,0);
865
873
DECLARE $value22 AS Decimal(22,9);
866
874
DECLARE $value35 AS Decimal(35,10);
867
875
868
- SELECT * FROM Table WHERE Key = $key AND Value22 = $value22 AND Value35 = $value35;
876
+ SELECT * FROM Table WHERE Key = $key AND Value1 = $value1 AND Value22 = $value22 AND Value35 = $value35;
869
877
)" ), selectParams);
870
878
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
871
879
CompareYson (expected, FormatResultSetYson (resultSet));
@@ -874,13 +882,27 @@ Y_UNIT_TEST_SUITE(KqpParams) {
874
882
// No select parameters is declared
875
883
{
876
884
auto [status, issues, resultSet] = execSelectQuery (Q1_ (R"(
877
- SELECT * FROM Table WHERE Key = $key AND Value22 = $value22 AND Value35 = $value35;
885
+ SELECT * FROM Table WHERE Key = $key AND Value1 = $value1 AND Value22 = $value22 AND Value35 = $value35;
878
886
)" ), selectParams);
879
887
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
880
888
CompareYson (expected, FormatResultSetYson (resultSet));
881
889
}
882
890
}
883
891
892
+ // Declare wrong decimal params
893
+ {
894
+ auto params = tableClient.GetParamsBuilder ()
895
+ .AddParam (" $value99" ).Decimal (TDecimalValue (" 0" , 99 , 99 )).Build ()
896
+ .Build ();
897
+
898
+ auto [status, issues, _] = execSelectQuery (Q1_ (R"(
899
+ DECLARE $value99 AS Decimal(99,99);
900
+ SELECT $value99 AS value99;
901
+ )" ), params);
902
+ UNIT_ASSERT_VALUES_EQUAL (status, EStatus::GENERIC_ERROR);
903
+ UNIT_ASSERT_STRING_CONTAINS (issues, " Invalid decimal precision: 99" );
904
+ }
905
+
884
906
// Declare decimal params mismatch
885
907
{
886
908
auto upsertParams = tableClient.GetParamsBuilder ()
@@ -940,35 +962,39 @@ Y_UNIT_TEST_SUITE(KqpParams) {
940
962
{
941
963
auto upsertParams = tableClient.GetParamsBuilder ()
942
964
.AddParam (" $key" ).Int32 (1001 ).Build ()
965
+ .AddParam (" $value1" ).Decimal (TDecimalValue (" 10" , 1 , 0 )).Build ()
943
966
.AddParam (" $value22" ).Decimal (TDecimalValue (" 12345678901234567890.1234567891" , 22 , 9 )).Build ()
944
967
.AddParam (" $value35" ).Decimal (TDecimalValue (" 1234567890123456789012345678901234567890.1234567891" , 35 , 10 )).Build ()
945
968
.Build ();
946
969
947
970
auto [status, issues] = execUpsertQuery (Q1_ (R"(
948
971
DECLARE $key AS Int32;
972
+ DECLARE $value1 AS Decimal(1,0);
949
973
DECLARE $value22 AS Decimal(22,9);
950
974
DECLARE $value35 AS Decimal(35,10);
951
975
952
- UPSERT INTO Table (Key, Value22, Value35) VALUES
953
- ($key, $value22, $value35);
976
+ UPSERT INTO Table (Key, Value1, Value22, Value35) VALUES
977
+ ($key, $value1, $ value22, $value35);
954
978
)" ), upsertParams);
955
979
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
956
980
}
957
981
// Good case: Upsert inf Decimal
958
982
{
959
983
auto upsertParams = tableClient.GetParamsBuilder ()
960
984
.AddParam (" $key" ).Int32 (1002 ).Build ()
985
+ .AddParam (" $value1" ).Decimal (TDecimalValue (" inf" , 1 , 0 )).Build ()
961
986
.AddParam (" $value22" ).Decimal (TDecimalValue (" inf" , 22 , 9 )).Build ()
962
987
.AddParam (" $value35" ).Decimal (TDecimalValue (" inf" , 35 , 10 )).Build ()
963
988
.Build ();
964
989
965
990
auto [status, issues] = execUpsertQuery (Q1_ (R"(
966
991
DECLARE $key AS Int32;
992
+ DECLARE $value1 AS Decimal(1,0);
967
993
DECLARE $value22 AS Decimal(22,9);
968
994
DECLARE $value35 AS Decimal(35,10);
969
995
970
- UPSERT INTO Table (Key, Value22, Value35) VALUES
971
- ($key, $value22, $value35);
996
+ UPSERT INTO Table (Key, Value1, Value22, Value35) VALUES
997
+ ($key, $value1, $ value22, $value35);
972
998
)" ), upsertParams);
973
999
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
974
1000
}
@@ -980,8 +1006,8 @@ Y_UNIT_TEST_SUITE(KqpParams) {
980
1006
)" ), emptyParams);
981
1007
UNIT_ASSERT_VALUES_EQUAL_C (status, EStatus::SUCCESS, issues);
982
1008
TString expected = R"( [
983
- [[1001];["inf"];["inf"]];
984
- [[1002];["inf"];["inf"]]
1009
+ [[1001];["inf"];["inf"];["inf"] ];
1010
+ [[1002];["inf"];["inf"];["inf"] ]
985
1011
])" ;
986
1012
TString actual = FormatResultSetYson (resultSet);
987
1013
CompareYson (expected, actual);
0 commit comments