Package gudusoft.gsqlparser.nodes.mssql
Class TPartitionSplitMergeClause
Object
gudusoft.gsqlparser.nodes.TParseTreeNode
gudusoft.gsqlparser.nodes.mssql.TPartitionSplitMergeClause
- All Implemented Interfaces:
Visitable,Iterator<TSourceToken>
-
Nested Class Summary
Nested Classes -
Field Summary
Fields 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 classvoidtoString()将一个语法树节点(TParseTreeNode)转换回它对应的原始SQL字符串。 它通过遍历一个由startToken(起始词法单元)和endToken(结束词法单元)界定的双向链表来实现这一功能。Methods 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, getParentObjectName, getPlainText, getStartToken, getTokenCount, hasNext, 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, toScript, 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
-
TPartitionSplitMergeClause
public TPartitionSplitMergeClause()
-
-
Method Details
-
init
- Overrides:
initin classTParseTreeNode
-
getOperation
-
getBoundaryValue
-
toString
Description copied from class:TParseTreeNode将一个语法树节点(
TParseTreeNode)转换回它对应的原始SQL字符串。 它通过遍历一个由startToken(起始词法单元)和endToken(结束词法单元)界定的双向链表来实现这一功能。这个方法的设计采用了“两遍扫描”(Two-Pass)的策略,也就是使用了两个
while循环。 第一个循环是预处理阶段,用于清理格式;第二个循环则负责构建最终的字符串。第一个
while循环这个循环的主要目标是识别并“软删除”多余的换行符(newline tokens)。这种情况尤其在SQL被程序动态修改后容易出现。 这个循环本身不构建字符串,只负责分析和更新词法单元的状态。 其工作原理是:
- 遍历: 它从
startToken开始,通过getNextTokenInChain()方法遍历到endToken。 - 检测链表变化: 它通过比较当前和前一个词法单元的
posinlist(词法单元在原始完整列表中的位置索引)来判断链表是否“自然”。 如果不连续,意味着词法单元被插入或重排了,此时isChainModified标志位会被设为true。 - 标记换行符: 当遇到第一个换行符时,它会设置一个标志。如果紧接着又遇到了另一个换行符,并且此时链表已经被修改过, 那么它会将这个多余的换行符标记为待删除状态。这个逻辑能有效地将代码被修改后可能产生的多个连续换行压缩成一个。
第二个
while循环这个循环负责从(经过第一步清理后的)词法单元流中实际地构建最终的输出字符串。 其工作原理是:
- 遍历: 它再次遍历完全相同的词法单元序列。
- 构建字符串: 在将每个词法单元追加到
StringBuffer之前,它会进行检查。 - 跳过特定单元: 如果一个词法单元在第一个循环中被标记为待删除,或者它是一个注释(且配置为不包含注释),那么它将被跳过。
- 拼接字符串: 对于所有未被跳过的词法单元,它会将其字符串值追加到
StringBuffer中。
StringBuffer就包含了该语法树节点的最终、重构后的SQL文本。- Overrides:
toStringin classTParseTreeNode- Returns:
- 节点对应的SQL字符串。
- 遍历: 它从
-
accept
Description copied from class:TParseTreeNodeAccept a visitor- Specified by:
acceptin interfaceVisitable- Overrides:
acceptin classTParseTreeNode- 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 classTParseTreeNode- Parameters:
v- visitor is a descendant class ofTParseTreeVisitor
-