Merge branch 'fk'

Conflicts:
	src/PgStructure.hs
	test/Feature/StructureSpec.hs
	test/fixtures/schema.sql
This commit is contained in:
Adam C. Baker
2014-10-09 12:30:39 -07:00
6 changed files with 335 additions and 169 deletions
+36 -9
View File
@@ -1,8 +1,6 @@
-- {{{ Imports {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
module PgStructure where module PgStructure where
import Data.Functor ( (<$>) ) import Data.Functor ( (<$>) )
@@ -14,14 +12,13 @@ import qualified Data.ByteString.Lazy as BL
import Data.List.Split (splitOn) import Data.List.Split (splitOn)
import qualified Data.Aeson as JSON import qualified Data.Aeson as JSON
import qualified Data.Map as Map
import Database.HDBC hiding (colType, colNullable) import Database.HDBC hiding (colType, colNullable)
import Database.HDBC.PostgreSQL import Database.HDBC.PostgreSQL
import Data.Aeson ((.=)) import Data.Aeson ((.=))
-- }}}
data Table = Table { data Table = Table {
tableSchema :: String tableSchema :: String
, tableName :: String , tableName :: String
@@ -37,6 +34,31 @@ instance JSON.ToJSON Table where
toBool :: String -> Bool toBool :: String -> Bool
toBool = (== "YES") toBool = (== "YES")
data ForeignKey = ForeignKey {
fkTable::String, fkCol::String
} deriving (Eq, Show)
instance JSON.ToJSON ForeignKey where
toJSON fk = JSON.object ["table".=fkTable fk, "column".=fkCol fk]
foreignKeys :: String -> String -> Connection -> IO (Map.Map String ForeignKey)
foreignKeys schema table conn = do
r <- quickQuery conn
"select kcu.column_name, ccu.table_name AS foreign_table_name,\
\ ccu.column_name AS foreign_column_name \
\from information_schema.table_constraints AS tc \
\ join information_schema.key_column_usage AS kcu \
\ on tc.constraint_name = kcu.constraint_name \
\ join information_schema.constraint_column_usage AS ccu \
\ on ccu.constraint_name = tc.constraint_name \
\where constraint_type = 'FOREIGN KEY' \
\ and tc.table_name=? and tc.table_schema = ? \
\order by kcu.column_name" (map toSql [table, schema])
return $ foldl addKey Map.empty $ map (map fromSql) r
where
addKey m [col, ftab, fcol] = Map.insert col (ForeignKey ftab fcol) m
addKey m _ = m --should never happen
data Column = Column { data Column = Column {
colSchema :: String colSchema :: String
, colTable :: String , colTable :: String
@@ -49,6 +71,7 @@ data Column = Column {
, colPrecision :: Maybe Int , colPrecision :: Maybe Int
, colDefault :: Maybe String , colDefault :: Maybe String
, colEnum :: Maybe [String] , colEnum :: Maybe [String]
, colFK :: Maybe ForeignKey
} deriving (Show) } deriving (Show)
instance JSON.ToJSON Column where instance JSON.ToJSON Column where
@@ -61,6 +84,7 @@ instance JSON.ToJSON Column where
, "updatable" .= colUpdatable c , "updatable" .= colUpdatable c
, "maxLen" .= colMaxLen c , "maxLen" .= colMaxLen c
, "precision" .= colPrecision c , "precision" .= colPrecision c
, "references".= colFK c
, "default" .= colDefault c , "default" .= colDefault c
, "enum" .= colEnum c ] , "enum" .= colEnum c ]
@@ -120,11 +144,15 @@ columns s t conn = do
\ ) as enum_info \ \ ) as enum_info \
\ on (info.udt_name = enum_info.n) \ \ on (info.udt_name = enum_info.n) \
\order by position" [toSql s, toSql t] \order by position" [toSql s, toSql t]
return $ mapMaybe mkColumn r fks <- foreignKeys s t conn
let lookupFK (_:_:name:_) = Map.lookup (fromSql name) fks
lookupFK _ = Nothing
let cols = zipWith ($) (map mkColumn r) (map lookupFK r)
return cols
where where
mkColumn [schema, table, name, pos, nullable, colT, updatable, maxlen, precision, defVal, enum] = --TODO: handle failed pattern match with an appropriate exception
Just $ Column (fromSql schema) mkColumn [schema, table, name, pos, nullable, colT, updatable, maxlen, precision, defVal, enum] = Column (fromSql schema)
(fromSql table) (fromSql table)
(fromSql name) (fromSql name)
(fromSql pos) (fromSql pos)
@@ -135,7 +163,6 @@ columns s t conn = do
(fromSql precision) (fromSql precision)
(fromSql defVal) (fromSql defVal)
(splitOn "," <$> fromSql enum) (splitOn "," <$> fromSql enum)
mkColumn _ = Nothing
printTables :: String -> Connection -> IO BL.ByteString printTables :: String -> Connection -> IO BL.ByteString
printTables schema conn = JSON.encode <$> tables schema conn printTables schema conn = JSON.encode <$> tables schema conn
+80 -9
View File
@@ -1,3 +1,4 @@
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-} {-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Feature.StructureSpec where module Feature.StructureSpec where
@@ -8,15 +9,26 @@ import Test.Hspec.Wai.JSON
import SpecHelper import SpecHelper
import Network.HTTP.Types import Network.HTTP.Types
import Codec.Binary.Base64.String (encode)
import Data.Monoid ((<>))
import Data.String.Conversions (cs)
uName = "a user"
uPass = "nobody can ever know"
uRole = "dbapi_test"
spec :: Spec spec :: Spec
spec = around appWithFixture $ do spec = around withDatabaseConnection $
aroundWith (withUser uName uPass uRole) $ aroundWith withApp $ do
describe "GET /" $ describe "GET /" $
it "lists views in schema" $ it "lists views in schema" $
get "/" `shouldRespondWith` request methodGet "/"
[json| [ [("Authorization", "Basic "<>(cs.encode $ cs uName<>":"<>cs uPass))] ""
{"schema":"1","name":"auto_incrementing_pk","insertable":true} `shouldRespondWith` [json| [
{"schema":"1","name":"authors_only","insertable":true}
, {"schema":"1","name":"auto_incrementing_pk","insertable":true}
, {"schema":"1","name":"compound_pk","insertable":true} , {"schema":"1","name":"compound_pk","insertable":true}
, {"schema":"1","name":"has_fk","insertable":true}
, {"schema":"1","name":"items","insertable":true} , {"schema":"1","name":"items","insertable":true}
, {"schema":"1","name":"menagerie","insertable":true} , {"schema":"1","name":"menagerie","insertable":true}
, {"schema":"1","name":"no_pk","insertable":true} , {"schema":"1","name":"no_pk","insertable":true}
@@ -24,7 +36,7 @@ spec = around appWithFixture $ do
] |] ] |]
{matchStatus = 200} {matchStatus = 200}
describe "Table info" $ describe "Table info" $ do
it "is available with OPTIONS verb" $ it "is available with OPTIONS verb" $
request methodOptions "/menagerie" [] "" `shouldRespondWith` request methodOptions "/menagerie" [] "" `shouldRespondWith`
[json| [json|
@@ -41,7 +53,9 @@ spec = around appWithFixture $ do
"maxLen": null, "maxLen": null,
"enum": null, "enum": null,
"nullable": false, "nullable": false,
"position": 1 "position": 1,
"references": null,
"default": null
}, { }, {
"default": null, "default": null,
"precision": 53, "precision": 53,
@@ -52,6 +66,7 @@ spec = around appWithFixture $ do
"maxLen": null, "maxLen": null,
"enum": null, "enum": null,
"nullable": false, "nullable": false,
"references": null,
"position": 2 "position": 2
}, { }, {
"default": null, "default": null,
@@ -63,7 +78,9 @@ spec = around appWithFixture $ do
"maxLen": null, "maxLen": null,
"enum": null, "enum": null,
"nullable": false, "nullable": false,
"position": 3 "position": 3,
"references": null,
"default": null
}, { }, {
"default": null, "default": null,
"precision": null, "precision": null,
@@ -74,6 +91,7 @@ spec = around appWithFixture $ do
"maxLen": null, "maxLen": null,
"enum": null, "enum": null,
"nullable": false, "nullable": false,
"references": null,
"position": 4 "position": 4
}, { }, {
"default": null, "default": null,
@@ -85,6 +103,7 @@ spec = around appWithFixture $ do
"maxLen": null, "maxLen": null,
"enum": null, "enum": null,
"nullable": false, "nullable": false,
"references": null,
"position": 5 "position": 5
}, { }, {
"default": null, "default": null,
@@ -96,7 +115,9 @@ spec = around appWithFixture $ do
"maxLen": null, "maxLen": null,
"enum": null, "enum": null,
"nullable": false, "nullable": false,
"position": 6 "position": 6,
"references": null,
"default": null
}, { }, {
"default": null, "default": null,
"precision": null, "precision": null,
@@ -110,7 +131,57 @@ spec = around appWithFixture $ do
"bar" "bar"
], ],
"nullable": false, "nullable": false,
"position": 7 "position": 7,
"references": null,
"default": null
}
]
}
|]
it "includes foreign key data" $
request methodOptions "/has_fk"
[("Authorization", "Basic "<>(cs.encode $ cs uName<>":"<>cs uPass))] ""
`shouldRespondWith` [json|
{
"pkey": ["id"],
"columns":[
{
"default": "nextval('\"1\".has_fk_id_seq'::regclass)",
"precision": 64,
"updatable": true,
"schema": "1",
"name": "id",
"type": "bigint",
"maxLen": null,
"nullable": false,
"position": 1,
"enum": null,
"references": null
}, {
"default": null,
"precision": 32,
"updatable": true,
"schema": "1",
"name": "auto_inc_fk",
"type": "integer",
"maxLen": null,
"nullable": true,
"position": 2,
"enum": null,
"references": {"table": "auto_incrementing_pk", "column": "id"}
}, {
"default": null,
"precision": null,
"updatable": true,
"schema": "1",
"name": "simple_fk",
"type": "character varying",
"maxLen": 255,
"nullable": true,
"position": 3,
"enum": null,
"references": {"table": "simple_pk", "column": "k"}
} }
] ]
} }
+20 -3
View File
@@ -9,9 +9,7 @@ import Database.HDBC
import Database.HDBC.PostgreSQL import Database.HDBC.PostgreSQL
import Data.String.Conversions (cs) import Data.String.Conversions (cs)
import Data.Either (isLeft) import Control.Exception.Base (bracket, finally, tryJust)
import Control.Exception.Base (bracket, tryJust)
import Control.Monad (when) import Control.Monad (when)
import Network.HTTP.Types.Header (Header, ByteRange, renderByteRange, import Network.HTTP.Types.Header (Header, ByteRange, renderByteRange,
@@ -24,6 +22,11 @@ import qualified Data.ByteString.Char8 as BS
import Network.Wai.Middleware.Cors (cors) import Network.Wai.Middleware.Cors (cors)
import Dbapi (app, corsPolicy, AppConfig(..)) import Dbapi (app, corsPolicy, AppConfig(..))
import PgQuery(addUser)
isLeft :: Either a b -> Bool
isLeft (Left _ ) = True
isLeft _ = False
cfg :: AppConfig cfg :: AppConfig
cfg = AppConfig "postgres://dbapi_test:@localhost:5432/dbapi_test" 9000 "test/test.crt" "test/test.key" "dbapi_anonymous" cfg = AppConfig "postgres://dbapi_test:@localhost:5432/dbapi_test" 9000 "test/test.crt" "test/test.key" "dbapi_anonymous"
@@ -45,6 +48,20 @@ dbWithSchema action = withDatabaseConnection $ \c -> do
action c action c
rollback c rollback c
withUser :: BS.ByteString -> BS.ByteString -> BS.ByteString ->
ActionWith Connection -> ActionWith Connection
withUser name pass role action conn = do
addUser name pass role conn
finally (action conn) $ do
_ <- run conn "delete from dbapi.auth where id=?" [toSql name]
runRaw conn "commit"
withApp :: ActionWith Application -> ActionWith Connection
withApp action conn = do
runRaw conn "begin;"
action $ cors corsPolicy $ app conn "dbapi_anonymous"
rollback conn
appWithFixture :: ActionWith Application -> IO () appWithFixture :: ActionWith Application -> IO ()
appWithFixture action = withDatabaseConnection $ \c -> do appWithFixture action = withDatabaseConnection $ \c -> do
result <- tryJust transactionAborted $ do result <- tryJust transactionAborted $ do
+37
View File
@@ -0,0 +1,37 @@
module Unit.PgStructureSpec where
import Test.Hspec
import PgStructure (Table(..), tables, Column(..), columns, ForeignKey(..),
foreignKeys)
import Database.HDBC (quickQuery)
import SpecHelper(dbWithSchema)
import qualified Data.Map as M;
spec :: Spec
spec = around dbWithSchema $ beforeWith setRole $ do
describe "tables" $
it "shows all the tables" $ \conn -> do
ts <- tables "1" conn
map tableName ts `shouldBe` ["authors_only","auto_incrementing_pk",
"compound_pk","has_fk","items","menagerie","no_pk", "simple_pk"]
describe "columns" $ do
it "responds with each column for the table" $ \conn -> do
cs <- columns "1" "auto_incrementing_pk" conn
map colName cs `shouldBe` ["id","nullable_string","non_nullable_string",
"inserted_at"]
it "includes foreign key data" $ \conn -> do
cs <- columns "1" "has_fk" conn
map colFK cs `shouldBe` [Nothing,
Just $ ForeignKey "auto_incrementing_pk" "id",
Just $ ForeignKey "simple_pk" "k"]
describe "foreignKeys" $
it "has a description of the foreign key columns" $ \conn ->
foreignKeys "1" "has_fk" conn `shouldReturn` M.fromList [
("auto_inc_fk", ForeignKey {fkTable="auto_incrementing_pk", fkCol="id"}),
("simple_fk", ForeignKey { fkTable="simple_pk", fkCol="k"})]
where setRole conn = quickQuery conn "set role dbapi_test" [] >> return conn
Vendored Regular → Executable
+159 -145
View File
@@ -2,9 +2,10 @@
-- PostgreSQL database dump -- PostgreSQL database dump
-- --
-- Dumped from database version 9.3.5 -- Dumped from database version 9.3.4
-- Dumped by pg_dump version 9.3.5 -- Dumped by pg_dump version 9.3.4
-- Started on 2014-10-07 15:55:44 PDT -- Started on 2014-10-01 13:41:39 PDT
-- Started on 2014-10-07 16:46:34 PDT
SET statement_timeout = 0; SET statement_timeout = 0;
SET lock_timeout = 0; SET lock_timeout = 0;
@@ -14,7 +15,7 @@ SET check_function_bodies = false;
SET client_min_messages = warning; SET client_min_messages = warning;
-- --
-- TOC entry 10 (class 2615 OID 309036) -- TOC entry 11 (class 2615 OID 280932)
-- Name: 1; Type: SCHEMA; Schema: -; Owner: dbapi_test -- Name: 1; Type: SCHEMA; Schema: -; Owner: dbapi_test
-- --
@@ -24,7 +25,7 @@ CREATE SCHEMA "1";
ALTER SCHEMA "1" OWNER TO dbapi_test; ALTER SCHEMA "1" OWNER TO dbapi_test;
-- --
-- TOC entry 15 (class 2615 OID 309037) -- TOC entry 8 (class 2615 OID 50928)
-- Name: dbapi; Type: SCHEMA; Schema: -; Owner: dbapi_test -- Name: dbapi; Type: SCHEMA; Schema: -; Owner: dbapi_test
-- --
@@ -34,7 +35,7 @@ CREATE SCHEMA dbapi;
ALTER SCHEMA dbapi OWNER TO dbapi_test; ALTER SCHEMA dbapi OWNER TO dbapi_test;
-- --
-- TOC entry 9 (class 2615 OID 309038) -- TOC entry 9 (class 2615 OID 50929)
-- Name: private; Type: SCHEMA; Schema: -; Owner: dbapi_test -- Name: private; Type: SCHEMA; Schema: -; Owner: dbapi_test
-- --
@@ -44,7 +45,7 @@ CREATE SCHEMA private;
ALTER SCHEMA private OWNER TO dbapi_test; ALTER SCHEMA private OWNER TO dbapi_test;
-- --
-- TOC entry 190 (class 3079 OID 12018) -- TOC entry 187 (class 3079 OID 12018)
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
-- --
@@ -52,14 +53,11 @@ CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
-- --
-- TOC entry 2287 (class 0 OID 0)
-- Dependencies: 190
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
-- --
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
SET search_path = "1", pg_catalog; SET search_path = "1", pg_catalog;
-- --
@@ -73,14 +71,11 @@ CREATE TYPE "1".enum_menagerie_type AS ENUM (
); );
SET search_path = dbapi, pg_catalog;
-- --
-- TOC entry 203 (class 1255 OID 309039)
-- Name: check_role_exists(); Type: FUNCTION; Schema: dbapi; Owner: dbapi_test -- Name: check_role_exists(); Type: FUNCTION; Schema: dbapi; Owner: dbapi_test
-- --
CREATE FUNCTION check_role_exists() RETURNS trigger CREATE FUNCTION dbapi.check_role_exists() RETURNS trigger
LANGUAGE plpgsql LANGUAGE plpgsql
AS $$ AS $$
begin begin
@@ -95,12 +90,8 @@ $$;
ALTER FUNCTION dbapi.check_role_exists() OWNER TO dbapi_test; ALTER FUNCTION dbapi.check_role_exists() OWNER TO dbapi_test;
--
-- TOC entry 204 (class 1255 OID 309040)
-- Name: update_owner(); Type: FUNCTION; Schema: dbapi; Owner: dbapi_test
--
CREATE FUNCTION update_owner() RETURNS trigger CREATE FUNCTION dbapi.update_owner() RETURNS trigger
LANGUAGE plpgsql LANGUAGE plpgsql
AS $$ AS $$
BEGIN BEGIN
@@ -119,8 +110,16 @@ SET default_tablespace = '';
SET default_with_oids = false; SET default_with_oids = false;
-- --
-- TOC entry 179 (class 1259 OID 309041)
-- Name: auto_incrementing_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace: CREATE TABLE authors_only (
secret character varying NOT NULL
);
ALTER TABLE "1".authors_only OWNER TO dbapi_test_author;
--
-- TOC entry 175 (class 1259 OID 280937)
-- --
CREATE TABLE auto_incrementing_pk ( CREATE TABLE auto_incrementing_pk (
@@ -134,7 +133,6 @@ CREATE TABLE auto_incrementing_pk (
ALTER TABLE "1".auto_incrementing_pk OWNER TO dbapi_test; ALTER TABLE "1".auto_incrementing_pk OWNER TO dbapi_test;
-- --
-- TOC entry 180 (class 1259 OID 309048)
-- Name: auto_incrementing_pk_id_seq; Type: SEQUENCE; Schema: 1; Owner: dbapi_test -- Name: auto_incrementing_pk_id_seq; Type: SEQUENCE; Schema: 1; Owner: dbapi_test
-- --
@@ -149,16 +147,12 @@ CREATE SEQUENCE auto_incrementing_pk_id_seq
ALTER TABLE "1".auto_incrementing_pk_id_seq OWNER TO dbapi_test; ALTER TABLE "1".auto_incrementing_pk_id_seq OWNER TO dbapi_test;
-- --
-- TOC entry 2289 (class 0 OID 0)
-- Dependencies: 180
-- Name: auto_incrementing_pk_id_seq; Type: SEQUENCE OWNED BY; Schema: 1; Owner: dbapi_test
-- --
ALTER SEQUENCE auto_incrementing_pk_id_seq OWNED BY auto_incrementing_pk.id; ALTER SEQUENCE auto_incrementing_pk_id_seq OWNED BY auto_incrementing_pk.id;
-- --
-- TOC entry 181 (class 1259 OID 309050)
-- Name: compound_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace: -- Name: compound_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
@@ -172,7 +166,44 @@ CREATE TABLE compound_pk (
ALTER TABLE "1".compound_pk OWNER TO dbapi_test; ALTER TABLE "1".compound_pk OWNER TO dbapi_test;
-- --
-- TOC entry 182 (class 1259 OID 309053) -- Name: has_fk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace:
--
CREATE TABLE has_fk (
id bigint NOT NULL,
auto_inc_fk integer,
simple_fk character varying(255)
);
ALTER TABLE "1".has_fk OWNER TO dbapi_test;
--
-- TOC entry 185 (class 1259 OID 50947)
-- Name: has_fk_id_seq; Type: SEQUENCE; Schema: 1; Owner: dbapi_test
--
CREATE SEQUENCE has_fk_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE "1".has_fk_id_seq OWNER TO dbapi_test;
--
-- TOC entry 2042 (class 0 OID 0)
-- Dependencies: 185
-- Name: has_fk_id_seq; Type: SEQUENCE OWNED BY; Schema: 1; Owner: dbapi_test
--
ALTER SEQUENCE has_fk_id_seq OWNED BY has_fk.id;
--
-- TOC entry 186 (class 1259 OID 50949)
-- Name: items; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace: -- Name: items; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
@@ -184,7 +215,6 @@ CREATE TABLE items (
ALTER TABLE "1".items OWNER TO dbapi_test; ALTER TABLE "1".items OWNER TO dbapi_test;
-- --
-- TOC entry 183 (class 1259 OID 309056)
-- Name: items_id_seq; Type: SEQUENCE; Schema: 1; Owner: dbapi_test -- Name: items_id_seq; Type: SEQUENCE; Schema: 1; Owner: dbapi_test
-- --
@@ -199,8 +229,6 @@ CREATE SEQUENCE items_id_seq
ALTER TABLE "1".items_id_seq OWNER TO dbapi_test; ALTER TABLE "1".items_id_seq OWNER TO dbapi_test;
-- --
-- TOC entry 2293 (class 0 OID 0)
-- Dependencies: 183
-- Name: items_id_seq; Type: SEQUENCE OWNED BY; Schema: 1; Owner: dbapi_test -- Name: items_id_seq; Type: SEQUENCE OWNED BY; Schema: 1; Owner: dbapi_test
-- --
@@ -208,7 +236,6 @@ ALTER SEQUENCE items_id_seq OWNED BY items.id;
-- --
-- TOC entry 184 (class 1259 OID 309058)
-- Name: menagerie; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace: -- Name: menagerie; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
@@ -219,14 +246,13 @@ CREATE TABLE menagerie (
"boolean" boolean NOT NULL, "boolean" boolean NOT NULL,
date date NOT NULL, date date NOT NULL,
money money NOT NULL, money money NOT NULL,
enum "1".enum_menagerie_type NOT NULL enum "1".enum_menagerie_type not null
); );
ALTER TABLE "1".menagerie OWNER TO dbapi_test; ALTER TABLE "1".menagerie OWNER TO dbapi_test;
-- --
-- TOC entry 185 (class 1259 OID 309064)
-- Name: no_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace: -- Name: no_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
@@ -239,7 +265,6 @@ CREATE TABLE no_pk (
ALTER TABLE "1".no_pk OWNER TO dbapi_test; ALTER TABLE "1".no_pk OWNER TO dbapi_test;
-- --
-- TOC entry 186 (class 1259 OID 309070)
-- Name: simple_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace: -- Name: simple_pk; Type: TABLE; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
@@ -254,7 +279,6 @@ ALTER TABLE "1".simple_pk OWNER TO dbapi_test;
SET search_path = dbapi, pg_catalog; SET search_path = dbapi, pg_catalog;
-- --
-- TOC entry 187 (class 1259 OID 309076)
-- Name: auth; Type: TABLE; Schema: dbapi; Owner: dbapi_test; Tablespace: -- Name: auth; Type: TABLE; Schema: dbapi; Owner: dbapi_test; Tablespace:
-- --
@@ -270,7 +294,6 @@ ALTER TABLE dbapi.auth OWNER TO dbapi_test;
SET search_path = private, pg_catalog; SET search_path = private, pg_catalog;
-- --
-- TOC entry 188 (class 1259 OID 309082)
-- Name: articles; Type: TABLE; Schema: private; Owner: dbapi_test; Tablespace: -- Name: articles; Type: TABLE; Schema: private; Owner: dbapi_test; Tablespace:
-- --
@@ -284,7 +307,6 @@ CREATE TABLE articles (
ALTER TABLE private.articles OWNER TO dbapi_test; ALTER TABLE private.articles OWNER TO dbapi_test;
-- --
-- TOC entry 189 (class 1259 OID 309088)
-- Name: articles_id_seq; Type: SEQUENCE; Schema: private; Owner: dbapi_test -- Name: articles_id_seq; Type: SEQUENCE; Schema: private; Owner: dbapi_test
-- --
@@ -299,8 +321,6 @@ CREATE SEQUENCE articles_id_seq
ALTER TABLE private.articles_id_seq OWNER TO dbapi_test; ALTER TABLE private.articles_id_seq OWNER TO dbapi_test;
-- --
-- TOC entry 2299 (class 0 OID 0)
-- Dependencies: 189
-- Name: articles_id_seq; Type: SEQUENCE OWNED BY; Schema: private; Owner: dbapi_test -- Name: articles_id_seq; Type: SEQUENCE OWNED BY; Schema: private; Owner: dbapi_test
-- --
@@ -310,7 +330,6 @@ ALTER SEQUENCE articles_id_seq OWNED BY articles.id;
SET search_path = "1", pg_catalog; SET search_path = "1", pg_catalog;
-- --
-- TOC entry 2142 (class 2604 OID 309090)
-- Name: id; Type: DEFAULT; Schema: 1; Owner: dbapi_test -- Name: id; Type: DEFAULT; Schema: 1; Owner: dbapi_test
-- --
@@ -318,7 +337,15 @@ ALTER TABLE ONLY auto_incrementing_pk ALTER COLUMN id SET DEFAULT nextval('auto_
-- --
-- TOC entry 2143 (class 2604 OID 309091) -- TOC entry 1886 (class 2604 OID 50987)
-- Name: id; Type: DEFAULT; Schema: 1; Owner: dbapi_test
--
ALTER TABLE ONLY has_fk ALTER COLUMN id SET DEFAULT nextval('has_fk_id_seq'::regclass);
--
-- TOC entry 1887 (class 2604 OID 50988)
-- Name: id; Type: DEFAULT; Schema: 1; Owner: dbapi_test -- Name: id; Type: DEFAULT; Schema: 1; Owner: dbapi_test
-- --
@@ -328,7 +355,6 @@ ALTER TABLE ONLY items ALTER COLUMN id SET DEFAULT nextval('items_id_seq'::regcl
SET search_path = private, pg_catalog; SET search_path = private, pg_catalog;
-- --
-- TOC entry 2144 (class 2604 OID 309092)
-- Name: id; Type: DEFAULT; Schema: private; Owner: dbapi_test -- Name: id; Type: DEFAULT; Schema: private; Owner: dbapi_test
-- --
@@ -338,33 +364,58 @@ ALTER TABLE ONLY articles ALTER COLUMN id SET DEFAULT nextval('articles_id_seq':
SET search_path = "1", pg_catalog; SET search_path = "1", pg_catalog;
-- --
-- TOC entry 2268 (class 0 OID 309041) -- TOC entry 2279 (class 0 OID 281006)
-- Dependencies: 179 -- Dependencies: 186
-- Data for Name: authors_only; Type: TABLE DATA; Schema: 1; Owner: dbapi_test_author
--
--
-- TOC entry 2268 (class 0 OID 280937)
-- Dependencies: 175
-- TOC entry 2016 (class 0 OID 50932)
-- Dependencies: 181
-- Data for Name: auto_incrementing_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test -- Data for Name: auto_incrementing_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test
-- --
-- TOC entry 2270 (class 0 OID 280946)
-- -- Dependencies: 177
-- TOC entry 2300 (class 0 OID 0) -- TOC entry 2051 (class 0 OID 0)
-- Dependencies: 180 -- Dependencies: 182
-- Name: auto_incrementing_pk_id_seq; Type: SEQUENCE SET; Schema: 1; Owner: dbapi_test -- Name: auto_incrementing_pk_id_seq; Type: SEQUENCE SET; Schema: 1; Owner: dbapi_test
-- --
SELECT pg_catalog.setval('auto_incrementing_pk_id_seq', 46, true); SELECT pg_catalog.setval('auto_incrementing_pk_id_seq', 50, true);
-- --
-- TOC entry 2270 (class 0 OID 309050) -- TOC entry 2018 (class 0 OID 50941)
-- Dependencies: 181 -- Dependencies: 183
-- Data for Name: compound_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test -- Data for Name: compound_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test
-- --
-- --
-- TOC entry 2271 (class 0 OID 309053) -- TOC entry 2271 (class 0 OID 280949)
-- Dependencies: 182 -- Dependencies: 178
--
-- TOC entry 2052 (class 0 OID 0)
-- Dependencies: 185
-- Name: has_fk_id_seq; Type: SEQUENCE SET; Schema: 1; Owner: dbapi_test
--
SELECT pg_catalog.setval('has_fk_id_seq', 1, false);
--
-- TOC entry 2021 (class 0 OID 50949)
-- Dependencies: 186
-- Data for Name: items; Type: TABLE DATA; Schema: 1; Owner: dbapi_test -- Data for Name: items; Type: TABLE DATA; Schema: 1; Owner: dbapi_test
-- --
@@ -386,8 +437,6 @@ INSERT INTO items (id) VALUES (15);
-- --
-- TOC entry 2301 (class 0 OID 0)
-- Dependencies: 183
-- Name: items_id_seq; Type: SEQUENCE SET; Schema: 1; Owner: dbapi_test -- Name: items_id_seq; Type: SEQUENCE SET; Schema: 1; Owner: dbapi_test
-- --
@@ -395,25 +444,17 @@ SELECT pg_catalog.setval('items_id_seq', 15, true);
-- --
-- TOC entry 2273 (class 0 OID 309058)
-- Dependencies: 184
-- Data for Name: menagerie; Type: TABLE DATA; Schema: 1; Owner: dbapi_test -- Data for Name: menagerie; Type: TABLE DATA; Schema: 1; Owner: dbapi_test
-- --
-- --
-- TOC entry 2274 (class 0 OID 309064)
-- Dependencies: 185
-- Data for Name: no_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test -- Data for Name: no_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test
-- --
--
-- TOC entry 2275 (class 0 OID 309070)
-- Dependencies: 186
-- Data for Name: simple_pk; Type: TABLE DATA; Schema: 1; Owner: dbapi_test
-- --
@@ -421,8 +462,6 @@ SELECT pg_catalog.setval('items_id_seq', 15, true);
SET search_path = dbapi, pg_catalog; SET search_path = dbapi, pg_catalog;
-- --
-- TOC entry 2276 (class 0 OID 309076)
-- Dependencies: 187
-- Data for Name: auth; Type: TABLE DATA; Schema: dbapi; Owner: dbapi_test -- Data for Name: auth; Type: TABLE DATA; Schema: dbapi; Owner: dbapi_test
-- --
@@ -431,16 +470,11 @@ SET search_path = dbapi, pg_catalog;
SET search_path = private, pg_catalog; SET search_path = private, pg_catalog;
-- --
-- TOC entry 2277 (class 0 OID 309082)
-- Dependencies: 188
-- Data for Name: articles; Type: TABLE DATA; Schema: private; Owner: dbapi_test
-- --
-- --
-- TOC entry 2302 (class 0 OID 0)
-- Dependencies: 189
-- Name: articles_id_seq; Type: SEQUENCE SET; Schema: private; Owner: dbapi_test -- Name: articles_id_seq; Type: SEQUENCE SET; Schema: private; Owner: dbapi_test
-- --
@@ -450,8 +484,15 @@ SELECT pg_catalog.setval('articles_id_seq', 1, false);
SET search_path = "1", pg_catalog; SET search_path = "1", pg_catalog;
-- --
-- TOC entry 2146 (class 2606 OID 309094) -- Name: authors_only_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test_author; Tablespace:
-- Name: auto_incrementing_pk_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test; Tablespace: --
ALTER TABLE ONLY authors_only
ADD CONSTRAINT authors_only_pkey PRIMARY KEY (secret);
--
-- TOC entry 2144 (class 2606 OID 280990)
-- --
ALTER TABLE ONLY auto_incrementing_pk ALTER TABLE ONLY auto_incrementing_pk
@@ -459,7 +500,6 @@ ALTER TABLE ONLY auto_incrementing_pk
-- --
-- TOC entry 2148 (class 2606 OID 309096)
-- Name: compound_pk_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test; Tablespace: -- Name: compound_pk_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
@@ -468,8 +508,7 @@ ALTER TABLE ONLY compound_pk
-- --
-- TOC entry 2154 (class 2606 OID 309098) -- TOC entry 1900 (class 2606 OID 50995)
-- Name: contacts_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
ALTER TABLE ONLY simple_pk ALTER TABLE ONLY simple_pk
@@ -477,8 +516,14 @@ ALTER TABLE ONLY simple_pk
-- --
-- TOC entry 2150 (class 2606 OID 309100) --
-- Name: items_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test; Tablespace:
ALTER TABLE ONLY has_fk
ADD CONSTRAINT has_fk_pkey PRIMARY KEY (id);
--
-- TOC entry 1896 (class 2606 OID 50999)
-- --
ALTER TABLE ONLY items ALTER TABLE ONLY items
@@ -486,8 +531,6 @@ ALTER TABLE ONLY items
-- --
-- TOC entry 2152 (class 2606 OID 309102)
-- Name: menagerie_pkey; Type: CONSTRAINT; Schema: 1; Owner: dbapi_test; Tablespace:
-- --
ALTER TABLE ONLY menagerie ALTER TABLE ONLY menagerie
@@ -497,7 +540,6 @@ ALTER TABLE ONLY menagerie
SET search_path = dbapi, pg_catalog; SET search_path = dbapi, pg_catalog;
-- --
-- TOC entry 2156 (class 2606 OID 309104)
-- Name: auth_pkey; Type: CONSTRAINT; Schema: dbapi; Owner: dbapi_test; Tablespace: -- Name: auth_pkey; Type: CONSTRAINT; Schema: dbapi; Owner: dbapi_test; Tablespace:
-- --
@@ -508,8 +550,6 @@ ALTER TABLE ONLY auth
SET search_path = private, pg_catalog; SET search_path = private, pg_catalog;
-- --
-- TOC entry 2158 (class 2606 OID 309106)
-- Name: articles_pkey; Type: CONSTRAINT; Schema: private; Owner: dbapi_test; Tablespace:
-- --
ALTER TABLE ONLY articles ALTER TABLE ONLY articles
@@ -519,7 +559,6 @@ ALTER TABLE ONLY articles
SET search_path = dbapi, pg_catalog; SET search_path = dbapi, pg_catalog;
-- --
-- TOC entry 2159 (class 2620 OID 309108)
-- Name: ensure_auth_role_exists; Type: TRIGGER; Schema: dbapi; Owner: dbapi_test -- Name: ensure_auth_role_exists; Type: TRIGGER; Schema: dbapi; Owner: dbapi_test
-- --
@@ -529,117 +568,104 @@ CREATE CONSTRAINT TRIGGER ensure_auth_role_exists AFTER INSERT OR UPDATE ON auth
SET search_path = private, pg_catalog; SET search_path = private, pg_catalog;
-- --
-- TOC entry 2160 (class 2620 OID 309109)
-- Name: articles_owner_track; Type: TRIGGER; Schema: private; Owner: dbapi_test -- Name: articles_owner_track; Type: TRIGGER; Schema: private; Owner: dbapi_test
-- --
CREATE TRIGGER articles_owner_track BEFORE INSERT OR UPDATE ON articles FOR EACH ROW EXECUTE PROCEDURE dbapi.update_owner(); CREATE TRIGGER articles_owner_track BEFORE INSERT OR UPDATE ON articles FOR EACH ROW EXECUTE PROCEDURE dbapi.update_owner();
SET search_path = "1", pg_catalog;
-- --
-- TOC entry 2284 (class 0 OID 0) -- TOC entry 1905 (class 2606 OID 51009)
-- Dependencies: 10 -- Name: has_fk_fk_fkey; Type: FK CONSTRAINT; Schema: 1; Owner: dbapi_test
-- Name: 1; Type: ACL; Schema: -; Owner: dbapi_test
-- --
ALTER TABLE ONLY has_fk
ADD CONSTRAINT has_fk_fk_fkey FOREIGN KEY (auto_inc_fk) REFERENCES auto_incrementing_pk(id);
--
-- TOC entry 1906 (class 2606 OID 51015)
-- Name: has_fk_simple_fk_fkey; Type: FK CONSTRAINT; Schema: 1; Owner: dbapi_test
--
ALTER TABLE ONLY has_fk
ADD CONSTRAINT has_fk_simple_fk_fkey FOREIGN KEY (simple_fk) REFERENCES simple_pk(k);
REVOKE ALL ON SCHEMA "1" FROM dbapi_test; REVOKE ALL ON SCHEMA "1" FROM dbapi_test;
GRANT ALL ON SCHEMA "1" TO dbapi_test; GRANT ALL ON SCHEMA "1" TO dbapi_test;
GRANT USAGE ON SCHEMA "1" TO dbapi_anonymous; GRANT USAGE ON SCHEMA "1" TO dbapi_anonymous;
SET search_path = "1", pg_catalog; --
-- TOC entry 2036 (class 0 OID 0)
-- Dependencies: 15
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;
-- --
-- TOC entry 2288 (class 0 OID 0)
-- Dependencies: 179 REVOKE ALL ON TABLE authors_only FROM dbapi_test_author;
GRANT ALL ON TABLE authors_only TO dbapi_test_author;
--
-- TOC entry 2290 (class 0 OID 0)
-- Dependencies: 175
-- Name: auto_incrementing_pk; Type: ACL; Schema: 1; Owner: dbapi_test -- Name: auto_incrementing_pk; Type: ACL; Schema: 1; Owner: dbapi_test
-- --
REVOKE ALL ON TABLE auto_incrementing_pk FROM PUBLIC;
REVOKE ALL ON TABLE auto_incrementing_pk FROM dbapi_test; REVOKE ALL ON TABLE auto_incrementing_pk FROM dbapi_test;
GRANT ALL ON TABLE auto_incrementing_pk TO dbapi_test; GRANT ALL ON TABLE auto_incrementing_pk TO dbapi_test;
GRANT ALL ON TABLE auto_incrementing_pk TO dbapi_anonymous; GRANT ALL ON TABLE auto_incrementing_pk TO dbapi_anonymous;
--
-- TOC entry 2290 (class 0 OID 0)
-- Dependencies: 180
-- Name: auto_incrementing_pk_id_seq; Type: ACL; Schema: 1; Owner: dbapi_test
--
REVOKE ALL ON SEQUENCE auto_incrementing_pk_id_seq FROM PUBLIC;
REVOKE ALL ON SEQUENCE auto_incrementing_pk_id_seq FROM dbapi_test; REVOKE ALL ON SEQUENCE auto_incrementing_pk_id_seq FROM dbapi_test;
GRANT ALL ON SEQUENCE auto_incrementing_pk_id_seq TO dbapi_test; GRANT ALL ON SEQUENCE auto_incrementing_pk_id_seq TO dbapi_test;
GRANT USAGE ON SEQUENCE auto_incrementing_pk_id_seq TO dbapi_anonymous; GRANT USAGE ON SEQUENCE auto_incrementing_pk_id_seq TO dbapi_anonymous;
--
-- TOC entry 2291 (class 0 OID 0)
-- Dependencies: 181
-- Name: compound_pk; Type: ACL; Schema: 1; Owner: dbapi_test
--
REVOKE ALL ON TABLE compound_pk FROM PUBLIC;
REVOKE ALL ON TABLE compound_pk FROM dbapi_test; REVOKE ALL ON TABLE compound_pk FROM dbapi_test;
GRANT ALL ON TABLE compound_pk TO dbapi_test; GRANT ALL ON TABLE compound_pk TO dbapi_test;
GRANT ALL ON TABLE compound_pk TO dbapi_anonymous; GRANT ALL ON TABLE compound_pk TO dbapi_anonymous;
--
-- TOC entry 2292 (class 0 OID 0)
-- Dependencies: 182
-- Name: items; Type: ACL; Schema: 1; Owner: dbapi_test
-- --
REVOKE ALL ON TABLE items FROM PUBLIC;
REVOKE ALL ON TABLE items FROM dbapi_test; REVOKE ALL ON TABLE items FROM dbapi_test;
GRANT ALL ON TABLE items TO dbapi_test; GRANT ALL ON TABLE items TO dbapi_test;
GRANT ALL ON TABLE items TO dbapi_anonymous; GRANT ALL ON TABLE items TO dbapi_anonymous;
--
-- TOC entry 2294 (class 0 OID 0)
-- Dependencies: 183
-- Name: items_id_seq; Type: ACL; Schema: 1; Owner: dbapi_test
--
REVOKE ALL ON SEQUENCE items_id_seq FROM PUBLIC;
REVOKE ALL ON SEQUENCE items_id_seq FROM dbapi_test; REVOKE ALL ON SEQUENCE items_id_seq FROM dbapi_test;
GRANT ALL ON SEQUENCE items_id_seq TO dbapi_test; GRANT ALL ON SEQUENCE items_id_seq TO dbapi_test;
GRANT USAGE ON SEQUENCE items_id_seq TO dbapi_anonymous; GRANT USAGE ON SEQUENCE items_id_seq TO dbapi_anonymous;
--
-- TOC entry 2295 (class 0 OID 0)
-- Dependencies: 184
-- Name: menagerie; Type: ACL; Schema: 1; Owner: dbapi_test
-- --
REVOKE ALL ON TABLE menagerie FROM PUBLIC;
REVOKE ALL ON TABLE menagerie FROM dbapi_test; REVOKE ALL ON TABLE menagerie FROM dbapi_test;
GRANT ALL ON TABLE menagerie TO dbapi_test; GRANT ALL ON TABLE menagerie TO dbapi_test;
GRANT ALL ON TABLE menagerie TO dbapi_anonymous; GRANT ALL ON TABLE menagerie TO dbapi_anonymous;
--
-- TOC entry 2296 (class 0 OID 0)
-- Dependencies: 185
-- Name: no_pk; Type: ACL; Schema: 1; Owner: dbapi_test
-- --
REVOKE ALL ON TABLE no_pk FROM PUBLIC;
REVOKE ALL ON TABLE no_pk FROM dbapi_test; REVOKE ALL ON TABLE no_pk FROM dbapi_test;
GRANT ALL ON TABLE no_pk TO dbapi_test; GRANT ALL ON TABLE no_pk TO dbapi_test;
GRANT ALL ON TABLE no_pk TO dbapi_anonymous; GRANT ALL ON TABLE no_pk TO dbapi_anonymous;
--
-- TOC entry 2297 (class 0 OID 0)
-- Dependencies: 186
-- Name: simple_pk; Type: ACL; Schema: 1; Owner: dbapi_test
--
REVOKE ALL ON TABLE simple_pk FROM PUBLIC;
REVOKE ALL ON TABLE simple_pk FROM dbapi_test; REVOKE ALL ON TABLE simple_pk FROM dbapi_test;
GRANT ALL ON TABLE simple_pk TO dbapi_test; GRANT ALL ON TABLE simple_pk TO dbapi_test;
GRANT ALL ON TABLE simple_pk TO dbapi_anonymous; GRANT ALL ON TABLE simple_pk TO dbapi_anonymous;
@@ -647,20 +673,8 @@ GRANT ALL ON TABLE simple_pk TO dbapi_anonymous;
SET search_path = private, pg_catalog; SET search_path = private, pg_catalog;
--
-- TOC entry 2298 (class 0 OID 0)
-- Dependencies: 188
-- Name: articles; Type: ACL; Schema: private; Owner: dbapi_test
--
REVOKE ALL ON TABLE articles FROM PUBLIC;
REVOKE ALL ON TABLE articles FROM dbapi_test; REVOKE ALL ON TABLE articles FROM dbapi_test;
GRANT ALL ON TABLE articles TO dbapi_test; GRANT ALL ON TABLE articles TO dbapi_test;
-- Completed on 2014-10-07 15:55:44 PDT
--
-- PostgreSQL database dump complete
-- --