getGeometryColumnsForTable method

Future<GeometryColumn?> getGeometryColumnsForTable(
  1. 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;
}