1Mojo::SQLite::Database(U3spemr)Contributed Perl DocumentMaotjioo:n:SQLite::Database(3pm)
2
3
4
6 Mojo::SQLite::Database - Database
7
9 use Mojo::SQLite::Database;
10
11 my $db = Mojo::SQLite::Database->new(sqlite => $sql, dbh => $dbh);
12 $db->query('select * from foo')
13 ->hashes->map(sub { $_->{bar} })->join("\n")->say;
14
16 Mojo::SQLite::Database is a container for DBD::SQLite database handles
17 used by Mojo::SQLite.
18
20 Mojo::SQLite::Database implements the following attributes.
21
22 dbh
23 my $dbh = $db->dbh;
24 $db = $db->dbh($dbh);
25
26 DBD::SQLite database handle used for all queries.
27
28 # Use DBI utility methods
29 my $quoted = $db->dbh->quote_identifier('foo.bar');
30
31 results_class
32 my $class = $db->results_class;
33 $db = $db->results_class('MyApp::Results');
34
35 Class to be used by "query", defaults to Mojo::SQLite::Results. Note
36 that this class needs to have already been loaded before "query" is
37 called.
38
39 sqlite
40 my $sql = $db->sqlite;
41 $db = $db->sqlite(Mojo::SQLite->new);
42
43 Mojo::SQLite object this database belongs to.
44
46 Mojo::SQLite::Database inherits all methods from Mojo::Base and
47 implements the following new ones.
48
49 begin
50 my $tx = $db->begin;
51 my $tx = $db->begin('exclusive');
52
53 Begin transaction and return Mojo::SQLite::Transaction object, which
54 will automatically roll back the transaction unless "commit" in
55 Mojo::SQLite::Transaction has been called before it is destroyed.
56
57 # Insert rows in a transaction
58 eval {
59 my $tx = $db->begin;
60 $db->insert('frameworks', {name => 'Catalyst'});
61 $db->insert('frameworks', {name => 'Mojolicious'});
62 $tx->commit;
63 };
64 say $@ if $@;
65
66 A transaction locking behavior of "deferred", "immediate", or
67 "exclusive" may optionally be passed; the default in DBD::SQLite is
68 currently "immediate". See "Transaction and Database Locking" in
69 DBD::SQLite and <https://sqlite.org/lang_transaction.html> for more
70 details.
71
72 delete
73 my $results = $db->delete($table, \%where);
74
75 Generate a "DELETE" statement with "abstract" in Mojo::SQLite (usually
76 an SQL::Abstract::Pg object) and execute it with "query". You can also
77 append a callback for API compatibility with Mojo::Pg; the query is
78 still executed in a blocking manner.
79
80 $db->delete(some_table => sub ($db, $err, $results) {
81 ...
82 });
83 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
84
85 Use all the same argument variations you would pass to the "delete"
86 method of SQL::Abstract.
87
88 # "delete from some_table"
89 $db->delete('some_table');
90
91 # "delete from some_table where foo = 'bar'"
92 $db->delete('some_table', {foo => 'bar'});
93
94 # "delete from some_table where foo like '%test%'"
95 $db->delete('some_table', {foo => {-like => '%test%'}});
96
97 delete_p
98 my $promise = $db->delete_p($table, \%where, \%options);
99
100 Same as "delete" but returns a Mojo::Promise object instead of
101 accepting a callback. For API compatibility with Mojo::Pg; the query is
102 still executed in a blocking manner.
103
104 $db->delete_p('some_table')->then(sub ($results) {
105 ...
106 })->catch(sub ($err) {
107 ...
108 })->wait;
109
110 disconnect
111 $db->disconnect;
112
113 Disconnect "dbh" and prevent it from getting reused.
114
115 insert
116 my $results = $db->insert($table, \@values || \%fieldvals, \%options);
117
118 Generate an "INSERT" statement with "abstract" in Mojo::SQLite (usually
119 an SQL::Abstract::Pg object) and execute it with "query". You can also
120 append a callback for API compatibility with Mojo::Pg; the query is
121 still executed in a blocking manner.
122
123 $db->insert(some_table => {foo => 'bar'} => sub ($db, $err, $results) {
124 ...
125 });
126 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
127
128 Use all the same argument variations you would pass to the "insert"
129 method of SQL::Abstract.
130
131 # "insert into some_table (foo, baz) values ('bar', 'yada')"
132 $db->insert('some_table', {foo => 'bar', baz => 'yada'});
133
134 insert_p
135 my $promise = $db->insert_p($table, \@values || \%fieldvals, \%options);
136
137 Same as "insert" but returns a Mojo::Promise object instead of
138 accepting a callback. For API compatibility with Mojo::Pg; the query is
139 still executed in a blocking manner.
140
141 $db->insert_p(some_table => {foo => 'bar'})->then(sub ($results) {
142 ...
143 })->catch(sub ($err) {
144 ...
145 })->wait;
146
147 ping
148 my $bool = $db->ping;
149
150 Check database connection.
151
152 query
153 my $results = $db->query('select * from foo');
154 my $results = $db->query('insert into foo values (?, ?, ?)', @values);
155 my $results = $db->query('select ? as img', {type => SQL_BLOB, value => slurp 'img.jpg'});
156 my $results = $db->query('select ? as foo', {json => {bar => 'baz'}});
157
158 Execute a blocking SQL
159 <http://www.postgresql.org/docs/current/static/sql.html> statement and
160 return a results object based on "results_class" (which is usually
161 Mojo::SQLite::Results) with the query results. The DBD::SQLite
162 statement handle will be automatically reused when it is not active
163 anymore, to increase the performance of future queries. You can also
164 append a callback for API compatibility with Mojo::Pg; the query is
165 still executed in a blocking manner.
166
167 $db->query('insert into foo values (?, ?, ?)' => @values => sub ($db, $err, $results) {
168 ...
169 });
170 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
171
172 Hash reference arguments containing "type" and "value" elements will
173 use the specified bind type for the parameter, using types from "DBI
174 Constants" in DBI; see "Blobs" in DBD::SQLite and the subsequent
175 section for more information.
176
177 Hash reference arguments containing a value named "json" or "-json"
178 will be encoded to JSON text <http://sqlite.org/json1.html> with
179 "to_json" in Mojo::JSON. To accomplish the reverse, you can use the
180 method "expand" in Mojo::SQLite::Results to decode JSON text fields to
181 Perl values with "from_json" in Mojo::JSON.
182
183 # "I ♥ SQLite!"
184 $db->query('select ? as foo', {json => {bar => 'I ♥ SQLite!'}})
185 ->expand(json => 'foo')->hash->{foo}{bar};
186
187 query_p
188 my $promise = $db->query_p('SELECT * FROM foo');
189
190 Same as "query" but returns a Mojo::Promise object instead of accepting
191 a callback. For API compatibility with Mojo::Pg; the query is still
192 executed in a blocking manner.
193
194 $db->query_p('INSERT INTO foo VALUES (?, ?, ?)' => @values)->then(sub ($results) {
195 ...
196 })->catch(sub ($err) {
197 ...
198 })->wait;
199
200 select
201 my $results = $db->select($source, $fields, $where, $order);
202
203 Generate a "SELECT" statement with "abstract" in Mojo::SQLite (usually
204 an SQL::Abstract::Pg object) and execute it with "query". You can also
205 append a callback for API compatibility with Mojo::Pg; the query is
206 still executed in a blocking manner.
207
208 $db->select(some_table => ['foo'] => {bar => 'yada'} => sub ($db, $err, $results) {
209 ...
210 });
211 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
212
213 Use all the same argument variations you would pass to the "select"
214 method of SQL::Abstract.
215
216 # "select * from some_table"
217 $db->select('some_table');
218
219 # "select id, foo from some_table"
220 $db->select('some_table', ['id', 'foo']);
221
222 # "select * from some_table where foo = 'bar'"
223 $db->select('some_table', undef, {foo => 'bar'});
224
225 # "select * from some_table where foo = 'bar' order by id desc"
226 $db->select('some_table', undef, {foo => 'bar'}, {-desc => 'id'});
227
228 # "select * from some_table where foo like '%test%'"
229 $db->select('some_table', undef, {foo => {-like => '%test%'}});
230
231 select_p
232 my $promise = $db->select_p($source, $fields, $where, \%options);
233
234 Same as "select" but returns a Mojo::Promise object instead of
235 accepting a callback. For API compatibility with Mojo::Pg; the query is
236 still executed in a blocking manner.
237
238 $db->select_p(some_table => ['foo'] => {bar => 'yada'})->then(sub ($results) {
239 ...
240 })->catch(sub ($err) {
241 ...
242 })->wait;
243
244 tables
245 my $tables = $db->tables;
246
247 Return table and view names for this database, that are visible to the
248 current user and not internal, as an array reference. Names will be
249 quoted and prefixed by a schema name of "main" for standard tables,
250 "temp" for temporary tables, and the appropriate schema name for
251 attached databases <http://sqlite.org/lang_attach.html>.
252
253 # Names of all tables
254 say for @{$db->tables};
255
256 update
257 my $results = $db->update($table, \%fieldvals, \%where);
258
259 Generate an "UPDATE" statement with "abstract" in Mojo::SQLite (usually
260 an SQL::Abstract::Pg object) and execute it with "query". You can also
261 append a callback for API compatibility with Mojo::Pg; the query is
262 still executed in a blocking manner.
263
264 $db->update(some_table => {foo => 'baz'} => {foo => 'bar'} => sub ($db, $err, $results) {
265 ...
266 });
267 Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
268
269 Use all the same argument variations you would pass to the "update"
270 method of SQL::Abstract.
271
272 # "update some_table set foo = 'bar' where id = 23"
273 $db->update('some_table', {foo => 'bar'}, {id => 23});
274
275 # "update some_table set foo = 'bar' where foo like '%test%'"
276 $db->update('some_table', {foo => 'bar'}, {foo => {-like => '%test%'}});
277
278 update_p
279 my $promise = $db->update_p($table, \%fieldvals, \%where, \%options);
280
281 Same as "update" but returns a Mojo::Promise object instead of
282 accepting a callback. For API compatibility with Mojo::Pg; the query is
283 still executed in a blocking manner.
284
285 $db->update_p(some_table => {foo => 'baz'} => {foo => 'bar'})->then(sub ($results) {
286 ...
287 })->catch(sub ($err) {
288 ...
289 })->wait;
290
292 Report any issues on the public bugtracker.
293
295 Dan Book, "dbook@cpan.org"
296
298 Copyright 2015, Dan Book.
299
300 This library is free software; you may redistribute it and/or modify it
301 under the terms of the Artistic License version 2.0.
302
304 Mojo::SQLite
305
306
307
308perl v5.38.0 2023-07-20 Mojo::SQLite::Database(3pm)