Skip to content

Commit c7aadfa

Browse files
committed
feat: add SYS.USER_CONS_COLUMNS compatible view
1 parent 6f51beb commit c7aadfa

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

contrib/ivorysql_ora/expected/ora_sysview.out

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,12 @@ WHERE OBJECT_NAME = 'FUNC_WITH_DEFAULT';
135135
ARG4 | IN | 4 | Y
136136
(5 rows)
137137

138-
-- clean data
139-
DROP FUNCTION IF EXISTS FUNC_WITH_DEFAULT;
138+
-- USER_CONS_COLUMNS
139+
CREATE TABLE
140+
OWNER | TABLE_NAME | CONSTRAINT_NAME | COLUMN_NAME
141+
----------+---------------------+-------------------+-------------
142+
CURRENT_USER | TEST_USER_CONS_COLUMNS | TEST_USER_CONS_COLUMNS_PKEY | ID
143+
CURRENT_USER | TEST_USER_CONS_COLUMNS | TEST_USER_CONS_COLUMNS_NOT_NULL | NAME
144+
(2 rows)
145+
146+
DROP TABLE

contrib/ivorysql_ora/sql/ora_sysview.sql

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,17 @@ SELECT ARGUMENT_NAME, IN_OUT, POSITION, DEFAULTED FROM ALL_ARGUMENTS
8282
WHERE OBJECT_NAME = 'FUNC_WITH_DEFAULT';
8383
-- clean data
8484
DROP FUNCTION IF EXISTS FUNC_WITH_DEFAULT;
85+
86+
-- USER_CONS_COLUMNS
87+
CREATE TABLE TEST_USER_CONS_COLUMNS (
88+
ID INT PRIMARY KEY,
89+
NAME VARCHAR2(30) NOT NULL
90+
);
91+
92+
SELECT OWNER, TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME
93+
FROM SYS.USER_CONS_COLUMNS
94+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
95+
ORDER BY CONSTRAINT_NAME, COLUMN_NAME;
96+
97+
-- Clean
98+
DROP TABLE TEST_USER_CONS_COLUMNS;

contrib/ivorysql_ora/src/sysview/sysview--1.0.sql

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,3 +1192,25 @@ WHERE
11921192
AND PG_GET_USERBYID(C.RELOWNER) = CURRENT_USER;
11931193
GRANT SELECT ON SYS.USER_VIEWS TO PUBLIC;
11941194

1195+
/* USER_CONS_COLUMNS */
1196+
CREATE OR REPLACE VIEW SYS.USER_CONS_COLUMNS AS
1197+
SELECT
1198+
SYS.ORA_CASE_TRANS(PG_GET_USERBYID(C.RELOWNER)::VARCHAR2)::VARCHAR2(128) AS OWNER,
1199+
SYS.ORA_CASE_TRANS(C.RELNAME::VARCHAR2)::VARCHAR2(128) AS TABLE_NAME,
1200+
SYS.ORA_CASE_TRANS(CON.CONNAME::VARCHAR2)::VARCHAR2(128) AS CONSTRAINT_NAME,
1201+
SYS.ORA_CASE_TRANS(ATT.ATTNAME::VARCHAR2)::VARCHAR2(128) AS COLUMN_NAME
1202+
FROM
1203+
PG_CONSTRAINT AS CON
1204+
JOIN PG_CLASS AS C
1205+
ON CON.CONRELID = C.OID
1206+
JOIN PG_ATTRIBUTE AS ATT
1207+
ON ATT.ATTRELID = C.OID
1208+
AND ATT.ATTNUM = ANY(CON.CONKEY)
1209+
WHERE
1210+
C.RELOWNER::REGROLE = CURRENT_USER::REGROLE
1211+
AND C.RELNAMESPACE != 'PG_CATALOG'::REGNAMESPACE::OID
1212+
AND C.RELNAMESPACE != 'PG_TOAST'::REGNAMESPACE::OID
1213+
AND C.RELNAMESPACE != 'INFORMATION_SCHEMA'::REGNAMESPACE::OID
1214+
ORDER BY
1215+
TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME
1216+
;

0 commit comments

Comments
 (0)