class PrestoDatabaseMetaData implements DatabaseMetaData {

    @Override
    public ResultSet getClientInfoProperties()
            throws SQLException
    {
        ClientTypeSignature varchar = new ClientTypeSignature("varchar", ImmutableList.of(ClientTypeSignatureParameter.ofLong(VARCHAR_UNBOUNDED_LENGTH)));

        ImmutableList.Builder<Column> columns = ImmutableList.builder();
        columns.add(new Column("NAME", "varchar", varchar));
        columns.add(new Column("MAX_LEN", "integer", new ClientTypeSignature("integer")));
        columns.add(new Column("DEFAULT_VALUE", "varchar", varchar));
        columns.add(new Column("DESCRIPTION", "varchar", varchar));

        ImmutableList.Builder<List<Object>> results = ImmutableList.builder();

        Stream.of(ClientInfoProperty.values())
                .sorted(Comparator.comparing(ClientInfoProperty::getPropertyName))
                .forEach(clientInfoProperty -> {
                    results.add(newArrayList(
                            clientInfoProperty.getPropertyName(),
                            VARCHAR_UNBOUNDED_LENGTH,
                            null,
                            null));
                });

        return new InMemoryPrestoResultSet(connection.getTimeZone(), columns.build(), results.build());
    }

      PrestoDatabaseMetaData(PrestoConnection connection);

}