Пример #1
0
        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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
            }
        }