536cd135cc
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
117 lines
4.5 KiB
C#
117 lines
4.5 KiB
C#
//---------------------------------------------------------------------
|
|
// <copyright file="DbFunctionCommandTree.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//
|
|
// @owner Microsoft
|
|
// @backupOwner Microsoft
|
|
//---------------------------------------------------------------------
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
using System.Data.Metadata.Edm;
|
|
using System.Data.Common.CommandTrees.Internal;
|
|
using System.Linq;
|
|
|
|
namespace System.Data.Common.CommandTrees
|
|
{
|
|
|
|
/// <summary>
|
|
/// Represents a function invocation expressed as a canonical command tree
|
|
/// </summary>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")]
|
|
public sealed class DbFunctionCommandTree : DbCommandTree
|
|
{
|
|
private readonly EdmFunction _edmFunction;
|
|
private readonly TypeUsage _resultType;
|
|
private readonly System.Collections.ObjectModel.ReadOnlyCollection<string> _parameterNames;
|
|
private readonly System.Collections.ObjectModel.ReadOnlyCollection<TypeUsage> _parameterTypes;
|
|
|
|
/// <summary>
|
|
/// Constructs a new DbFunctionCommandTree that uses the specified metadata workspace, data space and function metadata
|
|
/// </summary>
|
|
/// <param name="metadata">The metadata workspace that the command tree should use.</param>
|
|
/// <param name="dataSpace">The logical 'space' that metadata in the expressions used in this command tree must belong to.</param>
|
|
/// <param name="edmFunction"></param>
|
|
/// <param name="resultType"></param>
|
|
/// <param name="parameters"></param>
|
|
/// <exception cref="ArgumentNullException"><paramref name="metadata"/>, <paramref name="dataSpace"/> or <paramref name="edmFunction"/> is null</exception>
|
|
/// <exception cref="ArgumentException"><paramref name="dataSpace"/> does not represent a valid data space or
|
|
/// <paramref name="edmFunction">is a composable function</paramref></exception>
|
|
/*CQT_PUBLIC_API(*/internal/*)*/ DbFunctionCommandTree(MetadataWorkspace metadata, DataSpace dataSpace, EdmFunction edmFunction, TypeUsage resultType, IEnumerable<KeyValuePair<string, TypeUsage>> parameters)
|
|
: base(metadata, dataSpace)
|
|
{
|
|
EntityUtil.CheckArgumentNull(edmFunction, "edmFunction");
|
|
|
|
_edmFunction = edmFunction;
|
|
_resultType = resultType;
|
|
|
|
List<string> paramNames = new List<string>();
|
|
List<TypeUsage> paramTypes = new List<TypeUsage>();
|
|
if (parameters != null)
|
|
{
|
|
foreach (KeyValuePair<string, TypeUsage> paramInfo in parameters)
|
|
{
|
|
paramNames.Add(paramInfo.Key);
|
|
paramTypes.Add(paramInfo.Value);
|
|
}
|
|
}
|
|
|
|
_parameterNames = paramNames.AsReadOnly();
|
|
_parameterTypes = paramTypes.AsReadOnly();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the <see cref="EdmFunction"/> that represents the function to invoke
|
|
/// </summary>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")]
|
|
public EdmFunction EdmFunction
|
|
{
|
|
get
|
|
{
|
|
return _edmFunction;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the result type of the function; currently constrained to be a Collection of
|
|
/// RowTypes. Unlike typical RowType instance, merely indicates name/type not parameter
|
|
/// order.
|
|
/// </summary>
|
|
public TypeUsage ResultType
|
|
{
|
|
get
|
|
{
|
|
return _resultType;
|
|
}
|
|
}
|
|
|
|
internal override DbCommandTreeKind CommandTreeKind
|
|
{
|
|
get { return DbCommandTreeKind.Function; }
|
|
}
|
|
|
|
internal override IEnumerable<KeyValuePair<string, TypeUsage>> GetParameters()
|
|
{
|
|
for (int idx = 0; idx < this._parameterNames.Count; idx++)
|
|
{
|
|
yield return new KeyValuePair<string, TypeUsage>(this._parameterNames[idx], this._parameterTypes[idx]);
|
|
}
|
|
}
|
|
|
|
internal override void DumpStructure(ExpressionDumper dumper)
|
|
{
|
|
if (this.EdmFunction != null)
|
|
{
|
|
dumper.Dump(this.EdmFunction);
|
|
}
|
|
}
|
|
|
|
internal override string PrintTree(ExpressionPrinter printer)
|
|
{
|
|
return printer.Print(this);
|
|
}
|
|
}
|
|
}
|