Repository: phoenix Updated Branches: refs/heads/3.0 d9e58958a -> d3f01f3b2
PHOENIX-1368 Persist link from VIEW back to its child VIEW Conflicts: phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/d3f01f3b Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/d3f01f3b Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/d3f01f3b Branch: refs/heads/3.0 Commit: d3f01f3b2d2772bdd56ac5876e7b6b86aaa8dd43 Parents: d9e5895 Author: James Taylor <jtay...@salesforce.com> Authored: Sun Oct 19 23:46:39 2014 -0700 Committer: James Taylor <jtay...@salesforce.com> Committed: Sun Oct 19 23:52:49 2014 -0700 ---------------------------------------------------------------------- .../coprocessor/MetaDataEndpointImpl.java | 2 -- .../phoenix/jdbc/PhoenixDatabaseMetaData.java | 4 ++++ .../apache/phoenix/schema/MetaDataClient.java | 22 ++++++++++++++++++++ .../java/org/apache/phoenix/schema/PTable.java | 6 +++++- 4 files changed, 31 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/d3f01f3b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java index 0f6fa27..f7c0aae 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java @@ -452,8 +452,6 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met addIndexToTable(tenantId, schemaName, famName, tableName, clientTimeStamp, indexes); } else if (linkType == LinkType.PHYSICAL_TABLE) { physicalTables.add(famName); - } else { - logger.warn("Unknown link type: " + colKv.getBuffer()[colKv.getValueOffset()] + " for " + SchemaUtil.getTableName(schemaName.getString(), tableName.getString())); } } else { addColumnToTable(results, colName, famName, colKeyValues, columns, saltBucketNum != null); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d3f01f3b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java index 852bbb1..f0b709c 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java @@ -248,6 +248,10 @@ public class PhoenixDatabaseMetaData implements DatabaseMetaData, org.apache.pho public static final byte[] MAX_KEY_BYTES = Bytes.toBytes(MAX_KEY); public static final String LAST_STATS_UPDATE_TIME = "LAST_STATS_UPDATE_TIME"; public static final byte[] LAST_STATS_UPDATE_TIME_BYTES = Bytes.toBytes(LAST_STATS_UPDATE_TIME); + + public static final String PARENT_TENANT_ID = "PARENT_TENANT_ID"; + public static final byte[] PARENT_TENANT_ID_BYTES = Bytes.toBytes(PARENT_TENANT_ID); + private final PhoenixConnection connection; private final ResultSet emptyResultSet; http://git-wip-us.apache.org/repos/asf/phoenix/blob/d3f01f3b/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 3941e17..5ce2f93 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 @@ -41,6 +41,7 @@ import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LINK_TYPE; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.MULTI_TENANT; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NULLABLE; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ORDINAL_POSITION; +import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PARENT_TENANT_ID; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHYSICAL_NAME; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PK_NAME; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.REGION_NAME; @@ -174,6 +175,15 @@ public class MetaDataClient { COLUMN_FAMILY + "," + LINK_TYPE + ") VALUES (?, ?, ?, ?, ?)"; + private static final String CREATE_VIEW_LINK = + "UPSERT INTO " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_CATALOG_TABLE + "\"( " + + TENANT_ID + "," + + TABLE_SCHEM + "," + + TABLE_NAME + "," + + COLUMN_FAMILY + "," + + LINK_TYPE + "," + + PARENT_TENANT_ID + " " + PDataType.VARCHAR.getSqlTypeName() + // Dynamic column for now to prevent schema change + ") VALUES (?, ?, ?, ?, ?, ?)"; private static final String INCREMENT_SEQ_NUM = "UPSERT INTO " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_CATALOG_TABLE + "\"( " + TENANT_ID + "," + @@ -1111,6 +1121,18 @@ public class MetaDataClient { columns = newArrayListWithExpectedSize(allColumns.size() + colDefs.size()); columns.addAll(allColumns); pkColumns = newLinkedHashSet(parent.getPKColumns()); + + // Add row linking from view to its parent table + // FIXME: not currently used, but see PHOENIX-1367 + // as fixing that will require it's usage. + PreparedStatement linkStatement = connection.prepareStatement(CREATE_VIEW_LINK); + linkStatement.setString(1, connection.getTenantId() == null ? null : connection.getTenantId().getString()); + linkStatement.setString(2, schemaName); + linkStatement.setString(3, tableName); + linkStatement.setString(4, parent.getName().getString()); + linkStatement.setByte(5, LinkType.PARENT_TABLE.getSerializedValue()); + linkStatement.setString(6, parent.getTenantId() == null ? null : parent.getTenantId().getString()); + linkStatement.execute(); } } else { columns = newArrayListWithExpectedSize(colDefs.size()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d3f01f3b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java index 01e766d..acb6d1f 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java @@ -89,7 +89,11 @@ public interface PTable extends Writable { /** * Link from a view to its physical table */ - PHYSICAL_TABLE((byte)2); + PHYSICAL_TABLE((byte)2), + /** + * Link from a view to its parent table + */ + PARENT_TABLE((byte)3); private final byte[] byteValue; private final byte serializedValue;