Commit | Line | Data |
19c6539b |
1 | package Schema3::Result::Person; |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use base 'DBIx::Class::Core'; |
7 | |
8 | __PACKAGE__->table('person'); |
9 | |
10 | __PACKAGE__->add_columns( |
11 | id => { |
12 | data_type => 'integer', |
13 | is_auto_increment => 1, |
14 | }, |
15 | name => { |
16 | data_type => 'varchar', |
17 | size => 255, |
18 | }, |
19 | weight => { |
20 | datatype => 'float', |
21 | }, |
22 | height => { |
23 | datatype => 'float', |
24 | }, |
25 | ); |
26 | |
27 | __PACKAGE__->set_primary_key('id'); |
28 | |
29 | # Add virtual column |
30 | __PACKAGE__->resultset_attributes({ |
31 | '+select' => [ \'weight/height' ], |
32 | '+as' => [ 'weight_to_height_ratio' ], |
33 | }); |
34 | |
35 | package Schema3; |
36 | |
37 | use strict; |
38 | use warnings; |
39 | |
40 | use base 'DBIx::Class::Schema'; |
41 | |
42 | __PACKAGE__->register_class(Person => 'Schema3::Result::Person'); |
43 | |
44 | sub load_sql { |
45 | local $/ = undef; |
46 | my $sql = <DATA>; |
47 | } |
48 | |
49 | sub init_schema { |
50 | my $sql = (my $schema = shift) |
51 | ->load_sql; |
52 | |
53 | ($schema->storage->dbh->do($_) || |
54 | die "Error on SQL: $_\n") |
55 | for split(/;\n/, $sql); |
56 | } |
57 | |
58 | 1; |
59 | |
60 | __DATA__ |
61 | CREATE TABLE person ( |
62 | id INTEGER PRIMARY KEY NOT NULL, |
63 | name varchar(255) NOT NULL, |
64 | weight FLOAT NOT NULL, |
65 | height FLOAT NOT NULL |
66 | ); |
67 | |
68 | INSERT INTO person (name, weight, height) |
69 | VALUES |
70 | ('Fred Flintstone', 220, 5.2), |
71 | ('Barney Rubble', 190, 4.8) |