conn->executeUpdate('LOCK TABLES `' . $tableName . '` WRITE'); } public function unlockTable() { $this->conn->executeUpdate('UNLOCK TABLES'); } public function fixupStatement($statement) { $statement = str_replace(' ILIKE ', ' COLLATE ' . $this->getCollation() . ' LIKE ', $statement); return $statement; } protected function getCollation(): string { if (!$this->collation) { $params = $this->conn->getParams(); $this->collation = $params['collation'] ?? (($params['charset'] ?? 'utf8') . '_general_ci'); } return $this->collation; } public function insertIgnoreConflict(string $table, array $values): int { $builder = $this->conn->getQueryBuilder(); $builder->insert($table); $updates = []; foreach ($values as $key => $value) { $builder->setValue($key, $builder->createNamedParameter($value)); } /* * We can't use ON DUPLICATE KEY UPDATE here because Nextcloud use the CLIENT_FOUND_ROWS flag * With this flag the MySQL returns the number of selected rows * instead of the number of affected/modified rows * It's impossible to change this behaviour at runtime or for a single query * Then, the result is 1 if a row is inserted and also 1 if a row is updated with same or different values * * With INSERT IGNORE, the result is 1 when a row is inserted, 0 otherwise * * Risk: it can also ignore other errors like type mismatch or truncated data… */ $res = $this->conn->executeStatement( preg_replace('/^INSERT/i', 'INSERT IGNORE', $builder->getSQL()), $builder->getParameters(), $builder->getParameterTypes() ); return $res; } } option> Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/AppFramework/Http/Attribute/NoCSRFRequired.php
blob: 247cb5c55b5f967080256351bc60ac8b430c6dd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37