This is an automated email from the ASF dual-hosted git repository. skadam pushed a commit to branch 4.x in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/4.x by this push: new b42a25b PHOENIX-6454: Add feature to SchemaTool to get the DDL in specification (Addendum) (#1233) b42a25b is described below commit b42a25b143e9805554dbbc5ab8dc85a8b3b1be2c Author: Swaroopa Kadam <swaroopa.kada...@gmail.com> AuthorDate: Fri Jun 11 10:15:58 2021 -0700 PHOENIX-6454: Add feature to SchemaTool to get the DDL in specification (Addendum) (#1233) --- .../apache/phoenix/parse/CreateTableStatement.java | 15 +++++++ .../apache/phoenix/parse/PrimaryKeyConstraint.java | 10 ++--- .../phoenix/schema/SchemaToolSynthesisIT.java | 48 ++++++++++++++++------ .../it/resources/synthesis/alter_add_property.sql | 3 +- .../resources/synthesis/alter_change_property.sql | 3 +- .../src/it/resources/synthesis/alter_table_add.sql | 5 ++- ...alter_table_drop.sql => alter_table_add_pk.sql} | 19 ++++----- .../it/resources/synthesis/alter_table_drop.sql | 3 +- .../resources/synthesis/alter_table_multiple.sql | 3 +- .../{alter_table_add.sql => drop_create_table.sql} | 15 ++++++- .../resources/synthesis/mismatched_entity_name.sql | 3 +- .../org/apache/phoenix/schema/SchemaSQLUtil.java | 6 ++- .../phoenix/schema/SchemaSynthesisProcessor.java | 19 ++++++++- 13 files changed, 113 insertions(+), 39 deletions(-) diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java index 62c68a0..fb7186a 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java @@ -60,6 +60,21 @@ public class CreateTableStatement extends MutableStatement { this.immutableRows = createTable.immutableRows; } + public CreateTableStatement(CreateTableStatement createTable, PrimaryKeyConstraint pkConstraint, + List<ColumnDef> columns) { + this.tableName = createTable.tableName; + this.tableType = createTable.tableType; + this.columns = ImmutableList.copyOf(columns); + this.pkConstraint = pkConstraint; + this.splitNodes = createTable.splitNodes; + this.bindCount = createTable.bindCount; + this.props = createTable.props; + this.ifNotExists = createTable.ifNotExists; + this.baseTableName = createTable.baseTableName; + this.whereClause = createTable.whereClause; + this.immutableRows = createTable.immutableRows; + } + public CreateTableStatement(CreateTableStatement createTable, ListMultimap<String,Pair<String,Object>> props, List<ColumnDef> columns) { this.tableName = createTable.tableName; this.tableType = createTable.tableType; diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/PrimaryKeyConstraint.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/PrimaryKeyConstraint.java index eac9996..00d632d 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/parse/PrimaryKeyConstraint.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/PrimaryKeyConstraint.java @@ -36,7 +36,7 @@ public class PrimaryKeyConstraint extends NamedNode { private final Map<ColumnName, Pair<ColumnName, Boolean>> columnNameToRowTimestamp; private final int numColumnsWithRowTimestamp; - PrimaryKeyConstraint(String name, List<ColumnDefInPkConstraint> columnDefs) { + public PrimaryKeyConstraint(String name, List<ColumnDefInPkConstraint> columnDefs) { super(name); if (columnDefs == null) { this.columns = Collections.<Pair<ColumnName, SortOrder>>emptyList(); @@ -95,13 +95,13 @@ public class PrimaryKeyConstraint extends NamedNode { @Override public String toString() { StringBuffer sb = new StringBuffer(); - for(Map.Entry<ColumnName, Pair<ColumnName, SortOrder>> entry : columnNameToSortOrder.entrySet()) { + for (Pair<ColumnName, SortOrder> entry : columns) { if(sb.length()!=0) { sb.append(", "); } - sb.append(entry.getKey()); - if(entry.getValue().getSecond() != SortOrder.getDefault()) { - sb.append(" "+entry.getValue().getSecond()); + sb.append(entry.getFirst()); + if(entry.getSecond() != SortOrder.getDefault()) { + sb.append(" "+entry.getSecond()); } } return sb.toString(); diff --git a/phoenix-tools/src/it/java/org/apache/phoenix/schema/SchemaToolSynthesisIT.java b/phoenix-tools/src/it/java/org/apache/phoenix/schema/SchemaToolSynthesisIT.java index d41e0ea..b44db32 100644 --- a/phoenix-tools/src/it/java/org/apache/phoenix/schema/SchemaToolSynthesisIT.java +++ b/phoenix-tools/src/it/java/org/apache/phoenix/schema/SchemaToolSynthesisIT.java @@ -39,11 +39,11 @@ public class SchemaToolSynthesisIT { // Adding new column RELATED_COMMAND public void testCreateTableStatement_addColumn() throws Exception { String expected = "CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE\n" - + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + "SECOND_ID BIGINT NOT NULL,\n" + "TYPE VARCHAR,\n" + "STATUS VARCHAR,\n" + "START_TIMESTAMP BIGINT,\n" + "END_TIMESTAMP BIGINT,\n" + "PARAMS VARCHAR,\n" + "RESULT VARCHAR,\n" - + "RELATED_COMMAND BIGINT\n" - + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID))\n" + + "RELATED_COMMAND BIGINT DEFAULT 100\n" + + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID))\n" + "VERSIONS=1,MULTI_TENANT=false,REPLICATION_SCOPE=1,TTL=31536000"; String baseDDL = filePath+"/alter_table_add.sql"; runAndVerify(expected, baseDDL); @@ -53,10 +53,10 @@ public class SchemaToolSynthesisIT { // Dropping TYPE column public void testCreateTableStatement_dropColumn() throws Exception { String expected = "CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE\n" - + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + "SECOND_ID BIGINT NOT NULL,\n" + "STATUS VARCHAR,\n" + "START_TIMESTAMP BIGINT,\n" + "END_TIMESTAMP BIGINT,\n" + "PARAMS VARCHAR,\n" + "RESULT VARCHAR\n" - + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID))\n" + + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID))\n" + "VERSIONS=1,MULTI_TENANT=false,REPLICATION_SCOPE=1,TTL=31536000"; String baseDDL = filePath+"/alter_table_drop.sql"; runAndVerify(expected, baseDDL); @@ -66,10 +66,10 @@ public class SchemaToolSynthesisIT { // Changing REPLICATION SCOPE from 1 to 0 public void testCreateTableStatement_changeProperty() throws Exception { String expected = "CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE\n" - + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + "SECOND_ID BIGINT NOT NULL,\n" + "TYPE VARCHAR,\n" + "STATUS VARCHAR,\n" + "START_TIMESTAMP BIGINT,\n" + "END_TIMESTAMP BIGINT,\n" + "PARAMS VARCHAR,\n" + "RESULT VARCHAR\n" - + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID))\n" + + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID))\n" + "MULTI_TENANT=false,REPLICATION_SCOPE=0,TTL=31536000,VERSIONS=1"; String baseDDL = filePath+"/alter_change_property.sql"; runAndVerify(expected, baseDDL); @@ -79,10 +79,10 @@ public class SchemaToolSynthesisIT { // Adding DISABLE_MIGRATION property public void testCreateTableStatement_addProperty() throws Exception { String expected = "CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE\n" - + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + "SECOND_ID BIGINT NOT NULL,\n" + "TYPE VARCHAR,\n" + "STATUS VARCHAR,\n" + "START_TIMESTAMP BIGINT,\n" + "END_TIMESTAMP BIGINT,\n" + "PARAMS VARCHAR,\n" + "RESULT VARCHAR\n" - + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID))\n" + + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID))\n" + "DISABLE_MIGRATION=true,MULTI_TENANT=false,REPLICATION_SCOPE=1,TTL=31536000,VERSIONS=1"; String baseDDL = filePath+"/alter_add_property.sql"; runAndVerify(expected, baseDDL); @@ -96,7 +96,7 @@ public class SchemaToolSynthesisIT { + "SOME_ID CHAR(15) NOT NULL,\n" + "DOUBLE1 DECIMAL(12,3),\n" + "IS_BOOLEAN BOOLEAN,\n" + "RELATE CHAR(15),\n" + "TEXT1 VARCHAR,\n" + "TEXT_READ_ONLY VARCHAR,\n" + "NEW_COLUMN VARCHAR(20)\n" - + "CONSTRAINT PKVIEW PRIMARY KEY (DATE_TIME1 DESC, SOME_ID, INT1))\n" + + "CONSTRAINT PKVIEW PRIMARY KEY (DATE_TIME1 DESC, INT1, SOME_ID))\n" + "AS SELECT * FROM TEST.SAMPLE_TABLE_VIEW WHERE FILTER_PREFIX = 'abc'"; String baseDDL = filePath+"/alter_view_add.sql"; runAndVerify(expected, baseDDL); @@ -109,7 +109,7 @@ public class SchemaToolSynthesisIT { + "(DATE_TIME1 DATE NOT NULL,\n" + "INT1 BIGINT NOT NULL,\n" + "SOME_ID CHAR(15) NOT NULL,\n" + "IS_BOOLEAN BOOLEAN,\n" + "RELATE CHAR(15),\n" + "TEXT1 VARCHAR,\n" + "TEXT_READ_ONLY VARCHAR\n" - + "CONSTRAINT PKVIEW PRIMARY KEY (DATE_TIME1 DESC, SOME_ID, INT1))\n" + + "CONSTRAINT PKVIEW PRIMARY KEY (DATE_TIME1 DESC, INT1, SOME_ID))\n" + "AS SELECT * FROM TEST.SAMPLE_TABLE_VIEW WHERE FILTER_PREFIX = 'abc'"; String baseDDL = filePath+"/alter_view_drop.sql"; runAndVerify(expected, baseDDL); @@ -145,6 +145,28 @@ public class SchemaToolSynthesisIT { @Test // drop table + public void testCreateTableStatement_dropRecreateTable() throws Exception { + String expected = "CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE (\n" + + " ORG_ID CHAR(15) NOT NULL,\n" + " SOME_ANOTHER_ID BIGINT NOT NULL,\n" + + " TYPE VARCHAR,\n" + " STATUS VARCHAR,\n" + " START_TIMESTAMP BIGINT,\n" + + " END_TIMESTAMP BIGINT,\n" + " PARAMS VARCHAR, RESULT VARCHAR\n" + + " CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID)\n" + + ") VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000"; + String baseDDL = filePath+"/drop_create_table.sql"; + runAndVerify(expected, baseDDL); + } + + @Test + // drop table + public void testCreateTableStatement_add_pk() throws Exception { + String expected = "CREATE TABLE IF NOT EXISTS TEST.TABLE_1\n" + "(STATE CHAR(1) NOT NULL,\n" + + "SOME_ID VARCHAR\n" + "CONSTRAINT PK PRIMARY KEY (STATE, SOME_ID))"; + String baseDDL = filePath+"/alter_table_add_pk.sql"; + runAndVerify(expected, baseDDL); + } + + @Test + // drop table public void testCreateIndexStatement_dropIndex() throws Exception { String expected = ""; String baseDDL = filePath+"/drop_index.sql"; @@ -161,11 +183,11 @@ public class SchemaToolSynthesisIT { // Alter DDL file can have multiple alter statements public void testMultipleAlterDDL() throws Exception { String expected = "CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE\n" - + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + + "(ORG_ID CHAR(15) NOT NULL,\n" + "SOME_ANOTHER_ID BIGINT NOT NULL,\n" + "SECOND_ID BIGINT NOT NULL,\n" + "TYPE VARCHAR,\n" + "STATUS VARCHAR,\n" + "START_TIMESTAMP BIGINT,\n" + "END_TIMESTAMP BIGINT,\n" + "PARAMS VARCHAR,\n" + "RESULT VARCHAR,\n" + "SOME_NEW_COLUMN BIGINT\n" - + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID))\n" + + "CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID))\n" + "MULTI_TENANT=false,REPLICATION_SCOPE=1,TTL=2000,VERSIONS=1"; String baseDDL = filePath+"/alter_table_multiple.sql"; runAndVerify(expected, baseDDL); diff --git a/phoenix-tools/src/it/resources/synthesis/alter_add_property.sql b/phoenix-tools/src/it/resources/synthesis/alter_add_property.sql index bb436f7..1860c3e 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_add_property.sql +++ b/phoenix-tools/src/it/resources/synthesis/alter_add_property.sql @@ -18,12 +18,13 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( ORG_ID CHAR(15) NOT NULL, SOME_ANOTHER_ID BIGINT NOT NULL, + SECOND_ID BIGINT NOT NULL, TYPE VARCHAR, STATUS VARCHAR, START_TIMESTAMP BIGINT, END_TIMESTAMP BIGINT, PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; ALTER TABLE TEST.SAMPLE_TABLE SET DISABLE_MIGRATION=true; \ No newline at end of file diff --git a/phoenix-tools/src/it/resources/synthesis/alter_change_property.sql b/phoenix-tools/src/it/resources/synthesis/alter_change_property.sql index 79d42a2..7e01a46 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_change_property.sql +++ b/phoenix-tools/src/it/resources/synthesis/alter_change_property.sql @@ -18,12 +18,13 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( ORG_ID CHAR(15) NOT NULL, SOME_ANOTHER_ID BIGINT NOT NULL, + SECOND_ID BIGINT NOT NULL, TYPE VARCHAR, STATUS VARCHAR, START_TIMESTAMP BIGINT, END_TIMESTAMP BIGINT, PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; ALTER TABLE TEST.SAMPLE_TABLE SET REPLICATION_SCOPE=0; \ No newline at end of file diff --git a/phoenix-tools/src/it/resources/synthesis/alter_table_add.sql b/phoenix-tools/src/it/resources/synthesis/alter_table_add.sql index a22170f..53ef07d 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_table_add.sql +++ b/phoenix-tools/src/it/resources/synthesis/alter_table_add.sql @@ -18,12 +18,13 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( ORG_ID CHAR(15) NOT NULL, SOME_ANOTHER_ID BIGINT NOT NULL, + SECOND_ID BIGINT NOT NULL, TYPE VARCHAR, STATUS VARCHAR, START_TIMESTAMP BIGINT, END_TIMESTAMP BIGINT, PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; -ALTER TABLE TEST.SAMPLE_TABLE ADD IF NOT EXISTS RELATED_COMMAND BIGINT NULL; \ No newline at end of file +ALTER TABLE TEST.SAMPLE_TABLE ADD IF NOT EXISTS RELATED_COMMAND BIGINT DEFAULT 100; \ No newline at end of file diff --git a/phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql b/phoenix-tools/src/it/resources/synthesis/alter_table_add_pk.sql similarity index 66% copy from phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql copy to phoenix-tools/src/it/resources/synthesis/alter_table_add_pk.sql index 587adb8..5d9a58b 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql +++ b/phoenix-tools/src/it/resources/synthesis/alter_table_add_pk.sql @@ -15,15 +15,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( - ORG_ID CHAR(15) NOT NULL, - SOME_ANOTHER_ID BIGINT NOT NULL, - TYPE VARCHAR, - STATUS VARCHAR, - START_TIMESTAMP BIGINT, - END_TIMESTAMP BIGINT, - PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) -) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; +CREATE TABLE IF NOT EXISTS TEST.TABLE_1 ( + STATE CHAR(1) NOT NULL, + CONSTRAINT PK PRIMARY KEY + ( + STATE + ) +); -ALTER TABLE TEST.SAMPLE_TABLE DROP COLUMN TYPE; \ No newline at end of file +ALTER TABLE TEST.TABLE_1 ADD IF NOT EXISTS SOME_ID VARCHAR NULL PRIMARY KEY; \ No newline at end of file diff --git a/phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql b/phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql index 587adb8..a03a9ef 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql +++ b/phoenix-tools/src/it/resources/synthesis/alter_table_drop.sql @@ -18,12 +18,13 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( ORG_ID CHAR(15) NOT NULL, SOME_ANOTHER_ID BIGINT NOT NULL, + SECOND_ID BIGINT NOT NULL, TYPE VARCHAR, STATUS VARCHAR, START_TIMESTAMP BIGINT, END_TIMESTAMP BIGINT, PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; ALTER TABLE TEST.SAMPLE_TABLE DROP COLUMN TYPE; \ No newline at end of file diff --git a/phoenix-tools/src/it/resources/synthesis/alter_table_multiple.sql b/phoenix-tools/src/it/resources/synthesis/alter_table_multiple.sql index 4734722..313b261 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_table_multiple.sql +++ b/phoenix-tools/src/it/resources/synthesis/alter_table_multiple.sql @@ -18,12 +18,13 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( ORG_ID CHAR(15) NOT NULL, SOME_ANOTHER_ID BIGINT NOT NULL, + SECOND_ID BIGINT NOT NULL, TYPE VARCHAR, STATUS VARCHAR, START_TIMESTAMP BIGINT, END_TIMESTAMP BIGINT, PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; ALTER TABLE TEST.SAMPLE_TABLE SET TTL=2000; diff --git a/phoenix-tools/src/it/resources/synthesis/alter_table_add.sql b/phoenix-tools/src/it/resources/synthesis/drop_create_table.sql similarity index 74% copy from phoenix-tools/src/it/resources/synthesis/alter_table_add.sql copy to phoenix-tools/src/it/resources/synthesis/drop_create_table.sql index a22170f..0acc00a 100644 --- a/phoenix-tools/src/it/resources/synthesis/alter_table_add.sql +++ b/phoenix-tools/src/it/resources/synthesis/drop_create_table.sql @@ -26,4 +26,17 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; -ALTER TABLE TEST.SAMPLE_TABLE ADD IF NOT EXISTS RELATED_COMMAND BIGINT NULL; \ No newline at end of file +ALTER TABLE TEST.SAMPLE_TABLE ADD IF NOT EXISTS RELATED_COMMAND BIGINT NULL; + +DROP TABLE TEST.SAMPLE_TABLE CASCADE; + +CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( + ORG_ID CHAR(15) NOT NULL, + SOME_ANOTHER_ID BIGINT NOT NULL, + TYPE VARCHAR, + STATUS VARCHAR, + START_TIMESTAMP BIGINT, + END_TIMESTAMP BIGINT, + PARAMS VARCHAR, RESULT VARCHAR + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) +) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; \ No newline at end of file diff --git a/phoenix-tools/src/it/resources/synthesis/mismatched_entity_name.sql b/phoenix-tools/src/it/resources/synthesis/mismatched_entity_name.sql index fc97d42..2921151 100644 --- a/phoenix-tools/src/it/resources/synthesis/mismatched_entity_name.sql +++ b/phoenix-tools/src/it/resources/synthesis/mismatched_entity_name.sql @@ -18,12 +18,13 @@ CREATE TABLE IF NOT EXISTS TEST.SAMPLE_TABLE ( ORG_ID CHAR(15) NOT NULL, SOME_ANOTHER_ID BIGINT NOT NULL, + SECOND_ID BIGINT NOT NULL, TYPE VARCHAR, STATUS VARCHAR, START_TIMESTAMP BIGINT, END_TIMESTAMP BIGINT, PARAMS VARCHAR, RESULT VARCHAR - CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID) + CONSTRAINT PK PRIMARY KEY (ORG_ID, SOME_ANOTHER_ID, SECOND_ID) ) VERSIONS=1,MULTI_TENANT=FALSE,REPLICATION_SCOPE=1,TTL=31536000; ALTER VIEW TEST.SAMPLE_VIEW ADD NEW_COLUMN VARCHAR(20); \ No newline at end of file diff --git a/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSQLUtil.java b/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSQLUtil.java index ed084e3..ed1bae7 100644 --- a/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSQLUtil.java +++ b/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSQLUtil.java @@ -67,7 +67,7 @@ public class SchemaSQLUtil { sb.append(createStmt.getIndexTableName().getTableName()).append("\n") .append("ON "+createStmt.getTable().getName()) .append("("+createStmt.getIndexConstraint().toString()).append(")"); - if (createStmt.getIncludeColumns()!=null) { + if (createStmt.getIncludeColumns()!=null && !createStmt.getIncludeColumns().isEmpty()) { sb.append("\nINCLUDE "); sb.append(getColumnListToString(createStmt.getIncludeColumns())); } @@ -137,6 +137,10 @@ public class SchemaSQLUtil { buf.append(' '); buf.append("NOT NULL"); } + if(cDef.getExpression()!=null) { + buf.append(" DEFAULT "); + buf.append(cDef.getExpression()); + } return buf.toString(); } diff --git a/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSynthesisProcessor.java b/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSynthesisProcessor.java index 23b2bbf..1d74f27 100644 --- a/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSynthesisProcessor.java +++ b/phoenix-tools/src/main/java/org/apache/phoenix/schema/SchemaSynthesisProcessor.java @@ -23,12 +23,14 @@ import org.apache.hadoop.hbase.util.Pair; import org.apache.phoenix.parse.AddColumnStatement; import org.apache.phoenix.parse.BindableStatement; import org.apache.phoenix.parse.ColumnDef; +import org.apache.phoenix.parse.ColumnDefInPkConstraint; import org.apache.phoenix.parse.ColumnName; import org.apache.phoenix.parse.CreateIndexStatement; import org.apache.phoenix.parse.CreateTableStatement; import org.apache.phoenix.parse.DropColumnStatement; import org.apache.phoenix.parse.DropIndexStatement; import org.apache.phoenix.parse.DropTableStatement; +import org.apache.phoenix.parse.PrimaryKeyConstraint; import org.apache.phoenix.parse.SQLParser; import java.io.BufferedReader; @@ -154,7 +156,22 @@ public class SchemaSynthesisProcessor implements SchemaProcessor { } else { newColDef.addAll(oldColDef); newColDef.addAll(addStmt.getColumnDefs()); - newCreateStmt = new CreateTableStatement(createStmt, newColDef); + PrimaryKeyConstraint oldPKConstraint = createStmt.getPrimaryKeyConstraint(); + List<ColumnDefInPkConstraint> pkList = new ArrayList<>(); + for(Pair<ColumnName, SortOrder> entry : oldPKConstraint.getColumnNames()) { + ColumnDefInPkConstraint cd = new + ColumnDefInPkConstraint(entry.getFirst(), entry.getSecond(), oldPKConstraint.isColumnRowTimestamp(entry + .getFirst())); + pkList.add(cd); + } + for(ColumnDef cd : addStmt.getColumnDefs()) { + if(cd.isPK()) { + ColumnDefInPkConstraint cdpk = new ColumnDefInPkConstraint(cd.getColumnDefName(), cd.getSortOrder(), cd.isRowTimestamp()); + pkList.add(cdpk); + } + } + PrimaryKeyConstraint pkConstraint = new PrimaryKeyConstraint(oldPKConstraint.getName(), pkList); + newCreateStmt = new CreateTableStatement(createStmt, pkConstraint, newColDef); } return newCreateStmt; }