Skip to content

Commit 37c2394

Browse files
authored
Merge pull request IvorySQL#1289 from 3296442201/master
Add SYS.USER_CONS_COLUMNS view and test case
2 parents 97b5b0c + 28dda80 commit 37c2394

3 files changed

Lines changed: 101 additions & 0 deletions

File tree

‎contrib/ivorysql_ora/expected/ora_sysview.out‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,47 @@ ORDER BY NAME;
181181
listen_addresses | 2 | | localhost | FALSE | FALSE | FALSE | Sets the host name or IP address(es) to listen to.
182182
(5 rows)
183183

184+
-- USER_CONS_COLUMNS
185+
CREATE TABLE TEST_USER_CONS_COLUMNS (
186+
ID INT NOT NULL,
187+
NAME VARCHAR2(30) NOT NULL,
188+
AGE INT NOT NULL,
189+
EMAIL VARCHAR2(50),
190+
CONSTRAINT PK_TEST PRIMARY KEY (ID, NAME),
191+
CONSTRAINT UQ_EMAIL UNIQUE (EMAIL)
192+
);
193+
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, POSITION
194+
FROM SYS.USER_CONS_COLUMNS
195+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
196+
AND CONSTRAINT_NAME LIKE '%NOT_NULL%'
197+
ORDER BY CONSTRAINT_NAME, COLUMN_NAME;
198+
table_name | constraint_name | column_name | position
199+
------------------------+--------------------------------------+-------------+----------
200+
TEST_USER_CONS_COLUMNS | TEST_USER_CONS_COLUMNS_AGE_NOT_NULL | AGE | 1
201+
TEST_USER_CONS_COLUMNS | TEST_USER_CONS_COLUMNS_ID_NOT_NULL | ID | 1
202+
TEST_USER_CONS_COLUMNS | TEST_USER_CONS_COLUMNS_NAME_NOT_NULL | NAME | 1
203+
(3 rows)
204+
205+
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, POSITION
206+
FROM SYS.USER_CONS_COLUMNS
207+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
208+
AND CONSTRAINT_NAME = 'PK_TEST'
209+
ORDER BY CONSTRAINT_NAME, POSITION;
210+
table_name | constraint_name | column_name | position
211+
------------------------+-----------------+-------------+----------
212+
TEST_USER_CONS_COLUMNS | PK_TEST | ID | 1
213+
TEST_USER_CONS_COLUMNS | PK_TEST | NAME | 2
214+
(2 rows)
215+
216+
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, POSITION
217+
FROM SYS.USER_CONS_COLUMNS
218+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
219+
AND CONSTRAINT_NAME = 'UQ_EMAIL'
220+
ORDER BY CONSTRAINT_NAME, COLUMN_NAME;
221+
table_name | constraint_name | column_name | position
222+
------------------------+-----------------+-------------+----------
223+
TEST_USER_CONS_COLUMNS | UQ_EMAIL | EMAIL | 1
224+
(1 row)
225+
226+
-- Clean
227+
DROP TABLE IF EXISTS TEST_USER_CONS_COLUMNS;

‎contrib/ivorysql_ora/sql/ora_sysview.sql‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,35 @@ SELECT *
9090
FROM SYS.V$PARAMETER
9191
WHERE NAME IN ('listen_addresses','application_name','archive_command','archive_mode','block_size')
9292
ORDER BY NAME;
93+
94+
-- USER_CONS_COLUMNS
95+
CREATE TABLE TEST_USER_CONS_COLUMNS (
96+
ID INT NOT NULL,
97+
NAME VARCHAR2(30) NOT NULL,
98+
AGE INT NOT NULL,
99+
EMAIL VARCHAR2(50),
100+
CONSTRAINT PK_TEST PRIMARY KEY (ID, NAME),
101+
CONSTRAINT UQ_EMAIL UNIQUE (EMAIL)
102+
);
103+
104+
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, POSITION
105+
FROM SYS.USER_CONS_COLUMNS
106+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
107+
AND CONSTRAINT_NAME LIKE '%NOT_NULL%'
108+
ORDER BY CONSTRAINT_NAME, COLUMN_NAME;
109+
110+
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, POSITION
111+
FROM SYS.USER_CONS_COLUMNS
112+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
113+
AND CONSTRAINT_NAME = 'PK_TEST'
114+
ORDER BY CONSTRAINT_NAME, POSITION;
115+
116+
117+
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, POSITION
118+
FROM SYS.USER_CONS_COLUMNS
119+
WHERE TABLE_NAME = 'TEST_USER_CONS_COLUMNS'
120+
AND CONSTRAINT_NAME = 'UQ_EMAIL'
121+
ORDER BY CONSTRAINT_NAME, COLUMN_NAME;
122+
123+
-- Clean
124+
DROP TABLE IF EXISTS TEST_USER_CONS_COLUMNS;

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,3 +1273,28 @@ SELECT
12731273
SHORT_DESC::VARCHAR2(255) AS DESCRIPTION
12741274
FROM PG_SETTINGS;
12751275

1276+
/* USER_CONS_COLUMNS */
1277+
CREATE OR REPLACE VIEW SYS.USER_CONS_COLUMNS AS
1278+
SELECT
1279+
SYS.ORA_CASE_TRANS(PG_GET_USERBYID(C.RELOWNER)::VARCHAR2)::VARCHAR2(128) AS OWNER,
1280+
SYS.ORA_CASE_TRANS(C.RELNAME::VARCHAR2)::VARCHAR2(128) AS TABLE_NAME,
1281+
SYS.ORA_CASE_TRANS(CON.CONNAME::VARCHAR2)::VARCHAR2(128) AS CONSTRAINT_NAME,
1282+
SYS.ORA_CASE_TRANS(ATT.ATTNAME::VARCHAR2)::VARCHAR2(128) AS COLUMN_NAME,
1283+
ARRAY_POSITION(CON.CONKEY, ATT.ATTNUM)::NUMBER AS POSITION
1284+
FROM
1285+
PG_CONSTRAINT AS CON
1286+
JOIN PG_CLASS AS C
1287+
ON CON.CONRELID = C.OID
1288+
JOIN PG_ATTRIBUTE AS ATT
1289+
ON ATT.ATTRELID = C.OID
1290+
AND ATT.ATTNUM = ANY(CON.CONKEY)
1291+
WHERE
1292+
C.RELOWNER::REGROLE = CURRENT_USER::REGROLE
1293+
AND C.RELNAMESPACE != 'PG_CATALOG'::REGNAMESPACE::OID
1294+
AND C.RELNAMESPACE != 'PG_TOAST'::REGNAMESPACE::OID
1295+
AND C.RELNAMESPACE != 'INFORMATION_SCHEMA'::REGNAMESPACE::OID
1296+
ORDER BY
1297+
TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME
1298+
;
1299+
GRANT SELECT ON SYS.USER_CONS_COLUMNS TO PUBLIC;
1300+

0 commit comments

Comments
 (0)