public void Lock()
        {
            this.CheckDisposed();
            if (this.statement != IntPtr.Zero)
            {
                return;
            }
            IntPtr zero = IntPtr.Zero;

            try
            {
                int num = 0;
                zero = SQLiteString.Utf8IntPtrFromString("SELECT 1;", ref num);
                IntPtr          intPtr          = IntPtr.Zero;
                int             num1            = 0;
                SQLiteErrorCode sQLiteErrorCode = UnsafeNativeMethods.sqlite3_prepare_interop(this.GetIntPtr(), zero, num, ref this.statement, ref intPtr, ref num1);
                if (sQLiteErrorCode != SQLiteErrorCode.Ok)
                {
                    throw new SQLiteException(sQLiteErrorCode, "sqlite3_prepare_interop");
                }
            }
            finally
            {
                if (zero != IntPtr.Zero)
                {
                    SQLiteMemory.Free(zero);
                    zero = IntPtr.Zero;
                }
            }
        }
Ejemplo n.º 2
0
 public static IntPtr[] Utf8IntPtrArrayFromStringArray(string[] values)
 {
     if (values == null)
     {
         return(null);
     }
     IntPtr[] intPtrArray = new IntPtr[(int)values.Length];
     for (int i = 0; i < (int)intPtrArray.Length; i++)
     {
         intPtrArray[i] = SQLiteString.Utf8IntPtrFromString(values[i]);
     }
     return(intPtrArray);
 }
Ejemplo n.º 3
0
        public static IntPtr Utf8IntPtrFromString(string value)
        {
            int num = 0;

            return(SQLiteString.Utf8IntPtrFromString(value, ref num));
        }
Ejemplo n.º 4
0
        internal static void ToIntPtr(SQLiteIndex index, IntPtr pIndex, bool includeInput)
        {
            if (index == null)
            {
                return;
            }
            SQLiteIndexOutputs outputs = index.Outputs;

            if (outputs == null)
            {
                return;
            }
            SQLiteIndexConstraintUsage[] constraintUsages = outputs.ConstraintUsages;
            if (constraintUsages == null)
            {
                return;
            }
            SQLiteIndexInputs inputs = null;

            SQLiteIndexConstraint[] constraints = null;
            SQLiteIndexOrderBy[]    orderBys    = null;
            if (includeInput)
            {
                inputs = index.Inputs;
                if (inputs == null)
                {
                    return;
                }
                constraints = inputs.Constraints;
                if (constraints == null)
                {
                    return;
                }
                orderBys = inputs.OrderBys;
                if (orderBys == null)
                {
                    return;
                }
            }
            if (pIndex == IntPtr.Zero)
            {
                return;
            }
            int num  = 0;
            int num1 = SQLiteMarshal.ReadInt32(pIndex, num);

            if (includeInput && num1 != (int)constraints.Length)
            {
                return;
            }
            if (num1 != (int)constraintUsages.Length)
            {
                return;
            }
            num = SQLiteMarshal.NextOffsetOf(num, 4, IntPtr.Size);
            if (includeInput)
            {
                IntPtr intPtr = SQLiteMarshal.ReadIntPtr(pIndex, num);
                int    num2   = Marshal.SizeOf(typeof(UnsafeNativeMethods.sqlite3_index_constraint));
                for (int i = 0; i < num1; i++)
                {
                    UnsafeNativeMethods.sqlite3_index_constraint sqlite3IndexConstraint = new UnsafeNativeMethods.sqlite3_index_constraint(constraints[i]);
                    Marshal.StructureToPtr(sqlite3IndexConstraint, SQLiteMarshal.IntPtrForOffset(intPtr, i * num2), false);
                }
            }
            num = SQLiteMarshal.NextOffsetOf(num, IntPtr.Size, 4);
            int num3 = (includeInput ? SQLiteMarshal.ReadInt32(pIndex, num) : 0);

            if (includeInput && num3 != (int)orderBys.Length)
            {
                return;
            }
            num = SQLiteMarshal.NextOffsetOf(num, 4, IntPtr.Size);
            if (includeInput)
            {
                IntPtr intPtr1 = SQLiteMarshal.ReadIntPtr(pIndex, num);
                int    num4    = Marshal.SizeOf(typeof(UnsafeNativeMethods.sqlite3_index_orderby));
                for (int j = 0; j < num3; j++)
                {
                    UnsafeNativeMethods.sqlite3_index_orderby sqlite3IndexOrderby = new UnsafeNativeMethods.sqlite3_index_orderby(orderBys[j]);
                    Marshal.StructureToPtr(sqlite3IndexOrderby, SQLiteMarshal.IntPtrForOffset(intPtr1, j * num4), false);
                }
            }
            num = SQLiteMarshal.NextOffsetOf(num, IntPtr.Size, IntPtr.Size);
            IntPtr intPtr2 = SQLiteMarshal.ReadIntPtr(pIndex, num);
            int    num5    = Marshal.SizeOf(typeof(UnsafeNativeMethods.sqlite3_index_constraint_usage));

            for (int k = 0; k < num1; k++)
            {
                UnsafeNativeMethods.sqlite3_index_constraint_usage sqlite3IndexConstraintUsage = new UnsafeNativeMethods.sqlite3_index_constraint_usage(constraintUsages[k]);
                Marshal.StructureToPtr(sqlite3IndexConstraintUsage, SQLiteMarshal.IntPtrForOffset(intPtr2, k * num5), false);
            }
            num = SQLiteMarshal.NextOffsetOf(num, IntPtr.Size, 4);
            SQLiteMarshal.WriteInt32(pIndex, num, outputs.IndexNumber);
            num = SQLiteMarshal.NextOffsetOf(num, 4, IntPtr.Size);
            SQLiteMarshal.WriteIntPtr(pIndex, num, SQLiteString.Utf8IntPtrFromString(outputs.IndexString));
            num = SQLiteMarshal.NextOffsetOf(num, IntPtr.Size, 4);
            SQLiteMarshal.WriteInt32(pIndex, num, (outputs.NeedToFreeIndexString != 0 ? outputs.NeedToFreeIndexString : 1));
            num = SQLiteMarshal.NextOffsetOf(num, 4, 4);
            SQLiteMarshal.WriteInt32(pIndex, num, outputs.OrderByConsumed);
            num = SQLiteMarshal.NextOffsetOf(num, 4, 8);
            if (outputs.EstimatedCost.HasValue)
            {
                SQLiteMarshal.WriteDouble(pIndex, num, outputs.EstimatedCost.GetValueOrDefault());
            }
            num = SQLiteMarshal.NextOffsetOf(num, 8, 8);
            if (outputs.CanUseEstimatedRows() && outputs.EstimatedRows.HasValue)
            {
                SQLiteMarshal.WriteInt64(pIndex, num, outputs.EstimatedRows.GetValueOrDefault());
            }
            num = SQLiteMarshal.NextOffsetOf(num, 8, 4);
            if (outputs.CanUseIndexFlags() && outputs.IndexFlags.HasValue)
            {
                SQLiteMarshal.WriteInt32(pIndex, num, (int)outputs.IndexFlags.GetValueOrDefault());
            }
            num = SQLiteMarshal.NextOffsetOf(num, 4, 8);
            if (outputs.CanUseColumnsUsed() && outputs.ColumnsUsed.HasValue)
            {
                SQLiteMarshal.WriteInt64(pIndex, num, outputs.ColumnsUsed.GetValueOrDefault());
            }
        }