1DBIx::SearchBuilder::HaUnsdelre(C3o)ntributed Perl DocumDeBnItxa:t:iSoenarchBuilder::Handle(3)
2
3
4
6 DBIx::SearchBuilder::Handle - Perl extension which is a generic DBI
7 handle
8
10 use DBIx::SearchBuilder::Handle;
11
12 my $handle = DBIx::SearchBuilder::Handle->new();
13 $handle->Connect( Driver => 'mysql',
14 Database => 'dbname',
15 Host => 'hostname',
16 User => 'dbuser',
17 Password => 'dbpassword');
18 # now $handle isa DBIx::SearchBuilder::Handle::mysql
19
21 This class provides a wrapper for DBI handles that can also perform a
22 number of additional functions.
23
24 new
25 Generic constructor
26
27 Connect PARAMHASH: Driver, Database, Host, User, Password, QuoteTableNames
28 Takes a paramhash and connects to your DBI datasource.
29
30 You should _always_ set
31
32 DisconnectHandleOnDestroy => 1
33
34 unless you have a legacy app like RT2 or RT 3.0.{0,1,2} that depends on
35 the broken behaviour.
36
37 If you created the handle with
38 DBIx::SearchBuilder::Handle->new and there is a
39 DBIx::SearchBuilder::Handle::(Driver) subclass for the driver you have
40 chosen, the handle will be automatically "upgraded" into that subclass.
41
42 QuoteTableNames option will force all table names to be quoted if the
43 driver subclass has a method for quoting implemented. The mysql
44 subclass will detect mysql version 8 and set the flag.
45
46 _UpgradeHandle DRIVER
47 This private internal method turns a plain DBIx::SearchBuilder::Handle
48 into one of the standard driver-specific subclasses.
49
50 BuildDSN PARAMHASH
51 Takes a bunch of parameters:
52
53 Required: Driver, Database, Optional: Host, Port and RequireSSL
54
55 Builds a DSN suitable for a DBI connection
56
57 DSN
58 Returns the DSN for this database connection.
59
60 RaiseError [MODE]
61 Turns on the Database Handle's RaiseError attribute.
62
63 PrintError [MODE]
64 Turns on the Database Handle's PrintError attribute.
65
66 LogSQLStatements BOOL
67 Takes a boolean argument. If the boolean is true, SearchBuilder will
68 log all SQL statements, as well as their invocation times and execution
69 times.
70
71 Returns whether we're currently logging or not as a boolean
72
73 _LogSQLStatement STATEMENT DURATION
74 Add an SQL statement to our query log
75
76 ClearSQLStatementLog
77 Clears out the SQL statement log.
78
79 SQLStatementLog
80 Returns the current SQL statement log as an array of arrays. Each entry
81 is a triple of
82
83 (Time, Statement, Duration)
84
85 AutoCommit [MODE]
86 Turns on the Database Handle's AutoCommit attribute.
87
88 Disconnect
89 Disconnect from your DBI datasource
90
91 dbh [HANDLE]
92 Return the current DBI handle. If we're handed a parameter, make the
93 database handle that.
94
95 Insert $TABLE_NAME @KEY_VALUE_PAIRS
96 Takes a table name and a set of key-value pairs in an array. Splits
97 the key value pairs, constructs an INSERT statement and performs the
98 insert.
99
100 Base class return statement handle object, while DB specific subclass
101 should return row id.
102
103 InsertQueryString $TABLE_NAME @KEY_VALUE_PAIRS
104 Takes a table name and a set of key-value pairs in an array. Splits
105 the key value pairs, constructs an INSERT statement and returns query
106 string and set of bind values.
107
108 This method is more useful for subclassing in DB specific handles.
109 "Insert" method is preferred for end users.
110
111 InsertFromSelect
112 Takes table name, array reference with columns, select query and list
113 of bind values. Inserts data select by the query into the table.
114
115 To make sure call is portable every column in result of the query
116 should have unique name or should be aliased. See "InsertFromSelect"
117 in DBIx::SearchBuilder::Handle::Oracle for details.
118
119 UpdateRecordValue
120 Takes a hash with fields: Table, Column, Value PrimaryKeys, and
121 IsSQLFunction. Table, and Column should be obvious, Value is where you
122 set the new value you want the column to have. The primary_keys field
123 should be the lvalue of DBIx::SearchBuilder::Record::PrimaryKeys().
124 Finally IsSQLFunction is set when the Value is a SQL function. For
125 example, you might have ('Value'=>'PASSWORD(string)'), by setting
126 IsSQLFunction that string will be inserted into the query directly
127 rather then as a binding.
128
129 UpdateTableValue TABLE COLUMN NEW_VALUE RECORD_ID IS_SQL
130 Update column COLUMN of table TABLE where the record id = RECORD_ID.
131 if IS_SQL is set, don\'t quote the NEW_VALUE
132
134 Takes table name, hash reference with (column, value) pairs, select
135 query and list of bind values.
136
137 Updates the table, but only records with IDs returned by the selected
138 query, eg:
139
140 UPDATE $table SET %values WHERE id IN ( $query )
141
142 It's simple as values are static and search only allowed by id.
143
145 Takes table name, select query and list of bind values.
146
147 Deletes from the table, but only records with IDs returned by the
148 select query, eg:
149
150 DELETE FROM $table WHERE id IN ($query)
151
152 SimpleQuery QUERY_STRING, [ BIND_VALUE, ... ]
153 Execute the SQL string specified in QUERY_STRING
154
155 FetchResult QUERY, [ BIND_VALUE, ... ]
156 Takes a SELECT query as a string, along with an array of BIND_VALUEs If
157 the select succeeds, returns the first row as an array. Otherwise,
158 returns a Class::ResturnValue object with the failure loaded up.
159
160 BinarySafeBLOBs
161 Returns 1 if the current database supports BLOBs with embedded nulls.
162 Returns undef if the current database doesn't support BLOBs with
163 embedded nulls
164
165 KnowsBLOBs
166 Returns 1 if the current database supports inserts of BLOBs
167 automatically. Returns undef if the current database must be informed
168 of BLOBs for inserts.
169
170 BLOBParams FIELD_NAME FIELD_TYPE
171 Returns a hash ref for the bind_param call to identify BLOB types used
172 by the current database for a particular column type.
173
174 DatabaseVersion [Short => 1]
175 Returns the database's version.
176
177 If argument "Short" is true returns short variant, in other case
178 returns whatever database handle/driver returns. By default returns
179 short version, e.g. '4.1.23' or '8.0-rc4'.
180
181 Returns empty string on error or if database couldn't return version.
182
183 The base implementation uses a "SELECT VERSION()"
184
185 CaseSensitive
186 Returns 1 if the current database's searches are case sensitive by
187 default Returns undef otherwise
188
189 QuoteTableNames
190 Returns 1 if table names will be quoted in queries, otherwise 0
191
192 _MakeClauseCaseInsensitive FIELD OPERATOR VALUE
193 Takes a field, operator and value. performs the magic necessary to make
194 your database treat this clause as case insensitive.
195
196 Returns a FIELD OPERATOR VALUE triple.
197
198 Transactions
199 DBIx::SearchBuilder::Handle emulates nested transactions, by keeping a
200 transaction stack depth.
201
202 NOTE: In nested transactions you shouldn't mix rollbacks and commits,
203 because only last action really do commit/rollback. For example next
204 code would produce desired results:
205
206 $handle->BeginTransaction;
207 $handle->BeginTransaction;
208 ...
209 $handle->Rollback;
210 $handle->BeginTransaction;
211 ...
212 $handle->Commit;
213 $handle->Commit;
214
215 Only last action(Commit in example) finilize transaction in DB.
216
217 BeginTransaction
218
219 Tells DBIx::SearchBuilder to begin a new SQL transaction. This will
220 temporarily suspend Autocommit mode.
221
222 EndTransaction [Action => 'commit'] [Force => 0]
223
224 Tells to end the current transaction. Takes "Action" argument that
225 could be "commit" or "rollback", the default value is "commit".
226
227 If "Force" argument is true then all nested transactions would be
228 committed or rolled back.
229
230 If there is no transaction in progress then method throw warning unless
231 action is forced.
232
233 Method returns true on success or false if an error occurred.
234
235 Commit [FORCE]
236
237 Tells to commit the current SQL transaction.
238
239 Method uses "EndTransaction" method, read its description.
240
241 Rollback [FORCE]
242
243 Tells to abort the current SQL transaction.
244
245 Method uses "EndTransaction" method, read its description.
246
247 ForceRollback
248
249 Force the handle to rollback. Whether or not we're deep in nested
250 transactions.
251
252 TransactionDepth
253
254 Returns the current depth of the nested transaction stack. Returns
255 "undef" if there is no connection to database.
256
257 ApplyLimits STATEMENTREF ROWS_PER_PAGE FIRST_ROW
258 takes an SQL SELECT statement and massages it to return ROWS_PER_PAGE
259 starting with FIRST_ROW;
260
261 Join { Paramhash }
262 Takes a paramhash of everything Searchbuildler::Record does plus a
263 parameter called 'SearchBuilder' that contains a ref to a SearchBuilder
264 object'.
265
266 This performs the join.
267
268 MayBeNull
269 Takes a "SearchBuilder" and "ALIAS" in a hash and resturns true if
270 restrictions of the query allow NULLs in a table joined with the ALIAS,
271 otherwise returns false value which means that you can use normal join
272 instead of left for the aliased table.
273
274 Works only for queries have been built with "Join" in
275 DBIx::SearchBuilder and "Limit" in DBIx::SearchBuilder methods, for
276 other cases return true value to avoid fault optimizations.
277
278 DistinctQuery STATEMENTREF
279 takes an incomplete SQL SELECT statement and massages it to return a
280 DISTINCT result set.
281
282 DistinctCount STATEMENTREF
283 takes an incomplete SQL SELECT statement and massages it to return a
284 DISTINCT result set.
285
286 Log MESSAGE
287 Takes a single argument, a message to log.
288
289 Currently prints that message to STDERR
290
291 SimpleDateTimeFunctions
292 See "DateTimeFunction" for details on supported functions. This method
293 is for implementers of custom DB connectors.
294
295 Returns hash reference with (function name, sql template) pairs.
296
297 DateTimeFunction
298 Takes named arguments:
299
300 • Field - SQL expression date/time function should be applied to.
301 Note that this argument is used as is without any kind of quoting.
302
303 • Type - name of the function, see supported values below.
304
305 • Timezone - optional hash reference with From and To values, see
306 "ConvertTimezoneFunction" for details.
307
308 Returns SQL statement. Returns NULL if function is not supported.
309
310 Supported functions
311
312 Type value in "DateTimeFunction" is case insesitive. Spaces,
313 underscores and dashes are ignored. So 'date time', 'DateTime' and
314 'date_time' are all synonyms. The following functions are supported:
315
316 • date time - as is, no conversion, except applying timezone
317 conversion if it's provided.
318
319 • time - time only
320
321 • hourly - datetime prefix up to the hours, e.g. '2010-03-25 16'
322
323 • hour - hour, 0 - 23
324
325 • date - date only
326
327 • daily - synonym for date
328
329 • day of week - 0 - 6, 0 - Sunday
330
331 • day - day of month, 1 - 31
332
333 • day of month - synonym for day
334
335 • day of year - 1 - 366, support is database dependent
336
337 • month - 1 - 12
338
339 • monthly - year and month prefix, e.g. '2010-11'
340
341 • year - e.g. '2023'
342
343 • annually - synonym for year
344
345 • week of year - 0-53, presence of zero week, 1st week meaning and
346 whether week starts on Monday or Sunday heavily depends on
347 database.
348
349 ConvertTimezoneFunction
350 Generates a function applied to Field argument that converts timezone.
351 By default converts from UTC. Examples:
352
353 # UTC => Moscow
354 $handle->ConvertTimezoneFunction( Field => '?', To => 'Europe/Moscow');
355
356 If there is problem with arguments or timezones are equal then Field
357 returned without any function applied. Field argument is not escaped in
358 any way, it's your job.
359
360 Implementation is very database specific. To be portable convert from
361 UTC or to UTC. Some databases have internal storage for information
362 about timezones that should be kept up to date. Read documentation for
363 your DB.
364
365 DateTimeIntervalFunction
366 Generates a function to calculate interval in seconds between two
367 dates. Takes From and To arguments which can be either scalar or a
368 hash. Hash is processed with "CombineFunctionWithField" in
369 DBIx::SearchBuilder.
370
371 Arguments are not quoted or escaped in any way. It's caller's job.
372
373 NullsOrder
374 Sets order of NULLs when sorting columns when called with mode, but
375 only if DB supports it. Modes:
376
377 • small
378
379 NULLs are smaller then anything else, so come first when order is
380 ASC and last otherwise.
381
382 • large
383
384 NULLs are larger then anything else.
385
386 • first
387
388 NULLs are always first.
389
390 • last
391
392 NULLs are always last.
393
394 • default
395
396 Return back to DB's default behaviour.
397
398 When called without argument returns metadata required to generate SQL.
399
400 HasSupportForNullsOrder
401 Returns true value if DB supports adjusting NULLs order while sorting a
402 column, for example "ORDER BY Value ASC NULLS FIRST".
403
404 QuoteName
405 Quote table or column name to avoid reserved word errors.
406
407 Returns same value passed unless over-ridden in database-specific
408 subclass.
409
410 DequoteName
411 Undo the effects of QuoteName by removing quoting.
412
413 DESTROY
414 When we get rid of the Searchbuilder::Handle, we need to disconnect
415 from the database
416
418 Jesse Vincent, jesse@fsck.com
419
421 perl(1), DBIx::SearchBuilder
422
423
424
425perl v5.34.0 2022-01-21 DBIx::SearchBuilder::Handle(3)