コード例 #1
0
        // Constructor

        internal SqlQueryExpression(SqlNodeType nodeType, ISqlQueryExpression left, ISqlQueryExpression right, bool all)
            : base(nodeType)
        {
            this.left  = left;
            this.right = right;
            this.all   = all;
        }
コード例 #2
0
        /// <inheritdoc/>
        public override void ReplaceWith(SqlExpression expression)
        {
            ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
            ArgumentValidator.EnsureArgumentIs <SqlSubQuery>(expression, "expression");
            SqlSubQuery replacingExpression = expression as SqlSubQuery;

            query = replacingExpression.Query;
        }
コード例 #3
0
        internal SqlQueryRef(ISqlQueryExpression query, string name)
            : base(name)
        {
            this.query = query;
            var queryColumns = new List <SqlTableColumn>();

            foreach (var queryExpression in query)
            {
                var select = queryExpression as SqlSelect;
                if (select != null)
                {
                    var selectColumns = select.Columns.ToList();
                    select.Columns.Clear();
                    foreach (var originalColumn in selectColumns)
                    {
                        var column     = originalColumn;
                        var stubColumn = column as SqlColumnStub;
                        if (!ReferenceEquals(null, stubColumn))
                        {
                            column = stubColumn.Column;
                        }
                        var columnRef = column as SqlColumnRef;
                        if (!ReferenceEquals(null, columnRef))
                        {
                            stubColumn = columnRef.SqlColumn as SqlColumnStub;
                            if (!ReferenceEquals(null, stubColumn))
                            {
                                column = stubColumn.Column;
                            }
                        }
                        select.Columns.Add(column);
                        queryColumns.Add(SqlDml.TableColumn(this, originalColumn.Name));
                    }
                }

                var freeTextTable = queryExpression as SqlFreeTextTable;
                if (freeTextTable != null)
                {
                    foreach (var originalColumn in freeTextTable.Columns)
                    {
                        queryColumns.Add(SqlDml.TableColumn(this, originalColumn.Name));
                    }
                }

                var containsTable = queryExpression as SqlContainsTable;
                if (containsTable != null)
                {
                    foreach (var originalColumn in containsTable.Columns)
                    {
                        queryColumns.Add(SqlDml.TableColumn(this, originalColumn.Name));
                    }
                }

                break;
            }
            columns = new SqlTableColumnCollection(queryColumns);
        }
コード例 #4
0
        internal SqlQueryRef(ISqlQueryExpression query, string name)
            : base(name)
        {
            this.query = query;
            var queryColumns = new List <SqlTableColumn>();

            foreach (var queryExpression in query)
            {
                if (queryExpression is SqlSelect sqlSelect)
                {
                    var selectColumns = sqlSelect.Columns;
                    for (int index = 0, count = selectColumns.Count; index < count; index++)
                    {
                        var originalColumn = selectColumns[index];
                        var column         = originalColumn;
                        if (column is SqlColumnStub stubColumn)
                        {
                            column = stubColumn.Column;
                        }

                        if (column is SqlColumnRef columnRef)
                        {
                            stubColumn = columnRef.SqlColumn as SqlColumnStub;
                            if (!ReferenceEquals(null, stubColumn))
                            {
                                column = stubColumn.Column;
                            }
                        }

                        selectColumns[index] = column;
                        queryColumns.Add(SqlDml.TableColumn(this, originalColumn.Name));
                    }
                }

                if (queryExpression is SqlFreeTextTable freeTextTable)
                {
                    queryColumns.AddRange(
                        freeTextTable.Columns.Select(originalColumn => SqlDml.TableColumn(this, originalColumn.Name)));
                }

                if (queryExpression is SqlContainsTable containsTable)
                {
                    queryColumns.AddRange(
                        containsTable.Columns.Select(originalColumn => SqlDml.TableColumn(this, originalColumn.Name)));
                }

                break;
            }
            columns = new SqlTableColumnCollection(queryColumns);
        }
コード例 #5
0
        private SqlSelect BuildUnionQuery(IndexInfo index)
        {
            ISqlQueryExpression result = null;

            var baseQueries = index.UnderlyingIndexes.Select(BuildProviderQuery).ToList();

            foreach (var select in baseQueries)
            {
                result = result == null
          ? (ISqlQueryExpression)select
          : result.Union(select);
            }

            var unionRef = SqlDml.QueryRef(result);
            var query    = SqlDml.Select(unionRef);

            query.Columns.AddRange(unionRef.Columns);
            return(query);
        }
コード例 #6
0
 public SqlQueryExpression UnionAll(ISqlQueryExpression operand)
 {
     throw new NotImplementedException();
 }
コード例 #7
0
 public SqlQueryExpression Intersect(ISqlQueryExpression operand)
 {
     throw new NotImplementedException();
 }
コード例 #8
0
 public SqlQueryExpression UnionAll(ISqlQueryExpression operand)
 {
     return(SqlDml.UnionAll(this, operand));
 }
コード例 #9
0
 public SqlQueryExpression IntersectAll(ISqlQueryExpression operand)
 {
     return(SqlDml.IntersectAll(this, operand));
 }
コード例 #10
0
 public SqlQueryExpression ExceptAll(ISqlQueryExpression operand)
 {
     return(SqlDml.ExceptAll(this, operand));
 }
コード例 #11
0
 internal SqlQueryRef(ISqlQueryExpression query)
     : this(query, string.Empty)
 {
 }
コード例 #12
0
 private void Visit(ISqlQueryExpression queryExpression)
 {
     queryExpression.AcceptVisitor(this);
 }
コード例 #13
0
 internal SqlSubQuery(ISqlQueryExpression query)
     : base(SqlNodeType.SubSelect)
 {
     this.query = query;
 }
コード例 #14
0
 internal SqlCursor(string name, ISqlQueryExpression query)
     : base(SqlNodeType.Cursor)
 {
     this.name  = name;
     this.query = query;
 }