首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用gnatcoll_db2ada的postgresql数据库的Ada接口的模式中使用数组类型

在使用gnatcoll_db2ada的postgresql数据库的Ada接口的模式中使用数组类型
EN

Stack Overflow用户
提问于 2020-12-23 21:36:43
回答 2查看 63关注 0票数 2

我已经创建了一个带有几个表的Postgresql数据库,并且对它们的工作方式相当满意。我还编写了一些Ada代码来与之交互并执行简单的查询。这一切都运行在Slackware 14.2上,使用GNAT 2020。

我的表列之一是数组类型,即BIGINT数组。

我遇到的问题是,当我尝试使用gnatcoll_db2ada为我的Ada创建模式时。

模式文件("all-schema.txt")包括以下行:

item_list | BIGINT[] |||

当我这样做的时候

代码语言:javascript
复制
gnatcoll_db2ada -dbmodel all-schema.txt

我得到了

代码语言:javascript
复制
Error: unknown field type "BIGINT[]"
all-schema.txt:33 gnatcoll-sql-inspect.adb:1420
gnatcoll-sql-inspect.adb:1420

我想要做的事情真的可能吗?

EN

回答 2

Stack Overflow用户

发布于 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)。

请注意,我自己从来没有做过这件事,所以我不知道需要多少努力,也不知道这是否真的是所需的全部;实现新字段类型的确切要求(在撰写本文时)没有文档记录。

票数 3
EN

Stack Overflow用户

发布于 2020-12-24 20:04:20

在简要查看了一下来源后,我对此有同样的怀疑。

我要做的是将数组转到另一个表中。这至少有助于澄清我需要什么,公平地说,数组总是让人感觉有点笨拙。谢谢你的评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65425177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档