package com.sleepycat.je;
import com.sleepycat.je.dbi.TruncateResult;
public class Database {
/**
* @deprecated It has not been possible to implement this method with
* correct transactional semantics without incurring a performance penalty
* on all Database operations. Truncate functionality has been moved to
* Environment.truncateDatabase(), which requires that all Database handles
* on the database are closed before the truncate operation can execute.
*/
public int truncate( Transaction txn, boolean countRecords) throws DatabaseException {
return new Database_truncate(this,txn,countRecords).execute();
}
/**
* Internal unchecked truncate that optionally counts records.
* @deprecated
*/
int truncateInternal( Locker locker, boolean countRecords) throws DatabaseException {
if (databaseImpl == null) {
throw new DatabaseException("couldn't find database - truncate");
}
this.hook43();
if (handleLocker.isHandleLockTransferrable()) {
handleLocker.transferHandleLock(this,locker,false);
}
boolean operationOk=false;
try {
TruncateResult result=envHandle.getEnvironmentImpl().truncate(locker,databaseImpl);
databaseImpl=result.getDatabase();
operationOk=true;
return countRecords ? result.getRecordCount() : -1;
}
finally {
locker.setHandleLockOwner(operationOk,this,false);
}
}
protected void hook43() throws DatabaseException {
}
@MethodObject static class Database_truncate {
Database_truncate( Database _this, Transaction txn, boolean countRecords){
this._this=_this;
this.txn=txn;
this.countRecords=countRecords;
}
int execute() throws DatabaseException {
_this.checkEnv();
_this.checkRequiredDbState(_this.OPEN,"Can't call Database.truncate");
_this.checkWritable("truncate");
this.hook39();
locker=null;
this.hook40();
operationOk=false;
try {
locker=LockerFactory.getWritableLocker(_this.envHandle,txn,_this.isTransactional(),true,null);
_this.acquireTriggerListReadLock();
this.hook41();
count=_this.truncateInternal(locker,countRecords);
for (int i=0; i < _this.triggerList.size(); i+=1) {
obj=_this.triggerList.get(i);
if (obj instanceof SecondaryTrigger) {
secDb=((SecondaryTrigger)obj).getDb();
secDb.truncateInternal(locker,false);
}
}
operationOk=true;
return count;
}
finally {
if (locker != null) {
locker.operationEnd(operationOk);
}
this.hook42();
}
}
protected Database _this;
protected Transaction txn;
protected boolean countRecords;
protected Locker locker;
protected boolean triggerLock;
protected boolean operationOk;
protected int count;
protected Object obj;
protected SecondaryDatabase secDb;
protected void hook39() throws DatabaseException {
}
protected void hook40() throws DatabaseException {
}
protected void hook41() throws DatabaseException {
}
protected void hook42() throws DatabaseException {
}
}
}