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); }
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); } }
//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)); }