You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by an...@apache.org on 2016/04/19 16:54:22 UTC
[1/2] phoenix git commit: PHOENIX-2838 Support case sensitive
identifier for drop schema and use schema constructs
Repository: phoenix
Updated Branches:
refs/heads/master a31b70179 -> d26b4eb0f
PHOENIX-2838 Support case sensitive identifier for drop schema and use schema constructs
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/12779572
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/12779572
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/12779572
Branch: refs/heads/master
Commit: 12779572c5dcfb1ab610fa6bdd258e4503c7e2ca
Parents: a31b701
Author: Ankit Singhal <an...@gmail.com>
Authored: Tue Apr 19 20:23:22 2016 +0530
Committer: Ankit Singhal <an...@gmail.com>
Committed: Tue Apr 19 20:23:22 2016 +0530
----------------------------------------------------------------------
.../apache/phoenix/end2end/DropSchemaIT.java | 37 ++++++++++++++------
.../end2end/QueryDatabaseMetaDataIT.java | 3 ++
.../org/apache/phoenix/end2end/UseSchemaIT.java | 23 ++++++++----
.../apache/phoenix/jdbc/PhoenixConnection.java | 7 ++--
.../apache/phoenix/schema/MetaDataClient.java | 7 ++--
5 files changed, 54 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/12779572/phoenix-core/src/it/java/org/apache/phoenix/end2end/DropSchemaIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DropSchemaIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DropSchemaIT.java
index 665c0a8..c3c1d65 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DropSchemaIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DropSchemaIT.java
@@ -24,6 +24,8 @@ import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Properties;
import org.apache.hadoop.hbase.NamespaceDescriptor;
@@ -34,17 +36,33 @@ import org.apache.phoenix.exception.SQLExceptionCode;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.schema.SchemaNotFoundException;
import org.apache.phoenix.util.PhoenixRuntime;
+import org.apache.phoenix.util.SchemaUtil;
import org.apache.phoenix.util.TestUtil;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class DropSchemaIT extends BaseClientManagedTimeIT {
+ private String schema;
+
+ public DropSchemaIT(String schema) {
+ this.schema = schema;
+ }
+
+ @Parameters(name = "schema = {0}")
+ public static Collection<String> data() {
+ return Arrays.asList("TEST_SCHEMA", "\"test_schema\"");
+ }
@Test
public void testDropSchema() throws Exception {
long ts = nextTimestamp();
- String schema = "TEST_SCHEMA";
+
String tableName = "TEST";
Properties props = new Properties();
+ String normalizeSchemaIdentifier = SchemaUtil.normalizeIdentifier(schema);
String ddl = "DROP SCHEMA " + schema;
props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts));
props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(true));
@@ -66,7 +84,7 @@ public class DropSchemaIT extends BaseClientManagedTimeIT {
e.printStackTrace();
assertEquals(e.getErrorCode(), SQLExceptionCode.CANNOT_MUTATE_SCHEMA.getErrorCode());
}
- assertNotNull(admin.getNamespaceDescriptor(schema));
+ assertNotNull(admin.getNamespaceDescriptor(normalizeSchemaIdentifier));
}
props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts - 20));
try (Connection conn = DriverManager.getConnection(getUrl(), props);) {
@@ -75,20 +93,20 @@ public class DropSchemaIT extends BaseClientManagedTimeIT {
} catch (SchemaNotFoundException e) {
// expected
}
- assertNotNull(admin.getNamespaceDescriptor(schema));
+ assertNotNull(admin.getNamespaceDescriptor(normalizeSchemaIdentifier));
props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40));
try (Connection conn = DriverManager.getConnection(getUrl(), props);) {
conn.createStatement().execute("DROP TABLE " + schema + "." + tableName);
- //Dropping table manually because Drop_meta_attrib is not working
- admin.disableTable(TableName.valueOf(schema, tableName));
- admin.deleteTable(TableName.valueOf(schema, tableName));
+ // Dropping table manually because Drop_meta_attrib is not working
+ admin.disableTable(TableName.valueOf(normalizeSchemaIdentifier, tableName));
+ admin.deleteTable(TableName.valueOf(normalizeSchemaIdentifier, tableName));
}
props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 50));
try (Connection conn = DriverManager.getConnection(getUrl(), props);) {
conn.createStatement().execute(ddl);
try {
- admin.getNamespaceDescriptor(schema);
+ admin.getNamespaceDescriptor(normalizeSchemaIdentifier);
fail();
} catch (NamespaceNotFoundException ne) {
// expected
@@ -100,11 +118,10 @@ public class DropSchemaIT extends BaseClientManagedTimeIT {
}
props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 70));
try (Connection conn = DriverManager.getConnection(getUrl(), props);) {
- admin.createNamespace(NamespaceDescriptor.create(schema).build());
+ admin.createNamespace(NamespaceDescriptor.create(normalizeSchemaIdentifier).build());
conn.createStatement().execute("DROP SCHEMA IF EXISTS " + schema);
- assertNotNull(admin.getNamespaceDescriptor(schema));
+ assertNotNull(admin.getNamespaceDescriptor(normalizeSchemaIdentifier));
}
admin.close();
}
-
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/12779572/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryDatabaseMetaDataIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryDatabaseMetaDataIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryDatabaseMetaDataIT.java
index f62bf0f..62b7306 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryDatabaseMetaDataIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryDatabaseMetaDataIT.java
@@ -175,9 +175,12 @@ public class QueryDatabaseMetaDataIT extends BaseClientManagedTimeIT {
@Test
public void testSchemaMetadataScan() throws SQLException {
Properties props = new Properties();
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(1));
props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(true));
Connection conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute("CREATE SCHEMA " + CUSTOM_ENTITY_DATA_SCHEMA_NAME);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(2));
+ conn = DriverManager.getConnection(getUrl(), props);
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs;
rs = dbmd.getSchemas(null, CUSTOM_ENTITY_DATA_SCHEMA_NAME);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/12779572/phoenix-core/src/it/java/org/apache/phoenix/end2end/UseSchemaIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UseSchemaIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UseSchemaIT.java
index f202750..cec23ed 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UseSchemaIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UseSchemaIT.java
@@ -44,16 +44,25 @@ import org.junit.Test;
public class UseSchemaIT extends BaseHBaseManagedTimeIT {
@Test
- public void testUseSchema() throws Exception {
+ public void testUseSchemaCaseInsensitive() throws Exception {
+ testUseSchema("TEST_SCHEMA");
+ }
+
+ @Test
+ public void testUseSchemaCaseSensitive() throws Exception {
+ testUseSchema("\"test_schema\"");
+ }
+
+ public void testUseSchema(String schema) throws Exception {
Properties props = new Properties();
props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(true));
Connection conn = DriverManager.getConnection(getUrl(), props);
- String ddl = "CREATE SCHEMA IF NOT EXISTS TEST_SCHEMA";
+ String ddl = "CREATE SCHEMA IF NOT EXISTS "+schema;
conn.createStatement().execute(ddl);
- ddl = "create table test_schema.test(id varchar primary key)";
+ ddl = "create table "+schema+".TEST(id varchar primary key)";
conn.createStatement().execute(ddl);
- conn.createStatement().execute("use test_schema");
- String query = "select count(*) from test";
+ conn.createStatement().execute("use "+schema);
+ String query = "select count(*) from TEST";
ResultSet rs = conn.createStatement().executeQuery(query);
assertTrue(rs.next());
assertEquals(0, rs.getInt(1));
@@ -64,11 +73,11 @@ public class UseSchemaIT extends BaseHBaseManagedTimeIT {
assertEquals(SQLExceptionCode.SCHEMA_NOT_FOUND.getErrorCode(), e.getErrorCode());
}
conn.createStatement().execute("use default");
- ddl = "create table IF NOT EXISTS test(schema_name varchar primary key)";
+ ddl = "create table IF NOT EXISTS TEST(schema_name varchar primary key)";
conn.createStatement().execute(ddl);
conn.createStatement().executeUpdate("upsert into test values('"+SchemaUtil.SCHEMA_FOR_DEFAULT_NAMESPACE+"')");
conn.commit();
- rs = conn.createStatement().executeQuery("select schema_name from test");
+ rs = conn.createStatement().executeQuery("select schema_name from TEST");
assertTrue(rs.next());
assertEquals(SchemaUtil.SCHEMA_FOR_DEFAULT_NAMESPACE, rs.getString(1));
conn.close();
http://git-wip-us.apache.org/repos/asf/phoenix/blob/12779572/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
index 69ce035..b205da4 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
@@ -110,8 +110,7 @@ import org.apache.phoenix.util.PropertiesUtil;
import org.apache.phoenix.util.ReadOnlyProps;
import org.apache.phoenix.util.SQLCloseable;
import org.apache.phoenix.util.SQLCloseables;
-
-import co.cask.tephra.TransactionContext;
+import org.apache.phoenix.util.SchemaUtil;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
@@ -120,6 +119,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.Lists;
+import co.cask.tephra.TransactionContext;
+
/**
*
@@ -868,7 +869,7 @@ public class PhoenixConnection implements Connection, MetaDataMutated, SQLClosea
@Override
public String getSchema() throws SQLException {
- return this.schema;
+ return SchemaUtil.normalizeIdentifier(this.schema);
}
public PSchema getSchema(PTableKey key) throws SchemaNotFoundException {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/12779572/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
index ad161fa..ac40554 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
@@ -3464,7 +3464,8 @@ public class MetaDataClient {
connection.rollback();
boolean wasAutoCommit = connection.getAutoCommit();
try {
- String schemaName = executableDropSchemaStatement.getSchemaName();
+ PSchema schema = new PSchema(executableDropSchemaStatement.getSchemaName());
+ String schemaName = schema.getSchemaName();
boolean ifExists = executableDropSchemaStatement.ifExists();
byte[] key = SchemaUtil.getSchemaKey(schemaName);
@@ -3475,7 +3476,7 @@ public class MetaDataClient {
schemaMetaData.add(schemaDelete);
MetaDataMutationResult result = connection.getQueryServices().dropSchema(schemaMetaData, schemaName);
MutationCode code = result.getMutationCode();
- PSchema schema = result.getSchema();
+ schema = result.getSchema();
switch (code) {
case SCHEMA_NOT_FOUND:
if (!ifExists) { throw new SchemaNotFoundException(schemaName); }
@@ -3503,7 +3504,7 @@ public class MetaDataClient {
} else {
PSchema schema = FromCompiler.getResolverForSchema(useSchemaStatement, connection)
.resolveSchema(useSchemaStatement.getSchemaName());
- connection.setSchema(schema.getSchemaName());
+ connection.setSchema(useSchemaStatement.getSchemaName());
}
return new MutationState(0, connection);
}
[2/2] phoenix git commit: PHOENIX-2841 UDF not working with sort
merge join
Posted by an...@apache.org.
PHOENIX-2841 UDF not working with sort merge join
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/d26b4eb0
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/d26b4eb0
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/d26b4eb0
Branch: refs/heads/master
Commit: d26b4eb0fd7aa5187a4163c7c21d46cc4c360059
Parents: 1277957
Author: Ankit Singhal <an...@gmail.com>
Authored: Tue Apr 19 20:24:03 2016 +0530
Committer: Ankit Singhal <an...@gmail.com>
Committed: Tue Apr 19 20:24:03 2016 +0530
----------------------------------------------------------------------
.../phoenix/end2end/UserDefinedFunctionsIT.java | 58 ++++++++++++++++++++
.../apache/phoenix/compile/QueryCompiler.java | 4 +-
.../java/org/apache/phoenix/query/BaseTest.java | 2 +-
3 files changed, 60 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d26b4eb0/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
index 4eee422..27c9e47 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
@@ -24,9 +24,12 @@ import static org.apache.phoenix.util.PhoenixRuntime.JDBC_PROTOCOL;
import static org.apache.phoenix.util.PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR;
import static org.apache.phoenix.util.PhoenixRuntime.JDBC_PROTOCOL_TERMINATOR;
import static org.apache.phoenix.util.PhoenixRuntime.PHOENIX_TEST_DRIVER_URL_PARAM;
+import static org.apache.phoenix.util.TestUtil.JOIN_ITEM_TABLE_FULL_NAME;
+import static org.apache.phoenix.util.TestUtil.JOIN_SUPPLIER_TABLE_FULL_NAME;
import static org.apache.phoenix.util.TestUtil.LOCALHOST;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -785,6 +788,61 @@ public class UserDefinedFunctionsIT extends BaseOwnClusterIT{
}
@Test
+ public void testUdfWithJoin() throws Exception {
+ String query = "SELECT /*+ USE_SORT_MERGE_JOIN*/ item.\"item_id\", item.name, supp.\"supplier_id\", myreverse8(supp.name) FROM "
+ + JOIN_SUPPLIER_TABLE_FULL_NAME + " supp RIGHT JOIN " + JOIN_ITEM_TABLE_FULL_NAME
+ + " item ON myreverse8(item.\"supplier_id\") = myreverse8(supp.\"supplier_id\") ORDER BY \"item_id\"";
+ Connection conn = driver.connect(url, EMPTY_PROPS);
+ initJoinTableValues(url, null, null);
+ conn.createStatement().execute(
+ "create function myreverse8(VARCHAR) returns VARCHAR as 'org.apache.phoenix.end2end.MyReverse' using jar "
+ + "'" + util.getConfiguration().get(DYNAMIC_JARS_DIR_KEY) + "/myjar1.jar" + "'");
+ try {
+ PreparedStatement statement = conn.prepareStatement(query);
+ ResultSet rs = statement.executeQuery();
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "0000000001");
+ assertEquals(rs.getString(2), "T1");
+ assertEquals(rs.getString(3), "0000000001");
+ assertEquals(rs.getString(4), "1S");
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "0000000002");
+ assertEquals(rs.getString(2), "T2");
+ assertEquals(rs.getString(3), "0000000001");
+ assertEquals(rs.getString(4), "1S");
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "0000000003");
+ assertEquals(rs.getString(2), "T3");
+ assertEquals(rs.getString(3), "0000000002");
+ assertEquals(rs.getString(4), "2S");
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "0000000004");
+ assertEquals(rs.getString(2), "T4");
+ assertEquals(rs.getString(3), "0000000002");
+ assertEquals(rs.getString(4), "2S");
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "0000000005");
+ assertEquals(rs.getString(2), "T5");
+ assertEquals(rs.getString(3), "0000000005");
+ assertEquals(rs.getString(4), "5S");
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "0000000006");
+ assertEquals(rs.getString(2), "T6");
+ assertEquals(rs.getString(3), "0000000006");
+ assertEquals(rs.getString(4), "6S");
+ assertTrue(rs.next());
+ assertEquals(rs.getString(1), "invalid001");
+ assertEquals(rs.getString(2), "INVALID-1");
+ assertNull(rs.getString(3));
+ assertNull(rs.getString(4));
+
+ assertFalse(rs.next());
+ } finally {
+ conn.close();
+ }
+ }
+
+ @Test
public void testReplaceFunction() throws Exception {
Connection conn = driver.connect(url, EMPTY_PROPS);
Statement stmt = conn.createStatement();
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d26b4eb0/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
index 1cded94..82c9731 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
@@ -21,7 +21,6 @@ import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
import java.util.Set;
@@ -64,7 +63,6 @@ import org.apache.phoenix.parse.SQLParser;
import org.apache.phoenix.parse.SelectStatement;
import org.apache.phoenix.parse.SubqueryParseNode;
import org.apache.phoenix.parse.TableNode;
-import org.apache.phoenix.parse.UDFParseNode;
import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.schema.AmbiguousColumnException;
import org.apache.phoenix.schema.ColumnNotFoundException;
@@ -435,7 +433,7 @@ public class QueryCompiler {
int fieldPosition = needsMerge ? lhsProjTable.getColumns().size() - lhsProjTable.getPKColumns().size() : 0;
PTable projectedTable = needsMerge ? JoinCompiler.joinProjectedTables(lhsProjTable, rhsProjTable, type == JoinType.Right ? JoinType.Left : type) : lhsProjTable;
- ColumnResolver resolver = FromCompiler.getResolverForProjectedTable(projectedTable, context.getConnection(), new HashMap<String,UDFParseNode>(1));
+ ColumnResolver resolver = FromCompiler.getResolverForProjectedTable(projectedTable, context.getConnection(), joinTable.getStatement().getUdfParseNodes());
TableRef tableRef = resolver.getTables().get(0);
StatementContext subCtx = new StatementContext(statement, resolver, ScanUtil.newScan(originalScan), new SequenceManager(statement));
subCtx.setCurrentTable(tableRef);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/d26b4eb0/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
index bbe8422..c3e54ea 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
@@ -1506,7 +1506,7 @@ public abstract class BaseTest {
if (ts != null) {
props.setProperty(CURRENT_SCN_ATTRIB, ts.toString());
}
- Connection conn = DriverManager.getConnection(getUrl(), props);
+ Connection conn = DriverManager.getConnection(url, props);
try {
conn.createStatement().execute("CREATE SEQUENCE my.seq");
// Insert into customer table