From 9219504fd8d0c899f72ecd35cb0b47e19f2a2fef Mon Sep 17 00:00:00 2001 From: Andrew Bayer Date: Fri, 22 Jul 2011 20:04:30 +0000 Subject: [PATCH] SQOOP-166. Postgresql identifiers should be quoted (James Grant via Arvind Prabhakar) From: Arvind Prabhakar git-svn-id: https://svn.apache.org/repos/asf/incubator/sqoop/trunk@1150017 13f79535-47bb-0310-9956-ffa450edef68 --- .../sqoop/manager/PostgresqlManager.java | 17 ++++++++++++ .../sqoop/manager/PostgresqlTest.java | 27 ++++++++++--------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/java/com/cloudera/sqoop/manager/PostgresqlManager.java b/src/java/com/cloudera/sqoop/manager/PostgresqlManager.java index 06a3088d..c4410235 100644 --- a/src/java/com/cloudera/sqoop/manager/PostgresqlManager.java +++ b/src/java/com/cloudera/sqoop/manager/PostgresqlManager.java @@ -50,6 +50,23 @@ protected PostgresqlManager(final SqoopOptions opts, boolean ignored) { super(DRIVER_CLASS, opts); } + @Override + public String escapeColName(String colName) { + return escapeIdentifier(colName); + } + + @Override + public String escapeTableName(String tableName) { + return escapeIdentifier(tableName); + } + + protected String escapeIdentifier(String identifier) { + if (identifier == null) { + return null; + } + return "\"" + identifier.replace("\"", "\"\"") + "\""; + } + @Override public void close() throws SQLException { if (this.hasOpenConnection()) { diff --git a/src/test/com/cloudera/sqoop/manager/PostgresqlTest.java b/src/test/com/cloudera/sqoop/manager/PostgresqlTest.java index 0e27e70d..eef196d3 100644 --- a/src/test/com/cloudera/sqoop/manager/PostgresqlTest.java +++ b/src/test/com/cloudera/sqoop/manager/PostgresqlTest.java @@ -121,7 +121,7 @@ public void setUp() { // Try to remove the table first. DROP TABLE IF EXISTS didn't // get added until pg 8.3, so we just use "DROP TABLE" and ignore // any exception here if one occurs. - st.executeUpdate("DROP TABLE " + TABLE_NAME); + st.executeUpdate("DROP TABLE " + manager.escapeTableName(TABLE_NAME)); } catch (SQLException e) { LOG.info("Couldn't drop table " + TABLE_NAME + " (ok)"); LOG.info(e.toString()); @@ -129,19 +129,20 @@ public void setUp() { connection.rollback(); } - st.executeUpdate("CREATE TABLE " + TABLE_NAME + " (" - + "id INT NOT NULL PRIMARY KEY, " - + "name VARCHAR(24) NOT NULL, " - + "start_date DATE, " - + "salary FLOAT, " - + "dept VARCHAR(32))"); + st.executeUpdate("CREATE TABLE " + manager.escapeTableName(TABLE_NAME) + + " (" + + manager.escapeColName("id") + " INT NOT NULL PRIMARY KEY, " + + manager.escapeColName("name") + " VARCHAR(24) NOT NULL, " + + manager.escapeColName("start_date") + " DATE, " + + manager.escapeColName("salary") + " FLOAT, " + + manager.escapeColName("dept") + " VARCHAR(32))"); - st.executeUpdate("INSERT INTO " + TABLE_NAME + " VALUES(" - + "1,'Aaron','2009-05-14',1000000.00,'engineering')"); - st.executeUpdate("INSERT INTO " + TABLE_NAME + " VALUES(" - + "2,'Bob','2009-04-20',400.00,'sales')"); - st.executeUpdate("INSERT INTO " + TABLE_NAME + " VALUES(" - + "3,'Fred','2009-01-23',15.00,'marketing')"); + st.executeUpdate("INSERT INTO " + manager.escapeTableName(TABLE_NAME) + + " VALUES(1,'Aaron','2009-05-14',1000000.00,'engineering')"); + st.executeUpdate("INSERT INTO " + manager.escapeTableName(TABLE_NAME) + + " VALUES(2,'Bob','2009-04-20',400.00,'sales')"); + st.executeUpdate("INSERT INTO " + manager.escapeTableName(TABLE_NAME) + + " VALUES(3,'Fred','2009-01-23',15.00,'marketing')"); connection.commit(); } catch (SQLException sqlE) { LOG.error("Encountered SQL Exception: " + sqlE);