/// <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); }
/// <summary> /// Adds fields to table. /// </summary> /// <param name="tableDefinition">Table definition.</param> /// <param name="tableDescription">Table Description.</param> /// <param name="columns">Database columns.</param> private void _AddFieldsToTable(ITableDefinition tableDefinition, TableDescription tableDescription, ADOX.Columns columns) { Debug.Assert(null != tableDefinition); Debug.Assert(null != tableDescription); Debug.Assert(null != columns); ICollection<string> fields = tableDefinition.Fields; foreach (string field in fields) { FieldInfo info = tableDescription.GetFieldInfo(field); Debug.Assert(null != info); columns.Append(info.Name, _ConvertType(info.Type), info.Size); // make field not required ADOX.Column column = columns[info.Name]; column.Attributes = ADOX.ColumnAttributesEnum.adColNullable; } }