private void ReadColumns(BinaryReader reader, CremaBinaryTable table, int columnCount) { var keys = new List <IColumn>(); var columns = new CremaBinaryColumnCollection(table, columnCount, this.CaseSensitive); var tableStrings = StringResource.GetTableStrings(table); for (var i = 0; i < columnCount; i++) { var columninfo = reader.ReadValue <ColumnInfo>(); var columnName = tableStrings.GetString(columninfo.ColumnName); var typeName = tableStrings.GetString(columninfo.DataType); var isKey = columninfo.Iskey == 0 ? false : true; var column = new CremaBinaryColumn(columnName, Utility.NameToType(typeName), isKey); columns.Add(column); if (isKey == true) { keys.Add(column); } column.Table = table; } table.Columns = columns; table.Keys = keys.ToArray(); }
private CremaBinaryTable ReadTable(BinaryReader reader, long offset) { TableHeader tableHeader; TableInfo tableInfo; reader.Seek(offset, SeekOrigin.Begin); reader.ReadValue(out tableHeader); reader.Seek(tableHeader.TableInfoOffset + offset, SeekOrigin.Begin); reader.ReadValue(out tableInfo); var table = new CremaBinaryTable(this, tableInfo.RowCount, this.options); reader.Seek(tableHeader.StringResourcesOffset + offset, SeekOrigin.Begin); StringResource.Read(reader, table); reader.Seek(tableHeader.ColumnsOffset + offset, SeekOrigin.Begin); this.ReadColumns(reader, table, tableInfo.ColumnCount); reader.Seek(tableHeader.RowsOffset + offset, SeekOrigin.Begin); this.ReadRows(reader, table, tableInfo.RowCount); var tableStrings = StringResource.GetTableStrings(table); table.Name = tableStrings.GetString(tableInfo.TableName); table.Category = tableStrings.GetString(tableInfo.CategoryName); table.HashValue = tableStrings.GetString(tableHeader.HashValue); return(table); }
public CremaBinaryTableCollection(CremaBinaryReader reader, TableIndex[] tableIndexes) { this.reader = reader; this.tables = new OrderedDictionary(tableIndexes.Length, StringResource.GetComparer(this.reader.CaseSensitive)); var tableStrings = StringResource.GetTableStrings(null); foreach (TableIndex item in tableIndexes) { this.tables.Add(tableStrings.GetString(item.TableName), null); } this.tableNames = this.tables.Keys.Cast <string>().ToArray(); }
public object this[IColumn column] { get { int offset = BitConverter.ToInt32(this.fieldbytes, sizeof(int) * column.Index); if (column.DataType == typeof(string)) { if (offset == 0) { return(string.Empty); } int id = BitConverter.ToInt32(this.fieldbytes, offset); return(StringResource.GetTableStrings(this.Table).GetString(id)); } else { if (offset == 0) { return(null); } if (column.DataType == typeof(bool)) { return(BitConverter.ToBoolean(this.fieldbytes, offset)); } else if (column.DataType == typeof(sbyte)) { return((sbyte)this.fieldbytes[offset]); } else if (column.DataType == typeof(byte)) { return(this.fieldbytes[offset]); } else if (column.DataType == typeof(short)) { return(BitConverter.ToInt16(this.fieldbytes, offset)); } else if (column.DataType == typeof(ushort)) { return(BitConverter.ToUInt16(this.fieldbytes, offset)); } else if (column.DataType == typeof(int)) { return(BitConverter.ToInt32(this.fieldbytes, offset)); } else if (column.DataType == typeof(uint)) { return(BitConverter.ToUInt32(this.fieldbytes, offset)); } else if (column.DataType == typeof(long)) { return(BitConverter.ToInt64(this.fieldbytes, offset)); } else if (column.DataType == typeof(ulong)) { return(BitConverter.ToUInt64(this.fieldbytes, offset)); } else if (column.DataType == typeof(char)) { return(BitConverter.ToChar(this.fieldbytes, offset)); } else if (column.DataType == typeof(float)) { return(BitConverter.ToSingle(this.fieldbytes, offset)); } else if (column.DataType == typeof(double)) { return(BitConverter.ToDouble(this.fieldbytes, offset)); } else if (column.DataType == typeof(DateTime)) { return(new DateTime(1970, 1, 1) + TimeSpan.FromSeconds(Convert.ToDouble(BitConverter.ToInt64(this.fieldbytes, offset)))); } else if (column.DataType == typeof(TimeSpan)) { if (this.Table.Reader.Version == FileHeader.defaultMagicValue) { return(new TimeSpan(BitConverter.ToInt64(this.fieldbytes, offset))); } return(new TimeSpan(BitConverter.ToInt32(this.fieldbytes, offset))); } } throw new Exception(); } set { throw new NotImplementedException(); } }