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); } }
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); } }