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, returnDataTypeblockBody, bodyStatements, declareStatements, exceptionClausedummytag, fromClause, fromSourceJoin, fromSourceTable, isparsed, joins, parser, plsqlparser, relationAttributes, rootNode, sourcetokenlist, sqlstatementtype, stmtScope, tablesdbvendor, 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, setRoutineNameisWrapped, setWrappedgetParameterDeclarations, getProcHandle, setParameterDeclarations, setProcHandlegetBlockBody, getBodyStatements, getDeclareStatements, getEndlabelName, getExceptionClause, getLabelName, getLabelNameStr, setBodyStatements, setDeclareStatements, setExceptionClauseaddToTables, 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, VerticaStatementCanBeSeparatedByBeginEndPairaddAllMyTokensToTokenList, 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, toString2clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitforEachRemainingpublic 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 TStoredProcedureSqlStatementpublic TObjectName getProcedureName()
public int doParseStatement(TCustomSqlStatement psql)
doParseStatement in class TCommonStoredProcedureSqlStatementpublic void accept(TParseTreeVisitor v)
TParseTreeNodeaccept in interface Visitableaccept in class TParseTreeNodev - visitor is a descendant class of TParseTreeVisitorpublic void acceptChildren(TParseTreeVisitor v)
TParseTreeNodeacceptChildren in interface VisitableacceptChildren in class TParseTreeNodev - visitor is a descendant class of TParseTreeVisitorpublic void setProcedureName(TObjectName procedureName)