Newer Older
608 lines | 14.749kb
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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
20
=item * Creating where clause flexibly
update pod
Yuki Kimoto authored on 2011-01-28
21

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
22
=imte * 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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
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.
43
Fatal error throw exeption 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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
142
You can specify parameters.
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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
149
:title and :author is parameters, 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
See also L<Parameter/"Parameter"> about parameter.
update pod
Yuki Kimoto authored on 2011-01-28
154

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

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

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

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

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

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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
168
=head2 Fetch Rows
169

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

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

            
175
    my $row = $result->fetch;
176

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

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

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

            
187
    my $row = $result->fetch_first;
188

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            
223
    my $rows = $result->fetch_hash_all;
224

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

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

            
229
    my $sth = $result->sth;
230

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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
233
=head2 Parameter
update pod
Yuki Kimoto authored on 2011-01-28
234

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

            
updated pod
Yuki Kimoto authored on 2011-06-07
237
You can embedd parameter into SQL.
update pod
Yuki Kimoto authored on 2011-01-28
238

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

            
updated pod
Yuki Kimoto authored on 2011-06-07
241
:title and :author is parameter
update pod
Yuki Kimoto authored on 2011-01-28
242

            
updated pod
Yuki Kimoto authored on 2011-06-07
243
Parameter is converted to place holder.
update pod
Yuki Kimoto authored on 2011-01-28
244

            
245
    select * from book where title = ? and author like ?;
246

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

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

            
update pod
Yuki Kimoto authored on 2011-02-07
252
You can specify values embedded into place holder as hash reference using
253
C<param> option.
update pod
Yuki Kimoto authored on 2011-01-28
254

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            
293
    my $where = $dbi->where;
294

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

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

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
305
First argument is 'or' or 'and'.
updated pod
Yuki Kimoto authored on 2011-06-07
306
Later than first argument are part which contains parameter.
update pod
Yuki Kimoto authored on 2011-01-28
307

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

            
310
    ['and', 
updated pod
Yuki Kimoto authored on 2011-06-07
311
      'title = :title', 
312
      ['or', 'author = :author', 'date like :date']
update pod
Yuki Kimoto authored on 2011-01-28
313
    ]
314

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

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

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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
323
If you execute C<string_to>, you can get where clause
update pod
Yuki Kimoto authored on 2011-02-11
324
which contain only parameter name.
update pod
Yuki Kimoto authored on 2011-01-28
325

            
326
    my $where_clause = $where->to_string;
327

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

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

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

            
334
    my $where_clause = "$where";
335

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

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

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

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

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

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

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

            
351
    $where->clause(
updated pod
Yuki Kimoto authored on 2011-06-07
352
        ['and', 'date > :date', 'date < :date']
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
353
    );
update pod
Yuki Kimoto authored on 2011-01-28
354
    $where->param($p);
355

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

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

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

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

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

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

            
369
    my $p = {date => []};
370

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

            
373
    my @date;
374
    push @date, exists $param->{start_date} ? $param->{start_date}
375
                                            : $dbi->not_exists;
376
    push @date, $param->{end_date} if exists $param->{end_date};
377
    my $p = {date => \@date};
378

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

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

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

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

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
398
    my $sql = <<"EOS";
updated pod
Yuki Kimoto authored on 2011-06-07
399
    select * from book;
update pod
Yuki Kimoto authored on 2011-01-28
400
    $where
401
    EOS
402

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

            
405
=head2 Filtering
406

            
407
=head3 Register filter : C<register_filter>
408

            
409
If you want to register filter, use C<register_filter>.
410

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

            
425
=head3 Filter before sending data into database : C<filter> option
426

            
427
If you filter sending data, use C<filter> option.
428

            
429
    $dbi->execute(
430
        'insert into book (date) values (:date)',
431
        {date => $tp},
432
        filter => {date => 'tp_to_date'}
433
    );
434

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

            
437
    $dbi->insert(
438
        {date => $tp},
439
        table => 'book',
440
        filter => {date => 'tp_to_date'}
441
    );
442

            
443
=head3 Filter after fetching data from database.
444

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

            
447
    my $result = $dbi->select(column => 'date', table => 'book');
448
    $result->filter(date => 'date_to_tp');
449
    my $row = $result->one;
update pod
Yuki Kimoto authored on 2011-01-28
450

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

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

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

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

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

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

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

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
469
    package MyModel::book;
updatedd pod
Yuki Kimoto authored on 2011-06-12
470
    use MyModel -base;
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
471
    
472
    sub insert { ... }
473
    sub list { ... }
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
474

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

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
477
    package MyModel::company;
updatedd pod
Yuki Kimoto authored on 2011-06-12
478
    use MyModel -base;
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
479
    
480
    sub insert { ... }
481
    sub list { ... }
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
482

            
483
The follwoing modules location is needed.
484

            
485
    MyModel.pm
486
    MyModel / book.pm
487
            / company.pm
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
488

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

            
491
    $dbi->include_model('MyModel');
492

            
493
First argument is name space of model.
494

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

            
497
    my $result = $dbi->model('book')->list;
498

            
499
In mode, You can use such as methods,
updatedd pod
Yuki Kimoto authored on 2011-06-12
500
C<insert>, C<update>, C<update_all>,
501
C<delete>, C<delete_all>, C<select>
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
502
without C<table> option.
503

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

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

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

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

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

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
518
    # DBIx::Custom method
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
519
    $model->execute($sql);
update pod
Yuki Kimoto authored on 2011-02-11
520
    
521
    # DBI method
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
522
    $model->begin_work;
523
    $model->commit;
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
524

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
525
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
526

            
527
    my @models = keys %{$self->models};
528

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

            
531
   $model->primary_key(['id', 'number_id']);
532

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

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

            
538
    $model->columns(['id', 'number_id']);
539

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

            
543
    $dbi->setup_model;
544

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

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

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

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

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

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

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

            
561
    book.id as id, book.name as name
562

            
563
These column name is for removing column name ambiguities.
564

            
565
You can create column clause from columns of other table.
566

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

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

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

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

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

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

            
updatedd pod
Yuki Kimoto authored on 2011-06-12
603
    has primary_key => sub { ['id'] };
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
604
    
605
    sub insert { ... }
606
    sub list { ... }
update pod
Yuki Kimoto authored on 2011-01-28
607

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