diff options
| author | zverevgeny <[email protected]> | 2023-08-21 08:40:04 +0300 | 
|---|---|---|
| committer | zverevgeny <[email protected]> | 2023-08-21 09:14:20 +0300 | 
| commit | b67c30034ac6d384129f1fb20172555b9ac936e4 (patch) | |
| tree | 2eb28e7bba4ca75a94f847ee4c5b0b8d354d674a | |
| parent | 4ffd2d398873ff2e3f1c28fbb1d647d26a9600d1 (diff) | |
YQL-16308 move IsBoolLike to a common place
| -rw-r--r-- | ydb/library/yql/core/type_ann/type_ann_match_recognize.cpp | 20 | ||||
| -rw-r--r-- | ydb/library/yql/core/yql_expr_type_annotation.cpp | 12 | ||||
| -rw-r--r-- | ydb/library/yql/core/yql_expr_type_annotation.h | 3 | 
3 files changed, 16 insertions, 19 deletions
| diff --git a/ydb/library/yql/core/type_ann/type_ann_match_recognize.cpp b/ydb/library/yql/core/type_ann/type_ann_match_recognize.cpp index 2e84b91f50f..6de8f301406 100644 --- a/ydb/library/yql/core/type_ann/type_ann_match_recognize.cpp +++ b/ydb/library/yql/core/type_ann/type_ann_match_recognize.cpp @@ -147,24 +147,6 @@ MatchRecognizePatternWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& outp      return IGraphTransformer::TStatus::Ok;  } -namespace { - -bool IsBoolLikeType(const TTypeAnnotationNode* node) { -    switch (node->GetKind()) { -        case ETypeAnnotationKind::Null: -            return true; -        case ETypeAnnotationKind::Data: -            return node->Cast<TDataExprType>()->GetSlot() == EDataSlot::Bool; -        case ETypeAnnotationKind::Optional: { -            const auto nested = node->Cast<TOptionalExprType>()->GetItemType(); -            return (nested->GetKind() == ETypeAnnotationKind::Data) and (nested->Cast<TDataExprType>()->GetSlot() == EDataSlot::Bool); -        } -        default: -            return false; -    } -} -} //namespace -  IGraphTransformer::TStatus  MatchRecognizeDefinesWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output,                                   TContext &ctx) { @@ -204,7 +186,7 @@ MatchRecognizeDefinesWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& outp              return IGraphTransformer::TStatus::Error;          }          if (auto type = lambda->GetTypeAnn()) { -            if (IsBoolLikeType(type)) { +            if (IsBoolLike(*type)) {                  items.push_back(ctx.Expr.MakeType<TItemExprType>(names->ChildRef(i)->Content(), type));              } else {                  ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(lambda->Pos()), "DEFINE expression must be a predicate")); diff --git a/ydb/library/yql/core/yql_expr_type_annotation.cpp b/ydb/library/yql/core/yql_expr_type_annotation.cpp index 99a82dce2ac..0d9c27c0979 100644 --- a/ydb/library/yql/core/yql_expr_type_annotation.cpp +++ b/ydb/library/yql/core/yql_expr_type_annotation.cpp @@ -4971,6 +4971,18 @@ bool IsFlowOrStream(const TExprNode& node) {      return IsFlowOrStream(*node.GetTypeAnn());  } +bool IsBoolLike(const TTypeAnnotationNode& type) { +    if (IsNull(type)) { +        return true; +    } +    const auto itemType = RemoveOptionalType(&type); +    return (itemType->GetKind() == ETypeAnnotationKind::Data) and (itemType->Cast<TDataExprType>()->GetSlot() == EDataSlot::Bool); +} + +bool IsBoolLike(const TExprNode& node) { +    return node.GetTypeAnn() && IsBoolLike(*node.GetTypeAnn()); +} +  namespace {  using TIndentPrinter = std::function<void(TStringBuilder& res, size_t)>; diff --git a/ydb/library/yql/core/yql_expr_type_annotation.h b/ydb/library/yql/core/yql_expr_type_annotation.h index 453cb694af8..df2666bc95f 100644 --- a/ydb/library/yql/core/yql_expr_type_annotation.h +++ b/ydb/library/yql/core/yql_expr_type_annotation.h @@ -293,6 +293,9 @@ bool IsInstantEqual(const TTypeAnnotationNode& type);  bool IsFlowOrStream(const TTypeAnnotationNode& type);  bool IsFlowOrStream(const TExprNode& node); +bool IsBoolLike(const TTypeAnnotationNode& type); +bool IsBoolLike(const TExprNode& node); +  TString GetTypeDiff(const TTypeAnnotationNode& left, const TTypeAnnotationNode& right);  TString GetTypePrettyDiff(const TTypeAnnotationNode& left, const TTypeAnnotationNode& right);  TExprNode::TPtr ExpandType(TPositionHandle position, const TTypeAnnotationNode& type, TExprContext& ctx); | 
