/// <summary> /// Gets the name of the field from a member expression, with quotes when necessary. /// </summary> private static string GetEscapedFieldName(MemberExpression expression, ICacheQueryableInternal queryable) { var sqlEscapeAll = queryable.CacheConfiguration.SqlEscapeAll; var fieldName = GetFieldName(expression, queryable); return(sqlEscapeAll ? string.Format("\"{0}\"", fieldName) : fieldName); }
/// <summary> /// Gets the table name with schema. /// </summary> public static string GetTableNameWithSchema(ICacheQueryableInternal queryable) { Debug.Assert(queryable != null); var cacheCfg = queryable.CacheConfiguration; return(string.Format(cacheCfg.SqlEscapeAll ? "\"{0}\".\"{1}\"" : "\"{0}\".{1}", cacheCfg.Name, queryable.TableName)); }
/// <summary> /// Gets the table name with schema. /// </summary> public static string GetTableNameWithSchema(ICacheQueryableInternal queryable) { Debug.Assert(queryable != null); var cacheCfg = queryable.CacheConfiguration; var tableName = queryable.TableName; if (cacheCfg.SqlEscapeAll) { tableName = string.Format("{0}{1}{0}", SqlQuote, tableName); } var schemaName = NormalizeSchemaName(cacheCfg.Name, cacheCfg.SqlSchema); return(string.Format("{0}.{1}", schemaName, tableName)); }
/// <summary> /// Gets the name of the field from a member expression. /// </summary> private static string GetFieldName(MemberExpression expression, ICacheQueryableInternal queryable) { var fieldName = GetMemberFieldName(expression.Member); // Look for a field alias var cacheCfg = queryable.CacheConfiguration; if (cacheCfg.QueryEntities == null || cacheCfg.QueryEntities.All(x => x.Aliases == null)) { return(fieldName); // There are no aliases defined - early exit } // Find query entity by key-val types var keyValTypes = queryable.ElementType.GetGenericArguments(); Debug.Assert(keyValTypes.Length == 2); var entity = cacheCfg.QueryEntities.FirstOrDefault(e => e.Aliases != null && (e.KeyType == keyValTypes[0] || e.KeyTypeName == keyValTypes[0].Name) && (e.ValueType == keyValTypes[1] || e.ValueTypeName == keyValTypes[1].Name)); if (entity == null) { return(fieldName); } // There are some aliases for the current query type // Calculate full field name and look for alias var fullFieldName = fieldName; var member = expression; while ((member = member.Expression as MemberExpression) != null && member.Member.DeclaringType != queryable.ElementType) { fullFieldName = GetFieldName(member, queryable) + "." + fullFieldName; } var alias = entity.Aliases.Where(x => x.FullName == fullFieldName) .Select(x => x.Alias).FirstOrDefault(); return(alias ?? fieldName); }
/// <summary> /// Gets the name of the field from a member expression, with quotes when necessary. /// </summary> private static string GetFieldName(MemberExpression expression, ICacheQueryableInternal queryable, bool ignoreAlias = false) { var fieldName = GetMemberFieldName(expression.Member); // Look for a field alias var cacheCfg = queryable.CacheConfiguration; if (cacheCfg.QueryEntities == null || cacheCfg.QueryEntities.All(x => x.Aliases == null)) { // There are no aliases defined - early exit. return(fieldName); } // Find query entity by key-val types var entity = GetQueryEntity(queryable, cacheCfg); if (entity == null) { return(fieldName); } // There are some aliases for the current query type // Calculate full field name and look for alias var fullFieldName = fieldName; var member = expression; while ((member = member.Expression as MemberExpression) != null && member.Member.DeclaringType != queryable.ElementType) { fullFieldName = GetFieldName(member, queryable, true) + "." + fullFieldName; } var alias = ignoreAlias ? null : ((IQueryEntityInternal)entity).GetAlias(fullFieldName); return(alias ?? fieldName); }
/// <summary> /// Finds matching query entity in the cache configuration. /// </summary> private static QueryEntity GetQueryEntity(ICacheQueryableInternal queryable, CacheConfiguration cacheCfg) { if (cacheCfg.QueryEntities.Count == 1) { return(cacheCfg.QueryEntities.Single()); } var keyValTypes = queryable.ElementType.GetGenericArguments(); Debug.Assert(keyValTypes.Length == 2); // PERF: No LINQ. foreach (var e in cacheCfg.QueryEntities) { if (e.Aliases != null && (e.KeyType == keyValTypes[0] || e.KeyTypeName == keyValTypes[0].FullName) && (e.ValueType == keyValTypes[1] || e.ValueTypeName == keyValTypes[1].FullName)) { return(e); } } return(null); }
/// <summary> /// Gets the table name with schema. /// </summary> public static string GetTableNameWithSchema(ICacheQueryableInternal queryable) { Debug.Assert(queryable != null); return(string.Format("\"{0}\".{1}", queryable.CacheConfiguration.Name, queryable.TableName)); }
/// <summary> /// Gets the table alias. /// </summary> public string GetTableAlias(ICacheQueryableInternal queryable) { Debug.Assert(queryable != null); return(GetTableAlias(ExpressionWalker.GetTableNameWithSchema(queryable))); }
/// <summary> /// Gets the table alias. /// </summary> public string GetTableAlias(ICacheQueryableInternal queryable) { Debug.Assert(queryable != null); return GetTableAlias(ExpressionWalker.GetTableNameWithSchema(queryable)); }