This is an automated email from the ASF dual-hosted git repository.

richardantal pushed a commit to branch 4.16
in repository https://gitbox.apache.org/repos/asf/phoenix.git

commit d1549a075ae2df4d243a318d505be2a09563226c
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;
     }

Reply via email to