You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ri...@apache.org on 2021/07/29 15:43:00 UTC

[phoenix] 02/02: PHOENIX-6454: Add feature to SchemaTool to get the DDL in specification (Addendum) (#1233)

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

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

commit a094666b7866a3fd3b7e82604cae0cc9de58cbf3
Author: Swaroopa Kadam <sw...@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/PrimaryKeyConstraint.java |  8 ++--
 .../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 ++-
 .../it/resources/synthesis/alter_table_add_pk.sql  | 18 ++++++++
 .../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   |  4 ++
 .../phoenix/schema/SchemaSynthesisProcessor.java   | 10 ++---
 12 files changed, 93 insertions(+), 30 deletions(-)

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 e6a65a5..802a87f 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
@@ -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 8ac0774..48b4c00 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);
@@ -118,7 +118,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);
@@ -154,6 +154,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";
@@ -170,11 +192,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_add_pk.sql b/phoenix-tools/src/it/resources/synthesis/alter_table_add_pk.sql
index 6835cf0..5d9a58b 100644
--- a/phoenix-tools/src/it/resources/synthesis/alter_table_add_pk.sql
+++ b/phoenix-tools/src/it/resources/synthesis/alter_table_add_pk.sql
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 CREATE TABLE IF NOT EXISTS TEST.TABLE_1 (
 	STATE CHAR(1) NOT NULL,
 	CONSTRAINT PK PRIMARY KEY
@@ -5,4 +22,5 @@ CREATE TABLE IF NOT EXISTS TEST.TABLE_1 (
        STATE
     )
 );
+
 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 c565b51..222b190 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
@@ -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 7c8e849..d65f65f 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
@@ -25,12 +25,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;
@@ -161,18 +163,16 @@ public class SchemaSynthesisProcessor implements SchemaProcessor {
             for(Pair<ColumnName, SortOrder> entry : oldPKConstraint.getColumnNames()) {
                 ColumnDefInPkConstraint cd = new
                         ColumnDefInPkConstraint(entry.getFirst(), entry.getSecond(), oldPKConstraint.isColumnRowTimestamp(entry
-                .getFirst()));
+                        .getFirst()));
                 pkList.add(cd);
             }
             for(ColumnDef cd : addStmt.getColumnDefs()) {
                 if(cd.isPK()) {
-                    ColumnDefInPkConstraint cdpk = new
-                            ColumnDefInPkConstraint(cd.getColumnDefName(), cd.getSortOrder(), cd.isRowTimestamp());
+                    ColumnDefInPkConstraint cdpk = new ColumnDefInPkConstraint(cd.getColumnDefName(), cd.getSortOrder(), cd.isRowTimestamp());
                     pkList.add(cdpk);
                 }
             }
-            PrimaryKeyConstraint pkConstraint = new
-                    PrimaryKeyConstraint(oldPKConstraint.getName(), pkList);
+            PrimaryKeyConstraint pkConstraint = new PrimaryKeyConstraint(oldPKConstraint.getName(), pkList);
             newCreateStmt = new CreateTableStatement(createStmt, pkConstraint, newColDef);
         }
         return newCreateStmt;