[ 
http://issues.apache.org/jira/browse/DERBY-180?page=comments#action_66053 ]
     
Dyre Tjeldvoll commented on DERBY-180:
--------------------------------------

Yes the messageId was truncated. I think you will get the correct message, 
because the full messageId is stored in the 
Exception object. getSQLState() will only return a string made up of the first 
5 characters. getMessageId() (not a part of 
SQLException, but found in EmbedSQLException) will return the full string, 
including ".S".

I haven't figured out how ij finds the string to print, but by modifying 
SimpleApp.java (renamed Try.java) to trigger your exception you can see the 
that the full string is in the exception thrwon:

 [EMAIL PROTECTED]/java$ java -classpath $(find-jars.sh ~/derbyjars):. Try
Try starting in embedded mode.
Loaded the appropriate driver.
Connected to and created database derbyDB
Created table derbyDB
Inserted 1956 Webster
Inserted 1910 Union
Updated 1956 Webster to 180 Grand
Updated 180 Grand to 300 Lakeshore
Verified the rows
 Venturing into unknown territory...
exception thrown:
SQL Exception: The requested function can not reference tables in SESSION 
schema.
SQLState: XCL47 MessageId: XCL478.S
--> note the difference between SQLState and MessageId

ERROR XCL47: The requested function can not reference tables in SESSION schema.
--> This looks very much like the string printed by ij, but I don't know if 
printStackTrace and ij use a common function --> for this
 
       at 
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:301)
        at 
org.apache.derby.impl.sql.compile.CreateViewNode.bindViewDefinition(CreateViewNode.java:281)
        at 
org.apache.derby.impl.sql.compile.CreateViewNode.bind(CreateViewNode.java:184)
        at 
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:332)
        at 
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:107)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:688)
        at 
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:501)
        at 
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:475)
        at Try.go(Try.java:162)
        at Try.main(Try.java:64)
null
Try finished

I think you're right about the MessageId for XCL478 being too long. I tried to 
use svn blame to see when this was done
(and perhaps why), but it looks like this was inherited from Cloudscape. From 
what I could see, there are only about 50 other XCLxx messages, so it should be 
easy to find a unique id. 

Of course, changing error codes/ids is dangerous, since you risk breaking 
existing client code that relies on the old (incorrect) behavior. Maybe some of 
the Derby/Cloudscape gurus can shed some more light on this?



> XCL47 SQLState duplicated in messages_en.properties?
> ----------------------------------------------------
>
>          Key: DERBY-180
>          URL: http://issues.apache.org/jira/browse/DERBY-180
>      Project: Derby
>         Type: Bug
>   Components: SQL
>     Versions: 10.0.2.0
>  Environment: Windows XP SP1 Professional
>     Reporter: George Baklarz
>     Priority: Minor

>
> In the messages_en.properties file, there are two items that are similar:
> XCL47.S=Use of ''{0}'' requires database to be upgraded from version {1} to 
> version {2} or later.
> XCL478.S=The requested function can not reference tables in SESSION schema.
> SQLSTATEs are supposed to be 5 characters long. When I issue a CREATE VIEW on 
> a SESSION table, I receive the proper error message:
> ij> declare global temporary table x (a int) not logged;
> 0 rows inserted/updated/deleted
> ij> create view z as (select * from session.x);
> ERROR XCL47: The requested function can not reference tables in SESSION 
> schema.
> So, was XCL478 truncated to XCL47? Does this mean that if I tried to do 
> something that invokes the other version of XCL47 that I will get the wrong 
> message? I suspect one of the message numbers needs to be changed and that 
> the SQL error be fixed to be 5 characters long instead of 6.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to