public class TMdxEmptyNode extends TMdxExpNode
dbvendor, doubleLinkedTokenListToString, nodeActionAppend, nodeActionInsert, nodeActionRemove, nodeActionUnknown, nodeActionUpdate, nodeActionUpdateText, nodeChangeEndToken, nodeChangeStartToken| Constructor and Description |
|---|
TMdxEmptyNode() |
| 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
|
EMdxDataType |
getMdxDataType() |
String |
toString()
将一个语法树节点(
TParseTreeNode)转换回它对应的原始SQL字符串。
它通过遍历一个由 startToken(起始词法单元)和 endToken(结束词法单元)界定的双向链表来实现这一功能。 |
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, 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, toString2clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitforEachRemainingpublic TMdxEmptyNode()
public EMdxDataType getMdxDataType()
getMdxDataType in class TMdxExpNodepublic String toString()
TParseTreeNode
将一个语法树节点(TParseTreeNode)转换回它对应的原始SQL字符串。
它通过遍历一个由 startToken(起始词法单元)和 endToken(结束词法单元)界定的双向链表来实现这一功能。
这个方法的设计采用了“两遍扫描”(Two-Pass)的策略,也就是使用了两个 while 循环。
第一个循环是预处理阶段,用于清理格式;第二个循环则负责构建最终的字符串。
while 循环这个循环的主要目标是识别并“软删除”多余的换行符(newline tokens)。这种情况尤其在SQL被程序动态修改后容易出现。 这个循环本身不构建字符串,只负责分析和更新词法单元的状态。 其工作原理是:
startToken 开始,通过 getNextTokenInChain() 方法遍历到 endToken。posinlist(词法单元在原始完整列表中的位置索引)来判断链表是否“自然”。
如果不连续,意味着词法单元被插入或重排了,此时 isChainModified 标志位会被设为 true。while 循环这个循环负责从(经过第一步清理后的)词法单元流中实际地构建最终的输出字符串。 其工作原理是:
StringBuffer 之前,它会进行检查。StringBuffer 中。StringBuffer 就包含了该语法树节点的最终、重构后的SQL文本。
toString in class TParseTreeNodepublic void accept(TParseTreeVisitor v)
TParseTreeNodeaccept in interface Visitableaccept in class TMdxExpNodev - visitor is a descendant class of TParseTreeVisitorpublic void acceptChildren(TParseTreeVisitor v)
TParseTreeNodeacceptChildren in interface VisitableacceptChildren in class TMdxExpNodev - visitor is a descendant class of TParseTreeVisitor