override sealed public void Visit(PlaceHolderPredicate predicate) { // // プレースホルダに当てはまるPredicate式にvisitorを適用する // if (!_placeHolders.ContainsKey(predicate.LabelName)) { this.VisitOnPlaceHolder(predicate); return; } if (!(_placeHolders[predicate.LabelName] is Predicate)) { throw new CannotBuildASTException("Type of placeholder value is mismatched."); } var placeValue = (Predicate)(_placeHolders[predicate.LabelName]); if (this.NeedsBracket(predicate.Parent, placeValue)) { // 定義されたPredicate演算子の優先順位に基づき、 // 必要であればプレースホルダ値を括弧で囲む (new BracketedPredicate(placeValue)).Accept(this); } else { placeValue.Accept(this); } }
protected override Predicate Place(PlaceHolderPredicate ph) { // 0=1は全てのPlaceHolderPredicateに適用できる // FALSE値に置き換えることでSELECT文の高速化を期待できる return(new BinaryOpPredicate(new UNumericLiteral("0") , PredicateOperator.Equal , new UNumericLiteral("1"))); }
private Predicate PlaceInCollate(PlaceHolderPredicate ph) { var predicate = this.Place(ph); if (predicate.GetType() == typeof(AndPredicate) || predicate.GetType() == typeof(OrPredicate)) { predicate = new BracketedPredicate(predicate); } return(predicate); }
private Predicate PlaceInAnd(PlaceHolderPredicate ph) { var predicate = this.Place(ph); if (predicate.GetType() == typeof(OrPredicate)) { // OR演算式の場合は式全体を括弧で囲んでAND節をつなげる predicate = new BracketedPredicate(predicate); } return(predicate); }
public void Visit(PlaceHolderPredicate predicate) { // プレースホルダに当てはまるPredicate式に_visitorを適用する if (_placeHolders.ContainsKey(predicate.LabelName)) { _placeHolders[predicate.LabelName].Accept(_visitor); } else { _visitor.Visit(predicate); } }
protected virtual Predicate Place(PlaceHolderPredicate ph) { var placeHolderName = ph.LabelName; if (!_placeHolders.ContainsKey(placeHolderName)) { return(ph); } var placeHolderValue = _placeHolders[placeHolderName]; if (placeHolderValue is Expr) { throw new CannotBuildASTException("Type of placeholder value is mismatched."); } // 適用したプレースホルダを記録する if (!_placedHolders.ContainsKey(placeHolderName)) { _placedHolders.Add(placeHolderName, placeHolderValue); } return((Predicate)placeHolderValue); }
virtual public void Visit(PlaceHolderPredicate predicate) { }
public override void Visit(PlaceHolderPredicate predicate) { var node = new PlaceHolderPredicate(predicate.Label, predicate.Comments.Clone()); _stack.Push(node); }
virtual protected void VisitOnPlaceHolder(PlaceHolderPredicate predicate) { }
public override void Visit(PlaceHolderPredicate predicate) { this.GetPlaceHolderInfo(predicate.LabelName); }