protected static string MakeResultColumnExpression(FieldInfo field, TableOrSubQuery source)
        {
            var alias = field.Alias;

            if (alias != null)
            {
                return(field.SQLExpression + " AS " + alias);
            }
            else
            {
                var sourceName = source.SourceName;
                if (string.IsNullOrEmpty(sourceName))
                {
                    return(field.Name);
                }
                else
                {
                    return(sourceName + "." + field.Name);
                }
            }
        }
        public SqlSelectBuilder BuildSelect(TableOrSubQuery source, IFieldInfoCollection fields)
        {
            if (source is null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (fields is null)
            {
                throw new ArgumentNullException(nameof(fields));
            }

            var selectBuilder = new SqlSelectBuilder();

            selectBuilder.Source = source;

            foreach (var field in fields)
            {
                var resultColExpr = MakeResultColumnExpression(field, source);
                selectBuilder.ResultColumns.Add(resultColExpr);
            }

            return(selectBuilder);
        }
Beispiel #3
0
        protected static TableOrSubQuery InitializeSource(Type type)
        {
            try
            {
                //read Entity attribute
                var eAttr = type.GetCustomAttributes(typeof(TableAttribute), true)
                            .OfType <TableAttribute>()
                            .FirstOrDefault();

                if (eAttr is null)
                {
                    return(new TableOrSubQuery(type.Name));
                }
                else
                {
                    var source = new TableOrSubQuery(eAttr.Name);

                    // to provide backwards compatibility
                    // check if it is a EntitySourceAttr
#pragma warning disable CS0618 // Type or member is obsolete
                    if (eAttr is EntitySourceAttribute)
                    {
                        var esa = (EntitySourceAttribute)eAttr;
                        source.Alias = esa.Alias;
                        source.Joins = esa.JoinCommands;
                    }
#pragma warning restore CS0618 // Type or member is obsolete

                    return(source);
                }
            }
            catch (Exception e)
            {
                throw new ORMException("Unable to initialize EntityDescription for " + type.Name, e);
            }
        }
Beispiel #4
0
        //public static QueryBuilder<TResult> From<TResult>(this DbConnection connection, ICommandBuilder commandBuilder = null) where TResult : class, new()
        //{
        //    return From<TResult>(connection, (TableOrSubQuery)null, (ICommandBuilder)null);
        //}

        public static QueryBuilder <TResult> From <TResult>(this DbConnection connection, TableOrSubQuery source = null, ICommandBuilder commandBuilder = null) where TResult : class, new()
        {
            commandBuilder = commandBuilder ?? DefaultCommandBuilder;
            var discription          = GlobalEntityDescriptionLookup.Instance.LookUpEntityByType(typeof(TResult));
            SqlSelectBuilder builder = commandBuilder.BuildSelect(source ?? discription.Source, discription.Fields);

            return(new QueryBuilder <TResult>(connection, builder));
        }