def ogr_rfc41_8(): import ogr_sql_sqlite if not ogr_sql_sqlite.ogr_sql_sqlite_available(): return 'skip' ds = ogr.GetDriverByName('memory').CreateDataSource('') lyr = ds.CreateLayer('mytable', geom_type=ogr.wkbPolygon) lyr.GetLayerDefn().GetGeomFieldDefn(0).SetName('geomfield') gfld_defn = ogr.GeomFieldDefn('geomfield2', ogr.wkbPoint25D) sr = osr.SpatialReference() sr.ImportFromEPSG(4326) gfld_defn.SetSpatialRef(sr) lyr.CreateGeomField(gfld_defn) # Check that we get the geometry columns, even with no features sql_lyr = ds.ExecuteSQL('SELECT * FROM mytable', dialect='SQLite') if sql_lyr.GetLayerDefn().GetGeomFieldCount() != 2: print(sql_lyr.GetLayerDefn().GetGeomFieldCount()) gdaltest.post_reason('fail') return 'fail' if sql_lyr.GetLayerDefn().GetGeomFieldDefn(0).GetType() != ogr.wkbPolygon: gdaltest.post_reason('fail') return 'fail' if sql_lyr.GetLayerDefn().GetGeomFieldDefn(0).GetSpatialRef() is not None: gdaltest.post_reason('fail') return 'fail' if sql_lyr.GetLayerDefn().GetGeomFieldDefn(1).GetType() != ogr.wkbPoint25D: gdaltest.post_reason('fail') return 'fail' srs = sql_lyr.GetLayerDefn().GetGeomFieldDefn(1).GetSpatialRef() if srs.GetAuthorityCode(None) != '4326': gdaltest.post_reason('fail') return 'fail' ds.ReleaseResultSet(sql_lyr) # Test INSERT INTO request ds.ExecuteSQL("INSERT INTO mytable (geomfield, geomfield2) VALUES (" + "GeomFromText('POLYGON ((0 0,0 1,1 1,1 0,0 0))'), " + "GeomFromText('POINT Z(0 1 2)') )", dialect='SQLite') # Check output sql_lyr = ds.ExecuteSQL('SELECT geomfield2, geomfield FROM mytable', dialect='SQLite') feat = sql_lyr.GetNextFeature() geom = feat.GetGeomFieldRef('geomfield') if geom.ExportToWkt() != 'POLYGON ((0 0,0 1,1 1,1 0,0 0))': feat.DumpReadable() gdaltest.post_reason('fail') return 'fail' geom = feat.GetGeomFieldRef('geomfield2') if geom.ExportToWkt() != 'POINT (0 1 2)': feat.DumpReadable() gdaltest.post_reason('fail') return 'fail' feat = None ds.ReleaseResultSet(sql_lyr) # Test UPDATE ds.ExecuteSQL("UPDATE mytable SET geomfield2 = " + "GeomFromText('POINT Z(3 4 5)')", dialect='SQLite') # Check output sql_lyr = ds.ExecuteSQL('SELECT geomfield2, geomfield FROM mytable', dialect='SQLite') feat = sql_lyr.GetNextFeature() geom = feat.GetGeomFieldRef('geomfield') if geom.ExportToWkt() != 'POLYGON ((0 0,0 1,1 1,1 0,0 0))': feat.DumpReadable() gdaltest.post_reason('fail') return 'fail' geom = feat.GetGeomFieldRef('geomfield2') if geom.ExportToWkt() != 'POINT (3 4 5)': feat.DumpReadable() gdaltest.post_reason('fail') return 'fail' feat = None ds.ReleaseResultSet(sql_lyr) return 'success'
def ogr_virtualogr_1(): import ogr_sql_sqlite if not ogr_sql_sqlite.ogr_sql_sqlite_available(): return 'skip' # Invalid syntax if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR()"): gdaltest.post_reason('failed') return 'fail' # Nonexistent dataset if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('foo')"): gdaltest.post_reason('failed') return 'fail' # Dataset with 0 layer if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('<OGRVRTDataSource></OGRVRTDataSource>')"): gdaltest.post_reason('failed') return 'fail' # Dataset with more than 1 layer if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data')"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp')"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0)"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 1)"): gdaltest.post_reason('failed') return 'fail' # Invalid value for update_mode if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 'foo')"): gdaltest.post_reason('failed') return 'fail' # Nonexistent layer if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0, 'foo')"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0, 'poly')"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0, 'poly', 0)"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0, 'poly', 1)"): gdaltest.post_reason('failed') return 'fail' if not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0, 'poly', 1, 1)"): gdaltest.post_reason('failed') return 'fail' # Too many arguments if ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR('data/poly.shp', 0, 'poly', 1, 1, bla)"): gdaltest.post_reason('failed') return 'fail' return 'success'