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(")");
}