Esempio n. 1
0
        internal static DataTable SelectTable <T>(this IDbCommand dbCmd, SqlExpression <T> expression)
        {
            string sql = expression.SelectInto <T>();

            dbCmd.SetParameters(expression.Params);
            return(dbCmd.Select(sql));
        }
        internal static List <T> Select <T>(this IDbCommand dbCmd, SqlExpression <T> expression)
        {
            string sql = expression.SelectInto <T>();

            return(dbCmd.ExprConvertToList <T>(sql));
        }
Esempio n. 3
0
        public static TKey Scalar <T, TKey>(this IDbCommand dbCmd, SqlExpression <T> expression)
        {
            var sql = expression.SelectInto <T>();

            return(dbCmd.Scalar <TKey>(sql, expression.Params));
        }
Esempio n. 4
0
        internal static List <T> Select <T>(this IDbCommand dbCmd, SqlExpression <T> q)
        {
            string sql = q.SelectInto <T>();

            return(dbCmd.ExprConvertToList <T>(sql, q.Params, onlyFields: q.OnlyFields));
        }
Esempio n. 5
0
        internal static Task <List <T> > SelectAsync <T>(this IDbCommand dbCmd, SqlExpression <T> q, CancellationToken token)
        {
            string sql = q.SelectInto <T>();

            return(dbCmd.ExprConvertToListAsync <T>(sql, q.Params, q.OnlyFields, token));
        }
        internal static List <Into> LoadListWithReferences <Into, From>(this IDbCommand dbCmd, SqlExpression <From> expr = null)
        {
            var dialectProvider = OrmLiteConfig.DialectProvider;

            if (expr == null)
            {
                expr = dialectProvider.SqlExpression <From>();
            }

            var sql           = expr.SelectInto <Into>();
            var parentResults = dbCmd.ExprConvertToList <Into>(sql);

            var modelDef  = ModelDefinition <Into> .Definition;
            var fieldDefs = modelDef.AllFieldDefinitionsArray.Where(x => x.IsReference);

            expr.Select(dialectProvider.GetQuotedColumnName(modelDef, modelDef.PrimaryKey));
            var subSql = expr.ToSelectStatement();

            foreach (var fieldDef in fieldDefs)
            {
                var listInterface = fieldDef.FieldType.GetTypeWithGenericInterfaceOf(typeof(IList <>));
                if (listInterface != null)
                {
                    var refType     = listInterface.GenericTypeArguments()[0];
                    var refModelDef = refType.GetModelDefinition();

                    var refField = GetRefFieldDef(modelDef, refModelDef, refType);

                    var sqlRef = "SELECT {0} FROM {1} WHERE {2} IN ({3})".Fmt(
                        dialectProvider.GetColumnNames(refModelDef),
                        dialectProvider.GetQuotedTableName(refModelDef),
                        dialectProvider.GetQuotedColumnName(refField),
                        subSql);
                    var childResults = dbCmd.ConvertToList(refType, sqlRef);

                    var           map = new Dictionary <object, List <object> >();
                    List <object> refValues;

                    foreach (var result in childResults)
                    {
                        var refValue = refField.GetValue(result);
                        if (!map.TryGetValue(refValue, out refValues))
                        {
                            map[refValue] = refValues = new List <object>();
                        }
                        refValues.Add(result);
                    }

                    var untypedApi = dbCmd.CreateTypedApi(refType);
                    foreach (var result in parentResults)
                    {
                        var pkValue = modelDef.PrimaryKey.GetValue(result);
                        if (map.TryGetValue(pkValue, out refValues))
                        {
                            var castResults = untypedApi.Cast(refValues);
                            fieldDef.SetValueFn(result, castResults);
                        }
                    }
                }
                else
                {
                    var refType     = fieldDef.FieldType;
                    var refModelDef = refType.GetModelDefinition();

                    var refSelf  = GetSelfRefFieldDefIfExists(modelDef, refModelDef);
                    var refField = refSelf == null
                        ? GetRefFieldDef(modelDef, refModelDef, refType)
                        : GetRefFieldDefIfExists(modelDef, refModelDef);

                    var map = new Dictionary <object, object>();

                    if (refField != null)
                    {
                        var sqlRef = "SELECT {0} FROM {1} WHERE {2} IN ({3})".Fmt(
                            dialectProvider.GetColumnNames(refModelDef),
                            dialectProvider.GetQuotedTableName(refModelDef),
                            dialectProvider.GetQuotedColumnName(refField),
                            subSql);
                        var childResults = dbCmd.ConvertToList(refType, sqlRef);

                        foreach (var result in childResults)
                        {
                            var refValue = refField.GetValue(result);
                            map[refValue] = result;
                        }

                        foreach (var result in parentResults)
                        {
                            object childResult;
                            var    pkValue = modelDef.PrimaryKey.GetValue(result);
                            if (map.TryGetValue(pkValue, out childResult))
                            {
                                fieldDef.SetValueFn(result, childResult);
                            }
                        }
                    }
                    else if (refSelf != null)
                    {
                        //Load Self Table.RefTableId PK
                        expr.Select(dialectProvider.GetQuotedColumnName(refSelf));
                        subSql = expr.ToSelectStatement();

                        var sqlRef = "SELECT {0} FROM {1} WHERE {2} IN ({3})".Fmt(
                            dialectProvider.GetColumnNames(refModelDef),
                            dialectProvider.GetQuotedTableName(refModelDef),
                            dialectProvider.GetQuotedColumnName(refModelDef.PrimaryKey),
                            subSql);
                        var childResults = dbCmd.ConvertToList(refType, sqlRef);

                        foreach (var result in childResults)
                        {
                            var pkValue = refModelDef.PrimaryKey.GetValue(result);
                            map[pkValue] = result;
                        }

                        foreach (var result in parentResults)
                        {
                            object childResult;
                            var    fkValue = refSelf.GetValue(result);
                            if (fkValue != null && map.TryGetValue(fkValue, out childResult))
                            {
                                fieldDef.SetValueFn(result, childResult);
                            }
                        }
                    }
                }
            }

            return(parentResults);
        }
 public string SelectInto <TModel>()
 {
     return(q.SelectInto <TModel>());
 }
        internal static Task <List <T> > SelectAsync <T>(this IDbCommand dbCmd, SqlExpression <T> expression, CancellationToken token)
        {
            string sql = expression.SelectInto <T>();

            return(dbCmd.ExprConvertToListAsync <T>(sql, token));
        }
Esempio n. 9
0
        internal static List <Into> Select <Into, From>(this IDbCommand dbCmd, SqlExpression <From> expression)
        {
            string sql = expression.SelectInto <Into>();

            return(dbCmd.ExprConvertToList <Into>(sql, expression.Params));
        }
Esempio n. 10
0
        internal static List <T> Select <T>(this IDbCommand dbCmd, SqlExpression <T> expression, List <string> fieldNames = null)
        {
            string sql = expression.SelectInto <T>(fieldNames);

            return(dbCmd.ExprConvertToList <T>(sql));
        }
Esempio n. 11
0
        /// <summary>
        /// Selects the asynchronous.
        /// </summary>
        /// <typeparam name="Into">The type of the into.</typeparam>
        /// <typeparam name="From">The type of from.</typeparam>
        /// <param name="dbCmd">The database command.</param>
        /// <param name="q">The q.</param>
        /// <param name="token">The cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>Task&lt;List&lt;Into&gt;&gt;.</returns>
        internal static Task <List <Into> > SelectAsync <Into, From>(this IDbCommand dbCmd, SqlExpression <From> q, CancellationToken token)
        {
            var sql = q.SelectInto <Into>(QueryType.Select);

            return(dbCmd.ExprConvertToListAsync <Into>(sql, q.Params, q.OnlyFields, token));
        }