Exemple #1
0
        /// <summary>
        ///
        /// See https://sqlite.org/session/sqlite3changeset_pk.html
        /// </summary>
        /// <param name="iter"></param>
        /// <param name="pk"></param>
        /// <returns></returns>
        public static Result ChangeSetPrimaryKey(Sqlite3ChangesetIterator iter, out bool[] pk)
        {
            var result = ChangeSetPrimaryKey(iter, out Sqlite3DatabaseHandle pbPK, out int nCol);

            var bPk = new byte[nCol];

            Marshal.Copy(pbPK, bPk, 0, nCol);

            pk = new bool[nCol];
            for (int i = 0; i < nCol; i++)
            {
                pk[i] = (bPk[i] != 0);
            }

            return(result);
        }
Exemple #2
0
        /// <summary>
        ///
        /// See https://sqlite.org/session/sqlite3changeset_op.html
        /// </summary>
        /// <param name="iter"></param>
        /// <param name="zTab"></param>
        /// <param name="nCol"></param>
        /// <param name="op"></param>
        /// <param name="indirect"></param>
        /// <returns></returns>
        public static Result ChangeSetOp(Sqlite3ChangesetIterator iter, out string tab, out int nCol, out ActionCode op, out bool indirect)
        {
            tab = null;
            var result = ChangeSetOp(iter, out Sqlite3DatabaseHandle pzTab, out nCol, out op, out int _indirect);

            if (result == Result.OK)
            {
                indirect = _indirect != 0;                 // 0=false, 1=true (other values are undefined but assumed true)
                tab      = Marshal.PtrToStringAnsi(pzTab); // Note: pzTab is reference (pointer) to char * buffer of _UTF8_ table name
            }
            else  // on error these values are undefined, so set to known values
            {
                indirect = false;
                op       = ActionCode.SQLITE_UNDEFINED;
                tab      = null;
            }
            return(result);
        }
Exemple #3
0
 /// <summary>
 /// Convenience method that determines which columns in the current iter row are
 /// primary key values and returns a list of them (order should match CREATE order)
 /// </summary>
 /// <param name="iter"></param>
 /// <returns>a List of Tuple with sql column value and column index for each primary key column;
 /// empty List if no primary keys or error</returns>
 public static List <Tuple <SQLiteValue, int> > ChangeSetPrimaryKeyValues(Sqlite3ChangesetIterator iter)
 {
     if (ChangeSetPrimaryKey(iter, out bool[] pk) != Result.OK)
Exemple #4
0
 private static extern Result ChangeSetPrimaryKey(Sqlite3ChangesetIterator iter, out IntPtr pbPK, out int nCol);
Exemple #5
0
 private static extern Result ChangeSetOp(Sqlite3ChangesetIterator iter, out IntPtr tab, out int nCol, out ActionCode op, out int indirect);
Exemple #6
0
 public static extern Result ChangeSetFinalize(Sqlite3ChangesetIterator iter);
Exemple #7
0
 public static extern Result ChangeSetNext(Sqlite3ChangesetIterator iter);
Exemple #8
0
 private static extern Result ChangeSetStart(out Sqlite3ChangesetIterator iter, int changeSetBufferSize, Sqlite3ChangesetBuffer changeSetBuffer);
Exemple #9
0
 /// <summary>
 /// Obtain a handle to allow iterating through changes in a change set
 /// See https://sqlite.org/session/sqlite3changeset_start.html
 /// </summary>
 /// <param name="iter">handle returned for iteratoring changes</param>
 /// <param name="changeSet">the change set to iterate through</param>
 /// <returns></returns>
 public static Result ChangeSetStart(out Sqlite3ChangesetIterator iter, SQLiteChangeSet changeSet)
 {
     return(ChangeSetStart(out iter, changeSet.size, changeSet.buffer));
 }