#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace NYson { class TYsonWriter; } namespace NKikimr { namespace NMiniKQL { class IFunctionRegistry; } } namespace NYql { struct TTypeAnnotationContext; struct TOperationStatistics; namespace NCommon { constexpr TStringBuf PgCatalogFileName = "_yql_pg_catalog"; struct TWriteTableSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode Temporary; NNodes::TMaybeNode IsBatch; NNodes::TMaybeNode Columns; NNodes::TMaybeNode ReturningList; NNodes::TMaybeNode PrimaryKey; NNodes::TMaybeNode PartitionBy; NNodes::TMaybeNode OrderBy; NNodes::TMaybeNode Filter; NNodes::TMaybeNode Update; NNodes::TMaybeNode Indexes; NNodes::TMaybeNode Changefeeds; NNodes::TCoNameValueTupleList Other; NNodes::TMaybeNode ColumnFamilies; NNodes::TMaybeNode ColumnsDefaultValues; NNodes::TMaybeNode TableSettings; NNodes::TMaybeNode AlterActions; NNodes::TMaybeNode TableType; NNodes::TMaybeNode PgFilter; TWriteTableSettings(const NNodes::TCoNameValueTupleList& other) : Other(other) {} }; struct TWriteSequenceSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode ValueType; NNodes::TMaybeNode Temporary; NNodes::TMaybeNode SequenceSettings; NNodes::TCoNameValueTupleList Other; TWriteSequenceSettings(const NNodes::TCoNameValueTupleList& other) : Other(other) {} }; struct TWriteTopicSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode TopicSettings; NNodes::TMaybeNode Consumers; NNodes::TMaybeNode AddConsumers; NNodes::TMaybeNode AlterConsumers; NNodes::TMaybeNode DropConsumers; NNodes::TCoNameValueTupleList Other; TWriteTopicSettings(const NNodes::TCoNameValueTupleList& other) : Other(other) {} }; struct TWriteReplicationSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode Targets; NNodes::TMaybeNode ReplicationSettings; NNodes::TCoNameValueTupleList Other; TWriteReplicationSettings(const NNodes::TCoNameValueTupleList& other) : Other(other) {} }; struct TWriteTransferSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode Source; NNodes::TMaybeNode Target; NNodes::TMaybeNode TransformLambda; NNodes::TMaybeNode TransferSettings; NNodes::TCoNameValueTupleList Other; TWriteTransferSettings(const NNodes::TCoNameValueTupleList& other) : Other(other) {} }; struct TWriteRoleSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode Roles; NNodes::TMaybeNode NewName; NNodes::TCoNameValueTupleList Other; TWriteRoleSettings(const NNodes::TCoNameValueTupleList& other) : Other(other) {} }; struct TWritePermissionSettings { NNodes::TMaybeNode Permissions; NNodes::TMaybeNode Paths; NNodes::TMaybeNode RoleNames; TWritePermissionSettings(NNodes::TMaybeNode&& permissions, NNodes::TMaybeNode&& paths, NNodes::TMaybeNode&& roleNames) : Permissions(std::move(permissions)) , Paths(std::move(paths)) , RoleNames(std::move(roleNames)) {} }; struct TWriteObjectSettings { NNodes::TMaybeNode Mode; NNodes::TCoNameValueTupleList Features; NNodes::TCoAtomList ResetFeatures; TWriteObjectSettings(NNodes::TMaybeNode&& mode, NNodes::TCoNameValueTupleList&& kvFeatures, NNodes::TCoAtomList&& resetFeatures) : Mode(std::move(mode)) , Features(std::move(kvFeatures)) , ResetFeatures(std::move(resetFeatures)) { } }; struct TCommitSettings { TPositionHandle Pos; NNodes::TMaybeNode Mode; NNodes::TMaybeNode Epoch; NNodes::TCoNameValueTupleList Other; TCommitSettings(NNodes::TCoNameValueTupleList other) : Other(other) {} NNodes::TCoNameValueTupleList BuildNode(TExprContext& ctx) const; bool EnsureModeEmpty(TExprContext& ctx); bool EnsureEpochEmpty(TExprContext& ctx); bool EnsureOtherEmpty(TExprContext& ctx); }; struct TPgObjectSettings { NNodes::TMaybeNode Mode; NNodes::TMaybeNode IfExists; TPgObjectSettings(NNodes::TMaybeNode&& mode, NNodes::TMaybeNode&& ifExists) : Mode(std::move(mode)) , IfExists(std::move(ifExists)) {} }; const TStructExprType* BuildCommonTableListType(TExprContext& ctx); TExprNode::TPtr BuildTypeExpr(TPositionHandle pos, const TTypeAnnotationNode& ann, TExprContext& ctx); bool HasResOrPullOption(const TExprNode& node, const TStringBuf& option); TVector GetResOrPullColumnHints(const TExprNode& node); TWriteTableSettings ParseWriteTableSettings(NNodes::TExprList node, TExprContext& ctx); TWriteTopicSettings ParseWriteTopicSettings(NNodes::TExprList node, TExprContext& ctx); TWriteReplicationSettings ParseWriteReplicationSettings(NNodes::TExprList node, TExprContext& ctx); TWriteTransferSettings ParseWriteTransferSettings(NNodes::TExprList node, TExprContext& ctx); TWriteRoleSettings ParseWriteRoleSettings(NNodes::TExprList node, TExprContext& ctx); TWriteObjectSettings ParseWriteObjectSettings(NNodes::TExprList node, TExprContext& ctx); TWritePermissionSettings ParseWritePermissionsSettings(NNodes::TExprList node, TExprContext& ctx); TCommitSettings ParseCommitSettings(NNodes::TCoCommit node, TExprContext& ctx); TPgObjectSettings ParsePgObjectSettings(NNodes::TExprList node, TExprContext& ctx); TWriteSequenceSettings ParseSequenceSettings(NNodes::TExprList node, TExprContext& ctx); TString FullTableName(const TStringBuf& cluster, const TStringBuf& table); IDataProvider::TFillSettings GetFillSettings(const TExprNode& node); NYson::EYsonFormat GetYsonFormat(const IDataProvider::TFillSettings& fillSettings); TVector GetStructFields(const TTypeAnnotationNode* type); void TransformerStatsToYson(const TString& name, const IGraphTransformer::TStatistics& stats, NYson::TYsonWriter& writer); TString TransformerStatsToYson(const IGraphTransformer::TStatistics& stats, NYson::EYsonFormat format = NYson::EYsonFormat::Pretty); void FillSecureParams(const TExprNode::TPtr& node, const TTypeAnnotationContext& types, THashMap& secureParams); bool FillUsedFiles(const TExprNode& node, TUserDataTable& files, const TTypeAnnotationContext& types, TExprContext& ctx, const TUserDataTable& crutches = {}); std::pair FreezeUsedFiles(const TExprNode& node, TUserDataTable& files, const TTypeAnnotationContext& types, TExprContext& ctx, const std::function& urlDownloadFilter, const TUserDataTable& crutches = {}); bool FreezeUsedFilesSync(const TExprNode& node, TUserDataTable& files, const TTypeAnnotationContext& types, TExprContext& ctx, const std::function& urlDownloadFilter); void WriteColumns(NYson::TYsonWriter& writer, const NNodes::TExprBase& columns); TString SerializeExpr(TExprContext& ctx, const TExprNode& expr, bool withTypes = false); TString ExprToPrettyString(TExprContext& ctx, const TExprNode& expr); void WriteStream(NYson::TYsonWriter& writer, const TExprNode* node, const TExprNode* source); void WriteStreams(NYson::TYsonWriter& writer, TStringBuf name, const NNodes::TCoLambda& lambda); double GetDataReplicationFactor(const TExprNode& lambda, TExprContext& ctx); void WriteStatistics(NYson::TYsonWriter& writer, bool totalOnly, const THashMap& statistics, bool addTotalKey = true, bool addExternalMap = true); void WriteStatistics(NYson::TYsonWriter& writer, const TOperationStatistics& statistics); bool ValidateCompressionForInput(std::string_view format, std::string_view compression, TExprContext& ctx); bool ValidateCompressionForOutput(std::string_view format, std::string_view compression, TExprContext& ctx); bool ValidateFormatForInput(std::string_view format, const TStructExprType* schemaStructRowType, const std::function& excludeFields, TExprContext& ctx); bool ValidateFormatForOutput(std::string_view format, TExprContext& ctx); bool ValidateIntervalUnit(std::string_view unit, TExprContext& ctx); bool ValidateDateTimeFormatName(std::string_view formatName, TExprContext& ctx); bool ValidateTimestampFormatName(std::string_view formatName, TExprContext& ctx); bool TransformPgSetItemOption( const NNodes::TCoPgSelect& pgSelect, TStringBuf optionName, std::function lambda ); TExprNode::TPtr GetSetItemOption(const NNodes::TCoPgSelect& pgSelect, TStringBuf optionName); TExprNode::TPtr GetSetItemOptionValue(const NNodes::TExprBase& setItemOption); bool NeedToRenamePgSelectColumns(const NNodes::TCoPgSelect& pgSelect); bool RenamePgSelectColumns( const NNodes::TCoPgSelect& node, TExprNode::TPtr& output, const TMaybe& tableColumnOrder, TExprContext& ctx, TTypeAnnotationContext& types); } // namespace NCommon } // namespace NYql