// Token: 0x06000026 RID: 38 RVA: 0x000045D0 File Offset: 0x000027D0 private void ReadMasterTable(long offset) { try { byte b = this._fileBytes[(int)(checked ((IntPtr)offset))]; byte b2 = b; if (b2 != 5) { if (b2 == 13) { ulong num = this.ConvertToULong((int)offset + 3, 2) - 1UL; int num2 = 0; bool flag = this._masterTableEntries != null; if (flag) { num2 = this._masterTableEntries.Length; Array.Resize <SqlHandler.SqliteMasterEntry>(ref this._masterTableEntries, this._masterTableEntries.Length + (int)num + 1); } else { this._masterTableEntries = new SqlHandler.SqliteMasterEntry[num + 1UL]; } for (ulong num3 = 0UL; num3 <= num; num3 += 1UL) { ulong num4 = this.ConvertToULong((int)offset + 8 + (int)num3 * 2, 2); bool flag2 = offset != 100L; if (flag2) { num4 += (ulong)offset; } int num5 = this.Gvl((int)num4); this.Cvl((int)num4, num5); int num6 = this.Gvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL)); this.Cvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL), num6); ulong num7 = num4 + (ulong)((long)num6 - (long)num4 + 1L); int num8 = this.Gvl((int)num7); int num9 = num8; long num10 = this.Cvl((int)num7, num8); long[] array = new long[5]; for (int i = 0; i <= 4; i++) { int startIdx = num9 + 1; num9 = this.Gvl(startIdx); array[i] = this.Cvl(startIdx, num9); array[i] = (long)((array[i] <= 9L) ? ((ulong)this._sqlDataTypeSize[(int)(checked ((IntPtr)array[i]))]) : ((ulong)((!SqlHandler.IsOdd(array[i])) ? ((array[i] - 12L) / 2L) : ((array[i] - 13L) / 2L)))); } bool flag3 = this._dbEncoding == 1UL || this._dbEncoding == 2UL; if (flag3) { bool flag4 = this._dbEncoding == 1UL; if (flag4) { this._masterTableEntries[num2 + (int)num3].ItemName = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0]), (int)array[1]); } else { bool flag5 = this._dbEncoding == 2UL; if (flag5) { this._masterTableEntries[num2 + (int)num3].ItemName = Encoding.Unicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0]), (int)array[1]); } else { bool flag6 = this._dbEncoding == 3UL; if (flag6) { this._masterTableEntries[num2 + (int)num3].ItemName = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0]), (int)array[1]); } } } } this._masterTableEntries[num2 + (int)num3].RootNum = (long)this.ConvertToULong((int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2]), (int)array[3]); bool flag7 = this._dbEncoding == 1UL; if (flag7) { this._masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2] + (ulong)array[3]), (int)array[4]); } else { bool flag8 = this._dbEncoding == 2UL; if (flag8) { this._masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Unicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2] + (ulong)array[3]), (int)array[4]); } else { bool flag9 = this._dbEncoding == 3UL; if (flag9) { this._masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2] + (ulong)array[3]), (int)array[4]); } } } } } } else { ushort num11 = (ushort)(this.ConvertToULong((int)offset + 3, 2) - 1UL); for (int j = 0; j <= (int)num11; j++) { ushort num12 = (ushort)this.ConvertToULong((int)offset + 12 + j * 2, 2); bool flag10 = offset == 100L; if (flag10) { this.ReadMasterTable((long)((this.ConvertToULong((int)num12, 4) - 1UL) * this._pageSize)); } else { this.ReadMasterTable((long)((this.ConvertToULong((int)(offset + (long)((ulong)num12)), 4) - 1UL) * this._pageSize)); } } this.ReadMasterTable((long)((this.ConvertToULong((int)offset + 8, 4) - 1UL) * this._pageSize)); } } catch { } }
// Token: 0x06000025 RID: 37 RVA: 0x000040D4 File Offset: 0x000022D4 private bool ReadTableFromOffset(ulong offset) { bool result; try { bool flag = this._fileBytes[(int)(checked ((IntPtr)offset))] == 13; if (flag) { ushort num = (ushort)(this.ConvertToULong((int)offset + 3, 2) - 1UL); int num2 = 0; bool flag2 = this._tableEntries != null; if (flag2) { num2 = this._tableEntries.Length; Array.Resize <SqlHandler.TableEntry>(ref this._tableEntries, this._tableEntries.Length + (int)num + 1); } else { this._tableEntries = new SqlHandler.TableEntry[(int)(num + 1)]; } for (ushort num3 = 0; num3 <= num; num3 += 1) { ulong num4 = this.ConvertToULong((int)offset + 8 + (int)(num3 * 2), 2); bool flag3 = offset != 100UL; if (flag3) { num4 += offset; } int num5 = this.Gvl((int)num4); this.Cvl((int)num4, num5); int num6 = this.Gvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL)); this.Cvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL), num6); ulong num7 = num4 + (ulong)((long)num6 - (long)num4 + 1L); int num8 = this.Gvl((int)num7); int num9 = num8; long num10 = this.Cvl((int)num7, num8); SqlHandler.RecordHeaderField[] array = null; long num11 = (long)(num7 - (ulong)((long)num8) + 1UL); int num12 = 0; while (num11 < num10) { Array.Resize <SqlHandler.RecordHeaderField>(ref array, num12 + 1); int num13 = num9 + 1; num9 = this.Gvl(num13); array[num12].Type = this.Cvl(num13, num9); array[num12].Size = (long)((array[num12].Type <= 9L) ? ((ulong)this._sqlDataTypeSize[(int)(checked ((IntPtr)array[num12].Type))]) : ((ulong)((!SqlHandler.IsOdd(array[num12].Type)) ? ((array[num12].Type - 12L) / 2L) : ((array[num12].Type - 13L) / 2L)))); num11 = num11 + (long)(num9 - num13) + 1L; num12++; } bool flag4 = array != null; if (flag4) { this._tableEntries[num2 + (int)num3].Content = new string[array.Length]; int num14 = 0; for (int i = 0; i <= array.Length - 1; i++) { bool flag5 = array[i].Type > 9L; if (flag5) { bool flag6 = !SqlHandler.IsOdd(array[i].Type); if (flag6) { bool flag7 = this._dbEncoding == 1UL; if (flag7) { this._tableEntries[num2 + (int)num3].Content[i] = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size); } else { bool flag8 = this._dbEncoding == 2UL; if (flag8) { this._tableEntries[num2 + (int)num3].Content[i] = Encoding.Unicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size); } else { bool flag9 = this._dbEncoding == 3UL; if (flag9) { this._tableEntries[num2 + (int)num3].Content[i] = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size); } } } } else { this._tableEntries[num2 + (int)num3].Content[i] = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size); } } else { this._tableEntries[num2 + (int)num3].Content[i] = Convert.ToString(this.ConvertToULong((int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size)); } num14 += (int)array[i].Size; } } } } else { bool flag10 = this._fileBytes[(int)(checked ((IntPtr)offset))] == 5; if (flag10) { ushort num15 = (ushort)(this.ConvertToULong((int)(offset + 3UL), 2) - 1UL); for (ushort num16 = 0; num16 <= num15; num16 += 1) { ushort num17 = (ushort)this.ConvertToULong((int)offset + 12 + (int)(num16 * 2), 2); this.ReadTableFromOffset((this.ConvertToULong((int)(offset + (ulong)num17), 4) - 1UL) * this._pageSize); } this.ReadTableFromOffset((this.ConvertToULong((int)(offset + 8UL), 4) - 1UL) * this._pageSize); } } result = true; } catch { result = false; } return(result); }
private bool ReadTableFromOffset(ulong offset) { try { if (_fileBytes[offset] == 13) { ushort num1 = (ushort)(ConvertToULong((int)offset + 3, 2) - 1UL); int num2 = 0; if (_tableEntries != null) { num2 = _tableEntries.Length; Array.Resize <SqlHandler.TableEntry>(ref _tableEntries, _tableEntries.Length + num1 + 1); } else { this._tableEntries = new SqlHandler.TableEntry[(int)num1 + 1]; } for (ushort index1 = 0; index1 <= num1; ++index1) { ulong num3 = ConvertToULong((int)offset + 8 + index1 * 2, 2); if ((long)offset != 100L) { num3 += offset; } int endIdx1 = Gvl((int)num3); this.Cvl((int)num3, endIdx1); int endIdx2 = Gvl((int)((long)num3 + (endIdx1 - (long)num3) + 1L)); this.Cvl((int)((long)num3 + (endIdx1 - (long)num3) + 1L), endIdx2); ulong num4 = num3 + (ulong)(endIdx2 - (long)num3 + 1L); int endIdx3 = Gvl((int)num4); int endIdx4 = endIdx3; long num5 = Cvl((int)num4, endIdx3); RecordHeaderField[] array = null; long num6 = (long)num4 - endIdx3 + 1L; int index2 = 0; while (num6 < num5) { Array.Resize(ref array, index2 + 1); int startIdx = endIdx4 + 1; endIdx4 = Gvl(startIdx); array[index2].Type = Cvl(startIdx, endIdx4); array[index2].Size = array[index2].Type <= 9L ? _sqlDataTypeSize[array[index2].Type] : (!IsOdd(array[index2].Type) ? (array[index2].Type - 12L) / 2L : (array[index2].Type - 13L) / 2L); num6 = num6 + (endIdx4 - startIdx) + 1L; ++index2; } if (array != null) { _tableEntries[num2 + index1].Content = new string[array.Length]; int num7 = 0; for (int index3 = 0; index3 <= array.Length - 1; ++index3) { if (array[index3].Type > 9L) { if (!SqlHandler.IsOdd(array[index3].Type)) { if ((long)_dbEncoding == 1L) { _tableEntries[num2 + index1].Content[index3] = Encoding.Default.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size); } else if ((long)_dbEncoding == 2L) { _tableEntries[num2 + index1].Content[index3] = Encoding.Unicode.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size); } else if ((long)_dbEncoding == 3L) { _tableEntries[num2 + index1].Content[index3] = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size); } } else { _tableEntries[num2 + index1].Content[index3] = Encoding.Default.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size); } } else { _tableEntries[num2 + index1].Content[index3] = Convert.ToString(ConvertToULong((int)((long)num4 + num5 + num7), (int)array[index3].Size)); } num7 += (int)array[index3].Size; } } } } else if (_fileBytes[offset] == 5) { ushort num1 = (ushort)(ConvertToULong((int)((long)offset + 3L), 2) - 1UL); for (ushort index = 0; index <= num1; ++index) { ushort num2 = (ushort)ConvertToULong((int)offset + 12 + index * 2, 2); ReadTableFromOffset((ConvertToULong((int)((long)offset + num2), 4) - 1UL) * _pageSize); } ReadTableFromOffset((ConvertToULong((int)((long)offset + 8L), 4) - 1UL) * _pageSize); } return(true); } catch { return(false); } }