我已经创建了一个带有几个表的Postgresql数据库,并且对它们的工作方式相当满意。我还编写了一些Ada代码来与之交互并执行简单的查询。这一切都运行在Slackware 14.2上,使用GNAT 2020。
我的表列之一是数组类型,即BIGINT数组。
我遇到的问题是,当我尝试使用gnatcoll_db2ada为我的Ada创建模式时。
模式文件("all-schema.txt")包括以下行:
item_list | BIGINT[] |||
当我这样做的时候
gnatcoll_db2ada -dbmodel all-schema.txt我得到了
Error: unknown field type "BIGINT[]"
all-schema.txt:33 gnatcoll-sql-inspect.adb:1420
gnatcoll-sql-inspect.adb:1420我想要做的事情真的可能吗?
发布于 2020-12-23 23:13:01
文档建议不支持数组类型的数据库字段(即未提及支持)。从文档SQL: Database interface
字段类型为SQL类型("INTEGER","TEXT","TIMESTAMP","DATE","DOUBLE“,"MONEY","BOOLEAN","TIME","CHARACTER(1)")。可以为字符串指定任何最大长度,而不仅仅是本例中的1。在生成Ada代码时,该工具会自动将这些内容转换为Ada。特殊类型("AUTOINCREMENT")是一个整数,它会根据表中的可用in自动递增。所使用的确切类型将取决于特定的DBMS。
请注意,虽然文档中没有提到标量字段类型"BIGINT“,但在源代码中提到了它(参见gnatcoll-sql.ads)。
如果您确实需要对"BIGINT“数组类型的支持,那么快速浏览一下源代码就会发现,您可以通过以下方式使用新的字段类型扩展GNATCOLL DB接口
使用泛型包GNATCOLL.SQL_Impl.Field_Types (请参见here)和
GNATCOLL.SQL.Inspect.Field_Mapping的新具体类型,请参见GNATCOLL.SQL.Inspect.Field_Mapping似乎新的字段类型通常放在GNATCOLL.SQL_Fields包中(请参阅here)。
请注意,我自己从来没有做过这件事,所以我不知道需要多少努力,也不知道这是否真的是所需的全部;实现新字段类型的确切要求(在撰写本文时)没有文档记录。
发布于 2020-12-24 20:04:20
在简要查看了一下来源后,我对此有同样的怀疑。
我要做的是将数组转到另一个表中。这至少有助于澄清我需要什么,公平地说,数组总是让人感觉有点笨拙。谢谢你的评论。
https://stackoverflow.com/questions/65425177
复制相似问题