private Operator<? extends OperatorDesc> validateAndVectorizeOperatorTree(
      Operator<? extends OperatorDesc> nonVecRootOperator,
      boolean isReduce, boolean isTez,
      VectorTaskColumnInfo vectorTaskColumnInfo)
          throws VectorizerCannotVectorizeException {

    VectorizationContext taskVContext =
        new VectorizationContext(
            "Task",
            vectorTaskColumnInfo.allColumnNames,
            vectorTaskColumnInfo.allTypeInfos,
            vectorTaskColumnInfo.allDataTypePhysicalVariations,
            hiveConf);

    List<Operator<? extends OperatorDesc>> currentParentList = newOperatorList();
    currentParentList.add(nonVecRootOperator);

    // Start with dummy vector operator as the parent of the parallel vector operator tree we are
    // creating
    Operator<? extends OperatorDesc> dummyVectorOperator = new DummyVectorOperator(taskVContext);
    List<Operator<? extends OperatorDesc>> currentVectorParentList = newOperatorList();
    currentVectorParentList.add(dummyVectorOperator);

    delayedFixups.clear();

    do {
      List<Operator<? extends OperatorDesc>> nextParentList = newOperatorList();
      List<Operator<? extends OperatorDesc>> nextVectorParentList= newOperatorList();

      final int count = currentParentList.size();
      for (int i = 0; i < count; i++) {
        Operator<? extends OperatorDesc> parent = currentParentList.get(i);

        List<Operator<? extends OperatorDesc>> childrenList = parent.getChildOperators();
        if (childrenList == null || childrenList.size() == 0) {
          continue;
        }

        Operator<? extends OperatorDesc> vectorParent = currentVectorParentList.get(i);

        /*
         * Vectorize this parent's children.  Plug them into vectorParent's children list.
         *
         * Add those children / vector children to nextParentList / nextVectorParentList.
         */
        doProcessChildren(
            parent, vectorParent, nextParentList, nextVectorParentList,
            isReduce, isTez, vectorTaskColumnInfo);

      }
      currentParentList = nextParentList;
      currentVectorParentList = nextVectorParentList;
    } while (currentParentList.size() > 0);

    runDelayedFixups();

    return dummyVectorOperator;
  }
Decimal types can be specified with different precision and scales e.g. decimal(10,5),
as opposed to other data types which can be represented by constant strings.
The regex matches only the {@link serdeConstants#DECIMAL_TYPE_NAME} prefix of the type.
ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java