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

sankarh pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/branch-3 by this push:
     new 873c3a8c9f7 HIVE-27385: Backport of HIVE-22099: Several date related 
UDFs can't handle Julian dates properly since HIVE-20007 (Adam Szita, reviewed 
by Jesus Camacho Rodriguez)
873c3a8c9f7 is described below

commit 873c3a8c9f7efd596d66b768c7f6414e8d053c3c
Author: Aman Raj <104416558+amanraj2...@users.noreply.github.com>
AuthorDate: Mon Sep 11 22:49:13 2023 +0530

    HIVE-27385: Backport of HIVE-22099: Several date related UDFs can't handle 
Julian dates properly since HIVE-20007 (Adam Szita, reviewed by Jesus Camacho 
Rodriguez)
    
    Signed-off-by: Sankar Hariappan <sank...@apache.org>
    Closes (#4674)
---
 .../exec/vector/expressions/CastDateToString.java  |  6 +--
 .../expressions/VectorUDFTimestampFieldDate.java   |  6 +--
 .../expressions/VectorUDFTimestampFieldString.java |  5 +--
 .../VectorUDFTimestampFieldTimestamp.java          |  5 +--
 .../apache/hadoop/hive/ql/udf/UDFDayOfMonth.java   |  4 +-
 .../org/apache/hadoop/hive/ql/udf/UDFMonth.java    |  4 +-
 .../apache/hadoop/hive/ql/udf/UDFWeekOfYear.java   |  6 +--
 .../org/apache/hadoop/hive/ql/udf/UDFYear.java     |  4 +-
 .../hive/ql/udf/generic/GenericUDFAddMonths.java   |  7 ++--
 .../hive/ql/udf/generic/GenericUDFDateFormat.java  |  4 +-
 .../ql/udf/generic/GenericUDFMonthsBetween.java    |  6 +--
 .../apache/hadoop/hive/ql/util/DateTimeMath.java   | 13 +++++++
 .../expressions/TestVectorMathFunctions.java       |  8 ++++
 .../vector/expressions/TestVectorTypeCasts.java    | 27 +++++++++++++
 .../ql/udf/generic/TestGenericUDFAddMonths.java    |  2 +
 .../ql/udf/generic/TestGenericUDFDateFormat.java   | 16 +++++++-
 .../udf/generic/TestGenericUDFMonthsBetween.java   |  3 ++
 ql/src/test/queries/clientpositive/udf_day.q       |  3 ++
 ql/src/test/queries/clientpositive/udf_month.q     |  7 +++-
 .../test/queries/clientpositive/udf_weekofyear.q   |  4 ++
 ql/src/test/queries/clientpositive/udf_year.q      |  5 +++
 .../llap/vectorized_timestamp_funcs.q.out          |  6 +--
 .../spark/vectorized_timestamp_funcs.q.out         |  6 +--
 ql/src/test/results/clientpositive/udf_day.q.out   | 18 +++++++++
 ql/src/test/results/clientpositive/udf_month.q.out | 45 +++++++++++++++-------
 .../results/clientpositive/udf_weekofyear.q.out    | 27 +++++++++++++
 ql/src/test/results/clientpositive/udf_year.q.out  | 37 ++++++++++++++++++
 .../vectorized_timestamp_funcs.q.out               |  6 +--
 28 files changed, 234 insertions(+), 56 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDateToString.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDateToString.java
index dfa9f8a00de..302fcefe107 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDateToString.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/CastDateToString.java
@@ -19,11 +19,11 @@
 package org.apache.hadoop.hive.ql.exec.vector.expressions;
 
 import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.io.DateWritableV2;
 
 import java.sql.Date;
 import java.text.SimpleDateFormat;
-import java.util.TimeZone;
 
 public class CastDateToString extends LongToStringUnaryUDF {
   private static final long serialVersionUID = 1L;
@@ -33,13 +33,13 @@ public class CastDateToString extends LongToStringUnaryUDF {
   public CastDateToString() {
     super();
     formatter = new SimpleDateFormat("yyyy-MM-dd");
-    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
+    formatter.setCalendar(DateTimeMath.getProlepticGregorianCalendarUTC());
   }
 
   public CastDateToString(int inputColumn, int outputColumnNum) {
     super(inputColumn, outputColumnNum);
     formatter = new SimpleDateFormat("yyyy-MM-dd");
-    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
+    formatter.setCalendar(DateTimeMath.getProlepticGregorianCalendarUTC());
   }
 
   // The assign method will be overridden for CHAR and VARCHAR.
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldDate.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldDate.java
index 837de9d0cad..ac6519b6257 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldDate.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldDate.java
@@ -20,13 +20,13 @@ package org.apache.hadoop.hive.ql.exec.vector.expressions;
 
 import java.util.Arrays;
 import java.util.Calendar;
-import java.util.TimeZone;
 
 import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;
 import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
 import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.io.DateWritableV2;
 import 
org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
 import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
@@ -34,7 +34,6 @@ import org.apache.hive.common.util.DateUtils;
 
 import com.google.common.base.Preconditions;
 
-
 /**
  * Abstract class to return various fields from a Timestamp or Date.
  */
@@ -44,8 +43,7 @@ public abstract class VectorUDFTimestampFieldDate extends 
VectorExpression {
   protected final int colNum;
   protected final int field;
 
-  protected transient final Calendar calendar = Calendar.getInstance(
-      TimeZone.getTimeZone("UTC"));
+  protected final transient Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
   public VectorUDFTimestampFieldDate(int field, int colNum, int 
outputColumnNum) {
     super(outputColumnNum);
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldString.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldString.java
index 9acfa86104a..9ef90947b23 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldString.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldString.java
@@ -23,10 +23,10 @@ import 
org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
 import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 
 import java.text.ParseException;
 import java.util.Calendar;
-import java.util.TimeZone;
 
 /**
  * Abstract class to return various fields from a String.
@@ -40,8 +40,7 @@ public abstract class VectorUDFTimestampFieldString extends 
VectorExpression {
   protected final int fieldLength;
   private static final String patternMin = "0000-00-00 00:00:00.000000000";
   private static final String patternMax = "9999-19-99 29:59:59.999999999";
-  protected transient final Calendar calendar = Calendar.getInstance(
-      TimeZone.getTimeZone("UTC"));
+  protected final transient Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
   public VectorUDFTimestampFieldString(int colNum, int outputColumnNum, int 
fieldStart, int fieldLength) {
     super(outputColumnNum);
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldTimestamp.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldTimestamp.java
index 94e8b474873..142d05f86a9 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldTimestamp.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFTimestampFieldTimestamp.java
@@ -20,7 +20,6 @@ package org.apache.hadoop.hive.ql.exec.vector.expressions;
 
 import java.util.Arrays;
 import java.util.Calendar;
-import java.util.TimeZone;
 
 import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;
 import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
@@ -28,6 +27,7 @@ import 
org.apache.hadoop.hive.ql.exec.vector.TimestampColumnVector;
 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
 import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import 
org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
 import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
 import org.apache.hive.common.util.DateUtils;
@@ -44,8 +44,7 @@ public abstract class VectorUDFTimestampFieldTimestamp 
extends VectorExpression
   protected final int colNum;
   protected final int field;
 
-  protected transient final Calendar calendar = Calendar.getInstance(
-      TimeZone.getTimeZone("UTC"));
+  protected final transient Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
   public VectorUDFTimestampFieldTimestamp(int field, int colNum, int 
outputColumnNum) {
     super(outputColumnNum);
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java
index 72fa2630b62..cbb8fd09c36 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java
@@ -30,6 +30,7 @@ import 
org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFDayOfMonthTime
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
 import org.apache.hadoop.hive.ql.udf.generic.NDV;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
@@ -37,7 +38,6 @@ import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectIn
 import org.apache.hadoop.io.IntWritable;
 
 import java.util.Calendar;
-import java.util.TimeZone;
 
 /**
  * UDFDayOfMonth.
@@ -60,7 +60,7 @@ public class UDFDayOfMonth extends GenericUDF {
   private transient PrimitiveObjectInspector.PrimitiveCategory[] inputTypes = 
new PrimitiveObjectInspector.PrimitiveCategory[1];
   private final IntWritable output = new IntWritable();
 
-  private final Calendar calendar = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+  private final Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
   @Override
   public ObjectInspector initialize(ObjectInspector[] arguments) throws 
UDFArgumentException {
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java
index 1a8b2da7a97..e55dbc4633b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java
@@ -30,6 +30,7 @@ import 
org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFMonthTimestamp
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
 import org.apache.hadoop.hive.ql.udf.generic.NDV;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
@@ -37,7 +38,6 @@ import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectIn
 import org.apache.hadoop.io.IntWritable;
 
 import java.util.Calendar;
-import java.util.TimeZone;
 
 /**
  * UDFMonth.
@@ -60,7 +60,7 @@ public class UDFMonth extends GenericUDF {
   private transient PrimitiveObjectInspector.PrimitiveCategory[] inputTypes = 
new PrimitiveObjectInspector.PrimitiveCategory[1];
   private final IntWritable output = new IntWritable();
 
-  private final Calendar calendar = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+  private final Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
 
   @Override
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java
index 18ca9a7e9bf..6d64da115c2 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import java.util.Calendar;
-import java.util.TimeZone;
 
 import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.Timestamp;
@@ -30,6 +29,7 @@ import 
org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFWeekOfYearDate
 import 
org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFWeekOfYearString;
 import 
org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFWeekOfYearTimestamp;
 import org.apache.hadoop.hive.ql.udf.generic.NDV;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.io.DateWritableV2;
 import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
 import org.apache.hadoop.io.IntWritable;
@@ -39,7 +39,7 @@ import org.apache.hadoop.io.Text;
  * UDFWeekOfYear.
  *
  */
-@Description(name = "yearweek",
+@Description(name = "weekofyear",
     value = "_FUNC_(date) - Returns the week of the year of the given date. A 
week "
     + "is considered to start on a Monday and week 1 is the first week with >3 
days.",
     extended = "Examples:\n"
@@ -52,7 +52,7 @@ public class UDFWeekOfYear extends UDF {
 
   private final IntWritable result = new IntWritable();
 
-  private final Calendar calendar = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+  private final Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
 
   public UDFWeekOfYear() {
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java
index fcbb57f8387..8ac1dc5b9dd 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java
@@ -30,6 +30,7 @@ import 
org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFYearTimestamp;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
 import org.apache.hadoop.hive.ql.udf.generic.NDV;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
@@ -37,7 +38,6 @@ import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectIn
 import org.apache.hadoop.io.IntWritable;
 
 import java.util.Calendar;
-import java.util.TimeZone;
 
 /**
  * UDFYear.
@@ -60,7 +60,7 @@ public class UDFYear extends GenericUDF {
   private transient PrimitiveObjectInspector.PrimitiveCategory[] inputTypes = 
new PrimitiveObjectInspector.PrimitiveCategory[1];
   private final IntWritable output = new IntWritable();
 
-  private final Calendar calendar = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+  private final Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
 
 
   @Override
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java
index 6df0913de6c..7ca8dad5aaa 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java
@@ -24,7 +24,6 @@ import static 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveO
 
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
-import java.util.TimeZone;
 
 import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.Timestamp;
@@ -32,6 +31,7 @@ import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.objectinspector.ConstantObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import 
org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters.Converter;
@@ -64,7 +64,7 @@ public class GenericUDFAddMonths extends GenericUDF {
   private transient PrimitiveCategory[] dtInputTypes = new 
PrimitiveCategory[3];
   private final Text output = new Text();
   private transient SimpleDateFormat formatter = null;
-  private final Calendar calendar = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+  private final Calendar calendar = 
DateTimeMath.getProlepticGregorianCalendarUTC();
   private transient Integer numMonthsConst;
   private transient boolean isNumMonthsConst;
 
@@ -82,7 +82,7 @@ public class GenericUDFAddMonths extends GenericUDF {
         String fmtStr = getConstantStringValue(arguments, 2);
         if (fmtStr != null) {
           formatter = new SimpleDateFormat(fmtStr);
-          formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
+          formatter.setCalendar(calendar);
         }
       } else {
         throw new UDFArgumentTypeException(2, getFuncName() + " only takes 
constant as "
@@ -92,6 +92,7 @@ public class GenericUDFAddMonths extends GenericUDF {
     if (formatter == null) {
       //If the DateFormat is not provided by the user or is invalid, use the 
default format YYYY-MM-dd
       formatter = DateUtils.getDateFormat();
+      formatter.setCalendar(calendar);
     }
 
     // the function should support both short date and full timestamp format
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java
index 6d3e86f9212..a30b9160def 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java
@@ -21,7 +21,6 @@ import static 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveO
 import static 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.STRING_GROUP;
 
 import java.text.SimpleDateFormat;
-import java.util.TimeZone;
 
 import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.Timestamp;
@@ -29,6 +28,7 @@ import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.objectinspector.ConstantObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import 
org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters.Converter;
@@ -80,7 +80,7 @@ public class GenericUDFDateFormat extends GenericUDF {
       if (fmtStr != null) {
         try {
           formatter = new SimpleDateFormat(fmtStr);
-          formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
+          
formatter.setCalendar(DateTimeMath.getProlepticGregorianCalendarUTC());
         } catch (IllegalArgumentException e) {
           // ignore
         }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java
index e0db417dab3..ad128d800d4 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java
@@ -29,13 +29,13 @@ import static 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveO
 
 import java.math.BigDecimal;
 import java.util.Calendar;
-import java.util.TimeZone;
 
 import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ConstantObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
@@ -66,8 +66,8 @@ public class GenericUDFMonthsBetween extends GenericUDF {
   private transient PrimitiveCategory[] tsInputTypes = new 
PrimitiveCategory[2];
   private transient Converter[] dtConverters = new Converter[2];
   private transient PrimitiveCategory[] dtInputTypes = new 
PrimitiveCategory[2];
-  private final Calendar cal1 = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
-  private final Calendar cal2 = 
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+  private final Calendar cal1 = 
DateTimeMath.getProlepticGregorianCalendarUTC();
+  private final Calendar cal2 = 
DateTimeMath.getProlepticGregorianCalendarUTC();
   private final DoubleWritable output = new DoubleWritable();
   private boolean isRoundOffNeeded = true;
 
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 16babbf7a77..70c971f9372 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
@@ -25,6 +25,7 @@ import org.apache.hadoop.hive.serde2.io.DateWritableV2;
 import org.apache.hive.common.util.DateUtils;
 
 import java.util.Calendar;
+import java.util.GregorianCalendar;
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
 
@@ -584,4 +585,16 @@ public class DateTimeMath {
     result.set(totalSeconds, nanosResult.nanos);
     return true;
   }
+
+  /**
+   * TODO - this is a temporary fix for handling Julian calendar dates.
+   * Returns a Gregorian calendar that can be used from year 0+ instead of 
default 1582.10.15.
+   * This is desirable for some UDFs that work on dates which normally would 
use Julian calendar.
+   * @return the calendar
+   */
+  public static Calendar getProlepticGregorianCalendarUTC() {
+    GregorianCalendar calendar = new 
GregorianCalendar(TimeZone.getTimeZone("UTC".intern()));
+    calendar.setGregorianChange(new java.util.Date(Long.MIN_VALUE));
+    return calendar;
+  }
 }
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorMathFunctions.java
 
b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorMathFunctions.java
index 14d13436468..11bf0b403d7 100644
--- 
a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorMathFunctions.java
+++ 
b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorMathFunctions.java
@@ -118,6 +118,14 @@ public class TestVectorMathFunctions {
 
   static int DAYS_LIMIT = 365 * 9999;
 
+  public static VectorizedRowBatch getVectorizedRowBatchDateInStringOut(int[] 
intValues) {
+    // get date in timestamp out, and change timestamp out to string out
+    VectorizedRowBatch batch =  
getVectorizedRowBatchDateInTimestampOut(intValues);
+    BytesColumnVector outV = new BytesColumnVector(intValues.length);
+    batch.cols[1] = outV;
+    return batch;
+  }
+
   public static VectorizedRowBatch 
getVectorizedRowBatchDateInTimestampOut(int[] intValues) {
     Random r = new Random(12099);
     VectorizedRowBatch batch = new VectorizedRowBatch(2);
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
 
b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
index 4ed087e6be5..a8d81fc1943 100644
--- 
a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
+++ 
b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
@@ -23,7 +23,10 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
@@ -31,6 +34,7 @@ import junit.framework.Assert;
 
 import org.apache.hadoop.hive.common.type.DataTypePhysicalVariation;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
+import org.apache.hadoop.hive.ql.util.DateTimeMath;
 import org.apache.hadoop.hive.serde2.RandomTypeUtil;
 import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
 import org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector;
@@ -72,6 +76,29 @@ public class TestVectorTypeCasts {
     Assert.assertEquals(1, resultV.vector[6]);
   }
 
+  @Test
+  public void testCastDateToString() throws HiveException {
+    int[] intValues = new int[100];
+    VectorizedRowBatch b = 
TestVectorMathFunctions.getVectorizedRowBatchDateInStringOut(intValues);
+    BytesColumnVector resultV = (BytesColumnVector) b.cols[1];
+    b.cols[0].noNulls = true;
+    VectorExpression expr = new CastDateToString(0, 1);
+    expr.evaluate(b);
+
+    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+    formatter.setCalendar(DateTimeMath.getProlepticGregorianCalendarUTC());
+
+    String expected, result;
+    for (int i = 0; i < intValues.length; i++) {
+      expected = formatter.format(new 
java.sql.Date(DateWritableV2.daysToMillis(intValues[i])));
+      byte[] subbyte = Arrays.copyOfRange(resultV.vector[i], resultV.start[i],
+          resultV.start[i] + resultV.length[i]);
+      result = new String(subbyte, StandardCharsets.UTF_8);
+
+      Assert.assertEquals("Index: " + i + " Epoch day value: " + intValues[i], 
expected, result);
+    }
+  }
+
   @Test
   public void testCastDateToTimestamp() throws HiveException {
     int[] intValues = new int[500];
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java
 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java
index 7c2ee156469..3459ad50172 100644
--- 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java
+++ 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java
@@ -58,6 +58,8 @@ public class TestGenericUDFAddMonths extends TestCase {
     runAndVerify("2016-02-29", -12, "2015-02-28", udf);
     runAndVerify("2016-01-29", 1, "2016-02-29", udf);
     runAndVerify("2016-02-29", -1, "2016-01-31", udf);
+    runAndVerify("1001-10-05", 1, "1001-11-05", udf);
+    runAndVerify("1582-10-05", 1, "1582-11-05", udf);
 
     // ts str
     runAndVerify("2014-01-14 10:30:00", 1, "2014-02-14", udf);
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java
 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java
index 6a3cdda48a3..599f7814d41 100644
--- 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java
+++ 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java
@@ -30,6 +30,7 @@ import 
org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
 import org.apache.hadoop.io.Text;
+import org.junit.Test;
 
 public class TestGenericUDFDateFormat extends TestCase {
 
@@ -39,7 +40,7 @@ public class TestGenericUDFDateFormat extends TestCase {
     Text fmtText = new Text("EEEE");
     ObjectInspector valueOI1 = PrimitiveObjectInspectorFactory
         
.getPrimitiveWritableConstantObjectInspector(TypeInfoFactory.stringTypeInfo, 
fmtText);
-    ObjectInspector[] arguments = { valueOI0, valueOI1 };
+    ObjectInspector[] arguments = {valueOI0, valueOI1};
 
     udf.initialize(arguments);
 
@@ -146,6 +147,19 @@ public class TestGenericUDFDateFormat extends TestCase {
     runAndVerifyStr("2015-04-05", fmtText, null, udf);
   }
 
+
+  @Test
+  public void testJulianDates() throws HiveException {
+    GenericUDFDateFormat udf = new GenericUDFDateFormat();
+    ObjectInspector valueOI0 = 
PrimitiveObjectInspectorFactory.writableStringObjectInspector;
+    Text fmtText = new Text("dd---MM--yyyy");
+    ObjectInspector valueOI1 = PrimitiveObjectInspectorFactory
+            
.getPrimitiveWritableConstantObjectInspector(TypeInfoFactory.stringTypeInfo, 
fmtText);
+    ObjectInspector[] arguments = { valueOI0, valueOI1 };
+    udf.initialize(arguments);
+    runAndVerifyStr("1001-01-05", fmtText, "05---01--1001", udf);
+  }
+
   private void runAndVerifyStr(String str, Text fmtText, String expResult, 
GenericUDF udf)
       throws HiveException {
     DeferredObject valueObj0 = new DeferredJavaObject(str != null ? new 
Text(str) : null);
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java
 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java
index e9f32a1397a..894738f7d36 100644
--- 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java
+++ 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java
@@ -122,6 +122,9 @@ public class TestGenericUDFMonthsBetween extends TestCase {
     runTestStr(null, null, null, udf);
 
     runTestStr("2003-04-23", "2002-04-24", 11.96774194, udf);
+
+    //Test for Julian vs Gregorian dates
+    runTestStr("1582-10-05", "1582-11-05", -1., udf);
   }
 
 
diff --git a/ql/src/test/queries/clientpositive/udf_day.q 
b/ql/src/test/queries/clientpositive/udf_day.q
index fb9b57da015..4b2ad426bf1 100644
--- a/ql/src/test/queries/clientpositive/udf_day.q
+++ b/ql/src/test/queries/clientpositive/udf_day.q
@@ -1,2 +1,5 @@
 DESCRIBE FUNCTION day;
 DESCRIBE FUNCTION EXTENDED day;
+
+select month('2005-01-02');
+select month('1001-01-05');
diff --git a/ql/src/test/queries/clientpositive/udf_month.q 
b/ql/src/test/queries/clientpositive/udf_month.q
index 0a582ba37e3..2b4363e6d45 100644
--- a/ql/src/test/queries/clientpositive/udf_month.q
+++ b/ql/src/test/queries/clientpositive/udf_month.q
@@ -1,2 +1,5 @@
-DESCRIBE FUNCTION minute;
-DESCRIBE FUNCTION EXTENDED minute;
+DESCRIBE FUNCTION month;
+DESCRIBE FUNCTION EXTENDED month;
+
+select month('2005-01-02');
+select month('1001-01-05');
diff --git a/ql/src/test/queries/clientpositive/udf_weekofyear.q 
b/ql/src/test/queries/clientpositive/udf_weekofyear.q
index abb0a2d7d2c..c6a62215c83 100644
--- a/ql/src/test/queries/clientpositive/udf_weekofyear.q
+++ b/ql/src/test/queries/clientpositive/udf_weekofyear.q
@@ -6,3 +6,7 @@ DESCRIBE FUNCTION EXTENDED weekofyear;
 SELECT weekofyear('1980-01-01'), weekofyear('1980-01-06'), 
weekofyear('1980-01-07'), weekofyear('1980-12-31'),
 weekofyear('1984-1-1'), weekofyear('2008-02-20 00:00:00'), 
weekofyear('1980-12-28 23:59:59'), weekofyear('1980-12-29 23:59:59')
 FROM src tablesample (1 rows);
+
+SELECT weekofyear('1007-01-01 10:13:14');
+SELECT weekofyear('1008-01-01 10:13:14');
+SELECT weekofyear('1009-01-01 10:13:14');
diff --git a/ql/src/test/queries/clientpositive/udf_year.q 
b/ql/src/test/queries/clientpositive/udf_year.q
new file mode 100644
index 00000000000..23d7313d854
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/udf_year.q
@@ -0,0 +1,5 @@
+DESCRIBE FUNCTION year;
+DESCRIBE FUNCTION EXTENDED year;
+
+select year('2005-01-02');
+select year('1001-01-05');
diff --git 
a/ql/src/test/results/clientpositive/llap/vectorized_timestamp_funcs.q.out 
b/ql/src/test/results/clientpositive/llap/vectorized_timestamp_funcs.q.out
index 2412607420d..027e3e678c7 100644
--- a/ql/src/test/results/clientpositive/llap/vectorized_timestamp_funcs.q.out
+++ b/ql/src/test/results/clientpositive/llap/vectorized_timestamp_funcs.q.out
@@ -415,7 +415,7 @@ POSTHOOK: Input: default@alltypesorc_string
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:55.451 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:55.451 NULL    1969-12-31 15:59:55.451
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:58.174 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:58.174 NULL    1969-12-31 15:59:58.174
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:58.456 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:58.456 NULL    1969-12-31 15:59:58.456
--45479202281   528     10      25      25      43      8       15      18      
true    0528-10-27 08:15:18.941718273   NULL    0528-10-27 08:15:18.941718273   
2000-12-18 08:42:30.0005        0528-10-27 08:15:18.941718273   0528-10-27 
08:15:18.941718273   NULL
+-45479202281   528     10      27      27      44      8       15      18      
true    0528-10-27 08:15:18.941718273   NULL    0528-10-27 08:15:18.941718273   
2000-12-18 08:42:30.0005        0528-10-27 08:15:18.941718273   0528-10-27 
08:15:18.941718273   NULL
 1632453512     2021    9       24      24      38      3       18      32      
NULL    2021-09-24 03:18:32.4   1974-10-04 17:21:03.989 1319-02-02 16:31:57.778 
2021-09-24 03:18:32.4   1974-10-04 17:21:03.989 NULL    1974-10-04 17:21:03.989
 1632453512     2021    9       24      24      38      3       18      32      
false   2021-09-24 03:18:32.4   1999-10-03 16:59:10.396903939   1319-02-02 
16:31:57.778 2021-09-24 03:18:32.4   1999-10-03 16:59:10.396903939   NULL    
1999-10-03 16:59:10.396903939
 1632453512     2021    9       24      24      38      3       18      32      
false   2021-09-24 03:18:32.4   2010-04-08 02:43:35.861742727   1319-02-02 
16:31:57.778 2021-09-24 03:18:32.4   2010-04-08 02:43:35.861742727   NULL    
2010-04-08 02:43:35.861742727
@@ -614,7 +614,7 @@ POSTHOOK: Input: default@alltypesorc_string
 -30    1969    12      31      31      1       23      59      30
 -30    1969    12      31      31      1       23      59      30
 -30    1969    12      31      31      1       23      59      30
--62018199211   4       9       24      22      39      18      26      29
+-62018199211   4       9       22      22      39      18      26      29
 1365554626     2013    4       10      10      15      0       43      46
 206730996125   8521    1       16      16      3       20      42      5
 271176065      1978    8       5       5       31      14      41      5
@@ -969,7 +969,7 @@ ORDER BY c1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc_wrong
 #### A masked pattern was here ####
-NULL   2       12      2       NULL    49      4       40      39
+NULL   2       11      30      NULL    48      4       40      39
 NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
 NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
 PREHOOK: query: EXPLAIN VECTORIZATION EXPRESSION  SELECT
diff --git 
a/ql/src/test/results/clientpositive/spark/vectorized_timestamp_funcs.q.out 
b/ql/src/test/results/clientpositive/spark/vectorized_timestamp_funcs.q.out
index 482086c86b3..888789d688f 100644
--- a/ql/src/test/results/clientpositive/spark/vectorized_timestamp_funcs.q.out
+++ b/ql/src/test/results/clientpositive/spark/vectorized_timestamp_funcs.q.out
@@ -413,7 +413,7 @@ POSTHOOK: Input: default@alltypesorc_string
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:55.451 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:55.451 NULL    1969-12-31 15:59:55.451
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:58.174 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:58.174 NULL    1969-12-31 15:59:58.174
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:58.456 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:58.456 NULL    1969-12-31 15:59:58.456
--45479202281   528     10      25      25      43      8       15      18      
true    0528-10-27 08:15:18.941718273   NULL    0528-10-27 08:15:18.941718273   
2000-12-18 08:42:30.0005        0528-10-27 08:15:18.941718273   0528-10-27 
08:15:18.941718273   NULL
+-45479202281   528     10      27      27      44      8       15      18      
true    0528-10-27 08:15:18.941718273   NULL    0528-10-27 08:15:18.941718273   
2000-12-18 08:42:30.0005        0528-10-27 08:15:18.941718273   0528-10-27 
08:15:18.941718273   NULL
 1632453512     2021    9       24      24      38      3       18      32      
NULL    2021-09-24 03:18:32.4   1974-10-04 17:21:03.989 1319-02-02 16:31:57.778 
2021-09-24 03:18:32.4   1974-10-04 17:21:03.989 NULL    1974-10-04 17:21:03.989
 1632453512     2021    9       24      24      38      3       18      32      
false   2021-09-24 03:18:32.4   1999-10-03 16:59:10.396903939   1319-02-02 
16:31:57.778 2021-09-24 03:18:32.4   1999-10-03 16:59:10.396903939   NULL    
1999-10-03 16:59:10.396903939
 1632453512     2021    9       24      24      38      3       18      32      
false   2021-09-24 03:18:32.4   2010-04-08 02:43:35.861742727   1319-02-02 
16:31:57.778 2021-09-24 03:18:32.4   2010-04-08 02:43:35.861742727   NULL    
2010-04-08 02:43:35.861742727
@@ -610,7 +610,7 @@ POSTHOOK: Input: default@alltypesorc_string
 -30    1969    12      31      31      1       23      59      30
 -30    1969    12      31      31      1       23      59      30
 -30    1969    12      31      31      1       23      59      30
--62018199211   4       9       24      22      39      18      26      29
+-62018199211   4       9       22      22      39      18      26      29
 1365554626     2013    4       10      10      15      0       43      46
 206730996125   8521    1       16      16      3       20      42      5
 271176065      1978    8       5       5       31      14      41      5
@@ -961,7 +961,7 @@ ORDER BY c1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc_wrong
 #### A masked pattern was here ####
-NULL   2       12      2       NULL    49      4       40      39
+NULL   2       11      30      NULL    48      4       40      39
 NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
 NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
 PREHOOK: query: EXPLAIN VECTORIZATION EXPRESSION  SELECT
diff --git a/ql/src/test/results/clientpositive/udf_day.q.out 
b/ql/src/test/results/clientpositive/udf_day.q.out
index 48e816123e5..8e12825caee 100644
--- a/ql/src/test/results/clientpositive/udf_day.q.out
+++ b/ql/src/test/results/clientpositive/udf_day.q.out
@@ -18,3 +18,21 @@ param can be one of:
   30
 Function class:org.apache.hadoop.hive.ql.udf.UDFDayOfMonth
 Function type:BUILTIN
+PREHOOK: query: select month('2005-01-02')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select month('2005-01-02')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+1
+PREHOOK: query: select month('1001-01-05')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select month('1001-01-05')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+1
diff --git a/ql/src/test/results/clientpositive/udf_month.q.out 
b/ql/src/test/results/clientpositive/udf_month.q.out
index c07c98fafb9..068f2ff2f4b 100644
--- a/ql/src/test/results/clientpositive/udf_month.q.out
+++ b/ql/src/test/results/clientpositive/udf_month.q.out
@@ -1,20 +1,37 @@
-PREHOOK: query: DESCRIBE FUNCTION minute
+PREHOOK: query: DESCRIBE FUNCTION month
 PREHOOK: type: DESCFUNCTION
-POSTHOOK: query: DESCRIBE FUNCTION minute
+POSTHOOK: query: DESCRIBE FUNCTION month
 POSTHOOK: type: DESCFUNCTION
-minute(param) - Returns the minute component of the string/timestamp/interval
-PREHOOK: query: DESCRIBE FUNCTION EXTENDED minute
+month(param) - Returns the month component of the date/timestamp/interval
+PREHOOK: query: DESCRIBE FUNCTION EXTENDED month
 PREHOOK: type: DESCFUNCTION
-POSTHOOK: query: DESCRIBE FUNCTION EXTENDED minute
+POSTHOOK: query: DESCRIBE FUNCTION EXTENDED month
 POSTHOOK: type: DESCFUNCTION
-minute(param) - Returns the minute component of the string/timestamp/interval
+month(param) - Returns the month component of the date/timestamp/interval
 param can be one of:
-1. A string in the format of 'yyyy-MM-dd HH:mm:ss' or 'HH:mm:ss'.
-2. A timestamp value
-3. A day-time interval valueExample:
-   > SELECT minute('2009-07-30 12:58:59') FROM src LIMIT 1;
-  58
-  > SELECT minute('12:58:59') FROM src LIMIT 1;
-  58
-Function class:org.apache.hadoop.hive.ql.udf.UDFMinute
+1. A string in the format of 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'.
+2. A date value
+3. A timestamp value
+4. A year-month interval valueExample:
+  > SELECT month('2009-07-30') FROM src LIMIT 1;
+  7
+Function class:org.apache.hadoop.hive.ql.udf.UDFMonth
 Function type:BUILTIN
+PREHOOK: query: select month('2005-01-02')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select month('2005-01-02')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+1
+PREHOOK: query: select month('1001-01-05')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select month('1001-01-05')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+1
diff --git a/ql/src/test/results/clientpositive/udf_weekofyear.q.out 
b/ql/src/test/results/clientpositive/udf_weekofyear.q.out
index 6e6c661dbf6..f003af05c7e 100644
--- a/ql/src/test/results/clientpositive/udf_weekofyear.q.out
+++ b/ql/src/test/results/clientpositive/udf_weekofyear.q.out
@@ -28,3 +28,30 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
 #### A masked pattern was here ####
 1      1       2       1       52      8       52      1
+PREHOOK: query: SELECT weekofyear('1007-01-01 10:13:14')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT weekofyear('1007-01-01 10:13:14')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+1
+PREHOOK: query: SELECT weekofyear('1008-01-01 10:13:14')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT weekofyear('1008-01-01 10:13:14')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+53
+PREHOOK: query: SELECT weekofyear('1009-01-01 10:13:14')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT weekofyear('1009-01-01 10:13:14')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+52
diff --git a/ql/src/test/results/clientpositive/udf_year.q.out 
b/ql/src/test/results/clientpositive/udf_year.q.out
new file mode 100644
index 00000000000..49ca05649f6
--- /dev/null
+++ b/ql/src/test/results/clientpositive/udf_year.q.out
@@ -0,0 +1,37 @@
+PREHOOK: query: DESCRIBE FUNCTION year
+PREHOOK: type: DESCFUNCTION
+POSTHOOK: query: DESCRIBE FUNCTION year
+POSTHOOK: type: DESCFUNCTION
+year(param) - Returns the year component of the date/timestamp/interval
+PREHOOK: query: DESCRIBE FUNCTION EXTENDED year
+PREHOOK: type: DESCFUNCTION
+POSTHOOK: query: DESCRIBE FUNCTION EXTENDED year
+POSTHOOK: type: DESCFUNCTION
+year(param) - Returns the year component of the date/timestamp/interval
+param can be one of:
+1. A string in the format of 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'.
+2. A date value
+3. A timestamp value
+4. A year-month interval valueExample:
+   > SELECT year('2009-07-30') FROM src LIMIT 1;
+  2009
+Function class:org.apache.hadoop.hive.ql.udf.UDFYear
+Function type:BUILTIN
+PREHOOK: query: select year('2005-01-02')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select year('2005-01-02')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+2005
+PREHOOK: query: select year('1001-01-05')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select year('1001-01-05')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+1001
diff --git 
a/ql/src/test/results/clientpositive/vectorized_timestamp_funcs.q.out 
b/ql/src/test/results/clientpositive/vectorized_timestamp_funcs.q.out
index 193c3231499..56cbf207747 100644
--- a/ql/src/test/results/clientpositive/vectorized_timestamp_funcs.q.out
+++ b/ql/src/test/results/clientpositive/vectorized_timestamp_funcs.q.out
@@ -398,7 +398,7 @@ POSTHOOK: Input: default@alltypesorc_string
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:55.451 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:55.451 NULL    1969-12-31 15:59:55.451
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:58.174 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:58.174 NULL    1969-12-31 15:59:58.174
 -29    1969    12      31      31      1       23      59      30      NULL    
1969-12-31 23:59:30.929 1969-12-31 15:59:58.456 1319-02-02 16:31:57.778 
1969-12-31 23:59:30.929 1969-12-31 15:59:58.456 NULL    1969-12-31 15:59:58.456
--45479202281   528     10      25      25      43      8       15      18      
true    0528-10-27 08:15:18.941718273   NULL    0528-10-27 08:15:18.941718273   
2000-12-18 08:42:30.0005        0528-10-27 08:15:18.941718273   0528-10-27 
08:15:18.941718273   NULL
+-45479202281   528     10      27      27      44      8       15      18      
true    0528-10-27 08:15:18.941718273   NULL    0528-10-27 08:15:18.941718273   
2000-12-18 08:42:30.0005        0528-10-27 08:15:18.941718273   0528-10-27 
08:15:18.941718273   NULL
 1632453512     2021    9       24      24      38      3       18      32      
NULL    2021-09-24 03:18:32.4   1974-10-04 17:21:03.989 1319-02-02 16:31:57.778 
2021-09-24 03:18:32.4   1974-10-04 17:21:03.989 NULL    1974-10-04 17:21:03.989
 1632453512     2021    9       24      24      38      3       18      32      
false   2021-09-24 03:18:32.4   1999-10-03 16:59:10.396903939   1319-02-02 
16:31:57.778 2021-09-24 03:18:32.4   1999-10-03 16:59:10.396903939   NULL    
1999-10-03 16:59:10.396903939
 1632453512     2021    9       24      24      38      3       18      32      
false   2021-09-24 03:18:32.4   2010-04-08 02:43:35.861742727   1319-02-02 
16:31:57.778 2021-09-24 03:18:32.4   2010-04-08 02:43:35.861742727   NULL    
2010-04-08 02:43:35.861742727
@@ -580,7 +580,7 @@ POSTHOOK: Input: default@alltypesorc_string
 -30    1969    12      31      31      1       23      59      30
 -30    1969    12      31      31      1       23      59      30
 -30    1969    12      31      31      1       23      59      30
--62018199211   4       9       24      22      39      18      26      29
+-62018199211   4       9       22      22      39      18      26      29
 1365554626     2013    4       10      10      15      0       43      46
 206730996125   8521    1       16      16      3       20      42      5
 271176065      1978    8       5       5       31      14      41      5
@@ -901,7 +901,7 @@ ORDER BY c1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alltypesorc_wrong
 #### A masked pattern was here ####
-NULL   2       12      2       NULL    49      4       40      39
+NULL   2       11      30      NULL    48      4       40      39
 NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
 NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
 PREHOOK: query: EXPLAIN VECTORIZATION EXPRESSION  SELECT


Reply via email to