@@ -22,13 +22,13 @@ class TOptimizerHintsParser {
22
22
private:
23
23
void Start () {
24
24
while (Pos < Size) {
25
- auto hintType = Keyword ({" JoinOrder" , " JoinAlgo " , " Card " });
26
- if (hintType == " JoinOrder" ) {
27
- JoinOrder ();
28
- } else if (hintType == " JoinAlgo " ) {
29
- JoinAlgo ();
30
- } else if (hintType == " Card " ){
31
- Card ();
25
+ auto hintType = Keyword ({" JoinOrder" , " Leading " , " JoinType " , " Rows " });
26
+ if (hintType == " JoinOrder" || hintType == " Leading " ) {
27
+ JoinOrder (hintType == " Leading " );
28
+ } else if (hintType == " JoinType " ) {
29
+ JoinType ();
30
+ } else if (hintType == " Rows " ){
31
+ Rows ();
32
32
} else {
33
33
ParseError (Sprintf (" Undefined hints type: %s" , hintType.c_str ()), Pos - hintType.Size ());
34
34
}
@@ -45,43 +45,46 @@ class TOptimizerHintsParser {
45
45
return labels;
46
46
}
47
47
48
- void JoinAlgo () {
48
+ void JoinType () {
49
49
i32 beginPos = Pos + 1 ;
50
50
51
51
Keyword ({" (" });
52
52
53
53
i32 labelsBeginPos = Pos + 1 ;
54
54
TVector<TString> labels = CollectLabels ();
55
55
if (labels.size () <= 1 ) {
56
- ParseError (Sprintf (" Bad labels for JoinAlgo hint: %s, example of the format: JoinAlgo (t1 t2 Grace )" , JoinSeq (" , " , labels).c_str ()), labelsBeginPos);
56
+ ParseError (Sprintf (" Bad labels for JoinType hint: %s, example of the format: JoinType (t1 t2 Shuffle )" , JoinSeq (" , " , labels).c_str ()), labelsBeginPos);
57
57
}
58
58
TString reqJoinAlgoStr = std::move (labels.back ());
59
59
labels.pop_back ();
60
60
61
61
Keyword ({" )" });
62
62
63
63
TVector<EJoinAlgoType> joinAlgos = {EJoinAlgoType::GraceJoin, EJoinAlgoType::LookupJoin, EJoinAlgoType::MapJoin};
64
- TVector<TString> joinAlgosStr = {" Grace " , " Lookup" , " Map " };
64
+ TVector<TString> joinAlgosStr = {" Shuffle " , " Lookup" , " Broadcast " };
65
65
66
- for (const auto & [joinAlgo , joinAlgoStr]: Zip (joinAlgos, joinAlgosStr)) {
66
+ for (const auto & [JoinType , joinAlgoStr]: Zip (joinAlgos, joinAlgosStr)) {
67
67
if (reqJoinAlgoStr == joinAlgoStr) {
68
- Hints.JoinAlgoHints ->PushBack (std::move (labels), joinAlgo , " JoinAlgo " + Text.substr (beginPos, Pos - beginPos + 1 ));
68
+ Hints.JoinAlgoHints ->PushBack (std::move (labels), JoinType , " JoinType " + Text.substr (beginPos, Pos - beginPos + 1 ));
69
69
return ;
70
70
}
71
71
}
72
72
73
- ParseError (Sprintf (" Unknown JoinAlgo : '%s', supported algos: [%s]" , reqJoinAlgoStr.c_str (), JoinSeq (" , " , joinAlgosStr).c_str ()), Pos - reqJoinAlgoStr.Size ());
73
+ ParseError (Sprintf (" Unknown JoinType : '%s', supported algos: [%s]" , reqJoinAlgoStr.c_str (), JoinSeq (" , " , joinAlgosStr).c_str ()), Pos - reqJoinAlgoStr.Size ());
74
74
Y_UNREACHABLE ();
75
75
}
76
76
77
- void JoinOrder () {
77
+ void JoinOrder (bool leading /* is keyword "Leading" or "JoinOrder" */ ) {
78
78
i32 beginPos = Pos + 1 ;
79
79
80
80
Keyword ({" (" });
81
81
auto joinOrderHintTree = JoinOrderLabels ();
82
82
Keyword ({" )" });
83
83
84
- Hints.JoinOrderHints ->PushBack (std::move (joinOrderHintTree), " JoinOrder" + Text.substr (beginPos, Pos - beginPos + 1 ));
84
+ Hints.JoinOrderHints ->PushBack (
85
+ std::move (joinOrderHintTree),
86
+ leading? " Leading" : " JoinOrder" + Text.substr (beginPos, Pos - beginPos + 1 )
87
+ );
85
88
}
86
89
87
90
std::shared_ptr<TJoinOrderHints::ITreeNode> JoinOrderLabels () {
@@ -103,7 +106,7 @@ class TOptimizerHintsParser {
103
106
Y_UNREACHABLE ();
104
107
}
105
108
106
- void Card () {
109
+ void Rows () {
107
110
i32 beginPos = Pos + 1 ;
108
111
109
112
Keyword ({" (" });
@@ -124,7 +127,7 @@ class TOptimizerHintsParser {
124
127
default : {ParseError (Sprintf (" Unknown operation: '%c'" , sign), Pos - 1 ); Y_UNREACHABLE ();}
125
128
}
126
129
127
- Hints.CardinalityHints ->PushBack (std::move (labels), op, value, " Card " + Text.substr (beginPos, Pos - beginPos + 1 ));
130
+ Hints.CardinalityHints ->PushBack (std::move (labels), op, value, " Rows " + Text.substr (beginPos, Pos - beginPos + 1 ));
128
131
}
129
132
130
133
private:
0 commit comments