public List<Type> types(Connection connection) {
        try (ResultSet resultSet = connection.getMetaData().getTypeInfo();) {
            return ResultSetUtils.toObjectList(resultSet, ai.chat2db.spi.model.Type.class);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
Retrieves a description of all the data types supported by this database. They are ordered by DATA_TYPE and then
by how closely the data type maps to the corresponding JDBC SQL type. If the database supports SQL distinct
types, then getTypeInfo() will return a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of
Types.DISTINCT. If the database supports SQL structured types, then getTypeInfo() will return a single row with a
TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT. If SQL distinct or structured types are supported, then
information on the individual types may be obtained from the getUDTs() method.

@param connection connection
@return List<Function>
chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java