graphql-engine/server/src-lib/Hasura/RQL/DDL/Utils.hs

37 lines
1.0 KiB
Haskell
Raw Normal View History

2018-06-27 16:11:32 +03:00
{-# LANGUAGE OverloadedStrings #-}
module Hasura.RQL.DDL.Utils where
2018-09-05 14:26:46 +03:00
import qualified Data.ByteString.Builder as BB
import qualified Database.PG.Query as Q
import Hasura.Prelude ((<>))
2018-06-27 16:11:32 +03:00
2018-09-05 14:26:46 +03:00
clearHdbViews :: Q.Tx ()
clearHdbViews = Q.multiQ (Q.fromBuilder (clearHdbOnlyViews <> clearHdbViewsFunc))
clearHdbOnlyViews :: BB.Builder
clearHdbOnlyViews =
2018-06-27 16:11:32 +03:00
"DO $$ DECLARE \
\ r RECORD; \
\ BEGIN \
\ FOR r IN (SELECT viewname FROM pg_views WHERE schemaname = 'hdb_views') LOOP \
\ EXECUTE 'DROP VIEW IF EXISTS hdb_views.' || quote_ident(r.viewname) || ' CASCADE'; \
\ END LOOP; \
2018-09-05 14:26:46 +03:00
\ END $$; "
clearHdbViewsFunc :: BB.Builder
clearHdbViewsFunc =
"DO $$ DECLARE \
\ _sql text; \
\ BEGIN \
\ SELECT INTO _sql \
\ string_agg('DROP FUNCTION hdb_views.' || quote_ident(r.routine_name) || '() CASCADE;' \
\ , E'\n') \
\ FROM information_schema.routines r \
\ WHERE r.specific_schema = 'hdb_views'; \
\ IF _sql IS NOT NULL THEN \
\ EXECUTE _sql; \
\ END IF; \
\ END $$; "