more robust sqlite subquery tests and first tests of \!intersects\! token - refs #809
This commit is contained in:
parent
c7a6dc597a
commit
312e98a869
1 changed files with 114 additions and 19 deletions
|
@ -83,6 +83,9 @@ if 'sqlite' in mapnik.DatasourceCache.instance().plugin_names():
|
||||||
table='(select * from world_merc INNER JOIN business on world_merc.iso3 = business.ISO3 limit 100)',
|
table='(select * from world_merc INNER JOIN business on world_merc.iso3 = business.ISO3 limit 100)',
|
||||||
attachdb='busines@business.sqlite'
|
attachdb='busines@business.sqlite'
|
||||||
)
|
)
|
||||||
|
eq_(len(ds.fields()),29)
|
||||||
|
eq_(ds.fields(),['OGC_FID', 'fips', 'iso2', 'iso3', 'un', 'name', 'area', 'pop2005', 'region', 'subregion', 'lon', 'lat', 'ISO3:1', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010'])
|
||||||
|
eq_(ds.field_types(),['int', 'str', 'str', 'str', 'int', 'str', 'int', 'int', 'int', 'int', 'float', 'float', 'str', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'])
|
||||||
fs = ds.featureset()
|
fs = ds.featureset()
|
||||||
feature = fs.next()
|
feature = fs.next()
|
||||||
eq_(feature.id(),1)
|
eq_(feature.id(),1)
|
||||||
|
@ -126,6 +129,71 @@ if 'sqlite' in mapnik.DatasourceCache.instance().plugin_names():
|
||||||
#import pdb;pdb.set_trace()
|
#import pdb;pdb.set_trace()
|
||||||
print 'invalid key/v %s/%s for: %s' % (k,v,feature)
|
print 'invalid key/v %s/%s for: %s' % (k,v,feature)
|
||||||
|
|
||||||
|
def test_attachdb_with_sql_join_count():
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
|
table='(select * from world_merc INNER JOIN business on world_merc.iso3 = business.ISO3 limit 100)',
|
||||||
|
attachdb='busines@business.sqlite'
|
||||||
|
)
|
||||||
|
eq_(len(ds.fields()),29)
|
||||||
|
eq_(ds.fields(),['OGC_FID', 'fips', 'iso2', 'iso3', 'un', 'name', 'area', 'pop2005', 'region', 'subregion', 'lon', 'lat', 'ISO3:1', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010'])
|
||||||
|
eq_(ds.field_types(),['int', 'str', 'str', 'str', 'int', 'str', 'int', 'int', 'int', 'int', 'float', 'float', 'str', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'])
|
||||||
|
eq_(len(ds.all_features()),100)
|
||||||
|
|
||||||
|
def test_attachdb_with_sql_join_count2():
|
||||||
|
'''
|
||||||
|
sqlite3 world.sqlite
|
||||||
|
attach database 'business.sqlite' as business;
|
||||||
|
select count(*) from world_merc INNER JOIN business on world_merc.iso3 = business.ISO3;
|
||||||
|
'''
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
|
table='(select * from world_merc INNER JOIN business on world_merc.iso3 = business.ISO3)',
|
||||||
|
attachdb='busines@business.sqlite'
|
||||||
|
)
|
||||||
|
eq_(len(ds.fields()),29)
|
||||||
|
eq_(ds.fields(),['OGC_FID', 'fips', 'iso2', 'iso3', 'un', 'name', 'area', 'pop2005', 'region', 'subregion', 'lon', 'lat', 'ISO3:1', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010'])
|
||||||
|
eq_(ds.field_types(),['int', 'str', 'str', 'str', 'int', 'str', 'int', 'int', 'int', 'int', 'float', 'float', 'str', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'])
|
||||||
|
eq_(len(ds.all_features()),192)
|
||||||
|
|
||||||
|
def test_attachdb_with_sql_join_count3():
|
||||||
|
'''
|
||||||
|
select count(*) from (select * from world_merc where 1=1) as world_merc INNER JOIN business on world_merc.iso3 = business.ISO3;
|
||||||
|
'''
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
|
table='(select * from (select * from world_merc where !intersects!) as world_merc INNER JOIN business on world_merc.iso3 = business.ISO3)',
|
||||||
|
attachdb='busines@business.sqlite'
|
||||||
|
)
|
||||||
|
eq_(len(ds.fields()),29)
|
||||||
|
eq_(ds.fields(),['OGC_FID', 'fips', 'iso2', 'iso3', 'un', 'name', 'area', 'pop2005', 'region', 'subregion', 'lon', 'lat', 'ISO3:1', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010'])
|
||||||
|
eq_(ds.field_types(),['int', 'str', 'str', 'str', 'int', 'str', 'int', 'int', 'int', 'int', 'float', 'float', 'str', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'])
|
||||||
|
eq_(len(ds.all_features()),192)
|
||||||
|
|
||||||
|
def test_attachdb_with_sql_join_count4():
|
||||||
|
'''
|
||||||
|
select count(*) from (select * from world_merc where 1=1) as world_merc INNER JOIN business on world_merc.iso3 = business.ISO3;
|
||||||
|
'''
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
|
table='(select * from (select * from world_merc where !intersects! limit 1) as world_merc INNER JOIN business on world_merc.iso3 = business.ISO3)',
|
||||||
|
attachdb='busines@business.sqlite'
|
||||||
|
)
|
||||||
|
eq_(len(ds.fields()),29)
|
||||||
|
eq_(ds.fields(),['OGC_FID', 'fips', 'iso2', 'iso3', 'un', 'name', 'area', 'pop2005', 'region', 'subregion', 'lon', 'lat', 'ISO3:1', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010'])
|
||||||
|
eq_(ds.field_types(),['int', 'str', 'str', 'str', 'int', 'str', 'int', 'int', 'int', 'int', 'float', 'float', 'str', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'])
|
||||||
|
eq_(len(ds.all_features()),1)
|
||||||
|
|
||||||
|
def test_attachdb_with_sql_join_count5():
|
||||||
|
'''
|
||||||
|
select count(*) from (select * from world_merc where 1=1) as world_merc INNER JOIN business on world_merc.iso3 = business.ISO3;
|
||||||
|
'''
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
|
table='(select * from (select * from world_merc where !intersects! and 1=2) as world_merc INNER JOIN business on world_merc.iso3 = business.ISO3)',
|
||||||
|
attachdb='busines@business.sqlite'
|
||||||
|
)
|
||||||
|
# nothing is able to join to business so we don't pick up business schema
|
||||||
|
eq_(len(ds.fields()),12)
|
||||||
|
eq_(ds.fields(),['OGC_FID', 'fips', 'iso2', 'iso3', 'un', 'name', 'area', 'pop2005', 'region', 'subregion', 'lon', 'lat'])
|
||||||
|
eq_(ds.field_types(),['int', 'str', 'str', 'str', 'int', 'str', 'int', 'int', 'int', 'int', 'float', 'float'])
|
||||||
|
eq_(len(ds.all_features()),0)
|
||||||
|
|
||||||
def test_subqueries():
|
def test_subqueries():
|
||||||
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
table='world_merc',
|
table='world_merc',
|
||||||
|
@ -179,14 +247,16 @@ if 'sqlite' in mapnik.DatasourceCache.instance().plugin_names():
|
||||||
eq_(feature['OGC_FID'],1)
|
eq_(feature['OGC_FID'],1)
|
||||||
eq_(feature['fips'],u'AC')
|
eq_(feature['fips'],u'AC')
|
||||||
|
|
||||||
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
# same as above, except with alias like postgres requires
|
||||||
table='(select GEOMETRY,rowid as aliased_id,fips from world_merc)',
|
# TODO - should we try to make this work?
|
||||||
key_field='aliased_id'
|
#ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
)
|
# table='(select GEOMETRY,rowid as aliased_id,fips from world_merc) as table',
|
||||||
fs = ds.featureset()
|
# key_field='aliased_id'
|
||||||
feature = fs.next()
|
# )
|
||||||
eq_(feature['aliased_id'],1)
|
#fs = ds.featureset()
|
||||||
eq_(feature['fips'],u'AC')
|
#feature = fs.next()
|
||||||
|
#eq_(feature['aliased_id'],1)
|
||||||
|
#eq_(feature['fips'],u'AC')
|
||||||
|
|
||||||
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
ds = mapnik.SQLite(file='../data/sqlite/world.sqlite',
|
||||||
table='(select GEOMETRY,OGC_FID,OGC_FID as rowid,fips from world_merc)',
|
table='(select GEOMETRY,OGC_FID,OGC_FID as rowid,fips from world_merc)',
|
||||||
|
@ -220,6 +290,31 @@ if 'sqlite' in mapnik.DatasourceCache.instance().plugin_names():
|
||||||
query.add_property_name('bogus')
|
query.add_property_name('bogus')
|
||||||
fs = ds.features(query)
|
fs = ds.features(query)
|
||||||
|
|
||||||
|
def test_intersects_token1():
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/empty.db',
|
||||||
|
table='(select * from empty where !intersects!)',
|
||||||
|
)
|
||||||
|
fs = ds.featureset()
|
||||||
|
feature = fs.next()
|
||||||
|
eq_(feature,None)
|
||||||
|
|
||||||
|
def test_intersects_token1():
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/empty.db',
|
||||||
|
table='(select * from empty where "a"!="b" and !intersects!)',
|
||||||
|
)
|
||||||
|
fs = ds.featureset()
|
||||||
|
feature = fs.next()
|
||||||
|
eq_(feature,None)
|
||||||
|
|
||||||
|
def test_intersects_token1():
|
||||||
|
ds = mapnik.SQLite(file='../data/sqlite/empty.db',
|
||||||
|
table='(select * from empty where "a"!="b" and !intersects!)',
|
||||||
|
)
|
||||||
|
fs = ds.featureset()
|
||||||
|
feature = fs.next()
|
||||||
|
eq_(feature,None)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
setup()
|
setup()
|
||||||
[eval(run)() for run in dir() if 'test_' in run]
|
[eval(run)() for run in dir() if 'test_' in run]
|
||||||
|
|
Loading…
Reference in a new issue