public DocumentTable(DocumentMapping mapping) : base(mapping.Table) { var pgIdType = TypeMappings.GetPgType(mapping.IdMember.GetMemberType()); AddPrimaryKey(new TableColumn("id", pgIdType)); AddColumn("data", "jsonb", "NOT NULL"); AddColumn <LastModifiedColumn>(); AddColumn <VersionColumn>(); AddColumn <DotNetTypeColumn>(); foreach (var field in mapping.DuplicatedFields) { AddColumn(new DuplicatedFieldColumn(field)); } if (mapping.IsHierarchy()) { AddColumn(new DocumentTypeColumn(mapping)); } if (mapping.DeleteStyle == DeleteStyle.SoftDelete) { AddColumn <DeletedColumn>(); AddColumn <DeletedAtColumn>(); } Indexes.AddRange(mapping.Indexes); ForeignKeys.AddRange(mapping.ForeignKeys); }
private void UpdateGroupedIndexList(DatabaseStatistics statistics) { Indexes.Clear(); if (string.IsNullOrWhiteSpace(SearchText.Value)) { Indexes.AddRange(statistics.Indexes.Where(stats => stats != null) .Select(stats => new IndexItem { Name = stats.Name, GroupName = GetIndexGroup(stats), IndexStats = stats })); } else { Indexes.AddRange(statistics.Indexes .Where(stats => stats != null && stats.Name.IndexOf(SearchText.Value, StringComparison.InvariantCultureIgnoreCase) != -1) .Select(stats => new IndexItem { Name = stats.Name, GroupName = GetIndexGroup(stats), IndexStats = stats })); } CleanGroupIndexes(); foreach (var indexItem in Indexes) { var groupItem = GroupedIndexes.FirstOrDefault(@group => string.Equals(@group.GroupName, indexItem.GroupName, StringComparison.OrdinalIgnoreCase)); if (groupItem == null) { groupItem = new Group(indexItem.GroupName); GroupedIndexes.Add(groupItem); } groupItem.Items.Add(indexItem); } OnPropertyChanged(() => GroupedIndexes); }
public ArrayIndex(SourcePosition pos, IEnumerable <int> indexes = null) : base(pos) { if (indexes != null) { Indexes.AddRange(indexes); } }
internal ClonedDbTable(DBTable table, string prefix) { Prefix = prefix; Columns.AddRange(table.Columns); ForeignKeys.AddRange(table.ForeignKeys); Indexes.AddRange(table.Indexes); IsView = table.IsView; PrimaryKey = table.PrimaryKey; }
public DocumentTable(DocumentMapping mapping) : base(mapping.TableName) { // validate to ensure document has an Identity field or property mapping.CompileAndValidate(); _mapping = mapping; foreach (var index in mapping.IgnoredIndexes) { IgnoredIndexes.Add(index); } var idColumn = new IdColumn(mapping); AddColumn(idColumn).AsPrimaryKey(); if (mapping.TenancyStyle == TenancyStyle.Conjoined) { AddColumn(mapping.Metadata.TenantId).AsPrimaryKey(); Indexes.Add(new DocumentIndex(mapping, TenantIdColumn.Name)); } AddColumn <DataColumn>(); AddIfActive(_mapping.Metadata.LastModified); AddIfActive(_mapping.Metadata.Version); AddIfActive(_mapping.Metadata.DotNetType); AddIfActive(_mapping.Metadata.CorrelationId); AddIfActive(_mapping.Metadata.CausationId); AddIfActive(_mapping.Metadata.LastModifiedBy); AddIfActive(_mapping.Metadata.Headers); foreach (var field in mapping.DuplicatedFields.Where(x => !x.OnlyForSearching)) { AddColumn(new DuplicatedFieldColumn(field)); } if (mapping.IsHierarchy()) { Indexes.Add(new DocumentIndex(_mapping, SchemaConstants.DocumentTypeColumn)); AddColumn(_mapping.Metadata.DocumentType); } if (mapping.DeleteStyle == DeleteStyle.SoftDelete) { AddColumn(_mapping.Metadata.IsSoftDeleted); Indexes.Add(new DocumentIndex(mapping, SchemaConstants.DeletedColumn)); AddColumn(_mapping.Metadata.SoftDeletedAt); } Indexes.AddRange(mapping.Indexes); ForeignKeys.AddRange(mapping.ForeignKeys); }
public DocumentTable(DocumentMapping mapping) : base(mapping.TableName) { // validate to ensure document has an Identity field or property mapping.Validate(); _mapping = mapping; var idColumn = new IdColumn(mapping); if (mapping.TenancyStyle == TenancyStyle.Conjoined) { AddPrimaryKeys(new List <TableColumn> { idColumn, mapping.Metadata.TenantId }); Indexes.Add(new IndexDefinition(mapping, TenantIdColumn.Name)); } else { AddPrimaryKey(idColumn); } AddColumn <DataColumn>(); AddIfActive(_mapping.Metadata.LastModified); AddIfActive(_mapping.Metadata.Version); AddIfActive(_mapping.Metadata.DotNetType); AddIfActive(_mapping.Metadata.CorrelationId); AddIfActive(_mapping.Metadata.CausationId); AddIfActive(_mapping.Metadata.LastModifiedBy); AddIfActive(_mapping.Metadata.Headers); foreach (var field in mapping.DuplicatedFields) { AddColumn(new DuplicatedFieldColumn(field)); } if (mapping.IsHierarchy()) { Indexes.Add(new IndexDefinition(_mapping, SchemaConstants.DocumentTypeColumn)); AddColumn(_mapping.Metadata.DocumentType); } if (mapping.DeleteStyle == DeleteStyle.SoftDelete) { AddColumn(_mapping.Metadata.IsSoftDeleted); Indexes.Add(new IndexDefinition(mapping, SchemaConstants.DeletedColumn)); AddColumn(_mapping.Metadata.SoftDeletedAt); } Indexes.AddRange(mapping.Indexes); ForeignKeys.AddRange(mapping.ForeignKeys); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void Add([NotNull] List <Tuple <InternalIndexBuilder, ConfigurationSource> > indexes) { if (Indexes == null) { Indexes = indexes; } else { Indexes.AddRange(indexes); } }
public DocumentTable(DocumentMapping mapping) : base(mapping.Table) { // validate to ensure document has an Identity field or property mapping.Validate(); var pgIdType = TypeMappings.GetPgType(mapping.IdMember.GetMemberType()); var pgTextType = TypeMappings.GetPgType(string.Empty.GetType()); var idColumn = new TableColumn("id", pgIdType); if (mapping.TenancyStyle == TenancyStyle.Conjoined) { AddPrimaryKeys(new List <TableColumn> { idColumn, new TenantIdColumn() }); Indexes.Add(new IndexDefinition(mapping, TenantIdColumn.Name)); } else { AddPrimaryKey(idColumn); } AddColumn("data", "jsonb", "NOT NULL"); AddColumn <LastModifiedColumn>(); AddColumn <VersionColumn>(); AddColumn <DotNetTypeColumn>(); foreach (var field in mapping.DuplicatedFields) { AddColumn(new DuplicatedFieldColumn(field)); } if (mapping.IsHierarchy()) { AddColumn(new DocumentTypeColumn(mapping)); } if (mapping.DeleteStyle == DeleteStyle.SoftDelete) { AddColumn <DeletedColumn>(); Indexes.Add(new IndexDefinition(mapping, DocumentMapping.DeletedColumn)); AddColumn <DeletedAtColumn>(); } Indexes.AddRange(mapping.Indexes); ForeignKeys.AddRange(mapping.ForeignKeys); }
public bool LoadDatabase(string path) { _dbInfo = new DatabaseInfo(new FirebirdInfo(path)); if (!_dbInfo.CanLoadDatabase) { return(false); } using (var con = new FbConnection(_dbInfo.ConnectionString)) { con.Open(); foreach (var item in _dbInfo.GetTables(con)) { var vm = new TableViewModel(item.TableName); foreach (var colums in item.GetColums(con)) { vm.Colums.Add(new ColumViewMoodel(colums)); } foreach (var trigger in item.GetTrigger(con)) { vm.Triggers.Add(new TriggerViewModel(trigger)); } foreach (var idx in item.GetIndex(con)) { vm.Indexs.Add(new IndexViewModel(idx)); } Tables.Add(vm); } Triggers.AddRange(Tables.SelectMany(x => ((TableViewModel)x).Triggers).ToArray()); Indexes.AddRange(Tables.SelectMany(x => ((TableViewModel)x).Indexs).ToArray()); foreach (var item in _dbInfo.GetViews(con)) { var vm = new TableViewViewModel(item.ViewName, item.Source); foreach (var colums in item.GetColums(con)) { vm.Colums.Add(new ColumViewMoodel(colums)); } Tables.Add(vm); } RaisePropertyChanged(nameof(Tables)); RaisePropertyChanged(nameof(Triggers)); RaisePropertyChanged(nameof(Indexes)); } return(true); }
public EntityTypeMapping(IEntityType entityType) { Name = entityType.Name; TableName = entityType.GetTableName(); PrimaryKey = entityType.FindPrimaryKey() !.ToDebugString(MetadataDebugStringOptions.SingleLineDefault); Properties.AddRange( entityType.GetProperties() .Select(p => p.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); Indexes.AddRange( entityType.GetIndexes().Select(i => $"{i.Properties.Format()} {(i.IsUnique ? "Unique" : "")}")); FKs.AddRange( entityType.GetForeignKeys().Select(f => f.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); Navigations.AddRange( entityType.GetNavigations().Select(n => n.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); SkipNavigations.AddRange( entityType.GetSkipNavigations().Select(n => n.ToDebugString(MetadataDebugStringOptions.SingleLineDefault))); }
private void UpdateGroupedIndexList(DatabaseStatistics statistics) { Indexes.Clear(); Indexes.AddRange(statistics.Indexes.Select(stats => new IndexItem { Name = stats.Name, GroupName = GetIndexGroup(stats), IndexStats = stats })); CleanGroupIndexes(); foreach (var indexItem in Indexes) { var groupItem = GroupedIndexes.FirstOrDefault(@group => string.Equals(@group.GroupName, indexItem.GroupName, StringComparison.OrdinalIgnoreCase)); if (groupItem == null) { groupItem = new Group(indexItem.GroupName); GroupedIndexes.Add(groupItem); } groupItem.Items.Add(indexItem); } OnPropertyChanged(() => GroupedIndexes); }
/// <summary> /// Чтение заголовком атрибутов /// </summary> /// <param name="sector">Запись МФТ в виде массива байт</param> private void LoadAttributes(byte[] sector) { Attributes = new List <Attribute>(); // создаем пустой список аттрибутов int offset = AttrsOffset; // смещение до первого аттрибута Attribute Attribute = new Attribute(sector, offset); // считываем первый аттрибут Attributes.Add(Attribute); //сохраняем в списке аттрибутов if (Signature != "FILE") // если текущая запись МФТ не файл, то прекращаем чтение { return; } while (Attribute.Type != AttributeTypes.AT_END) // пока не дошли до последнего аттрибута { if (Attribute.NonResidentFlg == 1) // Если аттрибут нерезидентный, то считываем его список отрезков и высчитываем адреса занимаемых кластеров { int runListStart = offset + Attribute.NonResident.MappingPairOffset; // начало списка отрезков int currenrRunList = runListStart; byte RunListCurrentByte = sector[currenrRunList]; byte NumByteInRunOffset = (byte)(RunListCurrentByte >> 4); // сколько байт отводится под адрес начального кластера byte NumByteInRunLen = (byte)(RunListCurrentByte & 0x0F); // сколько байт отводится под длину отрезка currenrRunList++; int currentSeg = 0; do { LineSegment seg = new LineSegment(); // создаем новый отрезок int segmentLength = 0; for (int i = 0; i < NumByteInRunLen; i++) { segmentLength += sector[currenrRunList] << (i * 8); currenrRunList++; } for (int i = 0; i < NumByteInRunOffset; i++) { seg.Start += (ulong)sector[currenrRunList] << (i * 8); currenrRunList++; } if (currentSeg != 0) { seg.Start += Attribute.NonResident.Clusters[currentSeg - 1].Start; // высчитываем LCN начального кластера } seg.End = seg.Start + (ulong)segmentLength; // высчитываем адрес конечного кластера отрезка Attribute.NonResident.Clusters.Add(seg); RunListCurrentByte = sector[currenrRunList]; // переходим к следующему отрезку NumByteInRunOffset = (byte)(RunListCurrentByte >> 4); NumByteInRunLen = (byte)(RunListCurrentByte & 0x0F); currenrRunList++; currentSeg++; } while (RunListCurrentByte != 0); // подка не закончится список отрезков } if (Attribute.Type == AttributeTypes.AT_INDEX_ROOT && FileName != "$Secure") // если аттрибут INDEX_ROOT, то считываем индексные элементы { Indexes.AddRange(IndexElements(sector, offset, Attribute)); } if (Attribute.Type == AttributeTypes.AT_INDEX_ALLOCATION && FileName != "$Secure") // если аттрибут INDEX_ALLOCATIOB, то считываем индексные записи из списка отрезков, и читаем из них индексные элементы { Indexes.AddRange(IndexAllocationElements(this, Attribute)); } if (Attribute.Type == AttributeTypes.AT_FILE_NAME) // если аттрибут FILE_NAME, то читаем имя файла { ParentDir = 0; for (int i = 0; i < 6; i++) { ParentDir += (ulong)sector[offset + Attribute.Resident.ValueOffset + i] << (i * 8); } byte[] chars = new byte[sector[offset + 0x58] * 2]; for (int i = 0; i < chars.Length; i += 2) { chars[i] = (byte)(sector[offset + 0x5A + i] + (sector[offset + 0x5A + i + 1] << 8)); } char[] unicode = new char[sector[offset + 0x58]]; Encoding.Unicode.GetChars(chars, 0, chars.Length, unicode, 0); FileName = new string(unicode); } offset += Attribute.Length; Attribute = new Attribute(sector, offset); // считываем следующий аттрибут Attributes.Add(Attribute); } }