From 54dd8b851b8378419594b6a629c30d9b7b47b7c7 Mon Sep 17 00:00:00 2001 From: Lele Gaifax Date: Fri, 7 Aug 2009 12:34:10 +0000 Subject: [PATCH] Fix #1451: take into account the actual coding system when determining the field length --- lib/sqlalchemy/dialects/firebird/base.py | 3 ++- test/dialect/test_firebird.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py index 020977ff5f..e89945e0b0 100644 --- a/lib/sqlalchemy/dialects/firebird/base.py +++ b/lib/sqlalchemy/dialects/firebird/base.py @@ -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 """ diff --git a/test/dialect/test_firebird.py b/test/dialect/test_firebird.py index 2c427fd2e0..06f62d9313 100644 --- a/test/dialect/test_firebird.py +++ b/test/dialect/test_firebird.py @@ -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, "''") -- 2.47.3