Completed
Branch master (0c9f05)
by
unknown
29:21
created

DBConnRef::explicitTrxActive()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
/**
3
 * Helper class to handle automatically marking connections as reusable (via RAII pattern)
4
 * as well handling deferring the actual network connection until the handle is used
5
 *
6
 * @note: proxy methods are defined explicity to avoid interface errors
7
 * @ingroup Database
8
 * @since 1.22
9
 */
10
class DBConnRef implements IDatabase {
11
	/** @var LoadBalancer */
12
	private $lb;
13
14
	/** @var DatabaseBase|null */
15
	private $conn;
16
17
	/** @var array|null */
18
	private $params;
19
20
	/**
21
	 * @param LoadBalancer $lb
22
	 * @param DatabaseBase|array $conn Connection or (server index, group, wiki ID) array
23
	 */
24
	public function __construct( LoadBalancer $lb, $conn ) {
25
		$this->lb = $lb;
26
		if ( $conn instanceof DatabaseBase ) {
27
			$this->conn = $conn;
28
		} else {
29
			$this->params = $conn;
30
		}
31
	}
32
33
	function __call( $name, array $arguments ) {
34
		if ( $this->conn === null ) {
35
			list( $db, $groups, $wiki ) = $this->params;
36
			$this->conn = $this->lb->getConnection( $db, $groups, $wiki );
37
		}
38
39
		return call_user_func_array( [ $this->conn, $name ], $arguments );
40
	}
41
42
	public function getServerInfo() {
43
		return $this->__call( __FUNCTION__, func_get_args() );
44
	}
45
46
	public function bufferResults( $buffer = null ) {
47
		return $this->__call( __FUNCTION__, func_get_args() );
48
	}
49
50
	public function trxLevel() {
51
		return $this->__call( __FUNCTION__, func_get_args() );
52
	}
53
54
	public function trxTimestamp() {
55
		return $this->__call( __FUNCTION__, func_get_args() );
56
	}
57
58
	public function explicitTrxActive() {
59
		return $this->__call( __FUNCTION__, func_get_args() );
60
	}
61
62
	public function tablePrefix( $prefix = null ) {
63
		return $this->__call( __FUNCTION__, func_get_args() );
64
	}
65
66
	public function dbSchema( $schema = null ) {
67
		return $this->__call( __FUNCTION__, func_get_args() );
68
	}
69
70
	public function getLBInfo( $name = null ) {
71
		return $this->__call( __FUNCTION__, func_get_args() );
72
	}
73
74
	public function setLBInfo( $name, $value = null ) {
75
		return $this->__call( __FUNCTION__, func_get_args() );
76
	}
77
78
	public function implicitGroupby() {
79
		return $this->__call( __FUNCTION__, func_get_args() );
80
	}
81
82
	public function implicitOrderby() {
83
		return $this->__call( __FUNCTION__, func_get_args() );
84
	}
85
86
	public function lastQuery() {
87
		return $this->__call( __FUNCTION__, func_get_args() );
88
	}
89
90
	public function doneWrites() {
91
		return $this->__call( __FUNCTION__, func_get_args() );
92
	}
93
94
	public function lastDoneWrites() {
95
		return $this->__call( __FUNCTION__, func_get_args() );
96
	}
97
98
	public function writesPending() {
99
		return $this->__call( __FUNCTION__, func_get_args() );
100
	}
101
102
	public function writesOrCallbacksPending() {
103
		return $this->__call( __FUNCTION__, func_get_args() );
104
	}
105
106
	public function pendingWriteQueryDuration() {
107
		return $this->__call( __FUNCTION__, func_get_args() );
108
	}
109
110
	public function pendingWriteCallers() {
111
		return $this->__call( __FUNCTION__, func_get_args() );
112
	}
113
114
	public function isOpen() {
115
		return $this->__call( __FUNCTION__, func_get_args() );
116
	}
117
118
	public function setFlag( $flag ) {
119
		return $this->__call( __FUNCTION__, func_get_args() );
120
	}
121
122
	public function clearFlag( $flag ) {
123
		return $this->__call( __FUNCTION__, func_get_args() );
124
	}
125
126
	public function getFlag( $flag ) {
127
		return $this->__call( __FUNCTION__, func_get_args() );
128
	}
129
130
	public function getProperty( $name ) {
131
		return $this->__call( __FUNCTION__, func_get_args() );
132
	}
133
134
	public function getWikiID() {
135
		return $this->__call( __FUNCTION__, func_get_args() );
136
	}
137
138
	public function getType() {
139
		return $this->__call( __FUNCTION__, func_get_args() );
140
	}
141
142
	public function open( $server, $user, $password, $dbName ) {
143
		return $this->__call( __FUNCTION__, func_get_args() );
144
	}
145
146
	public function fetchObject( $res ) {
147
		return $this->__call( __FUNCTION__, func_get_args() );
148
	}
149
150
	public function fetchRow( $res ) {
151
		return $this->__call( __FUNCTION__, func_get_args() );
152
	}
153
154
	public function numRows( $res ) {
155
		return $this->__call( __FUNCTION__, func_get_args() );
156
	}
157
158
	public function numFields( $res ) {
159
		return $this->__call( __FUNCTION__, func_get_args() );
160
	}
161
162
	public function fieldName( $res, $n ) {
163
		return $this->__call( __FUNCTION__, func_get_args() );
164
	}
165
166
	public function insertId() {
167
		return $this->__call( __FUNCTION__, func_get_args() );
168
	}
169
170
	public function dataSeek( $res, $row ) {
171
		return $this->__call( __FUNCTION__, func_get_args() );
172
	}
173
174
	public function lastErrno() {
175
		return $this->__call( __FUNCTION__, func_get_args() );
176
	}
177
178
	public function lastError() {
179
		return $this->__call( __FUNCTION__, func_get_args() );
180
	}
181
182
	public function fieldInfo( $table, $field ) {
183
		return $this->__call( __FUNCTION__, func_get_args() );
184
	}
185
186
	public function affectedRows() {
187
		return $this->__call( __FUNCTION__, func_get_args() );
188
	}
189
190
	public function getSoftwareLink() {
191
		return $this->__call( __FUNCTION__, func_get_args() );
192
	}
193
194
	public function getServerVersion() {
195
		return $this->__call( __FUNCTION__, func_get_args() );
196
	}
197
198
	public function close() {
199
		return $this->__call( __FUNCTION__, func_get_args() );
200
	}
201
202
	public function reportConnectionError( $error = 'Unknown error' ) {
203
		return $this->__call( __FUNCTION__, func_get_args() );
204
	}
205
206
	public function query( $sql, $fname = __METHOD__, $tempIgnore = false ) {
207
		return $this->__call( __FUNCTION__, func_get_args() );
208
	}
209
210
	public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
211
		return $this->__call( __FUNCTION__, func_get_args() );
212
	}
213
214
	public function freeResult( $res ) {
215
		return $this->__call( __FUNCTION__, func_get_args() );
216
	}
217
218
	public function selectField(
219
		$table, $var, $cond = '', $fname = __METHOD__, $options = []
220
	) {
221
		return $this->__call( __FUNCTION__, func_get_args() );
222
	}
223
224
	public function selectFieldValues(
225
		$table, $var, $cond = '', $fname = __METHOD__, $options = []
226
	) {
227
		return $this->__call( __FUNCTION__, func_get_args() );
228
	}
229
230
	public function select(
231
		$table, $vars, $conds = '', $fname = __METHOD__,
232
		$options = [], $join_conds = []
233
	) {
234
		return $this->__call( __FUNCTION__, func_get_args() );
235
	}
236
237
	public function selectSQLText(
238
		$table, $vars, $conds = '', $fname = __METHOD__,
239
		$options = [], $join_conds = []
240
	) {
241
		return $this->__call( __FUNCTION__, func_get_args() );
242
	}
243
244
	public function selectRow(
245
		$table, $vars, $conds, $fname = __METHOD__,
246
		$options = [], $join_conds = []
247
	) {
248
		return $this->__call( __FUNCTION__, func_get_args() );
249
	}
250
251
	public function estimateRowCount(
252
		$table, $vars = '*', $conds = '', $fname = __METHOD__, $options = []
253
	) {
254
		return $this->__call( __FUNCTION__, func_get_args() );
255
	}
256
257
	public function selectRowCount(
258
		$tables, $vars = '*', $conds = '', $fname = __METHOD__, $options = [], $join_conds = []
259
	) {
260
		return $this->__call( __FUNCTION__, func_get_args() );
261
	}
262
263
	public function fieldExists( $table, $field, $fname = __METHOD__ ) {
264
		return $this->__call( __FUNCTION__, func_get_args() );
265
	}
266
267
	public function indexExists( $table, $index, $fname = __METHOD__ ) {
268
		return $this->__call( __FUNCTION__, func_get_args() );
269
	}
270
271
	public function tableExists( $table, $fname = __METHOD__ ) {
272
		return $this->__call( __FUNCTION__, func_get_args() );
273
	}
274
275
	public function indexUnique( $table, $index ) {
276
		return $this->__call( __FUNCTION__, func_get_args() );
277
	}
278
279
	public function insert( $table, $a, $fname = __METHOD__, $options = [] ) {
280
		return $this->__call( __FUNCTION__, func_get_args() );
281
	}
282
283
	public function update( $table, $values, $conds, $fname = __METHOD__, $options = [] ) {
284
		return $this->__call( __FUNCTION__, func_get_args() );
285
	}
286
287
	public function makeList( $a, $mode = LIST_COMMA ) {
288
		return $this->__call( __FUNCTION__, func_get_args() );
289
	}
290
291
	public function makeWhereFrom2d( $data, $baseKey, $subKey ) {
292
		return $this->__call( __FUNCTION__, func_get_args() );
293
	}
294
295
	public function bitNot( $field ) {
296
		return $this->__call( __FUNCTION__, func_get_args() );
297
	}
298
299
	public function bitAnd( $fieldLeft, $fieldRight ) {
300
		return $this->__call( __FUNCTION__, func_get_args() );
301
	}
302
303
	public function bitOr( $fieldLeft, $fieldRight ) {
304
		return $this->__call( __FUNCTION__, func_get_args() );
305
	}
306
307
	public function buildConcat( $stringList ) {
308
		return $this->__call( __FUNCTION__, func_get_args() );
309
	}
310
311
	public function buildGroupConcatField(
312
		$delim, $table, $field, $conds = '', $join_conds = []
313
	) {
314
		return $this->__call( __FUNCTION__, func_get_args() );
315
	}
316
317
	public function selectDB( $db ) {
318
		return $this->__call( __FUNCTION__, func_get_args() );
319
	}
320
321
	public function getDBname() {
322
		return $this->__call( __FUNCTION__, func_get_args() );
323
	}
324
325
	public function getServer() {
326
		return $this->__call( __FUNCTION__, func_get_args() );
327
	}
328
329
	public function addQuotes( $s ) {
330
		return $this->__call( __FUNCTION__, func_get_args() );
331
	}
332
333
	public function buildLike() {
334
		return $this->__call( __FUNCTION__, func_get_args() );
335
	}
336
337
	public function anyChar() {
338
		return $this->__call( __FUNCTION__, func_get_args() );
339
	}
340
341
	public function anyString() {
342
		return $this->__call( __FUNCTION__, func_get_args() );
343
	}
344
345
	public function nextSequenceValue( $seqName ) {
346
		return $this->__call( __FUNCTION__, func_get_args() );
347
	}
348
349
	public function replace( $table, $uniqueIndexes, $rows, $fname = __METHOD__ ) {
350
		return $this->__call( __FUNCTION__, func_get_args() );
351
	}
352
353
	public function upsert(
354
		$table, array $rows, array $uniqueIndexes, array $set, $fname = __METHOD__
355
	) {
356
		return $this->__call( __FUNCTION__, func_get_args() );
357
	}
358
359
	public function deleteJoin(
360
		$delTable, $joinTable, $delVar, $joinVar, $conds, $fname = __METHOD__
361
	) {
362
		return $this->__call( __FUNCTION__, func_get_args() );
363
	}
364
365
	public function delete( $table, $conds, $fname = __METHOD__ ) {
366
		return $this->__call( __FUNCTION__, func_get_args() );
367
	}
368
369
	public function insertSelect(
370
		$destTable, $srcTable, $varMap, $conds,
371
		$fname = __METHOD__, $insertOptions = [], $selectOptions = []
372
	) {
373
		return $this->__call( __FUNCTION__, func_get_args() );
374
	}
375
376
	public function unionSupportsOrderAndLimit() {
377
		return $this->__call( __FUNCTION__, func_get_args() );
378
	}
379
380
	public function unionQueries( $sqls, $all ) {
381
		return $this->__call( __FUNCTION__, func_get_args() );
382
	}
383
384
	public function conditional( $cond, $trueVal, $falseVal ) {
385
		return $this->__call( __FUNCTION__, func_get_args() );
386
	}
387
388
	public function strreplace( $orig, $old, $new ) {
389
		return $this->__call( __FUNCTION__, func_get_args() );
390
	}
391
392
	public function getServerUptime() {
393
		return $this->__call( __FUNCTION__, func_get_args() );
394
	}
395
396
	public function wasDeadlock() {
397
		return $this->__call( __FUNCTION__, func_get_args() );
398
	}
399
400
	public function wasLockTimeout() {
401
		return $this->__call( __FUNCTION__, func_get_args() );
402
	}
403
404
	public function wasErrorReissuable() {
405
		return $this->__call( __FUNCTION__, func_get_args() );
406
	}
407
408
	public function wasReadOnlyError() {
409
		return $this->__call( __FUNCTION__, func_get_args() );
410
	}
411
412
	public function masterPosWait( DBMasterPos $pos, $timeout ) {
413
		return $this->__call( __FUNCTION__, func_get_args() );
414
	}
415
416
	public function getSlavePos() {
417
		return $this->__call( __FUNCTION__, func_get_args() );
418
	}
419
420
	public function getMasterPos() {
421
		return $this->__call( __FUNCTION__, func_get_args() );
422
	}
423
424
	public function serverIsReadOnly() {
425
		return $this->__call( __FUNCTION__, func_get_args() );
426
	}
427
428
	public function onTransactionResolution( callable $callback ) {
429
		return $this->__call( __FUNCTION__, func_get_args() );
430
	}
431
432
	public function onTransactionIdle( callable $callback ) {
433
		return $this->__call( __FUNCTION__, func_get_args() );
434
	}
435
436
	public function onTransactionPreCommitOrIdle( callable $callback ) {
437
		return $this->__call( __FUNCTION__, func_get_args() );
438
	}
439
440
	public function startAtomic( $fname = __METHOD__ ) {
441
		return $this->__call( __FUNCTION__, func_get_args() );
442
	}
443
444
	public function endAtomic( $fname = __METHOD__ ) {
445
		return $this->__call( __FUNCTION__, func_get_args() );
446
	}
447
448
	public function doAtomicSection( $fname, callable $callback ) {
449
		return $this->__call( __FUNCTION__, func_get_args() );
450
	}
451
452
	public function begin( $fname = __METHOD__, $mode = IDatabase::TRANSACTION_EXPLICIT ) {
453
		return $this->__call( __FUNCTION__, func_get_args() );
454
	}
455
456
	public function commit( $fname = __METHOD__, $flush = '' ) {
457
		return $this->__call( __FUNCTION__, func_get_args() );
458
	}
459
460
	public function rollback( $fname = __METHOD__, $flush = '' ) {
461
		return $this->__call( __FUNCTION__, func_get_args() );
462
	}
463
464
	public function listTables( $prefix = null, $fname = __METHOD__ ) {
465
		return $this->__call( __FUNCTION__, func_get_args() );
466
	}
467
468
	public function timestamp( $ts = 0 ) {
469
		return $this->__call( __FUNCTION__, func_get_args() );
470
	}
471
472
	public function timestampOrNull( $ts = null ) {
473
		return $this->__call( __FUNCTION__, func_get_args() );
474
	}
475
476
	public function ping() {
477
		return $this->__call( __FUNCTION__, func_get_args() );
478
	}
479
480
	public function getLag() {
481
		return $this->__call( __FUNCTION__, func_get_args() );
482
	}
483
484
	public function getSessionLagStatus() {
485
		return $this->__call( __FUNCTION__, func_get_args() );
486
	}
487
488
	public function maxListLen() {
489
		return $this->__call( __FUNCTION__, func_get_args() );
490
	}
491
492
	public function encodeBlob( $b ) {
493
		return $this->__call( __FUNCTION__, func_get_args() );
494
	}
495
496
	public function decodeBlob( $b ) {
497
		return $this->__call( __FUNCTION__, func_get_args() );
498
	}
499
500
	public function setSessionOptions( array $options ) {
501
		return $this->__call( __FUNCTION__, func_get_args() );
502
	}
503
504
	public function setSchemaVars( $vars ) {
505
		return $this->__call( __FUNCTION__, func_get_args() );
506
	}
507
508
	public function lockIsFree( $lockName, $method ) {
509
		return $this->__call( __FUNCTION__, func_get_args() );
510
	}
511
512
	public function lock( $lockName, $method, $timeout = 5 ) {
513
		return $this->__call( __FUNCTION__, func_get_args() );
514
	}
515
516
	public function unlock( $lockName, $method ) {
517
		return $this->__call( __FUNCTION__, func_get_args() );
518
	}
519
520
	public function getScopedLockAndFlush( $lockKey, $fname, $timeout ) {
521
		return $this->__call( __FUNCTION__, func_get_args() );
522
	}
523
524
	public function namedLocksEnqueue() {
525
		return $this->__call( __FUNCTION__, func_get_args() );
526
	}
527
528
	public function getInfinity() {
529
		return $this->__call( __FUNCTION__, func_get_args() );
530
	}
531
532
	public function encodeExpiry( $expiry ) {
533
		return $this->__call( __FUNCTION__, func_get_args() );
534
	}
535
536
	public function decodeExpiry( $expiry, $format = TS_MW ) {
537
		return $this->__call( __FUNCTION__, func_get_args() );
538
	}
539
540
	public function setBigSelects( $value = true ) {
541
		return $this->__call( __FUNCTION__, func_get_args() );
542
	}
543
544
	public function isReadOnly() {
545
		return $this->__call( __FUNCTION__, func_get_args() );
546
	}
547
548
	/**
549
	 * Clean up the connection when out of scope
550
	 */
551
	function __destruct() {
552
		if ( $this->conn !== null ) {
553
			$this->lb->reuseConnection( $this->conn );
554
		}
555
	}
556
}
557