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

Reply via email to