From da8ff6a7d896cf5bccf52160bff6b4d91b5d186d Mon Sep 17 00:00:00 2001 From: Cleber J Santos Date: Wed, 15 Nov 2017 18:09:23 -0500 Subject: [PATCH] Add postgresql.MONEY Change-Id: I2b40faf583a84bc5b416e1ad3aa812896ea67a8c Pull-request: https://github.com/zzzeek/sqlalchemy/pull/395 --- doc/build/changelog/unreleased_12/pr395.rst | 5 +++++ doc/build/dialects/postgresql.rst | 5 ++++- lib/sqlalchemy/dialects/postgresql/__init__.py | 4 ++-- lib/sqlalchemy/dialects/postgresql/base.py | 14 ++++++++++++++ test/dialect/postgresql/test_types.py | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 doc/build/changelog/unreleased_12/pr395.rst diff --git a/doc/build/changelog/unreleased_12/pr395.rst b/doc/build/changelog/unreleased_12/pr395.rst new file mode 100644 index 0000000000..dc71f89265 --- /dev/null +++ b/doc/build/changelog/unreleased_12/pr395.rst @@ -0,0 +1,5 @@ +.. change:: + :tags: feature, postgresql + + Added new :class:`.postgresql.MONEY` datatype. Pull request courtesy + Cleber J Santos. \ No newline at end of file diff --git a/doc/build/dialects/postgresql.rst b/doc/build/dialects/postgresql.rst index 35bf2e568a..db5101badd 100644 --- a/doc/build/dialects/postgresql.rst +++ b/doc/build/dialects/postgresql.rst @@ -15,7 +15,7 @@ they originate from :mod:`sqlalchemy.types` or from the local dialect:: from sqlalchemy.dialects.postgresql import \ ARRAY, BIGINT, BIT, BOOLEAN, BYTEA, CHAR, CIDR, DATE, \ DOUBLE_PRECISION, ENUM, FLOAT, HSTORE, INET, INTEGER, \ - INTERVAL, JSON, JSONB, MACADDR, NUMERIC, OID, REAL, SMALLINT, TEXT, \ + INTERVAL, JSON, JSONB, MACADDR, MONEY, NUMERIC, OID, REAL, SMALLINT, TEXT, \ TIME, TIMESTAMP, UUID, VARCHAR, INT4RANGE, INT8RANGE, NUMRANGE, \ DATERANGE, TSRANGE, TSTZRANGE, TSVECTOR @@ -79,6 +79,9 @@ construction arguments, are as follows: .. autoclass:: MACADDR :members: __init__ +.. autoclass:: MONEY + :members: __init__ + .. autoclass:: OID :members: __init__ diff --git a/lib/sqlalchemy/dialects/postgresql/__init__.py b/lib/sqlalchemy/dialects/postgresql/__init__.py index a6872cfb26..c534b34573 100644 --- a/lib/sqlalchemy/dialects/postgresql/__init__.py +++ b/lib/sqlalchemy/dialects/postgresql/__init__.py @@ -12,7 +12,7 @@ base.dialect = psycopg2.dialect from .base import \ INTEGER, BIGINT, SMALLINT, VARCHAR, CHAR, TEXT, NUMERIC, FLOAT, REAL, \ - INET, CIDR, UUID, BIT, MACADDR, OID, DOUBLE_PRECISION, TIMESTAMP, TIME, \ + INET, CIDR, UUID, BIT, MACADDR, MONEY, OID, DOUBLE_PRECISION, TIMESTAMP, TIME, \ DATE, BYTEA, BOOLEAN, INTERVAL, ENUM, dialect, TSVECTOR, DropEnumType, \ CreateEnumType from .hstore import HSTORE, hstore @@ -26,7 +26,7 @@ from .ranges import INT4RANGE, INT8RANGE, NUMRANGE, DATERANGE, TSRANGE, \ __all__ = ( 'INTEGER', 'BIGINT', 'SMALLINT', 'VARCHAR', 'CHAR', 'TEXT', 'NUMERIC', - 'FLOAT', 'REAL', 'INET', 'CIDR', 'UUID', 'BIT', 'MACADDR', 'OID', + 'FLOAT', 'REAL', 'INET', 'CIDR', 'UUID', 'BIT', 'MACADDR', 'MONEY', 'OID', 'DOUBLE_PRECISION', 'TIMESTAMP', 'TIME', 'DATE', 'BYTEA', 'BOOLEAN', 'INTERVAL', 'ARRAY', 'ENUM', 'dialect', 'array', 'HSTORE', 'hstore', 'INT4RANGE', 'INT8RANGE', 'NUMRANGE', 'DATERANGE', diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index 641c62a6a5..32de7861a0 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -973,6 +973,16 @@ class MACADDR(sqltypes.TypeEngine): PGMacAddr = MACADDR +class MONEY(sqltypes.TypeEngine): + + """Provide the PostgreSQL MONEY type. + + .. versionadded:: 1.2 + + """ + __visit_name__ = "MONEY" + + class OID(sqltypes.TypeEngine): """Provide the PostgreSQL OID type. @@ -1362,6 +1372,7 @@ ischema_names = { 'bit': BIT, 'bit varying': BIT, 'macaddr': MACADDR, + 'money': MONEY, 'oid': OID, 'double precision': DOUBLE_PRECISION, 'timestamp': TIMESTAMP, @@ -1831,6 +1842,9 @@ class PGTypeCompiler(compiler.GenericTypeCompiler): def visit_MACADDR(self, type_, **kw): return "MACADDR" + def visit_MONEY(self, type_, **kw): + return "MONEY" + def visit_OID(self, type_, **kw): return "OID" diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py index 499217fddd..dea17bc2a9 100644 --- a/test/dialect/postgresql/test_types.py +++ b/test/dialect/postgresql/test_types.py @@ -1650,6 +1650,7 @@ class SpecialTypesTest(fixtures.TestBase, ComparesTables, AssertsCompiledSQL): 'bitstring', postgresql.BIT(4)), Column('addr', postgresql.INET), Column('addr2', postgresql.MACADDR), + Column('price', postgresql.MONEY), Column('addr3', postgresql.CIDR), Column('doubleprec', postgresql.DOUBLE_PRECISION), Column('plain_interval', postgresql.INTERVAL), -- 2.47.3