Skip to content

Commit

Permalink
[CBO] hints parser fixes (ydb-platform#9463)
Browse files Browse the repository at this point in the history
  • Loading branch information
pashandor789 authored and Pavel Ivanov committed Oct 14, 2024
1 parent 217b631 commit 63a1d74
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 6 deletions.
4 changes: 1 addition & 3 deletions ydb/core/kqp/opt/kqp_opt.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ struct TKqpOptimizeContext : public TSimpleRefCount<TKqpOptimizeContext> {
NYql::TOptimizerHints GetOptimizerHints() {
if (Config->OptimizerHints.Get()) {
if (!Hints) {
Hints = std::make_shared<NYql::TOptimizerHints>(
NYql::TOptimizerHints::Parse(*Config->OptimizerHints.Get())
);
Hints = std::make_shared<NYql::TOptimizerHints>(*Config->OptimizerHints.Get());
}
return *Hints;
}
Expand Down
3 changes: 2 additions & 1 deletion ydb/core/kqp/provider/yql_kikimr_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <util/generic/size_literals.h>
#include <util/string/split.h>
#include <ydb/library/yql/providers/dq/common/yql_dq_settings.h>
#include <ydb/library/yql/core/cbo/cbo_optimizer_new.h>

namespace NYql {

Expand Down Expand Up @@ -83,7 +84,7 @@ TKikimrConfiguration::TKikimrConfiguration() {
REGISTER_SETTING(*this, OptEnableOlapPushdown);
REGISTER_SETTING(*this, OptEnableOlapProvideComputeSharding);
REGISTER_SETTING(*this, OptOverrideStatistics);
REGISTER_SETTING(*this, OptimizerHints);
REGISTER_SETTING(*this, OptimizerHints).Parser([](const TString& v) { return NYql::TOptimizerHints::Parse(v); });
REGISTER_SETTING(*this, OverridePlanner);
REGISTER_SETTING(*this, UseGraceJoinCoreForMap);

Expand Down
3 changes: 2 additions & 1 deletion ydb/core/kqp/provider/yql_kikimr_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <ydb/library/yql/providers/common/config/yql_setting.h>
#include <ydb/library/yql/sql/settings/translation_settings.h>
#include <ydb/core/protos/feature_flags.pb.h>
#include <ydb/library/yql/core/cbo/cbo_optimizer_new.h>

namespace NKikimrConfig {
enum TTableServiceConfig_EIndexAutoChooseMode : int;
Expand Down Expand Up @@ -55,7 +56,7 @@ struct TKikimrSettings {
NCommon::TConfSetting<bool, false> UseGraceJoinCoreForMap;

NCommon::TConfSetting<TString, false> OptOverrideStatistics;
NCommon::TConfSetting<TString, false> OptimizerHints;
NCommon::TConfSetting<NYql::TOptimizerHints, false> OptimizerHints;

/* Disable optimizer rules */
NCommon::TConfSetting<bool, false> OptDisableTopSort;
Expand Down
19 changes: 18 additions & 1 deletion ydb/library/yql/core/cbo/cbo_hints.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ class TOptimizerHintsParser {
private:
// Expressions
void ParseError(const TString& err, i32 pos) {
Y_ENSURE(false, Sprintf("Optimizer hints parser error position:%d, msg: %s", pos, err.c_str()));
auto [line, linePos] = GetLineAndLinePosFromTextPos(pos);
Y_ENSURE(false, Sprintf("Optimizer hints parser error at [line:%d, pos:%d], msg: %s", line, linePos, err.c_str()));
}

TString Label() {
Expand Down Expand Up @@ -282,6 +283,22 @@ class TOptimizerHintsParser {
}
}

std::pair<i32, i32> GetLineAndLinePosFromTextPos(i32 pos) {
i32 Line = 0;
i32 LinePos = 0;

for (i32 i = 0; i <= pos && i < static_cast<i32>(Text.Size()); ++i) {
if (Text[i] == '\n') {
LinePos = 0;
++Line;
} else {
++LinePos;
}
}

return {Line, LinePos};
}

private:
i32 Pos;
const i32 Size;
Expand Down

0 comments on commit 63a1d74

Please sign in to comment.