[
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