protected override Expression VisitCreateIndex(SqlCreateIndexExpression createIndexExpression)
        {
            var predicate = createIndexExpression
                            .Columns
                            .Select(c => (Expression) new SqlFunctionCallExpression(typeof(bool), SqlFunction.IsNotNull, c.Column))
                            .Aggregate(Expression.And);

            return(createIndexExpression.ChangeWhere(createIndexExpression.Where == null ? predicate : Expression.And(createIndexExpression.Where, predicate)));
        }
Пример #2
0
        protected virtual Expression VisitCreateIndex(SqlCreateIndexExpression createIndexExpression)
        {
            var table           = (SqlTableExpression)Visit(createIndexExpression.Table);
            var columns         = VisitExpressionList(createIndexExpression.Columns);
            var includedColumns = VisitExpressionList(createIndexExpression.IncludedColumns);

            var where = Visit(createIndexExpression.Where);

            if (columns != createIndexExpression.Columns ||
                includedColumns != createIndexExpression.IncludedColumns ||
                table != createIndexExpression.Table ||
                where != createIndexExpression.Where)
            {
                return(new SqlCreateIndexExpression(createIndexExpression.IndexName, table, createIndexExpression.Unique, createIndexExpression.IndexType, createIndexExpression.IfNotExist, columns, includedColumns, where, createIndexExpression.Clustered));
            }

            return(createIndexExpression);
        }
Пример #3
0
        protected override Expression VisitCreateIndex(SqlCreateIndexExpression createIndexExpression)
        {
            if (createIndexExpression.Where != null && this.explicitIndexConditionOverridesNullAnsiCompliance)
            {
                return(createIndexExpression);
            }

            if (!(createIndexExpression.Unique || this.fixNonUniqueIndexesAsWell))
            {
                return(createIndexExpression);
            }

            var predicate = createIndexExpression
                            .Columns
                            .Select(c => (Expression) new SqlFunctionCallExpression(typeof(bool), SqlFunction.IsNotNull, c.Column))
                            .Aggregate(Expression.And);

            return(createIndexExpression.ChangeWhere(createIndexExpression.Where == null ? predicate : Expression.And(createIndexExpression.Where, predicate)));
        }
Пример #4
0
        protected override Expression VisitCreateIndex(SqlCreateIndexExpression createIndexExpression)
        {
            this.Write("CREATE ");

            if (createIndexExpression.Unique)
            {
                this.Write("UNIQUE ");
            }

            if (createIndexExpression.IfNotExist)
            {
                this.Write("IF NOT EXIST ");
            }

            this.Write("INDEX ");
            this.WriteQuotedIdentifier(createIndexExpression.IndexName);
            this.Write(" ON ");
            this.Visit(createIndexExpression.Table);
            this.Write("(");
            this.WriteDeliminatedListOfItems(createIndexExpression.Columns, c => this.Visit(c));
            this.WriteLine(");");

            return(createIndexExpression);
        }
Пример #5
0
 protected override Expression VisitCreateIndex(SqlCreateIndexExpression createIndexExpression)
 {
     return(base.VisitCreateIndex(createIndexExpression.ChangeWhere(null)));
 }
Пример #6
0
 protected virtual Expression VisitCreateIndex(SqlCreateIndexExpression createIndexExpression)
 {
     return(createIndexExpression);
 }
        protected override Expression VisitCreateTable(SqlCreateTableExpression createTableExpression)
        {
            var retval            = createTableExpression;
            var organizationIndex = createTableExpression.OrganizationIndex;

            if (organizationIndex == null)
            {
                return(createTableExpression);
            }

            // No organization index - remove from primary key

            if (organizationIndex.Columns == null)
            {
                try
                {
                    this.makeUnclustered = true;

                    retval = ((SqlCreateTableExpression)base.VisitCreateTable(createTableExpression))
                             .ChangeOrganizationIndex(null);

                    return(retval);
                }
                finally
                {
                    this.makeUnclustered = false;
                }
            }

            // Organization index the same as primary key so just leave with SQL server default

            if (createTableExpression
                .TableConstraints
                .Where(c => c.PrimaryKey)
                .SelectMany(c => c.ColumnNames)
                .OrderBy(c => c)
                .SequenceEqual(organizationIndex.Columns.Select(c => c.Column.Name).OrderBy(c => c)))
            {
                retval = ((SqlCreateTableExpression)base.VisitCreateTable(createTableExpression))
                         .ChangeOrganizationIndex(null);

                return(retval);
            }

            // Custom organization index

            try
            {
                this.makeUnclustered = true;

                retval = ((SqlCreateTableExpression)base.VisitCreateTable(createTableExpression))
                         .ChangeOrganizationIndex(null);
            }
            finally
            {
                this.makeUnclustered = false;
            }

            var indexExpression = new SqlCreateIndexExpression(organizationIndex.IndexName, createTableExpression.Table, false, IndexType.Default, false, organizationIndex.Columns, null, null, true);

            if (this.additionalStatements == null)
            {
                this.additionalStatements = new List <Expression>();
            }

            this.additionalStatements.Add(indexExpression);

            return(retval);
        }