Comment moved from wiki
Hi, Tomohito. I am dealing with the null SQL states in the client driver as part of my work on internationalizing the messages. I think it makes a lot of sense for the SQL states to match between network client and embedded client. I noticed, for instance, test code that did something like:
if ( client driver is embedded )
look for SQL State NNNN
look for SQL State YYYY
This seems silly.
What I am doing (we'll see if people have comments on this) is defining a new severity for exceptions thrown by the network client. Since the exception severity is mapped to the SQLException error code, the application programmer can check the error code to determine if it's a network client exception.
The other way they can distinguish is to see what the instance of the class is. It will be an instance of org.apache.derby.impl.jdbc.EmbedSQLException if it came from the embedded driver, and an instance of org.apache.derby.client.am.SqlException if it comes from the network client.
I think we should keep the SQL states (and the error messages) identical where the error is identical between the network client and the engine.
Also, I would like to recommend that this discussion be moved to or linked to from the JIRA issue around SQL states –