presto-base-jdbc/src/main/java/io/prestosql/plugin/jdbc/JdbcOutputTableHandle.java/JdbcOutputTableHandle/JdbcOutputTableHandle
class JdbcOutputTableHandle:    @JsonCreator
    public JdbcOutputTableHandle(
            @JsonProperty("catalogName") @Nullable String catalogName,
            @JsonProperty("schemaName") @Nullable String schemaName,
            @JsonProperty("tableName") String tableName,
            @JsonProperty("columnNames") List<String> columnNames,
            @JsonProperty("columnTypes") List<Type> columnTypes,
            @JsonProperty("jdbcColumnTypes") Optional<List<JdbcTypeHandle>> jdbcColumnTypes,
            @JsonProperty("temporaryTableName") String temporaryTableName)
    {
        this.catalogName = catalogName;
        this.schemaName = schemaName;
        this.tableName = requireNonNull(tableName, "tableName is null");
        this.temporaryTableName = requireNonNull(temporaryTableName, "temporaryTableName is null");

        requireNonNull(columnNames, "columnNames is null");
        requireNonNull(columnTypes, "columnTypes is null");
        checkArgument(columnNames.size() == columnTypes.size(), "columnNames and columnTypes sizes don't match");
        this.columnNames = ImmutableList.copyOf(columnNames);
        this.columnTypes = ImmutableList.copyOf(columnTypes);
        requireNonNull(jdbcColumnTypes, "jdbcColumnTypes is null");
        jdbcColumnTypes.ifPresent(jdbcTypeHandles -> checkArgument(jdbcTypeHandles.size() == columnNames.size(), "columnNames and jdbcColumnTypes sizes don't match"));
        this.jdbcColumnTypes = jdbcColumnTypes.map(ImmutableList::copyOf);
    }