blob: ea21b222d6173a113ba6b147d166c877ad3b7be6 [file] [log] [blame]
/*
Derby - Class org.apache.derby.impl.sql.execute.DMLVTIResultSet
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package org.apache.derby.impl.sql.execute;
import org.apache.derby.shared.common.sanity.SanityManager;
import org.apache.derby.iapi.error.StandardException;
import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
import org.apache.derby.iapi.sql.execute.ExecRow;
import org.apache.derby.iapi.sql.execute.NoPutResultSet;
import org.apache.derby.iapi.sql.Activation;
import org.apache.derby.iapi.sql.ResultDescription;
import org.apache.derby.iapi.store.access.TransactionController;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* Base class for Insert, Delete and UpdateVTIResultSet
*/
abstract class DMLVTIResultSet extends DMLWriteResultSet
{
// passed in at construction time
NoPutResultSet sourceResultSet;
NoPutResultSet savedSource;
UpdatableVTIConstantAction constants;
TransactionController tc;
private int numOpens;
boolean firstExecute;
/**
*
* @exception StandardException Thrown on error
*/
DMLVTIResultSet(NoPutResultSet source,
Activation activation)
throws StandardException
{
super(activation);
sourceResultSet = source;
constants = (UpdatableVTIConstantAction) constantAction;
tc = activation.getTransactionController();
resultDescription = sourceResultSet.getResultDescription();
}
/**
@exception StandardException Standard Derby error policy
*/
public void open() throws StandardException
{
setup();
// Remember if this is the 1st execution
firstExecute = (numOpens == 0);
rowCount = 0;
if (numOpens++ == 0)
{
sourceResultSet.openCore();
}
else
{
sourceResultSet.reopenCore();
}
openCore();
/* Cache query plan text for source, before it gets blown away */
if (lcc.getRunTimeStatisticsMode())
{
/* savedSource nulled after run time statistics generation */
savedSource = sourceResultSet;
}
cleanUp();
endTime = getCurrentTimeMillis();
} // end of open()
protected abstract void openCore() throws StandardException;
/**
* @see org.apache.derby.iapi.sql.ResultSet#cleanUp
*
* @exception StandardException Thrown on error
*/
public void cleanUp() throws StandardException
{
/* Close down the source ResultSet tree */
if( null != sourceResultSet)
sourceResultSet.close();
numOpens = 0;
close( false );
} // end of cleanUp
public void finish() throws StandardException
{
sourceResultSet.finish();
super.finish();
} // end of finish
}