You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dy...@apache.org on 2008/01/18 10:52:33 UTC
svn commit: r613116 - in
/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute:
TemporaryRowHolderImpl.java TemporaryRowHolderResultSet.java
Author: dyre
Date: Fri Jan 18 01:52:32 2008
New Revision: 613116
URL: http://svn.apache.org/viewvc?rev=613116&view=rev
Log:
DERBY-3221: "java.sql.SQLException: The conglomerate (-5) requested does not exist." from Derby 10.3.1.4 embedded within Eclipse 3.3 and RAD 7.0
Patch file: derby-3221.v3.diff
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderResultSet.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderImpl.java?rev=613116&r1=613115&r2=613116&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderImpl.java Fri Jan 18 01:52:32 2008
@@ -67,7 +67,7 @@
private int numRowsIn;
protected int state = STATE_UNINIT;
- protected long CID;
+ private long CID;
private boolean conglomCreated;
private ConglomerateController cc;
private Properties properties;
@@ -238,8 +238,9 @@
//In case of unique stream we push every thing into the
// conglomerates for time being, we keep one row in the array for
// the template.
- if(!isUniqueStream)
+ if (!isUniqueStream) {
return;
+ }
}
if (!conglomCreated)
@@ -490,32 +491,32 @@
public void truncate() throws StandardException
{
close();
-
+ if (SanityManager.DEBUG) {
+ SanityManager.ASSERT(lastArraySlot == -1);
+ SanityManager.ASSERT(state == STATE_UNINIT);
+ SanityManager.ASSERT(!conglomCreated);
+ SanityManager.ASSERT(CID == 0);
+ }
for (int i = 0; i < rowArray.length; i++)
{
rowArray[i] = null;
}
- lastArraySlot = -1;
- numRowsIn = 0;
- state = STATE_UNINIT;
- /*
- ** We are not expecting this to be called
- ** when we have a temporary conglomerate
- ** but just to be on the safe side, drop
- ** it. We'd like do something cheaper,
- ** but there is no truncate on congloms.
- */
- if (conglomCreated)
- {
- TransactionController tc = activation.getTransactionController();
- tc.dropConglomerate(CID);
- conglomCreated = false;
- }
+ numRowsIn = 0;
}
+ /**
+ * Accessor to get the id of the temporary conglomerate. Temporary
+ * conglomerates have negative ids. An id equal to zero means that no
+ * temporary conglomerate has been created.
+ * @return Conglomerate ID of temporary conglomerate
+ */
public long getTemporaryConglomId()
{
+ if (SanityManager.DEBUG) {
+ SanityManager.ASSERT(CID == 0 && !conglomCreated ||
+ CID < 0 && conglomCreated);
+ }
return CID;
}
@@ -593,8 +594,14 @@
{
tc.dropConglomerate(CID);
conglomCreated = false;
- }
-
+ CID = 0;
+ }
+ else
+ {
+ if (SanityManager.DEBUG) {
+ SanityManager.ASSERT(CID == 0, "CID(" + CID + ")==0");
+ }
+ }
state = STATE_UNINIT;
lastArraySlot = -1;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderResultSet.java?rev=613116&r1=613115&r2=613116&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderResultSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TemporaryRowHolderResultSet.java Fri Jan 18 01:52:32 2008
@@ -151,7 +151,12 @@
{
if(isAppendable)
{
- holder.CID = currentConglomId;
+ if (SanityManager.DEBUG) {
+ SanityManager.ASSERT(currentConglomId == holder.getTemporaryConglomId(),
+ "currentConglomId(" + currentConglomId +
+ ") == holder.getTemporaryConglomeateId (" +
+ holder.getTemporaryConglomId() + ")");
+ }
positionIndexConglomId = pconglomId;
setupPositionBasedScan(numRowsOut);
}else
@@ -273,7 +278,7 @@
return currentRow;
}
- if (holder.CID == 0)
+ if (holder.getTemporaryConglomId() == 0)
{
return (ExecRow)null;
}
@@ -285,7 +290,7 @@
{
scan =
tc.openScan(
- holder.CID,
+ holder.getTemporaryConglomId(),
false, // hold
0, // open read only
TransactionController.MODE_TABLE,
@@ -338,7 +343,7 @@
scan.fetchLocation(baseRowLocation);
if(heapCC == null)
{
- heapCC = tc.openConglomerate( holder.CID,
+ heapCC = tc.openConglomerate(holder.getTemporaryConglomId(),
false,
TransactionController.OPENMODE_FORUPDATE,
TransactionController.MODE_TABLE,
@@ -358,11 +363,11 @@
{
//incase nothing is inserted yet into the temporary row holder
- if(holder.CID ==0)
+ if (holder.getTemporaryConglomId() == 0)
return;
if(heapCC == null)
{
- heapCC = tc.openConglomerate( holder.CID,
+ heapCC = tc.openConglomerate( holder.getTemporaryConglomId(),
false,
0,
TransactionController.MODE_TABLE,