diff --git a/src/PgStructure.hs b/src/PgStructure.hs index e1daea479..8ffdbdcc7 100644 --- a/src/PgStructure.hs +++ b/src/PgStructure.hs @@ -46,6 +46,7 @@ data Column = Column { , colUpdatable :: Bool , colMaxLen :: Maybe Int , colPrecision :: Maybe Int +, colDefault :: Maybe String } deriving (Show) instance JSON.ToJSON Column where @@ -57,7 +58,8 @@ instance JSON.ToJSON Column where , "type" .= colType c , "updatable" .= colUpdatable c , "maxLen" .= colMaxLen c - , "precision" .= colPrecision c ] + , "precision" .= colPrecision c + , "default" .= colDefault c ] data TableOptions = TableOptions { tblOptcolumns :: [Column] @@ -91,14 +93,15 @@ columns s t conn = do r <- quickQuery conn "select table_schema, table_name, column_name, ordinal_position,\ \ is_nullable, data_type, is_updatable,\ - \ character_maximum_length, numeric_precision\ + \ character_maximum_length, numeric_precision,\ + \ column_default\ \ from information_schema.columns\ \ where table_schema = ?\ \ and table_name = ?" [toSql s, toSql t] return $ mapMaybe mkColumn r where - mkColumn [schema, table, name, pos, nullable, colT, updatable, maxlen, precision] = + mkColumn [schema, table, name, pos, nullable, colT, updatable, maxlen, precision, defVal] = Just $ Column (fromSql schema) (fromSql table) (fromSql name) @@ -108,6 +111,7 @@ columns s t conn = do (toBool (fromSql updatable)) (fromSql maxlen) (fromSql precision) + (fromSql defVal) mkColumn _ = Nothing printTables :: String -> Connection -> IO BL.ByteString diff --git a/test/Feature/StructureSpec.hs b/test/Feature/StructureSpec.hs index aff595f5d..2d1ecf552 100644 --- a/test/Feature/StructureSpec.hs +++ b/test/Feature/StructureSpec.hs @@ -38,7 +38,8 @@ spec = around appWithFixture $ do "type": "integer", "maxLen": null, "nullable": false, - "position": 1 + "position": 1, + "default": "nextval('\"1\".auto_incrementing_pk_id_seq'::regclass)" }, { "precision": null, "updatable": true, @@ -47,7 +48,8 @@ spec = around appWithFixture $ do "type": "character varying", "maxLen": null, "nullable": true, - "position": 2 + "position": 2, + "default": null }, { "precision": null, "updatable": true, @@ -56,7 +58,8 @@ spec = around appWithFixture $ do "type": "character varying", "maxLen": null, "nullable": false, - "position": 3 + "position": 3, + "default": null }, { "precision": null, "updatable": true, @@ -65,7 +68,8 @@ spec = around appWithFixture $ do "type": "timestamp with time zone", "maxLen": null, "nullable": true, - "position": 4 + "position": 4, + "default": "now()" } ] }