postgis: warn in the unlikely case of a numeric primary key
This commit is contained in:
parent
f99db72e5a
commit
10848f9d04
2 changed files with 24 additions and 1 deletions
|
@ -267,10 +267,14 @@ void postgis_datasource::bind() const
|
|||
{
|
||||
key_field_ = std::string(key_field_string);
|
||||
#ifdef MAPNIK_DEBUG
|
||||
std::clog << "Postgis Plugin: auto-detected key field of '" << key_field_ << "' on '" << geometry_table_ << "'\n";
|
||||
std::clog << "PostGIS Plugin: auto-detected key field of '" << key_field_ << "' on table '" << geometry_table_ << "'\n";
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else // warn with odd cases like numeric primary key
|
||||
{
|
||||
std::clog << "PostGIS Plugin: Warning: '" << rs_key->getValue(0) << "' on table '" << geometry_table_ << "' is not a valid integer primary key field\n";
|
||||
}
|
||||
}
|
||||
else if (result_rows > 1)
|
||||
{
|
||||
|
|
|
@ -105,6 +105,12 @@ INSERT INTO test4(non_id, manual_id, geom) values (0, 2147483647, GeomFromEWKT('
|
|||
INSERT INTO test4(non_id, manual_id, geom) values (0, -2147483648, GeomFromEWKT('SRID=4326;POINT(0 0)'));
|
||||
"""
|
||||
|
||||
insert_table_5 = """
|
||||
CREATE TABLE test5(non_id int4, manual_id numeric PRIMARY KEY, geom geometry);
|
||||
INSERT INTO test5(non_id, manual_id, geom) values (0, -1, GeomFromEWKT('SRID=4326;POINT(0 0)'));
|
||||
INSERT INTO test5(non_id, manual_id, geom) values (0, 1, GeomFromEWKT('SRID=4326;POINT(0 0)'));
|
||||
"""
|
||||
|
||||
def postgis_setup():
|
||||
call('dropdb %s' % MAPNIK_TEST_DBNAME,silent=True)
|
||||
call('createdb -T %s %s' % (POSTGIS_TEMPLATE_DBNAME,MAPNIK_TEST_DBNAME),silent=False)
|
||||
|
@ -114,6 +120,7 @@ def postgis_setup():
|
|||
call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_2),silent=False)
|
||||
call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_3),silent=False)
|
||||
call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_4),silent=False)
|
||||
call('''psql -q %s -c "%s"''' % (MAPNIK_TEST_DBNAME,insert_table_5),silent=False)
|
||||
|
||||
def postgis_takedown():
|
||||
pass
|
||||
|
@ -309,6 +316,18 @@ if 'postgis' in mapnik.DatasourceCache.instance().plugin_names() \
|
|||
eq_(fs.next().id(),2147483647)
|
||||
eq_(fs.next().id(),-2147483648)
|
||||
|
||||
def test_numeric_type_feature_id_field():
|
||||
ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,table='test5',
|
||||
geometry_field='geom',
|
||||
require_key=False)
|
||||
fs = ds.featureset()
|
||||
eq_(fs.next()['manual_id'],-1)
|
||||
eq_(fs.next()['manual_id'],1)
|
||||
|
||||
fs = ds.featureset()
|
||||
eq_(fs.next().id(),1)
|
||||
eq_(fs.next().id(),2)
|
||||
|
||||
atexit.register(postgis_takedown)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Reference in a new issue