Newer Older
1329 lines | 32.588kb
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

            
pod fix
Yuki Kimoto authored on 2011-01-21
7
=head1 GUIDE
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
8

            
update pod
Yuki Kimoto authored on 2011-01-28
9
B<This guide is now writing.>
update pod
Yuki Kimoto authored on 2011-01-26
10

            
update pod
Yuki Kimoto authored on 2011-01-28
11
L<DBIx::Custom> is the class to make easy to execute SQL.
12
This is L<DBI> wrapper class like L<DBIx::Class> or L<DBIx::Simple>.
13
You can do thing more easy than L<DBIx::Class>, more flexible
14
than L<DBIx::Simple>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
15

            
update pod
Yuki Kimoto authored on 2011-02-11
16
L<DBIx::Custom> is not O/R mapper, O/R mapper is usefule, but
update pod
Yuki Kimoto authored on 2011-01-28
17
you must learn many things. Created SQL is sometimes inefficient,
18
and in many cases you create raw SQL because
19
O/R mapper can't make complex SQL
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
20

            
update pod
Yuki Kimoto authored on 2011-01-28
21
L<DBIx::Custom> is opposit of O/R mapper.
22
The main purpose is that we respect SQL
23
and make easy difficult works if you use only L<DBI>.
24
If you already learn SQL, it is easy to use L<DBIx::Custom>.
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
25

            
update pod
Yuki Kimoto authored on 2011-01-28
26
I explain L<DBIx::Custom> a little in this section.
27
In L<DBIx::Custom>, you embbed tag in SQL.
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
28

            
update pod
Yuki Kimoto authored on 2011-01-28
29
    select * from book where {= title} and {=author};
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
30

            
update pod
Yuki Kimoto authored on 2011-01-28
31
The part arround {} is tag.
32
This SQL is converted to the one which contains place holder.
33

            
34
    select * from book where title = ? and author = ?;
35

            
36
Maybe you ask me that this conversion is meaningful.
37
On the top of this, usuful features is implemented.
38
See the following descriptions.
39

            
40
=over 4
41

            
42
=item 1. Specify place holder binding value as hash refernce
43

            
44
If you use L<DBI>, you must specify place holder binding value
45
as array.
46

            
47
    $sth->execute(@bind);
48

            
49
If you use L<DBIx::Custom>, you specify it as hash reference.
50
    
51
    my $param = {title => 'Perl', author => 'Ken'};
52
    $dbi->execute($sql, $param);
53

            
54
=item 2. Filtering
55

            
56
L<DBIx::Custom> provides filtering system.
57
For example, You think that about date value you want to 
58
manipulate it as date object like L<Time::Piece> in Perl,
59
and want to convert it to database DATE format.
60
and want to do reverse.
61

            
62
You can use filtering system.
63

            
64
At first, register filter.
65

            
66
    $dbi->register_filter(
67
        tp_to_date => sub {
68
            ...
69
        },
70
        date_to_tp => sub {
71
            ...
72
        }
73
    );
74

            
75
next, apply this filter to each column.
76

            
77
    $dbi->apply_filter('book',
78
        'issue_date' => {out => 'tp_to_date', in => 'date_to_tp'}
79
    );
80

            
81
C<out> is perl-to-database way. C<in> is perl-from-database way.
82

            
83
This filter is automatically enabled in many method.
84

            
85
    $dbi->insert(table => 'book', param => {issue_date => $tp});
86

            
87

            
88
=item 3. Selective search condition
89

            
90
It is difficult to create selective where clause in L<DBI>.
91
For example, If C<title> and C<author> is specified, we create 
92
the following SQL.
93

            
94
    select * from book where title = ? and author = ?;
95

            
96
If only C<title> is specified, the following one
97

            
98
    select * from book where title = ?;
99

            
100
If only C<author> is specified, the following one,
101

            
102
    select * from book where author = ?;
103

            
104
This is hard work. Generally we use modules like L<SQL::Abstract>.
105
L<DBIx::Custom> prepare the way to make it easy.
106

            
107
    # Where object
108
    my $where = $dbi->where;
109
    
110
    # Search condition
111
    $where->clause(
112
        ['and', '{= title}', {'= author'}]
113
    );
114
    
115
    # Setting to automatically select needed column
116
    $where->param({title => 'Perl'});
117

            
118
    # Embbed where clause to SQL
119
    my $sql = "select * from book $where";
120

            
121
You can create where clause which has selected search condition.
122
You can write nesting of where clause and C<or> condition
123

            
update pod
Yuki Kimoto authored on 2011-01-30
124
=item 4. Methods for insert, update, delete, select
update pod
Yuki Kimoto authored on 2011-01-28
125

            
update pod
Yuki Kimoto authored on 2011-01-30
126
L<DBIx::Custom> provides methods for insert, update, delete, select
127
There are C<insert()>, C<update()>, C<delete()>,C<select()>.
update pod
Yuki Kimoto authored on 2011-01-28
128

            
129
    my $param = {title => 'Perl', author => 'Ken'};
130
    $dbi->insert(table => 'book', param => $param);
131

            
update pod
Yuki Kimoto authored on 2011-01-30
132
=item 5. Register method for table.
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
133

            
update pod
Yuki Kimoto authored on 2011-01-30
134
You can register method for table.
update pod
Yuki Kimoto authored on 2011-01-28
135

            
update pod
Yuki Kimoto authored on 2011-01-30
136
    $dbi->table('book')->method(
update pod
Yuki Kimoto authored on 2011-01-28
137
        list => sub {
138
            ...
139
        },
update pod
Yuki Kimoto authored on 2011-01-30
140
        something => sub {
141
            ...
update pod
Yuki Kimoto authored on 2011-01-28
142
        }
143
    );
144

            
update pod
Yuki Kimoto authored on 2011-01-30
145
use the mehtod.
update pod
Yuki Kimoto authored on 2011-01-28
146

            
147
    $dbi->table('book')->list;
148

            
update pod
Yuki Kimoto authored on 2011-01-30
149
Many O/R mapper must create class for table,
150
but L<DBIx::Custom> make it easy.
update pod
Yuki Kimoto authored on 2011-01-28
151

            
152
=back
153

            
update pod
Yuki Kimoto authored on 2011-01-30
154
L<DBIx::Custom> is very useful.
155
See the following if you are interested in it.
update pod
Yuki Kimoto authored on 2011-01-28
156

            
update pod
Yuki Kimoto authored on 2011-01-30
157
=head2 1. Connect to database
update pod
Yuki Kimoto authored on 2011-01-28
158

            
update pod
Yuki Kimoto authored on 2011-01-30
159
Load L<DBIx::Custom>.
update pod
Yuki Kimoto authored on 2011-01-28
160

            
161
    use DBIx::Custom;
162

            
update pod
Yuki Kimoto authored on 2011-01-30
163
use C<connect()> to connect to database.
164
Return value is L<DBIx::Custom> object.
update pod
Yuki Kimoto authored on 2011-01-28
165

            
166
    my $dbi = DBIx::Custom->connect(
update pod
Yuki Kimoto authored on 2011-01-30
167
        data_source => "dbi:mysql:database=bookstore",
update pod
Yuki Kimoto authored on 2011-01-28
168
        user => 'ken',
169
        password => '!LFKD%$&',
170
        dbi_options => {mysql_enable_utf8 => 1}
171
    );
172

            
update pod
Yuki Kimoto authored on 2011-01-30
173
C<data_source> must be one corresponding to the database system.
174
The following ones are data source example.
update pod
Yuki Kimoto authored on 2011-01-28
175

            
176
B<MySQL>
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
177

            
178
    "dbi:mysql:database=$database"
179
    "dbi:mysql:database=$database;host=$hostname;port=$port"
180

            
update pod
Yuki Kimoto authored on 2011-01-28
181
B<SQLite>
182

            
183
    "dbi:SQLite:dbname=$database"
184
    "dbi:SQLite:dbname=:memory:"
185

            
186
B<PostgreSQL>
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
187

            
188
    "dbi:Pg:dbname=$dbname"
189

            
update pod
Yuki Kimoto authored on 2011-01-28
190
B<Oracle>
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
191

            
192
    "dbi:Oracle:$dbname"
193
    "dbi:Oracle:host=$host;sid=$sid"
194

            
update pod
Yuki Kimoto authored on 2011-01-28
195
B<ODBC(Microsoft Access)>
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
196

            
197
    "dbi:ODBC:driver=Microsoft Access Driver (*.mdb);dbq=hoge.mdb"
198

            
update pod
Yuki Kimoto authored on 2011-01-28
199
B<ODBC(SQL Server)>
deprecated DBIx::Custom::MyS...
root authored on 2010-11-26
200

            
201
   "dbi:ODBC:driver={SQL Server};Server=(local);database=test;Trusted_Connection=yes;AutoTranslate=No;"
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
202

            
update pod
Yuki Kimoto authored on 2011-01-30
203
If authentication is needed, you can specify C<user> and C<password>
204

            
205
L<DBIx::Custom> is wrapper class of L<DBI>.
206
You can use all methods of L<DBI> from L<DBIx::Custom> object.
207

            
208
    $dbi->do(...);
209
    $dbi->begin_work;
update pod
Yuki Kimoto authored on 2011-01-28
210

            
update pod
Yuki Kimoto authored on 2011-01-30
211
use C<dhb()> to get database handle of L<DBI>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
212

            
update pod
Yuki Kimoto authored on 2011-01-28
213
    my $dbh = $dbi->dbh;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
214

            
update pod
Yuki Kimoto authored on 2011-01-30
215
By default, the following ones is set to database handle attributes.
216

            
217
    RaiseError  ->  1
218
    PrintError  ->  0
219
    AutoCommit  ->  1
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
220

            
update pod
Yuki Kimoto authored on 2011-01-30
221
If fatal error occuer, program terminate.
222
If SQL is executed, commit is executed automatically.
update pod
Yuki Kimoto authored on 2011-01-28
223

            
update pod
Yuki Kimoto authored on 2011-01-31
224
=head2 2. Methods for insert, update, delete, or insert
update pod
Yuki Kimoto authored on 2011-01-28
225

            
update pod
Yuki Kimoto authored on 2011-01-31
226
There are following methods.
update pod
Yuki Kimoto authored on 2011-01-28
227

            
update pod
Yuki Kimoto authored on 2011-01-31
228
=head3 C<insert()>
update pod
Yuki Kimoto authored on 2011-01-28
229

            
update pod
Yuki Kimoto authored on 2011-01-31
230
use C<insert()> to insert row into database
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
231

            
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
232
    $dbi->insert(table  => 'book',
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
233
                 param  => {title => 'Perl', author => 'Ken'});
234

            
update pod
Yuki Kimoto authored on 2011-01-31
235
C<table> is table name, C<param> is insert data.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
236

            
update pod
Yuki Kimoto authored on 2011-01-31
237
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
238

            
update pod
Yuki Kimoto authored on 2011-01-28
239
    insert into (title, author) values (?, ?);
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
240

            
update pod
Yuki Kimoto authored on 2011-01-31
241
=head3 C<update()>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
242

            
update pod
Yuki Kimoto authored on 2011-01-31
243
use C<update()> to update row in database.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
244

            
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
245
    $dbi->update(table  => 'book', 
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
246
                 param  => {title => 'Perl', author => 'Ken'}, 
247
                 where  => {id => 5});
248

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

            
update pod
Yuki Kimoto authored on 2011-01-31
251
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
252

            
update pod
Yuki Kimoto authored on 2011-01-28
253
    update book set title = ?, author = ?;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
254

            
update pod
Yuki Kimoto authored on 2011-01-31
255
You can't execute C<update()> without C<where> for safety.
256
use C<update_all()> if you want to update all rows.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
257

            
update pod
Yuki Kimoto authored on 2011-01-28
258
    $dbi->update_all(table  => 'book', 
259
                     param  => {title => 'Perl', author => 'Ken'});
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
260

            
update pod
Yuki Kimoto authored on 2011-01-31
261
=head3 C<delete()>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
262

            
update pod
Yuki Kimoto authored on 2011-01-31
263
use C<delete()> to delete rows from database.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
264

            
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
265
    $dbi->delete(table  => 'book',
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
266
                 where  => {author => 'Ken'});
267

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

            
update pod
Yuki Kimoto authored on 2011-01-31
270
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
271

            
update pod
Yuki Kimoto authored on 2011-01-28
272
    delete from book where id = ?;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
273

            
update pod
Yuki Kimoto authored on 2011-01-31
274
You can't execute C<delete()> without C<where> for safety.
275
use C<delete_all()> if you want to delete all rows.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
276

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

            
update pod
Yuki Kimoto authored on 2011-01-31
279
=head3 C<select()>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
280

            
update pod
Yuki Kimoto authored on 2011-01-31
281
use C<select()> to select rows from database
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
282

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

            
update pod
Yuki Kimoto authored on 2011-01-31
285
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
286

            
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
287
    select * from book;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
288

            
update pod
Yuki Kimoto authored on 2011-01-31
289
Return value is L<DBIx::Custom::Result> object.
290
use C<fetch()> to fetch row.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
291

            
292
    while (my $row = $result->fetch) {
293
        my $title  = $row->[0];
294
        my $author = $row->[1];
295
    }
296

            
update pod
Yuki Kimoto authored on 2011-01-31
297
See L<3. Fetch row/"3. Fetch row"> about L<DBIx::Custom::Result>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
298

            
update pod
Yuki Kimoto authored on 2011-01-31
299
Continue more examples.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
300

            
301
    my $result = $dbi->select(
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
302
        table  => 'book',
update pod
Yuki Kimoto authored on 2011-01-28
303
        column => ['author',  'title'],
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
304
        where  => {author => 'Ken'}
305
    );
306

            
update pod
Yuki Kimoto authored on 2011-01-31
307
C<column> is column names, C<where> is condition.
308

            
309
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
310

            
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
311
    select author, title from book where author = ?;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
312

            
update pod
Yuki Kimoto authored on 2011-01-31
313
Next example.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
314

            
315
    my $result = $dbi->select(
DBIx::Custom::Model select()...
Yuki Kimoto authored on 2011-02-22
316
        table    => 'book',
update pod
Yuki Kimoto authored on 2011-01-31
317
        where    => {'book.name' => 'Perl'},
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
318
        relation => {'book.id' => 'rental.book_id'}
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
319
    );
320

            
update pod
Yuki Kimoto authored on 2011-01-31
321
C<relation> is relation of tables. This is inner join.
322

            
323
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
324

            
update pod
Yuki Kimoto authored on 2011-01-28
325
    select * from book, rental where book.name = ? and book.id = rental.book_id;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
326

            
update pod
Yuki Kimoto authored on 2011-01-31
327
Next example.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
328

            
329
    my $result = $dbi->select(
remove DBIx::Custom::Model
Yuki Kimoto authored on 2011-01-12
330
        table  => 'book',
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
331
        where  => {author => 'Ken'},
update pod
Yuki Kimoto authored on 2011-01-28
332
        append => 'for update',
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
333
    );
334

            
update pod
Yuki Kimoto authored on 2011-01-31
335
C<append> is string appending to end of SQL.
336

            
337
Following SQL is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
338

            
update pod
Yuki Kimoto authored on 2011-01-28
339
    select * book where author = ? for update;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
340

            
update pod
Yuki Kimoto authored on 2011-01-31
341
C<appned> is also used at C<insert()>, C<update()>, C<update_all()>
342
C<delete()>, C<delete_all()>, and C<select()>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
343

            
update pod
Yuki Kimoto authored on 2011-02-11
344
Instead of C<column> and C<table>,
345
you can use C<selection>.
346
This is used to specify column names and table names at once
347

            
348
    my $selection = <<"EOS";
349
    title, author, company_name
350
    from book inner join company on book.company_id = company.id
351
    EOS
352

            
353
    $dbi->select(selection => $selection);
354

            
355
Note that you can't use where clause in C<selection>.
356
use clause like "inner join".
357

            
update pod
Yuki Kimoto authored on 2011-02-11
358
=head3 C<execute()>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
359

            
update pod
Yuki Kimoto authored on 2011-01-31
360
use C<execute()> to execute SQL
update pod
Yuki Kimoto authored on 2011-01-28
361

            
362
    $dbi->execute("select * from book;");
363

            
update pod
Yuki Kimoto authored on 2011-01-31
364
Process tag and execute SQL.
update pod
Yuki Kimoto authored on 2011-01-28
365

            
366
    $dbi->execute(
367
        "select * from book {= title} and {= author};"
368
        param => {title => 'Perl', author => 'Ken'}
369
    );
370

            
update pod
Yuki Kimoto authored on 2011-01-31
371
Following SQL is executed.
update pod
Yuki Kimoto authored on 2011-01-28
372

            
373
    select * from book title = ? and author = ?;
374

            
update pod
Yuki Kimoto authored on 2011-01-31
375
Values of title and author is embbdeded into placeholder.
update pod
Yuki Kimoto authored on 2011-01-28
376

            
update pod
Yuki Kimoto authored on 2011-01-31
377
See L<5. Tag/"5. Tag"> about tag.
update pod
Yuki Kimoto authored on 2011-01-28
378

            
update pod
Yuki Kimoto authored on 2011-01-31
379
You don't have to wirte last semicolon in C<execute()>. 
update pod
Yuki Kimoto authored on 2011-01-28
380

            
381
    $dbi->execute('select * from book');
382

            
update pod
Yuki Kimoto authored on 2011-02-28
383
=head3 insert by using primary key : C<insert_at()>
384

            
385
To insert row by using primary key, use C<insert_at()>
386

            
387
    $dbi->insert_at(
388
        table => 'book', primary_key => ['id'],
389
        where => ['123'], param => {name => 'Ken'}
390
    );
391

            
392
In this example, row which id column is 123 is inserted.
393
NOTE that you must pass array reference as C<where>.
394
If C<param> contains primary key, the key and value is delete from C<param>.
395

            
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
396
=head3 Update by using primary key : C<update_at()>
397

            
398
To update row by using primary key, use C<update_at()>
399

            
400
    $dbi->update_at(
401
        table => 'book', primary_key => ['id'],
402
        where => ['123'], param => {name => 'Ken'}
403
    );
404

            
405
In this example, row which id column is 123 is updated.
406
NOTE that you must pass array reference as C<where>.
407
If C<param> contains primary key, the key and value is delete from C<param>.
408

            
409
=head3 Delete by using primary key : C<delete_at()>
410

            
411
To delete row by using primary key, use C<delete_at()>
412

            
413
    $dbi->delete_at(table => 'book', primary_key => ['id'], where => ['123']);
414

            
415
In this example, row which id column is 123 is deleted.
416
NOTE that you must pass array reference as C<where>.
417

            
418
You can also write arguments like this.
419

            
420
    $dbi->delete_at(table => 'book', primary_key => ['id'], param => {id => '123'});
421

            
422
=head3 Select by using primary key : C<select_at()>
423

            
424
To select row by using primary key, use C<select_at()>.
425

            
426
    $dbi->select_at(table => 'book', primary_key => ['id'], where => ['123']);
427

            
428
In this example, row which id colunm is 123 is selected.
429
NOTE that you must pass array reference as C<where>.
430

            
431
You can also write arguments like this.
432

            
433
    $dbi->select_at(table => 'book', primary_key => ['id'], param => {id => '123'});
434

            
update pod
Yuki Kimoto authored on 2011-02-04
435
=head2 3. Fetch row
update pod
Yuki Kimoto authored on 2011-01-28
436

            
update pod
Yuki Kimoto authored on 2011-02-04
437
Return value of C<select()> is L<DBIx::Custom::Result> object.
438
There are many methods to fetch row.
update pod
Yuki Kimoto authored on 2011-01-28
439

            
update pod
Yuki Kimoto authored on 2011-02-11
440
=head3 Fetch a row (array) : C<fetch()>
update pod
Yuki Kimoto authored on 2011-01-28
441

            
update pod
Yuki Kimoto authored on 2011-02-04
442
use C<fetch()> to fetch a row and assign it into array reference.
443

            
444
    my $row = $result->fetch;
445

            
446
You can get all rows.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
447

            
448
    while (my $row = $result->fetch) {
update pod
Yuki Kimoto authored on 2011-01-28
449
        my $title  = $row->[0];
450
        my $author = $row->[1];
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
451
    }
452

            
update pod
Yuki Kimoto authored on 2011-02-11
453
=head3 Fetch only first row (array) : C<fetch_first()>
update pod
Yuki Kimoto authored on 2011-01-28
454

            
update pod
Yuki Kimoto authored on 2011-02-04
455
use C<fetch_first()> to fetch only first row.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
456

            
457
    my $row = $result->fetch_first;
458

            
update pod
Yuki Kimoto authored on 2011-02-04
459
You can't fetch rest rows
460
because statement handle C<finish()> is executed.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
461

            
update pod
Yuki Kimoto authored on 2011-02-11
462
=head3 Fetch rows (array) : C<fetch_multi()>
update pod
Yuki Kimoto authored on 2011-01-28
463

            
update pod
Yuki Kimoto authored on 2011-02-04
464
use C<fetch_multi()> to fetch rows and assign it into
465
array reference which has array references as element.
update pod
Yuki Kimoto authored on 2011-01-28
466

            
467
    while (my $rows = $result->fetch_multi(2)) {
468
        my $title0   = $rows->[0][0];
469
        my $author0  = $rows->[0][1];
470
        
471
        my $title1   = $rows->[1][0];
472
        my $author1  = $rows->[1][1];
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
473
    }
update pod
Yuki Kimoto authored on 2011-01-28
474

            
update pod
Yuki Kimoto authored on 2011-02-04
475
Specify row count as argument.
update pod
Yuki Kimoto authored on 2011-01-28
476

            
update pod
Yuki Kimoto authored on 2011-02-04
477
You can get the following data.
update pod
Yuki Kimoto authored on 2011-01-28
478

            
479
    [
480
        ['Perl', 'Ken'],
481
        ['Ruby', 'Mark']
482
    ]
483

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

            
update pod
Yuki Kimoto authored on 2011-02-04
486
use C<fetch_all()> to fetch all rows and assign it into
487
array reference which has array reference as element.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
488

            
489
    my $rows = $result->fetch_all;
490

            
update pod
Yuki Kimoto authored on 2011-02-04
491
You can get the following data.
update pod
Yuki Kimoto authored on 2011-01-28
492

            
493
    [
494
        ['Perl', 'Ken'],
495
        ['Ruby', 'Mark']
496
    ]
497

            
update pod
Yuki Kimoto authored on 2011-02-11
498
=head3 Fetch a row (hash) : C<fetch_hash()>
update pod
Yuki Kimoto authored on 2011-01-28
499

            
update pod
Yuki Kimoto authored on 2011-02-04
500
use C<fetch_hash()> to fetch a row and assign it into hash reference.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
501

            
502
    while (my $row = $result->fetch_hash) {
503
        my $title  = $row->{title};
504
        my $author = $row->{author};
505
    }
506

            
update pod
Yuki Kimoto authored on 2011-02-11
507
=head3 Fetch only first row (hash) : C<fetch_hash_first()>
update pod
Yuki Kimoto authored on 2011-01-28
508

            
update pod
Yuki Kimoto authored on 2011-02-04
509
use C<fetch_hash_first()> to fetch only first row
510
and assign it into hash reference.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
511

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

            
update pod
Yuki Kimoto authored on 2011-02-04
514
You can't fetch rest rows
515
because statement handle C<finish()> is executed.
update pod
Yuki Kimoto authored on 2011-01-28
516

            
update pod
Yuki Kimoto authored on 2011-02-11
517
=head3 Fetch rows (hash) : C<fetch_hash_multi()>
update pod
Yuki Kimoto authored on 2011-01-28
518

            
update pod
Yuki Kimoto authored on 2011-02-04
519
use C<fetch_hash_multi()> to fetch rows and
520
assign it into array reference which has hash references as element.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
521

            
522
    while (my $rows = $result->fetch_hash_multi(5)) {
update pod
Yuki Kimoto authored on 2011-01-28
523
        my $title0   = $rows->[0]{title};
524
        my $author0  = $rows->[0]{author};
525
        my $title1  = $rows->[1]{title};
526
        my $author1 = $rows->[1]{author};
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
527
    }
update pod
Yuki Kimoto authored on 2011-01-28
528

            
update pod
Yuki Kimoto authored on 2011-02-04
529
Specify row count as argument.
update pod
Yuki Kimoto authored on 2011-01-28
530

            
update pod
Yuki Kimoto authored on 2011-02-04
531
You can get the following data.
update pod
Yuki Kimoto authored on 2011-01-28
532

            
533
    [
534
        {title => 'Perl', author => 'Ken'},
535
        {title => 'Ruby', author => 'Mark'}
536
    ]
537

            
update pod
Yuki Kimoto authored on 2011-02-11
538
=head3 Fetch all rows (hash) : C<fetch_hash_all()>
update pod
Yuki Kimoto authored on 2011-01-28
539

            
update pod
Yuki Kimoto authored on 2011-02-04
540
use C<fetch_hash_all()> to fetch all rows and
541
assign it into array reference which has hash 
542
references as element.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
543

            
544
    my $rows = $result->fetch_hash_all;
545

            
update pod
Yuki Kimoto authored on 2011-02-04
546
You can get the following data.
update pod
Yuki Kimoto authored on 2011-01-28
547

            
548
    [
549
        {title => 'Perl', author => 'Ken'},
550
        {title => 'Ruby', author => 'Mark'}
551
    ]
552

            
update pod
Yuki Kimoto authored on 2011-02-11
553
=head3 Statement handle : C<sth()>
update pod
Yuki Kimoto authored on 2011-01-28
554

            
update pod
Yuki Kimoto authored on 2011-02-04
555
use <sth()> to get statement handle.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
556

            
557
    my $sth = $result->sth;
558

            
update pod
Yuki Kimoto authored on 2011-02-07
559
=head2 4. Filtering
update pod
Yuki Kimoto authored on 2011-01-28
560

            
update pod
Yuki Kimoto authored on 2011-02-07
561
L<DBIx::Custom> provide value filtering. 
562
For example, You maybe want to convert L<Time::Piece> object to
563
database date format when register data into database.
564
and convert database date fromat to L<Time::Piece> object
565
when get data from database.
update pod
Yuki Kimoto authored on 2011-01-28
566

            
update pod
Yuki Kimoto authored on 2011-02-11
567
=head3 Register filter : C<register_filter()>
update pod
Yuki Kimoto authored on 2011-01-28
568

            
update pod
Yuki Kimoto authored on 2011-02-11
569
use C<register_filter()> to register filter.
update pod
Yuki Kimoto authored on 2011-01-28
570

            
571
    $dbi->register_filter(
572
        # Time::Piece object to DATE format
573
        tp_to_date => sub {
574
            my $date = shift;
575

            
576
            return '0000-00-00' unless $tp;
577
            return $tp->strftime('%Y-%m-%d');
578
        },
579
        
580
        # DATE to Time::Piece object
581
        date_to_tp => sub {
582
            my $date = shift;
583

            
584
            return if $date eq '0000-00-00';
585
            return Time::Piece->strptime($date, '%Y-%m-%d');
586
        },
587
    );
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
588

            
update pod
Yuki Kimoto authored on 2011-02-07
589
Registered filter is used by C<apply_filter()> or etc.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
590

            
update pod
Yuki Kimoto authored on 2011-02-11
591
=head3 Apply filter : C<apply_filter()>
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
592

            
update pod
Yuki Kimoto authored on 2011-02-07
593
use C<apply_filter()> to apply registered filter.
update pod
Yuki Kimoto authored on 2011-01-28
594

            
595
    $dbi->apply_filter('book',
596
        issue_date => {out => 'tp_to_date', in => 'date_to_tp'},
597
        first_issue_date => {out => 'tp_to_date', in => 'date_to_tp'}
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
598
    );
599

            
update pod
Yuki Kimoto authored on 2011-02-07
600
First argument is table name. Arguments after first argument are pairs of column
601
name and fitering rule. C<out> of filtering rule is filter which is used when data
602
is send to database. C<in> of filtering rule is filter which is used when data
603
is got from database. 
604

            
605
You can specify code reference as filter.
update pod
Yuki Kimoto authored on 2011-01-28
606

            
607
    issue_date => {out => sub { ... }, in => sub { ... }}
608

            
update pod
Yuki Kimoto authored on 2011-02-07
609
Applied filter become effective at insert()>, C<update()>, C<update_all()>,
610
C<delete()>, C<delete_all()>, C<select()>.
update pod
Yuki Kimoto authored on 2011-01-28
611

            
612
    my $tp = Time::Piece->strptime('2010/10/14', '%Y/%m/%d');
update pod
Yuki Kimoto authored on 2011-02-07
613
    my $result = $dbi->select(table => 'book', where => {issue_date => $tp});
update pod
Yuki Kimoto authored on 2011-01-28
614

            
update pod
Yuki Kimoto authored on 2011-02-07
615
When data is send to database, L<Time::Piece> object is converted
616
to database date format "2010-10-14"
update pod
Yuki Kimoto authored on 2011-01-28
617

            
update pod
Yuki Kimoto authored on 2011-02-07
618
When data is fetched, database date format is
619
converted to L<Time::Piece> object.
update pod
Yuki Kimoto authored on 2011-01-28
620

            
621
    my $row = $resutl->fetch_hash_first;
622
    my $tp = $row->{issue_date};
623

            
update pod
Yuki Kimoto authored on 2011-02-07
624
You can also use column name which contains table name.
update pod
Yuki Kimoto authored on 2011-01-28
625

            
626
    $dbi->select(
627
        table => 'book',
update pod
Yuki Kimoto authored on 2011-02-07
628
        where => {'book.issue_date' => $tp}
update pod
Yuki Kimoto authored on 2011-01-28
629
    );
630

            
update pod
Yuki Kimoto authored on 2011-02-11
631
In fetching, Filter is effective if you use "TABLE__COLUMN" as column name.
632

            
633
    my $result = $dbi->execute(
634
       "select issue_date as book__issue_date from book");
635

            
636
You can apply C<end> filter execute after C<in> filter.
637

            
638
    $dbi->apply_filter('book',
639
        issue_date => {out => 'tp_to_date', in => 'date_to_tp',
640
                       end => 'tp_to_displaydate'},
641
    );
642

            
update pod
Yuki Kimoto authored on 2011-02-07
643
=head3 Individual filter C<filter>
update pod
Yuki Kimoto authored on 2011-01-28
644

            
update pod
Yuki Kimoto authored on 2011-02-07
645
You can apply individual filter .
646
This filter overwrite the filter by C<apply_filter()>
update pod
Yuki Kimoto authored on 2011-01-28
647

            
update pod
Yuki Kimoto authored on 2011-02-07
648
use C<filter> option to apply individual filter
649
when data is send to database.
650
This option is used at C<insert()>, C<update()>,
651
C<update_all()>, C<delete()>, C<delete_all()>, C<select()>,
652
C<execute()>.
update pod
Yuki Kimoto authored on 2011-01-28
653

            
update pod
Yuki Kimoto authored on 2011-02-07
654
C<insert()> example:
update pod
Yuki Kimoto authored on 2011-01-28
655

            
656
    $dbi->insert(
657
        table => 'book',
658
        param => {issue_date => $tp, first_issue_date => $tp},
659
        filter => {issue_date => 'tp_to_date', first_issue_date => 'tp_to_date'}
660
    );
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
661

            
update pod
Yuki Kimoto authored on 2011-02-07
662
C<execute()> example:
update pod
Yuki Kimoto authored on 2011-01-28
663

            
664
my $sql = <<"EOS";
665
select YEAR(issue_date) as issue_year
666
from book
667
where YEAR(issue_date) = {? issue_year}
668
EOS
669
   
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
670
    my $result = $dbi->execute(
update pod
Yuki Kimoto authored on 2011-01-28
671
        $sql,
672
        param => {issue_year => '2010'},
673
        filter => {issue_year => 'tp_to_year'}
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
674
    );
675

            
update pod
Yuki Kimoto authored on 2011-02-07
676
You can also apply indivisual filter when you fetch row.
677
use C<DBIx::Custom::Result>'s C<filter()>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
678

            
update pod
Yuki Kimoto authored on 2011-01-28
679
    $result->filter(issue_year => 'year_to_tp');
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
680

            
update pod
Yuki Kimoto authored on 2011-02-07
681
=head3 End filtering : C<end_filter()>
update pod
Yuki Kimoto authored on 2011-01-28
682

            
update pod
Yuki Kimoto authored on 2011-02-07
683
You can add filter at end.
684
It is useful to create last output.
685
use C<end_filter()> to add end filter.
update pod
Yuki Kimoto authored on 2011-01-28
686

            
687
    $result->end_filter(issue_date => sub {
688
        my $tp = shift;
689
        
690
        return '' unless $tp;
691
        return $tp->strftime('%Y/%m/%d %h:%m:%s (%a)');
692
    });
693

            
update pod
Yuki Kimoto authored on 2011-02-07
694
In this example, L<Time::Piece> object is converted to readable format.
update pod
Yuki Kimoto authored on 2011-01-28
695

            
update pod
Yuki Kimoto authored on 2011-02-11
696
=head3 Automate applying filter : C<each_column()>
update pod
Yuki Kimoto authored on 2011-01-28
697

            
update pod
Yuki Kimoto authored on 2011-02-07
698
It is useful to apply filter automatically at date type columns.
699
You can use C<each_column()> to process all column infos.
update pod
Yuki Kimoto authored on 2011-01-28
700

            
701
    $dbi->each_column(
702
        sub {
703
            my ($self, $table, $column, $info) = @_;
704
            
705
            my $type = $info->{TYPE_NAME};
706
            
707
            my $filter = $type eq 'DATE'     ? {out => 'tp_to_date', in => 'date_to_tp'}
708
                       : $type eq 'DATETIME' ? {out => 'tp_to_datetime', in => 'datetime_to_tp'}
709
                                             : undef;
710
            
711
            $self->apply_filter($table, $column, $filter)
712
              if $filter;
713
        }
714
    );
715

            
update pod
Yuki Kimoto authored on 2011-02-11
716
C<each_column()> receive callback.
update pod
Yuki Kimoto authored on 2011-02-07
717
callback arguments are L<DBIx::Custom> object, table name, column name, column information.
718
Filter is applied automatically by column type.
update pod
Yuki Kimoto authored on 2011-01-28
719

            
update pod
Yuki Kimoto authored on 2011-02-07
720
=head2 5. Tag
update pod
Yuki Kimoto authored on 2011-01-28
721

            
update pod
Yuki Kimoto authored on 2011-02-07
722
=head3 Basic of Tag
update pod
Yuki Kimoto authored on 2011-01-28
723

            
update pod
Yuki Kimoto authored on 2011-02-07
724
You can embedd tag into SQL.
update pod
Yuki Kimoto authored on 2011-01-28
725

            
726
    select * from book where {= title} and {like author};
727

            
update pod
Yuki Kimoto authored on 2011-02-07
728
{= title} and {like author} are tag. Tag has the folloring format.
update pod
Yuki Kimoto authored on 2011-01-28
729

            
update pod
Yuki Kimoto authored on 2011-02-07
730
    {TAG_NAME ARG1 ARG2 ...}
update pod
Yuki Kimoto authored on 2011-01-28
731

            
update pod
Yuki Kimoto authored on 2011-02-07
732
Tag start C<{> and end C<}>. 
update pod
Yuki Kimoto authored on 2011-02-11
733
Don't insert space between C<{}> and tag name.
update pod
Yuki Kimoto authored on 2011-02-07
734

            
735
C<{> and C<}> are reserved word.
736
If you want to use these, escape it by '\';
update pod
Yuki Kimoto authored on 2011-01-28
737

            
738
    select from book \\{ ... \\}
739

            
update pod
Yuki Kimoto authored on 2011-02-07
740
\ is perl's escape character, you need two \.
741

            
742
Tag is expanded before executing SQL.
update pod
Yuki Kimoto authored on 2011-01-28
743

            
744
    select * from book where title = ? and author like ?;
745

            
update pod
Yuki Kimoto authored on 2011-02-07
746
use C<execute()> to execute SQL which contains tag
update pod
Yuki Kimoto authored on 2011-01-28
747

            
748
    my $sql = "select * from book where {= author} and {like title};"
749
    $dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'});
750

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

            
update pod
Yuki Kimoto authored on 2011-02-07
754
You can specify C<filter()> at C<execute()>.
update pod
Yuki Kimoto authored on 2011-01-28
755

            
756
    $dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'}
757
                  filter => {title => 'to_something');
758

            
update pod
Yuki Kimoto authored on 2011-02-07
759
Note that at C<execute()> the filter applied by C<apply_filter()>
760
don't has effective to columns.
update pod
Yuki Kimoto authored on 2011-02-11
761
You have to use C<table> tag in SQL
update pod
Yuki Kimoto authored on 2011-01-28
762

            
update pod
Yuki Kimoto authored on 2011-02-11
763
    my $sql = "select * from {table book} where {= author} and {like title};"
update pod
Yuki Kimoto authored on 2011-01-28
764

            
update pod
Yuki Kimoto authored on 2011-02-07
765
=head3 Tag list
update pod
Yuki Kimoto authored on 2011-01-28
766

            
update pod
Yuki Kimoto authored on 2011-02-07
767
The following tag is available.
update pod
Yuki Kimoto authored on 2011-01-28
768

            
update pod
Yuki Kimoto authored on 2011-02-11
769
=head4 C<table>
770

            
771
    {table NAME} -> NAME
772

            
773
This is used to specify table name in SQL.
774
If you specify table name, Filtering by 
775
C<apply_filter()> is effective.
776

            
update pod
Yuki Kimoto authored on 2011-01-31
777
=head4 C<?>
update pod
Yuki Kimoto authored on 2011-01-28
778

            
779
    {? NAME}    ->   ?
780

            
update pod
Yuki Kimoto authored on 2011-01-31
781
=head4 C<=>
update pod
Yuki Kimoto authored on 2011-01-28
782

            
783
    {= NAME}    ->   NAME = ?
784

            
update pod
Yuki Kimoto authored on 2011-01-31
785
=head4 C<E<lt>E<gt>>
update pod
Yuki Kimoto authored on 2011-01-28
786

            
787
    {<> NAME}   ->   NAME <> ?
788

            
update pod
Yuki Kimoto authored on 2011-01-31
789
=head4 C<E<lt>>
update pod
Yuki Kimoto authored on 2011-01-28
790

            
791
    {< NAME}    ->   NAME < ?
792

            
update pod
Yuki Kimoto authored on 2011-01-31
793
=head4 C<E<gt>>
update pod
Yuki Kimoto authored on 2011-01-28
794

            
795
    {> NAME}    ->   NAME > ?
796

            
update pod
Yuki Kimoto authored on 2011-01-31
797
=head4 C<E<gt>=>
update pod
Yuki Kimoto authored on 2011-01-28
798

            
799
    {>= NAME}   ->   NAME >= ?
800

            
update pod
Yuki Kimoto authored on 2011-01-31
801
=head4 C<E<lt>=>
update pod
Yuki Kimoto authored on 2011-01-28
802

            
803
    {<= NAME}   ->   NAME <= ?
804

            
update pod
Yuki Kimoto authored on 2011-01-31
805
=head4 C<like>
update pod
Yuki Kimoto authored on 2011-01-28
806

            
807
    {like NAME}   ->   NAME like ?
808

            
update pod
Yuki Kimoto authored on 2011-01-31
809
=head4 C<in>
update pod
Yuki Kimoto authored on 2011-01-28
810

            
811
    {in NAME COUNT}   ->   NAME in [?, ?, ..]
812

            
update pod
Yuki Kimoto authored on 2011-01-31
813
=head4 C<insert_param>
update pod
Yuki Kimoto authored on 2011-01-28
814

            
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
815
    {insert_param NAME1 NAME2}   ->   (NAME1, NAME2) values (?, ?)
update pod
Yuki Kimoto authored on 2011-01-28
816

            
update pod
Yuki Kimoto authored on 2011-01-31
817
=head4 C<update_param>
update pod
Yuki Kimoto authored on 2011-01-28
818

            
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
819
    {update_param NAME1 NAME2}   ->   set NAME1 = ?, NAME2 = ?
820

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

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

            
update pod
Yuki Kimoto authored on 2011-01-28
826
    my $sql = "select * from table where {> date} and {< date};";
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
827

            
update pod
Yuki Kimoto authored on 2011-02-07
828
In this case, You specify paramter values as array reference.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
829

            
update pod
Yuki Kimoto authored on 2011-01-28
830
    my $dbi->execute($sql, param => {date => ['2010-10-01', '2012-02-10']});
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
831

            
update pod
Yuki Kimoto authored on 2011-02-11
832
=head3 Register Tag : C<register_tag()>
update pod
Yuki Kimoto authored on 2011-01-28
833

            
update pod
Yuki Kimoto authored on 2011-02-11
834
You can register custom tag.
update pod
Yuki Kimoto authored on 2011-02-07
835
use C<register_tag()> to register tag.
update pod
Yuki Kimoto authored on 2011-01-28
836

            
837
    $dbi->register_tag(
838
        '=' => sub {
839
            my $column = shift;
840
            
841
            return ["$column = ?", [$column]];
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
842
        }
843
    );
844

            
update pod
Yuki Kimoto authored on 2011-02-11
845
This is implementation of C<=> tag.
846
Tag format is the following one.
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
847

            
update pod
Yuki Kimoto authored on 2011-02-11
848
    {TAG_NAME ARG1 ARG2 ...}
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
849

            
update pod
Yuki Kimoto authored on 2011-02-11
850
In case C<=> tag. Format is
cleanup
Yuki Kimoto authored on 2011-01-12
851

            
update pod
Yuki Kimoto authored on 2011-01-28
852
    {= title}
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
853

            
update pod
Yuki Kimoto authored on 2011-02-11
854
So subroutine receive one argument "title".
855
You have to return array reference in the following format.
update pod
Yuki Kimoto authored on 2011-01-28
856

            
857
    [
update pod
Yuki Kimoto authored on 2011-02-11
858
        String after expanding,
859
        [COLUMN1(This is used for place holder), COLUMN2 , ...]
update pod
Yuki Kimoto authored on 2011-01-28
860
    ]
861

            
update pod
Yuki Kimoto authored on 2011-02-11
862
First element is expanded stirng. In this example,
update pod
Yuki Kimoto authored on 2011-01-28
863

            
864
    'title = ?'
865

            
update pod
Yuki Kimoto authored on 2011-02-11
866
Secount element is array reference which is used to embedd value to
867
place holder. In this example,
update pod
Yuki Kimoto authored on 2011-01-28
868

            
869
    ['title']
870

            
update pod
Yuki Kimoto authored on 2011-02-11
871
If there are more than one placeholders,
872
This elements is multipul.
update pod
Yuki Kimoto authored on 2011-01-28
873

            
update pod
Yuki Kimoto authored on 2011-02-11
874
You return the following array reference.
update pod
Yuki Kimoto authored on 2011-01-28
875

            
876
    ['title = ?', ['title']]
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
877

            
update pod
Yuki Kimoto authored on 2011-02-11
878
See source of L<DBIx::Custom::Tag> to see many implementation.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
879

            
update pod
Yuki Kimoto authored on 2011-02-11
880
=head2 6. Dinamically create where clause
update pod
Yuki Kimoto authored on 2011-01-28
881

            
update pod
Yuki Kimoto authored on 2011-02-11
882
=head3 Dinamically create where clause : where()
update pod
Yuki Kimoto authored on 2011-01-28
883

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

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

            
889
    where {= title}
890

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

            
893
    where {= author}
894

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

            
897
    where {= title} and {=author}
898

            
update pod
Yuki Kimoto authored on 2011-02-11
899
L<DBIx::Custom> support dinamic where clause creating.
900
At first, create L<DBIx::Custom::Where> object by C<where()>.
update pod
Yuki Kimoto authored on 2011-01-28
901

            
902
    my $where = $dbi->where;
903

            
update pod
Yuki Kimoto authored on 2011-02-11
904
Set clause by C<clause()>
update pod
Yuki Kimoto authored on 2011-01-28
905

            
906
    $where->clause(
907
        ['and', '{= title'}, '{= author}']
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
908
    );
909

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

            
update pod
Yuki Kimoto authored on 2011-02-11
912
    ['or' or 'and', TAG1, TAG2, TAG3]
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
913

            
update pod
Yuki Kimoto authored on 2011-02-11
914
First argument is 'or' or 'and'.
915
Later than first argument are tag names.
update pod
Yuki Kimoto authored on 2011-01-28
916

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

            
919
    ['and', 
920
      '{= title}', 
921
      ['or', '{= author}', '{like date}']
922
    ]
923

            
update pod
Yuki Kimoto authored on 2011-02-11
924
This mean "{=title} and ( {=author} or {like date} )".
925

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
932
If you execute C<string_to()>, you can get where clause
933
which contain only parameter name.
update pod
Yuki Kimoto authored on 2011-01-28
934

            
935
    my $where_clause = $where->to_string;
936

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

            
939
    where {= title}
940

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

            
943
    my $where_clause = "$where";
944

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
949
Even if same name tags exists, you can create where clause.
950
Let's think that there are starting date and ending date.
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
951

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

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
958
You can embbed these values into same name tags.
update pod
Yuki Kimoto authored on 2011-01-28
959

            
960
    $where->clause(
961
        ['and', '{> date}', '{< date}']
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
962
    );
update pod
Yuki Kimoto authored on 2011-01-28
963
    $where->param($p);
964

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
969
You can get DBIx::Custom::NotExists object by C<not_exists()>
970
This mean correnspondinf value isn't exists.
update pod
Yuki Kimoto authored on 2011-01-28
971

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

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

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

            
978
    my $p = {date => []};
979

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

            
982
    my @date;
983
    push @date, exists $param->{start_date} ? $param->{start_date}
984
                                            : $dbi->not_exists;
985
    push @date, $param->{end_date} if exists $param->{end_date};
986
    my $p = {date => \@date};
987

            
update pod
Yuki Kimoto authored on 2011-02-11
988
=head3 With C<select()>
update pod
Yuki Kimoto authored on 2011-01-28
989

            
update pod
Yuki Kimoto authored on 2011-02-11
990
You can pass L<DBIx::Custom::Where> object to C<where> of C<select()>.
update pod
Yuki Kimoto authored on 2011-01-28
991
    
992
    my $where = $dbi->where;
update pod
Yuki Kimoto authored on 2011-02-11
993
    $where->clause(['and', '{= title}', '{= author}']);
994
    $where->param({title => 'Perl'});
update pod
Yuki Kimoto authored on 2011-01-28
995
    my $result = $dbi->select(table => 'book', where => $where);
996

            
update pod
Yuki Kimoto authored on 2011-02-11
997
You can also pass it to C<where> of C<update()>�AC<delete()>
update pod
Yuki Kimoto authored on 2011-01-28
998

            
update pod
Yuki Kimoto authored on 2011-02-11
999
=head3 With C<execute()>
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
1000

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

            
update pod
Yuki Kimoto authored on 2011-01-28
1003
    my $where = $dbi->where;
update pod
Yuki Kimoto authored on 2011-02-11
1004
    $where->clause(['and', '{= title}', '{= author}']);
1005
    $where->param({title => 'Perl'});
update pod
Yuki Kimoto authored on 2011-01-28
1006

            
update pod
Yuki Kimoto authored on 2011-02-11
1007
    my $sql = <<"EOS";
1008
    select * from {table book};
update pod
Yuki Kimoto authored on 2011-01-28
1009
    $where
1010
    EOS
1011

            
1012
    $dbi->execute($sql, param => $param);
1013

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

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

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

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1021
At first, you create basic model class extending <DBIx::Custom::Model>.
update pod
Yuki Kimoto authored on 2011-01-28
1022

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1023
    package MyModel;
1024
    
1025
    use base 'DBIx::Custom::Model';
update pod
Yuki Kimoto authored on 2011-01-28
1026

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

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

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1031
    package MyModel::book;
1032
    
1033
    use base 'MyModel';
1034
    
1035
    sub insert { ... }
1036
    sub list { ... }
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
1037

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

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1040
    package MyModel::company;
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1041
    
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1042
    use base 'MyModel';
1043
    
1044
    sub insert { ... }
1045
    sub list { ... }
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1046

            
1047
The follwoing modules location is needed.
1048

            
1049
    MyModel.pm
1050
    MyModel / book.pm
1051
            / company.pm
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1052

            
1053
You can include these models by C<include_model()>
1054

            
1055
    $dbi->include_model('MyModel');
1056

            
1057
First argument is name space of model.
1058

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

            
1061
    my $result = $dbi->model('book')->list;
1062

            
1063
In mode, You can use such as methods,
1064
C<insert()>, C<update()>, C<update_all()>,
1065
C<delete()>, C<delete_all()>, C<select()>
1066
without C<table> option.
1067

            
1068
    $dbi->model('book')->insert(param => $param);
update pod
Yuki Kimoto authored on 2011-01-28
1069

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

            
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1072
If you need table name�Ayou can get it by C<table()>.
update pod
Yuki Kimoto authored on 2011-01-28
1073

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

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

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

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

            
update pod
Yuki Kimoto authored on 2011-02-11
1082
    # DBIx::Custom method
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1083
    $model->execute($sql);
update pod
Yuki Kimoto authored on 2011-02-11
1084
    
1085
    # DBI method
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1086
    $model->begin_work;
1087
    $model->commit;
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-17
1088

            
add models() attribute
Yuki Kimoto authored on 2011-02-21
1089
If you want to get all models, you can get them by keys of C<models()>.
1090

            
1091
    my @models = keys %{$self->models};
1092

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

            
1095
   $model->primary_key(['id', 'number_id']);
1096

            
update pod
Yuki Kimoto authored on 2011-02-28
1097
Primary key is used by C<insert_at>, C<update_at()>, C<delete_at()>,
add DBIx::Custom::Model fore...
Yuki Kimoto authored on 2011-02-21
1098
C<select_at()>.
1099

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1100
by C<filter> you can define filters applied by C<apply_filter()>
1101

            
1102
    $model->filter({
1103
        title  => {out => ..., in => ..., end => ...},
1104
        author => {out => ..., in => ..., end => ...}
1105
    });
1106

            
1107
This filters is applied when C<include_model()> is called.
1108

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

            
1111
    $model->columns(['id', 'number_id']);
1112

            
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
1113
Column names is automarically set by C<setup_model()>.
1114
This method is needed to be call after C<include_model()>.
1115

            
1116
    $dbi->setup_model;
1117

            
cleanup
Yuki Kimoto authored on 2011-02-22
1118
You can set C<relation>
1119

            
1120
    $model->relation({'book.company_id' => 'company.id'});
1121

            
1122
This relation is used by C<select()>, C<select_at()>
1123

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-24
1124
=head2 Class name, Model name, Table name
1125

            
1126
Class name, model name, and table name is a little different.
1127
Generally Class name is model name, and table name is model name.
1128

            
1129
    CLASS        MODEL              TABLE
1130
    book         (CLASS) -> book    (MODEL) -> book
1131

            
1132
You can change model name.
1133

            
1134
    package MyModel::book;
1135
    
1136
    __PACAKGE__->attr(name => 'book_model');
1137

            
1138
    CLASS        MODEL         TABLE
1139
    book         book_model    (MODEL) -> book_model
1140

            
1141
Model name is the name used by L<model()> of L<DBIx::Custom>.
1142

            
1143
    $dbi->model('book_model');
1144

            
1145
You can change table name.
1146

            
1147
    package MyModel::book;
1148
    
1149
    __PACAKGE__->attr(table => 'book_table');
1150

            
1151
    CLASS        MODEL              TABLE
1152
    book         (CLASS) -> book    book_table
1153

            
1154
Table name is the table really accessed.
1155

            
1156
    $dbi->model('book')->insert(...); # access to "book_table"
1157

            
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-22
1158
=head2 Create column clause automatically : column_clause()
1159

            
1160
To create column clause automatically, use C<column_clause()>.
1161
Valude of C<table> and C<columns> is used.
1162

            
1163
    my $column_clause = $model->column_clause;
1164

            
1165
If C<table> is 'book'�AC<column> is ['id', 'name'],
1166
the following clause is created.
1167

            
1168
    book.id as id, book.name as name
1169

            
1170
These column name is for removing column name ambiguities.
1171

            
1172
If you remove some columns, use C<remove> option.
1173

            
1174
    my $column_clause = $model->column_clause(remove => ['id']);
1175

            
1176
If you add some column, use C<add> option.
1177

            
1178
    my $column_clause = $model->column_clause(add => ['company.id as company__id']);
1179

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

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

            
update pod
Yuki Kimoto authored on 2011-01-28
1184
    package MyDBI;
1185
    
1186
    use base 'DBIx::Custom';
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1187
    
update pod
Yuki Kimoto authored on 2011-01-28
1188
    sub connect {
1189
        my $self = shift->SUPER::connect(@_);
1190
        
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1191
        $self->include_model(
1192
            MyModel => [
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
1193
                'book',
1194
                'company'
1195
            ]
update pod
Yuki Kimoto authored on 2011-01-28
1196
        );
1197
    }
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
1198
    
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1199
    package MyModel::book;
1200
    use base 'DBIx::Custom::Model';
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
1201
    
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
1202
    __PACKAGE__->attr('primary_key' => sub { ['id'] };
1203
    
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
1204
    sub insert { ... }
1205
    sub list { ... }
1206
    
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
1207
    package MyModel::company;
1208
    use base 'DBIx::Custom::Model';
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
1209

            
1210
    __PACKAGE__->attr('primary_key' => sub { ['id'] };
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
1211
    
1212
    sub insert { ... }
1213
    sub list { ... }
update pod
Yuki Kimoto authored on 2011-01-28
1214

            
update pod
Yuki Kimoto authored on 2011-02-11
1215
=head2 8. Improve performance
update pod
Yuki Kimoto authored on 2011-01-28
1216

            
update pod
Yuki Kimoto authored on 2011-02-11
1217
=head3 Create query
update pod
Yuki Kimoto authored on 2011-01-28
1218

            
update pod
Yuki Kimoto authored on 2011-02-11
1219
If you can't get performance, create query by C<query> option.
1220
For example, many insert is needed.
update pod
Yuki Kimoto authored on 2011-01-28
1221

            
update pod
Yuki Kimoto authored on 2011-02-11
1222
    my $params = [
1223
        {title => 'Perl', author => 'Ken'},
1224
        {title => 'Good day', author => 'Tom'}
1225
    ]
1226
    my $query = $dbi->insert(table => 'book', param => $params->[0], query => 1);
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1227

            
update pod
Yuki Kimoto authored on 2011-02-11
1228
Return value is L<DBIx::Custom::Query> object.
1229
This query is executed by C<execute()>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1230

            
update pod
Yuki Kimoto authored on 2011-02-11
1231
    foreach my $param (@$params) {
1232
        $dbi->execute($query, $param);
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1233
    }
1234

            
update pod
Yuki Kimoto authored on 2011-02-11
1235
Performance is improved because statement handle is reused
1236
C<query> option is used in C<insert()>, C<update()>, C<update_all()>,
1237
C<delete()>, C<delete_all()>.
1238

            
1239
Note that parameters count is same as method for creating query and C<execute()>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1240

            
update pod
Yuki Kimoto authored on 2011-02-11
1241
You can create query from any SQL by C<create_query()>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1242

            
update pod
Yuki Kimoto authored on 2011-02-11
1243
    my $query = $dbi->create_query(
1244
        "insert into book {insert_param title author};";
1245
    );
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1246

            
update pod
Yuki Kimoto authored on 2011-02-11
1247
=head2 9. Other features
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1248

            
update pod
Yuki Kimoto authored on 2011-02-11
1249
=head3 Add method
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1250

            
update pod
Yuki Kimoto authored on 2011-02-11
1251
You can add method to L<DBIx::Custom> object.
update pod
Yuki Kimoto authored on 2011-02-11
1252
use C<method()>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1253

            
update pod
Yuki Kimoto authored on 2011-01-28
1254
    $dbi->method(
1255
        update_or_insert => sub {
1256
            my $self = shift;
1257
            # something
1258
        },
1259
        find_or_create   => sub {
1260
            my $self = shift;
1261
            # something
1262
        }
1263
    );
1264

            
update pod
Yuki Kimoto authored on 2011-02-11
1265
You can call these methods from L<DBIx::Custom> object.
update pod
Yuki Kimoto authored on 2011-01-28
1266

            
1267
    $dbi->update_or_insert;
1268
    $dbi->find_or_create;
1269

            
update pod
Yuki Kimoto authored on 2011-02-11
1270
=head3 Change result class
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1271

            
update pod
Yuki Kimoto authored on 2011-02-11
1272
You can change result class. By default it is L<DBIx::Custom::Result>.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1273

            
update pod
Yuki Kimoto authored on 2011-01-28
1274
    package MyResult;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1275
    use base 'DBIx::Custom::Result';
1276
    
1277
    sub some_method { ... }
1278

            
1279
    1;
1280
    
1281
    package main;
1282
    
update pod
Yuki Kimoto authored on 2011-01-28
1283
    use MyResult;
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1284
    
1285
    my $dbi = DBIx::Custom->connect(...);
update pod
Yuki Kimoto authored on 2011-01-28
1286
    $dbi->result_class('MyResult');
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1287

            
update pod
Yuki Kimoto authored on 2011-02-11
1288
=head3 Caching
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1289

            
update pod
Yuki Kimoto authored on 2011-02-11
1290
SQL after parsing tag is cached for performance.
1291
You can set C<cache()>. By default, chaching is true.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1292

            
update pod
Yuki Kimoto authored on 2011-01-28
1293
    $dbi->cache(1);
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1294

            
update pod
Yuki Kimoto authored on 2011-02-11
1295
The way to cache is changed by C<cache_method()>.
1296
Default method is the following one.
1297
Cache is saved to memory.
update pod
Yuki Kimoto authored on 2011-01-28
1298

            
1299
    $dbi->cache_method(sub {
1300
        sub {
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1301
            my $self = shift;
update pod
Yuki Kimoto authored on 2011-01-28
1302
            
1303
            $self->{_cached} ||= {};
1304
            
1305
            if (@_ > 1) {
update pod
Yuki Kimoto authored on 2011-02-11
1306
                # Save cache
update pod
Yuki Kimoto authored on 2011-01-28
1307
                $self->{_cached}{$_[0]} = $_[1] 
1308
            }
1309
            else {
update pod
Yuki Kimoto authored on 2011-02-11
1310
                # Get cache
update pod
Yuki Kimoto authored on 2011-01-28
1311
                return $self->{_cached}{$_[0]}
1312
            }
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1313
        }
update pod
Yuki Kimoto authored on 2011-01-28
1314
    });
1315
    
update pod
Yuki Kimoto authored on 2011-02-11
1316
First argument is L<DBIx::Custom> object.
1317
Second argument is SQL before parsing.
1318
Third argument is SQL information after parsing. This is hash reference.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1319

            
update pod
Yuki Kimoto authored on 2011-02-11
1320
If third argument exists, you save cache,
1321
and if third argument isn't exists, you get chace.
added DBIx::Custom::Guides
yuki-kimoto authored on 2010-10-17
1322

            
pod fix
Yuki Kimoto authored on 2011-01-21
1323
=head1 EXAMPLES
1324

            
update pod
Yuki Kimoto authored on 2011-02-11
1325
You can see exsamples in the following wiki.
1326

            
pod fix
Yuki Kimoto authored on 2011-01-21
1327
L<DBIx::Custom Wiki|https://github.com/yuki-kimoto/DBIx-Custom/wiki> - Many useful examples
add examples
Yuki Kimoto authored on 2011-01-07
1328

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