public static CreateForeignKeyExpression GetCreateForeignKeyExpression()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.Name = "FK_Test";
            expression.ForeignKey.PrimaryTable = TestTableName2;
            expression.ForeignKey.ForeignTable = TestTableName1;
            expression.ForeignKey.PrimaryColumns = new[] { TestColumnName2 };
            expression.ForeignKey.ForeignColumns = new[] { TestColumnName1 };

            return expression;
        }
        public void CanCreateForeignKey()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.Name = "FK_Test";
            expression.ForeignKey.PrimaryTable = "TestPrimaryTable";
            expression.ForeignKey.ForeignTable = "TestForeignTable";
            expression.ForeignKey.PrimaryColumns = new[] { "Column1", "Column2" };
            expression.ForeignKey.ForeignColumns = new[] { "Column3", "Column4" };

            string sql = generator.Generate(expression);
            sql.ShouldBe("ALTER TABLE TestForeignTable ADD CONSTRAINT FK_Test FOREIGN KEY (Column3,Column4) REFERENCES TestPrimaryTable (Column1,Column2)");
        }
        public void CanCreateForeignKey()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.Name = "FK_Test";
            expression.ForeignKey.PrimaryTable = "TestPrimaryTable";
            expression.ForeignKey.ForeignTable = "TestForeignTable";
            expression.ForeignKey.PrimaryColumns = new[] { "Column1", "Column2" };
            expression.ForeignKey.ForeignColumns = new[] { "Column3", "Column4" };

            var sql = generator.Generate(expression);
            sql.ShouldBe(
                "ALTER TABLE [TestForeignTable] ADD CONSTRAINT FK_Test FOREIGN KEY ([Column3],[Column4]) REFERENCES [TestPrimaryTable] ([Column1],[Column2])");
        }
        public override string Generate(CreateForeignKeyExpression expression)
        {
            string primaryColumns = GetColumnList(expression.ForeignKey.PrimaryColumns);
            string foreignColumns = GetColumnList(expression.ForeignKey.ForeignColumns);

            string sql = "ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4})";

            return String.Format(sql,
                            expression.ForeignKey.ForeignTable,
                            expression.ForeignKey.Name,
                            foreignColumns,
                            expression.ForeignKey.PrimaryTable,
                            primaryColumns
                            );
        }
 public void ToStringIsDescriptive()
 {
     var sql = new CreateForeignKeyExpression
                 {
                     ForeignKey = new ForeignKeyDefinition
                                     {
                                         ForeignColumns = new Collection<string> { "User_id" },
                                         ForeignTable = "UserRoles",
                                         PrimaryColumns = new Collection<string> { "Id" },
                                         PrimaryTable = "User",
                                         Name = "FK"
                                     }
                 }.ToString();
     sql.ShouldBe("CreateForeignKey FK UserRoles(User_id) User(Id)");
 }
        public override string Generate(CreateForeignKeyExpression expression)
        {
            var primaryColumns = GetColumnList(expression.ForeignKey.PrimaryColumns);
            var foreignColumns = GetColumnList(expression.ForeignKey.ForeignColumns);

            const string sql = "ALTER TABLE {0}[{1}] ADD CONSTRAINT {2} FOREIGN KEY ({3}) REFERENCES {4}[{5}] ({6})";

            return string.Format(sql,
                                 FormatSchema(expression.ForeignKey.ForeignTableSchema),
                                 expression.ForeignKey.ForeignTable,
                                 expression.ForeignKey.Name,
                                 foreignColumns,
                                 FormatSchema(expression.ForeignKey.PrimaryTableSchema),
                                 expression.ForeignKey.PrimaryTable,
                                 primaryColumns
                );
        }
        public override string Generate(CreateForeignKeyExpression expression)
        {
            string primaryColumns = GetColumnList(expression.ForeignKey.PrimaryColumns);
            string foreignColumns = GetColumnList(expression.ForeignKey.ForeignColumns);

            string sql = "ALTER TABLE `{0}` ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}){5}{6}";

            return String.Format(sql,
                            expression.ForeignKey.ForeignTable,
                            expression.ForeignKey.Name,
                            foreignColumns,
                            expression.ForeignKey.PrimaryTable,
                            primaryColumns,
                            FormatCascade("DELETE", expression.ForeignKey.OnDelete),
                            FormatCascade("UPDATE", expression.ForeignKey.OnUpdate)
                            );
        }
        public override string Generate(CreateForeignKeyExpression expression)
        {
            var primaryColumns = GetColumnList(expression.ForeignKey.PrimaryColumns);
            var foreignColumns = GetColumnList(expression.ForeignKey.ForeignColumns);

            const string sql = "ALTER TABLE {0}.{1} ADD CONSTRAINT {2} FOREIGN KEY ({3}) REFERENCES {4}.{5} ({6}){7}{8}";

            return string.Format(sql,
                                Quoter.QuoteSchemaName(expression.ForeignKey.ForeignTableSchema),
                                Quoter.QuoteTableName(expression.ForeignKey.ForeignTable),
                                Quoter.Quote(expression.ForeignKey.Name),
                                foreignColumns,
                                Quoter.QuoteSchemaName(expression.ForeignKey.PrimaryTableSchema),
                                Quoter.QuoteTableName(expression.ForeignKey.PrimaryTable),
                                primaryColumns,
                                FormatCascade("DELETE", expression.ForeignKey.OnDelete),
                                FormatCascade("UPDATE", expression.ForeignKey.OnUpdate)
                );
        }
 public void Truncate(CreateForeignKeyExpression expression)
 {
     Truncate(expression.ForeignKey);
 }
Beispiel #10
0
 public override string Generate(CreateForeignKeyExpression expression)
 {
     return string.Format("{0};", base.Generate(expression));            
 }
 public virtual string GenerateForeignKeyName(CreateForeignKeyExpression expression)
 {
     return string.Format("FK_{0}_{1}", expression.ForeignKey.PrimaryTable.Substring(0, 5), expression.ForeignKey.ForeignTable.Substring(0, 5));
 }
 public ICreateForeignKeyFromTableSyntax ForeignKey()
 {
     var expression = new CreateForeignKeyExpression();
     _context.Expressions.Add(expression);
     return new CreateForeignKeyExpressionBuilder(expression);
 }
 public override string Generate(CreateForeignKeyExpression expression)
 {
     return compatabilityMode.HandleCompatabilty("Forign keys are not supported in Sqlite");
 }
        public void CanForeignKeyToUniqueColumn()
        {
            // Arrange

              var create = new CreateTableExpression
              {
              TableName = "Foo",
              Columns = new[]{
                   new ColumnDefinition {Name = "Id", Type = DbType.Int32, IsPrimaryKey = true}
                   , new ColumnDefinition {Name = "Type", Type = DbType.Int32}
                    }
              };

              var index = new CreateIndexExpression
              {
              Index =
                 new IndexDefinition()
                 {
                     Name = "IDX_FooType",
                     TableName = "Foo",
                     IsUnique = true,
                     Columns = new List<IndexColumnDefinition> { new IndexColumnDefinition { Name = "Type" } }
                 }
              };

              var secondTable = new CreateTableExpression
              {
              TableName = "Bar",
              Columns = new[]{
                   new ColumnDefinition {Name = "Id", Type = DbType.Int32, IsPrimaryKey = true}
                   , new ColumnDefinition {Name = "FooType", Type = DbType.Int32}
                    }
              };

              var foreignKey = new CreateForeignKeyExpression
              {
              ForeignKey =
                 new ForeignKeyDefinition()
                 {
                     Name = "FK_FooType",
                     ForeignTable = "Bar",
                     ForeignColumns = new [] { "FooType" },
                     PrimaryTable= "Foo",
                     PrimaryColumns = new[] { "Type" }
                 }
              };

              // Act
              MigrateToOracleWithData(new List<IMigrationExpression> { create, index, secondTable, foreignKey }, 2);

              // Assert
        }
 public void CallingOnUpdateSetsOnUpdateToSpecifiedRule(Rule rule)
 {
     var expression = new CreateForeignKeyExpression();
     var builder = new CreateForeignKeyExpressionBuilder(expression);
     builder.OnUpdate(rule);
     Assert.That(expression.ForeignKey.OnUpdate, Is.EqualTo(rule));
     Assert.That(expression.ForeignKey.OnDelete, Is.EqualTo(Rule.None));
 }
 public virtual void Process(CreateForeignKeyExpression expression)
 {
     Process(Generator.Generate(expression));
 }
        public static CreateForeignKeyExpression GetCreateForeignKeyExpression()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.PrimaryTable = TestTableName2;
            expression.ForeignKey.ForeignTable = TestTableName1;
            expression.ForeignKey.PrimaryColumns = new[] { TestColumnName2 };
            expression.ForeignKey.ForeignColumns = new[] { TestColumnName1 };

            expression.ApplyConventions(new MigrationConventions());
            return expression;
        }
Beispiel #18
0
 public abstract string Generate(CreateForeignKeyExpression expression);
 public override string Generate(CreateForeignKeyExpression expression)
 {
     // Ignore foreign keys for SQLite
     return "";
 }
        public void CanCreateForeignKeyToDifferentSchema()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.Name = "FK_Test";
            expression.ForeignKey.PrimaryTable = "TestPrimaryTable";
            expression.ForeignKey.ForeignTable = "TestForeignTable";
            expression.ForeignKey.PrimaryColumns = new[] { "Column1", "Column2" };
            expression.ForeignKey.ForeignColumns = new[] { "Column3", "Column4" };
            expression.ForeignKey.PrimaryTableSchema = "wibble";

            string sql = generator.Generate(expression);
            sql.ShouldBe("ALTER TABLE \"public\".\"TestForeignTable\" ADD CONSTRAINT \"FK_Test\" FOREIGN KEY (\"Column3\",\"Column4\") REFERENCES \"wibble\".\"TestPrimaryTable\" (\"Column1\",\"Column2\")");
        }
 public ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName)
 {
     var expression = new CreateForeignKeyExpression { ForeignKey = { Name = foreignKeyName } };
     _context.Expressions.Add(expression);
     return new CreateForeignKeyExpressionBuilder(expression);
 }
        public void CanCreateForeignKeyWithDeleteCascade()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.Name = "FK_Test";
            expression.ForeignKey.PrimaryTable = "TestPrimaryTable";
            expression.ForeignKey.ForeignTable = "TestForeignTable";
            expression.ForeignKey.PrimaryColumns = new[] { "Column1", "Column2" };
            expression.ForeignKey.ForeignColumns = new[] { "Column3", "Column4" };
            expression.ForeignKey.OnDelete = Rule.Cascade;

            string sql = generator.Generate(expression);
            sql.ShouldBe("ALTER TABLE \"public\".\"TestForeignTable\" ADD CONSTRAINT \"FK_Test\" FOREIGN KEY (\"Column3\",\"Column4\") REFERENCES \"public\".\"TestPrimaryTable\" (\"Column1\",\"Column2\") ON DELETE CASCADE");
        }
        public override string Generate(CreateForeignKeyExpression expression)
        {
            if (expression.ForeignKey.PrimaryColumns.Count != expression.ForeignKey.ForeignColumns.Count)
            {
                throw new ArgumentException("Number of primary columns and secondary columns must be equal");
            }

            string keyName = string.IsNullOrEmpty(expression.ForeignKey.Name)
                ? GenerateForeignKeyName(expression)
                : expression.ForeignKey.Name;

            List<string> primaryColumns = new List<string>();
            List<string> foreignColumns = new List<string>();
            foreach (var column in expression.ForeignKey.PrimaryColumns)
            {
                primaryColumns.Add(Quoter.QuoteColumnName(column));
            }

            foreach (var column in expression.ForeignKey.ForeignColumns)
            {
                foreignColumns.Add(Quoter.QuoteColumnName(column));
            }
            return string.Format(
                CreateForeignKeyConstraint,
                Quoter.QuoteTableName(expression.ForeignKey.ForeignTable),
                Quoter.QuoteColumnName(keyName),
                String.Join(", ", foreignColumns.ToArray()),
                Quoter.QuoteTableName(expression.ForeignKey.PrimaryTable),
                String.Join(", ", primaryColumns.ToArray()),
                FormatCascade("DELETE", expression.ForeignKey.OnDelete),
                FormatCascade("UPDATE", expression.ForeignKey.OnUpdate)
                );
        }
        public void CanCreateForeignKeyWithUpdateSetNull()
        {
            var expression = new CreateForeignKeyExpression();
            expression.ForeignKey.Name = "FK_Test";
            expression.ForeignKey.PrimaryTable = "TestPrimaryTable";
            expression.ForeignKey.ForeignTable = "TestForeignTable";
            expression.ForeignKey.PrimaryColumns = new[] { "Column1", "Column2" };
            expression.ForeignKey.ForeignColumns = new[] { "Column3", "Column4" };
            expression.ForeignKey.OnUpdate = Rule.SetNull;

            string sql = generator.Generate(expression);
            sql.ShouldBe("ALTER TABLE \"public\".\"TestForeignTable\" ADD CONSTRAINT \"FK_Test\" FOREIGN KEY (\"Column3\",\"Column4\") REFERENCES \"public\".\"TestPrimaryTable\" (\"Column1\",\"Column2\") ON UPDATE SET NULL");
        }
 public override string Generate(CreateForeignKeyExpression expression)
 {
     truncator.Truncate(expression);
     return base.Generate(expression);
 }
 public override string Generate(CreateForeignKeyExpression expression)
 {
     throw new NotImplementedException();
 }