private bool ReadTableFromOffset(ulong Offset) { if (this.db_bytes[(int)Offset] == 13) { int num2 = Convert.ToInt32(decimal.Subtract(new decimal(this.ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)), decimal.One)); int length = 0; if (this.table_entries != null) { length = this.table_entries.Length; this.table_entries = (table_entry[])Utils.CopyArray((Array)this.table_entries, new table_entry[(this.table_entries.Length + num2) + 1]); } else { this.table_entries = new table_entry[num2 + 1]; } int num16 = num2; for (int i = 0; i <= num16; i++) { record_header_field[] _fieldArray = null; ulong num = this.ConvertToInteger(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(Offset), 8M), new decimal(i * 2))), 2); if (decimal.Compare(new decimal(Offset), 100M) != 0) { num += Offset; } int endIndex = this.GVL((int)num); long num9 = this.CVL((int)num, endIndex); int num8 = this.GVL(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), decimal.Subtract(new decimal(endIndex), new decimal(num))), decimal.One))); this.table_entries[length + i].row_id = this.CVL(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), decimal.Subtract(new decimal(endIndex), new decimal(num))), decimal.One)), num8); num = Convert.ToUInt64(decimal.Add(decimal.Add(new decimal(num), decimal.Subtract(new decimal(num8), new decimal(num))), decimal.One)); endIndex = this.GVL((int)num); num8 = endIndex; long num7 = this.CVL((int)num, endIndex); long num10 = Convert.ToInt64(decimal.Add(decimal.Subtract(new decimal(num), new decimal(endIndex)), decimal.One)); for (int j = 0; num10 < num7; j++) { _fieldArray = (record_header_field[])Utils.CopyArray((Array)_fieldArray, new record_header_field[j + 1]); endIndex = num8 + 1; num8 = this.GVL(endIndex); _fieldArray[j].type = this.CVL(endIndex, num8); if (_fieldArray[j].type > 9L) { if (this.IsOdd(_fieldArray[j].type)) { _fieldArray[j].size = (long)Math.Round((double)(((double)(_fieldArray[j].type - 13L)) / 2.0)); } else { _fieldArray[j].size = (long)Math.Round((double)(((double)(_fieldArray[j].type - 12L)) / 2.0)); } } else { _fieldArray[j].size = this.SQLDataTypeSize[(int)_fieldArray[j].type]; } num10 = (num10 + (num8 - endIndex)) + 1L; } this.table_entries[length + i].content = new string[(_fieldArray.Length - 1) + 1]; int num4 = 0; int num17 = _fieldArray.Length - 1; for (int k = 0; k <= num17; k++) { if (_fieldArray[k].type > 9L) { if (!this.IsOdd(_fieldArray[k].type)) { if (decimal.Compare(new decimal(this.encoding), decimal.One) == 0) { this.table_entries[length + i].content[k] = Encoding.Default.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)), new decimal(num4))), (int)_fieldArray[k].size); } else if (decimal.Compare(new decimal(this.encoding), 2M) == 0) { this.table_entries[length + i].content[k] = Encoding.Unicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)), new decimal(num4))), (int)_fieldArray[k].size); } else if (decimal.Compare(new decimal(this.encoding), 3M) == 0) { this.table_entries[length + i].content[k] = Encoding.BigEndianUnicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)), new decimal(num4))), (int)_fieldArray[k].size); } } else { this.table_entries[length + i].content[k] = Encoding.Default.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)), new decimal(num4))), (int)_fieldArray[k].size); } } else { this.table_entries[length + i].content[k] = Conversions.ToString(this.ConvertToInteger(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)), new decimal(num4))), (int)_fieldArray[k].size)); } num4 += (int)_fieldArray[k].size; } } } else if (this.db_bytes[(int)Offset] == 5) { ushort num14 = Convert.ToUInt16(decimal.Subtract(new decimal(this.ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)), decimal.One)); int num18 = num14; for (int m = 0; m <= num18; m++) { ushort num13 = (ushort)this.ConvertToInteger(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(Offset), 12M), new decimal(m * 2))), 2); this.ReadTableFromOffset(Convert.ToUInt64(decimal.Multiply(decimal.Subtract(new decimal(this.ConvertToInteger((int)(Offset + num13), 4)), decimal.One), new decimal(this.page_size)))); } this.ReadTableFromOffset(Convert.ToUInt64(decimal.Multiply(decimal.Subtract(new decimal(this.ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 8M)), 4)), decimal.One), new decimal(this.page_size)))); } return(true); }
private void ReadMasterTable(ulong Offset) { if (this.db_bytes[(int)Offset] == 13) { ushort num2 = Convert.ToUInt16(decimal.Subtract(new decimal(this.ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)), decimal.One)); int length = 0; if (this.master_table_entries != null) { length = this.master_table_entries.Length; this.master_table_entries = (sqlite_master_entry[])Utils.CopyArray((Array)this.master_table_entries, new sqlite_master_entry[(this.master_table_entries.Length + num2) + 1]); } else { this.master_table_entries = new sqlite_master_entry[num2 + 1]; } int num13 = num2; for (int i = 0; i <= num13; i++) { ulong num = this.ConvertToInteger(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(Offset), 8M), new decimal(i * 2))), 2); if (decimal.Compare(new decimal(Offset), 100M) != 0) { num += Offset; } int endIndex = this.GVL((int)num); long num7 = this.CVL((int)num, endIndex); int num6 = this.GVL(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), decimal.Subtract(new decimal(endIndex), new decimal(num))), decimal.One))); this.master_table_entries[length + i].row_id = this.CVL(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), decimal.Subtract(new decimal(endIndex), new decimal(num))), decimal.One)), num6); num = Convert.ToUInt64(decimal.Add(decimal.Add(new decimal(num), decimal.Subtract(new decimal(num6), new decimal(num))), decimal.One)); endIndex = this.GVL((int)num); num6 = endIndex; long num5 = this.CVL((int)num, endIndex); long[] numArray = new long[5]; int index = 0; do { endIndex = num6 + 1; num6 = this.GVL(endIndex); numArray[index] = this.CVL(endIndex, num6); if (numArray[index] > 9L) { if (this.IsOdd(numArray[index])) { numArray[index] = (long)Math.Round((double)(((double)(numArray[index] - 13L)) / 2.0)); } else { numArray[index] = (long)Math.Round((double)(((double)(numArray[index] - 12L)) / 2.0)); } } else { numArray[index] = this.SQLDataTypeSize[(int)numArray[index]]; } index++; }while (index <= 4); if (decimal.Compare(new decimal(this.encoding), decimal.One) == 0) { this.master_table_entries[length + i].item_type = Encoding.Default.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(new decimal(num), new decimal(num5))), (int)numArray[0]); } else if (decimal.Compare(new decimal(this.encoding), 2M) == 0) { this.master_table_entries[length + i].item_type = Encoding.Unicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(new decimal(num), new decimal(num5))), (int)numArray[0]); } else if (decimal.Compare(new decimal(this.encoding), 3M) == 0) { this.master_table_entries[length + i].item_type = Encoding.BigEndianUnicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(new decimal(num), new decimal(num5))), (int)numArray[0]); } if (decimal.Compare(new decimal(this.encoding), decimal.One) == 0) { this.master_table_entries[length + i].item_name = Encoding.Default.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0]))), (int)numArray[1]); } else if (decimal.Compare(new decimal(this.encoding), 2M) == 0) { this.master_table_entries[length + i].item_name = Encoding.Unicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0]))), (int)numArray[1]); } else if (decimal.Compare(new decimal(this.encoding), 3M) == 0) { this.master_table_entries[length + i].item_name = Encoding.BigEndianUnicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0]))), (int)numArray[1]); } this.master_table_entries[length + i].root_num = (long)this.ConvertToInteger(Convert.ToInt32(decimal.Add(decimal.Add(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0])), new decimal(numArray[1])), new decimal(numArray[2]))), (int)numArray[3]); if (decimal.Compare(new decimal(this.encoding), decimal.One) == 0) { this.master_table_entries[length + i].sql_statement = Encoding.Default.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(decimal.Add(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0])), new decimal(numArray[1])), new decimal(numArray[2])), new decimal(numArray[3]))), (int)numArray[4]); } else if (decimal.Compare(new decimal(this.encoding), 2M) == 0) { this.master_table_entries[length + i].sql_statement = Encoding.Unicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(decimal.Add(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0])), new decimal(numArray[1])), new decimal(numArray[2])), new decimal(numArray[3]))), (int)numArray[4]); } else if (decimal.Compare(new decimal(this.encoding), 3M) == 0) { this.master_table_entries[length + i].sql_statement = Encoding.BigEndianUnicode.GetString(this.db_bytes, Convert.ToInt32(decimal.Add(decimal.Add(decimal.Add(decimal.Add(decimal.Add(new decimal(num), new decimal(num5)), new decimal(numArray[0])), new decimal(numArray[1])), new decimal(numArray[2])), new decimal(numArray[3]))), (int)numArray[4]); } } } else if (this.db_bytes[(int)Offset] == 5) { ushort num11 = Convert.ToUInt16(decimal.Subtract(new decimal(this.ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)), decimal.One)); int num14 = num11; for (int j = 0; j <= num14; j++) { ushort startIndex = (ushort)this.ConvertToInteger(Convert.ToInt32(decimal.Add(decimal.Add(new decimal(Offset), 12M), new decimal(j * 2))), 2); if (decimal.Compare(new decimal(Offset), 100M) == 0) { this.ReadMasterTable(Convert.ToUInt64(decimal.Multiply(decimal.Subtract(new decimal(this.ConvertToInteger(startIndex, 4)), decimal.One), new decimal(this.page_size)))); } else { this.ReadMasterTable(Convert.ToUInt64(decimal.Multiply(decimal.Subtract(new decimal(this.ConvertToInteger((int)(Offset + startIndex), 4)), decimal.One), new decimal(this.page_size)))); } } this.ReadMasterTable(Convert.ToUInt64(decimal.Multiply(decimal.Subtract(new decimal(this.ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 8M)), 4)), decimal.One), new decimal(this.page_size)))); } }