Github user JamesRTaylor commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/303#discussion_r200207388
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
---
@@ -2573,307 +2897,139 @@ else if (pkCount <= COLUMN_NAME_INDEX
return new
MetaDataMutationResult(MutationCode.UNALLOWED_TABLE_MUTATION,
EnvironmentEdgeManager.currentTimeMillis(), basePhysicalTable);
}
- ColumnOrdinalPositionUpdateList ordinalPositionList = new
ColumnOrdinalPositionUpdateList();
+ //add the new columns to the child view
List<PColumn> viewPkCols = new
ArrayList<>(view.getPKColumns());
boolean addingExistingPkCol = false;
- int numCols = view.getColumns().size();
- // add the new columns to the child view
- for (PutWithOrdinalPosition p : columnPutsForBaseTable) {
- Put baseTableColumnPut = p.put;
+ for (Put columnToBeAdded : columnPutsForBaseTable) {
PColumn existingViewColumn = null;
byte[][] rkmd = new byte[5][];
- getVarChars(baseTableColumnPut.getRow(), rkmd);
+ getVarChars(columnToBeAdded.getRow(), rkmd);
String columnName =
Bytes.toString(rkmd[COLUMN_NAME_INDEX]);
- String columnFamily = rkmd[FAMILY_NAME_INDEX] == null ?
null : Bytes.toString(rkmd[FAMILY_NAME_INDEX]);
+ String columnFamily =
+ rkmd[FAMILY_NAME_INDEX] == null ? null
+ : Bytes.toString(rkmd[FAMILY_NAME_INDEX]);
try {
- existingViewColumn = columnFamily == null ?
view.getColumnForColumnName(columnName) : view.getColumnFamily(
-
columnFamily).getPColumnForColumnName(columnName);
+ existingViewColumn =
+ columnFamily == null ?
view.getColumnForColumnName(columnName)
+ : view.getColumnFamily(columnFamily)
+
.getPColumnForColumnName(columnName);
} catch (ColumnFamilyNotFoundException e) {
- // ignore since it means that the column family is not
present for the column to be added.
+ // ignore since it means that the column family is not
present for the column to
+ // be added.
} catch (ColumnNotFoundException e) {
// ignore since it means the column is not present in
the view
}
-
- boolean isPkCol = columnFamily == null;
- byte[] columnKey = getColumnKey(viewKey, columnName,
columnFamily);
+
+ boolean isColumnToBeAddPkCol = columnFamily == null;
if (existingViewColumn != null) {
- MetaDataMutationResult result =
validateColumnForAddToBaseTable(existingViewColumn, baseTableColumnPut,
basePhysicalTable, isPkCol, view);
- if (result != null) {
- return result;
+ if
(EncodedColumnsUtil.usesEncodedColumnNames(basePhysicalTable)
+ && !SchemaUtil.isPKColumn(existingViewColumn))
{
--- End diff --
Is there a race condition with this check and would the be covered by one
of the future JIRAs you mentioned?
---