Browse Source

KIKIMR-19982: no limits for generic query

ns-vasilev 1 year ago
parent
commit
7e1bf1fbfe

+ 1 - 1
ydb/core/kqp/provider/yql_kikimr_datasource.cpp

@@ -735,7 +735,7 @@ public:
         IOptimizationContext& optCtx) override
     {
         auto queryType = SessionCtx->Query().Type;
-        if (queryType == EKikimrQueryType::Scan) {
+        if (queryType == EKikimrQueryType::Scan || queryType == EKikimrQueryType::Query) {
             return source;
         }
 

+ 40 - 0
ydb/core/kqp/ut/query/kqp_query_ut.cpp

@@ -1117,6 +1117,46 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
         UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 6);
     }
 
+    Y_UNIT_TEST(GenericQueryNoRowsLimit) {
+        auto setting = NKikimrKqp::TKqpSetting();
+        setting.SetName("_ResultRowsLimit");
+        setting.SetValue("5");
+
+        TKikimrRunner kikimr({setting});
+        auto db = kikimr.GetQueryClient();
+
+        auto result = db.ExecuteQuery(Q_(R"(
+            SELECT * FROM `/Root/EightShard` WHERE Text = "Value2";
+        )"), NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+        UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+        UNIT_ASSERT(!result.GetResultSet(0).Truncated());
+        UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 8);
+    }
+
+    Y_UNIT_TEST(GenericQueryNoRowsLimitLotsOfRows) {
+        TKikimrRunner kikimr;
+        auto db = kikimr.GetQueryClient();
+
+        CreateLargeTable(kikimr, 1000, 10, 10, 5000, 10);
+
+        auto result = db.ExecuteQuery(Q_(R"(
+            SELECT * FROM `/Root/LargeTable`;
+        )"), NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+        UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+        UNIT_ASSERT(!result.GetResultSet(0).Truncated());
+        UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 10000);
+
+        result = db.ExecuteQuery(Q_(R"(
+            SELECT * FROM `/Root/LargeTable` LIMIT 5000;
+        )"), NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+        UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+        UNIT_ASSERT(!result.GetResultSet(0).Truncated());
+        UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 5000);
+    }
+
     Y_UNIT_TEST(NoEvaluate) {
         TKikimrRunner kikimr;
         auto db = kikimr.GetTableClient();