use Carp;
use Data::Dumper;
use List::Util qw(first);
-use SL::DB::CustomVariableConfig;
use constant META_CVARS => 'cvars_config';
$params{module} ||= _calc_modules_from_overloads(%params) if $params{overloads};
$params{sub_module} ||= '';
- $params{id} ||= 'id';
+ $params{id} ||= _get_primary_key_column($caller_package);
$params{module} || $params{sub_module} or croak 'need param module or sub_module';
- save_meta_info($caller_package, %params);
+ return unless save_meta_info($caller_package, %params);
make_cvar_accessor($caller_package, %params);
make_cvar_alias($caller_package, %params) if $params{cvars_alias};
make_cvar_by_configs($caller_package, %params);
return 0 if $meta->{META_CVARS()};
$meta->{META_CVARS()} = \%params;
+
+ return 1;
}
sub make_cvar_accessor {
my ($caller_package, %params) = @_;
my @module_filter = $params{module} ?
- ("config.module" => $params{module}) :
+ ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module = '$params{module}')" ]) :
();
$caller_package->meta->add_relationships(
custom_variables => {
type => 'one to many',
class => 'SL::DB::CustomVariable',
- column_map => { ($params{id} || 'id') => 'trans_id' },
- manager_args => { with_objects => 'config' },
+ column_map => { $params{id} => 'trans_id' },
query_args => [ sub_module => $params{sub_module}, @module_filter ],
}
);
sub _all_configs {
my (%params) = @_;
+
+ require SL::DB::CustomVariableConfig;
+
$params{module}
? SL::DB::Manager::CustomVariableConfig->get_all(query => [ module => $params{module} ])
: SL::DB::Manager::CustomVariableConfig->get_all;
sub _overload_by_module {
my ($module, %params) = @_;
- while (my ($fk, $class) = each %{ $params{overloads} }) {
- return ($fk, $class) if $class->meta->{META_CVARS()}->{module} eq $module;
+ keys %{ $params{overloads} }; # reset each iterator
+ while (my ($fk, $def) = each %{ $params{overloads} }) {
+ return ($fk, $def->{class}) if $def->{module} eq $module;
}
croak "unknown overload, cannot resolve module $module";
my (%params) = @_;
my %modules;
- while (my ($fk, $class) = each %{ $params{overloads} }) {
- eval "require $class"; # make sure the class is loaded
- my $module = $class->meta->{META_CVARS()}->{module};
- next if ref $module;
- $modules{$module} = 1;
+ for my $def (values %{ $params{overloads} || {} }) {
+ $modules{$def->{module}} = 1;
}
return [ keys %modules ];
}
+sub _get_primary_key_column {
+ my ($caller_package) = @_;
+ my $meta = $caller_package->meta;
+
+ my $column_name;
+ $column_name = $meta->{primary_key}->{columns}->[0] if $meta->{primary_key} && (ref($meta->{primary_key}->{columns}) eq 'ARRAY') && (1 == scalar(@{ $meta->{primary_key}->{columns} }));
+
+ croak "Unable to retrieve primary key column name: meta information for package $caller_package not set up correctly" unless $column_name;
+
+ return $column_name;
+}
1;
sub_module => 'orderitems',
cvars_alias => 1,
overloads => {
- parts_id => 'SL::DB::Part',
+ parts_id => {
+ class => 'SL::DB::Part',
+ module => 'IC',
+ }
}
);