コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
ファイル: ExpressionWalker.cs プロジェクト: pks-os/gridgain
        /// <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));
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
ファイル: ExpressionWalker.cs プロジェクト: efollea/ignite
        /// <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));
        }
コード例 #8
0
        /// <summary>
        /// Gets the table alias.
        /// </summary>
        public string GetTableAlias(ICacheQueryableInternal queryable)
        {
            Debug.Assert(queryable != null);

            return(GetTableAlias(ExpressionWalker.GetTableNameWithSchema(queryable)));
        }
コード例 #9
0
        /// <summary>
        /// Gets the table alias.
        /// </summary>
        public string GetTableAlias(ICacheQueryableInternal queryable)
        {
            Debug.Assert(queryable != null);

            return GetTableAlias(ExpressionWalker.GetTableNameWithSchema(queryable));
        }