from .base import \
INTEGER, BIGINT, SMALLINT, VARCHAR, CHAR, TEXT, NUMERIC, FLOAT, REAL, \
- INET, CIDR, UUID, BIT, MACADDR, MONEY, OID, DOUBLE_PRECISION, \
+ INET, CIDR, UUID, BIT, MACADDR, MONEY, OID, REGCLASS, DOUBLE_PRECISION, \
TIMESTAMP, TIME, DATE, BYTEA, BOOLEAN, INTERVAL, ENUM, TSVECTOR, \
DropEnumType, CreateEnumType
from .hstore import HSTORE, hstore
__all__ = (
'INTEGER', 'BIGINT', 'SMALLINT', 'VARCHAR', 'CHAR', 'TEXT', 'NUMERIC',
'FLOAT', 'REAL', 'INET', 'CIDR', 'UUID', 'BIT', 'MACADDR', 'MONEY', 'OID',
- 'DOUBLE_PRECISION', 'TIMESTAMP', 'TIME', 'DATE', 'BYTEA', 'BOOLEAN',
- 'INTERVAL', 'ARRAY', 'ENUM', 'dialect', 'array', 'HSTORE',
+ 'REGCLASS', 'DOUBLE_PRECISION', 'TIMESTAMP', 'TIME', 'DATE', 'BYTEA',
+ 'BOOLEAN', 'INTERVAL', 'ARRAY', 'ENUM', 'dialect', 'array', 'HSTORE',
'hstore', 'INT4RANGE', 'INT8RANGE', 'NUMRANGE', 'DATERANGE',
'TSRANGE', 'TSTZRANGE', 'json', 'JSON', 'JSONB', 'Any', 'All',
'DropEnumType', 'CreateEnumType', 'ExcludeConstraint',
__visit_name__ = "OID"
+class REGCLASS(sqltypes.TypeEngine):
+
+ """Provide the PostgreSQL REGCLASS type.
+
+ .. versionadded:: 1.2.7
+
+ """
+ __visit_name__ = "REGCLASS"
+
+
class TIMESTAMP(sqltypes.TIMESTAMP):
def __init__(self, timezone=False, precision=None):
'macaddr': MACADDR,
'money': MONEY,
'oid': OID,
+ 'regclass': REGCLASS,
'double precision': DOUBLE_PRECISION,
'timestamp': TIMESTAMP,
'timestamp with time zone': TIMESTAMP,
def visit_OID(self, type_, **kw):
return "OID"
+ def visit_REGCLASS(self, type_, **kw):
+ return "REGCLASS"
+
def visit_FLOAT(self, type_, **kw):
if not type_.precision:
return "FLOAT"
assert isinstance(t2.c.y.type, postgresql.OID)
+class RegClassTest(fixtures.TestBase):
+ __only_on__ = 'postgresql'
+ __backend__ = True
+
+ @staticmethod
+ def _scalar(expression):
+ with testing.db.connect() as conn:
+ return conn.scalar(select([expression]))
+
+ def test_cast_name(self):
+ eq_(
+ self._scalar(cast('pg_class', postgresql.REGCLASS)),
+ 'pg_class'
+ )
+
+ def test_cast_path(self):
+ eq_(
+ self._scalar(cast('pg_catalog.pg_class', postgresql.REGCLASS)),
+ 'pg_class'
+ )
+
+ def test_cast_oid(self):
+ regclass = cast('pg_class', postgresql.REGCLASS)
+ oid = self._scalar(cast(regclass, postgresql.OID))
+ assert isinstance(oid, int)
+ eq_(self._scalar(cast(oid, postgresql.REGCLASS)), 'pg_class')
+
+ def test_cast_whereclause(self):
+ pga = Table('pg_attribute', MetaData(testing.db),
+ Column('attrelid', postgresql.OID),
+ Column('attname', String(64)))
+ with testing.db.connect() as conn:
+ oid = conn.scalar(
+ select([pga.c.attrelid]).where(
+ pga.c.attrelid == cast('pg_class', postgresql.REGCLASS)
+ )
+ )
+ assert isinstance(oid, int)
+
+
class NumericInterpretationTest(fixtures.TestBase):
__only_on__ = 'postgresql'
__backend__ = True