Skip to content

Commit 2dbf832

Browse files
authored
An option to render SQL transalation with Seq! (#11015)
1 parent dc81de6 commit 2dbf832

File tree

37 files changed

+640
-26
lines changed

37 files changed

+640
-26
lines changed

ydb/library/yql/sql/v1/context.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ THashMap<TStringBuf, TPragmaField> CTX_PRAGMA_FIELDS = {
6565
{"ValidateUnusedExprs", &TContext::ValidateUnusedExprs},
6666
{"AnsiImplicitCrossJoin", &TContext::AnsiImplicitCrossJoin},
6767
{"DistinctOverWindow", &TContext::DistinctOverWindow},
68+
{"SeqMode", &TContext::SeqMode},
6869
};
6970

7071
typedef TMaybe<bool> TContext::*TPragmaMaybeField;

ydb/library/yql/sql/v1/context.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ namespace NSQLTranslationV1 {
325325
bool ValidateUnusedExprs = false;
326326
bool AnsiImplicitCrossJoin = false; // select * from A,B
327327
bool DistinctOverWindow = false;
328+
bool SeqMode = false;
328329
};
329330

330331
class TColumnRefScope {

ydb/library/yql/sql/v1/node.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1521,7 +1521,7 @@ namespace NSQLTranslationV1 {
15211521
TNodePtr BuildWriteResult(TPosition pos, const TString& label, TNodePtr settings);
15221522
TNodePtr BuildCommitClusters(TPosition pos);
15231523
TNodePtr BuildRollbackClusters(TPosition pos);
1524-
TNodePtr BuildQuery(TPosition pos, const TVector<TNodePtr>& blocks, bool topLevel, TScopedStatePtr scoped);
1524+
TNodePtr BuildQuery(TPosition pos, const TVector<TNodePtr>& blocks, bool topLevel, TScopedStatePtr scoped, bool useSeq);
15251525
TNodePtr BuildPragma(TPosition pos, const TString& prefix, const TString& name, const TVector<TDeferredAtom>& values, bool valueDefault);
15261526
TNodePtr BuildSqlLambda(TPosition pos, TVector<TString>&& args, TVector<TNodePtr>&& exprSeq);
15271527
TNodePtr BuildWorldIfNode(TPosition pos, TNodePtr predicate, TNodePtr thenNode, TNodePtr elseNode, bool isEvaluate);

ydb/library/yql/sql/v1/query.cpp

Lines changed: 70 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,15 +2694,44 @@ TNodePtr BuildWriteResult(TPosition pos, const TString& label, TNodePtr settings
26942694

26952695
class TYqlProgramNode: public TAstListNode {
26962696
public:
2697-
TYqlProgramNode(TPosition pos, const TVector<TNodePtr>& blocks, bool topLevel, TScopedStatePtr scoped)
2697+
TYqlProgramNode(TPosition pos, const TVector<TNodePtr>& blocks, bool topLevel, TScopedStatePtr scoped, bool useSeq)
26982698
: TAstListNode(pos)
26992699
, Blocks(blocks)
27002700
, TopLevel(topLevel)
27012701
, Scoped(scoped)
2702+
, UseSeq(useSeq)
27022703
{}
27032704

27042705
bool DoInit(TContext& ctx, ISource* src) override {
27052706
bool hasError = false;
2707+
INode::TPtr currentWorldsHolder;
2708+
INode::TPtr seqNode;
2709+
if (UseSeq) {
2710+
currentWorldsHolder = new TAstListNodeImpl(GetPos());
2711+
seqNode = new TAstListNodeImpl(GetPos());
2712+
seqNode->Add("Seq!","world");
2713+
}
2714+
2715+
INode* currentWorlds = UseSeq ? currentWorldsHolder.Get() : this;
2716+
auto flushCurrentWorlds = [&](bool changeSeq, bool finish) {
2717+
currentWorldsHolder->Add(Y("return","world"));
2718+
auto lambda = BuildLambda(GetPos(), Y("world"), Y("block", Q(currentWorldsHolder)));
2719+
seqNode->Add(lambda);
2720+
2721+
if (finish) {
2722+
Add(Y("let", "world", seqNode));
2723+
} else {
2724+
currentWorldsHolder = new TAstListNodeImpl(GetPos());
2725+
currentWorlds = currentWorldsHolder.Get();
2726+
}
2727+
2728+
if (changeSeq) {
2729+
Add(Y("let", "world", seqNode));
2730+
seqNode = new TAstListNodeImpl(GetPos());
2731+
seqNode->Add("Seq!","world");
2732+
}
2733+
};
2734+
27062735
if (TopLevel) {
27072736
for (auto& var: ctx.Variables) {
27082737
if (!var.second.second->Init(ctx, src)) {
@@ -2799,33 +2828,33 @@ class TYqlProgramNode: public TAstListNode {
27992828
auto resultSink = Y("DataSink", BuildQuotedAtom(Pos, TString(ResultProviderName)));
28002829

28012830
for (const auto& warningPragma : ctx.WarningPolicy.GetRules()) {
2802-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2831+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28032832
BuildQuotedAtom(Pos, "Warning"), BuildQuotedAtom(Pos, warningPragma.GetPattern()),
28042833
BuildQuotedAtom(Pos, to_lower(ToString(warningPragma.GetAction()))))));
28052834
}
28062835

28072836
if (ctx.ResultSizeLimit > 0) {
2808-
Add(Y("let", "world", Y(TString(ConfigureName), "world", resultSink,
2837+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", resultSink,
28092838
BuildQuotedAtom(Pos, "SizeLimit"), BuildQuotedAtom(Pos, ToString(ctx.ResultSizeLimit)))));
28102839
}
28112840

28122841
if (!ctx.PragmaPullUpFlatMapOverJoin) {
2813-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2842+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28142843
BuildQuotedAtom(Pos, "DisablePullUpFlatMapOverJoin"))));
28152844
}
28162845

28172846
if (ctx.FilterPushdownOverJoinOptionalSide) {
2818-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2847+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28192848
BuildQuotedAtom(Pos, "FilterPushdownOverJoinOptionalSide"))));
28202849
}
28212850

28222851
if (!ctx.RotateJoinTree) {
2823-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2852+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28242853
BuildQuotedAtom(Pos, "RotateJoinTree"), BuildQuotedAtom(Pos, "false"))));
28252854
}
28262855

28272856
if (ctx.DiscoveryMode) {
2828-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2857+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28292858
BuildQuotedAtom(Pos, "DiscoveryMode"))));
28302859
}
28312860

@@ -2836,12 +2865,12 @@ class TYqlProgramNode: public TAstListNode {
28362865
} else if (ctx.DqEngineForce) {
28372866
mode = "force";
28382867
}
2839-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2868+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28402869
BuildQuotedAtom(Pos, "DqEngine"), BuildQuotedAtom(Pos, mode))));
28412870
}
28422871

28432872
if (ctx.CostBasedOptimizer) {
2844-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2873+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28452874
BuildQuotedAtom(Pos, "CostBasedOptimizer"), BuildQuotedAtom(Pos, ctx.CostBasedOptimizer))));
28462875
}
28472876

@@ -2851,43 +2880,43 @@ class TYqlProgramNode: public TAstListNode {
28512880
pragmaName = "JsonQueryReturnsJsonDocument";
28522881
}
28532882

2854-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource, BuildQuotedAtom(Pos, pragmaName))));
2883+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource, BuildQuotedAtom(Pos, pragmaName))));
28552884
}
28562885

28572886
if (ctx.OrderedColumns) {
2858-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2887+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28592888
BuildQuotedAtom(Pos, "OrderedColumns"))));
28602889
}
28612890

28622891
if (ctx.PqReadByRtmrCluster) {
28632892
auto pqSourceAll = Y("DataSource", BuildQuotedAtom(Pos, TString(PqProviderName)), BuildQuotedAtom(Pos, "$all"));
2864-
Add(Y("let", "world", Y(TString(ConfigureName), "world", pqSourceAll,
2893+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", pqSourceAll,
28652894
BuildQuotedAtom(Pos, "Attr"), BuildQuotedAtom(Pos, "PqReadByRtmrCluster_"), BuildQuotedAtom(Pos, ctx.PqReadByRtmrCluster))));
28662895

28672896
auto rtmrSourceAll = Y("DataSource", BuildQuotedAtom(Pos, TString(RtmrProviderName)), BuildQuotedAtom(Pos, "$all"));
2868-
Add(Y("let", "world", Y(TString(ConfigureName), "world", rtmrSourceAll,
2897+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", rtmrSourceAll,
28692898
BuildQuotedAtom(Pos, "Attr"), BuildQuotedAtom(Pos, "PqReadByRtmrCluster_"), BuildQuotedAtom(Pos, ctx.PqReadByRtmrCluster))));
28702899

28712900
if (ctx.PqReadByRtmrCluster != "dq") {
28722901
// set any dynamic settings for particular RTMR cluster for CommitAll!
28732902
auto rtmrSource = Y("DataSource", BuildQuotedAtom(Pos, TString(RtmrProviderName)), BuildQuotedAtom(Pos, ctx.PqReadByRtmrCluster));
2874-
Add(Y("let", "world", Y(TString(ConfigureName), "world", rtmrSource,
2903+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", rtmrSource,
28752904
BuildQuotedAtom(Pos, "Attr"), BuildQuotedAtom(Pos, "Dummy_"), BuildQuotedAtom(Pos, "1"))));
28762905
}
28772906
}
28782907

28792908
if (ctx.YsonCastToString.Defined()) {
28802909
const TString pragmaName = *ctx.YsonCastToString ? "YsonCastToString" : "DisableYsonCastToString";
2881-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource, BuildQuotedAtom(Pos, pragmaName))));
2910+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource, BuildQuotedAtom(Pos, pragmaName))));
28822911
}
28832912

28842913
if (ctx.UseBlocks) {
2885-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource, BuildQuotedAtom(Pos, "UseBlocks"))));
2914+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource, BuildQuotedAtom(Pos, "UseBlocks"))));
28862915
}
28872916

28882917
if (ctx.BlockEngineEnable) {
28892918
TString mode = ctx.BlockEngineForce ? "force" : "auto";
2890-
Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
2919+
currentWorlds->Add(Y("let", "world", Y(TString(ConfigureName), "world", configSource,
28912920
BuildQuotedAtom(Pos, "BlockEngine"), BuildQuotedAtom(Pos, mode))));
28922921
}
28932922
}
@@ -2915,22 +2944,41 @@ class TYqlProgramNode: public TAstListNode {
29152944
Add(Y("let", data.first, node));
29162945
}
29172946

2947+
if (UseSeq) {
2948+
flushCurrentWorlds(false, false);
2949+
}
2950+
29182951
for (auto& block: Blocks) {
29192952
const auto subqueryAliasPtr = block->SubqueryAlias();
29202953
if (subqueryAliasPtr) {
29212954
if (block->UsedSubquery()) {
2955+
if (UseSeq) {
2956+
flushCurrentWorlds(true, false);
2957+
}
2958+
29222959
const auto& ref = block->GetLabel();
29232960
YQL_ENSURE(!ref.empty());
29242961
Add(block);
2925-
Add(Y("let", "world", Y("Nth", *subqueryAliasPtr, Q("0"))));
2962+
currentWorlds->Add(Y("let", "world", Y("Nth", *subqueryAliasPtr, Q("0"))));
29262963
Add(Y("let", ref, Y("Nth", *subqueryAliasPtr, Q("1"))));
29272964
}
29282965
} else {
29292966
const auto& ref = block->GetLabel();
2930-
Add(Y("let", ref ? ref : "world", block));
2967+
if (ref) {
2968+
Add(Y("let", ref, block));
2969+
} else {
2970+
currentWorlds->Add(Y("let", "world", block));
2971+
if (UseSeq) {
2972+
flushCurrentWorlds(false, false);
2973+
}
2974+
}
29312975
}
29322976
}
29332977

2978+
if (UseSeq) {
2979+
flushCurrentWorlds(false, true);
2980+
}
2981+
29342982
if (TopLevel) {
29352983
if (ctx.UniversalAliases) {
29362984
decltype(Nodes) preparedNodes;
@@ -2975,10 +3023,11 @@ class TYqlProgramNode: public TAstListNode {
29753023
TVector<TNodePtr> Blocks;
29763024
const bool TopLevel;
29773025
TScopedStatePtr Scoped;
3026+
const bool UseSeq;
29783027
};
29793028

2980-
TNodePtr BuildQuery(TPosition pos, const TVector<TNodePtr>& blocks, bool topLevel, TScopedStatePtr scoped) {
2981-
return new TYqlProgramNode(pos, blocks, topLevel, scoped);
3029+
TNodePtr BuildQuery(TPosition pos, const TVector<TNodePtr>& blocks, bool topLevel, TScopedStatePtr scoped, bool useSeq) {
3030+
return new TYqlProgramNode(pos, blocks, topLevel, scoped, useSeq);
29823031
}
29833032

29843033
class TPragmaNode final: public INode {

ydb/library/yql/sql/v1/sql_query.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2964,6 +2964,12 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success
29642964
} else if (normalizedPragma == "disabledistinctoverwindow") {
29652965
Ctx.DistinctOverWindow = false;
29662966
Ctx.IncrementMonCounter("sql_pragma", "DisableDistinctOverWindow");
2967+
} else if (normalizedPragma == "seqmode") {
2968+
Ctx.SeqMode = true;
2969+
Ctx.IncrementMonCounter("sql_pragma", "SeqMode");
2970+
} else if (normalizedPragma == "disableseqmode") {
2971+
Ctx.SeqMode = false;
2972+
Ctx.IncrementMonCounter("sql_pragma", "DisableSeqMode");
29672973
} else {
29682974
Error() << "Unknown pragma: " << pragma;
29692975
Ctx.IncrementMonCounter("sql_errors", "UnknownPragma");
@@ -3312,7 +3318,7 @@ TNodePtr TSqlQuery::Build(const TSQLv1ParserAST& ast) {
33123318
AddStatementToBlocks(blocks, BuildCommitClusters(Ctx.Pos()));
33133319
}
33143320

3315-
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped);
3321+
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped, Ctx.SeqMode);
33163322
WarnUnusedNodes();
33173323
return result;
33183324
}
@@ -3382,7 +3388,7 @@ TNodePtr TSqlQuery::Build(const std::vector<::NSQLv1Generated::TRule_sql_stmt_co
33823388
AddStatementToBlocks(blocks, BuildCommitClusters(Ctx.Pos()));
33833389
}
33843390

3385-
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped);
3391+
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped, Ctx.SeqMode);
33863392
return result;
33873393
}
33883394
namespace {

ydb/library/yql/sql/v1/sql_translation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4508,7 +4508,7 @@ TNodePtr TSqlTranslation::DoStatement(const TRule_do_stmt& stmt, bool makeLambda
45084508
TBlocks innerBlocks;
45094509

45104510
const bool hasValidBody = DefineActionOrSubqueryBody(query, innerBlocks, body);
4511-
auto ret = hasValidBody ? BuildQuery(Ctx.Pos(), innerBlocks, false, Ctx.Scoped) : nullptr;
4511+
auto ret = hasValidBody ? BuildQuery(Ctx.Pos(), innerBlocks, false, Ctx.Scoped, Ctx.SeqMode) : nullptr;
45124512
WarnUnusedNodes();
45134513
Ctx.ScopeLevel--;
45144514
Ctx.Scoped = saveScoped;
@@ -4621,7 +4621,7 @@ bool TSqlTranslation::DefineActionOrSubqueryStatement(const TRule_define_action_
46214621
return false;
46224622
}
46234623

4624-
auto ret = hasValidBody ? BuildQuery(Ctx.Pos(), innerBlocks, false, Ctx.Scoped) : nullptr;
4624+
auto ret = hasValidBody ? BuildQuery(Ctx.Pos(), innerBlocks, false, Ctx.Scoped, Ctx.SeqMode) : nullptr;
46254625
WarnUnusedNodes();
46264626
Ctx.Scoped = saveScoped;
46274627
Ctx.ScopeLevel--;

ydb/library/yql/tests/sql/dq_file/part10/canondata/result.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2598,6 +2598,28 @@
25982598
}
25992599
],
26002600
"test.test[select-where_with_lambda--Results]": [],
2601+
"test.test[seq_mode-simple1-default.txt-Analyze]": [
2602+
{
2603+
"checksum": "b4dd508a329723c74293d80f0278c705",
2604+
"size": 505,
2605+
"uri": "https://{canondata_backend}/1889210/c48249ef01b032757b4c9d64577e12744571e6ff/resource.tar.gz#test.test_seq_mode-simple1-default.txt-Analyze_/plan.txt"
2606+
}
2607+
],
2608+
"test.test[seq_mode-simple1-default.txt-Debug]": [
2609+
{
2610+
"checksum": "b40f67aff1a1f2d7dcf60ba1281e9d65",
2611+
"size": 289,
2612+
"uri": "https://{canondata_backend}/1889210/c48249ef01b032757b4c9d64577e12744571e6ff/resource.tar.gz#test.test_seq_mode-simple1-default.txt-Debug_/opt.yql_patched"
2613+
}
2614+
],
2615+
"test.test[seq_mode-simple1-default.txt-Plan]": [
2616+
{
2617+
"checksum": "b4dd508a329723c74293d80f0278c705",
2618+
"size": 505,
2619+
"uri": "https://{canondata_backend}/1889210/c48249ef01b032757b4c9d64577e12744571e6ff/resource.tar.gz#test.test_seq_mode-simple1-default.txt-Plan_/plan.txt"
2620+
}
2621+
],
2622+
"test.test[seq_mode-simple1-default.txt-Results]": [],
26012623
"test.test[table_range-table_funcs_expr--Analyze]": [
26022624
{
26032625
"checksum": "08e6fed9ffd8eb5bcccbbd7d49e3e6dd",

ydb/library/yql/tests/sql/dq_file/part13/canondata/result.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2793,6 +2793,28 @@
27932793
}
27942794
],
27952795
"test.test[select-unlabeled_1000--Results]": [],
2796+
"test.test[seq_mode-subquery_shared_subquery-default.txt-Analyze]": [
2797+
{
2798+
"checksum": "b4dd508a329723c74293d80f0278c705",
2799+
"size": 505,
2800+
"uri": "https://{canondata_backend}/1936273/a62235705daacff938053a0c1726e0c527b8307a/resource.tar.gz#test.test_seq_mode-subquery_shared_subquery-default.txt-Analyze_/plan.txt"
2801+
}
2802+
],
2803+
"test.test[seq_mode-subquery_shared_subquery-default.txt-Debug]": [
2804+
{
2805+
"checksum": "c16c2bdd152fa4152fcc079e849add4e",
2806+
"size": 231,
2807+
"uri": "https://{canondata_backend}/1936273/a62235705daacff938053a0c1726e0c527b8307a/resource.tar.gz#test.test_seq_mode-subquery_shared_subquery-default.txt-Debug_/opt.yql_patched"
2808+
}
2809+
],
2810+
"test.test[seq_mode-subquery_shared_subquery-default.txt-Plan]": [
2811+
{
2812+
"checksum": "b4dd508a329723c74293d80f0278c705",
2813+
"size": 505,
2814+
"uri": "https://{canondata_backend}/1936273/a62235705daacff938053a0c1726e0c527b8307a/resource.tar.gz#test.test_seq_mode-subquery_shared_subquery-default.txt-Plan_/plan.txt"
2815+
}
2816+
],
2817+
"test.test[seq_mode-subquery_shared_subquery-default.txt-Results]": [],
27962818
"test.test[simple_columns-simple_columns_join_coalesce_all_2-default.txt-Analyze]": [
27972819
{
27982820
"checksum": "b4dd508a329723c74293d80f0278c705",

ydb/library/yql/tests/sql/dq_file/part16/canondata/result.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2668,6 +2668,28 @@
26682668
}
26692669
],
26702670
"test.test[select-one_labeled_column-default.txt-Results]": [],
2671+
"test.test[seq_mode-shared_subquery_expr-default.txt-Analyze]": [
2672+
{
2673+
"checksum": "a3b64a2cf9903b3868a2dd88a18fc46e",
2674+
"size": 922,
2675+
"uri": "https://{canondata_backend}/1814674/bc826e9b9202032dac82451ba4769076555fbab6/resource.tar.gz#test.test_seq_mode-shared_subquery_expr-default.txt-Analyze_/plan.txt"
2676+
}
2677+
],
2678+
"test.test[seq_mode-shared_subquery_expr-default.txt-Debug]": [
2679+
{
2680+
"checksum": "2960fb9caf762052aa597a19df446228",
2681+
"size": 332,
2682+
"uri": "https://{canondata_backend}/1814674/bc826e9b9202032dac82451ba4769076555fbab6/resource.tar.gz#test.test_seq_mode-shared_subquery_expr-default.txt-Debug_/opt.yql_patched"
2683+
}
2684+
],
2685+
"test.test[seq_mode-shared_subquery_expr-default.txt-Plan]": [
2686+
{
2687+
"checksum": "a3b64a2cf9903b3868a2dd88a18fc46e",
2688+
"size": 922,
2689+
"uri": "https://{canondata_backend}/1814674/bc826e9b9202032dac82451ba4769076555fbab6/resource.tar.gz#test.test_seq_mode-shared_subquery_expr-default.txt-Plan_/plan.txt"
2690+
}
2691+
],
2692+
"test.test[seq_mode-shared_subquery_expr-default.txt-Results]": [],
26712693
"test.test[tpch-q7-default.txt-Analyze]": [
26722694
{
26732695
"checksum": "e76fc970e4cfb7b281570f4332d98e5b",

0 commit comments

Comments
 (0)