|
View:
New views
16 Messages
—
Rating Filter:
Alert me
|
|
|
[jira] Created: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit offALTER TABLE Sanity ASSERT in add column with autocommit off
----------------------------------------------------------- Key: DERBY-4244 URL: https://issues.apache.org/jira/browse/DERBY-4244 Project: Derby Issue Type: Bug Components: SQL Affects Versions: 10.6.0.0 Reporter: Bryan Pendleton Priority: Minor While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. Here's a script which reproduces the problem for me: autocommit off; create table t0(c1 int not null constraint p1 primary key); alter table t0 add column c1 int; alter table t0 add column c2 int not null default 0 primary key; alter table t0 add column c2 int not null default 0; The "autocommit off" is crucial; otherwise the problem does not reproduce. Here's the detailed assertion failure: 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) Here's the relevant section of Heap.java: if (column_id != format_ids.length) { if (SanityManager.DEBUG) SanityManager.THROWASSERT( "column_id = " + column_id + "format_ids.length = " + format_ids.length + "format_ids = " + format_ids); throw(StandardException.newException( SQLState.HEAP_TEMPLATE_MISMATCH, new Long(column_id), new Long(this.format_ids.length))); } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12712434#action_12712434 ] Knut Anders Hatlen commented on DERBY-4244: ------------------------------------------- Does the THROWASSERT add any value in this code? It seems like all useful information is included in the message of the StandardException that will be thrown otherwise (I don't regard the identity hash code of the int array useful, and that's the only missing piece, as far as I can see). Not that removing the THROWASSERT will fix the bug... > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.6.0.0 > Reporter: Bryan Pendleton > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Assigned: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Eranda Sooriyabandara reassigned DERBY-4244: -------------------------------------------- Assignee: Eranda Sooriyabandara > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12725280#action_12725280 ] Eranda Sooriyabandara commented on DERBY-4244: ---------------------------------------------- Hi, I remove, SanityManager.THROWASSERT( "column_id = " + column_id + "format_ids.length = " + format_ids.length + "format_ids = " + format_ids); and I get the new error as, Caused by: ERROR XSCH5: In a base table there was a mismatch between the requested column number 1 and the maximum numbe r of columns 2. at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:303) at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:423) at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java: 1325) at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) at org.apache.derby.impl.sql.execute.MiscResultSet.open(MiscResultSet.java:64) Thanks Eranda > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12726720#action_12726720 ] Bryan Pendleton commented on DERBY-4244: ---------------------------------------- Hi Eranda, In the script which reproduces the problem, I believe it is the *third* ALTER TABLE statement which crashes, is that correct? What happens if you remove the first or the second ALTER TABLE statements in the script? Does it still fail the same way? Also, what happens if you start with the original script, but in the *third* ALTER TABLE statement you change "c2" to "c3"? Does it still fail the same way? > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12726993#action_12726993 ] Bryan Pendleton commented on DERBY-4244: ---------------------------------------- Hi Eranda, If you run the reproduction script with derby.language.statementCacheSize=0, does the problem still occur? > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Updated: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dag H. Wanvik updated DERBY-4244: --------------------------------- Issue & fix info: [Repro attached] Urgency: Normal Affects Version/s: 10.2.1.6 10.2.2.0 10.3.1.4 10.3.2.1 10.3.3.0 10.4.1.3 10.4.2.0 10.5.1.1 Triaged for 10.5.2, setting "repro attached" and "normal" urgency. Saw this back to 10.2, setting affected flags accordingly. > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12727114#action_12727114 ] Eranda Sooriyabandara commented on DERBY-4244: ---------------------------------------------- Hi Bryan,Thanks for helping me to figure this out. This error is causing by the previous command without this command the test runs successfully. When I change the command to, the test was successful. I think there must be remaining part of the previous statement in some where. But, according to the test setting derby.language.statementCacheSize=0 did "not" change the behavior of the bug. And it means that the remaining part of the statement is not in the cache. We can solve the bug if we can find where it get stored? Am I correct? Are there any misunderstanding of me? > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12727148#action_12727148 ] Bryan Pendleton commented on DERBY-4244: ---------------------------------------- If I change the next-to-last SQL statement from alter table t0 add column c2 int not null default 0 primary key; to alter table t0 add column c2 int not null default 0; then the problem does not occur. This suggests to me that the problem involves the cleanup that is performed after this error is encountered ERROR X0Y58: Attempt to add a primary key constraint to table '"APP"."T0"' failed because the table already has a constraint of that type. A table can only have a single primary key constraint. I can see in derby.log that the stack trace at the time of this error looks like this: at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:286) at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:541) at org.apache.derby.impl.sql.execute.MiscResultSet.open(MiscResultSet.java:64) at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:416) at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:297) at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1235) at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:625) at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:555) at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:329) at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:521) at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:363) at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:261) at org.apache.derby.impl.tools.ij.Main.go(Main.java:222) at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:177) at org.apache.derby.impl.tools.ij.Main.main(Main.java:73) at org.apache.derby.tools.ij.main(ij.java:59) This suggests to me that the next step is to study the error handling that is performed in this part of the code; specifically whether AlterTableConstantAction.executeConstantAction isn't properly cleaning everything up when the error occurs. > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12727366#action_12727366 ] Eranda Sooriyabandara commented on DERBY-4244: ---------------------------------------------- Hi Bryan, I did some tests, and get the results as follows ij> create table t0(c1 int not null constraint p1 primary key); 0 rows inserted/updated/deleted ij> alter table t0 add column c2 int not null default 0 primary key; ERROR X0Y58: Attempt to add a primary key constraint to table '"APP"."T0"' failed because the table already has a constr aint of that type. A table can only have a single primary key constraint. ij> alter table t0 add column c3 int not null default 0; ERROR XSCH5: In a base table there was a mismatch between the requested column number 1 and the maximum number of column s 2. ij> alter table t0 add column c6 int not null default 0; ERROR XSCH5: In a base table there was a mismatch between the requested column number 1 and the maximum number of column s 2. ij> alter table t0 add column g6 int not null default 0; ERROR XSCH5: In a base table there was a mismatch between the requested column number 1 and the maximum number of column The test says that by "alter table t0 add column c2 int not null default 0 primary key;" fails it self and also fails other statement of add columns. Thanks Eranda > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12727758#action_12727758 ] Bryan Pendleton commented on DERBY-4244: ---------------------------------------- I spent some time stepping through the code and thinking about it. The X0Y58 message is generated at line 541 of AlterTableConstantAction.java: if (cdl.getPrimaryKey() != null) { throw StandardException.newException( SQLState.LANG_ADD_PRIMARY_KEY_FAILED1, td.getQualifiedName()); } However, this error is generated *after* the new column has already been added to the table, which occurs at line 450 of AlterTableConstantAction.java: if (columnInfo[ix].action == ColumnInfo.CREATE) { addNewColumnToTable(activation, lcc, dd, tc, ix); } addnewColumnToTable adds the new column to the table, then updates the data in the new column to the default value, using a nested sub-statement. This occurs at line 3199 of AlterTableConstantAction.java: String updateStmt = "UPDATE \"" + td.getSchemaName() + "\".\"" + td.getName() + "\" SET \"" + columnName + "\" = " + defaultText; AlterTableConstantAction.executeUpdate(lcc, updateStmt); private static void executeUpdate(LanguageConnectionContext lcc, String updateStmt) throws StandardException { PreparedStatement ps = lcc.prepareInternalStatement(updateStmt); // This is a substatement; for now, we do not set any timeout // for it. We might change this behaviour later, by linking // timeout to its parent statement's timeout settings. ResultSet rs = ps.executeSubStatement(lcc, true, 0L); rs.close(); } So the stack trace, when this is going on, looks something like: GenericPreparedStatements.executeStmt:443 GenericPreparedStatement.executeSubStatement:272 AlterTableConstantAction.executeUpdate:3209 AlterTableConstantAction.updateNewColumnToDefault:3199 AlterTableConstantAction.addNewColumnToTable:1374 AlterTableConstantAction.executeConstantAction:450 MiscResultSet.open:64 GenericPreparedStatement.executeStmt:416 GenericPreparedStatement.execute:297 EmbedStatement.executeStatement:1235 This leads me to two ideas: 1) Although the X0Y58 error causes the outer statement to be rolled back to its savepoint, there must be something that occurs in the nested inner sub-statement which isn't undone by rolling back the outer statement to its savepoint. Specifically, something involving the descriptor information in the DataDictionary. So we could try to investigate that more. 2) It seems odd that we only catch this error at *execution* time, after we have already added the new column to the table, and set all its default values, and only then do we notice that there's an error in the constraint. I think that the duplicate constraint error should be something that we are able to catch at *compile* time. So we could investigate the compile time processing of ALTER TABLE ADD COLUMN, and try to figure out why this error isn't being caught during compilation. > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Updated: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Bryan Pendleton updated DERBY-4244: ----------------------------------- Attachment: checkAtCompileTime.diff Hi Eranda, Attached code change 'checkAtCompileTime.diff' is a possible fix to pursue. This change adds some code to the compilation processing for ALTER TABLE to verify that we aren't adding a duplicate primary key to the table. I haven't done much testing, just verified that it fixes the 4-line script in the bug description. Can you have a look at this change and see what you think? If it seems reasonable, maybe you can do some more testing, and add some additional regression tests into the patch to turn it into a more complete patch proposal. > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > Attachments: checkAtCompileTime.diff > > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Commented: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12730127#action_12730127 ] Bryan Pendleton commented on DERBY-4244: ---------------------------------------- Hi Eranda, Here's a few comments to hopefully explain how the attached patch works: During parsing, the parser processes the ALTER TABLE statement and breaks it down into pieces, then builds up a AlterTableNode instance to describe the statement. For an ALTER TABLE ADD ... statement, information about the column to be added, if any, and about the constraints that apply to that column, are stored in the table element list. This occurs at about lines 12622-12630 of sqlgrammar.jj, in the code: <ADD> ( tableElement = addColumnDefinition(tableElementList) | tableElement = tableConstraintDefinition() ) { if (tableElement instanceof ColumnDefinitionNode) { //bug 5724 - auto increment columns not allowed in ALTER TABLE statement ColumnDefinitionNode cdn = (ColumnDefinitionNode) tableElement; if ( cdn.isAutoincrementColumn()) throw StandardException.newException(SQLState.LANG_ALTER_TABLE_AUTOINCREMENT_COLUMN_NOT_ALLOWED); } changeType[0] = DDLStatementNode.ADD_TYPE; tableElementList.addTableElement(tableElement); Later in the compilation of the ALTER TABLE statement, we call the makeConstantAction method in AlterTableNode.java, which in turn calls the prepConstantAction subroutine, at line 510 or so in AlterTableNode.java, which is the place where my proposed patch inserts some code. The first part of that new code looks like this: for (int conIndex = 0; conIndex < conActions.length; conIndex++) { ConstraintConstantAction cca = conActions[conIndex]; if (cca instanceof CreateConstraintConstantAction) { This code looks through the constraint information that the parser placed into the tableElementList, as I described above. As it looks through the list, each constraint action in the list may be one of several types of constraints: - primary key constraint - foreign key constraint (REFERENCES ...) - check constraint (CHECK ...) For the purposes of this particular patch, we are only interested in primary key constraints, so we look at each constraint action in the list to see if it is a primary key constraint: int constraintType = cca.getConstraintType(); if (constraintType == DataDictionary.PRIMARYKEY_CONSTRAINT) { If we find such a constraint, then we know that this ALTER TABLE statement is adding a new PRIMARY KEY constraint, so we want to check to see if the table *already has* such a constraint, in which case we want to reject this statement because a table can only have 1 PK constraint: ConstraintDescriptorList cdl = dd.getConstraintDescriptors(baseTable); if (cdl.getPrimaryKey() != null) { throw StandardException.newException( SQLState.LANG_ADD_PRIMARY_KEY_FAILED1, baseTable.getQualifiedName()); } Hopefully the proposed patch makes a little bit more sense now. Let me know what you think! > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > Attachments: checkAtCompileTime.diff > > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Updated: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Eranda Sooriyabandara updated DERBY-4244: ----------------------------------------- Attachment: DERBY-4244.diff Hi Bryan, Thanks for the explanation. I got the point why we must use that code. After patch using your patch file I ran the test and I got the error that tables was not there in the schema so I used the conn.commit() to the line-86 and the test was ran successfully in my platform. Here I am attaching the patch file after successful run. I think this ends the issue. Please let me know. I update derby-wiki about this issue, what I've done. Thanks Eranda > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > Attachments: checkAtCompileTime.diff, DERBY-4244.diff > > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Resolved: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Bryan Pendleton resolved DERBY-4244. ------------------------------------ Resolution: Fixed Fix Version/s: 10.6.0.0 Thanks for the revised patch, Eranda! I ran a complete set of regression tests, and committed the fix, as revision 795459. I decided not to remove the THROWASSERT from Heap.java at this time. I agree with Knut's observation that the THROWASSERT was not adding much value, but it also seemed that removing it was not essential to the patch, so in the interests of making a small, focused patch, I simply included the changes to AlterTableNode and AlterTableTest. I believe that the work on this issue is complete. > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > Fix For: 10.6.0.0 > > Attachments: checkAtCompileTime.diff, DERBY-4244.diff > > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
|
|
[jira] Closed: (DERBY-4244) ALTER TABLE Sanity ASSERT in add column with autocommit off[ https://issues.apache.org/jira/browse/DERBY-4244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Eranda Sooriyabandara closed DERBY-4244. ---------------------------------------- > ALTER TABLE Sanity ASSERT in add column with autocommit off > ----------------------------------------------------------- > > Key: DERBY-4244 > URL: https://issues.apache.org/jira/browse/DERBY-4244 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.6.0.0 > Reporter: Bryan Pendleton > Assignee: Eranda Sooriyabandara > Priority: Minor > Fix For: 10.6.0.0 > > Attachments: checkAtCompileTime.diff, DERBY-4244.diff > > > While working with Eranda on DERBY-4187, I stumbled across an apparent ALTER TABLE bug. > Here's a script which reproduces the problem for me: > autocommit off; > create table t0(c1 int not null constraint p1 primary key); > alter table t0 add column c1 int; > alter table t0 add column c2 int not null default 0 primary key; > alter table t0 add column c2 int not null default 0; > The "autocommit off" is crucial; otherwise the problem does not reproduce. > Here's the detailed assertion failure: > 2009-05-23 15:01:17.436 GMT Thread[main,5,main] (XID = 146), (SESSIONID = 1), (DATABASE = brydb), (DRDAID = null), Failed Statement is: alter table t0 add column c2 int not null default 0 > org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED column_id = 1format_ids.length = 2format_ids = [I@1321f5 > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at org.apache.derby.impl.store.access.heap.Heap.addColumn(Heap.java:418) > at org.apache.derby.impl.store.access.RAMTransaction.addColumnToConglomerate(RAMTransaction.java:618) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.addNewColumnToTable(AlterTableConstantAction.java:1325) > at org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:449) > Here's the relevant section of Heap.java: > if (column_id != format_ids.length) > { > if (SanityManager.DEBUG) > SanityManager.THROWASSERT( > "column_id = " + column_id + > "format_ids.length = " + format_ids.length + > "format_ids = " + format_ids); > throw(StandardException.newException( > SQLState.HEAP_TEMPLATE_MISMATCH, > new Long(column_id), > new Long(this.format_ids.length))); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. |
| Free embeddable forum powered by Nabble | Forum Help |