public class MergeSemanticAnalyzer extends RewriteSemanticAnalyzer
SemanticAnalyzer that just handles
merge statements. It works by rewriting the updates and deletes into insert statements (since
they are actually inserts) and then doing some patch up to make them work as merges instead.RewriteSemanticAnalyzer.ColumnAppender, RewriteSemanticAnalyzer.NativeAcidColumnAppender, RewriteSemanticAnalyzer.NonNativeAcidColumnAppender, RewriteSemanticAnalyzer.ReparseResultCalcitePlanner.ASTSearcher, CalcitePlanner.CalcitePlannerAction, CalcitePlanner.InputContext, CalcitePlanner.PreCboCtxSemanticAnalyzer.GenericUDAFInfo, SemanticAnalyzer.MaterializationRebuildModeBaseSemanticAnalyzer.AnalyzeRewriteContext, BaseSemanticAnalyzer.TableSpecDELETE_PREFIX, INDENT, LOG, SUB_QUERY_ALIAS, useSuperaliasToCTEs, analyzeRewrite, ast, autogenColAliasPrfxLbl, createVwDesc, defaultJoinMerge, disableJoinMerge, DUMMY_DATABASE, DUMMY_TABLE, forViewCreation, mvRebuildDbName, mvRebuildMode, mvRebuildName, opParseCtx, originalResultSchema, prunedPartitions, resultSchema, SUBQUERY_TAG_1, SUBQUERY_TAG_2, topOps, topOpsCopy, unparseTranslator, VALUES_TMP_TABLE_NAME_PREFIX, viewSelectacidFileSinks, cacheUsage, cContext, columnAccessInfo, conf, console, ctx, db, fetchTask, idToTableNameMap, inputs, linfo, outputs, prepareQuery, queryProperties, queryState, rootTasks, STATIC_LOG, tableAccessInfo, transactionalInQuery, txnManager, updateColumnAccessInfo| Modifier and Type | Method and Description |
|---|---|
protected int |
addDestNamePrefixOfUpdate(int insClauseIdx,
Context rewrittenCtx)
This sets the destination name prefix for update clause.
|
protected String |
addWhereClauseOfUpdate(StringBuilder rewrittenQueryStr,
String onClauseAsString,
ASTNode whenMatchedUpdateClause,
String deleteExtraPredicate) |
protected boolean |
allowOutputMultipleTimes() |
void |
analyze(ASTNode tree,
Table targetTable,
ASTNode tableNameNode) |
protected void |
analyzeMerge(ASTNode tree,
Table targetTable,
ASTNode targetNameNode)
Here we take a Merge statement AST and generate a semantically equivalent multi-insert
statement to execute.
|
protected boolean |
enableColumnStatsCollecting() |
protected ASTNode |
getTargetTableNode(ASTNode tree) |
protected ASTNode |
getWhenClauseOperation(ASTNode whenClause) |
protected String |
handleDelete(ASTNode whenMatchedDeleteClause,
StringBuilder rewrittenQueryStr,
String onClauseAsString,
String updateExtraPredicate,
String hintStr,
RewriteSemanticAnalyzer.ColumnAppender columnAppender) |
protected String |
handleUpdate(ASTNode whenMatchedUpdateClause,
StringBuilder rewrittenQueryStr,
String onClauseAsString,
String deleteExtraPredicate,
String hintStr,
RewriteSemanticAnalyzer.ColumnAppender columnAppender,
String targetName,
List<String> values) |
addColsToSelect, addColsToSelect, addColsToSelect, addPartitionColsAsValues, analyzeInternal, analyzeRewrittenTree, appendInsertBranch, appendSortBy, appendTarget, checkValidSetClauseTarget, collectSetColumnsAndExpressions, createRewrittenQueryStrBuilder, findLHSofAssignment, getColumnAppender, getMatchedText, getSimpleTableName, getTable, isAliased, markReadEntityForUpdate, parseRewrittenQuery, patchProjectionForUpdate, setUpAccessControlInfoForUpdate, updateOutputs, validateTargetTablecreatePlanner, createPlannerAction, fixUpAfterCbo, genLogicalPlan, getOptimizedSql, getTableObjectByName, resetCalciteConfiguration, warmupaddPartitionColsToInsert, addPartitionColsToInsert, analyzeCreateView, compilePlan, executeUnparseTranlations, forViewCreation, generateErrorMessage, genExprNodeDesc, genFileSinkPlan, getAcidAnalyzeTable, getAliasId, getAllInputs, getAllOutputs, getAllRootTasks, getColNameToDefaultValueMap, getColumnInternalName, getDefaultConstraints, getDummyTable, getFullTableNameForSQL, getGenericUDAFEvaluator, getGenericUDAFEvaluator2, getGenericUDAFInfo, getGenericUDAFInfo2, getInvalidAutomaticRewritingMaterializationReason, getInvalidResultCacheReason, getLoadFileWork, getLoadTableWork, getOpContext, getOriginalResultSchema, getParseContext, getQB, getResultSchema, getSinkOp, getTableObjectByName, getTargetTable, getTopOps, getViewAliasToInput, groupByDescModeToUDAFMode, hasGroupBySibling, init, isConstantParameterInAggregationParameters, isInsertInto, isSelectDistinct, isValidAutomaticRewritingMaterialization, isValidQueryCaching, parseSelect, processNoScanCommand, processTableColumnNames, reset, rewriteGroupingFunctionAST, saveViewDefinition, setAST, setBit, setInvalidAutomaticRewritingMaterializationReason, setInvalidResultCacheReason, setLoadFileWork, setLoadTableWork, startAnalysis, translateFieldDesc, updating, validateaddPropertyReadEntry, analyze, analyzeStoredAdDirs, charSetString, checkColumnName, constructListBucketingCtx, createFetchTask, createHiveDB, endAnalysis, escapeSQLString, findTabRefIdxs, getAcidDdlDesc, getAcidFileSinks, getAutoCommitValue, getCacheUsage, getCboInfo, getColumnAccessInfo, getColumnNames, getColumnNamesOrder, getColumns, getColumns, getColumns, getCtx, getDatabase, getDatabase, getDataConnector, getDataConnector, getDb, getDbTableNamePair, getFetchTask, getIdToTableNameMap, getInputs, getLineageInfo, getOutputs, getPartitionSpecs, getPartSpec, getProps, getQualifiedTableName, getQualifiedTableName, getQueryProperties, getQueryState, getRootTasks, getSimpleTableNameBase, getTable, getTable, getTable, getTable, getTable, getTable, getTableAccessInfo, getTableAlias, getTxnMgr, getTypeStringFromAST, getUnescapedName, getUnescapedName, getUnescapedUnqualifiedTableName, getUpdateColumnAccessInfo, getValidatedPartSpec, hasTransactionalInQuery, initCtx, isPrepareQuery, isValidPrefixSpec, raiseWrongType, readProps, setAutoCommitValue, setCacheUsage, setColumnAccessInfo, setFetchTask, setLineageInfo, setTableAccessInfo, setUpdateColumnAccessInfo, skipAuthorization, stripQuotes, toReadEntity, toReadEntity, toReadEntity, toWriteEntity, toWriteEntity, toWriteEntity, tryQualifyPath, unescapeIdentifier, unescapeSQLString, validatePartColumnType, validatePartSpec, validateUnsupportedPartitionClauseprotected ASTNode getTargetTableNode(ASTNode tree)
getTargetTableNode in class RewriteSemanticAnalyzerpublic void analyze(ASTNode tree, Table targetTable, ASTNode tableNameNode) throws SemanticException
analyze in class RewriteSemanticAnalyzerSemanticExceptionprotected void analyzeMerge(ASTNode tree, Table targetTable, ASTNode targetNameNode) throws SemanticException
SemanticExceptionprotected int addDestNamePrefixOfUpdate(int insClauseIdx,
Context rewrittenCtx)
insClauseIdx - index of insert clause in the rewritten multi-insert represents the merge update clause.rewrittenCtx - the Context stores the prefixesprotected String handleUpdate(ASTNode whenMatchedUpdateClause, StringBuilder rewrittenQueryStr, String onClauseAsString, String deleteExtraPredicate, String hintStr, RewriteSemanticAnalyzer.ColumnAppender columnAppender, String targetName, List<String> values)
protected String addWhereClauseOfUpdate(StringBuilder rewrittenQueryStr, String onClauseAsString, ASTNode whenMatchedUpdateClause, String deleteExtraPredicate)
protected String handleDelete(ASTNode whenMatchedDeleteClause, StringBuilder rewrittenQueryStr, String onClauseAsString, String updateExtraPredicate, String hintStr, RewriteSemanticAnalyzer.ColumnAppender columnAppender)
onClauseAsString - - because there is no clone() and we need to use in multiple placesupdateExtraPredicate - - see notes at callerprotected boolean allowOutputMultipleTimes()
allowOutputMultipleTimes in class SemanticAnalyzerprotected boolean enableColumnStatsCollecting()
enableColumnStatsCollecting in class SemanticAnalyzerCopyright © 2022 The Apache Software Foundation. All rights reserved.