public bool createDbTest( string sDbName, DbSystem dbSystem) { Db db = null; RCODE rc; beginTest( "Create Database Test (" + sDbName + ")"); for (;;) { rc = RCODE.NE_XFLM_OK; try { XFLM_CREATE_OPTS createOpts = new XFLM_CREATE_OPTS(); createOpts.uiBlockSize = 8192; createOpts.uiVersionNum = (uint)DBVersions.XFLM_CURRENT_VERSION_NUM; createOpts.uiMinRflFileSize = 2000000; createOpts.uiMaxRflFileSize = 20000000; createOpts.bKeepRflFiles = 1; createOpts.bLogAbortedTransToRfl = 1; createOpts.eDefaultLanguage = Languages.FLM_DE_LANG; db = dbSystem.dbCreate( sDbName, null, null, null, null, createOpts); } catch (XFlaimException ex) { rc = ex.getRCode(); if (rc != RCODE.NE_XFLM_FILE_EXISTS) { endTest( false, ex, "creating database"); return( false); } } if (rc == RCODE.NE_XFLM_OK) { break; } // rc better be NE_XFLM_FILE_EXISTS - try to delete the file try { dbSystem.dbRemove( sDbName, null, null, true); } catch (XFlaimException ex) { endTest( false, ex, "removing database"); return( false); } } if (db != null) { db.close(); db = null; } endTest( false, true); return( true); }
public bool rebuildDbTest( string sSrcDbName, string sDestDbName, DbSystem dbSystem) { MyDbRebuildStatus dbRebuildStatus = null; XFLM_CREATE_OPTS createOpts = null; // Try restoring the database beginTest( "Rebuild Database Test (" + sSrcDbName + " to " + sDestDbName + ")"); dbRebuildStatus = new MyDbRebuildStatus(); createOpts = new XFLM_CREATE_OPTS(); createOpts.uiBlockSize = 8192; createOpts.uiVersionNum = (uint)DBVersions.XFLM_CURRENT_VERSION_NUM; createOpts.uiMinRflFileSize = 2000000; createOpts.uiMaxRflFileSize = 20000000; createOpts.bKeepRflFiles = 1; createOpts.bLogAbortedTransToRfl = 1; createOpts.eDefaultLanguage = Languages.FLM_DE_LANG; try { dbSystem.dbRebuild( sSrcDbName, null, sDestDbName, null, null, null, null, createOpts, dbRebuildStatus); } catch (XFlaimException ex) { endTest( dbRebuildStatus.outputLines(), ex, "rebuilding database"); return( false); } endTest( true, true); return( true); }
public bool domNodesTest( string sDbName, DbSystem dbSystem) { bool bOk = false; Db db = null; bool bStartedTrans = false; RCODE rc; // Create the database beginTest( "Create database \"" + sDbName + "\""); for (;;) { rc = RCODE.NE_XFLM_OK; try { XFLM_CREATE_OPTS createOpts = new XFLM_CREATE_OPTS(); createOpts.uiBlockSize = 8192; createOpts.uiVersionNum = (uint)DBVersions.XFLM_CURRENT_VERSION_NUM; createOpts.uiMinRflFileSize = 2000000; createOpts.uiMaxRflFileSize = 20000000; createOpts.bKeepRflFiles = 1; createOpts.bLogAbortedTransToRfl = 1; createOpts.eDefaultLanguage = Languages.FLM_DE_LANG; db = dbSystem.dbCreate( sDbName, null, null, null, null, createOpts); } catch (XFlaimException ex) { rc = ex.getRCode(); if (rc != RCODE.NE_XFLM_FILE_EXISTS) { endTest( false, ex, "creating database"); return( false); } } if (rc == RCODE.NE_XFLM_OK) { break; } // rc better be NE_XFLM_FILE_EXISTS - try to delete the file try { dbSystem.dbRemove( sDbName, null, null, true); } catch (XFlaimException ex) { endTest( false, ex, "removing database"); return( false); } } endTest( false, true); // Start a transaction beginTest( "Start Update Transaction Test"); try { db.transBegin( eDbTransType.XFLM_UPDATE_TRANS, 255, 0); } catch (XFlaimException ex) { endTest( false, ex, "starting update transaction"); goto Exit; } endTest( false, true); bStartedTrans = true; // Create a document if (!createDocumentTest( db)) { goto Exit; } // Commit the transaction beginTest( "Commit Update Transaction Test"); try { bStartedTrans = false; db.transCommit(); } catch (XFlaimException ex) { endTest( false, ex, "committing update transaction"); goto Exit; } endTest( false, true); bOk = true; Exit: if (bStartedTrans) { db.transAbort(); } if (db != null) { db.close(); db = null; } return( bOk); }
//----------------------------------------------------------------------------- // dbRebuild //----------------------------------------------------------------------------- /// <summary> /// Rebuild a database. /// </summary> /// <param name="sSourceDbPath"> /// The name of the control file of the database that is to be rebuilt. /// </param> /// <param name="sSourceDataDir"> /// The data file directory. See <see cref="dbCreate"/> for more information. /// </param> /// <param name="sDestDbPath"> /// The name of the control file of the destination /// database that is to be built from the source database. /// </param> /// <param name="sDestDataDir"> /// The destination database's data file directory. See <see cref="dbCreate"/> for /// more information. /// </param> /// <param name="sDestRflDir"> /// The destination database's roll-forward log /// directory. See <see cref="dbCreate"/> for more information. /// </param> /// <param name="sDictPath"> /// The name of a file containing dictionary definitions that /// are to be put into the destination database when it is created. /// May be null. /// </param> /// <param name="sPassword"> /// Password for opening the source database. This is only needed /// if the database key is currently wrapped in a password instead of the /// local NICI storage key. May be null. /// </param> /// <param name="createOpts"> /// A <see cref="XFLM_CREATE_OPTS"/> object that contains several parameters that /// are used in the creation of the destination database. /// </param> /// <param name="rebuildStatus"> /// If non-null this is an object that implements the <see cref="DbRebuildStatus"/> /// interface. It is a callback object that is used to report rebuild progress. /// </param> public void dbRebuild( string sSourceDbPath, string sSourceDataDir, string sDestDbPath, string sDestDataDir, string sDestRflDir, string sDictPath, string sPassword, XFLM_CREATE_OPTS createOpts, DbRebuildStatus rebuildStatus) { RCODE rc; DbRebuildStatusDelegate dbRebuildStatus = null; DbRebuildStatusCallback fnDbRebuildStatus = null; if (rebuildStatus != null) { dbRebuildStatus = new DbRebuildStatusDelegate( rebuildStatus); fnDbRebuildStatus = new DbRebuildStatusCallback( dbRebuildStatus.funcDbRebuildStatus); } if ((rc = xflaim_DbSystem_dbRebuild( m_pDbSystem, sSourceDbPath, sSourceDataDir, sDestDbPath, sDestDataDir, sDestRflDir, sDictPath, sPassword, createOpts, fnDbRebuildStatus)) != 0) { throw new XFlaimException( rc); } }
//----------------------------------------------------------------------------- // dbCreate //----------------------------------------------------------------------------- /// <summary> /// Creates a new XFlaim database. /// </summary> /// <param name="sDbFileName"> /// This is the name of the control file for the database. /// The control file is the primary database name. It may include a full /// or partial directory name, or no directory name. If a partial directory /// name or is included, it is assumed to be relative to the current working /// directory. If no directory is specified, the file will be created in /// the current working directory. /// </param> /// <param name="sDataDir"> /// The directory where the database data files are stored. /// If null, the data files will be stored in the same directory as the control /// file. /// </param> /// <param name="sRflDir"> /// The directory where the roll forward log files should be /// stored. If null, this defaults to the same directory where the control file /// exists. Within this directory, XFLAIM expects a subdirectory to exist that /// holds the RFL files. The subdirectory name is derived from the control /// file's base name. If the control file's base name has an extension /// of ".db", the ".db" is replaced with ".rfl". If the control file's base /// name does not have an extension of ".db", an extension of ".rfl" is simply /// appended to the control file's base name. For example, if the control file's /// base name is "MyDatabase.db", the subdirectory will be named "MyDatabase.rfl". /// If the control file's base name is "MyDatabase.xyz", the subdirectory will be /// named "MyDatabase.xyz.rfl". /// </param> /// <param name="sDictFileName"> /// The name of a file which contains dictionary /// definition items. May be null. Ignored if sDictBuf is non-null. /// </param> /// <param name="sDictBuf"> /// Contains dictionary definitions. If null, /// sDictFileName is used. If both sDictFileName and sDictBuf are null, /// the database is created with an empty dictionary. /// </param> /// <param name="createOpts"> /// A structure that contains several parameters that affect the creation /// of the database. /// </param> /// <returns>An instance of a <see cref="Db"/> object.</returns> public Db dbCreate( string sDbFileName, string sDataDir, string sRflDir, string sDictFileName, string sDictBuf, XFLM_CREATE_OPTS createOpts) { IntPtr pDb; RCODE rc; if ((rc = xflaim_DbSystem_dbCreate( m_pDbSystem, sDbFileName, sDataDir, sRflDir, sDictFileName, sDictBuf, createOpts, out pDb)) != 0) { throw new XFlaimException( rc); } return( new Db( pDb, this)); }
private static extern RCODE xflaim_DbSystem_dbRebuild( IntPtr pDbSystem, [MarshalAs(UnmanagedType.LPStr), In] string pszSourceDbPath, [MarshalAs(UnmanagedType.LPStr), In] string pszSourceDataDir, [MarshalAs(UnmanagedType.LPStr), In] string pszDestDbPath, [MarshalAs(UnmanagedType.LPStr), In] string pszDestDataDir, [MarshalAs(UnmanagedType.LPStr), In] string pszDestRflDir, [MarshalAs(UnmanagedType.LPStr), In] string pszDictPath, [MarshalAs(UnmanagedType.LPStr), In] string pszPassword, XFLM_CREATE_OPTS pCreateOpts, DbRebuildStatusCallback fnDbRebuildStatus);
private static extern RCODE xflaim_DbSystem_dbCreate( IntPtr pDbSystem, [MarshalAs(UnmanagedType.LPStr), In] string pszDbFileName, [MarshalAs(UnmanagedType.LPStr), In] string pszDataDir, [MarshalAs(UnmanagedType.LPStr), In] string pszRflDir, [MarshalAs(UnmanagedType.LPStr), In] string pszDictFileName, [MarshalAs(UnmanagedType.LPStr), In] string pszDictBuf, XFLM_CREATE_OPTS pCreateOpts, out IntPtr ppDb);