rewrite tilesets query using pg_catalog

This commit is contained in:
Stepan Kuzmin 2018-02-01 10:26:55 +03:00
parent 2ca5715fcb
commit 680cc507a3
2 changed files with 13 additions and 3 deletions

View File

@ -45,7 +45,6 @@ pub fn chain(conn_string: String, cache_size: usize) -> iron::Chain {
let conn = pool.get().unwrap();
let tilesets = tileset::get_tilesets(conn).unwrap();
chain.link(Read::<tileset::Tilesets>::both(tilesets));
chain.link(Read::<db::DB>::both(pool));
},
Err(error) => {

View File

@ -108,11 +108,22 @@ fn value_to_hashmap(value: serde_json::Value) -> HashMap<String, String> {
pub fn get_tilesets(conn: PostgresConnection) -> Result<HashMap<String, Tileset>, Box<Error>> {
let query = "
WITH columns AS (
SELECT
ns.nspname AS table_schema,
class.relname AS table_name,
attr.attname AS column_name,
trim(leading '_' from tp.typname) AS type_name
FROM pg_attribute attr
JOIN pg_catalog.pg_class AS class ON class.oid = attr.attrelid
JOIN pg_catalog.pg_namespace AS ns ON ns.oid = class.relnamespace
JOIN pg_catalog.pg_type AS tp ON tp.typelem = attr.atttypid
WHERE NOT attr.attisdropped AND attr.attnum > 0)
SELECT
f_table_schema, f_table_name, f_geometry_column, srid, type,
json_object_agg(columns.column_name, columns.udt_name) as properties
jsonb_object_agg(columns.column_name, columns.type_name) as properties
FROM geometry_columns
LEFT JOIN information_schema.columns AS columns ON
LEFT JOIN columns ON
geometry_columns.f_table_schema = columns.table_schema AND
geometry_columns.f_table_name = columns.table_name AND
geometry_columns.f_geometry_column != columns.column_name