Skip to content

Commit f3c562b

Browse files
rvu1024Roman Udovichenko
andauthored
Move DqReplicate check from type_ann to optimizers (#14426)
Co-authored-by: Roman Udovichenko <udovichenko-r@localhost.localdomain>
1 parent 0e1fdd6 commit f3c562b

File tree

4 files changed

+17
-20
lines changed

4 files changed

+17
-20
lines changed

ydb/library/yql/providers/dq/opt/physical_optimize.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@ using namespace NYql::NNodes;
2020
class TDqsPhysicalOptProposalTransformer : public TOptimizeTransformerBase {
2121
public:
2222
TDqsPhysicalOptProposalTransformer(TTypeAnnotationContext* typeCtx, const TDqConfiguration::TPtr& config)
23-
: TOptimizeTransformerBase(typeCtx, NLog::EComponent::ProviderDq, {})
23+
: TOptimizeTransformerBase(/* TODO: typeCtx*/nullptr, NLog::EComponent::ProviderDq, {})
2424
, Config(config)
2525
{
2626
const bool enablePrecompute = Config->_EnablePrecompute.Get().GetOrElse(false);
27+
const bool enableDqReplicate = Config->IsDqReplicateEnabled(*typeCtx);
2728

2829
#define HNDL(name) "DqsPhy-"#name, Hndl(&TDqsPhysicalOptProposalTransformer::name)
30+
if (!enableDqReplicate) {
31+
AddHandler(0, &TDqReplicate::Match, HNDL(FailOnDqReplicate));
32+
}
2933
AddHandler(0, &TDqSourceWrap::Match, HNDL(BuildStageWithSourceWrap));
3034
AddHandler(0, &TDqReadWrap::Match, HNDL(BuildStageWithReadWrap));
3135
AddHandler(0, &TCoSkipNullMembers::Match, HNDL(PushSkipNullMembersToStage<false>));
@@ -104,6 +108,11 @@ class TDqsPhysicalOptProposalTransformer : public TOptimizeTransformerBase {
104108
}
105109

106110
protected:
111+
TMaybeNode<TExprBase> FailOnDqReplicate(TExprBase node, TExprContext& ctx) {
112+
ctx.AddError(YqlIssue(ctx.GetPosition(node.Pos()), TIssuesIds::DQ_OPTIMIZE_ERROR, "Reading multiple times from the same source is not supported"));
113+
return {};
114+
}
115+
107116
TMaybeNode<TExprBase> BuildStageWithSourceWrap(TExprBase node, TExprContext& ctx) {
108117
return DqBuildStageWithSourceWrap(node, ctx);
109118
}

ydb/library/yql/providers/dq/provider/yql_dq_datasink.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,9 @@ class TDqDataProviderSink: public TDataProviderBase {
3232
TDqDataProviderSink(const TDqState::TPtr& state)
3333
: State(state)
3434
, LogOptTransformer([state] () { return CreateDqsLogOptTransformer(state->TypeCtx, state->Settings); })
35-
, PhyOptTransformer([state] () { return CreateDqsPhyOptTransformer(/*TODO*/nullptr, state->Settings); })
35+
, PhyOptTransformer([state] () { return CreateDqsPhyOptTransformer(state->TypeCtx, state->Settings); })
3636
, PhysicalFinalizingTransformer([] () { return CreateDqsFinalizingOptTransformer(); })
37-
, TypeAnnotationTransformer([state] () {
38-
return CreateDqsDataSinkTypeAnnotationTransformer(
39-
state->TypeCtx, state->Settings->IsDqReplicateEnabled(*state->TypeCtx));
40-
})
37+
, TypeAnnotationTransformer([state] () { return CreateDqsDataSinkTypeAnnotationTransformer(state->TypeCtx); })
4138
, ConstraintsTransformer([] () { return CreateDqDataSinkConstraintTransformer(); })
4239
, RecaptureTransformer([state] () { return CreateDqsRecaptureTransformer(state); })
4340
{ }

ydb/library/yql/providers/dq/provider/yql_dq_datasink_type_ann.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace {
1414

1515
class TDqsDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
1616
public:
17-
TDqsDataSinkTypeAnnotationTransformer(TTypeAnnotationContext* typeCtx, bool enableDqReplicate)
17+
TDqsDataSinkTypeAnnotationTransformer(TTypeAnnotationContext* typeCtx)
1818
: TVisitorTransformerBase(true), TypeCtx(typeCtx)
1919
{
2020
AddHandler({TDqStage::CallableName()}, Hndl(&NDq::AnnotateDqStage));
@@ -28,11 +28,7 @@ class TDqsDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
2828
AddHandler({TDqCnBroadcast::CallableName()}, Hndl(&NDq::AnnotateDqConnection));
2929
AddHandler({TDqCnValue::CallableName()}, Hndl(&NDq::AnnotateDqCnValue));
3030
AddHandler({TDqCnMerge::CallableName()}, Hndl(&NDq::AnnotateDqCnMerge));
31-
if (enableDqReplicate) {
32-
AddHandler({TDqReplicate::CallableName()}, Hndl(&NDq::AnnotateDqReplicate));
33-
} else {
34-
AddHandler({TDqReplicate::CallableName()}, Hndl(&TDqsDataSinkTypeAnnotationTransformer::AnnotateDqReplicateAlwaysError));
35-
}
31+
AddHandler({TDqReplicate::CallableName()}, Hndl(&NDq::AnnotateDqReplicate));
3632
AddHandler({TDqJoin::CallableName()}, Hndl(&NDq::AnnotateDqJoin));
3733
AddHandler({TDqPhyGraceJoin::CallableName()}, Hndl(&NDq::AnnotateDqMapOrDictJoin));
3834
AddHandler({TDqPhyMapJoin::CallableName()}, Hndl(&NDq::AnnotateDqMapOrDictJoin));
@@ -47,11 +43,6 @@ class TDqsDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
4743
}
4844

4945
private:
50-
TStatus AnnotateDqReplicateAlwaysError(const TExprNode::TPtr& input, TExprContext& ctx) {
51-
ctx.AddError(YqlIssue(ctx.GetPosition(input->Pos()), TIssuesIds::DQ_OPTIMIZE_ERROR, "Reading multiple times from the same source is not supported"));
52-
return TStatus::Error;
53-
}
54-
5546
TStatus AnnotateDqWrite(const TExprNode::TPtr& input, TExprNode::TPtr& output, TExprContext& ctx) {
5647
if (!EnsureMinArgsCount(*input, 2, ctx)) {
5748
return TStatus::Error;
@@ -86,8 +77,8 @@ class TDqsDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
8677

8778
} // unnamed
8879

89-
THolder<TVisitorTransformerBase> CreateDqsDataSinkTypeAnnotationTransformer(TTypeAnnotationContext* typeCtx, bool enableDqReplicate) {
90-
return THolder(new TDqsDataSinkTypeAnnotationTransformer(typeCtx, enableDqReplicate));
80+
THolder<TVisitorTransformerBase> CreateDqsDataSinkTypeAnnotationTransformer(TTypeAnnotationContext* typeCtx) {
81+
return THolder(new TDqsDataSinkTypeAnnotationTransformer(typeCtx));
9182
}
9283

9384
} // NYql

ydb/library/yql/providers/dq/provider/yql_dq_datasink_type_ann.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77

88
namespace NYql {
99

10-
THolder<TVisitorTransformerBase> CreateDqsDataSinkTypeAnnotationTransformer(TTypeAnnotationContext* typeCtx, bool enableDqReplicate);
10+
THolder<TVisitorTransformerBase> CreateDqsDataSinkTypeAnnotationTransformer(TTypeAnnotationContext* typeCtx);
1111

1212
} // NYql

0 commit comments

Comments
 (0)