Example #1
0
        public QsiExpressionNode VisitSubqueryComparisonPredicate(SubqueryComparisonPredicate subqueryComparisonPredicate)
        {
            var expressionNode = TreeHelper.Create <QsiBinaryExpressionNode>(ln =>
            {
                ln.Left.SetValue(VisitScalarExpression(subqueryComparisonPredicate.Expression));
                ln.Right.SetValue(VisitScalarSubquery(subqueryComparisonPredicate.Subquery));

                ln.Operator = ConvertBooleanComparisonType(subqueryComparisonPredicate.ComparisonType);
            });

            if (subqueryComparisonPredicate.SubqueryComparisonPredicateType == SubqueryComparisonPredicateType.None)
            {
                SqlServerTree.PutFragmentSpan(expressionNode, subqueryComparisonPredicate);
                return(expressionNode);
            }

            return(TreeHelper.Create <QsiInvokeExpressionNode>(n =>
            {
                n.Member.SetValue(TreeHelper.CreateFunction(subqueryComparisonPredicate.SubqueryComparisonPredicateType switch
                {
                    SubqueryComparisonPredicateType.All => SqlServerKnownFunction.All,
                    SubqueryComparisonPredicateType.Any => SqlServerKnownFunction.Any,
                    _ => throw new InvalidOperationException()
                }));

                n.Parameters.Add(expressionNode);
                SqlServerTree.PutFragmentSpan(n, subqueryComparisonPredicate);
            }));
Example #2
0
 public override void Visit(SubqueryComparisonPredicate node) { this.action(node); }
 public override void ExplicitVisit(SubqueryComparisonPredicate fragment)
 {
     _fragments.Add(fragment);
 }