Skip to content

Commit

Permalink
Adding parallism for PostgreSQL 9.6 (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
einhverfr authored Nov 15, 2017
1 parent 3589fd1 commit 81972b7
Show file tree
Hide file tree
Showing 4 changed files with 228 additions and 4 deletions.
6 changes: 3 additions & 3 deletions META.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"name": "currency",
"abstract": "Enumerable currency list, stored in a single-byte, fixed-length type.",
"version": "0.0.2",
"maintainer": [ "Chris Travers <christravers@adjust.com>", "Manuel Kniep <[email protected]>" ],
"version": "0.0.3",
"maintainer": [ "Chris Travers <chris.travers@adjust.com>", "Manuel Kniep <[email protected]>" ],
"license": {
"PostgreSQL": "http://www.postgresql.org/about/licence"
},
"provides": {
"currency": {
"file": "sql/pg-currency.sql",
"version": "0.0.2",
"version": "0.0.3",
"abstract": "Enumerable currency list, stored in a single-byte, fixed-length type."
}
},
Expand Down
2 changes: 1 addition & 1 deletion currency.control
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# currency extension
comment = 'Custom PostgreSQL currency type'
default_version = '0.0.2'
default_version = '0.0.3'
relocatable = true
requires = 'plpgsql'
22 changes: 22 additions & 0 deletions sql/currency--0.0.2--0.0.3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

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;
$$;

202 changes: 202 additions & 0 deletions sql/currency--0.0.3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@

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';

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;
$$;

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);

0 comments on commit 81972b7

Please sign in to comment.