db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mamta A. Satoor (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-5750) Sending an empty string as table name to compress table procedure or empty string as index name to update statistics procedure makes the parser throw an exception.
Date Fri, 22 Jun 2012 00:27:43 GMT

    [ https://issues.apache.org/jira/browse/DERBY-5750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13399026#comment-13399026
] 

Mamta A. Satoor commented on DERBY-5750:
----------------------------------------

Knut, thanks for reviewing the patch. Thanks for catching the isEmpty() usage. I have changed
that in my codeline to instead use length() to determine if we are dealing with empty name.

As for schema name, I did intentionally make the change to use the current schema, but we
can determine if that is the right thing to do or not. While going through existing procedures,
I have found that we have 2 flavors of procedures when it comes to dealing with empty or null
schema name.

For instance, when '' is passed for the schema name, SYSCS_UTIL.SYSCS_EXPORT_TABLE uses curent
schema, syscs_util.SYSCS_INPLACE_COMPRESS_TABLE gives error schema '' does not exist. Top
of the trunk(without my changes in the patch attached here) syscs_util.SYSCS_UPDATE_STATISTICS
gives parser error(because we pass the schema name as '').  
-- uses current schema
call SYSCS_UTIL.SYSCS_EXPORT_TABLE ('', 'T1' , 't11.del' , null, null, null);
-- gives parser error - Caused by: java.sql.SQLException: Syntax error: Encountered "\"" at
line 1, column 13.
call syscs_util.SYSCS_UPDATE_STATISTICS( '', 'T1', '' ); 
-- Caused by: ERROR 42Y07: Schema '' does not exist
call syscs_util.SYSCS_INPLACE_COMPRESS_TABLE( '', 'T1', 1,1,1 ); 

When null is passed for the schema name, SYSCS_UTIL.SYSCS_EXPORT_TABLE uses curent schema,
syscs_util.SYSCS_INPLACE_COMPRESS_TABLE gives error schema null doesn't exist, and top of
the trunk, syscs_util.SYSCS_UPDATE_STATISTICS gives null pointer exception
-- uses current schema
call SYSCS_UTIL.SYSCS_EXPORT_TABLE (null, 'T1' , 't111.del' , null, null, null);
-- gives null pointer exception
call syscs_util.SYSCS_UPDATE_STATISTICS( null, 'T1', '' ); 
-- schema null doesn't exist - Caused by: ERROR 42Y07: Schema 'null' does not exist
call syscs_util.SYSCS_INPLACE_COMPRESS_TABLE( null, 'T1', 1,1,1 ); 

So, we can have either of the two behaviors for SYSCS_UTIL.SYSCS_EXPORT_TABLE and '' or null
for schema name 
1)Use current schema or
2)Give parsing error (we internally generate ALTER TABLE sql here and parser will throw error
before ALTER TABLE can throw exception for invalid schema name)

No matter what we decide, we definitely need to take care of null pointer exception when null
is passed for schema name.
                
> Sending an empty string as table name to compress table procedure or empty string as
index name to update statistics procedure makes the parser throw an exception.
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5750
>                 URL: https://issues.apache.org/jira/browse/DERBY-5750
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.9.1.0
>            Reporter: Mamta A. Satoor
>            Assignee: Mamta A. Satoor
>            Priority: Minor
>         Attachments: DERBY5750_patch1_diff.txt
>
>
> When empty string is passed for the index name to the update statistics procedure, it
throws following exception(passing an empty string for table to compress table procedure also
gives simiar exception). The new stored procedure being created through DERBY-4115 for dropping
the statistics also gave similar exception
> java -Dij.exceptionTrace=true org.apache.derby.tools.ij
> connect 'jdbc:derby:db1;create=true'; 
> create table t1(c11 int, statistics int not null);
> call syscs_util.SYSCS_UPDATE_STATISTICS( 'APP', 'T1', '' );
> ERROR 38000: The exception 'java.sql.SQLException: Syntax error: Encountered "\"" at
line 1, column 42.' was thrown while evaluating an expression.
> java.sql.SQLException: The exception 'java.sql.SQLException: Syntax error: Encountered
"\"" at line 1, column 42.' was thrown while evaluating an expression.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:98)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:142)
>         at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:278)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:431)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>         at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2360)
>         at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
>         at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1334)
>         at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:630)
>         at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:559)
>         at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:367)
>         at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:527)
>         at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:369)
>         at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:245)
>         at org.apache.derby.impl.tools.ij.Main.go(Main.java:229)
>         at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:184)
>         at org.apache.derby.impl.tools.ij.Main.main(Main.java:75)
>         at org.apache.derby.tools.ij.main(ij.java:59)
> Caused by: java.sql.SQLException: The exception 'java.sql.SQLException: Syntax error:
Encountered "\"" at line 1, column 42.' was thrown while evaluating an expression.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:42)
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory40.java:122)
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:71)
>         ... 17 more
> Caused by: java.sql.SQLException: Syntax error: Encountered "\"" at line 1, column 42.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:42)
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory40.java:122)
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:71)
>         at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:256)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:424)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>         at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2360)
>         at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:153)
>         at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Driver40.java:107)
>         at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:1685)
>         at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:1513)
>         at org.apache.derby.catalog.SystemProcedures.SYSCS_UPDATE_STATISTICS(SystemProcedures.java:753)
>         at org.apache.derby.exe.acace4c0a3x0137x2f19xcc22x00000013e5704.g0(Unknown Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
>         at java.lang.reflect.Method.invoke(Method.java:611)
>         at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(ReflectMethod.java:46)
>         at org.apache.derby.impl.sql.execute.CallStatementResultSet.open(CallStatementResultSet.java:75)
>         at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:443)
>         at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:324)
>         at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242)
>         ... 10 more
> Caused by: ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 42.
>         at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:278)
>         at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(ParserImpl.java:153)
>         at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:357)
>         at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:99)
>         at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:1103)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:134)
>         ... 24 more
> ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 42.
> java.sql.SQLSyntaxErrorException: Syntax error: Encountered "\"" at line 1, column 42.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:92)
>         at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:256)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:424)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>         at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2360)
>         at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:153)
>         at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Driver40.java:107)
>         at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:1685)
>         at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:1513)
>         at org.apache.derby.catalog.SystemProcedures.SYSCS_UPDATE_STATISTICS(SystemProcedures.java:753)
>         at org.apache.derby.exe.acace4c0a3x0137x2f19xcc22x00000013e5704.g0(Unknown Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
>         at java.lang.reflect.Method.invoke(Method.java:611)
>         at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(ReflectMethod.java:46)
>         at org.apache.derby.impl.sql.execute.CallStatementResultSet.open(CallStatementResultSet.java:75)
>         at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:443)
>         at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:324)
>         at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242)
>         at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:630)
>         at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:559)
>         at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:367)
>         at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:527)
>         at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:369)
>         at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:245)
>         at org.apache.derby.impl.tools.ij.Main.go(Main.java:229)
>         at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:184)
>         at org.apache.derby.impl.tools.ij.Main.main(Main.java:75)
>         at org.apache.derby.tools.ij.main(ij.java:59)
> Caused by: java.sql.SQLException: Syntax error: Encountered "\"" at line 1, column 42.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:42)
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory40.java:122)
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:71)
>         ... 30 more
> Caused by: ERROR 42X01: Syntax error: Encountered "\"" at line 1, column 42.
>         at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:278)
>         at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(ParserImpl.java:153)
>         at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:357)
>         at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:99)
>         at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:1103)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:134)
>         ... 24 more
> 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>

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message