Skip to content

Commit 82640d0

Browse files
XJIE6qyryq
authored andcommitted
Fix for order by limit for sys tables (ydb-platform#28224)
1 parent 7e144bc commit 82640d0

File tree

6 files changed

+24
-8
lines changed

6 files changed

+24
-8
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,17 @@ Y_UNIT_TEST_SUITE(KqpOlapSysView) {
633633

634634
auto tableClient = kikimr.GetTableClient();
635635

636+
{
637+
auto selectQuery = TString(R"(
638+
SELECT *
639+
FROM `/Root/olapStore/.sys/store_primary_index_stats`
640+
ORDER BY PathId
641+
LIMIT 10
642+
)");
643+
644+
auto rows = ExecuteScanQuery(tableClient, selectQuery);
645+
}
646+
636647
{
637648
auto selectQuery = TString(R"(
638649
SELECT *

ydb/core/tx/columnshard/engines/metadata_accessor.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@ class ITableMetadataAccessor {
2424

2525
public:
2626
ITableMetadataAccessor(const TString& tablePath);
27+
28+
virtual bool OrderByLimitAllowed() const {
29+
return true;
30+
}
2731
virtual bool NeedDuplicateFiltering() const {
2832
return true;
2933
}
3034
virtual bool NeedStalenessChecker() const {
3135
return true;
3236
}
3337
virtual ~ITableMetadataAccessor() = default;
34-
virtual TString GetOverridenScanType(const TString& defScanType) const {
35-
return defScanType;
36-
}
3738
virtual std::optional<NColumnShard::TUnifiedOptionalPathId> GetPathId() const {
3839
return std::nullopt;
3940
}

ydb/core/tx/columnshard/engines/reader/common_reader/constructor/read_metadata.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ISourcesConstructor {
2525
virtual TString DoDebugString() const = 0;
2626
bool InitCursorFlag = false;
2727
virtual void DoFillReadStats(TReadStats& /*stats*/) const {
28-
28+
2929
}
3030

3131
public:
@@ -192,6 +192,10 @@ class TReadMetadata: public TReadMetadataBase {
192192
TReadMetadata(const TReadMetadata&) = delete;
193193
TReadMetadata& operator=(const TReadMetadata&) = delete;
194194

195+
bool OrderByLimitAllowed() const {
196+
return TableMetadataAccessor->OrderByLimitAllowed() && !GetFakeSort();
197+
}
198+
195199
virtual std::vector<TNameTypeInfo> GetKeyYqlSchema() const override {
196200
return GetResultSchema()->GetIndexInfo().GetPrimaryKeyColumns();
197201
}

ydb/core/tx/columnshard/engines/reader/simple_reader/iterator/scanner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ TScanHead::TScanHead(std::unique_ptr<NCommon::ISourcesConstructor>&& sourcesCons
2929
SyncPoints.emplace_back(std::make_shared<TSyncPointResultsAggregationControl>(
3030
SourcesCollection, Context->GetSourcesAggregationScript(), Context->GetRestoreResultScript(), SyncPoints.size(), context));
3131
} else if (readMetadataContext->IsSorted()) {
32-
if (readMetadataContext->HasLimit() && !readMetadataContext->GetFakeSort()) {
32+
if (readMetadataContext->HasLimit() && readMetadataContext->OrderByLimitAllowed()) {
3333
auto collection = std::make_shared<TScanWithLimitCollection>(Context, std::move(sourcesConstructor));
3434
SourcesCollection = collection;
3535
SyncPoints.emplace_back(std::make_shared<TSyncPointLimitControl>(

ydb/core/tx/columnshard/engines/reader/simple_reader/iterator/sys_view/abstract/metadata.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class TAccessor: public ITableMetadataAccessor {
2424
return PathId;
2525
}
2626

27-
virtual TString GetOverridenScanType(const TString& /*defScanType*/) const override {
28-
return "SIMPLE";
27+
virtual bool OrderByLimitAllowed() const override {
28+
return false;
2929
}
3030

3131
virtual bool NeedDuplicateFiltering() const override {

ydb/core/tx/columnshard/engines/reader/transaction/tx_scan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void TTxScan::Complete(const TActorContext& ctx) {
109109
return request.GetCSScanPolicy() ? request.GetCSScanPolicy() : defaultReader;
110110
}();
111111
auto constructor =
112-
NReader::IScannerConstructor::TFactory::MakeHolder(read.TableMetadataAccessor->GetOverridenScanType(scanType), context);
112+
NReader::IScannerConstructor::TFactory::MakeHolder(scanType, context);
113113
if (!constructor) {
114114
return std::unique_ptr<IScannerConstructor>();
115115
}

0 commit comments

Comments
 (0)