You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Knut Anders Hatlen (JIRA)" <ji...@apache.org> on 2011/03/29 10:53:05 UTC

[jira] [Created] (DERBY-5161) Cannot rollback after syntax error in internal statement

Cannot rollback after syntax error in internal statement
--------------------------------------------------------

                 Key: DERBY-5161
                 URL: https://issues.apache.org/jira/browse/DERBY-5161
             Project: Derby
          Issue Type: Bug
          Components: SQL
    Affects Versions: 10.7.1.1
            Reporter: Knut Anders Hatlen


To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.

ij version 10.7
ij> connect 'jdbc:derby:db;create=true';
ij> autocommit off;
ij> create table t(x int);
0 rows inserted/updated/deleted
ij> alter table t add column """" int default 42;
ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> rollback;
ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.

The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.

Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (DERBY-5161) Cannot rollback after syntax error in internal statement

Posted by "Dag H. Wanvik (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/DERBY-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13012462#comment-13012462 ] 

Dag H. Wanvik commented on DERBY-5161:
--------------------------------------

So, this explains the hang I saw in DERBY-5157 with the new test cases present and the code changes backed out. Looks like a good fix to me if regressions pass. Although we should not normally see syntax errors in internal statements, its good that
the error handling is correct if it ever happens.

+1


> Cannot rollback after syntax error in internal statement
> --------------------------------------------------------
>
>                 Key: DERBY-5161
>                 URL: https://issues.apache.org/jira/browse/DERBY-5161
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: finally.diff
>
>
> To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.
> ij version 10.7
> ij> connect 'jdbc:derby:db;create=true';
> ij> autocommit off;
> ij> create table t(x int);
> 0 rows inserted/updated/deleted
> ij> alter table t add column """" int default 42;
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
> Issue the 'help' command for general information on IJ command syntax.
> Any unrecognized commands are treated as potential SQL commands and executed directly.
> Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
> ij> rollback;
> ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.
> The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.
> Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Resolved] (DERBY-5161) Cannot rollback after syntax error in internal statement

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen resolved DERBY-5161.
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 10.8.0.0

All regression tests ran cleanly with the patch. Committed revision 1086920.

> Cannot rollback after syntax error in internal statement
> --------------------------------------------------------
>
>                 Key: DERBY-5161
>                 URL: https://issues.apache.org/jira/browse/DERBY-5161
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>             Fix For: 10.8.0.0
>
>         Attachments: cleanupOnError.diff, finally.diff
>
>
> To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.
> ij version 10.7
> ij> connect 'jdbc:derby:db;create=true';
> ij> autocommit off;
> ij> create table t(x int);
> 0 rows inserted/updated/deleted
> ij> alter table t add column """" int default 42;
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
> Issue the 'help' command for general information on IJ command syntax.
> Any unrecognized commands are treated as potential SQL commands and executed directly.
> Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
> ij> rollback;
> ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.
> The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.
> Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (DERBY-5161) Cannot rollback after syntax error in internal statement

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-5161:
--------------------------------------

    Attachment: cleanupOnError.diff

I ran the regression tests on the finally.diff patch and saw two failures in derbyall:

lang/subquery.sql
lang/subquery2.sql

All diffs were similar to this one:

********* Diff file derbyall/derbylang/subquery2.diff
*** Start: subquery2 jdk1.6.0_21 derbyall:derbylang 2011-03-29 14:03:32 ***
1017 del
< 2 dependencies found                                                                                        
1017a1017
> 12 dependencies found                                                                                       
Test Failed.
*** End:   subquery2 jdk1.6.0_21 derbyall:derbylang 2011-03-29 14:03:44 ***

The problem appears to be that some dependencies aren't cleared when we pop the statement context after a syntax error. I think we should use StatementContext.cleanupOnError() instead of LanguageConnectionContext.popStatementContext() when an exception has been thrown. cleanupOnError() will call popStatementContext() after first clearing the dependencies that made subquery.sql and subquery2.sql fail.

The attached patch cleanupOnError.diff changes GenericStatement.prepMinion() so that it uses cleanupOnError() in the exception case. subquery.sql and subquery2.sql pass with that change, and the patch still fixes the rollback error in the bug repro.

> Cannot rollback after syntax error in internal statement
> --------------------------------------------------------
>
>                 Key: DERBY-5161
>                 URL: https://issues.apache.org/jira/browse/DERBY-5161
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: cleanupOnError.diff, finally.diff
>
>
> To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.
> ij version 10.7
> ij> connect 'jdbc:derby:db;create=true';
> ij> autocommit off;
> ij> create table t(x int);
> 0 rows inserted/updated/deleted
> ij> alter table t add column """" int default 42;
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
> Issue the 'help' command for general information on IJ command syntax.
> Any unrecognized commands are treated as potential SQL commands and executed directly.
> Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
> ij> rollback;
> ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.
> The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.
> Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (DERBY-5161) Cannot rollback after syntax error in internal statement

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-5161:
--------------------------------------

    Attachment: finally.diff

Attaching a patch that moves popStatementContext() into a finally clause. Now the repro doesn't fail when invoking rollback:

ij version 10.8
ij> connect 'jdbc:derby:db;create=true';
ij> autocommit off;
ij> create table t(x int);
0 rows inserted/updated/deleted
ij> alter table t add column """" int default 42;
ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> rollback;
ij> 

I haven't run any other tests yet. No regression tests have been added since I don't know how to reproduce the problem without backing out DERBY-5157.

> Cannot rollback after syntax error in internal statement
> --------------------------------------------------------
>
>                 Key: DERBY-5161
>                 URL: https://issues.apache.org/jira/browse/DERBY-5161
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>         Attachments: finally.diff
>
>
> To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.
> ij version 10.7
> ij> connect 'jdbc:derby:db;create=true';
> ij> autocommit off;
> ij> create table t(x int);
> 0 rows inserted/updated/deleted
> ij> alter table t add column """" int default 42;
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
> Issue the 'help' command for general information on IJ command syntax.
> Any unrecognized commands are treated as potential SQL commands and executed directly.
> Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
> ij> rollback;
> ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.
> The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.
> Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (DERBY-5161) Cannot rollback after syntax error in internal statement

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/DERBY-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13012397#comment-13012397 ] 

Knut Anders Hatlen commented on DERBY-5161:
-------------------------------------------

The rollback exception is raised by this code in GenericLanguageConnectionContext.doRollback():

        StatementContext statementContext = getStatementContext();
        if (requestedByUser &&
            (statementContext != null) &&
            statementContext.inUse() &&
            statementContext.isAtomic())
        {
            throw StandardException.newException(SQLState.LANG_NO_ROLLBACK_IN_NESTED_CONNECTION);
        }

So it seems the problem is that the statement context wasn't popped from the stack when the internal statement failed.

Looking at the code in GenericStatement.prepMinion(), in which the failing call to parseStatement() is invoked, there is a try/finally block that ensures the compiler context is popped from the stack, but the statement context isn't popped until after the finally clause, and may therefore be forgotten in the case of a failure. I think we may want to move the call to popStatementContext() into the finally clause.

> Cannot rollback after syntax error in internal statement
> --------------------------------------------------------
>
>                 Key: DERBY-5161
>                 URL: https://issues.apache.org/jira/browse/DERBY-5161
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>
> To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.
> ij version 10.7
> ij> connect 'jdbc:derby:db;create=true';
> ij> autocommit off;
> ij> create table t(x int);
> 0 rows inserted/updated/deleted
> ij> alter table t add column """" int default 42;
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
> Issue the 'help' command for general information on IJ command syntax.
> Any unrecognized commands are treated as potential SQL commands and executed directly.
> Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
> ij> rollback;
> ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.
> The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.
> Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Assigned] (DERBY-5161) Cannot rollback after syntax error in internal statement

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen reassigned DERBY-5161:
-----------------------------------------

    Assignee: Knut Anders Hatlen

> Cannot rollback after syntax error in internal statement
> --------------------------------------------------------
>
>                 Key: DERBY-5161
>                 URL: https://issues.apache.org/jira/browse/DERBY-5161
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: finally.diff
>
>
> To reproduce, execute the statements below in ij. Can only be reproduced this way before DERBY-5157. I don't know how to reproduce it when that bug is fixed.
> ij version 10.7
> ij> connect 'jdbc:derby:db;create=true';
> ij> autocommit off;
> ij> create table t(x int);
> 0 rows inserted/updated/deleted
> ij> alter table t add column """" int default 42;
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 22.
> Issue the 'help' command for general information on IJ command syntax.
> Any unrecognized commands are treated as potential SQL commands and executed directly.
> Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
> ij> rollback;
> ERROR X0Y67: Cannot issue rollback in a nested connection when there is a pending operation in the parent connection.
> The error message implies that we've called rollback() on a nested transaction, whereas we're in fact called it on the parent transaction.
> Expected result: The rollback statement should abort the transaction without raising any errors.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira