[
https://issues.apache.org/jira/browse/DERBY-728?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tiago R. Espinha updated DERBY-728:
-----------------------------------
Attachment: DERBY_728_p2_sanity.diff
DERBY_728_p3.diff
I'm attaching two patches to this issue.
The first, DERBY_728_p2_sanity.diff aims at fixing an issue with sanity. I was
making calls to the SanityManager without a check to verify that the DEBUG was
enabled. A question that remains open is: what do we do with the exception on a
sane build? Is it ok to muffle it and only deal with it on insane mode?
The second patch, DERBY_728_p3.diff, should in principle enable UTF-8 support
in the server. I'm not sure I've missed something but I'll post a short
explanation of what I've done:
- CodePoint.java
Inserted the new code point for UNICODEMGR (0x1C08) as per the ACR and added it
to the MGR_CODEPOINTS array.
--
- NetworkServerControlImpl.java
Set the minimum manager level for the UNICODEMGR in synch with the
MGR_CODEPOINTS array.
--
- AppRequester.java
Set the minimum manager level for the UNICODEMGR in synch with the
MGR_CODEPOINTS array.
Also added a convenience method that tells us whether the AppRequester depicted
by this class supports or not UTF8. This relies on the manager level for
UNICODEMGR being greater or equal to 1208. If the requester does not support
UTF8, we won't get a UNICODEMGR manager level on the EXCSAT and as such
UNICODEMGR will be set to 0 (which means this convenience method will return
false).
--
- DRDAConnThread.java
When dealing with the ACCSEC code point and after we send the ACCSECRD reply we
check whether the appRequester supports UTF8 and if it does, we enable it
through the switchToUtf8() method [also part of the patch]. If it doesn't, make
sure it goes back to EBCDIC, to make sure we aren't in UTF8 from the previous
connection.
--
I'm not sure how I'd go about testing this as a client would have to support
UTF-8 as well to be able to test it and this is still just the server side
implementation. It will be a good test though to see if all regressions pass
tonight; tomorrow, provided that this patch seems to be ok, I will do testing
with older clients and see what the outcome is.
> Unable to create databases whose name containg Chinese characters through the
> client driver
> -------------------------------------------------------------------------------------------
>
> Key: DERBY-728
> URL: https://issues.apache.org/jira/browse/DERBY-728
> Project: Derby
> Issue Type: Bug
> Components: Network Client
> Affects Versions: 10.1.2.1
> Environment: Debian unstable, LInux 2.6.14.2, libc 2.3.5-6
> Reporter: Andrei Badea
> Assignee: Tiago R. Espinha
> Attachments: ACR7007.pdf, BigTableName.java,
> derby-728-startingpoint.diff, DERBY-728_p1.diff, DERBY-728_p2-test.diff,
> DERBY-728_p2-test.diff, DERBY-728_p2-test.diff, DERBY-728_p2-test.diff,
> DERBY-728_p2.diff, DERBY-728_p2.diff, DERBY-728_p2.diff, DERBY-728_p2.diff,
> derby-728_proto_diff.txt, DERBY_728_p2_sanity.diff, DERBY_728_p3.diff
>
>
> Trying to create a database with the following URL (note the Chinese
> character in the database name):
> jdbc:derby://localhost:1527/\u4e10;create=true
> throws the following exception:
> -----%<-----
> Exception in thread "main" org.apache.derby.client.am.SqlException: Unicode
> string can't convert to Ebcdic string
> at
> org.apache.derby.client.net.EbcdicCcsidManager.convertFromUCS2(Unknown Source)
> at
> org.apache.derby.client.net.Request.writeScalarPaddedString(Unknown Source)
> at
> org.apache.derby.client.net.NetConnectionRequest.buildRDBNAM(Unknown Source)
> at
> org.apache.derby.client.net.NetConnectionRequest.buildACCSEC(Unknown Source)
> at
> org.apache.derby.client.net.NetConnectionRequest.writeAccessSecurity(Unknown
> Source)
> at
> org.apache.derby.client.net.NetConnection.writeServerAttributesAndKeyExchange(Unknown
> Source)
> at
> org.apache.derby.client.net.NetConnection.flowServerAttributesAndKeyExchange(Unknown
> Source)
> at
> org.apache.derby.client.net.NetConnection.flowUSRIDONLconnect(Unknown Source)
> at org.apache.derby.client.net.NetConnection.flowConnect(Unknown
> Source)
> at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
> at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
> at java.sql.DriverManager.getConnection(DriverManager.java:525)
> at java.sql.DriverManager.getConnection(DriverManager.java:193)
> at jdbctest.Main.main(Main.java:33)
> -----%<-----
> It's possible, however, to create databases using the embedded driver, using
> an URL like:
> jdbc:derby:\u4e10;create=true
> Tested with both 10.1.1.0 and 10.1.2.1 with the same result.
> Complete code to reproduce the bug:
> -----%<-----
> public static void main(String[] args) throws Exception {
> Class.forName("org.apache.derby.jdbc.ClientDriver");
> Connection conn =
> DriverManager.getConnection("jdbc:derby://localhost:1527/\u4e10;create=true");
> }
> -----%<-----
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.