//---------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
namespace System.Data.Common.EntitySql.AST
{
using System;
using System.Globalization;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common.CommandTrees;
using System.Diagnostics;
///
/// Represents invocation expression: expr(...)
///
internal sealed class MethodExpr : GroupAggregateExpr
{
private readonly Node _expr;
private readonly NodeList _args;
private readonly NodeList _relationships;
///
/// Initializes method ast node.
///
internal MethodExpr(Node expr,
DistinctKind distinctKind,
NodeList args) : this (expr, distinctKind, args, null)
{ }
///
/// Intializes a method ast node with relationships.
///
internal MethodExpr(Node expr,
DistinctKind distinctKind,
NodeList args,
NodeList relationships) : base(distinctKind)
{
Debug.Assert(expr != null, "expr != null");
Debug.Assert(args == null || args.Count > 0, "args must be null or a non-empty list");
_expr = expr;
_args = args;
_relationships = relationships;
}
///
/// For the following expression: "a.b.c.Foo()", returns "a.b.c.Foo".
///
internal Node Expr
{
get { return _expr; }
}
///
/// Argument list.
///
internal NodeList Args
{
get { return _args; }
}
///
/// True if there are associated relationship expressions.
///
internal bool HasRelationships
{
get { return null != _relationships && _relationships.Count > 0; }
}
///
/// Optional relationship list.
///
internal NodeList Relationships
{
get { return _relationships; }
}
}
}