This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to tag REL9_3_1103 in repository libpostgresql-jdbc-java.
commit 86994e0147df9fe5a9d3d6c5a9d01799bdebfbc8 Author: Alexis Meneses <[email protected]> Date: Thu Dec 4 21:33:57 2014 +0100 Unescape/unquote result of getSchema (cherry picked from commit f97294a37e19ab1776ac60768ba335950c0fcaad) Conflicts: org/postgresql/jdbc4/AbstractJdbc4Connection.java --- org/postgresql/jdbc4/AbstractJdbc4Connection.java | 27 ++++++++++++++++++----- org/postgresql/test/jdbc4/jdbc41/SchemaTest.java | 27 +++++++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/org/postgresql/jdbc4/AbstractJdbc4Connection.java b/org/postgresql/jdbc4/AbstractJdbc4Connection.java index 2f0cdf5..f0ed27c 100644 --- a/org/postgresql/jdbc4/AbstractJdbc4Connection.java +++ b/org/postgresql/jdbc4/AbstractJdbc4Connection.java @@ -13,6 +13,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Properties; import java.util.concurrent.Executor; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.postgresql.core.Oid; import org.postgresql.core.Utils; @@ -25,6 +27,11 @@ import org.postgresql.jdbc2.AbstractJdbc2Array; abstract class AbstractJdbc4Connection extends org.postgresql.jdbc3g.AbstractJdbc3gConnection { + /** + * Pattern used to unquote the result of {@link #getSchema()} + */ + private static final Pattern PATTERN_GET_SCHEMA = Pattern.compile("^\\\"(.*)\\\"(?!\\\")"); + private final Properties _clientInfo; public AbstractJdbc4Connection(HostSpec[] hostSpecs, String user, String database, Properties info, String url) throws SQLException { @@ -255,15 +262,25 @@ abstract class AbstractJdbc4Connection extends org.postgresql.jdbc3g.AbstractJdb stmt.close(); } - // keep only the first schema of the search path if there are many - int commaIndex = searchPath.indexOf(','); - if (commaIndex == -1) + if (searchPath.startsWith("\"")) { - return searchPath; + // unquote the result if it's a quoted string + Matcher matcher = PATTERN_GET_SCHEMA.matcher(searchPath); + matcher.find(); + return matcher.group(1).replaceAll("\"\"", "\""); } else { - return searchPath.substring(0, commaIndex); + // keep only the first schema of the search path if there are many + int commaIndex = searchPath.indexOf(','); + if (commaIndex == -1) + { + return searchPath; + } + else + { + return searchPath.substring(0, commaIndex); + } } } diff --git a/org/postgresql/test/jdbc4/jdbc41/SchemaTest.java b/org/postgresql/test/jdbc4/jdbc41/SchemaTest.java index 4a544ee..dea4679 100644 --- a/org/postgresql/test/jdbc4/jdbc41/SchemaTest.java +++ b/org/postgresql/test/jdbc4/jdbc41/SchemaTest.java @@ -34,6 +34,7 @@ public class SchemaTest extends TestCase stmt.execute("CREATE SCHEMA \"schema 3\""); stmt.execute("CREATE SCHEMA \"schema \"\"4\""); stmt.execute("CREATE SCHEMA \"schema '5\""); + stmt.execute("CREATE SCHEMA \"schema ,6\""); stmt.execute("CREATE SCHEMA \"UpperCase\""); TestUtil.createTable(_conn, "schema1.table1", "id integer"); TestUtil.createTable(_conn, "schema2.table2", "id integer"); @@ -49,6 +50,7 @@ public class SchemaTest extends TestCase stmt.execute("DROP SCHEMA \"schema 3\" CASCADE"); stmt.execute("DROP SCHEMA \"schema \"\"4\" CASCADE"); stmt.execute("DROP SCHEMA \"schema '5\" CASCADE"); + stmt.execute("DROP SCHEMA \"schema ,6\""); stmt.execute("DROP SCHEMA \"UpperCase\" CASCADE"); TestUtil.closeDB(_conn); } @@ -63,13 +65,13 @@ public class SchemaTest extends TestCase _conn.setSchema("schema2"); assertEquals("schema2", _conn.getSchema()); _conn.setSchema("schema 3"); - assertEquals("\"schema 3\"", _conn.getSchema()); + assertEquals("schema 3", _conn.getSchema()); _conn.setSchema("schema \"4"); - assertEquals("\"schema \"\"4\"", _conn.getSchema()); + assertEquals("schema \"4", _conn.getSchema()); _conn.setSchema("schema '5"); - assertEquals("\"schema '5\"", _conn.getSchema()); + assertEquals("schema '5", _conn.getSchema()); _conn.setSchema("UpperCase"); - assertEquals("\"UpperCase\"", _conn.getSchema()); + assertEquals("UpperCase", _conn.getSchema()); } /** @@ -162,6 +164,23 @@ public class SchemaTest extends TestCase } } assertEquals("schema1", _conn.getSchema()); + + stmt = _conn.createStatement(); + try + { + stmt.execute("SET search_path TO \"schema ,6\",schema2"); + } + finally + { + try + { + stmt.close(); + } + catch (SQLException e) + { + } + } + assertEquals("schema ,6", _conn.getSchema()); } public void testSchemaInProperties() throws Exception -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

