diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index 2c85877..b8abd18 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -502,6 +502,27 @@ public void testPrepareStatement() { } + @Test + public void testSlashPreparedStatement() { + // Test for value that contains a '\' + + String sql = "select count(1) from " + + tableName + + " where 1=? AND 2=? AND 3=?"; + try { + PreparedStatement ps = con.prepareStatement(sql); + + ps.setString(1, "testslash \\"); + ps.setString(2, "two"); + ps.setString(3, "three"); + + ps.executeQuery(); + } catch (Exception e) { + e.printStackTrace(); + fail(e.toString()); + } + } + private PreparedStatement createPreapredStatementUsingSetObject(String sql) throws SQLException { PreparedStatement ps = con.prepareStatement(sql); diff --git a/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java b/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java index 8a0671f..54f265c 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java @@ -694,6 +694,7 @@ public void setShort(int parameterIndex, short x) throws SQLException { */ public void setString(int parameterIndex, String x) throws SQLException { + x=x.replace("\\", "\\\\"); x=x.replace("'", "\\'"); this.parameters.put(parameterIndex,"'"+x+"'"); }