Esempio n. 1
0
        public void WriteIndex(IndexDefinition index, StreamWriter output)
        {
            output.WriteLine("\t\t\tCreate.Index(\"" + index.Name + "\").OnTable(\"" + index.TableName + "\")");
            foreach (var c in index.Columns)
            {
                var idx = string.Format("\t\t\t\t.OnColumn(\"{0}\")", c.Name);
                if (c.Direction == Direction.Ascending)
                {
                    idx += ".Ascending()";
                }
                else
                {
                    idx += ".Descending()";
                }
                output.WriteLine(idx);
            }

            var options = "\t\t\t\t.WithOptions()";

            if (index.IsClustered)
            {
                options += ".Clustered()";
            }
            else
            {
                options += ".NonClustered()";
            }

            output.WriteLine(options + ";");
        }
        public void ShouldApplyIndexNameConventionWhenIndexNameIsNull()
        {
            var indexDefinition = new IndexDefinition();
            var conventions = new MigrationConventions { GetIndexName = definition => "IX_Table_Name" };

            indexDefinition.ApplyConventions(conventions);

            Assert.AreEqual("IX_Table_Name", indexDefinition.Name);
        }
        public void GetIndexNameReturnsValidIndexNameForSimpleIndex()
        {
            var index = new IndexDefinition
            {
                TableName = "Bacon",
                Columns =
                {
                    new IndexColumnDefinition { Name = "BaconName", Direction = Direction.Ascending }
                }
            };

            DefaultMigrationConventions.GetIndexName(index).ShouldBe("IX_Bacon_BaconName");
        }
        public static string GetIndexName(IndexDefinition index)
        {
            var sb = new StringBuilder();

            sb.Append("IX_");
            sb.Append(index.TableName);

            foreach (IndexColumnDefinition column in index.Columns)
            {
                sb.Append("_");
                sb.Append(column.Name);
            }

            return sb.ToString();
        }
        private void LoadIndexes()
        {
            Indexes = IndexInfo.Read(Processor, TableMeta);
            foreach (IndexInfo index in Indexes)
            {
                IndexDefinition indexDef = new IndexDefinition()
                {
                    Name = index.Name,
                    TableName = TableMeta.Name,
                    IsUnique = index.IsUnique
                };
                index.Columns.ForEach(x => indexDef.Columns.Add(
                    new IndexColumnDefinition()
                    {
                        Name = x,
                        Direction = index.IsAscending ? Direction.Ascending : Direction.Descending
                    }));

                Definition.Indexes.Add(indexDef);
            }
        }
        private string GetTestMigrationWithIndex(SchemaMigrationContext context, IndexDefinition index, params ColumnDefinition[] columns)
        {
            var tableDefinitions = new List<TableDefinition>
                                   {
                                      new TableDefinition
                                         {
                                            Name = "Foo",
                                            Columns = columns
                                         }
                                   };

            if (index != null)
               tableDefinitions[0].Indexes = new[] {index};

             GenerateTableMigrations(context, tableDefinitions);

             return File.ReadAllText(Path.Combine(_tempDirectory, @"Migrations\Test.cs"));
        }
 public static DeleteIndexExpression GetDeleteIndexExpression()
 {
     IndexDefinition indexDefinition = new IndexDefinition { Name = TestIndexName, TableName = TestTableName1 };
     return new DeleteIndexExpression { Index = indexDefinition };
 }
 public void Truncate(IndexDefinition index)
 {
     index.TableName = Truncate(index.TableName);
     index.Name = packKeyNames ? Pack(index.Name) : Truncate(index.Name);
     index.Columns.ToList().ForEach(x => x.Name = Truncate(x.Name));
 }
 public DeleteIndexExpression()
 {
     Index = new IndexDefinition();
 }
 private CreateIndexExpression GetCreateIndexExpression()
 {
     IndexColumnDefinition indexColumnDefinition = new IndexColumnDefinition { Name = indexColumn };
     IndexDefinition indexDefinition = new IndexDefinition { TableName = table, Name = indexName, Columns = new List<IndexColumnDefinition> { indexColumnDefinition } };
     return new CreateIndexExpression { Index = indexDefinition };
 }
        protected virtual IList<IndexDefinition> ReadIndexes(string schemaName, string tableName)
        {
            const string query = @"SELECT OBJECT_SCHEMA_NAME(T.[object_id],DB_ID()) AS [Schema],  
              T.[name] AS [table_name], I.[name] AS [index_name], AC.[name] AS [column_name],  
              I.[type_desc], I.[is_unique], I.[data_space_id], I.[ignore_dup_key], I.[is_primary_key], 
              I.[is_unique_constraint], I.[fill_factor],    I.[is_padded], I.[is_disabled], I.[is_hypothetical], 
              I.[allow_row_locks], I.[allow_page_locks], IC.[is_descending_key], IC.[is_included_column] 
            FROM sys.[tables] AS T  
              INNER JOIN sys.[indexes] I ON T.[object_id] = I.[object_id]  
              INNER JOIN sys.[index_columns] IC ON I.[object_id] = IC.[object_id] 
              INNER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id] AND IC.[column_id] = AC.[column_id] 
            WHERE T.[is_ms_shipped] = 0 AND I.[type_desc] <> 'HEAP' 
            AND T.object_id = OBJECT_ID('[{0}].[{1}]')
            ORDER BY T.[name], I.[index_id], IC.[key_ordinal]";
            DataSet ds = Read(query, schemaName, tableName);
            DataTable dt = ds.Tables[0];
            IList<IndexDefinition> indexes = new List<IndexDefinition>();

            foreach (DataRow dr in dt.Rows)
            {
                List<IndexDefinition> matches = (from i in indexes
                                                 where i.Name == dr["index_name"].ToString()
                                                 && i.SchemaName == dr["Schema"].ToString()
                                                 select i).ToList();

                IndexDefinition iDef = null;
                if (matches.Count > 0) iDef = matches[0];

                // create the table if not found
                if (iDef == null)
                {
                    iDef = new IndexDefinition
                               {
                        Name = dr["index_name"].ToString(),
                        SchemaName = dr["Schema"].ToString(),
                        IsClustered = dr["type_desc"].ToString() == "CLUSTERED",
                        IsUnique = dr["is_unique"].ToString() == "1",
                        TableName = dr["table_name"].ToString()
                    };
                    indexes.Add(iDef);
                }

                // columns
                ICollection<IndexColumnDefinition> ms = (from m in iDef.Columns
                                  where m.Name == dr["column_name"].ToString()
                                  select m).ToList();
                if (ms.Count == 0)
                {
                    iDef.Columns.Add(new IndexColumnDefinition
                                         {
                        Name = dr["column_name"].ToString(),
                        Direction = dr["is_descending_key"].ToString() == "1" ? Direction.Descending : Direction.Ascending
                    });
                }
            }

            return indexes;
        }
 public CreateIndexExpression()
 {
     Index = new IndexDefinition();
 }
Esempio n. 13
0
        protected virtual IndexDefinition ParseCreateIndexStatement(SqliteSyntaxReader reader)
        {
            var index = new IndexDefinition();

            reader.Read();

            reader.Read();
            index.IsUnique = reader.ValueToUpper == "UNIQUE";

            while (reader.ValueToUpper != "INDEX") reader.Read();

            if (reader.Read() == SqliteSyntaxReader.TokenType.StringToken && reader.ValueToUpper == "IF")
            {
                reader.Read(); // NOT
                reader.Read(); // EXISTS
            }
            else
            {
                reader.Rollback();
            }

            index.Name = ParseIdentifier(reader);

            reader.Read(); // ON

            index.TableName = ParseIdentifier(reader);
            
            // Find Column List
            reader.SkipTillToken(SqliteSyntaxReader.TokenType.ListStart);

            // Split the list.
            var list = reader.ReadList();

            foreach (var columnReader in list)
            {
                var column = new IndexColumnDefinition();
                column.Name = ParseIdentifier(columnReader);

                while (columnReader.Read() == SqliteSyntaxReader.TokenType.StringToken)
                {
                    if (columnReader.ValueToUpper == "COLLATE")
                    {
                        columnReader.Read(); // Skip Collation name
                    }
                    else if (columnReader.ValueToUpper == "DESC")
                    {
                        column.Direction = Direction.Descending;
                    }
                }

                index.Columns.Add(column);
            }

            return index;
        }
Esempio n. 14
0
        protected virtual IList<IndexDefinition> ReadIndexes(string schemaName, string tableName)
        {
            var sqlCommand = string.Format(@"SELECT type, name, sql FROM sqlite_master WHERE tbl_name = '{0}' AND type = 'index' AND name NOT LIKE 'sqlite_auto%';", tableName);
            DataTable table = Read(sqlCommand).Tables[0];

            IList<IndexDefinition> indexes = new List<IndexDefinition>();

            foreach (DataRow dr in table.Rows)
            {
                var sql = dr["sql"].ToString();
                var upper = sql.ToUpper();
                var columnsString = GetTextBeteenBrackets(sql);
                var iDef = new IndexDefinition
                {
                    Name = dr["name"].ToString(),
                    SchemaName = schemaName,
                    IsClustered = false,
                    IsUnique = upper.Contains("UNIQUE"),
                    TableName = tableName,
                    Columns = GetIndexColumnsFromIndexDDL(columnsString)
                };

                indexes.Add(iDef);
            }
            return indexes;
        }
 private DeleteIndexExpression GetDeleteIndexExpression()
 {
     IndexDefinition indexDefinition = new IndexDefinition { Name = indexName};
     return new DeleteIndexExpression { Index = indexDefinition };
 }
        private void WriteIndex(StreamWriter output, IndexDefinition index, SchemaMigrationContext context)
        {
            output.WriteLine("\t\t\tCreate.Index(\"" + index.Name + "\").OnTable(\"" + index.TableName + "\")");
             foreach (var column in index.Columns)
             {
            output.Write("\t\t\t\t.OnColumn(\"" + column.Name + "\")");
            if ( column.Direction == Direction.Ascending)
               output.Write(".Ascending()");
            if (column.Direction == Direction.Descending)
               output.Write(".Descending()");
             }

             if ( index.IsUnique || index.IsClustered )
             {
            output.Write(".WithOptions()");

            if ( index.IsUnique )
               output.Write(".Unique()");

            if (index.IsClustered)
               output.Write(".Clustered()");
             }

             output.WriteLine(";");
        }
 private static void WriteDeleteIndex(StreamWriter output, IndexDefinition index)
 {
     output.WriteLine("\t\t\tDelete.Index(\"" + index.Name + "\");");
 }