/// <summary> /// Queries the data t /// </summary> /// <returns></returns> private PostGisSpatialObjectType GetSpatialObjectType() { var sql = string.Format("SELECT \"udt_name\" from \"information_schema\".\"columns\" " + "WHERE \"table_schema\"='{0}' AND \"table_name\"='{1}' AND \"column_name\"='{2}';", _schema, _table, _geometryColumn); using (var conn = new NpgsqlConnection(ConnectionString)) { conn.Open(); using (var rdr = new NpgsqlCommand(sql, conn).ExecuteReader()) { if (rdr.HasRows) { rdr.Read(); switch (rdr.GetString(0)) { case "geometry": return PostGisSpatialObjectType.Geometry; case "geography": _geometryCast = "::geometry"; return PostGisSpatialObjectType.Geography; default: throw new ArgumentException( "Provided geometry/geography column name does not yield geometry/geography data"); } } } throw new NotSupportedException("Could not find geometry column within tables, need to check view definition"); } }
/// <summary> /// Get the non-spatial columns /// </summary> private void GetNonSpatialColumns() { if (!string.IsNullOrEmpty(_columns)) return; if (string.IsNullOrEmpty(ConnectionID)) return; using (var conn = new NpgsqlConnection(ConnectionString)) { conn.Open(); using (var dr = new NpgsqlCommand(string.Format( "SELECT \"column_name\" FROM \"information_schema\".\"columns\" "+ "WHERE \"table_schema\"='{0}' AND \"table_name\"='{1}';", Schema, Table), conn).ExecuteReader()) { if (!dr.HasRows) throw new InvalidOperationException("Provider configuration incomplete or wrong!"); var columns = new List<string>{ "\"" + ObjectIdColumn + "\"" }; while (dr.Read()) { var column = dr.GetString(0); if (string.Equals(column, ObjectIdColumn)) continue; if (string.Equals(column, GeometryColumn)) continue; columns.Add(string.Format("\"{0}\"", column)); } _columns = string.Join(", ", columns); } } }