-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1fab692
commit ea1780a
Showing
7 changed files
with
232 additions
and
4 deletions.
There are no files selected for viewing
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
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,203 @@ | ||
|
||
CREATE TYPE currency; | ||
|
||
CREATE FUNCTION supported_currencies() | ||
RETURNS SETOF currency | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
CREATE FUNCTION currency_in(cstring) | ||
RETURNS currency | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
CREATE FUNCTION currency_out(currency) | ||
RETURNS cstring | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
CREATE FUNCTION currency_recv(internal) | ||
RETURNS currency | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
CREATE FUNCTION currency_send(currency) | ||
RETURNS bytea | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
CREATE TYPE currency ( | ||
internallength = 1, | ||
input = currency_in, | ||
output = currency_out, | ||
send = currency_send, | ||
receive = currency_recv, | ||
alignment = char, | ||
PASSEDBYVALUE | ||
); | ||
|
||
COMMENT ON TYPE currency | ||
IS '1-byte ISO 4217 Currency Code'; | ||
|
||
CREATE FUNCTION currency_lt(currency, currency) | ||
RETURNS BOOL | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION currency_lt(currency, currency) IS 'implementation of < operator'; | ||
|
||
CREATE FUNCTION currency_le(currency, currency) | ||
RETURNS BOOL | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION currency_le(currency, currency) IS 'implementation of <= operator'; | ||
|
||
CREATE FUNCTION currency_eq(currency, currency) | ||
RETURNS BOOL | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION currency_eq(currency, currency) IS 'implementation of = operator'; | ||
|
||
CREATE FUNCTION currency_neq(currency, currency) | ||
RETURNS BOOL | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION currency_neq(currency, currency) IS 'implementation of <> operator'; | ||
|
||
CREATE FUNCTION currency_ge(currency, currency) | ||
RETURNS BOOL | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION currency_ge(currency, currency) IS 'implementation of >= operator'; | ||
|
||
CREATE FUNCTION currency_gt(currency, currency) | ||
RETURNS BOOL | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION currency_gt(currency, currency) IS 'implementation of > operator'; | ||
|
||
CREATE FUNCTION hash_currency(currency) | ||
RETURNS integer | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
COMMENT ON FUNCTION hash_currency(currency) IS 'hash'; | ||
|
||
CREATE OPERATOR < ( | ||
leftarg = currency, | ||
rightarg = currency, | ||
procedure = currency_lt, | ||
commutator = >, | ||
negator = >=, | ||
restrict = scalarltsel, | ||
join = scalarltjoinsel | ||
); | ||
|
||
COMMENT ON OPERATOR <(currency, currency) IS 'less than'; | ||
|
||
CREATE OPERATOR <= ( | ||
leftarg = currency, | ||
rightarg = currency, | ||
procedure = currency_le, | ||
commutator = >=, | ||
negator = >, | ||
restrict = scalarltsel, | ||
join = scalarltjoinsel | ||
); | ||
|
||
COMMENT ON OPERATOR <=(currency, currency) IS 'less than or equal'; | ||
|
||
CREATE OPERATOR = ( | ||
leftarg = currency, | ||
rightarg = currency, | ||
procedure = currency_eq, | ||
commutator = =, | ||
negator = <>, | ||
restrict = eqsel, | ||
join = eqjoinsel, | ||
HASHES, MERGES | ||
); | ||
|
||
COMMENT ON OPERATOR =(currency, currency) IS 'equal'; | ||
|
||
CREATE OPERATOR >= ( | ||
leftarg = currency, | ||
rightarg = currency, | ||
procedure = currency_ge, | ||
commutator = <=, | ||
negator = <, | ||
restrict = scalargtsel, | ||
join = scalargtjoinsel | ||
); | ||
|
||
COMMENT ON OPERATOR >=(currency, currency) IS 'greater than or equal'; | ||
|
||
CREATE OPERATOR > ( | ||
leftarg = currency, | ||
rightarg = currency, | ||
procedure = currency_gt, | ||
commutator = <, | ||
negator = <=, | ||
restrict = scalargtsel, | ||
join = scalargtjoinsel | ||
); | ||
|
||
COMMENT ON OPERATOR >(currency, currency) IS 'greater than'; | ||
|
||
CREATE OPERATOR <> ( | ||
leftarg = currency, | ||
rightarg = currency, | ||
procedure = currency_neq, | ||
commutator = <>, | ||
negator = =, | ||
restrict = neqsel, | ||
join = neqjoinsel | ||
); | ||
|
||
COMMENT ON OPERATOR <>(currency, currency) IS 'not equal'; | ||
|
||
CREATE FUNCTION currency_cmp(currency, currency) | ||
RETURNS int4 | ||
AS '$libdir/currency.so' | ||
LANGUAGE C IMMUTABLE STRICT; | ||
|
||
CREATE OPERATOR CLASS currency_ops | ||
DEFAULT FOR TYPE currency USING btree AS | ||
OPERATOR 1 < , | ||
OPERATOR 2 <= , | ||
OPERATOR 3 = , | ||
OPERATOR 4 >= , | ||
OPERATOR 5 > , | ||
FUNCTION 1 currency_cmp(currency, currency); | ||
|
||
CREATE OPERATOR CLASS currency_ops | ||
DEFAULT FOR TYPE currency USING hash AS | ||
OPERATOR 1 = , | ||
FUNCTION 1 hash_currency(currency); | ||
|
||
DO $$ | ||
DECLARE version_num integer; | ||
BEGIN | ||
SELECT current_setting('server_version_num') INTO STRICT version_num; | ||
IF version_num > 90600 THEN | ||
EXECUTE $E$ ALTER FUNCTION currency_in(cstring) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_out(currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_recv(internal) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_send(currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_eq(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_neq(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_lt(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_le(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_gt(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_ge(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION currency_cmp(currency, currency) PARALLEL SAFE $E$; | ||
EXECUTE $E$ ALTER FUNCTION hash_currency(currency) PARALLEL SAFE $E$; | ||
END IF; | ||
END; | ||
$$; | ||
|
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
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
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
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
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