/// <summary>
		/// Guesses the IType by the type
		/// </summary>
		/// <param name="type">The type.</param>
		/// <returns></returns>
		public static IType GuessType(System.Type type)
		{
			type = type.UnwrapIfNullable();

			IType value;
			if (clrTypeToNHibernateType.TryGetValue(type, out value))
				return value;
			
			if (type.IsEnum)
				return (IType) Activator.CreateInstance(typeof (EnumType<>).MakeGenericType(type));
			
			if (typeof(IUserType).IsAssignableFrom(type) ||
				typeof(ICompositeUserType).IsAssignableFrom(type))
			{
				return Custom(type);
			}
			
			return Entity(type);
		}
		internal HqlIdent(IASTFactory factory, System.Type type)
			: base(HqlSqlWalker.IDENT, "", factory)
		{
			type = type.UnwrapIfNullable();

			switch (System.Type.GetTypeCode(type))
			{
				case TypeCode.Boolean:
					SetText("bool");
					break;
				case TypeCode.Int16:
					SetText("short");
					break;
				case TypeCode.Int32:
					SetText("integer");
					break;
				case TypeCode.Int64:
					SetText("long");
					break;
				case TypeCode.Decimal:
					SetText("decimal");
					break;
				case TypeCode.Single:
					SetText("single");
					break;
				case TypeCode.DateTime:
					SetText("datetime");
					break;
				case TypeCode.String:
					SetText("string");
					break;
				case TypeCode.Double:
					SetText("double");
					break;
				default:
					if (type == typeof(Guid))
					{
						SetText("guid");
						break;
					}
					if (type == typeof(DateTimeOffset))
					{
					    SetText("datetimeoffset");
					    break;
					}
					throw new NotSupportedException(string.Format("Don't currently support idents of type {0}", type.Name));
			}
		}