コード例 #1
0
        internal static IModels Add(this IModels modelSet, DbFromClause dbFromClause)
        {
            var resolver = new SourceModelResolver(modelSet);

            dbFromClause.Accept(resolver);
            return(resolver.SourceModelSet.Seal());
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        internal static IModelAliasManager Create(DbFromClause fromClause)
        {
            var manager = new Visitor();

            fromClause.Accept(manager);
            return(manager._aliases);
        }
コード例 #4
0
 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);
 }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: SqlGenerator.cs プロジェクト: xydoublez/RDO.Net
        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--;
            }
        }
コード例 #7
0
 internal virtual DbSelectStatement BuildSelectStatement(IReadOnlyList <ColumnMapping> select, DbFromClause from, DbExpression where, IReadOnlyList <DbExpressionSort> orderBy)
 {
     return(new DbSelectStatement(Model, select, from, where, orderBy, Offset, Fetch));
 }
コード例 #8
0
ファイル: SqlGenerator.cs プロジェクト: xydoublez/RDO.Net
 private void GenerateFromClause(DbFromClause from)
 {
     SqlBuilder.Append("FROM");
     GenerateFromStatement(from);
 }
コード例 #9
0
 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));
 }