/// <summary> /// Adds keys to index of table. /// </summary> /// <param name="tableDescription">Table description.</param> /// <param name="tableDefinition">Table definition.</param> /// <param name="indexes">Database indexes.</param> private void _AddKeysToTableIndex(TableDescription tableDescription, ITableDefinition tableDefinition, ADOX.Indexes indexes) { ICollection <TableInfo> patternTables = _structureKeeper.GetPattern(ExportType.Access); foreach (TableInfo tableInfo in patternTables) { if (tableInfo.Type != tableDefinition.Type) { continue; // skip } foreach (TableIndex indexDefinition in tableInfo.Indexes) { if (_IsIndexFieldSelected(indexDefinition.FieldNames, tableDefinition.Fields)) { _AddKeyToTableIndex(tableDescription, indexDefinition, indexes); } } break; // process done } }
/// <summary> /// Adds key to index of table. /// </summary> /// <param name="tableDescription">Table description.</param> /// <param name="indexDefinition">Index definition.</param> /// <param name="indexes">Database indexes.</param> private void _AddKeyToTableIndex(TableDescription tableDescription, TableIndex indexDefinition, ADOX.Indexes indexes) { Debug.Assert(null != tableDescription); Debug.Assert(null != indexDefinition); Debug.Assert(null != indexes); var index = new ADOX.Index(); ADOX.Columns columns = index.Columns; switch (indexDefinition.Type) { case TableIndexType.Primary: case TableIndexType.Simple: { string field = indexDefinition.FieldNames[0]; if (TableIndexType.Primary == indexDefinition.Type) { index.Name = INDEX_PRIMARY_KEY; index.PrimaryKey = true; index.Unique = true; } else // simple { index.Name = field; } FieldInfo info = tableDescription.GetFieldInfo(field); Debug.Assert(null != info); columns.Append(info.Name, _ConvertType(info.Type), info.Size); break; } case TableIndexType.Multiple: { var sbKeyName = new StringBuilder(); foreach (string field in indexDefinition.FieldNames) { FieldInfo info = tableDescription.GetFieldInfo(field); Debug.Assert(null != info); columns.Append(info.Name, _ConvertType(info.Type), info.Size); if (!string.IsNullOrEmpty(sbKeyName.ToString())) { sbKeyName.Append(SQL_KEY_SYMBOL); } sbKeyName.Append(field); } index.Name = sbKeyName.ToString(); break; } default: { Debug.Assert(false); // NOTE: not supported break; } } index.IndexNulls = ADOX.AllowNullsEnum.adIndexNullsAllow; indexes.Append(index, null); }