fix hdb_catalog.hdb_column view (fix #3083) (#3084)

This commit is contained in:
Rakesh Emmadi
2019-10-10 20:41:17 +05:30
committed by Alexis King
parent 3f088cd7ac
commit b0d60ec14f
5 changed files with 97 additions and 5 deletions

View File

@@ -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

View File

@@ -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

View 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;

View File

@@ -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

View File

@@ -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):