Return-Path: X-Original-To: apmail-db-derby-dev-archive@www.apache.org Delivered-To: apmail-db-derby-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A71599735 for ; Fri, 22 Jun 2012 00:27:43 +0000 (UTC) Received: (qmail 60975 invoked by uid 500); 22 Jun 2012 00:27:43 -0000 Delivered-To: apmail-db-derby-dev-archive@db.apache.org Received: (qmail 60930 invoked by uid 500); 22 Jun 2012 00:27:43 -0000 Mailing-List: contact derby-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: Delivered-To: mailing list derby-dev@db.apache.org Received: (qmail 60746 invoked by uid 99); 22 Jun 2012 00:27:43 -0000 Received: from issues-vm.apache.org (HELO issues-vm) (140.211.11.160) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Jun 2012 00:27:43 +0000 Received: from isssues-vm.apache.org (localhost [127.0.0.1]) by issues-vm (Postfix) with ESMTP id 281431416E9 for ; Fri, 22 Jun 2012 00:27:43 +0000 (UTC) Date: Fri, 22 Jun 2012 00:27:43 +0000 (UTC) From: "Mamta A. Satoor (JIRA)" To: derby-dev@db.apache.org Message-ID: <2015179982.42182.1340324863166.JavaMail.jiratomcat@issues-vm> In-Reply-To: <1046607568.42375.1336535833197.JavaMail.tomcat@hel.zones.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. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ 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.(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.(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.(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.(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