presto-raptor-legacy/src/main/java/io/prestosql/plugin/raptor/legacy/RaptorTableHandle.java/RaptorTableHandle/RaptorTableHandle
class RaptorTableHandle:    @JsonCreator
    public RaptorTableHandle(
            @JsonProperty("schemaName") String schemaName,
            @JsonProperty("tableName") String tableName,
            @JsonProperty("tableId") long tableId,
            @JsonProperty("distributionId") Optional<Long> distributionId,
            @JsonProperty("distributionName") Optional<String> distributionName,
            @JsonProperty("bucketCount") OptionalInt bucketCount,
            @JsonProperty("organized") boolean organized,
            @JsonProperty("transactionId") OptionalLong transactionId,
            @JsonProperty("constraint") TupleDomain<RaptorColumnHandle> constraint,
            // this field will not be in the JSON, but keep it here to avoid duplicating the constructor
            @JsonProperty("bucketAssignments") Optional<List<String>> bucketAssignments,
            @JsonProperty("delete") boolean delete)
    {
        this.schemaName = checkSchemaName(schemaName);
        this.tableName = checkTableName(tableName);

        checkArgument(tableId > 0, "tableId must be greater than zero");
        this.tableId = tableId;

        this.distributionName = requireNonNull(distributionName, "distributionName is null");
        this.distributionId = requireNonNull(distributionId, "distributionId is null");
        this.bucketCount = requireNonNull(bucketCount, "bucketCount is null");
        this.organized = organized;
        this.transactionId = requireNonNull(transactionId, "transactionId is null");

        this.constraint = requireNonNull(constraint, "constraint is null");
        this.bucketAssignments = requireNonNull(bucketAssignments, "bucketAssignments is null").map(ImmutableList::copyOf);
        this.delete = delete;
    }