Newer Older
603 lines | 14.696kb
update pod
Yuki Kimoto authored on 2011-01-28
1
=encoding utf8
2

            
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
3
=head1 NAME
4

            
update pod
Yuki Kimoto authored on 2011-01-28
5
DBIx::Custom::Guide - DBIx::Custom Guide
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
6

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
7
=head1 FEATURES
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
8

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
9
L<DBIx::Custom> is the wrapper class of L<DBI> to execute SQL easily.
10
This module have the following features.
update pod
Yuki Kimoto authored on 2011-01-28
11

            
12
=over 4
13

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
14
=item * Execute INSERT, UPDATE, DELETE, SELECT statement easily
update pod
Yuki Kimoto authored on 2011-01-28
15

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
16
=item * You can specify bind values by hash reference
update pod
Yuki Kimoto authored on 2011-01-28
17

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
18
=item * Filtering by data type. and you can set filter to any column
update pod
Yuki Kimoto authored on 2011-01-28
19

            
fixed end_filter DEPRECATED ...
Yuki Kimoto authored on 2011-07-01
20
=item * Creating where clause and order by clause flexibly
update pod
Yuki Kimoto authored on 2011-01-28
21

            
updated pod
Yuki Kimoto authored on 2011-06-21
22
=item * Support model
update pod
Yuki Kimoto authored on 2011-01-28
23

            
24
=back
25

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
26
=head1 GUIDE
update pod
Yuki Kimoto authored on 2011-01-28
27

            
fixed end_filter DEPRECATED ...
Yuki Kimoto authored on 2011-07-01
28
=head2 Connect to database
update pod
Yuki Kimoto authored on 2011-01-28
29

            
30
    use DBIx::Custom;
31
    my $dbi = DBIx::Custom->connect(
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
32
        dsn => "dbi:mysql:database=bookshop",
update pod
Yuki Kimoto authored on 2011-01-28
33
        user => 'ken',
34
        password => '!LFKD%$&',
updatedd pod
Yuki Kimoto authored on 2011-06-12
35
        dbi_option => {mysql_enable_utf8 => 1}
update pod
Yuki Kimoto authored on 2011-01-28
36
    );
37

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
38
You can connect to database by C<connect> method.
39
C<dsn> is data source name, C<user> is user name, C<password> is password.
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
40

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
41
C<dbi_option> is L<DBI> option.
42
By default, the following option is set.
fixed end_filter DEPRECATED ...
Yuki Kimoto authored on 2011-07-01
43
Exeption is thrown when fatal error occur and commit mode is auto commit.
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
44

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
45
    {
46
        RaiseError  =>  1
47
        PrintError  =>  0
48
        AutoCommit  =>  1
49
    }
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
50

            
fixed end_filter DEPRECATED ...
Yuki Kimoto authored on 2011-07-01
51
=head2 Execute query
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
52

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
53
=head3 Insert Statement : C<insert>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
54

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
55
If you want to execute insert statement, use C<insert> method.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
56

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
57
    $dbi->insert({title => 'Perl', author => 'Ken'}, table  => 'book');
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
58

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
59
First argument is insert row data, C<table>  is table name.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
60

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
61
=head3 Update Statement : C<update>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
62

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
63
If you want to execute update stateimuse, use C<update> method.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
64

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
65
    $dbi->update(
66
        {title => 'Perl', author => 'Ken'},
67
        table  => 'book', 
68
        where  => {id => 5}
69
    );
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
70

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
71
First argument is update row data, C<table> is table name, C<where> is condition.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
72

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
73
Note that you can't execute C<update> method without C<where>.
74
If you want to update all rows, use update_all.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
75

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
76
    $dbi->update_all({title => 'Perl', author => 'Ken'}, table  => 'book');
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
77

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
78
=head3 Delete Statement : C<delete>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
79

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
80
If you want to execute delete statement, use C<delete> method.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
81

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
82
    $dbi->delete(table  => 'book', where  => {author => 'Ken'});
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
83

            
update pod
Yuki Kimoto authored on 2011-01-31
84
C<table> is table name, C<where> is condition.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
85

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
86
Note that you can't execute C<delete> method without C<where>.
87
If you want to delete all rows, use C<delete_all> method.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
88

            
update pod
Yuki Kimoto authored on 2011-01-28
89
    $dbi->delete_all(table  => 'book');
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
90

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
91
=head3 Select Statement : C<select>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
92

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
93
If you want to execute select statement, use C<select> method.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
94

            
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
95
    my $result = $dbi->select(table => 'book');
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
96

            
update pod
Yuki Kimoto authored on 2011-01-31
97
Return value is L<DBIx::Custom::Result> object.
updatedd pod
Yuki Kimoto authored on 2011-06-12
98
You can fetch rows by C<fetch> method.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
99

            
100
    while (my $row = $result->fetch) {
101
        my $title  = $row->[0];
102
        my $author = $row->[1];
103
    }
104

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
105
See also L<Fetch row/"Fetch row"> about L<DBIx::Custom::Result>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
106

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
107
You can specify column names by C<column> option
108
and condition by C<where> option.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
109

            
110
    my $result = $dbi->select(
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
111
        table  => 'book',
update pod
Yuki Kimoto authored on 2011-01-28
112
        column => ['author',  'title'],
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
113
        where  => {author => 'Ken'}
114
    );
115

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
116
You can specify join clause by C<join> option.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
117

            
118
    my $result = $dbi->select(
cleanup
Yuki Kimoto authored on 2011-03-10
119
        table  => 'book',
updatedd pod
Yuki Kimoto authored on 2011-06-12
120
        column => ['company.name as company_name']
cleanup
Yuki Kimoto authored on 2011-03-10
121
        where  => {'book.name' => 'Perl'},
122
        join   => ['left outer join company on book.company_id = company.id]
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
123
    );
124

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
125
Note that join clause is joined only when C<where> or C<column> option contains table name,
126
such as book.name.
cleanup
Yuki Kimoto authored on 2011-03-21
127

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
128
You can append statement to the end of whole statement by C<append> option.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
129

            
130
    my $result = $dbi->select(
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
131
        table  => 'book',
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
132
        where  => {author => 'Ken'},
update pod
Yuki Kimoto authored on 2011-01-28
133
        append => 'for update',
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
134
    );
135

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
136
=head3 C<execute>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
137

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
138
If you want to execute SQL, use C<execute> method.
update pod
Yuki Kimoto authored on 2011-01-28
139

            
140
    $dbi->execute("select * from book;");
141

            
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
142
You can specify named placeholder.
update pod
Yuki Kimoto authored on 2011-01-28
143

            
144
    $dbi->execute(
updated pod
Yuki Kimoto authored on 2011-06-07
145
        "select * from book title = :title and author = :author;"
updatedd pod
Yuki Kimoto authored on 2011-06-12
146
        {title => 'Perl', author => 'Ken'}
update pod
Yuki Kimoto authored on 2011-01-28
147
    );
148

            
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
149
:title and :author is named placeholder, which is replaced to placeholers.
update pod
Yuki Kimoto authored on 2011-01-28
150

            
151
    select * from book title = ? and author = ?;
152

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
153
=head3 C<dbh>
update pod
Yuki Kimoto authored on 2011-01-28
154

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
155
    my $dbh = $dbi->dbh;
update pod
Yuki Kimoto authored on 2011-01-28
156

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
157
Get get database handle object of L<DBI>.
update pod
Yuki Kimoto authored on 2011-01-28
158

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
159
=head3 C<DBI> methods
update pod
Yuki Kimoto authored on 2011-01-28
160

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
161
    $dbi->do(...);
162
    $dbi->begin_work;
update pod
Yuki Kimoto authored on 2011-01-28
163

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
164
You can call all methods of L<DBI> from L<DBIx::Custom> object.
update pod
Yuki Kimoto authored on 2011-01-28
165

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
166
=head2 Fetch Rows
167

            
168
C<select> method return value is L<DBIx::Custom::Result> object.
169
You can fetch a row or rows by various methods.
170

            
171
=head3 Fetch a row (array) : C<fetch>
update pod
Yuki Kimoto authored on 2011-02-04
172

            
173
    my $row = $result->fetch;
174

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
175
C<fetch> method fetch a row and put it into array reference.
176
You can continue to fetch 
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
177

            
178
    while (my $row = $result->fetch) {
update pod
Yuki Kimoto authored on 2011-01-28
179
        my $title  = $row->[0];
180
        my $author = $row->[1];
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
181
    }
182

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
183
=head3 Fetch only first row (array) : C<fetch_first>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
184

            
185
    my $row = $result->fetch_first;
186

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
187
C<fetch_first> fetch a only first row and finish statment handle,
188
and put it into array refrence.
update pod
Yuki Kimoto authored on 2011-01-28
189

            
update pod
Yuki Kimoto authored on 2011-02-11
190
=head3 Fetch all rows (array) : C<fetch_all>
update pod
Yuki Kimoto authored on 2011-01-28
191

            
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
192
    my $rows = $result->fetch_all;
193

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
194
C<fetch_all> fetch all rows and put them into array of array reference.
update pod
Yuki Kimoto authored on 2011-01-28
195

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
196
=head3 Fetch a row (hash) : C<fetch_hash>
update pod
Yuki Kimoto authored on 2011-01-28
197

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
198
    my $row = $result->fetch_hash;
update pod
Yuki Kimoto authored on 2011-01-28
199

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
200
C<fetch_hash> fetch a row and put it into hash reference.
201
You can fetch a row while row exists.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
202

            
203
    while (my $row = $result->fetch_hash) {
204
        my $title  = $row->{title};
205
        my $author = $row->{author};
206
    }
207

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
208
=head3 Fetch only a first row (hash) : C<fetch_hash_first>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
209

            
210
    my $row = $result->fetch_hash_first;
update pod
Yuki Kimoto authored on 2011-01-28
211

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
212
C<fetch_hash_first> fetch only a first row and finish statement handle,
213
and put them into hash refrence.
update pod
Yuki Kimoto authored on 2011-01-28
214

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
215
C<one> is C<fetch_hash_first> synonym to save word typing.
update pod
Yuki Kimoto authored on 2011-01-28
216

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
217
    my $row = $result->one;
update pod
Yuki Kimoto authored on 2011-01-28
218

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
219
=head3 Fetch all rows (hash) : C<fetch_hash_all>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
220

            
221
    my $rows = $result->fetch_hash_all;
222

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
223
C<fetch_hash_all> fetch all rows and put them into array of hash reference.
update pod
Yuki Kimoto authored on 2011-01-28
224

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
225
=head3 Statement Handle : C<sth>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
226

            
227
    my $sth = $result->sth;
228

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
229
If you want to get statment handle, use <sth> method.
update pod
Yuki Kimoto authored on 2011-01-28
230

            
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
231
=head2 Named placeholder
update pod
Yuki Kimoto authored on 2011-01-28
232

            
updated pod
Yuki Kimoto authored on 2011-06-07
233
=head3 Basic of Parameter
update pod
Yuki Kimoto authored on 2011-01-28
234

            
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
235
You can embedd named placeholder into SQL.
update pod
Yuki Kimoto authored on 2011-01-28
236

            
updated pod
Yuki Kimoto authored on 2011-06-07
237
    select * from book where title = :title and author like :author;
update pod
Yuki Kimoto authored on 2011-01-28
238

            
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
239
:title and :author is named placeholder
update pod
Yuki Kimoto authored on 2011-01-28
240

            
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
241
Named placeholder is replaced by place holder.
update pod
Yuki Kimoto authored on 2011-01-28
242

            
243
    select * from book where title = ? and author like ?;
244

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
245
use C<execute> to execute SQL.
update pod
Yuki Kimoto authored on 2011-01-28
246

            
updated pod
Yuki Kimoto authored on 2011-06-07
247
    my $sql = "select * from book where title = :title and author like :author;"
updatedd pod
Yuki Kimoto authored on 2011-06-12
248
    $dbi->execute($sql, {title => 'Perl', author => '%Ken%'});
update pod
Yuki Kimoto authored on 2011-01-28
249

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
250
You can specify C<filter> at C<execute>.
update pod
Yuki Kimoto authored on 2011-01-28
251

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
252
    $dbi->execute($sql, {title => 'Perl', author => '%Ken%'}
update pod
Yuki Kimoto authored on 2011-01-28
253
                  filter => {title => 'to_something');
254

            
update pod
Yuki Kimoto authored on 2011-02-07
255
=head3 Manipulate same name's columns
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
256

            
update pod
Yuki Kimoto authored on 2011-02-07
257
It is ok if there are same name's columns.
258
Let's think two date comparison.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
259

            
updated pod
Yuki Kimoto authored on 2011-06-07
260
    my $sql = "select * from table where date > :date and date < :date;";
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
261

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
262
In this case, You specify parameter values as array reference.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
263

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
264
    my $dbi->execute($sql, {date => ['2010-10-01', '2012-02-10']});
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
265

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
266
=head2 Create where clause
update pod
Yuki Kimoto authored on 2011-01-28
267

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
268
=head3 Dinamically create where clause : where
update pod
Yuki Kimoto authored on 2011-01-28
269

            
update pod
Yuki Kimoto authored on 2011-02-11
270
You want to search multiple conditions in many times.
271
Let's think the following three cases.
update pod
Yuki Kimoto authored on 2011-01-28
272

            
update pod
Yuki Kimoto authored on 2011-02-11
273
Case1: Search only C<title>
update pod
Yuki Kimoto authored on 2011-01-28
274

            
updated pod
Yuki Kimoto authored on 2011-06-07
275
    where title = :title
update pod
Yuki Kimoto authored on 2011-01-28
276

            
update pod
Yuki Kimoto authored on 2011-02-11
277
Case2: Search only C<author>
update pod
Yuki Kimoto authored on 2011-01-28
278

            
updated pod
Yuki Kimoto authored on 2011-06-07
279
    where author = :author
update pod
Yuki Kimoto authored on 2011-01-28
280

            
update pod
Yuki Kimoto authored on 2011-02-11
281
Case3: Search C<title> and C<author>
update pod
Yuki Kimoto authored on 2011-01-28
282

            
updated pod
Yuki Kimoto authored on 2011-06-07
283
    where title = :title and author = :author
update pod
Yuki Kimoto authored on 2011-01-28
284

            
update pod
Yuki Kimoto authored on 2011-02-11
285
L<DBIx::Custom> support dinamic where clause creating.
updatedd pod
Yuki Kimoto authored on 2011-06-12
286
At first, create L<DBIx::Custom::Where> object by C<where>.
update pod
Yuki Kimoto authored on 2011-01-28
287

            
288
    my $where = $dbi->where;
289

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
290
Set clause by C<clause>
update pod
Yuki Kimoto authored on 2011-01-28
291

            
292
    $where->clause(
updated pod
Yuki Kimoto authored on 2011-06-07
293
        ['and', 'title = :title, 'author = :author']
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
294
    );
295

            
update pod
Yuki Kimoto authored on 2011-02-11
296
C<clause> is the following format.
update pod
Yuki Kimoto authored on 2011-01-28
297

            
updated pod
Yuki Kimoto authored on 2011-06-07
298
    ['or' or 'and', PART1, PART1, PART1]
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
299

            
update pod
Yuki Kimoto authored on 2011-02-11
300
First argument is 'or' or 'and'.
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
301
Later than first argument are part which contains named placeholder.
update pod
Yuki Kimoto authored on 2011-01-28
302

            
update pod
Yuki Kimoto authored on 2011-02-11
303
You can write more complex format.
update pod
Yuki Kimoto authored on 2011-01-28
304

            
305
    ['and', 
updated pod
Yuki Kimoto authored on 2011-06-07
306
      'title = :title', 
307
      ['or', 'author = :author', 'date like :date']
update pod
Yuki Kimoto authored on 2011-01-28
308
    ]
309

            
updated pod
Yuki Kimoto authored on 2011-06-07
310
This mean "title = :title and ( author = :author or date like :date )".
update pod
Yuki Kimoto authored on 2011-02-11
311

            
312
After setting C<clause>, set C<param>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
313
    
update pod
Yuki Kimoto authored on 2011-02-11
314
    $where->param({title => 'Perl'});
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
315

            
update pod
Yuki Kimoto authored on 2011-02-11
316
In this example, parameter contains only title.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
317

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
318
If you execute C<string_to>, you can get where clause
I call :title named placehol...
Yuki Kimoto authored on 2011-07-30
319
which contain only named placeholder.
update pod
Yuki Kimoto authored on 2011-01-28
320

            
321
    my $where_clause = $where->to_string;
322

            
update pod
Yuki Kimoto authored on 2011-02-11
323
Parameter name is only title, the following where clause is created.
update pod
Yuki Kimoto authored on 2011-01-28
324

            
updated pod
Yuki Kimoto authored on 2011-06-07
325
    where title = :title
update pod
Yuki Kimoto authored on 2011-01-28
326

            
update pod
Yuki Kimoto authored on 2011-02-11
327
You can also create where clause by stringification.
update pod
Yuki Kimoto authored on 2011-01-28
328

            
329
    my $where_clause = "$where";
330

            
update pod
Yuki Kimoto authored on 2011-02-11
331
This is useful to embbed it into SQL. 
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
332

            
update pod
Yuki Kimoto authored on 2011-02-11
333
=head3 In case where clause contains same name columns
check arguments of connect m...
Yuki Kimoto authored on 2010-12-20
334

            
updated pod
Yuki Kimoto authored on 2011-06-07
335
Even if same name parameters exists, you can create where clause.
update pod
Yuki Kimoto authored on 2011-02-11
336
Let's think that there are starting date and ending date.
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
337

            
update pod
Yuki Kimoto authored on 2011-01-28
338
    my $param = {start_date => '2010-11-15', end_date => '2011-11-21'};
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
339

            
update pod
Yuki Kimoto authored on 2011-02-11
340
In this case, you set parameter value as array reference.
update pod
Yuki Kimoto authored on 2011-01-28
341

            
342
    my $p = {date => ['2010-11-15', '2011-11-21']};
343

            
updated pod
Yuki Kimoto authored on 2011-06-07
344
You can embbed these values into same name parameters.
update pod
Yuki Kimoto authored on 2011-01-28
345

            
346
    $where->clause(
updated pod
Yuki Kimoto authored on 2011-06-07
347
        ['and', 'date > :date', 'date < :date']
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
348
    );
update pod
Yuki Kimoto authored on 2011-01-28
349
    $where->param($p);
350

            
update pod
Yuki Kimoto authored on 2011-02-11
351
If starting date isn't exists, create the following parameter.
update pod
Yuki Kimoto authored on 2011-01-28
352

            
353
    my $p = {date => [$dbi->not_exists, '2011-11-21']};
354

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
355
You can get DBIx::Custom::NotExists object by C<not_exists>
update pod
Yuki Kimoto authored on 2011-02-11
356
This mean correnspondinf value isn't exists.
update pod
Yuki Kimoto authored on 2011-01-28
357

            
update pod
Yuki Kimoto authored on 2011-02-11
358
If ending date isn't exists, create the following parameter.
update pod
Yuki Kimoto authored on 2011-01-28
359

            
360
    my $p = {date => ['2010-11-15']};
361

            
update pod
Yuki Kimoto authored on 2011-02-11
362
If both date isn't exists, create the following parameter.
update pod
Yuki Kimoto authored on 2011-01-28
363

            
364
    my $p = {date => []};
365

            
update pod
Yuki Kimoto authored on 2011-02-11
366
This logic is a little difficut. See the following ones.
update pod
Yuki Kimoto authored on 2011-01-28
367

            
368
    my @date;
369
    push @date, exists $param->{start_date} ? $param->{start_date}
370
                                            : $dbi->not_exists;
371
    push @date, $param->{end_date} if exists $param->{end_date};
372
    my $p = {date => \@date};
373

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
374
=head3 With C<select>
update pod
Yuki Kimoto authored on 2011-01-28
375

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
376
You can pass L<DBIx::Custom::Where> object to C<where> of C<select>.
update pod
Yuki Kimoto authored on 2011-01-28
377
    
378
    my $where = $dbi->where;
updated pod
Yuki Kimoto authored on 2011-06-07
379
    $where->clause(['and', 'title = :title', 'author = :author']);
update pod
Yuki Kimoto authored on 2011-02-11
380
    $where->param({title => 'Perl'});
update pod
Yuki Kimoto authored on 2011-01-28
381
    my $result = $dbi->select(table => 'book', where => $where);
382

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
383
You can also pass it to C<where> of C<update>AC<delete>
update pod
Yuki Kimoto authored on 2011-01-28
384

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
385
=head3 With C<execute>
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
386

            
update pod
Yuki Kimoto authored on 2011-02-11
387
L<DBIx::Custom::Where> object is embedded into SQL.
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
388

            
update pod
Yuki Kimoto authored on 2011-01-28
389
    my $where = $dbi->where;
updated pod
Yuki Kimoto authored on 2011-06-07
390
    $where->clause(['and', 'title = :title', 'author = :author']);
update pod
Yuki Kimoto authored on 2011-02-11
391
    $where->param({title => 'Perl'});
update pod
Yuki Kimoto authored on 2011-01-28
392

            
update pod
Yuki Kimoto authored on 2011-02-11
393
    my $sql = <<"EOS";
updated pod
Yuki Kimoto authored on 2011-06-07
394
    select * from book;
update pod
Yuki Kimoto authored on 2011-01-28
395
    $where
396
    EOS
397

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
398
    $dbi->execute($sql, $param, table => 'book');
399

            
400
=head2 Filtering
401

            
402
=head3 Register filter : C<register_filter>
403

            
404
If you want to register filter, use C<register_filter>.
405

            
406
    $dbi->register_filter(
407
        # Time::Piece object to DATE format
408
        tp_to_date => sub {
409
            my $date = shift;
410
            return $tp->strftime('%Y-%m-%d');
411
        },
412
        
413
        # DATE to Time::Piece object
414
        date_to_tp => sub {
415
            my $date = shift;
416
            return Time::Piece->strptime($date, '%Y-%m-%d');
417
        },
418
    );
419

            
420
=head3 Filter before sending data into database : C<filter> option
421

            
422
If you filter sending data, use C<filter> option.
423

            
424
    $dbi->execute(
425
        'insert into book (date) values (:date)',
426
        {date => $tp},
427
        filter => {date => 'tp_to_date'}
428
    );
429

            
430
You can use C<filter> option in C<insert>, C<update>, C<delete>, C<select> method.
431

            
432
    $dbi->insert(
433
        {date => $tp},
434
        table => 'book',
435
        filter => {date => 'tp_to_date'}
436
    );
437

            
438
=head3 Filter after fetching data from database.
439

            
440
If you filter fetch data, use L<DBIx::Custom::Result>'s C<filter> method.
441

            
442
    my $result = $dbi->select(column => 'date', table => 'book');
443
    $result->filter(date => 'date_to_tp');
444
    my $row = $result->one;
update pod
Yuki Kimoto authored on 2011-01-28
445

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
446
=head2 7. Model
update pod
Yuki Kimoto authored on 2011-01-28
447

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
448
=head3 Model
update pod
Yuki Kimoto authored on 2011-01-28
449

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
450
you can define model extending L<DBIx::Custom::Model>
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
451
to improve source code view.
update pod
Yuki Kimoto authored on 2011-01-28
452

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
453
At first, you create basic model class extending <DBIx::Custom::Model>.
updatedd pod
Yuki Kimoto authored on 2011-06-12
454
Each L<DBIx::Custom> class inherit L<Object::Simple>.
455
so you can inherit the following way.
update pod
Yuki Kimoto authored on 2011-01-28
456

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
457
    package MyModel;
updatedd pod
Yuki Kimoto authored on 2011-06-12
458
    use DBIx::Custom::Model -base;
update pod
Yuki Kimoto authored on 2011-01-28
459

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
460
Next, you create each model classes.
update pod
Yuki Kimoto authored on 2011-01-28
461

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
462
MyModel::book
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
463

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
464
    package MyModel::book;
updatedd pod
Yuki Kimoto authored on 2011-06-12
465
    use MyModel -base;
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
466
    
467
    sub insert { ... }
468
    sub list { ... }
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
469

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
470
MyModel::company
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
471

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
472
    package MyModel::company;
updatedd pod
Yuki Kimoto authored on 2011-06-12
473
    use MyModel -base;
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
474
    
475
    sub insert { ... }
476
    sub list { ... }
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
477

            
478
The follwoing modules location is needed.
479

            
480
    MyModel.pm
481
    MyModel / book.pm
482
            / company.pm
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
483

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
484
You can include these models by C<include_model>
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
485

            
486
    $dbi->include_model('MyModel');
487

            
488
First argument is name space of model.
489

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
490
You can use model like this.
491

            
492
    my $result = $dbi->model('book')->list;
493

            
494
In mode, You can use such as methods,
updatedd pod
Yuki Kimoto authored on 2011-06-12
495
C<insert>, C<update>, C<update_all>,
496
C<delete>, C<delete_all>, C<select>
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
497
without C<table> option.
498

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
499
    $dbi->model('book')->insert($param);
update pod
Yuki Kimoto authored on 2011-01-28
500

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
501
Model is L<DBIx::Custom::Model>.
update pod
Yuki Kimoto authored on 2011-01-28
502

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
503
If you need table nameAyou can get it by C<table>.
update pod
Yuki Kimoto authored on 2011-01-28
504

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
505
    my $table = $model->table;
update pod
Yuki Kimoto authored on 2011-01-28
506

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
507
You can get L<DBIx::Custom>.
update pod
Yuki Kimoto authored on 2011-01-28
508

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
509
    my $dbi = $model->dbi;
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
510

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
511
You can also call all methods of L<DBIx::Custom> and L<DBI>. 
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
512

            
update pod
Yuki Kimoto authored on 2011-02-11
513
    # DBIx::Custom method
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
514
    $model->execute($sql);
update pod
Yuki Kimoto authored on 2011-02-11
515
    
516
    # DBI method
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
517
    $model->begin_work;
518
    $model->commit;
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
519

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
520
If you want to get all models, you can get them by keys of C<models>.
add models() attribute
Yuki Kimoto authored on 2011-02-21
521

            
522
    my @models = keys %{$self->models};
523

            
add DBIx::Custom::Model fore...
Yuki Kimoto authored on 2011-02-21
524
You can set primary key to model.
525

            
526
   $model->primary_key(['id', 'number_id']);
527

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
528
Primary key is used by C<insert>, C<update>, C<delete>,
529
and C<select> methods.
add DBIx::Custom::Model fore...
Yuki Kimoto authored on 2011-02-21
530

            
add DBIx::Custom::Model colu...
Yuki Kimoto authored on 2011-02-21
531
You can set column names
532

            
533
    $model->columns(['id', 'number_id']);
534

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
535
Column names is automarically set by C<setup_model>.
536
This method is needed to be call after C<include_model>.
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
537

            
538
    $dbi->setup_model;
539

            
cleanup
Yuki Kimoto authored on 2011-03-10
540
You can set C<join>
cleanup
Yuki Kimoto authored on 2011-02-22
541

            
cleanup
Yuki Kimoto authored on 2011-03-10
542
    $model->join(['left outer join company on book.company_id = company.id']);
cleanup
Yuki Kimoto authored on 2011-02-22
543

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
544
C<join> is used by C<select> method.
cleanup
Yuki Kimoto authored on 2011-02-22
545

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
546
=head2 Create column clause automatically : mycolumn, column
cleanup
Yuki Kimoto authored on 2011-03-21
547

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
548
To create column clause automatically, use C<mycolumn>.
cleanup
Yuki Kimoto authored on 2011-03-21
549
Valude of C<table> and C<columns> is used.
550

            
cleanup
Yuki Kimoto authored on 2011-06-13
551
    my $mycolumns = $model->mycolumn;
cleanup
Yuki Kimoto authored on 2011-03-21
552

            
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
553
If C<table> is 'book'AC<column> is ['id', 'name'],
cleanup
Yuki Kimoto authored on 2011-03-21
554
the following clause is created.
555

            
556
    book.id as id, book.name as name
557

            
558
These column name is for removing column name ambiguities.
559

            
560
You can create column clause from columns of other table.
561

            
cleanup
Yuki Kimoto authored on 2011-06-13
562
    my $columns = $model->column('company');
cleanup
Yuki Kimoto authored on 2011-03-21
563

            
cleanup
Yuki Kimoto authored on 2011-06-13
564
If C<table> is "company", C<column> return ['id', 'name'],
cleanup
Yuki Kimoto authored on 2011-03-21
565
the following clause is created.
566

            
cleanup
Yuki Kimoto authored on 2011-06-13
567
    company.id as "company.id", company.name as "company.name"
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-22
568

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
569
=head2 Model Examples
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
570

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
571
Model examples
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
572

            
update pod
Yuki Kimoto authored on 2011-01-28
573
    package MyDBI;
updatedd pod
Yuki Kimoto authored on 2011-06-12
574
    use DBIx::Custom -base;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
575
    
update pod
Yuki Kimoto authored on 2011-01-28
576
    sub connect {
577
        my $self = shift->SUPER::connect(@_);
578
        
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
579
        $self->include_model(
580
            MyModel => [
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
581
                'book',
582
                'company'
583
            ]
update pod
Yuki Kimoto authored on 2011-01-28
584
        );
585
    }
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
586
    
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
587
    package MyModel::book;
updatedd pod
Yuki Kimoto authored on 2011-06-12
588
    use DBIx::Custom::Model -base;
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
589
    
updatedd pod
Yuki Kimoto authored on 2011-06-12
590
    has primary_key => sub { ['id'] };
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
591
    
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
592
    sub insert { ... }
593
    sub list { ... }
594
    
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
595
    package MyModel::company;
updatedd pod
Yuki Kimoto authored on 2011-06-12
596
    use DBIx::Custom::Model -base;
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
597

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
598
    has primary_key => sub { ['id'] };
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
599
    
600
    sub insert { ... }
601
    sub list { ... }
update pod
Yuki Kimoto authored on 2011-01-28
602

            
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
603
=cut