http://git-wip-us.apache.org/repos/asf/phoenix/blob/a6c1aa45/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
index a267629..361edf2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
@@ -90,7 +90,8 @@ public class PColumnImpl implements PColumn {
         }
     }
 
-    // a derived column has null type
+    // a excluded column (a column that was derived from a parent but that has 
been deleted) is
+    // denoted by a column that has a null type
     public static PColumnImpl createExcludedColumn(PName familyName, PName 
columnName, Long timestamp) {
         return new PColumnImpl(familyName, columnName, timestamp);
     }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/a6c1aa45/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 1623175..8cbf757 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
@@ -549,6 +549,12 @@ public interface PTable extends PMetaDataEntity {
      * @return a list of all columns
      */
     List<PColumn> getColumns();
+    
+    /**
+     * Get all excluded columns 
+     * @return a list of excluded columns
+     */
+    List<PColumn> getExcludedColumns();
 
     /**
      * @return A list of the column families of this table

http://git-wip-us.apache.org/repos/asf/phoenix/blob/a6c1aa45/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
index 8d57945..9f06e04 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
@@ -115,6 +115,8 @@ public class PTableImpl implements PTable {
     // Have MultiMap for String->PColumn (may need family qualifier)
     private List<PColumn> pkColumns;
     private List<PColumn> allColumns;
+    // columns that were inherited from a parent table but that were dropped 
in the view
+    private List<PColumn> excludedColumns;
     private List<PColumnFamily> families;
     private Map<byte[], PColumnFamily> familyByBytes;
     private Map<String, PColumnFamily> familyByString;
@@ -217,8 +219,8 @@ public class PTableImpl implements PTable {
     
     // For indexes stored in shared physical tables
     public PTableImpl(PName tenantId, PName schemaName, PName tableName, long 
timestamp, List<PColumnFamily> families, 
-            List<PColumn> columns, List<PName> physicalNames,PDataType 
viewIndexType, Long viewIndexId, boolean multiTenant, boolean isNamespaceMpped, 
ImmutableStorageScheme storageScheme, QualifierEncodingScheme 
qualifierEncodingScheme,
-            EncodedCQCounter encodedCQCounter, Boolean 
useStatsForParallelization) throws SQLException {
+            List<PColumn> columns, List<PName> physicalNames, PDataType 
viewIndexType, Long viewIndexId, boolean multiTenant, boolean isNamespaceMpped, 
ImmutableStorageScheme storageScheme, QualifierEncodingScheme 
qualifierEncodingScheme,
+            EncodedCQCounter encodedCQCounter, Boolean 
useStatsForParallelization, Integer bucketNum) throws SQLException {
         this.pkColumns = this.allColumns = Collections.emptyList();
         this.rowKeySchema = RowKeySchema.EMPTY_SCHEMA;
         this.indexes = Collections.emptyList();
@@ -229,10 +231,14 @@ public class PTableImpl implements PTable {
             familyByString.put(family.getName().getString(), family);
         }
         this.families = families;
+        if (bucketNum!=null) {
+            columns = columns.subList(1, columns.size());
+        }
         init(tenantId, this.schemaName, this.tableName, PTableType.INDEX, 
state, timeStamp, sequenceNumber, pkName, bucketNum, columns,
             this.schemaName, parentTableName, indexes, isImmutableRows, 
physicalNames, defaultFamilyName,
             null, disableWAL, multiTenant, storeNulls, viewType, 
viewIndexType, viewIndexId, indexType, baseColumnCount, rowKeyOrderOptimizable,
-            transactionProvider, updateCacheFrequency, indexDisableTimestamp, 
isNamespaceMpped, null, false, storageScheme, qualifierEncodingScheme, 
encodedCQCounter, useStatsForParallelization);
+            transactionProvider, updateCacheFrequency, indexDisableTimestamp, 
isNamespaceMpped, null,
+            false, storageScheme, qualifierEncodingScheme, encodedCQCounter, 
useStatsForParallelization, null);
     }
 
     public PTableImpl(long timeStamp) { // For delete marker
@@ -288,7 +294,7 @@ public class PTableImpl implements PTable {
     /**
      * Used to create a PTable for views or view indexes, the basePTable is 
for attributes we inherit from the physical table
      */
-    public static PTableImpl makePTable(PTable view, PTable baseTable, 
Collection<PColumn> columns, long timestamp, int baseTableColumnCount) throws 
SQLException {
+    public static PTableImpl makePTable(PTable view, PTable baseTable, 
Collection<PColumn> columns, long timestamp, int baseTableColumnCount, 
Collection<PColumn> excludedColumns) throws SQLException {
         // if a TableProperty is not valid on a view we set it to the base 
table value
         // if a TableProperty is valid on a view and is not mutable on a view 
we set it to the base table value
         // if a TableProperty is valid on a view and is mutable on a view we 
use the value set on the view 
@@ -300,7 +306,7 @@ public class PTableImpl implements PTable {
             view.getViewIndexType(), view.getViewIndexId(), 
view.getIndexType(),
             baseTableColumnCount, view.rowKeyOrderOptimizable(), 
baseTable.getTransactionProvider(), view.getUpdateCacheFrequency(),
             view.getIndexDisableTimestamp(), view.isNamespaceMapped(), 
baseTable.getAutoPartitionSeqName(), baseTable.isAppendOnlySchema(),
-            baseTable.getImmutableStorageScheme(), 
baseTable.getEncodingScheme(), view.getEncodedCQCounter(), 
view.useStatsForParallelization());
+            baseTable.getImmutableStorageScheme(), 
baseTable.getEncodingScheme(), view.getEncodedCQCounter(), 
view.useStatsForParallelization(), excludedColumns);
     }
     
     public static PTableImpl makePTable(PTable table, PTableType type, 
Collection<PColumn> columns) throws SQLException {
@@ -356,7 +362,7 @@ public class PTableImpl implements PTable {
                 indexType, QueryConstants.BASE_TABLE_BASE_COLUMN_COUNT, 
rowKeyOrderOptimizable, transactionProvider,
                 updateCacheFrequency, indexDisableTimestamp, 
isNamespaceMapped, autoPartitionSeqName,
                 isAppendOnlySchema, storageScheme, qualifierEncodingScheme, 
encodedCQCounter,
-                useStatsForParallelization);
+                useStatsForParallelization, null);
     }
 
     public static PTableImpl makePTable(PName tenantId, PName schemaName, 
PName tableName, PTableType type,
@@ -374,7 +380,7 @@ public class PTableImpl implements PTable {
                 defaultFamilyName, viewExpression, disableWAL, multiTenant, 
storeNulls, viewType,viewIndexType,  viewIndexId,
                 indexType, baseColumnCount, rowKeyOrderOptimizable, 
transactionProvider, updateCacheFrequency,
                 indexDisableTimestamp, isNamespaceMapped, 
autoPartitionSeqName, isAppendOnlySchema, storageScheme,
-                qualifierEncodingScheme, encodedCQCounter, 
useStatsForParallelization);
+                qualifierEncodingScheme, encodedCQCounter, 
useStatsForParallelization, null);
     }
 
     private PTableImpl(PTable table, boolean rowKeyOrderOptimizable, 
PIndexState state, long timeStamp,
@@ -388,7 +394,7 @@ public class PTableImpl implements PTable {
                 table.getIndexType(), baseTableColumnCount, 
rowKeyOrderOptimizable, table.getTransactionProvider(),
                 updateCacheFrequency, table.getIndexDisableTimestamp(), 
table.isNamespaceMapped(),
                 table.getAutoPartitionSeqName(), table.isAppendOnlySchema(), 
table.getImmutableStorageScheme(),
-                table.getEncodingScheme(), table.getEncodedCQCounter(), 
table.useStatsForParallelization());
+                table.getEncodingScheme(), table.getEncodedCQCounter(), 
table.useStatsForParallelization(), null);
     }
 
     private PTableImpl(PName tenantId, PName schemaName, PName tableName, 
PTableType type, PIndexState state,
@@ -398,12 +404,14 @@ public class PTableImpl implements PTable {
             boolean storeNulls, ViewType viewType, PDataType viewIndexType, 
Long viewIndexId, IndexType indexType,
             int baseColumnCount, boolean rowKeyOrderOptimizable, 
TransactionFactory.Provider transactionProvider, long updateCacheFrequency,
             long indexDisableTimestamp, boolean isNamespaceMapped, String 
autoPartitionSeqName, boolean isAppendOnlySchema, ImmutableStorageScheme 
storageScheme, 
-            QualifierEncodingScheme qualifierEncodingScheme, EncodedCQCounter 
encodedCQCounter, Boolean useStatsForParallelization) throws SQLException {
+            QualifierEncodingScheme qualifierEncodingScheme, EncodedCQCounter 
encodedCQCounter,
+            Boolean useStatsForParallelization, Collection<PColumn> 
excludedColumns)
+            throws SQLException {
         init(tenantId, schemaName, tableName, type, state, timeStamp, 
sequenceNumber, pkName, bucketNum, columns,
                 parentSchemaName, parentTableName, indexes, isImmutableRows, 
physicalNames, defaultFamilyName,
                 viewExpression, disableWAL, multiTenant, storeNulls, viewType, 
viewIndexType, viewIndexId, indexType, baseColumnCount, rowKeyOrderOptimizable,
                 transactionProvider, updateCacheFrequency, 
indexDisableTimestamp, isNamespaceMapped, autoPartitionSeqName, 
isAppendOnlySchema, storageScheme, 
-                qualifierEncodingScheme, encodedCQCounter, 
useStatsForParallelization);
+                qualifierEncodingScheme, encodedCQCounter, 
useStatsForParallelization, excludedColumns);
     }
     
     @Override
@@ -438,7 +446,7 @@ public class PTableImpl implements PTable {
             boolean multiTenant, boolean storeNulls, ViewType 
viewType,PDataType viewIndexType,  Long viewIndexId,
             IndexType indexType , int baseColumnCount, boolean 
rowKeyOrderOptimizable, TransactionFactory.Provider transactionProvider, long 
updateCacheFrequency, long indexDisableTimestamp, 
             boolean isNamespaceMapped, String autoPartitionSeqName, boolean 
isAppendOnlySchema, ImmutableStorageScheme storageScheme, 
QualifierEncodingScheme qualifierEncodingScheme, 
-            EncodedCQCounter encodedCQCounter, Boolean 
useStatsForParallelization) throws SQLException {
+            EncodedCQCounter encodedCQCounter, Boolean 
useStatsForParallelization, Collection<PColumn> excludedColumns) throws 
SQLException {
         Preconditions.checkNotNull(schemaName);
         Preconditions.checkArgument(tenantId==null || 
tenantId.getBytes().length > 0); // tenantId should be null or not empty
         int estimatedSize = SizedUtil.OBJECT_SIZE * 2 + 23 * 
SizedUtil.POINTER_SIZE + 4 * SizedUtil.INT_SIZE + 2 * SizedUtil.LONG_SIZE + 2 * 
SizedUtil.INT_OBJECT_SIZE +
@@ -627,6 +635,7 @@ public class PTableImpl implements PTable {
         this.baseColumnCount = baseColumnCount;
         this.encodedCQCounter = encodedCQCounter;
         this.useStatsForParallelization = useStatsForParallelization;
+        this.excludedColumns = excludedColumns == null ? 
ImmutableList.<PColumn>of() : ImmutableList.copyOf(excludedColumns);
     }
 
     @Override
@@ -1079,6 +1088,11 @@ public class PTableImpl implements PTable {
     public List<PColumn> getColumns() {
         return allColumns;
     }
+    
+    @Override
+    public List<PColumn> getExcludedColumns() {
+        return excludedColumns;
+    }
 
     @Override
     public long getSequenceNumber() {
@@ -1367,7 +1381,7 @@ public class PTableImpl implements PTable {
                         isImmutableRows, physicalNames, defaultFamilyName, 
viewStatement, disableWAL,
                         multiTenant, storeNulls, viewType, viewIndexType, 
viewIndexId, indexType, baseColumnCount, rowKeyOrderOptimizable,
                         transactionProvider, updateCacheFrequency, 
indexDisableTimestamp, isNamespaceMapped, autoParititonSeqName, 
-                        isAppendOnlySchema, storageScheme, 
qualifierEncodingScheme, encodedColumnQualifierCounter, 
useStatsForParallelization);
+                        isAppendOnlySchema, storageScheme, 
qualifierEncodingScheme, encodedColumnQualifierCounter, 
useStatsForParallelization, null);
             return result;
         } catch (SQLException e) {
             throw new RuntimeException(e); // Impossible

Reply via email to