mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-17 12:31:52 +03:00
9bd5826020
* allow customizing GraphQL root field names, close #981 * document v2 track_table API in reference * support customising column field names in GraphQL schema * [docs] add custom column fields doc in API reference * add tests * rename 'ColField' to 'ColumnField' * embed column's graphql field in 'PGColumnInfo' -> Value constructor of 'PGCol' is not exposed -> Using 'parseJSON' to construct 'PGCol' in 'FromJSON' instances * avoid using 'Maybe TableConfig' * refactors & 'custom_column_fields' -> 'custom_column_names' * cli-test: add configuration field in metadata export test * update expected keys in `FromJSON` instance of `TableMeta` * use `buildSchemaCacheFor` to update configuration in v2 track_table * remove 'GraphQLName' type and use 'isValidName' exposed from parser lib * point graphql-parser-hs library git repo to hasura * support 'set_table_custom_fields' query API & added docs and tests
59 lines
2.1 KiB
Haskell
59 lines
2.1 KiB
Haskell
-- | Functions for loading and modifying the catalog. See the module documentation for
|
|
-- "Hasura.RQL.DDL.Schema" for more details.
|
|
module Hasura.RQL.DDL.Schema.Catalog
|
|
( fetchCatalogData
|
|
, saveTableToCatalog
|
|
, updateTableIsEnumInCatalog
|
|
, updateTableConfig
|
|
, deleteTableFromCatalog
|
|
) where
|
|
|
|
import Hasura.Prelude
|
|
|
|
import qualified Database.PG.Query as Q
|
|
|
|
import Data.Aeson
|
|
|
|
import Hasura.Db
|
|
import Hasura.RQL.Types.Catalog
|
|
import Hasura.RQL.Types.SchemaCache
|
|
import Hasura.SQL.Types
|
|
|
|
fetchCatalogData :: (MonadTx m) => m CatalogMetadata
|
|
fetchCatalogData = liftTx $ Q.getAltJ . runIdentity . Q.getRow <$> Q.withQE defaultTxErrorHandler
|
|
$(Q.sqlFromFile "src-rsr/catalog_metadata.sql") () True
|
|
|
|
saveTableToCatalog :: (MonadTx m)
|
|
=> QualifiedTable -> Bool -> TableConfig -> m ()
|
|
saveTableToCatalog (QualifiedObject sn tn) isEnum config = liftTx $
|
|
Q.unitQE defaultTxErrorHandler [Q.sql|
|
|
INSERT INTO "hdb_catalog"."hdb_table"
|
|
(table_schema, table_name, is_enum, configuration)
|
|
VALUES ($1, $2, $3, $4)
|
|
|] (sn, tn, isEnum, configVal) False
|
|
where
|
|
configVal = Q.AltJ $ toJSON config
|
|
|
|
updateTableIsEnumInCatalog :: (MonadTx m) => QualifiedTable -> Bool -> m ()
|
|
updateTableIsEnumInCatalog (QualifiedObject sn tn) isEnum = liftTx $
|
|
Q.unitQE defaultTxErrorHandler [Q.sql|
|
|
UPDATE "hdb_catalog"."hdb_table" SET is_enum = $3
|
|
WHERE table_schema = $1 AND table_name = $2
|
|
|] (sn, tn, isEnum) False
|
|
|
|
updateTableConfig :: (MonadTx m) => QualifiedTable -> TableConfig -> m ()
|
|
updateTableConfig (QualifiedObject sn tn) config = liftTx $
|
|
Q.unitQE defaultTxErrorHandler [Q.sql|
|
|
UPDATE "hdb_catalog"."hdb_table"
|
|
SET configuration = $1
|
|
WHERE table_schema = $2 AND table_name = $3
|
|
|] (configVal, sn, tn) False
|
|
where
|
|
configVal = Q.AltJ $ toJSON config
|
|
|
|
deleteTableFromCatalog :: (MonadTx m) => QualifiedTable -> m ()
|
|
deleteTableFromCatalog (QualifiedObject sn tn) = liftTx $ Q.unitQE defaultTxErrorHandler [Q.sql|
|
|
DELETE FROM "hdb_catalog"."hdb_table"
|
|
WHERE table_schema = $1 AND table_name = $2
|
|
|] (sn, tn) False
|