]> source.dussan.org Git - nextcloud-server.git/commitdiff
Make sqlite LIKE case sensitive on default
authorRobin Appelman <icewind@owncloud.com>
Wed, 17 Sep 2014 11:47:33 +0000 (13:47 +0200)
committerRobin Appelman <icewind@owncloud.com>
Wed, 17 Sep 2014 11:47:33 +0000 (13:47 +0200)
lib/private/db/connectionfactory.php
lib/private/db/sqlitesessioninit.php [new file with mode: 0644]

index 8fd26bdc947c95dc2c9b367be1414f0afb2e0cb1..589a1c0affd7ba061c0e76eacb2228ddaaccf30a 100644 (file)
@@ -89,6 +89,9 @@ class ConnectionFactory {
                        case 'oci':
                                $eventManager->addEventSubscriber(new \Doctrine\DBAL\Event\Listeners\OracleSessionInit);
                                break;
+                       case 'sqlite3':
+                               $eventManager->addEventSubscriber(new SQLiteSessionInit);
+                               break;
                }
                $connection = \Doctrine\DBAL\DriverManager::getConnection(
                        array_merge($this->getDefaultConnectionParams($type), $additionalConnectionParams),
diff --git a/lib/private/db/sqlitesessioninit.php b/lib/private/db/sqlitesessioninit.php
new file mode 100644 (file)
index 0000000..7e1166b
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\DB;
+
+use Doctrine\DBAL\Event\ConnectionEventArgs;
+use Doctrine\DBAL\Events;
+use Doctrine\Common\EventSubscriber;
+
+class SQLiteSessionInit implements EventSubscriber {
+       /**
+        * @var bool
+        */
+       private $caseSensitiveLike;
+
+       /**
+        * Configure case sensitive like for each connection
+        *
+        * @param bool $caseSensitiveLike
+        */
+       public function __construct($caseSensitiveLike = true) {
+               $this->caseSensitiveLike = $caseSensitiveLike;
+       }
+
+       /**
+        * @param ConnectionEventArgs $args
+        * @return void
+        */
+       public function postConnect(ConnectionEventArgs $args) {
+               $sensitive = ($this->caseSensitiveLike) ? 'true' : 'false';
+               $args->getConnection()->executeUpdate('PRAGMA case_sensitive_like = ' . $sensitive);
+       }
+
+       public function getSubscribedEvents() {
+               return array(Events::postConnect);
+       }
+}