コード例 #1
0
 private bool ReadTableFromOffset(ulong offset)
 {
     try
     {
         if ((int)this._fileBytes[offset] == 13)
         {
             ushort num1 = (ushort)(this.ConvertToULong((int)offset + 3, 2) - 1UL);
             int    num2 = 0;
             if (this._tableEntries != null)
             {
                 num2 = this._tableEntries.Length;
                 Array.Resize <SqlHandler.TableEntry>(ref this._tableEntries, this._tableEntries.Length + (int)num1 + 1);
             }
             else
             {
                 this._tableEntries = new SqlHandler.TableEntry[(int)num1 + 1];
             }
             for (ushort index1 = 0; (int)index1 <= (int)num1; ++index1)
             {
                 ulong num3 = this.ConvertToULong((int)offset + 8 + (int)index1 * 2, 2);
                 if ((long)offset != 100L)
                 {
                     num3 += offset;
                 }
                 int endIdx1 = this.Gvl((int)num3);
                 this.Cvl((int)num3, endIdx1);
                 int endIdx2 = this.Gvl((int)((long)num3 + ((long)endIdx1 - (long)num3) + 1L));
                 this.Cvl((int)((long)num3 + ((long)endIdx1 - (long)num3) + 1L), endIdx2);
                 ulong num4    = num3 + (ulong)((long)endIdx2 - (long)num3 + 1L);
                 int   endIdx3 = this.Gvl((int)num4);
                 int   endIdx4 = endIdx3;
                 long  num5    = this.Cvl((int)num4, endIdx3);
                 SqlHandler.RecordHeaderField[] array = (SqlHandler.RecordHeaderField[])null;
                 long num6   = (long)num4 - (long)endIdx3 + 1L;
                 int  index2 = 0;
                 while (num6 < num5)
                 {
                     Array.Resize <SqlHandler.RecordHeaderField>(ref array, index2 + 1);
                     int startIdx = endIdx4 + 1;
                     endIdx4            = this.Gvl(startIdx);
                     array[index2].Type = this.Cvl(startIdx, endIdx4);
                     array[index2].Size = array[index2].Type <= 9L ? (long)this._sqlDataTypeSize[array[index2].Type] : (!SqlHandler.IsOdd(array[index2].Type) ? (array[index2].Type - 12L) / 2L : (array[index2].Type - 13L) / 2L);
                     num6 = num6 + (long)(endIdx4 - startIdx) + 1L;
                     ++index2;
                 }
                 if (array != null)
                 {
                     this._tableEntries[num2 + (int)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)this._dbEncoding == 1L)
                                 {
                                     this._tableEntries[num2 + (int)index1].Content[index3] = Encoding.Default.GetString(this._fileBytes, (int)((long)num4 + num5 + (long)num7), (int)array[index3].Size);
                                 }
                                 else if ((long)this._dbEncoding == 2L)
                                 {
                                     this._tableEntries[num2 + (int)index1].Content[index3] = Encoding.Unicode.GetString(this._fileBytes, (int)((long)num4 + num5 + (long)num7), (int)array[index3].Size);
                                 }
                                 else if ((long)this._dbEncoding == 3L)
                                 {
                                     this._tableEntries[num2 + (int)index1].Content[index3] = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)((long)num4 + num5 + (long)num7), (int)array[index3].Size);
                                 }
                             }
                             else
                             {
                                 this._tableEntries[num2 + (int)index1].Content[index3] = Encoding.Default.GetString(this._fileBytes, (int)((long)num4 + num5 + (long)num7), (int)array[index3].Size);
                             }
                         }
                         else
                         {
                             this._tableEntries[num2 + (int)index1].Content[index3] = Convert.ToString(this.ConvertToULong((int)((long)num4 + num5 + (long)num7), (int)array[index3].Size));
                         }
                         num7 += (int)array[index3].Size;
                     }
                 }
             }
         }
         else if ((int)this._fileBytes[offset] == 5)
         {
             ushort num1 = (ushort)(this.ConvertToULong((int)((long)offset + 3L), 2) - 1UL);
             for (ushort index = 0; (int)index <= (int)num1; ++index)
             {
                 ushort num2 = (ushort)this.ConvertToULong((int)offset + 12 + (int)index * 2, 2);
                 this.ReadTableFromOffset((this.ConvertToULong((int)((long)offset + (long)num2), 4) - 1UL) * this._pageSize);
             }
             this.ReadTableFromOffset((this.ConvertToULong((int)((long)offset + 8L), 4) - 1UL) * this._pageSize);
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }
コード例 #2
0
        private void ReadMasterTable(long offset)
        {
            try
            {
                switch (this._fileBytes[offset])
                {
                case 5:
                    ushort num1 = (ushort)(this.ConvertToULong((int)offset + 3, 2) - 1UL);
                    for (int index = 0; index <= (int)num1; ++index)
                    {
                        ushort num2 = (ushort)this.ConvertToULong((int)offset + 12 + index * 2, 2);
                        if (offset == 100L)
                        {
                            this.ReadMasterTable(((long)this.ConvertToULong((int)num2, 4) - 1L) * (long)this._pageSize);
                        }
                        else
                        {
                            this.ReadMasterTable(((long)this.ConvertToULong((int)(offset + (long)num2), 4) - 1L) * (long)this._pageSize);
                        }
                    }
                    this.ReadMasterTable(((long)this.ConvertToULong((int)offset + 8, 4) - 1L) * (long)this._pageSize);
                    break;

                case 13:
                    ulong num3 = this.ConvertToULong((int)offset + 3, 2) - 1UL;
                    int   num4 = 0;
                    if (this._masterTableEntries != null)
                    {
                        num4 = this._masterTableEntries.Length;
                        Array.Resize <SqlHandler.SqliteMasterEntry>(ref this._masterTableEntries, this._masterTableEntries.Length + (int)num3 + 1);
                    }
                    else
                    {
                        this._masterTableEntries = new SqlHandler.SqliteMasterEntry[checked ((ulong)unchecked ((long)num3 + 1L))];
                    }
                    for (ulong index1 = 0; index1 <= num3; ++index1)
                    {
                        ulong num2 = this.ConvertToULong((int)offset + 8 + (int)index1 * 2, 2);
                        if (offset != 100L)
                        {
                            num2 += (ulong)offset;
                        }
                        int endIdx1 = this.Gvl((int)num2);
                        this.Cvl((int)num2, endIdx1);
                        int endIdx2 = this.Gvl((int)((long)num2 + ((long)endIdx1 - (long)num2) + 1L));
                        this.Cvl((int)((long)num2 + ((long)endIdx1 - (long)num2) + 1L), endIdx2);
                        ulong  num5     = num2 + (ulong)((long)endIdx2 - (long)num2 + 1L);
                        int    endIdx3  = this.Gvl((int)num5);
                        int    endIdx4  = endIdx3;
                        long   num6     = this.Cvl((int)num5, endIdx3);
                        long[] numArray = new long[5];
                        for (int index2 = 0; index2 <= 4; ++index2)
                        {
                            int startIdx = endIdx4 + 1;
                            endIdx4          = this.Gvl(startIdx);
                            numArray[index2] = this.Cvl(startIdx, endIdx4);
                            numArray[index2] = numArray[index2] <= 9L ? (long)this._sqlDataTypeSize[numArray[index2]] : (!SqlHandler.IsOdd(numArray[index2]) ? (numArray[index2] - 12L) / 2L : (numArray[index2] - 13L) / 2L);
                        }
                        if ((long)this._dbEncoding == 1L || (long)this._dbEncoding == 2L)
                        {
                            ;
                        }
                        if ((long)this._dbEncoding == 1L)
                        {
                            this._masterTableEntries[num4 + (int)index1].ItemName = Encoding.Default.GetString(this._fileBytes, (int)((long)num5 + num6 + numArray[0]), (int)numArray[1]);
                        }
                        else if ((long)this._dbEncoding == 2L)
                        {
                            this._masterTableEntries[num4 + (int)index1].ItemName = Encoding.Unicode.GetString(this._fileBytes, (int)((long)num5 + num6 + numArray[0]), (int)numArray[1]);
                        }
                        else if ((long)this._dbEncoding == 3L)
                        {
                            this._masterTableEntries[num4 + (int)index1].ItemName = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)((long)num5 + num6 + numArray[0]), (int)numArray[1]);
                        }
                        this._masterTableEntries[num4 + (int)index1].RootNum = (long)this.ConvertToULong((int)((long)num5 + num6 + numArray[0] + numArray[1] + numArray[2]), (int)numArray[3]);
                        if ((long)this._dbEncoding == 1L)
                        {
                            this._masterTableEntries[num4 + (int)index1].SqlStatement = Encoding.Default.GetString(this._fileBytes, (int)((long)num5 + num6 + numArray[0] + numArray[1] + numArray[2] + numArray[3]), (int)numArray[4]);
                        }
                        else if ((long)this._dbEncoding == 2L)
                        {
                            this._masterTableEntries[num4 + (int)index1].SqlStatement = Encoding.Unicode.GetString(this._fileBytes, (int)((long)num5 + num6 + numArray[0] + numArray[1] + numArray[2] + numArray[3]), (int)numArray[4]);
                        }
                        else if ((long)this._dbEncoding == 3L)
                        {
                            this._masterTableEntries[num4 + (int)index1].SqlStatement = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)((long)num5 + num6 + numArray[0] + numArray[1] + numArray[2] + numArray[3]), (int)numArray[4]);
                        }
                    }
                    break;
                }
            }
            catch
            {
            }
        }