RFC 55:精炼的SetFeature()和DeleteFeature()语义

作者:连鲁奥

联系人:spatialys.com上的even dot rouault

状态:采用,在GDAL 2.0中实现

总结

此RFC改进了SetFeature()和DeleteFeature()的语义,以便能够区分名义大小写、更新/删除不存在的功能的尝试以及更新/删除现有功能的失败。

理论基础

目前,根据驱动程序的不同,对不存在的功能调用SetFeature()或DeleteFeature()可能成功,也可能失败。通常不希望这些函数返回OGRERR_NONE代码,因为在大多数情况下,这可能是无效输入的迹象。因此,引入了OGRERR_NON_EXISTING_FEATURE返回代码,以便驱动程序可以通知调用代码它试图更新或删除不存在的功能。

变化

#define OGRERR_NON_EXISTING_FEATURE 9添加到ogr_core.h

更新的驱动程序

更新以下驱动程序以实现新的语义:PostgreSQL、CartoDB、SQLite、GPKG、MySQL、OCI、FileGDB、Shape、MITAB

注意:MSSQL也可能被更新

告诫

shapefile驱动程序的行为有点特殊,因为它的SetFeature()实现接受重新创建已删除的功能(并且它的CreateFeature()实现忽略传递的功能上的任何set FID来附加新功能)。因此,只有当FID为负或大于或等于最大特征计数时,OGRERRu非现有的u特征才会有效地返回。

SWIG绑定(Python/Java/C#/Perl)更改

添加了OGRERR_NON_EXISTING_功能。所有OGRERR_xxxx常量都公开给Python绑定

公用事业

无影响

文档

SetFeature()和DeleteFeature()的文档中提到了新的错误代码。更新了MIGRATION_GUIDE.TXT,并提到以下兼容性问题。

测试套件

扩展测试套件以测试修改后的驱动程序。testu ogrsf还测试驱动程序更新/删除不存在的特性的行为。

兼容性问题

必须更新希望成功更新或删除不存在的功能的代码。

实施

实施将由甚至鲁奥完成 (Spatialys _),并由 LINZ (Land Information New Zealand) .

建议的实现位于 https://github.com/rouault/gdal2/tree/rfc55_refined_setfeature_deletefeature_semantics 储存库。

更改列表: https://github.com/rouault/gdal2/compare/rfc55_refined_setfeature_deletefeature_semantics

投票历史

+1名来自DanielM、HowardB、JukkaR和Evner