Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 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))));
     }
 }