public override bool Visit(Bracket node) { // SQLをもたないかっこはそのまま if (!node.HasQuery) { AddResultSql(node.OriginalValue); return base.Visit(node); } if (node.Value[0] == '(') { //TODO 外だしする Regex regex = new Regex("(?<target>\\t*,?)\\t"); Match match = regex.Match(_currentLine); if (match.Success) { // カンマのあとのタブを消す _currentLine = match.Groups["target"].Value; } AddResultSql(node.Value); // +3はPadが切り捨て処理なので切り上げになる _Indents.Push(_tabTool.Pad(string.Empty,_currentLine.Length+3)); AddNewLineResultSql(); } else { _Indents.Pop(); _LeftIndentSize.Pop(); AddNewLineResultSql(); AddResultSql(node.Value); } return base.Visit(node); }
private void SetParentOpenBracket(IAstNode node) { // Statementなど接続ノードはValueが空なのでBracket判定が必要 if (node.GetType() == typeof(Bracket) && node.Value[0] == '(') { Bracket openNode = (Bracket)node; // 自分に対応するOpenかっこをみつけたら終了 HasQuery = openNode.HasQuery; ParentNode = openNode.ParentNode; Level = openNode.ParentNode.Level; ParentNode.SetParentInChildNode(this); } else if (node.ParentNode != null) { // みつかるまで、親を探す SetParentOpenBracket(node.ParentNode); } // なにもみつからなければ、親はからになる }
public virtual bool Visit(Bracket node) { return true; }
public virtual bool Transform(Bracket node) { return true; }