-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[#3460] YSQL: Integrate Orafce extension with Yugabyte
Summary: Orafce is a Postgresql extension that contains functions and operators that emulate a subset of packages and features from the Oracle RDBMS. This commit add support for Orafce in YSQL and bundles the extension with the default Yugabyte package. To enable Orafce on a database simply run: ``` CREATE EXTENSION IF NOT EXISTS orafce; ``` Test Plan: To run regression tests for orafce, execute the following command. ``` ybd --java-test org.yb.pgsql.TestPgRegressExtension ``` Reviewers: tnayak, mihnea Reviewed By: mihnea Subscribers: tramer, karthik, kannan, yql Differential Revision: https://phabricator.dev.yugabyte.com/D10771
- Loading branch information
1 parent
8708678
commit 7a3c383
Showing
99 changed files
with
34,008 additions
and
1 deletion.
There are no files selected for viewing
4,402 changes: 4,402 additions & 0 deletions
4,402
src/postgres/src/test/regress/expected/yb_pg_orafce.out
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
-- 2) fails and throws error: 'ERROR: could not determine polymorphic type | ||
-- because input has type "unknown"' | ||
select decode('2012-01-01', '2012-01-01', 23, '2012-01-02', 24); | ||
ERROR: could not determine polymorphic type because input has type unknown |
126 changes: 126 additions & 0 deletions
126
src/postgres/src/test/regress/expected/yb_pg_orafce_aggregates.out
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
-- Tests for the aggregate listagg | ||
SELECT listagg(i::text) from generate_series(1,3) g(i); | ||
listagg | ||
--------- | ||
123 | ||
(1 row) | ||
|
||
SELECT listagg(i::text, ',') from generate_series(1,3) g(i); | ||
listagg | ||
--------- | ||
1,2,3 | ||
(1 row) | ||
|
||
SELECT coalesce(listagg(i::text), '<NULL>') from (SELECT ''::text) g(i); | ||
coalesce | ||
---------- | ||
|
||
(1 row) | ||
|
||
SELECT coalesce(listagg(i::text), '<NULL>') from generate_series(1,0) g(i); | ||
coalesce | ||
---------- | ||
<NULL> | ||
(1 row) | ||
|
||
SELECT wm_concat(i::text) from generate_series(1,3) g(i); | ||
wm_concat | ||
----------- | ||
1,2,3 | ||
(1 row) | ||
|
||
-- Tests for the aggregate median( real | double ) | ||
CREATE FUNCTION checkMedianRealOdd() RETURNS real AS $$ | ||
DECLARE | ||
med real; | ||
|
||
BEGIN | ||
CREATE TABLE median_test (salary real); | ||
INSERT INTO median_test VALUES (4500); | ||
INSERT INTO median_test VALUES (NULL); | ||
INSERT INTO median_test VALUES (2100); | ||
INSERT INTO median_test VALUES (3600); | ||
INSERT INTO median_test VALUES (4000); | ||
SELECT into med median(salary) from median_test; | ||
DROP TABLE median_test; | ||
return med; | ||
|
||
END; | ||
$$ LANGUAGE plpgsql; | ||
CREATE FUNCTION checkMedianRealEven() RETURNS real AS $$ | ||
DECLARE | ||
med real; | ||
|
||
BEGIN | ||
CREATE TABLE median_test (salary real); | ||
INSERT INTO median_test VALUES (4500); | ||
INSERT INTO median_test VALUES (1500); | ||
INSERT INTO median_test VALUES (2100); | ||
INSERT INTO median_test VALUES (3600); | ||
INSERT INTO median_test VALUES (1000); | ||
INSERT INTO median_test VALUES (4000); | ||
select into med median(salary) from median_test; | ||
DROP TABLE median_test; | ||
return med; | ||
END; | ||
$$ LANGUAGE plpgsql; | ||
CREATE FUNCTION checkMedianDoubleOdd() RETURNS double precision AS $$ | ||
DECLARE | ||
med double precision; | ||
BEGIN | ||
CREATE TABLE median_test (salary double precision); | ||
INSERT INTO median_test VALUES (4500); | ||
INSERT INTO median_test VALUES (1500); | ||
INSERT INTO median_test VALUES (2100); | ||
INSERT INTO median_test VALUES (3600); | ||
INSERT INTO median_test VALUES (4000); | ||
select into med median(salary) from median_test; | ||
DROP TABLE median_test; | ||
return med; | ||
END; | ||
$$ LANGUAGE plpgsql; | ||
CREATE FUNCTION checkMedianDoubleEven() RETURNS double precision AS $$ | ||
DECLARE | ||
med double precision; | ||
|
||
BEGIN | ||
CREATE TABLE median_test (salary double precision); | ||
INSERT INTO median_test VALUES (4500); | ||
INSERT INTO median_test VALUES (1500); | ||
INSERT INTO median_test VALUES (2100); | ||
INSERT INTO median_test VALUES (3600); | ||
INSERT INTO median_test VALUES (4000); | ||
INSERT INTO median_test VALUES (1000); | ||
select into med median(salary) from median_test; | ||
DROP TABLE median_test; | ||
return med; | ||
END; | ||
$$ LANGUAGE plpgsql; | ||
SELECT checkMedianRealOdd(); | ||
checkmedianrealodd | ||
-------------------- | ||
3800 | ||
(1 row) | ||
|
||
SELECT checkMedianRealEven(); | ||
checkmedianrealeven | ||
--------------------- | ||
2850 | ||
(1 row) | ||
|
||
SELECT checkMedianDoubleOdd(); | ||
checkmediandoubleodd | ||
---------------------- | ||
3600 | ||
(1 row) | ||
|
||
SELECT checkMedianDoubleEven(); | ||
checkmediandoubleeven | ||
----------------------- | ||
2850 | ||
(1 row) | ||
|
||
DROP FUNCTION checkMedianRealOdd(); | ||
DROP FUNCTION checkMedianRealEven(); | ||
DROP FUNCTION checkMedianDoubleOdd(); | ||
DROP FUNCTION checkMedianDoubleEven(); |
160 changes: 160 additions & 0 deletions
160
src/postgres/src/test/regress/expected/yb_pg_orafce_dbms_alert_session_A.out
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
\set ECHO all | ||
SELECT pg_sleep(3); | ||
pg_sleep | ||
---------- | ||
|
||
(1 row) | ||
|
||
/* | ||
* DBMS_ALERT is used for one-way communication of one session to other. | ||
* | ||
* This session mainly sends signals for testing the alert functionality in | ||
* session B and C. | ||
* | ||
* The following alerts are used to ensure that signals are sent at correct | ||
* times to session B for testing. These signals are sent from session B | ||
* indicating completion of an event. | ||
* After the signal is received, the next required signal for testing is sent | ||
* from this session. | ||
*/ | ||
SELECT dbms_alert.register('b1'); | ||
register | ||
---------- | ||
|
||
(1 row) | ||
|
||
SELECT dbms_alert.register('b2'); | ||
register | ||
---------- | ||
|
||
(1 row) | ||
|
||
SELECT dbms_alert.register('b3'); | ||
register | ||
---------- | ||
|
||
(1 row) | ||
|
||
SELECT dbms_alert.register('b4'); | ||
register | ||
---------- | ||
|
||
(1 row) | ||
|
||
SELECT dbms_alert.register('b5'); | ||
register | ||
---------- | ||
|
||
(1 row) | ||
|
||
SELECT dbms_alert.signal('a1','Msg1 for a1'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
SELECT dbms_alert.signal('a2','Msg1 for a2'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
/* | ||
* Test: defered_signal | ||
* The signal is received only when the signalling transaction commits. | ||
* To test this, an explict BEGIN-COMMIT block is used. | ||
*/ | ||
SELECT dbms_alert.signal('tds','Begin defered_signal test'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
BEGIN; | ||
SELECT dbms_alert.signal('tds','Testing defered_signal'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
/* The signal is received while transaction is running */ | ||
SELECT dbms_alert.waitone('b1',20); | ||
ERROR: current transaction is aborted, commands ignored until end of transaction block | ||
COMMIT; | ||
/* The signal is received after transaction completed. | ||
* After this the tds signal is received in session B indicating that the | ||
* signal is received only after commit. | ||
*/ | ||
SELECT dbms_alert.waitone('b1',20); | ||
waitone | ||
--------- | ||
(,1) | ||
(1 row) | ||
|
||
SELECT dbms_alert.waitone('b2',20); | ||
waitone | ||
--------- | ||
(,1) | ||
(1 row) | ||
|
||
/* This signals a3 which is not registered in Session B */ | ||
SELECT dbms_alert.signal('a3','Msg1 for a3'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
/* alert a4 is signalled soon after a3 */ | ||
SELECT dbms_alert.signal('a4','Test- Register after signal'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
/* This signal indicates at remove() is called */ | ||
SELECT dbms_alert.waitone('b3',20); | ||
waitone | ||
--------- | ||
(,1) | ||
(1 row) | ||
|
||
/* Send signal which is removed in session B */ | ||
SELECT dbms_alert.signal('a1','Msg2 for a1'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
SELECT dbms_alert.waitone('b4',20); | ||
waitone | ||
--------- | ||
(,1) | ||
(1 row) | ||
|
||
/* Send signal which is registered in B and not removed */ | ||
SELECT dbms_alert.signal('a4','Msg1 for a4'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
/* This signal inidcates that removeall() is called */ | ||
SELECT dbms_alert.waitone('b5',20); | ||
waitone | ||
--------- | ||
(,1) | ||
(1 row) | ||
|
||
/* Send a signal to test if session B receives it after removeall() */ | ||
SELECT dbms_alert.signal('a2','Msg2 for a2'); | ||
ERROR: CREATE CONSTRAINT TRIGGER not supported yet | ||
LINE 1: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON o... | ||
^ | ||
HINT: See https://github.com/YugaByte/yugabyte-db/issues/1709. Click '+' on the description to raise its priority | ||
QUERY: CREATE CONSTRAINT TRIGGER ora_alert_signal AFTER INSERT ON ora_alerts INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE dbms_alert.defered_signal() | ||
/* cleanup */ | ||
SELECT dbms_alert.removeall(); | ||
removeall | ||
----------- | ||
|
||
(1 row) |
Oops, something went wrong.