Passed
Push — 4 ( 3b5c72...d8499a )
by Steve
07:17
created

NullDatabase::searchEngine()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 0
c 1
b 0
f 0
nc 1
nop 9
dl 0
loc 11
rs 10

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace SilverStripe\ORM\Connect;
4
5
use BadMethodCallException;
6
use Exception;
7
8
/**
9
 * Utility class required due to bad coupling in framework.
10
 * Not every framework execution should require a working database connection.
11
 * For example, when generating class and config manifests for deployment bundles,
12
 * or when generating code in a silverstripe/graphql schema build.
13
 *
14
 * This class creates the required no-ops to fulfill the contract,
15
 * and create exceptions as required.
16
 *
17
 * It also avoids introducing new third party core dependencies that
18
 * would be required with https://github.com/tractorcow/silverstripe-proxy-db.
19
 *
20
 * @internal
21
 */
22
class NullDatabase extends Database
23
{
24
    /**
25
     * @var string
26
     */
27
    private $errorMessage = 'Using NullDatabase, cannot interact with database';
28
29
    /**
30
     * @var string
31
     */
32
    private $queryErrorMessage = 'Using NullDatabase, cannot execute query: %s';
33
34
    /**
35
     * @param string $msg
36
     */
37
    public function setErrorMessage(string $msg): self
38
    {
39
        $this->errorMessage = $msg;
40
        return $this;
41
    }
42
43
    /**
44
     * @param string $msg
45
     */
46
    public function setQueryErrorMessage(string $msg): self
47
    {
48
        $this->queryErrorMessage = $msg;
49
        return $this;
50
    }
51
52
    /**
53
     * @throws NullDatabaseException
54
     */
55
    public function query($sql, $errorLevel = E_USER_ERROR)
56
    {
57
        throw new NullDatabaseException(sprintf($this->queryErrorMessage, $sql));
58
    }
59
60
    /**
61
     * @throws NullDatabaseException
62
     */
63
    public function preparedQuery($sql, $parameters, $errorLevel = E_USER_ERROR)
64
    {
65
        throw new NullDatabaseException(sprintf($this->queryErrorMessage, $sql));
66
    }
67
68
    /**
69
     * @throws NullDatabaseException
70
     */
71
    public function getConnector()
72
    {
73
        throw new NullDatabaseException($this->errorMessage);
74
    }
75
76
    /**
77
     * @throws NullDatabaseException
78
     */
79
    public function getSchemaManager()
80
    {
81
        throw new NullDatabaseException($this->errorMessage);
82
    }
83
84
    /**
85
     * @throws NullDatabaseException
86
     */
87
    public function getQueryBuilder()
88
    {
89
        throw new NullDatabaseException($this->errorMessage);
90
    }
91
92
93
    public function getGeneratedID($table)
94
    {
95
        // no-op
96
    }
97
98
    public function isActive()
99
    {
100
        return true;
101
    }
102
103
    public function escapeString($value)
104
    {
105
        return $value;
106
    }
107
108
    public function quoteString($value)
109
    {
110
        return $value;
111
    }
112
113
    public function escapeIdentifier($value, $separator = '.')
114
    {
115
        return $value;
116
    }
117
118
    protected function escapeColumnKeys($fieldValues)
119
    {
120
        return $fieldValues;
121
    }
122
123
    /**
124
     * @throws NullDatabaseException
125
     */
126
    public function manipulate($manipulation)
127
    {
128
        throw new NullDatabaseException($this->errorMessage);
129
    }
130
131
    /**
132
     * @throws NullDatabaseException
133
     */
134
    public function clearAllData()
135
    {
136
        throw new NullDatabaseException($this->errorMessage);
137
    }
138
139
    /**
140
     * @throws NullDatabaseException
141
     */
142
    public function clearTable($table)
143
    {
144
        throw new NullDatabaseException($this->errorMessage);
145
    }
146
147
    public function nullCheckClause($field, $isNull)
148
    {
149
        return '';
150
    }
151
152
    public function comparisonClause(
153
        $field,
154
        $value,
155
        $exact = false,
156
        $negate = false,
157
        $caseSensitive = null,
158
        $parameterised = false
159
    ) {
160
        return '';
161
    }
162
163
    public function formattedDatetimeClause($date, $format)
164
    {
165
        return '';
166
    }
167
168
    public function datetimeIntervalClause($date, $interval)
169
    {
170
        return '';
171
    }
172
173
    public function datetimeDifferenceClause($date1, $date2)
174
    {
175
        return '';
176
    }
177
178
    public function concatOperator()
179
    {
180
        return '';
181
    }
182
183
    public function supportsCollations()
184
    {
185
        return false;
186
    }
187
188
    public function supportsTimezoneOverride()
189
    {
190
        return false;
191
    }
192
193
    public function getVersion()
194
    {
195
        return '';
196
    }
197
198
    public function getDatabaseServer()
199
    {
200
        return '';
201
    }
202
203
    public function affectedRows()
204
    {
205
        return 0;
206
    }
207
208
    public function searchEngine(
209
        $classesToSearch,
210
        $keywords,
211
        $start,
212
        $pageLength,
213
        $sortBy = "Relevance DESC",
214
        $extraFilter = "",
215
        $booleanSearch = false,
216
        $alternativeFileFilter = "",
217
        $invertedMatch = false
218
    ) {
219
        // no-op
220
    }
221
222
    public function supportsTransactions()
223
    {
224
        return false;
225
    }
226
227
    public function supportsSavepoints()
228
    {
229
        return false;
230
    }
231
232
233
    public function supportsTransactionMode(string $mode): bool
234
    {
235
        return false;
236
    }
237
238
    public function withTransaction(
239
        $callback,
240
        $errorCallback = null,
241
        $transactionMode = false,
242
        $errorIfTransactionsUnsupported = false
243
    ) {
244
        // no-op
245
    }
246
247
    public function supportsExtensions($extensions)
248
    {
249
        return false;
250
    }
251
252
    public function transactionStart($transactionMode = false, $sessionCharacteristics = false)
253
    {
254
        // no-op
255
    }
256
257
    public function transactionSavepoint($savepoint)
258
    {
259
        // no-op
260
    }
261
262
    public function transactionRollback($savepoint = false)
263
    {
264
        // no-op
265
    }
266
267
    public function transactionEnd($chain = false)
268
    {
269
        // no-op
270
    }
271
272
    public function transactionDepth()
273
    {
274
        return 0;
275
    }
276
277
    public function supportsLocks()
278
    {
279
        return false;
280
    }
281
282
    public function canLock($name)
283
    {
284
        return false;
285
    }
286
287
    public function getLock($name, $timeout = 5)
288
    {
289
        return false;
290
    }
291
292
    public function releaseLock($name)
293
    {
294
        return false;
295
    }
296
297
    public function connect($parameters)
298
    {
299
        // no-op
300
    }
301
302
    public function databaseExists($name)
303
    {
304
        return false;
305
    }
306
307
    public function databaseList()
308
    {
309
        return [];
310
    }
311
312
    public function selectDatabase($name, $create = false, $errorLevel = E_USER_ERROR)
313
    {
314
        // no-op
315
    }
316
317
    public function dropSelectedDatabase()
318
    {
319
        // no-op
320
    }
321
322
    public function getSelectedDatabase()
323
    {
324
        // no-op
325
    }
326
327
    public function now()
328
    {
329
        return '';
330
    }
331
332
    public function random()
333
    {
334
        return '';
335
    }
336
}
337