当前位置: 首页>>代码示例>>C#>>正文


C# sqlite3_backup类代码示例

本文整理汇总了C#中sqlite3_backup的典型用法代码示例。如果您正苦于以下问题:C# sqlite3_backup类的具体用法?C# sqlite3_backup怎么用?C# sqlite3_backup使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


sqlite3_backup类属于命名空间,在下文中一共展示了sqlite3_backup类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: sqlite3_backup_finish

        /*
        ** 2009 January 28
        **
        ** The author disclaims copyright to this source code.  In place of
        ** a legal notice, here is a blessing:
        **
        **    May you do good and not evil.
        **    May you find forgiveness for yourself and forgive others.
        **    May you share freely, never taking more than you give.
        **
        *************************************************************************
        ** This file contains the implementation of the sqlite3_backup_XXX()
        ** API functions and the related features.
        *************************************************************************
        **  Included in SQLite3 port to C#-SQLite;  2008 Noah B Hart
        **  C#-SQLite is an independent reimplementation of the SQLite software library
        **
        **  SQLITE_SOURCE_ID: 2011-01-28 17:03:50 ed759d5a9edb3bba5f48f243df47be29e3fe8cd7
        **
        *************************************************************************
        */
        //#include "sqliteInt.h"
        //#include "btreeInt.h"
        /* Macro to find the minimum of two numeric values.
        */
        //# define MIN(x,y) ((x)<(y)?(x):(y))

        #endif

        #region Methods

        /*
        ** Release all resources associated with an sqlite3_backup* handle.
        */
        public static int sqlite3_backup_finish( sqlite3_backup p )
        {
            sqlite3_backup pp;                 /* Ptr to head of pagers backup list */
              sqlite3_mutex mutex;               /* Mutex to protect source database */
              int rc;                            /* Value to return */

              /* Enter the mutexes */
              if ( p == null )
            return SQLITE_OK;
              sqlite3_mutex_enter( p.pSrcDb.mutex );
              sqlite3BtreeEnter( p.pSrc );
              mutex = p.pSrcDb.mutex;
              if ( p.pDestDb != null )
              {
            sqlite3_mutex_enter( p.pDestDb.mutex );
              }

              /* Detach this backup from the source pager. */
              if ( p.pDestDb != null )
              {
            p.pSrc.nBackup--;
              }
              if ( p.isAttached != 0 )
              {
            pp = sqlite3PagerBackupPtr( sqlite3BtreePager( p.pSrc ) );
            while ( pp != p )
            {
              pp = ( pp ).pNext;
            }
            sqlite3BtreePager( p.pSrc ).pBackup = p.pNext;
              }

              /* If a transaction is still open on the Btree, roll it back. */
              sqlite3BtreeRollback( p.pDest );

              /* Set the error code of the destination database handle. */
              rc = ( p.rc == SQLITE_DONE ) ? SQLITE_OK : p.rc;
              sqlite3Error( p.pDestDb, rc, 0 );

              /* Exit the mutexes and free the backup context structure. */
              if ( p.pDestDb != null )
              {
            sqlite3_mutex_leave( p.pDestDb.mutex );
              }
              sqlite3BtreeLeave( p.pSrc );
              if ( p.pDestDb != null )
              {
            /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
            ** call to sqlite3_backup_init() and is destroyed by a call to
            ** sqlite3_backup_finish(). */
            //sqlite3_free( ref p );
              }
              sqlite3_mutex_leave( mutex );
              return rc;
        }
开发者ID:taxilian,项目名称:some_library,代码行数:89,代码来源:backup_c.cs

示例2: sqlite3BtreeCopyFile

    /*
** Copy the complete content of pBtFrom into pBtTo.  A transaction
** must be active for both files.
**
** The size of file pTo may be reduced by this operation. If anything
** goes wrong, the transaction on pTo is rolled back. If successful, the
** transaction is committed before returning.
*/
    static int sqlite3BtreeCopyFile( Btree pTo, Btree pFrom )
    {
      int rc;
      sqlite3_backup b;
      sqlite3BtreeEnter( pTo );
      sqlite3BtreeEnter( pFrom );

      /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set
      ** to 0. This is used by the implementations of sqlite3_backup_step()
      ** and sqlite3_backup_finish() to detect that they are being called
      ** from this function, not directly by the user.
      */
      b = new sqlite3_backup();// memset( &b, 0, sizeof( b ) );
      b.pSrcDb = pFrom.db;
      b.pSrc = pFrom;
      b.pDest = pTo;
      b.iNext = 1;

      /* 0x7FFFFFFF is the hard limit for the number of pages in a database
      ** file. By passing this as the number of pages to copy to
      ** sqlite3_backup_step(), we can guarantee that the copy finishes
      ** within a single call (unless an error occurs). The Debug.Assert() statement
      ** checks this assumption - (p.rc) should be set to either SQLITE_DONE
      ** or an error code.
      */
      sqlite3_backup_step( b, 0x7FFFFFFF );
      Debug.Assert( b.rc != SQLITE_OK );
      rc = sqlite3_backup_finish( b );
      if ( rc == SQLITE_OK )
      {
        pTo.pBt.pageSizeFixed = false;
      }

      sqlite3BtreeLeave( pFrom );
      sqlite3BtreeLeave( pTo );
      return rc;
    }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:45,代码来源:backup_c.cs

示例3: sqlite3BackupRestart

 /*
 ** Restart the backup process. This is called when the pager layer
 ** detects that the database has been modified by an external database
 ** connection. In this case there is no way of knowing which of the
 ** pages that have been copied into the destination database are still
 ** valid and which are not, so the entire process needs to be restarted.
 **
 ** It is assumed that the mutex associated with the BtShared object
 ** corresponding to the source database is held when this function is
 ** called.
 */
 static void sqlite3BackupRestart( sqlite3_backup pBackup )
 {
   sqlite3_backup p;                   /* Iterator variable */
   for ( p = pBackup; p != null; p = p.pNext )
   {
     Debug.Assert( sqlite3_mutex_held( p.pSrc.pBt.mutex ) );
     p.iNext = 1;
   }
 }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:20,代码来源:backup_c.cs

示例4: sqlite3BackupUpdate

 /*
 ** This function is called after the contents of page iPage of the
 ** source database have been modified. If page iPage has already been
 ** copied into the destination database, then the data written to the
 ** destination is now invalidated. The destination copy of iPage needs
 ** to be updated with the new data before the backup operation is
 ** complete.
 **
 ** It is assumed that the mutex associated with the BtShared object
 ** corresponding to the source database is held when this function is
 ** called.
 */
 static void sqlite3BackupUpdate( sqlite3_backup pBackup, Pgno iPage, byte[] aData )
 {
   sqlite3_backup p;                   /* Iterator variable */
   for ( p = pBackup; p != null; p = p.pNext )
   {
     Debug.Assert( sqlite3_mutex_held( p.pSrc.pBt.mutex ) );
     if ( !isFatalError( p.rc ) && iPage < p.iNext )
     {
       /* The backup process p has already copied page iPage. But now it
       ** has been modified by a transaction on the source pager. Copy
       ** the new data into the backup.
       */
       int rc = backupOnePage( p, iPage, aData );
       Debug.Assert( rc != SQLITE_BUSY && rc != SQLITE_LOCKED );
       if ( rc != SQLITE_OK )
       {
         p.rc = rc;
       }
     }
   }
 }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:33,代码来源:backup_c.cs

示例5: sqlite3_backup_pagecount

 /*
 ** Return the total number of pages in the source database as of the most
 ** recent call to sqlite3_backup_step().
 */
 static int sqlite3_backup_pagecount( sqlite3_backup p )
 {
   return (int)p.nPagecount;
 }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:8,代码来源:backup_c.cs

示例6: sqlite3_backup_remaining

 /*
 ** Return the number of pages still to be backed up as of the most recent
 ** call to sqlite3_backup_step().
 */
 static int sqlite3_backup_remaining( sqlite3_backup p )
 {
   return (int)p.nRemaining;
 }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:8,代码来源:backup_c.cs

示例7: sqlite3_backup_step

    /*
    ** Copy nPage pages from the source b-tree to the destination.
    */
    static public int sqlite3_backup_step( sqlite3_backup p, int nPage )
    {
      int rc;
      int destMode;       /* Destination journal mode */
      int pgszSrc = 0;    /* Source page size */
      int pgszDest = 0;   /* Destination page size */

      sqlite3_mutex_enter( p.pSrcDb.mutex );
      sqlite3BtreeEnter( p.pSrc );
      if ( p.pDestDb != null )
      {
        sqlite3_mutex_enter( p.pDestDb.mutex );
      }

      rc = p.rc;
      if ( !isFatalError( rc ) )
      {
        Pager pSrcPager = sqlite3BtreePager( p.pSrc );    /* Source pager */
        Pager pDestPager = sqlite3BtreePager( p.pDest );   /* Dest pager */
        int ii;                            /* Iterator variable */
        Pgno nSrcPage = 0;                 /* Size of source db in pages */
        int bCloseTrans = 0;               /* True if src db requires unlocking */

        /* If the source pager is currently in a write-transaction, return
        ** SQLITE_BUSY immediately.
        */
        if ( p.pDestDb != null && p.pSrc.pBt.inTransaction == TRANS_WRITE )
        {
          rc = SQLITE_BUSY;
        }
        else
        {
          rc = SQLITE_OK;
        }

        /* Lock the destination database, if it is not locked already. */
        if ( SQLITE_OK == rc && p.bDestLocked == 0
        && SQLITE_OK == ( rc = sqlite3BtreeBeginTrans( p.pDest, 2 ) )
        )
        {
          p.bDestLocked = 1;
          sqlite3BtreeGetMeta( p.pDest, BTREE_SCHEMA_VERSION, ref p.iDestSchema );
        }

        /* If there is no open read-transaction on the source database, open
        ** one now. If a transaction is opened here, then it will be closed
        ** before this function exits.
        */
        if ( rc == SQLITE_OK && !sqlite3BtreeIsInReadTrans( p.pSrc ) )
        {
          rc = sqlite3BtreeBeginTrans( p.pSrc, 0 );
          bCloseTrans = 1;
        }

        /* Do not allow backup if the destination database is in WAL mode
        ** and the page sizes are different between source and destination */
        pgszSrc = sqlite3BtreeGetPageSize( p.pSrc );
        pgszDest = sqlite3BtreeGetPageSize( p.pDest );
        destMode = sqlite3PagerGetJournalMode( sqlite3BtreePager( p.pDest ) );
        if ( SQLITE_OK == rc && destMode == PAGER_JOURNALMODE_WAL && pgszSrc != pgszDest )
        {
          rc = SQLITE_READONLY;
        }

        /* Now that there is a read-lock on the source database, query the
        ** source pager for the number of pages in the database.
        */
        nSrcPage = sqlite3BtreeLastPage( p.pSrc );
        Debug.Assert( nSrcPage >= 0 );

        for ( ii = 0; ( nPage < 0 || ii < nPage ) && p.iNext <= nSrcPage && 0 == rc; ii++ )
        {
          Pgno iSrcPg = p.iNext;                 /* Source page number */
          if ( iSrcPg != PENDING_BYTE_PAGE( p.pSrc.pBt ) )
          {
            DbPage pSrcPg = null;                             /* Source page object */
            rc = sqlite3PagerGet( pSrcPager, (u32)iSrcPg, ref pSrcPg );
            if ( rc == SQLITE_OK )
            {
              rc = backupOnePage( p, iSrcPg, sqlite3PagerGetData( pSrcPg ) );
              sqlite3PagerUnref( pSrcPg );
            }
          }
          p.iNext++;
        }
        if ( rc == SQLITE_OK )
        {
          p.nPagecount = nSrcPage;
          p.nRemaining = ( nSrcPage + 1 - p.iNext );
          if ( p.iNext > nSrcPage )
          {
            rc = SQLITE_DONE;
          }
          else if ( 0 == p.isAttached )
          {
            attachBackupObject( p );
          }
//.........这里部分代码省略.........
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:101,代码来源:backup_c.cs

示例8: attachBackupObject

 /*
 ** Register this backup object with the associated source pager for
 ** callbacks when pages are changed or the cache invalidated.
 */
 static void attachBackupObject( sqlite3_backup p )
 {
   sqlite3_backup pp;
   Debug.Assert( sqlite3BtreeHoldsMutex( p.pSrc ) );
   pp = sqlite3PagerBackupPtr( sqlite3BtreePager( p.pSrc ) );
   p.pNext = pp;
   sqlite3BtreePager( p.pSrc ).pBackup = p; //*pp = p;
   p.isAttached = 1;
 }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:13,代码来源:backup_c.cs

示例9: backupOnePage

    /*
    ** Parameter zSrcData points to a buffer containing the data for
    ** page iSrcPg from the source database. Copy this data into the
    ** destination database.
    */
    static int backupOnePage( sqlite3_backup p, Pgno iSrcPg, byte[] zSrcData )
    {
      Pager pDestPager = sqlite3BtreePager( p.pDest );
      int nSrcPgsz = sqlite3BtreeGetPageSize( p.pSrc );
      int nDestPgsz = sqlite3BtreeGetPageSize( p.pDest );
      int nCopy = MIN( nSrcPgsz, nDestPgsz );
      i64 iEnd = (i64)iSrcPg * (i64)nSrcPgsz;

      int rc = SQLITE_OK;
      i64 iOff;

      Debug.Assert( p.bDestLocked != 0 );
      Debug.Assert( !isFatalError( p.rc ) );
      Debug.Assert( iSrcPg != PENDING_BYTE_PAGE( p.pSrc.pBt ) );
      Debug.Assert( zSrcData != null );

      /* Catch the case where the destination is an in-memory database and the
      ** page sizes of the source and destination differ.
      */
      if ( nSrcPgsz != nDestPgsz && sqlite3PagerIsMemdb( pDestPager ) )
      {
        rc = SQLITE_READONLY;
      }

#if SQLITE_HAS_CODEC
      /* Backup is not possible if the page size of the destination is changing
** a a codec is in use.
*/
      if ( nSrcPgsz != nDestPgsz && sqlite3PagerGetCodec( pDestPager ) != null )
      {
        rc = SQLITE_READONLY;
      }
#endif

      /* This loop runs once for each destination page spanned by the source
** page. For each iteration, variable iOff is set to the byte offset
** of the destination page.
*/
      for ( iOff = iEnd - (i64)nSrcPgsz; rc == SQLITE_OK && iOff < iEnd; iOff += nDestPgsz )
      {
        DbPage pDestPg = null;
        u32 iDest = (u32)( iOff / nDestPgsz ) + 1;
        if ( iDest == PENDING_BYTE_PAGE( p.pDest.pBt ) )
          continue;
        if ( SQLITE_OK == ( rc = sqlite3PagerGet( pDestPager, iDest, ref pDestPg ) )
        && SQLITE_OK == ( rc = sqlite3PagerWrite( pDestPg ) )
        )
        {
          //string zIn = &zSrcData[iOff%nSrcPgsz];
          byte[] zDestData = sqlite3PagerGetData( pDestPg );
          //string zOut = &zDestData[iOff % nDestPgsz];

          /* Copy the data from the source page into the destination page.
          ** Then clear the Btree layer MemPage.isInit flag. Both this module
          ** and the pager code use this trick (clearing the first byte
          ** of the page 'extra' space to invalidate the Btree layers
          ** cached parse of the page). MemPage.isInit is marked
          ** "MUST BE FIRST" for this purpose.
          */
          Buffer.BlockCopy( zSrcData, (int)( iOff % nSrcPgsz ), zDestData, (int)( iOff % nDestPgsz ), nCopy );// memcpy( zOut, zIn, nCopy );
          sqlite3PagerGetExtra( pDestPg ).isInit = 0;// ( sqlite3PagerGetExtra( pDestPg ) )[0] = 0;
        }
        sqlite3PagerUnref( pDestPg );
      }

      return rc;
    }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:72,代码来源:backup_c.cs

示例10: sqlite3_backup_init

    /*
    ** Create an sqlite3_backup process to copy the contents of zSrcDb from
    ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
    ** a pointer to the new sqlite3_backup object.
    **
    ** If an error occurs, NULL is returned and an error code and error message
    ** stored in database handle pDestDb.
    */
    static public sqlite3_backup sqlite3_backup_init(
    sqlite3 pDestDb,                 /* Database to write to */
    string zDestDb,                  /* Name of database within pDestDb */
    sqlite3 pSrcDb,                  /* Database connection to read from */
    string zSrcDb                    /* Name of database within pSrcDb */
    )
    {
      sqlite3_backup p;                    /* Value to return */

      /* Lock the source database handle. The destination database
      ** handle is not locked in this routine, but it is locked in
      ** sqlite3_backup_step(). The user is required to ensure that no
      ** other thread accesses the destination handle for the duration
      ** of the backup operation.  Any attempt to use the destination
      ** database connection while a backup is in progress may cause
      ** a malfunction or a deadlock.
      */
      sqlite3_mutex_enter( pSrcDb.mutex );
      sqlite3_mutex_enter( pDestDb.mutex );

      if ( pSrcDb == pDestDb )
      {
        sqlite3Error(
        pDestDb, SQLITE_ERROR, "source and destination must be distinct"
        );
        p = null;
      }
      else
      {
        /* Allocate space for a new sqlite3_backup object...
        ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
        ** call to sqlite3_backup_init() and is destroyed by a call to
        ** sqlite3_backup_finish(). */
        p = new sqlite3_backup();// (sqlite3_backup)sqlite3_malloc( sizeof( sqlite3_backup ) );
        //if ( null == p )
        //{
        //  sqlite3Error( pDestDb, SQLITE_NOMEM, 0 );
        //}
      }

      /* If the allocation succeeded, populate the new object. */
      if ( p != null )
      {
        // memset( p, 0, sizeof( sqlite3_backup ) );
        p.pSrc = findBtree( pDestDb, pSrcDb, zSrcDb );
        p.pDest = findBtree( pDestDb, pDestDb, zDestDb );
        p.pDestDb = pDestDb;
        p.pSrcDb = pSrcDb;
        p.iNext = 1;
        p.isAttached = 0;

        if ( null == p.pSrc || null == p.pDest || setDestPgsz( p ) == SQLITE_NOMEM )
        {
          /* One (or both) of the named databases did not exist or an OOM
          ** error was hit.  The error has already been written into the
          ** pDestDb handle.  All that is left to do here is free the
          ** sqlite3_backup structure.
          */
          //sqlite3_free( ref p );
          p = null;
        }
      }

      if ( p != null )
      {
        p.pSrc.nBackup++;
      }

      sqlite3_mutex_leave( pDestDb.mutex );
      sqlite3_mutex_leave( pSrcDb.mutex );
      return p;
    }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:80,代码来源:backup_c.cs

示例11: setDestPgsz

 /*
 ** Attempt to set the page size of the destination to match the page size
 ** of the source.
 */
 static int setDestPgsz( sqlite3_backup p )
 {
   int rc;
   rc = sqlite3BtreeSetPageSize( p.pDest, sqlite3BtreeGetPageSize( p.pSrc ), -1, 0 );
   return rc;
 }
开发者ID:pragmat1c,项目名称:coolstorage,代码行数:10,代码来源:backup_c.cs


注:本文中的sqlite3_backup类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。