/// <summary> /// Build an object property graph from a sql builder /// </summary> /// <param name="sqlBuilder">The builder with all properties populated</param> /// <param name="queryParseType">Define the way results are to be parsed</param> public static RootObjectPropertyGraph BuildObjetPropertyGraph(this ISqlSelectStatement sqlBuilder, Type objectType, QueryParseType queryParseType) { // row id's for each mapped table var mappedTableProperties = sqlBuilder.MappedPropertiesToPrimaryKeys .Select(GetMappedTable); // map each column to a chain of row id column numbers var columnWithPrimaryKeys = sqlBuilder .SelectColumns .Select(GetMappedColumn); return(ObjectPropertyGraphBuilder.Build( objectType, sqlBuilder.GetPrimaryTableKeyColumnIndexes().ToArray(), mappedTableProperties, columnWithPrimaryKeys, queryParseType)); (string name, int[] primaryKeyColumnMap) GetMappedTable((string columnGroupPrefix, ICompositeKey key) map) => ( map.columnGroupPrefix, sqlBuilder.GetRowNumberColumnIndexes(map.key, map.key.Table).ToArray()); (string name, int[] primaryKeyColumnMap, Type dataCellType, ConstructorInfo[] isConstructorArg) GetMappedColumn(ISelectColumn column) => ( column.Alias, sqlBuilder .GetRowNumberColumnIndexes( column.Alias, TablePrecedenceOrderer.GetSingleMappingContext(column)) .ToArray(), column.DataType, column.ArgConstructors); }
public static IEnumerable <int> GetRowNumberColumnIndexes(this ISqlSelectStatement sqlStatement, ICompositeKey key, IQueryTable context) { return(sqlStatement.GetRowNumberColumnIndexes(sqlStatement.SupplimentPrimaryKeyColumns(key, context))); }
public static IEnumerable <int> GetRowNumberColumnIndexes(this ISqlSelectStatement sqlStatement, string columnAlias, IQueryTable context) { return(sqlStatement.GetRowNumberColumnIndexes(sqlStatement.GetPrimaryKeyColumns(columnAlias, context))); }