internal static IModels Add(this IModels modelSet, DbFromClause dbFromClause) { var resolver = new SourceModelResolver(modelSet); dbFromClause.Accept(resolver); return(resolver.SourceModelSet.Seal()); }
internal DbSelectStatement BuildInsertScalarStatement <TSource>(DataSet <TSource> dataSet, int rowOrdinal, IReadOnlyList <ColumnMapping> columnMappings) where TSource : class, IEntity, new() { var sourceModel = dataSet._; var parentMappings = ShouldJoinParent(dataSet) ? this.Model.GetParentRelationship(columnMappings) : null; var paramManager = new ScalarParamManager(dataSet[rowOrdinal]); var select = GetScalarMapping(paramManager, columnMappings); IDbTable parentTable = null; if (parentMappings != null) { parentTable = (IDbTable)Model.ParentModel.DataSource; Debug.Assert(parentTable != null); var parentRowIdMapping = new ColumnMapping(Model.GetSysParentRowIdColumn(createIfNotExist: false), parentTable.Model.GetSysRowIdColumn(createIfNotExist: false)); select = select.Append(parentRowIdMapping); } DbFromClause from = GetScalarDataSource(paramManager, parentMappings); DbExpression where = null; if (from != null) { if (parentMappings != null) { from = new DbJoinClause(DbJoinKind.InnerJoin, from, parentTable.FromClause, parentMappings); } } return(new DbSelectStatement(Model, select, from, where, null, -1, -1)); }
internal static IModelAliasManager Create(DbFromClause fromClause) { var manager = new Visitor(); fromClause.Accept(manager); return(manager._aliases); }
private void From(Model model) { _subQueryEliminator = model.FromClause.SubQueryEliminator; if (_subQueryEliminator != null) { WhereExpression = And(WhereExpression, _subQueryEliminator.WhereExpression); } AddSourceModel(model); FromClause = _subQueryEliminator == null ? model.FromClause : _subQueryEliminator.FromClause; Debug.Assert(FromClause != null); }
private IEntity Join(IEntity _, DbJoinKind kind, IReadOnlyList <ColumnMapping> relationship) { Debug.Assert(relationship[0].Target.ParentModel == _.Model); var result = MakeAlias(_); var resultFromClause = result.Model.FromClause; if (result != _) { resultFromClause = resultFromClause.Clone(result.Model); relationship = relationship.Select(x => new ColumnMapping(x.SourceExpression, result.Model.Columns[x.Target.Ordinal])).ToList(); } AddSourceModel(result.Model); FromClause = new DbJoinClause(kind, FromClause, resultFromClause, EliminateSubQuery(relationship)); return(result); }
private void GenerateFromStatement(DbFromClause from) { bool isDbTable = from.GetType() == typeof(DbTableClause); if (isDbTable) { SqlBuilder.Append(" "); } else { SqlBuilder.AppendLine().IndentLevel++; } from.Accept(this); if (!isDbTable) { SqlBuilder.IndentLevel--; } }
internal virtual DbSelectStatement BuildSelectStatement(IReadOnlyList <ColumnMapping> select, DbFromClause from, DbExpression where, IReadOnlyList <DbExpressionSort> orderBy) { return(new DbSelectStatement(Model, select, from, where, orderBy, Offset, Fetch)); }
private void GenerateFromClause(DbFromClause from) { SqlBuilder.Append("FROM"); GenerateFromStatement(from); }
internal override DbSelectStatement BuildSelectStatement(IReadOnlyList <ColumnMapping> selectList, DbFromClause from, DbExpression where, IReadOnlyList <DbExpressionSort> orderBy) { return(new DbSelectStatement(Model, selectList, from, where, GroupByList, HavingExpression, orderBy, Offset, Fetch)); }