__visit_name__ = "REAL"
def __init__(self, **kw):
- # REAL is a synonym for FLOAT(24) on SQL server
- kw["precision"] = 24
+ # REAL is a synonym for FLOAT(24) on SQL server.
+ # it is only accepted as the word "REAL" in DDL, the numeric
+ # precision value is not allowed to be present
+ kw.setdefault("precision", 24)
super(REAL, self).__init__(**kw)
)
coltype = sqltypes.NULLTYPE
else:
- if (
- issubclass(coltype, sqltypes.Numeric)
- and coltype is not MSReal
- ):
- kwargs["scale"] = numericscale
+ if issubclass(coltype, sqltypes.Numeric):
kwargs["precision"] = numericprec
+ if not issubclass(coltype, sqltypes.Float):
+ kwargs["scale"] = numericscale
+
coltype = coltype(**kwargs)
cdict = {
"name": name,
Column("user_name", types.VARCHAR(20), nullable=False),
Column("test1", types.CHAR(5), nullable=False),
Column("test2", types.Float(5), nullable=False),
+ Column("test2.5", types.Float(), nullable=False),
Column("test3", types.Text()),
Column("test4", types.Numeric, nullable=False),
+ Column("test4.5", types.Numeric(10, 2), nullable=False),
Column("test5", types.DateTime),
Column(
"parent_user_id",
def test_money_type(self):
self._test_specific_type(mssql.MONEY, "MONEY")
+ def test_numeric_prec_scale(self):
+ self._test_specific_type(mssql.NUMERIC(10, 2), "NUMERIC(10, 2)")
+
+ def test_float(self):
+ self._test_specific_type(mssql.FLOAT, "FLOAT(53)")
+
+ def test_real(self):
+ self._test_specific_type(mssql.REAL, "REAL")
+
+ def test_float_as_real(self):
+ # FLOAT(5) comes back as REAL
+ self._test_specific_type(mssql.FLOAT(5), "REAL")
+
@testing.provide_metadata
def test_identity(self):
metadata = self.metadata