Я сбросил схему базы данных MSSQL, используя dbicdump
:
dbicdump \
-o dump_directory=./lib \
-o components='["InflateColumn::DateTime"]' \
-o constraint='qr/(V_A_Table_With_A_Very_Long_Name)/i' \
-o preserve-case=1 \
My::Package dbi:ODBC:dsn=ODBC_Conf my_username 'secret'
Схема сгенерирована правильно, ошибок и предупреждений не было.Хотя одно из имен столбцов в базе данных называется Code_Tranche_Unite_Urbaine_XXXY
, но в соответствующем ResultSource я получил Code_Tranche_Unite_Urbaine_XXX
(без Y в конце):
package My::Schema::Result::VATableWithAVeryLongName;
#...
__PACKAGE__->table("V_A_Table_With_A_Very_Long_Name");
#...
__PACKAGE__->add_columns(
#...
# Should be 'Code_Tranche_Unite_Urbaine_XXXY'
"Code_Tranche_Unite_Urbaine_XXX",
{
accessor => "code_tranche_unite_urbaine_XXX", # No 'Y' here
data_type => "integer",
is_nullable => 1,
},
#...
);
Я сохранил сгенерированный ResultSource как есть, не редактировал его.Похоже, DBIx::Class::Schema::Loader
сокращает имя столбца до 30 символов.Это предположение, потому что мне не удалось найти какую-либо документацию по этому поводу.
Если это могло что-то изменить, V_A_Table_With_A_Very_Long_Name
- это представление MSSQL, доступ к которому осуществляется через ODBC.
Янемного любопытно, почему dbicdump
ведет себя так: я могу сказать, что это потому, что 30 символов действительно слишком длинны , но дело в том, что у вас не всегда есть возможность изменитьсясхема таблицы.
Ожидается ли такое поведение, и если да, то почему это так?Может ли это быть ошибкой?Есть ли способ контролировать это?
Версии: DBIx::Class::Schema::Loader
и dbicdump
происходят из одной и той же DBIx::Class::Schema::Loader
установки, 0.07049