[
https://issues.apache.org/jira/browse/PHOENIX-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Samarth Jain updated PHOENIX-1409:
----------------------------------
Attachment: PHOENIX-1409-v6.patch
Good catches [~aliciashu]. I have added more test cases around the following
two issues that you discovered:
1) Setting property wasn't working correctly when the table had only PK columns
(i.e. PTable.getColumnFamilies() returns empty)
2) ALTER TABLE T ADD CF.COL SET IN_MEMORY should only set the property only for
column family CF and not all the column families for the the table.
Your change for 1) though would not have worked when there was an explicit
default column family specified for the table. See
testSetHColumnPropertyForTableWithOnlyPKCols.
I also removed the need for tracking new column families separately (which was
added as part of my v3 patch).
{code}
+ if (existingColumnFamilies.isEmpty() &&
newColumnFamiliesToBeAdded.isEmpty() && !commonFamilyProps.isEmpty()) {
+
allFamiliesProps.put(QueryConstants.DEFAULT_COLUMN_FAMILY, commonFamilyProps);
+ }
{code}
is now :
{code}
if (table.getColumnFamilies().isEmpty() && columnDefs.size() == 0 &&
!commonFamilyProps.isEmpty()) {
allFamiliesProps.put(Bytes.toString(table.getDefaultFamilyName() == null ?
QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES :
table.getDefaultFamilyName().getBytes() ), commonFamilyProps);
}
{code}
I noticed that for other tests there was some overlap between the tests you and
I wrote. I merged our test cases and removed the ones that were testing the
same thing.
Also, a few of your tests were catching exceptions when they shouldn't be. For
ex:
{code}
+ @Test
+ public void testMultipleProperties() throws Exception {
+ Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+ Connection conn = DriverManager.getConnection(getUrl(), props);
+ conn.setAutoCommit(false);
+
+ try {
+ conn.createStatement()
+ .execute(
+ "CREATE TABLE test_multi_table "
+ + " (a_string varchar
not null, col1 integer, cf1.col2 integer, col3 integer , cf2.col4 integer "
+ + " CONSTRAINT pk
PRIMARY KEY (a_string)) immutable_rows=true , SALT_BUCKETS=3 ");
+
+ String ddl = "Alter table test_multi_table set
COMPACTION_ENABLED=TRUE, IMMUTABLE_ROWS=false";
+ conn.createStatement().execute(ddl);
+
+ try (HBaseAdmin admin =
conn.unwrap(PhoenixConnection.class).getQueryServices().getAdmin()) {
+ HTableDescriptor tableDesc =
admin.getTableDescriptor(Bytes.toBytes("TEST_MULTI_TABLE"));
+ assertTrue(tableDesc.isCompactionEnabled());
+ HColumnDescriptor[] columnFamilies =
tableDesc.getColumnFamilies();
+ assertEquals(3, columnFamilies.length);
+ assertEquals("0",
columnFamilies[0].getNameAsString());
+ assertEquals("CF1",
columnFamilies[1].getNameAsString());
+ assertEquals("CF2",
columnFamilies[2].getNameAsString());
+ assertImmutableRows(conn,"TEST_MULTI_TABLE",
false);
+ } catch (SQLException e) {
+
assertEquals(SQLExceptionCode.COLUMN_FAMILY_NOT_ALLOWED_TABLE_PROPERTY.getErrorCode(),
e.getErrorCode());
+ }
+ } finally {
+ conn.close();
+ }
+ }
{code}
You shouldn't be catching that SQLException. In fact, the exception code you
are looking for will never be thrown by the code in the try-with-resources
block.
As part of this patch I also made the change of disallowing setting table level
properties when you are adding columns. This includes TTL as well.
So now ALTER TABLE ADD COL SET COMPACTION_ENABLED=false fails. And so does
ALTER TABLE ADD COL SET TTL=1000.
[~jamestaylor] - please review.
> Allow ALTER TABLE <table> SET command to update HTableDescriptor and
> HColumnDescriptor properties
> -------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-1409
> URL: https://issues.apache.org/jira/browse/PHOENIX-1409
> Project: Phoenix
> Issue Type: Improvement
> Affects Versions: 4.2
> Reporter: James Taylor
> Assignee: Alicia Ying Shu
> Attachments: PHOENIX-1409-v3.patch, PHOENIX-1409-v6.patch,
> Phoenix-1409-v1.patch, Phoenix-1409-v4-2.patch, Phoenix-1409-v4.patch,
> Phoenix-1409-v5.patch, Phoenix-1409.patch, WIP.patch, phoenix-1409-v2.patch
>
>
> Once PHOENIX-1408 is fixed, we should allow HTableDescriptor and
> HColumnDescriptor properties through the ALTER TABLE <table> SET command.
> It'd just be a matter of passing these properties through the existing
> methods, as we support this for CREATE TABLE.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)