getGeometryColumnsForTable method
Future<GeometryColumn?>
getGeometryColumnsForTable(
- TableName tableName
)
Implementation
Future<GeometryColumn?> getGeometryColumnsForTable(
TableName tableName) async {
String indexSql =
"SELECT tablename FROM pg_indexes WHERE upper(tablename) = upper(?) and upper(indexdef) like '%USING GIST%'";
List<String> tablesWithIndex = [];
QueryResult? queryResult =
await _postgresDb.select(indexSql, [tableName.name]);
if (queryResult != null && queryResult.length > 0) {
tablesWithIndex.add(queryResult.first.get("tablename"));
}
String sql = "select " +
PostgisGeometryColumns.F_TABLE_NAME +
", " //
+
PostgisGeometryColumns.F_GEOMETRY_COLUMN +
", " //
+
PostgisGeometryColumns.GEOMETRY_TYPE +
"," //
+
PostgisGeometryColumns.COORD_DIMENSION +
", " //
+
PostgisGeometryColumns.SRID +
" from " //
+
PostgisGeometryColumns.TABLENAME +
" where Lower(" +
PostgisGeometryColumns.F_TABLE_NAME +
")=Lower(?)";
queryResult = await _postgresDb.select(sql, [tableName.name]);
GeometryColumn? gc;
if (queryResult != null && queryResult.length > 0) {
gc = GeometryColumn();
var row = queryResult.first;
String name = row.getAt(0);
gc.tableName = name;
gc.geometryColumnName = row.getAt(1);
String type = row.getAt(2);
gc.geometryType = EGeometryType.forWktName(type);
gc.coordinatesDimension = row.getAt(3);
gc.srid = row.getAt(4);
if (gc.geometryType == EGeometryType.GEOMETRY) {
List<Geometry> list = await getGeometriesIn(tableName, limit: 1);
if (list.isNotEmpty) {
Geometry g = list[0];
gc.geometryType = EGeometryType.forGeometry(g);
}
}
if (tablesWithIndex.contains(name)) {
gc.isSpatialIndexEnabled = 1;
}
}
return gc;
}