Skip to content

Commit a8199de

Browse files
feat(ivorysql_ora): complete USER_TABLES view
ci-os-only: linux Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent f3053b9 commit a8199de

3 files changed

Lines changed: 119 additions & 0 deletions

File tree

‎contrib/ivorysql_ora/expected/ora_sysview.out‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,3 +493,46 @@ LINE 1: SELECT COLLATION_NAME FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_N...
493493
^
494494
\set ON_ERROR_STOP on
495495
DROP TABLE IF EXISTS TEST_ALL_TAB_COLUMNS;
496+
-- USER_TABLES
497+
\pset format unaligned
498+
\pset tuples_only on
499+
DROP TABLE IF EXISTS TEST_USER_TABLES;
500+
NOTICE: table "test_user_tables" does not exist, skipping
501+
CREATE TABLE TEST_USER_TABLES (ID INT);
502+
INSERT INTO TEST_USER_TABLES VALUES (1), (2), (3);
503+
ANALYZE TEST_USER_TABLES;
504+
SELECT TABLE_NAME, STATUS, NUM_ROWS, TEMPORARY, PARTITIONED,
505+
(LAST_ANALYZED IS NOT NULL) AS ANALYZED
506+
FROM SYS.USER_TABLES
507+
WHERE TABLE_NAME = 'TEST_USER_TABLES';
508+
TEST_USER_TABLES|VALID|3|N|NO|t
509+
CREATE TEMP TABLE TEST_USER_TABLES_TEMP (ID INT);
510+
SELECT TABLE_NAME, TEMPORARY
511+
FROM SYS.USER_TABLES
512+
WHERE TABLE_NAME = 'TEST_USER_TABLES_TEMP';
513+
TEST_USER_TABLES_TEMP|Y
514+
CREATE TABLE TEST_USER_TABLES_PART (ID INT) PARTITION BY RANGE (ID);
515+
CREATE TABLE TEST_USER_TABLES_PART_1
516+
PARTITION OF TEST_USER_TABLES_PART FOR VALUES FROM (0) TO (10);
517+
SELECT TABLE_NAME, PARTITIONED
518+
FROM SYS.USER_TABLES
519+
WHERE TABLE_NAME LIKE 'TEST_USER_TABLES_PART%'
520+
ORDER BY TABLE_NAME;
521+
TEST_USER_TABLES_PART|YES
522+
-- A relation owned by another role is not listed.
523+
DROP ROLE IF EXISTS user_tables_owner;
524+
NOTICE: role "user_tables_owner" does not exist, skipping
525+
CREATE ROLE user_tables_owner;
526+
CREATE TABLE TEST_USER_TABLES_OTHER (ID INT);
527+
ALTER TABLE TEST_USER_TABLES_OTHER OWNER TO user_tables_owner;
528+
SELECT COUNT(*) AS ROWS_FOR_OTHER_OWNER
529+
FROM SYS.USER_TABLES
530+
WHERE TABLE_NAME = 'TEST_USER_TABLES_OTHER';
531+
0
532+
DROP TABLE TEST_USER_TABLES_OTHER;
533+
DROP ROLE user_tables_owner;
534+
DROP TABLE TEST_USER_TABLES_PART;
535+
DROP TABLE TEST_USER_TABLES_TEMP;
536+
DROP TABLE TEST_USER_TABLES;
537+
\pset tuples_only off
538+
\pset format aligned

‎contrib/ivorysql_ora/sql/ora_sysview.sql‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,45 @@ SELECT COLLATION_NAME FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME = 'TEST_ALL_TAB_
270270
\set ON_ERROR_STOP on
271271

272272
DROP TABLE IF EXISTS TEST_ALL_TAB_COLUMNS;
273+
274+
-- USER_TABLES
275+
\pset format unaligned
276+
\pset tuples_only on
277+
DROP TABLE IF EXISTS TEST_USER_TABLES;
278+
CREATE TABLE TEST_USER_TABLES (ID INT);
279+
INSERT INTO TEST_USER_TABLES VALUES (1), (2), (3);
280+
ANALYZE TEST_USER_TABLES;
281+
SELECT TABLE_NAME, STATUS, NUM_ROWS, TEMPORARY, PARTITIONED,
282+
(LAST_ANALYZED IS NOT NULL) AS ANALYZED
283+
FROM SYS.USER_TABLES
284+
WHERE TABLE_NAME = 'TEST_USER_TABLES';
285+
286+
CREATE TEMP TABLE TEST_USER_TABLES_TEMP (ID INT);
287+
SELECT TABLE_NAME, TEMPORARY
288+
FROM SYS.USER_TABLES
289+
WHERE TABLE_NAME = 'TEST_USER_TABLES_TEMP';
290+
291+
CREATE TABLE TEST_USER_TABLES_PART (ID INT) PARTITION BY RANGE (ID);
292+
CREATE TABLE TEST_USER_TABLES_PART_1
293+
PARTITION OF TEST_USER_TABLES_PART FOR VALUES FROM (0) TO (10);
294+
SELECT TABLE_NAME, PARTITIONED
295+
FROM SYS.USER_TABLES
296+
WHERE TABLE_NAME LIKE 'TEST_USER_TABLES_PART%'
297+
ORDER BY TABLE_NAME;
298+
299+
-- A relation owned by another role is not listed.
300+
DROP ROLE IF EXISTS user_tables_owner;
301+
CREATE ROLE user_tables_owner;
302+
CREATE TABLE TEST_USER_TABLES_OTHER (ID INT);
303+
ALTER TABLE TEST_USER_TABLES_OTHER OWNER TO user_tables_owner;
304+
SELECT COUNT(*) AS ROWS_FOR_OTHER_OWNER
305+
FROM SYS.USER_TABLES
306+
WHERE TABLE_NAME = 'TEST_USER_TABLES_OTHER';
307+
308+
DROP TABLE TEST_USER_TABLES_OTHER;
309+
DROP ROLE user_tables_owner;
310+
DROP TABLE TEST_USER_TABLES_PART;
311+
DROP TABLE TEST_USER_TABLES_TEMP;
312+
DROP TABLE TEST_USER_TABLES;
313+
\pset tuples_only off
314+
\pset format aligned

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,3 +1557,37 @@ WHERE
15571557
AND NOT pg_class.relispartition;
15581558

15591559
GRANT SELECT ON SYS.ALL_TAB_COLUMNS TO PUBLIC;
1560+
1561+
--
1562+
-- USER_TABLES: tables owned by the current user.
1563+
--
1564+
CREATE OR REPLACE VIEW SYS.USER_TABLES AS
1565+
SELECT
1566+
sys.ora_case_trans(c.relname::varchar2)::varchar2(128) AS table_name,
1567+
NULL::varchar2(30) AS tablespace_name,
1568+
'VALID'::varchar2(8) AS status,
1569+
CASE
1570+
WHEN c.reltuples < 0 THEN NULL
1571+
ELSE c.reltuples::numeric
1572+
END AS num_rows,
1573+
GREATEST(
1574+
pg_catalog.pg_stat_get_last_analyze_time(c.oid),
1575+
pg_catalog.pg_stat_get_last_autoanalyze_time(c.oid)
1576+
) AS last_analyzed,
1577+
CASE
1578+
WHEN c.relpersistence = 't' THEN 'Y'
1579+
ELSE 'N'
1580+
END::varchar2(1) AS temporary,
1581+
CASE
1582+
WHEN c.relkind = 'p' THEN 'YES'
1583+
ELSE 'NO'
1584+
END::varchar2(3) AS partitioned
1585+
FROM pg_catalog.pg_class c
1586+
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
1587+
WHERE
1588+
c.relowner::regrole = current_user::regrole
1589+
AND c.relkind IN ('r', 'p')
1590+
AND n.nspname NOT IN ('pg_catalog', 'pg_toast', 'information_schema')
1591+
AND NOT c.relispartition;
1592+
1593+
GRANT SELECT ON SYS.USER_TABLES TO PUBLIC;

0 commit comments

Comments
 (0)