private static ColumnValue newValue(Column column) {
            Type type = column.getType();
            if (type.equals(Types.BOOLEAN)) {
                return new BooleanColumnValue(column);
            } else if (type.equals(Types.DOUBLE)) {
                return new DoubleColumnValue(column);
            } else if (type.equals(Types.LONG)) {
                return new LongColumnValue(column);
            } else if (type.equals(Types.STRING)) {
                return new StringColumnValue(column);
            } else if (type.equals(Types.JSON)) {
                return new JsonColumnValue(column);
            } else if (type.equals(Types.TIMESTAMP)) {
                return new TimestampColumnValue(column);
            } else {
                throw new IllegalStateException("Unsupported type " + type.getName());
            }
        }
Row is a container to stage values before adding into reference lists such as |stringReferences|.

|Row| works as a buffer against plugins that may add values incorrectly without |PageBuilderImpl#addRecord|.
It accepts just one value per column while |PageBuilderImpl| can double-store values regardless of columns.
Double-stored values are overwritten.
embulk-core/src/main/java/org/embulk/spi/PageBuilderImpl.java