@@ -272,6 +272,7 @@ class TConverter : public IPGParseEvents {
272
272
: AstParseResult(astParseResult)
273
273
, Settings(settings)
274
274
, DqEngineEnabled(Settings.DqDefaultAuto->Allow())
275
+ , BlockEngineEnabled(Settings.BlockDefaultAuto->Allow())
275
276
{
276
277
Positions.push_back({});
277
278
ScanRows(query);
@@ -281,6 +282,10 @@ class TConverter : public IPGParseEvents {
281
282
DqEngineEnabled = true;
282
283
} else if (flag == "DqEngineForce") {
283
284
DqEngineForce = true;
285
+ } else if (flag == "BlockEngineEnable") {
286
+ BlockEngineEnabled = true;
287
+ } else if (flag == "BlockEngineForce") {
288
+ BlockEngineForce = true;
284
289
}
285
290
}
286
291
@@ -320,6 +325,8 @@ class TConverter : public IPGParseEvents {
320
325
Statements.push_back(L(A("let"), A("world"), L(A(TString(NYql::ConfigureName)), A("world"), configSource,
321
326
QA("OrderedColumns"))));
322
327
328
+ ui32 blockEnginePgmPos = Statements.size();
329
+ Statements.push_back(configSource);
323
330
ui32 costBasedOptimizerPos = Statements.size();
324
331
Statements.push_back(configSource);
325
332
ui32 dqEnginePgmPos = Statements.size();
@@ -359,6 +366,13 @@ class TConverter : public IPGParseEvents {
359
366
Statements.erase(Statements.begin() + costBasedOptimizerPos);
360
367
}
361
368
369
+ if (BlockEngineEnabled) {
370
+ Statements[blockEnginePgmPos] = L(A("let"), A("world"), L(A(TString(NYql::ConfigureName)), A("world"), configSource,
371
+ QA("BlockEngine"), QA(BlockEngineForce ? "force" : "auto")));
372
+ } else {
373
+ Statements.erase(Statements.begin() + blockEnginePgmPos);
374
+ }
375
+
362
376
return VL(Statements.data(), Statements.size());
363
377
}
364
378
@@ -2001,7 +2015,7 @@ class TConverter : public IPGParseEvents {
2001
2015
AddError(TStringBuilder() << "VariableSetStmt, expected string literal for " << value->name << " option");
2002
2016
return nullptr;
2003
2017
}
2004
- } else if (name == "dqengine") {
2018
+ } else if (name == "dqengine" || name == "blockengine" ) {
2005
2019
if (ListLength(value->args) != 1) {
2006
2020
AddError(TStringBuilder() << "VariableSetStmt, expected 1 arg, but got: " << ListLength(value->args));
2007
2021
return nullptr;
@@ -2011,17 +2025,20 @@ class TConverter : public IPGParseEvents {
2011
2025
if (NodeTag(arg) == T_A_Const && (NodeTag(CAST_NODE(A_Const, arg)->val) == T_String)) {
2012
2026
auto rawStr = StrVal(CAST_NODE(A_Const, arg)->val);
2013
2027
auto str = to_lower(TString(rawStr));
2028
+ const bool isDqEngine = name == "dqengine";
2029
+ auto& enable = isDqEngine ? DqEngineEnabled : BlockEngineEnabled;
2030
+ auto& force = isDqEngine ? DqEngineForce : BlockEngineForce;
2014
2031
if (str == "auto") {
2015
- DqEngineEnabled = true;
2016
- DqEngineForce = false;
2032
+ enable = true;
2033
+ force = false;
2017
2034
} else if (str == "force") {
2018
- DqEngineEnabled = true;
2019
- DqEngineForce = true;
2035
+ enable = true;
2036
+ force = true;
2020
2037
} else if (str == "disable") {
2021
- DqEngineEnabled = false;
2022
- DqEngineForce = false;
2038
+ enable = false;
2039
+ force = false;
2023
2040
} else {
2024
- AddError(TStringBuilder() << "VariableSetStmt, not supported DqEngine option value: " << rawStr);
2041
+ AddError(TStringBuilder() << "VariableSetStmt, not supported " << value->name << " option value: " << rawStr);
2025
2042
return nullptr;
2026
2043
}
2027
2044
} else {
@@ -4247,6 +4264,8 @@ class TConverter : public IPGParseEvents {
4247
4264
bool DqEngineEnabled = false;
4248
4265
bool DqEngineForce = false;
4249
4266
TString CostBasedOptimizer;
4267
+ bool BlockEngineEnabled = false;
4268
+ bool BlockEngineForce = false;
4250
4269
TVector<TAstNode*> Statements;
4251
4270
ui32 ReadIndex = 0;
4252
4271
TViews Views;
0 commit comments