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

shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new 4e6a69b  KYLIN-3665 Partition time column may never be added
4e6a69b is described below

commit 4e6a69b7fa819918b33a5f1a5d25308ae316df97
Author: Feng Liang <[email protected]>
AuthorDate: Mon Nov 26 16:29:51 2018 +0800

    KYLIN-3665 Partition time column may never be added
---
 .../apache/kylin/metadata/model/PartitionDesc.java | 37 ++++++++++++----------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
index dcb37ec..56ededb 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
@@ -200,8 +200,12 @@ public class PartitionDesc implements Serializable {
             StringBuilder builder = new StringBuilder();
 
             if (partDesc.partitionColumnIsYmdInt()) {
-                buildSingleColumnRangeCondAsYmdInt(builder, 
partitionDateColumn, startInclusive, endExclusive,
-                        partDesc.getPartitionDateFormat());
+                if (partitionTimeColumn == null) {
+                    buildSingleColumnRangeCondAsYmdInt(builder, 
partitionDateColumn, startInclusive, endExclusive, 
partDesc.getPartitionDateFormat());
+                } else {
+                    buildMultipleColumnRangeCondition(builder, 
partitionDateColumn, partitionTimeColumn, startInclusive,
+                            endExclusive, partDesc.getPartitionDateFormat(), 
partDesc.getPartitionTimeFormat(), true);
+                }
             } else if (partDesc.partitionColumnIsTimeMillis()) {
                 buildSingleColumnRangeCondAsTimeMillis(builder, 
partitionDateColumn, startInclusive, endExclusive);
             } else if (partitionDateColumn != null && partitionTimeColumn == 
null) {
@@ -212,14 +216,14 @@ public class PartitionDesc implements Serializable {
                         partDesc.getPartitionTimeFormat());
             } else if (partitionDateColumn != null && partitionTimeColumn != 
null) {
                 buildMultipleColumnRangeCondition(builder, 
partitionDateColumn, partitionTimeColumn, startInclusive,
-                        endExclusive, partDesc.getPartitionDateFormat(), 
partDesc.getPartitionTimeFormat());
+                        endExclusive, partDesc.getPartitionDateFormat(), 
partDesc.getPartitionTimeFormat(), false);
             }
 
             return builder.toString();
         }
 
         private static void 
buildSingleColumnRangeCondAsTimeMillis(StringBuilder builder, TblColRef 
partitionColumn,
-                long startInclusive, long endExclusive) {
+                                                                   long 
startInclusive, long endExclusive) {
             String partitionColumnName = partitionColumn.getIdentity();
             builder.append(partitionColumnName + " >= " + startInclusive);
             builder.append(" AND ");
@@ -227,7 +231,7 @@ public class PartitionDesc implements Serializable {
         }
 
         private static void buildSingleColumnRangeCondAsYmdInt(StringBuilder 
builder, TblColRef partitionColumn,
-                long startInclusive, long endExclusive, String 
partitionColumnDateFormat) {
+                                                               long 
startInclusive, long endExclusive, String partitionColumnDateFormat) {
             String partitionColumnName = partitionColumn.getIdentity();
             builder.append(partitionColumnName + " >= "
                     + DateFormat.formatToDateStr(startInclusive, 
partitionColumnDateFormat));
@@ -237,7 +241,7 @@ public class PartitionDesc implements Serializable {
         }
 
         private static void buildSingleColumnRangeCondition(StringBuilder 
builder, TblColRef partitionColumn,
-                long startInclusive, long endExclusive, String 
partitionColumnDateFormat) {
+                                                            long 
startInclusive, long endExclusive, String partitionColumnDateFormat) {
             String partitionColumnName = partitionColumn.getIdentity();
 
             if (endExclusive <= startInclusive) {
@@ -261,36 +265,37 @@ public class PartitionDesc implements Serializable {
         }
 
         private static void buildMultipleColumnRangeCondition(StringBuilder 
builder, TblColRef partitionDateColumn,
-                TblColRef partitionTimeColumn, long startInclusive, long 
endExclusive, String partitionColumnDateFormat,
-                String partitionColumnTimeFormat) {
+                                                              TblColRef 
partitionTimeColumn, long startInclusive, long endExclusive, String 
partitionColumnDateFormat,
+                                                              String 
partitionColumnTimeFormat, boolean partitionDateColumnIsYmdInt) {
             String partitionDateColumnName = partitionDateColumn.getIdentity();
             String partitionTimeColumnName = partitionTimeColumn.getIdentity();
+            String singleQuotation = partitionDateColumnIsYmdInt ? "" : "'";
             builder.append("(");
             builder.append("(");
-            builder.append(partitionDateColumnName + " = '"
-                    + DateFormat.formatToDateStr(startInclusive, 
partitionColumnDateFormat) + "'").append(" AND ")
+            builder.append(partitionDateColumnName + " = " + singleQuotation
+                    + DateFormat.formatToDateStr(startInclusive, 
partitionColumnDateFormat) + singleQuotation).append(" AND ")
                     .append(partitionTimeColumnName + " >= '"
                             + DateFormat.formatToDateStr(startInclusive, 
partitionColumnTimeFormat) + "'");
             builder.append(")");
             builder.append(" OR ");
             builder.append("(");
-            builder.append(partitionDateColumnName + " > '"
-                    + DateFormat.formatToDateStr(startInclusive, 
partitionColumnDateFormat) + "'");
+            builder.append(partitionDateColumnName + " > " + singleQuotation
+                    + DateFormat.formatToDateStr(startInclusive, 
partitionColumnDateFormat) + singleQuotation);
             builder.append(")");
             builder.append(")");
             builder.append(" AND ");
 
             builder.append("(");
             builder.append("(");
-            builder.append(partitionDateColumnName + " = '"
-                    + DateFormat.formatToDateStr(endExclusive, 
partitionColumnDateFormat) + "'").append(" AND ")
+            builder.append(partitionDateColumnName + " = " + singleQuotation
+                    + DateFormat.formatToDateStr(endExclusive, 
partitionColumnDateFormat) + singleQuotation).append(" AND ")
                     .append(partitionTimeColumnName + " < '"
                             + DateFormat.formatToDateStr(endExclusive, 
partitionColumnTimeFormat) + "'");
             builder.append(")");
             builder.append(" OR ");
             builder.append("(");
-            builder.append(partitionDateColumnName + " < '"
-                    + DateFormat.formatToDateStr(endExclusive, 
partitionColumnDateFormat) + "'");
+            builder.append(partitionDateColumnName + " < " + singleQuotation
+                    + DateFormat.formatToDateStr(endExclusive, 
partitionColumnDateFormat) + singleQuotation);
             builder.append(")");
             builder.append(")");
         }

Reply via email to