You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2018/10/13 16:32:33 UTC
hive git commit: HIVE-20385 : Date: date + int fails to add days
(Bruno Pusztahazi via Ashutosh Chauhan)
Repository: hive
Updated Branches:
refs/heads/master f6726f84e -> 7a88ffbed
HIVE-20385 : Date: date + int fails to add days (Bruno Pusztahazi via Ashutosh Chauhan)
Signed-off-by: Ashutosh Chauhan <ha...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/7a88ffbe
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/7a88ffbe
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/7a88ffbe
Branch: refs/heads/master
Commit: 7a88ffbedadd18baf42fe9ffafe1af5933303d3f
Parents: f6726f8
Author: Bruno Pusztahazi <bp...@hortonworks.com>
Authored: Thu Sep 13 01:34:00 2018 -0700
Committer: Ashutosh Chauhan <ha...@apache.org>
Committed: Sat Oct 13 09:31:31 2018 -0700
----------------------------------------------------------------------
.../ql/udf/generic/GenericUDFOPDTIMinus.java | 110 +++++++++++--------
.../ql/udf/generic/GenericUDFOPDTIPlus.java | 94 +++++++++-------
.../hadoop/hive/ql/util/DateTimeMath.java | 18 ++-
.../clientpositive/date_int_operation_test.q | 5 +
.../date_int_operation_test.q.out | 18 +++
5 files changed, 158 insertions(+), 87 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/7a88ffbe/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIMinus.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIMinus.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIMinus.java
index 076ca51..9e56d3c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIMinus.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIMinus.java
@@ -71,7 +71,8 @@ public class GenericUDFOPDTIMinus extends GenericUDFBaseDTI {
TIMESTAMP_MINUS_INTERVALYM,
INTERVALDT_MINUS_INTERVALDT,
TIMESTAMP_MINUS_INTERVALDT,
- TIMESTAMP_MINUS_TIMESTAMP
+ TIMESTAMP_MINUS_TIMESTAMP,
+ DATE_MINUS_INT
};
public GenericUDFOPDTIMinus() {
@@ -101,8 +102,8 @@ public class GenericUDFOPDTIMinus extends GenericUDFBaseDTI {
}
inputOIs = new PrimitiveObjectInspector[] {
- (PrimitiveObjectInspector) arguments[0],
- (PrimitiveObjectInspector) arguments[1]
+ (PrimitiveObjectInspector) arguments[0],
+ (PrimitiveObjectInspector) arguments[1]
};
PrimitiveObjectInspector leftOI = inputOIs[0];
PrimitiveObjectInspector rightOI = inputOIs[1];
@@ -117,6 +118,7 @@ public class GenericUDFOPDTIMinus extends GenericUDFBaseDTI {
// Timestamp - Timestamp = IntervalDayTime
// Date - Date = IntervalDayTime
// Timestamp - Date = IntervalDayTime (operands reversible)
+ // Date - Int = Date
if (checkArgs(PrimitiveCategory.INTERVAL_YEAR_MONTH, PrimitiveCategory.INTERVAL_YEAR_MONTH)) {
minusOpType = OperationType.INTERVALYM_MINUS_INTERVALYM;
intervalArg1Idx = 0;
@@ -161,6 +163,13 @@ public class GenericUDFOPDTIMinus extends GenericUDFBaseDTI {
TypeInfoFactory.intervalDayTimeTypeInfo);
dt1Converter = ObjectInspectorConverters.getConverter(leftOI, resultOI);
dt2Converter = ObjectInspectorConverters.getConverter(leftOI, resultOI);
+ } else if (checkArgs(PrimitiveCategory.DATE, PrimitiveCategory.INT)) {
+ minusOpType = OperationType.DATE_MINUS_INT;
+ intervalArg1Idx = 1;
+ dtArg1Idx = 0;
+ resultOI = PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
+ TypeInfoFactory.dateTypeInfo);
+ dt1Converter = ObjectInspectorConverters.getConverter(leftOI, resultOI);
} else {
// Unsupported types - error
List<TypeInfo> argTypeInfos = new ArrayList<TypeInfo>(2);
@@ -175,50 +184,57 @@ public class GenericUDFOPDTIMinus extends GenericUDFBaseDTI {
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException {
switch (minusOpType) {
- case INTERVALYM_MINUS_INTERVALYM: {
- HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- HiveIntervalYearMonth iym2 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
- return handleIntervalYearMonthResult(dtm.subtract(iym1, iym2));
- }
- case DATE_MINUS_INTERVALYM: {
- HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- Date dt1 = PrimitiveObjectInspectorUtils.getDate(
- arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
- return handleDateResult(dtm.subtract(dt1, iym1));
- }
- case TIMESTAMP_MINUS_INTERVALYM: {
- HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
- arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
- return handleTimestampResult(dtm.subtract(ts1, iym1));
- }
- case INTERVALDT_MINUS_INTERVALDT: {
- HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- HiveIntervalDayTime idt2 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
- arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
- return handleIntervalDayTimeResult(dtm.subtract(idt1, idt2));
- }
- case TIMESTAMP_MINUS_INTERVALDT: {
- HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
- arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
- return handleTimestampResult(dtm.subtract(ts1, idt1));
- }
- case TIMESTAMP_MINUS_TIMESTAMP: {
- Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
- arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
- Timestamp ts2 = PrimitiveObjectInspectorUtils.getTimestamp(
- arguments[dtArg2Idx].get(), inputOIs[dtArg2Idx]);
- return handleIntervalDayTimeResult(dtm.subtract(ts1, ts2));
- }
- default:
- throw new HiveException("Unknown PlusOpType " + minusOpType);
+ case INTERVALYM_MINUS_INTERVALYM: {
+ HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ HiveIntervalYearMonth iym2 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
+ return handleIntervalYearMonthResult(dtm.subtract(iym1, iym2));
+ }
+ case DATE_MINUS_INTERVALYM: {
+ HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ Date dt1 = PrimitiveObjectInspectorUtils.getDate(
+ arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
+ return handleDateResult(dtm.subtract(dt1, iym1));
+ }
+ case TIMESTAMP_MINUS_INTERVALYM: {
+ HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
+ arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
+ return handleTimestampResult(dtm.subtract(ts1, iym1));
+ }
+ case INTERVALDT_MINUS_INTERVALDT: {
+ HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ HiveIntervalDayTime idt2 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
+ arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
+ return handleIntervalDayTimeResult(dtm.subtract(idt1, idt2));
+ }
+ case TIMESTAMP_MINUS_INTERVALDT: {
+ HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
+ arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
+ return handleTimestampResult(dtm.subtract(ts1, idt1));
+ }
+ case TIMESTAMP_MINUS_TIMESTAMP: {
+ Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
+ arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
+ Timestamp ts2 = PrimitiveObjectInspectorUtils.getTimestamp(
+ arguments[dtArg2Idx].get(), inputOIs[dtArg2Idx]);
+ return handleIntervalDayTimeResult(dtm.subtract(ts1, ts2));
+ }
+ case DATE_MINUS_INT: {
+ int intVal = PrimitiveObjectInspectorUtils.getInt(arguments[intervalArg1Idx].get(),
+ inputOIs[intervalArg1Idx]);
+ Date dt1 = PrimitiveObjectInspectorUtils.getDate(
+ arguments[dtArg1Idx].get(), inputOIs[dtArg1Idx]);
+ return handleDateResult(dtm.add(dt1, -intVal));
+ }
+ default:
+ throw new HiveException("Unknown MinusOpType " + minusOpType);
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/7a88ffbe/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIPlus.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIPlus.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIPlus.java
index 9295c8f..da480a4 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIPlus.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPDTIPlus.java
@@ -69,6 +69,7 @@ public class GenericUDFOPDTIPlus extends GenericUDFBaseDTI {
INTERVALYM_PLUS_TIMESTAMP,
INTERVALDT_PLUS_INTERVALDT,
INTERVALDT_PLUS_TIMESTAMP,
+ DATE_PLUS_INT,
};
public GenericUDFOPDTIPlus() {
@@ -98,8 +99,8 @@ public class GenericUDFOPDTIPlus extends GenericUDFBaseDTI {
}
inputOIs = new PrimitiveObjectInspector[] {
- (PrimitiveObjectInspector) arguments[0],
- (PrimitiveObjectInspector) arguments[1]
+ (PrimitiveObjectInspector) arguments[0],
+ (PrimitiveObjectInspector) arguments[1]
};
PrimitiveObjectInspector leftOI = inputOIs[0];
PrimitiveObjectInspector rightOI = inputOIs[1];
@@ -111,6 +112,7 @@ public class GenericUDFOPDTIPlus extends GenericUDFBaseDTI {
// IntervalDayTime + IntervalDayTime = IntervalDayTime
// IntervalDayTime + Date = Timestamp (operands reversible)
// IntervalDayTime + Timestamp = Timestamp (operands reversible)
+ // Date + Int = Date
if (checkArgs(PrimitiveCategory.INTERVAL_YEAR_MONTH, PrimitiveCategory.INTERVAL_YEAR_MONTH)) {
plusOpType = OperationType.INTERVALYM_PLUS_INTERVALYM;
intervalArg1Idx = 0;
@@ -163,6 +165,13 @@ public class GenericUDFOPDTIPlus extends GenericUDFBaseDTI {
resultOI = PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
TypeInfoFactory.timestampTypeInfo);
dtConverter = ObjectInspectorConverters.getConverter(leftOI, resultOI);
+ } else if (checkArgs(PrimitiveCategory.DATE, PrimitiveCategory.INT)) {
+ plusOpType = OperationType.DATE_PLUS_INT;
+ intervalArg1Idx = 1;
+ dtArgIdx = 0;
+ resultOI = PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
+ TypeInfoFactory.dateTypeInfo);
+ dtConverter = ObjectInspectorConverters.getConverter(leftOI, resultOI);
} else {
// Unsupported types - error
List<TypeInfo> argTypeInfos = new ArrayList<TypeInfo>(2);
@@ -177,43 +186,50 @@ public class GenericUDFOPDTIPlus extends GenericUDFBaseDTI {
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException {
switch (plusOpType) {
- case INTERVALYM_PLUS_INTERVALYM: {
- HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- HiveIntervalYearMonth iym2 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
- return handleIntervalYearMonthResult(dtm.add(iym1, iym2));
- }
- case INTERVALYM_PLUS_DATE: {
- HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- Date dt1 = PrimitiveObjectInspectorUtils.getDate(
- arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
- return handleDateResult(dtm.add(dt1, iym1));
- }
- case INTERVALYM_PLUS_TIMESTAMP: {
- HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
- arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
- return handleTimestampResult(dtm.add(ts1, iym1));
- }
- case INTERVALDT_PLUS_INTERVALDT: {
- HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- HiveIntervalDayTime idt2 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
- arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
- return handleIntervalDayTimeResult(dtm.add(idt1, idt2));
- }
- case INTERVALDT_PLUS_TIMESTAMP: {
- HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
- arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
- Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
- arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
- return handleTimestampResult(dtm.add(ts1, idt1));
- }
- default:
- throw new HiveException("Unknown PlusOpType " + plusOpType);
+ case INTERVALYM_PLUS_INTERVALYM: {
+ HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ HiveIntervalYearMonth iym2 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
+ return handleIntervalYearMonthResult(dtm.add(iym1, iym2));
+ }
+ case INTERVALYM_PLUS_DATE: {
+ HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ Date dt1 = PrimitiveObjectInspectorUtils.getDate(
+ arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
+ return handleDateResult(dtm.add(dt1, iym1));
+ }
+ case INTERVALYM_PLUS_TIMESTAMP: {
+ HiveIntervalYearMonth iym1 = PrimitiveObjectInspectorUtils.getHiveIntervalYearMonth(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
+ arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
+ return handleTimestampResult(dtm.add(ts1, iym1));
+ }
+ case INTERVALDT_PLUS_INTERVALDT: {
+ HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ HiveIntervalDayTime idt2 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
+ arguments[intervalArg2Idx].get(), inputOIs[intervalArg2Idx]);
+ return handleIntervalDayTimeResult(dtm.add(idt1, idt2));
+ }
+ case INTERVALDT_PLUS_TIMESTAMP: {
+ HiveIntervalDayTime idt1 = PrimitiveObjectInspectorUtils.getHiveIntervalDayTime(
+ arguments[intervalArg1Idx].get(), inputOIs[intervalArg1Idx]);
+ Timestamp ts1 = PrimitiveObjectInspectorUtils.getTimestamp(
+ arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
+ return handleTimestampResult(dtm.add(ts1, idt1));
+ }
+ case DATE_PLUS_INT: {
+ int intVal = PrimitiveObjectInspectorUtils.getInt(arguments[intervalArg1Idx].get(),
+ inputOIs[intervalArg1Idx]);
+ Date dt1 = PrimitiveObjectInspectorUtils.getDate(
+ arguments[dtArgIdx].get(), inputOIs[dtArgIdx]);
+ return handleDateResult(dtm.add(dt1, intVal));
+ }
+ default:
+ throw new HiveException("Unknown PlusOpType " + plusOpType);
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/7a88ffbe/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java b/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java
index 16babbf..20acfa2 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java
@@ -230,6 +230,22 @@ public class DateTimeMath {
return dtResult;
}
+ /**
+ * Perform date + int operation .
+ * @param dt the date
+ * @param interval the int (days)
+ * @return the resulting date
+ */
+ public Date add(Date dt, int interval) {
+ if (dt == null) {
+ return null;
+ }
+
+ Date dtResult = new Date();
+ dtResult.setTimeInDays(dt.toEpochDay() + interval);
+ return dtResult;
+ }
+
@Deprecated
public java.sql.Date add(HiveIntervalYearMonth interval, java.sql.Date dt) {
if (dt == null || interval == null) {
@@ -471,7 +487,7 @@ public class DateTimeMath {
HiveIntervalDayTime result = new HiveIntervalDayTime();
add(left, right, result);
-
+
return result;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/7a88ffbe/ql/src/test/queries/clientpositive/date_int_operation_test.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/date_int_operation_test.q b/ql/src/test/queries/clientpositive/date_int_operation_test.q
new file mode 100644
index 0000000..05d97d7
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/date_int_operation_test.q
@@ -0,0 +1,5 @@
+--! qt:dataset:srcpart
+--! qt:dataset:src
+--! qt:dataset:alltypesorc
+select date('2001-01-28') + 3;
+select date('2001-01-28') - 3;
http://git-wip-us.apache.org/repos/asf/hive/blob/7a88ffbe/ql/src/test/results/clientpositive/date_int_operation_test.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/date_int_operation_test.q.out b/ql/src/test/results/clientpositive/date_int_operation_test.q.out
new file mode 100644
index 0000000..ab7f7b4
--- /dev/null
+++ b/ql/src/test/results/clientpositive/date_int_operation_test.q.out
@@ -0,0 +1,18 @@
+PREHOOK: query: select date('2001-01-28') + 3
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select date('2001-01-28') + 3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+2001-01-31
+PREHOOK: query: select date('2001-01-28') - 3
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select date('2001-01-28') - 3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+2001-01-25