]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix #1451: take into account the actual coding system when determining the field...
authorLele Gaifax <lele@metapensiero.it>
Fri, 7 Aug 2009 12:34:10 +0000 (12:34 +0000)
committerLele Gaifax <lele@metapensiero.it>
Fri, 7 Aug 2009 12:34:10 +0000 (12:34 +0000)
lib/sqlalchemy/dialects/firebird/base.py
test/dialect/test_firebird.py

index 020977ff5f2152824dd076fcae6f5b7487fb8a49..e89945e0b04b65f5d97830898a2bf8fd188e3cf4 100644 (file)
@@ -475,7 +475,7 @@ class FBDialect(default.DefaultDialect):
                         r.rdb$null_flag AS null_flag,
                         t.rdb$type_name AS ftype,
                         f.rdb$field_sub_type AS stype,
-                        f.rdb$field_length AS flen,
+                        f.rdb$field_length/COALESCE(cs.rdb$bytes_per_character,1) AS flen,
                         f.rdb$field_precision AS fprec,
                         f.rdb$field_scale AS fscale,
                         COALESCE(r.rdb$default_source, f.rdb$default_source) AS fdefault
@@ -483,6 +483,7 @@ class FBDialect(default.DefaultDialect):
              JOIN rdb$fields f ON r.rdb$field_source=f.rdb$field_name
              JOIN rdb$types t
                   ON t.rdb$type=f.rdb$field_type AND t.rdb$field_name='RDB$FIELD_TYPE'
+             LEFT JOIN rdb$character_sets cs ON f.rdb$character_set_id=cs.rdb$character_set_id
         WHERE f.rdb$system_flag=0 AND r.rdb$relation_name=?
         ORDER BY r.rdb$field_position
         """
index 2c427fd2e043a495764710a8b677b327f44be3be..06f62d931383b6e733791785931996abbf5ce51e 100644 (file)
@@ -63,6 +63,7 @@ class DomainReflectionTest(TestBase, AssertsExecutionResults):
         assert isinstance(table.c.question.type, Integer)
         eq_(table.c.question.server_default.arg.text, "42")
         assert isinstance(table.c.answer.type, String)
+        assert table.c.answer.type.length == 255
         eq_(table.c.answer.server_default.arg.text, "'no answer'")
         assert isinstance(table.c.remark.type, Text)
         eq_(table.c.remark.server_default.arg.text, "''")