parametermetadata.cs

来自「NHibernate NET开发者所需的」· CS 代码 · 共 87 行

CS
87
字号
using System;
using System.Collections.Generic;
using Iesi.Collections.Generic;
using NHibernate.Type;

namespace NHibernate.Engine.Query
{
	/// <summary> Encapsulates metadata about parameters encountered within a query. </summary>
	[Serializable]
	public class ParameterMetadata
	{
		private static readonly OrdinalParameterDescriptor[] EmptyOrdinals = new OrdinalParameterDescriptor[0];
		private readonly OrdinalParameterDescriptor[] ordinalDescriptors;
		private readonly Dictionary<string, NamedParameterDescriptor> namedDescriptorMap;

		public ParameterMetadata(OrdinalParameterDescriptor[] ordinalDescriptors,
			IDictionary<string, NamedParameterDescriptor> namedDescriptorMap)
		{
			if (ordinalDescriptors == null)
			{
				this.ordinalDescriptors = EmptyOrdinals;
			}
			else
			{
				OrdinalParameterDescriptor[] copy = new OrdinalParameterDescriptor[ordinalDescriptors.Length];
				Array.Copy(ordinalDescriptors, 0, copy, 0, ordinalDescriptors.Length);
				this.ordinalDescriptors = copy;
			}

			if (namedDescriptorMap == null)
				this.namedDescriptorMap = new Dictionary<string, NamedParameterDescriptor>();
			else
				this.namedDescriptorMap = new Dictionary<string, NamedParameterDescriptor>(namedDescriptorMap);
		}

		public int OrdinalParameterCount
		{
			get { return ordinalDescriptors.Length; }
		}

		public ICollection<string> NamedParameterNames
		{
			get { return namedDescriptorMap.Keys; }
		}

		public OrdinalParameterDescriptor GetOrdinalParameterDescriptor(int position)
		{
			if (position < 1 || position > ordinalDescriptors.Length)
			{
				throw new IndexOutOfRangeException("Remember that ordinal parameters are 1-based!");
			}
			return ordinalDescriptors[position - 1];
		}

		public IType GetOrdinalParameterExpectedType(int position)
		{
			return GetOrdinalParameterDescriptor(position).ExpectedType;
		}

		public int GetOrdinalParameterSourceLocation(int position)
		{
			return GetOrdinalParameterDescriptor(position).SourceLocation;
		}

		public NamedParameterDescriptor GetNamedParameterDescriptor(string name)
		{
			NamedParameterDescriptor meta;
			namedDescriptorMap.TryGetValue(name, out meta);
			if (meta == null)
				throw new QueryParameterException("could not locate named parameter [" + name + "]");

			return meta;
		}

		public IType GetNamedParameterExpectedType(string name)
		{
			return GetNamedParameterDescriptor(name).ExpectedType;
		}

		public int[] GetNamedParameterSourceLocations(string name)
		{
			return GetNamedParameterDescriptor(name).SourceLocations;
		}

	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?