Ejemplo n.º 1
0
 private PrimaryKeyDetail GetPrimaryKeyDetails(string schemaName, string tableName, string constraintName, bool disabled)
 {
     return(new PrimaryKeyDetail(SelectSqlData.GetIndex(schemaName, tableName, constraintName, disabled, Connection)));
 }
Ejemplo n.º 2
0
        private IEnumerable <ConstraintDetail> GetConstraintDetails(string schemaName, string tableName, string columnName, string inboundForeignKey)
        {
            string databaseName = Connection.Database;

            using (var constraintReader = SelectSqlData.SelectIndexesConstraintsAndStatistics(Connection, tableName, columnName))
            {
                while (constraintReader.Read())
                {
                    string constraintType = constraintReader["constraint_type"] as string;
                    string constraintName = constraintReader["index_name"] as string;
                    string constraintData = constraintReader["data"] as string;
                    bool   disabled       = (int)constraintReader["is_disabled"] > 0;
                    bool   untrusted      = (int)constraintReader["is_not_trusted"] > 0;

                    switch (constraintType)
                    {
                    case "FK_IN":
                        // it's a foreign key reference from this column
                        if (!StringComparer.OrdinalIgnoreCase.Equals(constraintName, inboundForeignKey))
                        {
                            throw new Exception(
                                      $"Column {databaseName}.{schemaName}.{tableName}.{columnName} is referenced by foreign key {constraintName} which comes from column {constraintData} - recursion should start from at least there.");
                        }
                        break;

                    case null:
                        // it's an index
                        yield return(new IndexDetail(SelectSqlData.GetIndex(schemaName, tableName, constraintName, disabled, Connection)));

                        break;

                    case "PK":
                        // it's a primary key constraint
                        yield return(GetPrimaryKeyDetails(schemaName, tableName, constraintName, disabled));

                        break;

                    case "UQ":
                        // it's a unique constraint
                        yield return(GetUniqueConstraintDetails(schemaName, tableName, constraintName, disabled));

                        break;

                    case "D":
                        // it's a default constraint
                        yield return(GetDefaultConstraintDetails(constraintName, schemaName, tableName, columnName, constraintData));

                        break;

                    case "C":
                        // it's a check constraint
                        yield return(GetCheckConstraintDetails(constraintName, schemaName, tableName, columnName, constraintData, untrusted, disabled));

                        break;

                    case "FK":
                        // it's a foreign key reference into this column
                        yield return(SelectSqlData.GetForeignKeyDetails(schemaName, tableName, constraintName, untrusted, disabled, Connection));

                        break;

                    case "STAT":
                        // it's a statistics object on this column
                        yield return(SelectSqlData.GetStatisticsDetails(schemaName, tableName, constraintName, Connection));

                        break;
                    }
                }

                yield break;
            }
        }