mirror of
https://github.com/zhigang1992/graphql-engine.git
synced 2026-05-24 08:54:11 +08:00
committed by
Alexis King
parent
3f088cd7ac
commit
b0d60ec14f
@@ -19,7 +19,7 @@ import qualified Data.Yaml.TH as Y
|
||||
import qualified Database.PG.Query as Q
|
||||
|
||||
curCatalogVer :: T.Text
|
||||
curCatalogVer = "24"
|
||||
curCatalogVer = "25"
|
||||
|
||||
migrateMetadata
|
||||
:: ( MonadTx m
|
||||
@@ -373,6 +373,13 @@ from23To24 =
|
||||
ALTER TABLE hdb_catalog.hdb_table
|
||||
ADD COLUMN configuration JSONB NOT NULL DEFAULT '{}'::jsonb;
|
||||
|]
|
||||
|
||||
from24To25 :: MonadTx m => m ()
|
||||
from24To25 = do
|
||||
Q.Discard () <- liftTx $ Q.multiQE defaultTxErrorHandler
|
||||
$(Q.sqlFromFile "src-rsr/migrate_from_24_to_25.sql")
|
||||
pure ()
|
||||
|
||||
migrateCatalog
|
||||
:: ( MonadTx m
|
||||
, CacheRWM m
|
||||
@@ -418,6 +425,7 @@ migrateCatalog migrationTime = migrateFrom =<< getCatalogVersion
|
||||
, ("21", from21To22)
|
||||
, ("22", from22To23)
|
||||
, ("23", from23To24)
|
||||
, ("24", from24To25)
|
||||
]
|
||||
|
||||
postMigrate = do
|
||||
|
||||
@@ -450,13 +450,13 @@ CREATE VIEW hdb_catalog.hdb_column AS
|
||||
, coalesce(pkey_refs.ref_tables, '[]') AS primary_key_references
|
||||
, col_description(pg_class.oid, columns.ordinal_position) AS description
|
||||
FROM information_schema.columns
|
||||
JOIN pg_class ON pg_class.relname = columns.table_name
|
||||
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
|
||||
AND pg_namespace.nspname = columns.table_schema
|
||||
LEFT JOIN primary_key_references AS pkey_refs
|
||||
ON columns.table_schema = pkey_refs.src_table_schema
|
||||
AND columns.table_name = pkey_refs.src_table_name
|
||||
AND columns.column_name = pkey_refs.src_column_name
|
||||
LEFT JOIN pg_class ON pg_class.relname = columns.table_name
|
||||
LEFT JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
|
||||
AND pg_namespace.nspname = columns.table_schema;
|
||||
AND columns.column_name = pkey_refs.src_column_name;
|
||||
|
||||
CREATE VIEW hdb_catalog.hdb_table_info_agg AS (
|
||||
select
|
||||
|
||||
34
server/src-rsr/migrate_from_24_to_25.sql
Normal file
34
server/src-rsr/migrate_from_24_to_25.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
CREATE OR REPLACE VIEW hdb_catalog.hdb_column AS
|
||||
WITH primary_key_references AS (
|
||||
SELECT fkey.table_schema AS src_table_schema
|
||||
, fkey.table_name AS src_table_name
|
||||
, fkey.columns->>0 AS src_column_name
|
||||
, json_agg(json_build_object(
|
||||
'schema', fkey.ref_table_table_schema,
|
||||
'name', fkey.ref_table
|
||||
)) AS ref_tables
|
||||
FROM hdb_catalog.hdb_foreign_key_constraint AS fkey
|
||||
JOIN hdb_catalog.hdb_primary_key AS pkey
|
||||
ON pkey.table_schema = fkey.ref_table_table_schema
|
||||
AND pkey.table_name = fkey.ref_table
|
||||
AND pkey.columns::jsonb = fkey.ref_columns::jsonb
|
||||
WHERE json_array_length(fkey.columns) = 1
|
||||
GROUP BY fkey.table_schema
|
||||
, fkey.table_name
|
||||
, fkey.columns->>0)
|
||||
SELECT columns.table_schema
|
||||
, columns.table_name
|
||||
, columns.column_name AS name
|
||||
, columns.udt_name AS type
|
||||
, columns.is_nullable
|
||||
, columns.ordinal_position
|
||||
, coalesce(pkey_refs.ref_tables, '[]') AS primary_key_references
|
||||
, col_description(pg_class.oid, columns.ordinal_position) AS description
|
||||
FROM information_schema.columns
|
||||
JOIN pg_class ON pg_class.relname = columns.table_name
|
||||
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
|
||||
AND pg_namespace.nspname = columns.table_schema
|
||||
LEFT JOIN primary_key_references AS pkey_refs
|
||||
ON columns.table_schema = pkey_refs.src_table_schema
|
||||
AND columns.table_name = pkey_refs.src_table_name
|
||||
AND columns.column_name = pkey_refs.src_column_name;
|
||||
@@ -0,0 +1,47 @@
|
||||
- description: Create new schema and table for enum
|
||||
url: /v1/query
|
||||
status: 200
|
||||
response:
|
||||
result_type: CommandOk
|
||||
result: null
|
||||
query:
|
||||
type: run_sql
|
||||
args:
|
||||
sql: |
|
||||
CREATE SCHEMA IF NOT EXISTS test;
|
||||
CREATE TABLE test.colors
|
||||
( value text PRIMARY KEY
|
||||
, comment text );
|
||||
INSERT INTO test.colors (value, comment) VALUES
|
||||
('red', '#FF0000'),
|
||||
('green', '#00FF00'),
|
||||
('blue', '#0000FF'),
|
||||
('orange', '#FFFF00'),
|
||||
('yellow', '#00FFFF'),
|
||||
('purple', '#FF00FF');
|
||||
|
||||
- description: Track table as enum
|
||||
url: /v1/query
|
||||
status: 200
|
||||
response:
|
||||
message: success
|
||||
query:
|
||||
type: track_table
|
||||
args:
|
||||
table:
|
||||
schema: test
|
||||
name: colors
|
||||
is_enum: true
|
||||
|
||||
- description: Drop schema
|
||||
url: /v1/query
|
||||
status: 200
|
||||
response:
|
||||
result_type: CommandOk
|
||||
result: null
|
||||
query:
|
||||
type: run_sql
|
||||
args:
|
||||
sql: |
|
||||
DROP SCHEMA test CASCADE;
|
||||
cascade: true
|
||||
@@ -636,6 +636,9 @@ class TestSetTableIsEnum(DefaultTestQueries):
|
||||
def test_add_invalid(self, hge_ctx):
|
||||
check_query_f(hge_ctx, self.dir() + '/add_invalid.yaml')
|
||||
|
||||
def test_add_test_schema_enum_table(self, hge_ctx):
|
||||
check_query_f(hge_ctx, self.dir() + '/add_test_schema_enum_table.yaml')
|
||||
|
||||
class TestSetTableCustomFields(DefaultTestQueries):
|
||||
@classmethod
|
||||
def dir(cls):
|
||||
|
||||
Reference in New Issue
Block a user