This is an automated email from the ASF dual-hosted git repository.
elserj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite-avatica.git
The following commit(s) were added to refs/heads/master by this push:
new fa8c9bd [CALCITE-2704] Multilingual decoded problem (DonnyZone)
fa8c9bd is described below
commit fa8c9bd94c9de48dbfb644b2154f5689ea01fca1
Author: wellfengzhu <[email protected]>
AuthorDate: Fri Jan 17 13:52:31 2020 +0800
[CALCITE-2704] Multilingual decoded problem (DonnyZone)
Closes #119
Signed-off-by: Josh Elser <[email protected]>
---
.../calcite/avatica/server/AvaticaJsonHandler.java | 10 +++++++---
.../apache/calcite/avatica/remote/RemoteMetaTest.java | 18 ++++++++++++++++++
2 files changed, 25 insertions(+), 3 deletions(-)
diff --git
a/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
b/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
index 094f7b2..94bee6a 100644
---
a/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
+++
b/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
@@ -105,14 +105,18 @@ public class AvaticaJsonHandler extends
AbstractAvaticaHandler {
// Avoid a new buffer creation for every HTTP request
final UnsynchronizedBuffer buffer = threadLocalBuffer.get();
try (ServletInputStream inputStream = request.getInputStream()) {
- rawRequest = AvaticaUtils.readFully(inputStream, buffer);
+ byte[] bytes = AvaticaUtils.readFullyToBytes(inputStream, buffer);
+ String encoding = request.getCharacterEncoding();
+ if (encoding == null) {
+ encoding = "UTF-8";
+ }
+ rawRequest = new String(bytes, encoding);
} finally {
// Reset the offset into the buffer after we're done
buffer.reset();
}
}
- final String jsonRequest =
- new String(rawRequest.getBytes("ISO-8859-1"), "UTF-8");
+ final String jsonRequest = rawRequest;
LOG.trace("request: {}", jsonRequest);
HandlerResponse<String> jsonResponse;
diff --git
a/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
b/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
index 2a1fe80..c35e5a1 100644
--- a/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
+++ b/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
@@ -716,6 +716,24 @@ public class RemoteMetaTest {
assertEquals(props, originalProps);
}
}
+
+ @Test public void testUnicodeCharacters() throws Exception {
+ ConnectionSpec.getDatabaseLock().lock();
+ try (AvaticaConnection conn = (AvaticaConnection)
DriverManager.getConnection(url)) {
+ final AvaticaStatement statement = conn.createStatement();
+ ResultSet rs = statement.executeQuery(
+ "select * from (values ('您好', 'こんにちは', '안녕하세요'))");
+ assertThat(rs.next(), is(true));
+ assertEquals("您好", rs.getString(1));
+ assertEquals("こんにちは", rs.getString(2));
+ assertEquals("안녕하세요", rs.getString(3));
+ rs.close();
+ statement.close();
+ conn.close();
+ } finally {
+ ConnectionSpec.getDatabaseLock().unlock();
+ }
+ }
}
// End RemoteMetaTest.java