如何查询 UUID 值而不必在 HTSQL 中将它们显式转换为字符串

How do I query UUID values without having to explicitly cast them to string in HTSQL

我有一个由 UUID 字段索引的 table,使用 postgres 的 uuid-ossp 扩展,所有 运行 在 python 应用程序上。每次过滤 UUID 字段时,我都必须显式转换 uuid 字段:

htsql = HTSQL('pgsql:///my_database')
htsql.produce("/product.filter(string(id) = '00002094-b1c3-11e3-92b8-6bb3666a756f')")

如果我不投 id 我有以下错误:

htsql.produce("/product.filter(id = '00002094-b1c3-11e3-92b8-6bb3666a756f')")

Cannot coerce values of types (opaque, untyped) to a common type
While translating:
    /product.filter(id = '00002094-b1c3-11e3-92b8-6bb3666a756f')

HTSQL 似乎无法识别 UUID 类型。所以我的问题是:

有没有办法告诉HTSQL如何识别UUID?我也可以在命令行界面上执行此操作吗?

通过查看 HTSQL 的源代码,我目前对这个问题的解决方案是使用它的内省 类 告诉 HTSQL 将 UUID 识别为文本:

class IntrospectPGSQLUUIDDomain(IntrospectPGSQLDomain):                    
    call(('pg_catalog', 'uuid'))                                           

    @classmethod                                                           
    def __enabled__(cls):                                                  
        return True                                                        

    def __call__(self):                                                    
        return TextDomain()

然后告诉 HTSQL 在创建数据库连接后对其进行检查:

htsql = HTSQL('pgsql:///my_database')                      
with htsql:                                                         
    introspect() 

这解决了我在 python 应用程序上的问题,但我仍然需要找到一种在命令行上执行此操作的方法。