public class TCreateProcedureStmt extends TRoutine
TGSqlParser.expandDollarString()
方法处理,处理后的代码被解析。
2024/6/22, snowflake create procedure 的 body 如果是采用 $$ body $$, 在 lexer 中分解为独立的 token
方法2,把 $$ body $$ 作为一个整体字符串看待,需要进行二次解析, 都是调用 postgres parser 进行的分析。采用这种方法是,body中用到的 select
等语句用的是 postgres的语法分析,而不是原数据库 select 语句的语法分析,这可能导致不正确的解析结果。
这种方法为历史遗留问题,需要都改为方法1。目前采用这种方法的数据库有:
netezza,
vertica
Supported databases
language, LANGUAGE_PLPGSQL, LANGUAGE_SQL, LANGUAGE_UNKNOWN, returnDataType
blockBody, bodyStatements, declareStatements, exceptionClause
dummytag, fromClause, fromSourceJoin, fromSourceTable, isparsed, joins, parser, plsqlparser, relationAttributes, rootNode, sourcetokenlist, sqlstatementtype, stmtScope, tables
dbvendor, doubleLinkedTokenListToString, nodeActionAppend, nodeActionInsert, nodeActionRemove, nodeActionUnknown, nodeActionUpdate, nodeActionUpdateText, nodeChangeEndToken, nodeChangeStartToken
Constructor and Description |
---|
TCreateProcedureStmt(EDbVendor dbvendor) |
Modifier and Type | Method and Description |
---|---|
void |
accept(TParseTreeVisitor v)
Accept a visitor
|
void |
acceptChildren(TParseTreeVisitor v)
Accept a visitor to iterate this class and sub-nodes of this class
|
int |
doParseStatement(TCustomSqlStatement psql) |
TConstant |
getLinkSymbol() |
TConstant |
getObjfile() |
TConstant |
getProcedureLanguage() |
TObjectName |
getProcedureName()
The name that you give to the procedure that you are declaring or defining.
|
TPTNodeList<TProcedureOption> |
getProcedureOptions() |
TObjectName |
getStoredProcedureName() |
boolean |
isForReplication() |
void |
setForReplication(boolean isForReplication) |
void |
setProcedureName(TObjectName procedureName) |
void |
setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions) |
getReturnDataType, getRoutineBody, getRoutineBodyInConstant, getRoutineLanguage, getRoutineLanguageInConstant, getRoutineName, isBodyInSQL, isGaussDBSpInOracle, setReturnDataType, setRoutineBody, setRoutineBodyInConstant, setRoutineLanguage, setRoutineLanguageInConstant, setRoutineName
isWrapped, setWrapped
getParameterDeclarations, getProcHandle, setParameterDeclarations, setProcHandle
getBlockBody, getBodyStatements, getDeclareStatements, getEndlabelName, getExceptionClause, getLabelName, getLabelNameStr, setBodyStatements, setDeclareStatements, setExceptionClause
addToTables, addWhereClause, analyzeFromTable, analyzeFromTable, analyzeJoin, analyzeTablename, analyzeTableOrJoin, asCanonical, checkNonQualifiedColumnReferenceInSubQueryOfUplevelStmt, clearError, dochecksyntax, findTable, fireOnMetaDatabaseTableColumn, getAncestorStmt, getAttributes, getColumnsInTable, getColumnsInTable, getCteIncludeThisStmt, getCteList, getDaxFunctionStack, getErrorCount, getErrormessage, getExpandedResultColumns, getFirstPhysicalTable, getFrameStack, getFromClause, getFromSourceJoin, getFromSourceTable, getGlobalScope, getIndexColumns, getJoins, getOrphanColumns, getOutputClause, getParentObjectName, getParentStmt, getRelationName, getRelations, getResultColumnList, getReturningClause, getSqlEnv, getStatements, getStmtScope, getSymbolTable, getSyntaxErrors, getSyntaxHints, getTables, getTargetTable, getTokenList, getTopClause, getTopStatement, getUsingVariableList, getVariableStack, getWhereClause, isathenaplsql, isBigQueryplsql, isdatabricksplsql, isGaussDBStoredProcedure, isgreeplumplsql, isnzplsql, isoracleplsql, ispgplsql, isprestoplsql, issnowflakeplsql, isTableACTE, isverticaplsql, linkColumnReferenceToTable, linkColumnToTable, linkToFirstTable, locateVariableOrParameter, locateVariableOrParameter, OracleStatementCanBeSeparatedByBeginEndPair, parseerrormessagehandle, parsestatement, parsestatement, searchCTEList, searchDaxVariableInStack, searchFunctionInSQLEnv, setAlreadyAddToParent, setCteIncludeThisStmt, setCteList, setEndlabelName, setFrameStack, setFromClause, setLabelName, setOutputClause, setParentStmt, setParentStmtToNull, setResultColumnList, setReturningClause, setStmtScope, setTargetTable, setTopClause, setUsingVariableList, setVariableStack, setWhereClause, size, toScript, VerticaStatementCanBeSeparatedByBeginEndPair
addAllMyTokensToTokenList, addToTokenChain, appendNewNode, calculateTokenCount, doAppendNewNode, doParse, fastSetString, getAnchorNode, getColumnNo, getCommentAfterNode, getCommentBeforeNode, getCompactString, getDummyTag, getEndToken, getEvaluateDatatype, getEvalValue, getGsqlparser, getLineNo, getLocation, getMd5, getNodeStatus, getNodeType, getPlainText, getStartToken, getTokenCount, hasNext, init, init, init, init, init, init, insertAfterAToken, insertNewNodeBeforeMe, isChanged, isTokensInChain, next, refreshAllNodesTokenCount, remove, removeAllMyTokensFromTokenList, removeTokens, removeTokensBetweenNodes, removeTokensBetweenToken, replaceWithNewNode, resetIterator, setAnchorNode, setChanged, setDummyTag, setEndToken, setEndToken, setEndToken, setEndToken, setEndToken, setEndTokenDirectly, setEvaluateDatatype, setEvalValue, setGsqlparser, setIncludingComment, setLocation, setNewSubNode, setNodeStatus, setNodeType, setParent, setPlainText, setStartToken, setStartToken, setStartToken, setStartToken, setStartTokenDirectly, setString, setString2, subNodeInNode, toString, toString2
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
forEachRemaining
public TCreateProcedureStmt(EDbVendor dbvendor)
public TConstant getProcedureLanguage()
public TConstant getLinkSymbol()
public TConstant getObjfile()
public void setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions)
public TPTNodeList<TProcedureOption> getProcedureOptions()
public void setForReplication(boolean isForReplication)
public boolean isForReplication()
public TObjectName getStoredProcedureName()
getStoredProcedureName
in class TStoredProcedureSqlStatement
public TObjectName getProcedureName()
public int doParseStatement(TCustomSqlStatement psql)
doParseStatement
in class TCommonStoredProcedureSqlStatement
public void accept(TParseTreeVisitor v)
TParseTreeNode
accept
in interface Visitable
accept
in class TParseTreeNode
v
- visitor is a descendant class of TParseTreeVisitor
public void acceptChildren(TParseTreeVisitor v)
TParseTreeNode
acceptChildren
in interface Visitable
acceptChildren
in class TParseTreeNode
v
- visitor is a descendant class of TParseTreeVisitor
public void setProcedureName(TObjectName procedureName)