Skip to content

Commit a3f92d2

Browse files
committed
init
1 parent 634dc20 commit a3f92d2

File tree

33 files changed

+640
-26
lines changed

33 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
@@ -2960,6 +2960,12 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success
29602960
} else if (normalizedPragma == "disabledistinctoverwindow") {
29612961
Ctx.DistinctOverWindow = false;
29622962
Ctx.IncrementMonCounter("sql_pragma", "DisableDistinctOverWindow");
2963+
} else if (normalizedPragma == "seqmode") {
2964+
Ctx.SeqMode = true;
2965+
Ctx.IncrementMonCounter("sql_pragma", "SeqMode");
2966+
} else if (normalizedPragma == "disableseqmode") {
2967+
Ctx.SeqMode = false;
2968+
Ctx.IncrementMonCounter("sql_pragma", "DisableSeqMode");
29632969
} else {
29642970
Error() << "Unknown pragma: " << pragma;
29652971
Ctx.IncrementMonCounter("sql_errors", "UnknownPragma");
@@ -3308,7 +3314,7 @@ TNodePtr TSqlQuery::Build(const TSQLv1ParserAST& ast) {
33083314
AddStatementToBlocks(blocks, BuildCommitClusters(Ctx.Pos()));
33093315
}
33103316

3311-
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped);
3317+
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped, Ctx.SeqMode);
33123318
WarnUnusedNodes();
33133319
return result;
33143320
}
@@ -3378,7 +3384,7 @@ TNodePtr TSqlQuery::Build(const std::vector<::NSQLv1Generated::TRule_sql_stmt_co
33783384
AddStatementToBlocks(blocks, BuildCommitClusters(Ctx.Pos()));
33793385
}
33803386

3381-
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped);
3387+
auto result = BuildQuery(Ctx.Pos(), blocks, true, Ctx.Scoped, Ctx.SeqMode);
33823388
return result;
33833389
}
33843390
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: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,29 @@
11
{
2+
"test.test[SeqMode-shared_subquery_expr_after_commit-default.txt-Analyze]": [
3+
{
4+
"checksum": "73cd2136358e0f6a50f06140703d344d",
5+
"size": 5769,
6+
"uri": "https://{canondata_backend}/1871182/b1a07621126ede0b23bbe3e8dfe267adf8f37a78/resource.tar.gz#test.test_SeqMode-shared_subquery_expr_after_commit-default.txt-Analyze_/plan.txt"
7+
},
8+
{
9+
"uri": "file://test.test_SeqMode-shared_subquery_expr_after_commit-default.txt-Analyze_/extracted"
10+
}
11+
],
12+
"test.test[SeqMode-shared_subquery_expr_after_commit-default.txt-Debug]": [
13+
{
14+
"checksum": "26a3e3ddd721add06784b4423a455e2a",
15+
"size": 2158,
16+
"uri": "https://{canondata_backend}/1871182/b1a07621126ede0b23bbe3e8dfe267adf8f37a78/resource.tar.gz#test.test_SeqMode-shared_subquery_expr_after_commit-default.txt-Debug_/opt.yql_patched"
17+
}
18+
],
19+
"test.test[SeqMode-shared_subquery_expr_after_commit-default.txt-Plan]": [
20+
{
21+
"checksum": "a1a4f9852ea9c21bf83b47c360a6c604",
22+
"size": 7588,
23+
"uri": "https://{canondata_backend}/1871182/b1a07621126ede0b23bbe3e8dfe267adf8f37a78/resource.tar.gz#test.test_SeqMode-shared_subquery_expr_after_commit-default.txt-Plan_/plan.txt"
24+
}
25+
],
26+
"test.test[SeqMode-shared_subquery_expr_after_commit-default.txt-Results]": [],
227
"test.test[action-action_opt_args-default.txt-Analyze]": [
328
{
429
"checksum": "a3b64a2cf9903b3868a2dd88a18fc46e",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<tmp_path>/program.sql:<main>: Info: Optimization
2+
3+
<tmp_path>/program.sql:<main>: Info: DQ cannot execute the query. Cause: table without statistics

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
@@ -1,4 +1,26 @@
11
{
2+
"test.test[SeqMode-simple1-default.txt-Analyze]": [
3+
{
4+
"checksum": "b4dd508a329723c74293d80f0278c705",
5+
"size": 505,
6+
"uri": "https://{canondata_backend}/1925821/53324a6da5db86940359e666456af74325f417cd/resource.tar.gz#test.test_SeqMode-simple1-default.txt-Analyze_/plan.txt"
7+
}
8+
],
9+
"test.test[SeqMode-simple1-default.txt-Debug]": [
10+
{
11+
"checksum": "b40f67aff1a1f2d7dcf60ba1281e9d65",
12+
"size": 289,
13+
"uri": "https://{canondata_backend}/1925821/53324a6da5db86940359e666456af74325f417cd/resource.tar.gz#test.test_SeqMode-simple1-default.txt-Debug_/opt.yql_patched"
14+
}
15+
],
16+
"test.test[SeqMode-simple1-default.txt-Plan]": [
17+
{
18+
"checksum": "b4dd508a329723c74293d80f0278c705",
19+
"size": 505,
20+
"uri": "https://{canondata_backend}/1925821/53324a6da5db86940359e666456af74325f417cd/resource.tar.gz#test.test_SeqMode-simple1-default.txt-Plan_/plan.txt"
21+
}
22+
],
23+
"test.test[SeqMode-simple1-default.txt-Results]": [],
224
"test.test[action-action_eval_cluster_use--Analyze]": [
325
{
426
"checksum": "4f1be07e94fcf0a8c67e043e37e0b610",

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,26 @@
11
{
2+
"test.test[SeqMode-shared_subquery_expr-default.txt-Analyze]": [
3+
{
4+
"checksum": "a3b64a2cf9903b3868a2dd88a18fc46e",
5+
"size": 922,
6+
"uri": "https://{canondata_backend}/1871182/d5d4fe05765faf626fe33998e3ca4326f3cbee6a/resource.tar.gz#test.test_SeqMode-shared_subquery_expr-default.txt-Analyze_/plan.txt"
7+
}
8+
],
9+
"test.test[SeqMode-shared_subquery_expr-default.txt-Debug]": [
10+
{
11+
"checksum": "2960fb9caf762052aa597a19df446228",
12+
"size": 332,
13+
"uri": "https://{canondata_backend}/1871182/d5d4fe05765faf626fe33998e3ca4326f3cbee6a/resource.tar.gz#test.test_SeqMode-shared_subquery_expr-default.txt-Debug_/opt.yql_patched"
14+
}
15+
],
16+
"test.test[SeqMode-shared_subquery_expr-default.txt-Plan]": [
17+
{
18+
"checksum": "a3b64a2cf9903b3868a2dd88a18fc46e",
19+
"size": 922,
20+
"uri": "https://{canondata_backend}/1871182/d5d4fe05765faf626fe33998e3ca4326f3cbee6a/resource.tar.gz#test.test_SeqMode-shared_subquery_expr-default.txt-Plan_/plan.txt"
21+
}
22+
],
23+
"test.test[SeqMode-shared_subquery_expr-default.txt-Results]": [],
224
"test.test[action-eval_input_output_table_subquery--Analyze]": [
325
{
426
"checksum": "302b334624dce8fdd832200067248ff7",

0 commit comments

Comments
 (0)