Jason Roberts wrote:
Even and Frank, thanks for your replies. I am a little confused because you
each appeared to describe different behaviors.
Frank said:
There is currently no way to test if a datastore supports the concept
of NULL fields, but if it does not it should just write a default value
(0.0, empty string, etc).
Even said:
For relational databases such as SQLite,
Postgres or MySQL, this is also supported, unless if you try to write a
NULL
value and the schema of the table constraints the column to be non
NULLable,
you'll get an error when inserting/updating the feature.
Which one is correct, or is it decided on a per-driver basis, with no policy
specified by the OGR team? If this is too much trivia for you bother with,
let me know and I will try to determine it by looking at the code.
Jason,
I imagine Even is correct about the behavior of some of the
RDBMS drivers.
It would be nice if a future version of OGRFieldDefn allowed the caller to
interrogate whether a field can be set to NULL. If it cannot be done, my
personal preference would be for Even's behavior to occur: that
OGRLayer::CreateFeature or SetFeature fails if a NULL field is not allowed
by the underlying format. If NULLs are silently translated to 0.0, empty
string, etc, this could be very bad for certain applications. It would be
nice to protect the user from this, so he doesn't have to remember which
formats support NULL and which do not. I would be happy to create a ticket
if you thought this was worthwhile.
I'm personally ambivalent about this, but I have seen this (an IsNULLABLE
test) in other systems similar to OGR - for instance PCI's GDB.
Even, you mentioned that the shapefile driver supports NULL fields. My
understanding is that shapefiles do not support NULL, at least not according
to ESRI. The only exception are date fields, which sort of support NULL. For
more on that, see
http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Geoprocessing%
20considerations%20for%20shapefile%20output. Does OGR do something
different?
I believe Shapelib writes *** for numeric nulls, zeros for date nulls,
? for logical nulls and an empty string for other nulls. That means, for
instance, that Shapelib and OGR cannot differentiate between empty string
fields and null string fields (they will be reported as NULL).
Best regards,
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, [email protected]
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev