[
http://issues.apache.org/jira/browse/DERBY-1435?page=comments#action_12417323 ]
Deepa Remesh commented on DERBY-1435:
-------------------------------------
Thanks for looking into this Suresh. Now, I can see this from the traces too.
We are re-using the prepared statement after table t1 is dropped. Here are the
stack traces from ij for execution of a new statement (insert into t2
values(2)) and a previously executed statement (insert into t2 values(1)) after
table t1 is dropped:
ij> --- these inserts should not work, but the second insert gives XSAI2
insert into t2 values(2);
ERROR 42X05: Table/View 'T1' does not exist.
ERROR 42X05: Table/View 'T1' does not exist.
at
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:304)
at
org.apache.derby.impl.sql.compile.DMLModStatementNode.verifyTargetTable(DMLModStatementNo
de.java:230)
at
org.apache.derby.impl.sql.compile.InsertNode.bind(InsertNode.java:248)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:344)
at
org.apache.derby.impl.sql.GenericStatement.prepareStorable(GenericStatement.java:591)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(SPSDescriptor.java:35
3)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(SPSDescriptor.java:2
83)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(SPSDescriptor.java:3
03)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(SPSDescriptor.jav
a:690)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(SPSDescriptor.jav
a:651)
at
org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeSPS(GenericTriggerExecuto
r.java:138)
at
org.apache.derby.impl.sql.execute.RowTriggerExecutor.fireTrigger(RowTriggerExecutor.java:
110)
at
org.apache.derby.impl.sql.execute.TriggerEventActivator.notifyEvent(TriggerEventActivator
.java:277)
at
org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:1
134)
at
org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:522)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:
361)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1181)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:584)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:516)
at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:313)
at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:433)
at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:310)
at org.apache.derby.impl.tools.ij.Main.go(Main.java:207)
at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:173)
at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:55)
at org.apache.derby.tools.ij.main(ij.java:60)
ij> insert into t2 values(1);
ERROR XSAI2: The conglomerate (896) requested does not exist.
ERROR XSAI2: The conglomerate (896) requested does not exist.
at
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:304)
at
org.apache.derby.impl.store.access.heap.HeapConglomerateFactory.readConglomerate(HeapCong
lomerateFactory.java:224)
at
org.apache.derby.impl.store.access.RAMAccessManager.conglomCacheFind(RAMAccessManager.jav
a:484)
at
org.apache.derby.impl.store.access.RAMTransaction.findExistingConglomerate(RAMTransaction
.java:389)
at
org.apache.derby.impl.store.access.RAMTransaction.getDynamicCompiledConglomInfo(RAMTransa
ction.java:701)
at
org.apache.derby.impl.sql.execute.DMLWriteResultSet.<init>(DMLWriteResultSet.java:82)
at
org.apache.derby.impl.sql.execute.DMLWriteResultSet.<init>(DMLWriteResultSet.java:66)
at
org.apache.derby.impl.sql.execute.InsertResultSet.<init>(InsertResultSet.java:343)
at
org.apache.derby.impl.sql.execute.GenericResultSetFactory.getInsertResultSet(GenericResul
tSetFactory.java:95)
at
org.apache.derby.exe.ac46a08075x010bxfc52x1188x0000001171d80.fillResultSet(Unknown
Source
)
at
org.apache.derby.exe.ac46a08075x010bxfc52x1188x0000001171d80.execute(Unknown
Source)
at
org.apache.derby.impl.sql.GenericActivationHolder.execute(GenericActivationHolder.java:32
6)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:
359)
at
org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeSPS(GenericTriggerExecuto
r.java:169)
at
org.apache.derby.impl.sql.execute.RowTriggerExecutor.fireTrigger(RowTriggerExecutor.java:
110)
at
org.apache.derby.impl.sql.execute.TriggerEventActivator.notifyEvent(TriggerEventActivator
.java:277)
at
org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:1
134)
at
org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:522)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:
361)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1181)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:584)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:516)
at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:313)
at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:433)
at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:310)
at org.apache.derby.impl.tools.ij.Main.go(Main.java:207)
at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:173)
at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:55)
at org.apache.derby.tools.ij.main(ij.java:60)
> Conglomerate does not exist occurs in a specific case after dropping a table
> referenced by a trigger
> ----------------------------------------------------------------------------------------------------
>
> Key: DERBY-1435
> URL: http://issues.apache.org/jira/browse/DERBY-1435
> Project: Derby
> Type: Bug
> Components: SQL
> Versions: 10.2.0.0
> Reporter: Deepa Remesh
> Attachments: repro1435.sql
>
> This exception occurs in the following case:
> 1. Create tables t1 and t2. Create a trigger on t2 whose triggering action is
> to insert a row into t1
> 2. Insert a value v1 into t2. Verify the trigger was fired by looking at
> contents of t1.
> 3. Drop table t1.
> 4. Insert a value v2 into t2. This will give an exception to indicate that
> table t1 does not exist.
> 5. Insert the same value v1 into t2. Instead of the exception in Step 4, this
> gives "ERROR XSAI2: The conglomerate (896) requested does not exist."
> 6. Re-create table t1.
> 7. Insert v2 into t2. This succeeds.
> 8. Try to insert the problem value v1 into t2. This still gives "ERROR XSAI2:
> The conglomerate (896) requested does not exist."
> 9. Shutdown and reconnect to the database. Try to insert the problem value v1
> into t2. Now this succeeds.
> So the exception occurs only in the specific case where we try to insert the
> same value that we had inserted before dropping the table referenced by the
> trigger. I'll attach a sql script to repro this.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira