Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 public static IEnumerable <int> GetRowNumberColumnIndexes(this ISqlSelectStatement sqlStatement, ICompositeKey key, IQueryTable context)
 {
     return(sqlStatement.GetRowNumberColumnIndexes(sqlStatement.SupplimentPrimaryKeyColumns(key, context)));
 }
Beispiel #3
0
 public static IEnumerable <int> GetRowNumberColumnIndexes(this ISqlSelectStatement sqlStatement, string columnAlias, IQueryTable context)
 {
     return(sqlStatement.GetRowNumberColumnIndexes(sqlStatement.GetPrimaryKeyColumns(columnAlias, context)));
 }