Package gudusoft.gsqlparser.stmt
Class TCreateProcedureStmt
- All Implemented Interfaces:
IRelation,Visitable,Iterator<TSourceToken>
- Direct Known Subclasses:
TMssqlCreateProcedure
Create procedure statement.
存储过程如果是 $$ body $$ 形式的,有两种解析方法,
方法1,把 $$ body $$ 中的 body 在 lexical 阶段即分解为独立的 token, 整个 create procedure statement 在 parser 中一次性完成解析
采用这个方法的数据库: greenplum, postgres, redshift, snowflake
GSP Java version 2.8.9.3(2024-5-27) [Snowflake] support string literal delimiter $ or ' around procedure definition.
'' 中的存储过程代码被 {@link 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
- Postgres
- redshift
-
Nested Class Summary
Nested classes/interfaces inherited from class gudusoft.gsqlparser.TCustomSqlStatement
TCustomSqlStatement.SqlNormalizationProfile -
Field Summary
Fields inherited from class gudusoft.gsqlparser.stmt.TRoutine
language, LANGUAGE_PLPGSQL, LANGUAGE_SQL, LANGUAGE_UNKNOWN, returnDataTypeFields inherited from class gudusoft.gsqlparser.stmt.TBlockSqlStatement
blockBody, bodyStatements, declareStatements, exceptionClauseFields inherited from class gudusoft.gsqlparser.TCustomSqlStatement
dummytag, fromClause, fromSourceJoin, fromSourceTable, isctequery, isparsed, joins, parser, plsqlparser, relationAttributes, rootNode, semicolonended, sourcetokenlist, sqlstatementtype, stmtScope, tablesFields inherited from class gudusoft.gsqlparser.nodes.TParseTreeNode
dbvendor, doubleLinkedTokenListToString, nodeActionAppend, nodeActionInsert, nodeActionRemove, nodeActionUnknown, nodeActionUpdate, nodeActionUpdateText, nodeChangeEndToken, nodeChangeStartToken -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAccept a visitorvoidAccept a visitor to iterate this class and sub-nodes of this classintThe name that you give to the procedure that you are declaring or defining.booleanvoidsetForReplication(boolean isForReplication) voidsetProcedureName(TObjectName procedureName) voidsetProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions) Methods inherited from class gudusoft.gsqlparser.stmt.TRoutine
getReturnDataType, getRoutineBody, getRoutineBodyInConstant, getRoutineLanguage, getRoutineLanguageInConstant, getRoutineName, isBodyInSQL, isGaussDBSpInOracle, setReturnDataType, setRoutineBody, setRoutineBodyInConstant, setRoutineLanguage, setRoutineLanguageInConstant, setRoutineNameMethods inherited from class gudusoft.gsqlparser.stmt.TCommonStoredProcedureSqlStatement
isWrapped, setWrappedMethods inherited from class gudusoft.gsqlparser.stmt.TStoredProcedureSqlStatement
getParameterDeclarations, getProcHandle, setParameterDeclarations, setProcHandleMethods inherited from class gudusoft.gsqlparser.stmt.TBlockSqlStatement
getBlockBody, getBodyStatements, getDeclareStatements, getEndlabelName, getExceptionClause, getLabelName, getLabelNameStr, setBodyStatements, setDeclareStatements, setExceptionClauseMethods inherited from class gudusoft.gsqlparser.TCustomSqlStatement
addToTables, addWhereClause, analyzeFromTable, analyzeFromTable, analyzeJoin, analyzeTablename, analyzeTableOrJoin, asCanonical, checkNonQualifiedColumnReferenceInSubQueryOfUplevelStmt, clearError, computeSqlHash, 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, getQueryId, getRelationName, getRelations, getResultColumnList, getReturningClause, getSqlEnv, getSqlHash, getSqlHash, 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, setQueryId, setResultColumnList, setReturningClause, setSqlHash, setStmtScope, setTargetTable, setTopClause, setUsingVariableList, setVariableStack, setWhereClause, size, toNormalizedSql, toScript, VerticaStatementCanBeSeparatedByBeginEndPairMethods inherited from class gudusoft.gsqlparser.nodes.TParseTreeNode
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, toString2Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Iterator
forEachRemaining
-
Constructor Details
-
TCreateProcedureStmt
-
-
Method Details
-
getProcedureLanguage
-
getLinkSymbol
-
getObjfile
-
setProcedureOptions
-
getProcedureOptions
-
setForReplication
-
isForReplication
-
getStoredProcedureName
- Overrides:
getStoredProcedureNamein classTStoredProcedureSqlStatement
-
getProcedureName
The name that you give to the procedure that you are declaring or defining.- Returns:
-
doParseStatement
- Overrides:
doParseStatementin classTCommonStoredProcedureSqlStatement
-
accept
Description copied from class:TParseTreeNodeAccept a visitor- Specified by:
acceptin interfaceVisitable- Overrides:
acceptin classTBlockSqlStatement- Parameters:
v- visitor is a descendant class ofTParseTreeVisitor
-
acceptChildren
Description copied from class:TParseTreeNodeAccept a visitor to iterate this class and sub-nodes of this class- Specified by:
acceptChildrenin interfaceVisitable- Overrides:
acceptChildrenin classTBlockSqlStatement- Parameters:
v- visitor is a descendant class ofTParseTreeVisitor
-
setProcedureName
-