Ejemplo n.º 1
0
        internal void GetTableConstraintIndexes(Table table)
        {
            DataRow[] indexRows = connector.Indexes.Select(string.Format("TABLE_NAME = '{0}'", table.Name.Replace("'", "''")));
            //foreach (DataRow indexRow in indexRows)
            for (int i = 0; i < indexRows.Length; i++)
            {
                DataRow           indexRow  = indexRows[i];
                DatabaseIndexType indexType = GetIndexType(indexRow["CONSTRAINT_TYPE"].ToString());

                var indexColumnRows = new List <DataRow>();

                indexColumnRows.AddRange(connector.Columns.Select(string.Format("TABLE_NAME = '{0}' AND COLUMN_NAME  = '{1}'", table.Name.Replace("'", "''"), indexRow["COLUMN_NAME"])));

                while ((i < indexRows.Length - 1) && (string)indexRows[i + 1]["TABLE_NAME"] == table.Name && (string)indexRows[i + 1]["INDEX_NAME"] == (string)indexRow["INDEX_NAME"])
                {
                    i++;
                    indexRow = indexRows[i];
                    indexColumnRows.AddRange(connector.Columns.Select(string.Format("TABLE_NAME = '{0}' AND COLUMN_NAME  = '{1}'", table.Name.Replace("'", "''"), indexRow["COLUMN_NAME"])));
                }
                bool  isUnique    = (bool)indexRow["ISUNIQUE"];
                bool  isClustered = (bool)indexRow["ISCLUSTERED"];
                Index index       = new Index
                {
                    Name          = indexRow["INDEX_NAME"].ToString(),
                    IsUserDefined = false,
                    IndexType     = indexType,
                    Parent        = table,
                    IsUnique      = isUnique,
                    IsClustered   = isClustered
                };

                // Fill Columns
                foreach (DataRow indexColumnRow in indexColumnRows)
                {
                    var column = index.AddColumn((string)indexColumnRow["COLUMN_NAME"]);

                    if (index.IsUnique && indexColumnRows.Count == 1)
                    {
                        // Columns are only unique if the index has one column
                        column.IsUnique = true;
                    }
                }
                index.ResetDefaults();
                table.AddIndex(index);
            }
        }
Ejemplo n.º 2
0
        internal void GetTableConstraintIndexes(Table table)
        {
            List <DataRow> indexRows = connector.GetIndexRows(table.Schema, table.Name.Replace("'", "''"));

            for (int i = 0; i < indexRows.Count; i++)
            {
                DataRow           indexRow  = indexRows[i];
                DatabaseIndexType indexType = GetIndexType(indexRow["CONSTRAINT_TYPE"].ToString());

                var indexColumnRows = new List <DataRow>();

                indexColumnRows.AddRange(connector.ColumnsBySchema[table.Schema][table.Name.Replace("'", "''")].Where(c => c[OrdColumn].ToString() == indexRow["COLUMN_NAME"].ToString()));

                while ((i < indexRows.Count - 1) && (string)indexRows[i + 1]["TABLE_NAME"] == table.Name && (string)indexRows[i + 1]["INDEX_NAME"] == (string)indexRow["INDEX_NAME"])
                {
                    i++;
                    indexRow = indexRows[i];
                    indexColumnRows.AddRange(connector.ColumnsBySchema[table.Schema][table.Name.Replace("'", "''")].Where(c => c[OrdColumn].ToString() == indexRow["COLUMN_NAME"].ToString()));
                }
                bool  isUnique    = Convert.ToInt32(indexRow["IS_UNIQUE"]) == 1;
                bool  isClustered = Convert.ToInt32(indexRow["IS_CLUSTERED"]) == 1;
                Index index       = new Index
                {
                    Name          = indexRow["INDEX_NAME"].ToString(),
                    IsUserDefined = false,
                    IndexType     = indexType,
                    Parent        = table,
                    IsUnique      = isUnique,
                    IsClustered   = isClustered
                };

                // Fill Columns
                foreach (DataRow indexColumnRow in indexColumnRows)
                {
                    var column = index.AddColumn((string)indexColumnRow["COLUMN_NAME"]);

                    if (index.IsUnique && indexColumnRows.Count == 1)
                    {
                        // Columns are only unique if the index has one column
                        column.IsUnique = true;
                    }
                }
                index.ResetDefaults();
                table.AddIndex(index);
            }
        }