public Object clone() {
    TransExecutorMeta retval = (TransExecutorMeta) super.clone();
    int nrFields = outputRowsField.length;
    retval.allocate( nrFields );
    System.arraycopy( outputRowsField, 0, retval.outputRowsField, 0, nrFields );
    System.arraycopy( outputRowsType, 0, retval.outputRowsType, 0, nrFields );
    System.arraycopy( outputRowsLength, 0, retval.outputRowsLength, 0, nrFields );
    System.arraycopy( outputRowsPrecision, 0, retval.outputRowsPrecision, 0, nrFields );
    return retval;
  }
@Test
  public void testClone() throws Exception {
    TransExecutorMeta meta = new TransExecutorMeta();
    meta.setOutputRowsField( new String[] { "field1", "field2" } );
    meta.setOutputRowsLength( new int[] { 5, 5 } );
    meta.setOutputRowsPrecision( new int[] { 5, 5 } );
    meta.setOutputRowsType( new int[] { 0, 0 } );

    TransExecutorMeta cloned = (TransExecutorMeta) meta.clone();
    assertFalse( cloned.getOutputRowsField() == meta.getOutputRowsField() );
    assertTrue( Arrays.equals( cloned.getOutputRowsField(), meta.getOutputRowsField() ) );
    assertFalse( cloned.getOutputRowsLength() == meta.getOutputRowsLength() );
    assertTrue( Arrays.equals( cloned.getOutputRowsLength(), meta.getOutputRowsLength() ) );
    assertFalse( cloned.getOutputRowsPrecision() == meta.getOutputRowsPrecision() );
    assertTrue( Arrays.equals( cloned.getOutputRowsPrecision(), meta.getOutputRowsPrecision() ) );
    assertFalse( cloned.getOutputRowsType() == meta.getOutputRowsType() );
    assertTrue( Arrays.equals( cloned.getOutputRowsType(), meta.getOutputRowsType() ) );
  }