@Override
  OpAttr visit(HiveValues valuesRel) throws SemanticException {

    LOG.debug("Translating operator rel#{}:{} with row type: [{}]",
            valuesRel.getId(), valuesRel.getRelTypeName(), valuesRel.getRowType());

    if (!Values.isEmpty(valuesRel)) {
      LOG.error("Empty {} operator translation not supported yet in return path.",
              valuesRel.getClass().getCanonicalName());
      return null;
    }

    Operator<?> ts = createDummyScan();
    hiveOpConverter.getTopOps().put(SemanticAnalyzer.DUMMY_TABLE, (TableScanOperator) ts);
    Operator<?> selOp = createSelect(valuesRel.getRowType(), ts);
    Operator<?> resultOp = createLimit0(selOp.getSchema().getSignature(), selOp);

    LOG.debug("Generated {} with row schema: [{}]", resultOp, resultOp.getSchema());

    return new OpAttr(SemanticAnalyzer.DUMMY_TABLE, Collections.emptySet(), selOp).clone(resultOp);
  }
Converts empty {@link HiveValues} to a plan like
TS [DUMMY] - SEL [null, ..., null] - LIM [0]
ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/opconventer/HiveValuesVisitor.java