Skip to content

Commit ea036d0

Browse files
authored
support global sequence (IvorySQL#700)
1 parent e8b6d62 commit ea036d0

File tree

31 files changed

+1598
-147
lines changed

31 files changed

+1598
-147
lines changed

contrib/ivorysql_ora/src/merge/ora_merge.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
#include "access/heapam.h"
6565

6666
#include "../include/ivorysql_ora.h"
67+
#include "nodes/nodes.h"
6768

6869

6970
static TM_Result execDelete4Merge(ModifyTableContext *context, ResultRelInfo *resultRelInfo,
@@ -232,6 +233,7 @@ lmerge_matched:;
232233
break;
233234

234235
case CMD_DELETE:
236+
result = TM_Ok;
235237
break;
236238

237239
case CMD_NOTHING:

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
GRANT USAGE ON SCHEMA sys TO PUBLIC;
2+
SET search_path TO sys;
3+
4+
CREATE table dual (DUMMY pg_catalog.bpchar(1));
5+
insert into dual values('X');
6+
GRANT SELECT ON dual TO PUBLIC;
7+
18
/*
29
* function which converts all-uppercase text to all-lowercase text
310
* and vice versa.
@@ -960,3 +967,49 @@ ORDER BY
960967

961968
/* GRANT SELECT PRIVILEGE TO PUBLIC */
962969
GRANT SELECT ON SYS.USER_ARGUMENTS TO PUBLIC;
970+
971+
/* For sequence VIEWS */
972+
CREATE OR REPLACE VIEW SYS.DBA_SEQUENCES AS
973+
SELECT
974+
c.relowner::regrole AS sequence_owner,c.relname AS sequence_name,s.seqmin AS min_value,s.seqmax AS max_value,
975+
s.seqincrement AS increment_by,s.seqcycle AS cycle_flag,null AS order_flag,s.seqcache AS cache_size,
976+
CASE
977+
WHEN has_sequence_privilege(c.oid, 'SELECT,USAGE'::text)
978+
THEN pg_sequence_last_value(c.oid::regclass)
979+
ELSE NULL::bigint
980+
END AS last_number,
981+
decode(bitand(s.flags, 16), 16, 'Y', 'N') AS scale_flag,
982+
decode(bitand(s.flags, 2048), 2048, 'Y', 'N') AS extend_flag,null AS shared_flag,
983+
decode(bitand(s.flags, 64), 64, 'Y', 'N') AS session_flag,null AS keep_value
984+
FROM PG_SEQUENCE s,pg_class c where s.seqrelid = c.oid;
985+
986+
987+
CREATE OR REPLACE VIEW SYS.ALL_SEQUENCES AS
988+
SELECT
989+
c.relowner::regrole AS sequence_owner,c.relname AS sequence_name,s.seqmin AS min_value,s.seqmax AS max_value,
990+
s.seqincrement AS increment_by,s.seqcycle AS cycle_flag,null AS order_flag,s.seqcache AS cache_size,
991+
CASE
992+
WHEN has_sequence_privilege(c.oid, 'SELECT,USAGE'::text)
993+
THEN pg_sequence_last_value(c.oid::regclass)
994+
ELSE NULL::bigint
995+
END AS last_number,
996+
decode(bitand(s.flags, 16), 16, 'Y', 'N') AS scale_flag,
997+
decode(bitand(s.flags, 2048), 2048, 'Y', 'N') AS extend_flag,null AS shared_flag,
998+
decode(bitand(s.flags, 64), 64, 'Y', 'N') AS session_flag,null AS keep_value
999+
FROM PG_SEQUENCE s,pg_class c where s.seqrelid = c.oid;
1000+
1001+
1002+
CREATE OR REPLACE VIEW SYS.USER_SEQUENCES AS
1003+
SELECT
1004+
c.relname AS sequence_name,s.seqmin AS min_value,s.seqmax AS max_value,
1005+
s.seqincrement AS increment_by,s.seqcycle AS cycle_flag,null AS order_flag,s.seqcache AS cache_size,
1006+
CASE
1007+
WHEN has_sequence_privilege(c.oid, 'SELECT,USAGE'::text)
1008+
THEN pg_sequence_last_value(c.oid::regclass)
1009+
ELSE NULL::bigint
1010+
END AS last_number,
1011+
decode(bitand(s.flags, 16), 16, 'Y', 'N') AS scale_flag,
1012+
decode(bitand(s.flags, 2048), 2048, 'Y', 'N') AS extend_flag,null AS shared_flag,
1013+
decode(bitand(s.flags, 64), 64, 'Y', 'N') AS session_flag,null AS keep_value
1014+
FROM PG_SEQUENCE s,pg_class c where s.seqrelid = c.oid and c.relowner::regrole = current_user::regrole;
1015+

src/backend/catalog/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ install-data: bki-stamp installdirs
132132
$(INSTALL_DATA) $(call vpathsearch,postgres_oracle.bki) '$(DESTDIR)$(datadir)/postgres_oracle.bki'
133133
$(INSTALL_DATA) $(srcdir)/system_views.sql '$(DESTDIR)$(datadir)/system_views.sql'
134134
$(INSTALL_DATA) $(srcdir)/information_schema.sql '$(DESTDIR)$(datadir)/information_schema.sql'
135-
$(INSTALL_DATA) $(srcdir)/ora_sys_schema.sql '$(DESTDIR)$(datadir)/ora_sys_schema.sql'
136135
$(INSTALL_DATA) $(srcdir)/sql_features.txt '$(DESTDIR)$(datadir)/sql_features.txt'
137136
$(INSTALL_DATA) $(srcdir)/fix-CVE-2024-4317.sql '$(DESTDIR)$(datadir)/fix-CVE-2024-4317.sql'
138137

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +0,0 @@
1-
/*
2-
* ora_sys_schema.sql
3-
*
4-
* Oracle Compatibility "sys" schema
5-
*
6-
* Copyright (c) 2023, IvorySQL
7-
*
8-
* src/backend/catalog/ora_sys_schema.sql
9-
*
10-
* IDENTIFICATION
11-
* src/backend/catalog/ora_sys_schema.sql
12-
*
13-
* add the file for requirement "SQL PARSER"
14-
*
15-
*/
16-
17-
GRANT USAGE ON SCHEMA sys TO PUBLIC;
18-
SET search_path TO sys;
19-
20-
CREATE table dual (DUMMY CHAR(1));
21-
insert into dual values('X');
22-
GRANT SELECT ON dual TO PUBLIC;

0 commit comments

Comments
 (0)