@Override public List<Object> visitValues(Values values,QueryState state){
  List<Object> result=new ArrayList<Object>();
  for (  Expression rowExpression : values.getRows()) {
    if (rowExpression instanceof Row) {
      Row row=(Row)rowExpression;
      for (      Expression rowValue : row.getItems()) {
        if (!(rowValue instanceof Literal)) {
          state.addException("Unable to parse non-literal value : " + rowValue);
          return result;
        }
        result.add(getObject((Literal)rowValue));
      }
    }
 else     if (rowExpression instanceof Literal) {
      result.add(getObject((Literal)rowExpression));
    }
 else {
      state.addException("Unknown VALUES type " + rowExpression.getClass() + " encountered");
      return null;
    }
  }
  return result;
}

@ Override public List < Object > visitValues ( Values values , QueryState state ) { List < Object > result = new ArrayList < Object > ( ) ; for ( Expression rowExpression : values . getRows ( ) ) { if ( rowExpression instanceof Row ) { Row row = ( Row ) rowExpression ; for ( Expression rowValue : row . getItems ( ) ) { if ( ! ( rowValue instanceof Literal ) ) { state . addException ( "Unable to parse non-literal value : " + rowValue ) ; return result ; } result . add ( getObject ( ( Literal ) rowValue ) ) ; } } else if ( rowExpression instanceof Literal ) { result . add ( getObject ( ( Literal ) rowExpression ) ) ; } else { state . addException ( "Unknown VALUES type " + rowExpression . getClass ( ) + " encountered" ) ; return null ; } } return result ; }
parses the list with values to insert and returns them as objects
