mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-17 12:31:52 +03:00
c4c36e0ef4
* build schema cache function without db setup The setup shouldn't happen for sync. The database is already setup by the instance which generated the event. This means that the sync is now faster. * use SQL loop to drop hdb_views schema views and routines with ordering This avoids deadlocks when schema is being changed concurrently * schema sync now only processes the latest event This becomes useful when a lot of schema change events happen while we are still processing an earlier event.
32 lines
924 B
Haskell
32 lines
924 B
Haskell
module Hasura.RQL.DDL.Utils
|
|
( clearHdbViews
|
|
) where
|
|
|
|
import qualified Database.PG.Query as Q
|
|
|
|
import Hasura.Prelude
|
|
|
|
clearHdbViews :: Q.Tx ()
|
|
clearHdbViews = Q.multiQ (Q.fromText (clearHdbOnlyViews <> clearHdbViewsFunc))
|
|
|
|
clearHdbOnlyViews :: Text
|
|
clearHdbOnlyViews =
|
|
"DO $$ DECLARE \
|
|
\ r RECORD; \
|
|
\ BEGIN \
|
|
\ FOR r IN (SELECT viewname FROM pg_views WHERE schemaname = 'hdb_views' ORDER BY viewname) LOOP \
|
|
\ EXECUTE 'DROP VIEW IF EXISTS hdb_views.' || quote_ident(r.viewname) || ' CASCADE'; \
|
|
\ END LOOP; \
|
|
\ END $$; "
|
|
|
|
|
|
clearHdbViewsFunc :: Text
|
|
clearHdbViewsFunc =
|
|
"DO $$ DECLARE \
|
|
\ r RECORD; \
|
|
\ BEGIN \
|
|
\ FOR r IN (SELECT routine_name FROM information_schema.routines WHERE specific_schema = 'hdb_views' ORDER BY routine_name) LOOP \
|
|
\ EXECUTE 'DROP FUNCTION hdb_views.' || quote_ident(r.routine_name) || '() CASCADE'; \
|
|
\ END LOOP; \
|
|
\ END $$; "
|