示例#1
0
        internal FluentSqlBuilder(FluentSqlQueryBuilder sqlQueryBuilder, LambdaResolver resolver, TargetToSelect targetToSelect)
        {
            _sqlQueryBuilder = sqlQueryBuilder;
            _resolver        = resolver;

            DefineTargetToSelect(targetToSelect);
        }
示例#2
0
 public SqlLamBase(SqlAdapter adater, string tableName)
 {
     _type     = SqlType.Query;
     _adapter  = adater;
     _builder  = new Builder(_type, tableName, GetAdapterInstance(_adapter));
     _resolver = new LambdaResolver(_builder);
 }
示例#3
0
            public GenericResolver(Type[] genericDefs, Type[] hints, LambdaResolver lambdaResolver)
            {
                _GenericDefs = genericDefs;
                _GenericValues = hints ?? new Type[_GenericDefs.Length];

                _LambdaResolver = lambdaResolver;
            }
示例#4
0
            public GenericResolver(Type[] genericDefs, Type[] hints, LambdaResolver lambdaResolver)
            {
                _genericDefs   = genericDefs;
                _genericValues = hints ?? new Type[_genericDefs.Length];

                _lambdaResolver = lambdaResolver;
            }
示例#5
0
        private void DefineSqlAdapter(SqlAdapterType sqlAdapterType, Type typeTable, SqlBuilderFormatting formatting, string tableAlias)
        {
            var sqlAdapter = GetInstanceSqlAdapter(sqlAdapterType);

            _sqlQueryBuilder = new FluentSqlQueryBuilder(sqlAdapter, typeTable, formatting, null, tableAlias);
            _resolver        = new LambdaResolver(_sqlQueryBuilder, tableAlias);
        }
 public SqlExpBase(SqlAdapterType adater, Type entityType)
 {
     _type       = SqlType.Query;
     _adapter    = adater;
     _entityType = entityType;
     _builder    = new Builder.Builder(_type, entityType, AdapterFactory.GetAdapterInstance(_adapter));
     _resolver   = new LambdaResolver(_builder);
 }
        public SqlExpBase(SqlAdapterType adater, SqlTableDefine tableDefine, List <SqlColumnDefine> columnDefines)
        {
            _type    = SqlType.Query;
            _adapter = adater;

            _builder  = new Builder.Builder(_type, tableDefine, columnDefines, AdapterFactory.GetAdapterInstance(_adapter));
            _resolver = new LambdaResolver(_builder);
        }
示例#8
0
 public SqlLam(SqlAdapter type = SqlAdapter.SqlServer2005)
     : base(type, LambdaResolver.GetTableName <T>())
 {
     //_type = SqlType.Query;
     //GetAdapterInstance(type);
     //_builder = new Builder(_type, LambdaResolver.GetTableName<T>(), _defaultAdapter);
     //_resolver = new LambdaResolver(_builder);
 }
示例#9
0
 public SqlLam(SqlAdapter adapterType = SqlAdapter.SqlServer2008)
     : base()
 {
     _type     = SqlType.Query;
     _adapter  = adapterType;
     _builder  = new SqlQueryBuilder(_type, LambdaResolver.GetTableName <T>(), _defaultAdapter);
     _resolver = new LambdaResolver(_builder);
 }
示例#10
0
        internal Query(IDbProvider provider)
        {
            this.resolver = provider.CreateResolver();
            var cnn = provider.CreateConnection();
            var cmd = provider.CreateCommand();

            cmd.Connection = cnn;
            this.context   = new QueryContext(resolver, cmd);
        }
示例#11
0
 public SqlExpBase(SqlAdapterType adater, Type entityType, string specialSchema)
 {
     _type       = SqlType.Query;
     _adapter    = adater;
     _entityType = entityType;
     SqlAdapter  = AdapterFactory.GetAdapterInstance(_adapter);
     _builder    = new Builder.Builder(_type, entityType, SqlAdapter, specialSchema);
     //_builder = new Builder.Builder(_type, entityType, AdapterFactory.GetAdapterInstance(_adapter));
     _resolver = new LambdaResolver(_builder);
 }
示例#12
0
        public void ResolveStatement(SqlQueryBuilder builder,
                                     MethodCallExpression callExpression,
                                     object[]             arguments)
        {
            if (arguments.Length != 2)
            {
                throw new ArgumentException($"REPLACE Sql query requires 2 arguments for replacing old_string with new_string");
            }

            var columnName = LambdaResolver.GetColumnName(callExpression.Object);

            builder.UpdateFieldReplaceString(columnName, arguments[0], arguments[1]);
        }
示例#13
0
 public SqlLam()
 {
     _builder  = new SqlQueryBuilder(LambdaResolver.GetTableName <T>(), _defaultAdapter);
     _resolver = new LambdaResolver(_builder);
 }
示例#14
0
 /// <summary>
 /// Finds an extension method for current type.
 /// </summary>
 public MethodWrapper ResolveExtensionMethod(Type type, string name, Type[] argTypes, Type[] hints = null, LambdaResolver lambdaResolver = null)
 {
     return(ReflectionHelper.ResolveExtensionMethod(_extensionResolver, type, name, argTypes, hints, lambdaResolver));
 }
示例#15
0
        /// <summary>
        /// Resolves a method by its name and argument types. If generic arguments are passed, they are also applied.
        /// Generic arguments whose values can be inferred from argument types can be skipped.
        /// </summary>
        public MethodWrapper ResolveMethod(Type type, string name, Type[] argTypes, Type[] hints = null, LambdaResolver resolver = null)
        {
            if (!(type is TypeBuilder))
            {
                return(ReflectionHelper.ResolveMethod(type, name, argTypes, hints, resolver));
            }

            var typeEntity = _definedTypes[type.Name];

            try
            {
                var method = typeEntity.ResolveMethod(name, argTypes);
                var mw     = WrapMethod(method, ReflectionHelper.IsPartiallyApplied(argTypes));

                var isGeneric = method.IsImported && method.MethodInfo.IsGenericMethod;
                if (isGeneric)
                {
                    var argTypeDefs   = method.MethodInfo.GetParameters().Select(p => p.ParameterType).ToArray();
                    var genericDefs   = method.MethodInfo.GetGenericArguments();
                    var genericValues = GenericHelper.ResolveMethodGenericsByArgs(argTypeDefs, argTypes, genericDefs, hints, resolver);

                    mw.MethodInfo       = method.MethodInfo.MakeGenericMethod(genericValues);
                    mw.ArgumentTypes    = method.GetArgumentTypes(this).Select(t => GenericHelper.ApplyGenericArguments(t, genericDefs, genericValues)).ToArray();
                    mw.GenericArguments = genericValues;
                    mw.ReturnType       = GenericHelper.ApplyGenericArguments(method.MethodInfo.ReturnType, genericDefs, genericValues);
                }
                else
                {
                    if (hints != null)
                    {
                        Error(CompilerMessages.GenericArgsToNonGenericMethod, name);
                    }
                }

                return(mw);
            }
            catch (KeyNotFoundException)
            {
                return(ResolveMethod(type.BaseType, name, argTypes, hints));
            }
        }
示例#16
0
 internal SqlExp(Builder.Builder builder, LambdaResolver resolver)
 {
     _builder  = builder;
     _resolver = resolver;
 }
示例#17
0
 internal Query(QueryContext context)
 {
     this.resolver = context.Resolver;
     this.context  = context;
 }
示例#18
0
 /// <summary>
 /// Finds an extension method for current type.
 /// </summary>
 public MethodWrapper ResolveExtensionMethod(Type type, string name, Type[] argTypes, Type[] hints = null, LambdaResolver lambdaResolver = null)
 {
     return ReflectionHelper.ResolveExtensionMethod(_ExtensionResolver, type, name, argTypes, hints, lambdaResolver);
 }
示例#19
0
        /// <summary>
        /// Resolves an extension method by arguments.
        /// </summary>
        public static MethodWrapper ResolveExtensionMethod(ExtensionMethodResolver resolver, Type type, string name, Type[] argTypes, Type[] hints, LambdaResolver lambdaResolver)
        {
            var method = resolver.ResolveExtensionMethod(type, name, argTypes);
            var args   = method.GetParameters();
            var info   = new MethodWrapper
            {
                Name = name,
                Type = method.DeclaringType,

                MethodInfo         = method,
                IsStatic           = true,
                IsVirtual          = false,
                ReturnType         = method.ReturnType,
                ArgumentTypes      = args.Select(p => p.ParameterType).ToArray(),
                IsPartiallyApplied = IsPartiallyApplied(argTypes),
                IsVariadic         = IsVariadic(method),
            };

            if (method.IsGenericMethod)
            {
                var expectedTypes = method.GetParameters().Select(p => p.ParameterType).ToArray();
                var genericDefs   = method.GetGenericArguments();

                var extMethodArgs = argTypes.ToList();
                extMethodArgs.Insert(0, type);

                var genericValues = GenericHelper.ResolveMethodGenericsByArgs(
                    expectedTypes,
                    extMethodArgs.ToArray(),
                    genericDefs,
                    hints,
                    lambdaResolver
                    );

                info.GenericArguments = genericValues;
                info.MethodInfo       = info.MethodInfo.MakeGenericMethod(genericValues);
                info.ReturnType       = GenericHelper.ApplyGenericArguments(info.ReturnType, genericDefs, genericValues);
                info.ArgumentTypes    = expectedTypes.Select(t => GenericHelper.ApplyGenericArguments(t, genericDefs, genericValues)).ToArray();
            }
            else if (hints != null)
            {
                error(CompilerMessages.GenericArgsToNonGenericMethod, name);
            }

            return(info);
        }
示例#20
0
        /// <summary>
        /// Resolves a method by its name and argument types. If generic arguments are passed, they are also applied.
        /// Generic arguments whose values can be inferred from argument types can be skipped.
        /// </summary>
        public MethodWrapper ResolveMethod(Type type, string name, Type[] argTypes, Type[] hints = null, LambdaResolver resolver = null)
        {
            if (!(type is TypeBuilder))
                return ReflectionHelper.ResolveMethod(type, name, argTypes, hints, resolver);

            var typeEntity = _DefinedTypes[type.Name];
            try
            {
                var method = typeEntity.ResolveMethod(name, argTypes);
                var mw = wrapMethod(method, ReflectionHelper.IsPartiallyApplied(argTypes));

                var isGeneric = method.IsImported && method.MethodInfo.IsGenericMethod;
                if (isGeneric)
                {
                    var argTypeDefs = method.MethodInfo.GetParameters().Select(p => p.ParameterType).ToArray();
                    var genericDefs = method.MethodInfo.GetGenericArguments();
                    var genericValues = GenericHelper.ResolveMethodGenericsByArgs(argTypeDefs, argTypes, genericDefs, hints);

                    mw.MethodInfo = method.MethodInfo.MakeGenericMethod(genericValues);
                    mw.ArgumentTypes = method.GetArgumentTypes(this).Select(t => GenericHelper.ApplyGenericArguments(t, genericDefs, genericValues)).ToArray();
                    mw.GenericArguments = genericValues;
                    mw.ReturnType = GenericHelper.ApplyGenericArguments(method.MethodInfo.ReturnType, genericDefs, genericValues);
                }
                else
                {
                    if (hints != null)
                        Error(CompilerMessages.GenericArgsToNonGenericMethod, name);
                }

                return mw;
            }
            catch (KeyNotFoundException)
            {
                return ResolveMethod(type.BaseType, name, argTypes, hints);
            }
        }
示例#21
0
 public DML(IDbProvider dbProvider)
 {
     this.dbProvider = dbProvider;
     this.resolver   = dbProvider.CreateResolver();
 }
示例#22
0
 internal SqlLam(SqlQueryBuilder builder, LambdaResolver resolver)
 {
     _builder  = builder;
     _resolver = resolver;
 }
示例#23
0
 public void InsertTo <TTo>()
 {
     TableNames.Add(LambdaResolver.GetTableName <TTo>());
 }
示例#24
0
 public SqlJoinBuilder(int paramCount = 0)
 {
     Builder  = new SqlQueryBuilder(LambdaResolver.GetTableName <T2>(), DefaultAdapter, paramCount);
     Resolver = new LambdaResolver(Builder);
 }
示例#25
0
        /// <summary>
        /// Resolves the generic values for a specified type.
        /// </summary>
        /// <param name="expectedTypes">Parameter types from method definition.</param>
        /// <param name="actualTypes">Argument types from method invocation site. </param>
        /// <param name="genericDefs">Generic parameters from method definition.</param>
        /// <param name="hints">Extra hints that are specified explicitly.</param>
        /// <param name="lambdaResolver">
        /// Callback for Lambda`T resolution.
        /// Passed arguments are:
        /// 1. Lambda's position in the argument list (to find a corresponding NodeBase)
        /// 2. Already resolved list of types
        /// Return value is the inferred type of lambda return.
        /// </param>
        /// <returns></returns>
        public static Type[] ResolveMethodGenericsByArgs(Type[] expectedTypes, Type[] actualTypes, Type[] genericDefs, Type[] hints = null, LambdaResolver lambdaResolver = null)
        {
            if(hints != null && hints.Length != genericDefs.Length)
                throw new ArgumentException("hints");

            var resolver = new GenericResolver(genericDefs, hints, lambdaResolver);
            return resolver.Resolve(expectedTypes, actualTypes);
        }
 public SqlBuilderFluentExtension(LambdaResolver resolver, FluentSqlQueryBuilder sqlQueryBuilder)
 {
     _resolver        = resolver;
     _sqlQueryBuilder = sqlQueryBuilder;
 }
示例#27
0
 public QueryContext(LambdaResolver resolver, IDbCommand command)
 {
     Resolver = resolver;
     Command  = command;
 }
示例#28
0
        /// <summary>
        /// Resolves the generic values for a specified type.
        /// </summary>
        /// <param name="expectedTypes">Parameter types from method definition.</param>
        /// <param name="actualTypes">Argument types from method invocation site. </param>
        /// <param name="genericDefs">Generic parameters from method definition.</param>
        /// <param name="hints">Extra hints that are specified explicitly.</param>
        /// <param name="lambdaResolver">
        /// Callback for Lambda`T resolution.
        /// Passed arguments are:
        /// 1. Lambda's position in the argument list (to find a corresponding NodeBase)
        /// 2. Already resolved list of types
        /// Return value is the inferred type of lambda return.
        /// </param>
        public static Type[] ResolveMethodGenericsByArgs(Type[] expectedTypes, Type[] actualTypes, Type[] genericDefs, Type[] hints = null, LambdaResolver lambdaResolver = null)
        {
            if (hints != null && hints.Length != genericDefs.Length)
            {
                throw new ArgumentException("hints");
            }

            var resolver = new GenericResolver(genericDefs, hints, lambdaResolver);

            return(resolver.Resolve(expectedTypes, actualTypes));
        }
示例#29
0
        /// <summary>
        /// Resolves a method by its name and argument types. If generic arguments are passed, they are also applied.
        /// Generic arguments whose values can be inferred from argument types can be skipped.
        /// </summary>
        public static MethodWrapper ResolveMethod(Type type, string name, Type[] argTypes, Type[] hints, LambdaResolver lambdaResolver)
        {
            var mw = new MethodWrapper {
                Name = name, Type = type
            };

            try
            {
                var method = ResolveMethodByArgs(
                    getMethodsByName(type, name),
                    m => m.GetParameters().Select(p => p.ParameterType).ToArray(),
                    IsVariadic,
                    argTypes
                    );

                var mInfo = method.Method;

                if (mInfo.IsGenericMethod)
                {
                    var genericDefs   = mInfo.GetGenericArguments();
                    var genericValues = GenericHelper.ResolveMethodGenericsByArgs(method.ArgumentTypes, argTypes, genericDefs, hints);

                    mInfo = mInfo.MakeGenericMethod(genericValues);
                    mw.GenericArguments = genericValues;
                }
                else if (hints != null)
                {
                    error(CompilerMessages.GenericArgsToNonGenericMethod, name);
                }

                mw.MethodInfo         = mInfo;
                mw.IsStatic           = mInfo.IsStatic;
                mw.IsVirtual          = mInfo.IsVirtual;
                mw.ArgumentTypes      = method.ArgumentTypes;
                mw.ReturnType         = mInfo.ReturnType;
                mw.IsPartiallyApplied = IsPartiallyApplied(argTypes);
                mw.IsVariadic         = IsVariadic(mInfo);

                return(mw);
            }
            catch (NotSupportedException)
            {
                if (!type.IsGenericType)
                {
                    throw new KeyNotFoundException();
                }

                var genType   = type.GetGenericTypeDefinition();
                var genMethod = ResolveMethodByArgs(
                    getMethodsByName(genType, name),
                    m => m.GetParameters().Select(p => GenericHelper.ApplyGenericArguments(p.ParameterType, type, false)).ToArray(),
                    IsVariadic,
                    argTypes
                    );

                var mInfoOriginal = genMethod.Method;
                var declType      = resolveActualDeclaringType(type, mInfoOriginal.DeclaringType);
                var mInfo         = getMethodVersionForType(declType, mInfoOriginal);

                if (mInfoOriginal.IsGenericMethod)
                {
                    var genericDefs   = mInfoOriginal.GetGenericArguments();
                    var genericValues = GenericHelper.ResolveMethodGenericsByArgs(genMethod.ArgumentTypes, argTypes, genericDefs, hints, lambdaResolver);

                    mInfo = mInfo.MakeGenericMethod(genericValues);

                    var totalGenericDefs   = genericDefs.Union(genType.GetGenericTypeDefinition().GetGenericArguments()).ToArray();
                    var totalGenericValues = genericValues.Union(type.GetGenericArguments()).ToArray();

                    mw.GenericArguments = genericValues;
                    mw.ReturnType       = GenericHelper.ApplyGenericArguments(mInfoOriginal.ReturnType, totalGenericDefs, totalGenericValues);
                    mw.ArgumentTypes    = mInfoOriginal.GetParameters().Select(p => GenericHelper.ApplyGenericArguments(p.ParameterType, totalGenericDefs, totalGenericValues)).ToArray();
                }
                else
                {
                    if (hints != null)
                    {
                        error(CompilerMessages.GenericArgsToNonGenericMethod, name);
                    }

                    mw.ArgumentTypes = mInfoOriginal.GetParameters().Select(p => GenericHelper.ApplyGenericArguments(p.ParameterType, type)).ToArray();
                    mw.ReturnType    = GenericHelper.ApplyGenericArguments(mInfoOriginal.ReturnType, type, false);
                }

                mw.MethodInfo         = mInfo;
                mw.IsStatic           = mInfoOriginal.IsStatic;
                mw.IsVirtual          = mInfoOriginal.IsVirtual;
                mw.IsPartiallyApplied = IsPartiallyApplied(argTypes);
                mw.IsVariadic         = IsVariadic(mInfoOriginal);
            }

            return(mw);
        }