public override void WriteToStream(IndentStream stream)
        {
            stream.Write("CONSTRAINT ");
            ConstraintName.WriteToStream(stream);

            stream.Write($" ");
            KeyType.WriteToStream(stream);

            if (ClusterExpr != null)
            {
                stream.Write(" ");
                ClusterExpr.WriteToStream(stream);
            }

            if (WithExpr != null)
            {
                stream.Write(" ");
                WithExpr.WriteToStream(stream);
            }

            if (OnPrimary != null)
            {
                stream.Write(" ");
                OnPrimary.WriteToStream(stream);
            }
        }
Exemple #2
0
        public DataRow FillRow(int parentID, DataRow dr)
        {
            dr["id"]                    = dr.Table.Rows.Count;
            dr["parent_id"]             = parentID;
            dr["table_name"]            = TableName.ToLower();
            dr["constraint_name"]       = ConstraintName.ToLower();
            dr["references_table_name"] = ReferencesTableName.ToLower();
            dr["on_delete_action"]      = OnDeleteAction;
            dr["on_update_action"]      = OnUpdateAction;

            return(dr);
        }
Exemple #3
0
 public string getScript()
 {
     return(string.Format(
                "ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4})",
                new string[]
     {
         TableName.ToUpper(),
         ConstraintName.ToUpper(),
         ColumnName.ToUpper(),
         TableReference.ToUpper(),
         ColumnReference.ToUpper()
     }));
 }
        public void ShouldReturnPrimaryKeyConstraintNameForConstraintNameClassTestFixture()
        {
            var schemaName = "schemaName";
            var tableName  = "tableName";

            string[]       columnName      = new string[] { "column1", "column2" };
            string[]       smokeColumnName = new string[] { "column1" };
            ConstraintType c_type          = ConstraintType.PrimaryKey;

            var cons = new ConstraintName(schemaName, tableName, columnName, c_type);
            var expectedConstraintString = "PK_schemaName_tableName";

            Assert.AreEqual(expectedConstraintString, cons.ToString());
        }
        public void ShouldReturnDefaultConstraintNameWithDBOSchemaForConstraintNameClassTestFixture()
        {
            var schemaName = "dbo";
            var tableName  = "tableName";

            string[]       columnName      = new string[] { "column1", "column2" };
            string[]       smokeColumnName = new string[] { "column1" };
            ConstraintType c_type          = ConstraintType.Default;

            var cons = new ConstraintName(schemaName, tableName, columnName, c_type);
            var expectedConstraintString = "DF_tableName_column1_column2";

            Assert.AreEqual(expectedConstraintString, cons.ToString());
        }
        public void ShouldSetPropertiesForConstraintNameClassTestFixture()
        {
            var schemaName = "schemaName";
            var tableName  = "tableName";

            string[] columnName      = new string[] { "column1", "column2" };
            string[] smokeColumnName = new string[] { "column1" };

            var cons = new ConstraintName(schemaName, tableName, columnName, ConstraintType.Default);

            Assert.AreEqual(schemaName, cons.SchemaName);
            Assert.AreEqual(tableName, cons.TableName);
            Assert.AreEqual(columnName, cons.ColumnName);
            Assert.AreNotEqual(smokeColumnName, cons.ColumnName);
            Assert.AreEqual(ConstraintType.Default, cons.Type);
        }
        internal override string generateCreateSql()
        {
            /*
             * Oracle> ALTER TABLE aact ADD CONSTRAINT FK_AACT_ACID FOREIGN KEY (ACID) REFERENCES ACC (ACID)
             */

            StringBuilder sb = new StringBuilder();

            sb.Append("ALTER TABLE ")
            .Append(FullTableName.ToUpper())
            .Append(@" ADD CONSTRAINT ")
            .Append(ConstraintName.ToUpper())      // oracle doesn't like the schema name put here, so we use the constraint name only
            .Append(@" FOREIGN KEY (");

            foreach (FieldInfo fi in this.SourceFields)
            {
                sb.Append(fi.Name).Append(@", ");
            }
            sb.Remove(sb.Length - 2, 2);

            sb.Append(@") REFERENCES ")
            .Append(this.ReferencesFullTableName.ToUpper())
            .Append(@" (");

            foreach (FieldInfo fi2 in this.ReferencesFields)
            {
                sb.Append(fi2.Name).Append(", ");
            }
            sb.Remove(sb.Length - 2, 2);
            sb.Append(")");             // ON DELETE RESTRICT ON UPDATE RESTRICT)");


            string ret = sb.ToString();

            return(ret);
        }
        public void ShouldNotIncludeColumnsForPrimaryKey()
        {
            var name = new ConstraintName("dbo", "TableName", new[] { "does", "not", "matter" }, ConstraintType.PrimaryKey);

            Assert.That(name.ToString(), Is.EqualTo("PK_TableName"));
        }
Exemple #9
0
    protected override IEnumerable <Command> OnCreate(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
    {
        var command = new Command();

        command.Append($"ALTER TABLE {RelationName.AsSqlIndentifier()}");
        if (!SqlHelper.IsImplicitIntegrityConstraintName(ConstraintName))
        {
            command.Append($" ADD CONSTRAINT {ConstraintName.AsSqlIndentifier()}");
        }
        else
        {
            command.Append(" ADD");
        }

        switch (RelationConstraintType)
        {
        case RelationConstraintType.Check:
            command.Append($" {Triggers[0].TriggerSource}");
            break;

        case RelationConstraintType.NotNull:
            break;

        case RelationConstraintType.ForeignKey:
        case RelationConstraintType.PrimaryKey:
        case RelationConstraintType.Unique:
        {
            var fields =
                Index
                .Segments
                .OrderBy(s => s.FieldPosition)
                .Select(s => s.FieldName);

            command.Append($" {RelationConstraintType.ToDescription()} ({string.Join(", ", fields)})");

            if (RelationConstraintType == RelationConstraintType.ForeignKey)
            {
                var referenceConstraint         = sourceMetadata.MetadataConstraints.ReferenceConstraintsByName[ConstraintName];
                var referenceRelationConstraint = referenceConstraint.RelationConstraintUq;
                var primaryKeyFields            =
                    referenceRelationConstraint
                    .Index
                    .Segments
                    .OrderBy(s => s.FieldPosition)
                    .Select(s => s.FieldName);

                command
                .AppendLine()
                .Append($"  REFERENCES {referenceRelationConstraint.RelationName} ({string.Join(", ", primaryKeyFields)})");
                if (referenceConstraint.UpdateRule != ConstraintRule.Restrict)
                {
                    command
                    .AppendLine()
                    .Append($"  ON UPDATE {referenceConstraint.UpdateRule.ToDescription()}");
                }
                if (referenceConstraint.DeleteRule != ConstraintRule.Restrict)
                {
                    command
                    .AppendLine()
                    .Append($"  ON DELETE {referenceConstraint.DeleteRule.ToDescription()}");
                }
                if (referenceConstraint.UpdateRule != ConstraintRule.Restrict || referenceConstraint.DeleteRule != ConstraintRule.Restrict)
                {
                    command.AppendLine();
                }
            }

            command.Append(AddConstraintUsingIndex(sourceMetadata, targetMetadata, context));
            break;
        }

        default:
            throw new ArgumentOutOfRangeException($"Unknown relation constraint type: {RelationConstraintType}.");
        }

        yield return(command);
    }
Exemple #10
0
 protected override IEnumerable <Command> OnDrop(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
 {
     yield return(new Command()
                  .Append($"ALTER TABLE {RelationName.AsSqlIndentifier()} DROP CONSTRAINT {ConstraintName.AsSqlIndentifier()}"));
 }