diff options
| author | Brad Allen <bradallen137@gmail.com> | 2010-03-18 16:50:35 -0600 |
|---|---|---|
| committer | Brad Allen <bradallen137@gmail.com> | 2010-03-18 16:50:35 -0600 |
| commit | f0f0cc65fb7aa2fcac62bb99dd8d1fedb6bb2823 (patch) | |
| tree | f9b4c0ff2c28e411eb4379a55a3063bf3448060f /lib/sqlalchemy | |
| parent | f9fc9f85affff548a298e6f8a4db497dff6ea6f3 (diff) | |
| parent | 15003ba66cc85537dd2adcf38a042d979353523b (diff) | |
| download | sqlalchemy-f0f0cc65fb7aa2fcac62bb99dd8d1fedb6bb2823.tar.gz | |
Merged latest tip
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/sybase/base.py | 8 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sybase/pysybase.py | 17 | ||||
| -rw-r--r-- | lib/sqlalchemy/types.py | 5 |
3 files changed, 28 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/sybase/base.py b/lib/sqlalchemy/dialects/sybase/base.py index 5814f70da..bdaab2eb7 100644 --- a/lib/sqlalchemy/dialects/sybase/base.py +++ b/lib/sqlalchemy/dialects/sybase/base.py @@ -370,6 +370,14 @@ class SybaseDialect(default.DefaultDialect): text("SELECT user_name() as user_name", typemap={'user_name':Unicode}) ) + def initialize(self, connection): + super(SybaseDialect, self).initialize(connection) + if self.server_version_info is not None and\ + self.server_version_info < (15, ): + self.max_identifier_length = 30 + else: + self.max_identifier_length = 255 + @reflection.cache def get_table_names(self, connection, schema=None, **kw): if schema is None: diff --git a/lib/sqlalchemy/dialects/sybase/pysybase.py b/lib/sqlalchemy/dialects/sybase/pysybase.py index 8944465ee..ee1938250 100644 --- a/lib/sqlalchemy/dialects/sybase/pysybase.py +++ b/lib/sqlalchemy/dialects/sybase/pysybase.py @@ -21,10 +21,18 @@ kind at this time. """ +from sqlalchemy import types as sqltypes, processors from sqlalchemy.dialects.sybase.base import SybaseDialect, \ SybaseExecutionContext, SybaseSQLCompiler +class _SybNumeric(sqltypes.Numeric): + def result_processor(self, dialect, type_): + if not self.asdecimal: + return processors.to_float + else: + return sqltypes.Numeric.result_processor(self, dialect, type_) + class SybaseExecutionContext_pysybase(SybaseExecutionContext): def set_ddl_autocommit(self, dbapi_connection, value): @@ -52,6 +60,11 @@ class SybaseDialect_pysybase(SybaseDialect): execution_ctx_cls = SybaseExecutionContext_pysybase statement_compiler = SybaseSQLCompiler_pysybase + colspecs={ + sqltypes.Numeric:_SybNumeric, + sqltypes.Float:sqltypes.Float + } + @classmethod def dbapi(cls): import Sybase @@ -69,7 +82,9 @@ class SybaseDialect_pysybase(SybaseDialect): cursor.execute(statement, param) def _get_server_version_info(self, connection): - return connection.scalar("select @@version_number") + vers = connection.scalar("select @@version_number") + # i.e. 15500, 15000, 12500 == (15, 5, 0, 0), (15, 0, 0, 0), (12, 5, 0, 0) + return (vers / 1000, vers % 1000 / 100, vers % 100 / 10, vers % 10) def is_disconnect(self, e): if isinstance(e, (self.dbapi.OperationalError, self.dbapi.ProgrammingError)): diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 3feac8f4f..16cd57f26 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -940,7 +940,10 @@ class Numeric(_DateAffinity, TypeEngine): return None else: # we're a "numeric", DBAPI returns floats, convert. - return processors.to_decimal_processor_factory(_python_Decimal, self.scale) + if self.scale is not None: + return processors.to_decimal_processor_factory(_python_Decimal, self.scale) + else: + return processors.to_decimal_processor_factory(_python_Decimal) else: if dialect.supports_native_decimal: return processors.to_float |
