You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2015/04/22 01:29:42 UTC
phoenix git commit: PHOENIX-1682 PhoenixRuntime.getTable() does not
work with case-sensitive table names (Ivan Weiss)
Repository: phoenix
Updated Branches:
refs/heads/master 572fa3c65 -> ed7d0e978
PHOENIX-1682 PhoenixRuntime.getTable() does not work with case-sensitive table names (Ivan Weiss)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/ed7d0e97
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/ed7d0e97
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/ed7d0e97
Branch: refs/heads/master
Commit: ed7d0e978ecc46dec7fd2ae1eb99a32de9c8c32a
Parents: 572fa3c
Author: James Taylor <jt...@salesforce.com>
Authored: Tue Apr 21 16:28:02 2015 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Tue Apr 21 16:28:02 2015 -0700
----------------------------------------------------------------------
.../org/apache/phoenix/util/PhoenixRuntime.java | 8 ++-
.../apache/phoenix/util/PhoenixRuntimeTest.java | 75 ++++++++++++++++++++
2 files changed, 82 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/ed7d0e97/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java b/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
index b2736aa..8eaeefb 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
@@ -309,11 +309,17 @@ public class PhoenixRuntime {
};
}
+ /**
+ *
+ * @param conn
+ * @param name requires a pre-normalized table name or a pre-normalized schema and table name
+ * @return
+ * @throws SQLException
+ */
public static PTable getTable(Connection conn, String name) throws SQLException {
PTable table = null;
PhoenixConnection pconn = conn.unwrap(PhoenixConnection.class);
try {
- name = SchemaUtil.normalizeIdentifier(name);
table = pconn.getMetaDataCache().getTable(new PTableKey(pconn.getTenantId(), name));
} catch (TableNotFoundException e) {
String schemaName = SchemaUtil.getSchemaNameFromFullName(name);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/ed7d0e97/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java b/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
index c1f3244..b6465c3 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
@@ -28,6 +28,7 @@ import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
+import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.List;
@@ -39,6 +40,7 @@ import org.apache.phoenix.compile.QueryPlan;
import org.apache.phoenix.expression.Expression;
import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
import org.apache.phoenix.query.BaseConnectionlessQueryTest;
+import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.TableNotFoundException;
import org.apache.phoenix.schema.types.PDataType;
import org.junit.Test;
@@ -213,4 +215,77 @@ public class PhoenixRuntimeTest extends BaseConnectionlessQueryTest {
// Expected
}
}
+
+ @Test
+ public void testTableNameWithoutSchema() throws Exception {
+ String tableName = "tableName";
+ String tableNameNormalized = tableName.toUpperCase();
+
+ getTableTester(tableNameNormalized, tableName);
+ }
+
+ @Test
+ public void testTableNameWithSchema() throws Exception {
+ String tableName = "tableName";
+ String schemaName = "schemaName";
+ String fullName = schemaName + "." + tableName;
+ String fullNameNormalized = fullName.toUpperCase();
+
+ getTableTester(fullNameNormalized, fullName);
+ }
+
+ @Test
+ public void testCaseSensitiveTableNameWithoutSchema() throws Exception {
+ String caseSensitiveTableName = "tableName";
+
+ getTableTester(caseSensitiveTableName, quoteString(caseSensitiveTableName));
+ }
+
+ @Test
+ public void testCaseSensitiveTableNameWithSchema() throws Exception {
+ String caseSensitiveTableName = "tableName";
+ String schemaName = "schemaName";
+ String fullNameNormalized = schemaName.toUpperCase() + "." + caseSensitiveTableName;
+ String fullNameQuoted = schemaName + "." + quoteString(caseSensitiveTableName);
+
+ getTableTester(fullNameNormalized, fullNameQuoted);
+ }
+
+ @Test
+ public void testCaseSensitiveTableNameWithCaseSensitiveSchema() throws Exception {
+ String caseSensitiveTableName = "tableName";
+ String caseSensitiveSchemaName = "schemaName";
+ String fullName = caseSensitiveSchemaName + "." + caseSensitiveTableName;
+ String fullNameQuoted = quoteString(caseSensitiveSchemaName) + "." + quoteString(caseSensitiveTableName);
+
+ getTableTester(fullName, fullNameQuoted);
+ }
+
+ @Test
+ public void testCaseSensitiveTableNameWithCaseSensitiveSchemaWithPeriod() throws Exception {
+ String caseSensitiveTableName = "tableName";
+ String caseSensitiveSchemaName = "schema.Name";
+ String fullName = caseSensitiveSchemaName + "." + caseSensitiveTableName;
+ String fullNameQuoted = quoteString(caseSensitiveSchemaName) + "." + quoteString(caseSensitiveTableName);
+
+ getTableTester(fullName, fullNameQuoted);
+ }
+
+ private void getTableTester(String normalizedName, String sqlStatementName) throws SQLException {
+ Connection conn = DriverManager.getConnection(getUrl());
+ try {
+ conn.createStatement().execute("CREATE TABLE " + sqlStatementName + " (k VARCHAR PRIMARY KEY)");
+ PTable aTable = PhoenixRuntime.getTable(conn, normalizedName);
+ assertNotNull(aTable);
+ } finally {
+ if (null != conn) {
+ conn.createStatement().execute("DROP TABLE IF EXISTS " + sqlStatementName);
+ }
+ }
+ }
+
+ private String quoteString(String string) {
+ return "\"" + string + "\"";
+ }
+
}