MySQL::Workbench::DBIC - create DBIC scheme for MySQL workbench .mwb files
version 1.21
use MySQL::Workbench::DBIC;
my $foo = MySQL::Workbench::DBIC->new(
file => '/path/to/file.mwb',
output_path => $some_path,
namespace => 'MyApp::DB',
version_add => 0.01,
column_details => 1, # default 1
use_fake_dbic => 1, # default 0
);
$foo->create_schema;
creates a new object of MySQL::Workbench::DBIC. You can pass some parameters to new:
my $foo = MySQL::Workbench::DBIC->new(
output_path => '/path/to/dir',
input_file => '/path/to/dbdesigner.file',
namespace => 'MyApp::Database',
result_namespace => 'Core',
version_add => 0.001,
schema_name => 'MySchema',
column_details => 1,
use_fake_dbic => 1, # default 0.
belongs_to_prefix => 'fk_',
has_many_prefix => 'has_',
uppercase => 1,
);
use_fake_dbic
is helpful when DBIx::Class
is not installed on the
machine where you use this module.
creates all the files that are needed to work with DBIx::Class schema:
The main module that loads all classes and one class per table. If you haven't specified an input file, the module will croak.
sets / gets the output path for the scheme
print $foo->output_path;
sets / gets the name of the Workbench file
print $foo->input_file;
If enabled, the column definitions are more detailed. Default: disabled.
Standard (excerpt from Result classes):
__PACKAGE__->add_columns( qw/
cert_id
register_nr
state
);
With enabled column details:
__PACKAGE__->add_columns(
cert_id => {
data_type => 'integer',
is_nullable => 0,
is_auto_increment => 1,
},
register_nr => {
data_type => 'integer',
is_nullable => 0,
},
state => {
data_type => 'varchar',
size => 1,
is_nullable => 0,
default_value => 'done',
},
);
This is useful when you use DBIx::Class::DeploymentHandler to deploy the columns correctly.
The files should be versioned (e.g. to deploy the DB via DBIx::Class::DeploymentHandler
). On the first run
the version is set to "0.01". When the schema file already exists, the version is increased by the value
of version_add
(default: 0.01)
sets a new name for the schema. By default on of these names is used:
DBIC_Scheme Database DBIC MyScheme MyDatabase DBIxClass_Scheme
sets / gets the name of the namespace. If you set the namespace to 'Test' and you have a table named 'MyTable', the main module is named 'Test::DBIC_Scheme' and the class for 'MyTable' is named 'Test::DBIC_Scheme::Result::MyTable'
sets / gets the name of an optional result namespace. If you set the result_namespace to 'Core' and you have a table named 'MyTable', the class for 'MyTable' is named 'Test::DBIC_Scheme::Core::Result::MyTable'
sets / gets the name of an optional resultset namespace. If you set the resultset_namespace to 'Core' and you have a table named 'MyTable', the resultset class for 'MyTable' is named 'Test::DBIC_Scheme::Core::ResultSet::MyTable'
Additional namespaces to be loaded from the main schema class:
my $foo = MySQL::Workbench::DBIC->new(
output_path => '/path/to/dir',
input_file => '/path/to/dbdesigner.file',
result_namespace => 'Core',
load_result_namespace => 'Virtual', # can be an arrayref, too
);
The schema class loads all namespaces:
__PACKAGE__->load_namespaces(
result_namespace => ['Core', 'Virtual'],
);
Additional namespaces to be loaded from the main schema class:
my $foo = MySQL::Workbench::DBIC->new(
output_path => '/path/to/dir',
input_file => '/path/to/dbdesigner.file',
result_namespace => 'Core',
load_resultset_namespace => [ 'Test', 'Virtual' ], # can be a string, too
);
The schema class loads all namespaces:
__PACKAGE__->load_namespaces(
resultset_namespace => ['Test', 'Virtual'],
result_namespace => 'Core';
);
In relationships the accessor for the objects of the "other" table shouldn't have the name of the column. Otherwise it is very clumsy to get the orginial value of this table.
'belongs_to' => 'fk_'
'has_many' => 'has_'
creates (col1 is the column name of the foreign key)
__PACKAGE__->belongs_to( 'fk_col1' => 'OtherTable', {'foreign.col1' => 'self.col1' } );
When uppercase
is set to true the package names are CamelCase. Given the table names user, user_groups and
groups, the package names would be *::User, *::UserGroups and *::Groups.
When skip_indexes
is true, the sub sqlt_deploy_hook
that adds the indexes to the table is not created
If you use non-ASCII characters in table or column comments, you should set the utf8
attribute to a true value.
Then every generated class has a use utf8;
in it.
If your tables have a common prefix and you do not want to have that prefix
in the class names, you can use remove_table_prefix
:
my $foo = MySQL::Workbench::DBIC->new(
file => $file,
schema_name => 'Schema',
version => '0.01',
remove_table_prefix => 'ot_',
);
This removes any ot_ from the start at the class name.
By default, the classes inherit from DBIx::Class
and they load the components
PK::Auto
and Core
. If you set inherit_from_core, the classes inherit
from DBIx::Class::Core
. and no extra components are loaded.
The MySQL::Workbench::Parser
object.
The distribution is contained in a Git repository, so simply clone the repository
$ git clone git://github.com/reneeb/MySQL-Workbench-DBIC.git
and change into the newly-created directory.
$ cd MySQL-Workbench-DBIC
The project uses Dist::Zilla
to
build the distribution, hence this will need to be installed before
continuing:
$ cpanm Dist::Zilla
To install the required prequisite packages, run the following set of commands:
$ dzil authordeps --missing | cpanm
$ dzil listdeps --author --missing | cpanm
The distribution can be tested like so:
$ dzil test
To run the full set of tests (including author and release-process tests),
add the --author
and --release
options:
$ dzil test --author --release
Renee Baecker reneeb@cpan.org
This software is Copyright (c) 2018 by Renee Baecker.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)