
DBomb::Base::Defs - Table definition routines.

package Customer;
use base qw(DBomb::Base);
Customer->def_data_source ('my_db', 'Customer');
Customer->def_accessor ('cust_id', { column => 'id', auto_increment => 1 });
Customer->def_column ('id', { accessor => 'id', auto_increment => 1 }); # Same thing!
Customer->def_accessor ('name'};
Customer->def_accessor ('address');
Customer->def_accessor ('affiliate_id');
Customer->def_accessor ('database_time', { expr => 'now()'} );
## Explicit key creation
Customer->def_primary_key ([qw(id cust_loc)]);
Customer->def_key ([qw(name affiliate_id)]);
## Relationship based on primary key
Customer->def_has_a ('affiliate', 'Affiliate', +{})
Customer->def_has_many ('orders', 'Order',+{})
## Relationship explicitly defined
Customer->def_has_a ('affiliate', [qw(name aff_id)], 'Affiliate_table', [qw(c_name id)]);
Customer->def_has_many ('orders', 'Order', ['cust_id'], ['id'],+{});
## Relationship based on a join
Employee->def_has_many ('supervisors', 'Supervisor',
new DBomb::Query->select('super_id')
->from('emp_super')
->join('employee')
->using('emp_id')
->where(+{emp_id => '?'}), sub { shift->emp_id });
## select multiple columns at once for speed
Customer->def_select_group ([qw(name address)]);
## name the select_group so you can refer to it later
Customer->def_select_group ('reports' => [qw(name affiliate)]);

Customer->def_accessor( 'id', { column => 'cust_id', auto_increment => 1 } );
Options (explained below):
column => NAME auto_increment => BOOLEAN select_when_null => VALUE update_when_empty => VALUE select_trim => BOOLEAN update_trim => BOOLEAN string_mangle => BOOLEAN
The column name in the database. The default is the accessor name.
The column value is generated by the database, and should not be INSERTED.
Select VALUE when a column's value is NULL.
Use VALUE instead of the empty string for updates and inserts.
Trim leading and trailing whitespace after selecting the value from the database.
Trim leading and trailing whitespace before updating or inserting.
Apply all string mangling features to this column. This option is just a shortcut for:
{ select_trim => 1,
update_trim => 1,
select_when_null => '',
update_when_empty => undef }