@@ -67,12 +67,24 @@ getTypeInfo' conn oid oidmap =
6767 [(typoid, typcategory_, typdelim_, typname, typelem_)] -> do
6868 let !typcategory = B8.index typcategory_ 0
6969 !typdelim = B8.index typdelim_ 0
70− if typcategory == 'A'
71− then do
70+ case typcategory of
71+ 'A' -> do
7272 (oidmap', typelem) <- getTypeInfo' conn typelem_ oidmap
7373 let !typeInfo = Array{..}
7474 return (oidmap', typeInfo)
75− else do
75+ 'R' -> do
76+ rngsubtypeOids <- query conn "SELECT rngsubtype\
77+ \ FROM pg_range\
78+ \ WHERE rngtypid = ?"
79+ (Only oid)
80+ case rngsubtypeOids of
81+ [Only rngsubtype_] -> do
82+ (oidmap', rngsubtype) <-
83+ getTypeInfo' conn rngsubtype_ oidmap
84+ let !typeInfo = Range{..}
85+ return (oidmap', typeInfo)
86+ _ -> fail "range subtype query failed to return exactly one result"
87+ _ -> do
7688 let !typeInfo = Basic{..}
7789 return (oidmap, typeInfo)
7890 _ -> fail "typename query returned more than one result"