summaryrefslogtreecommitdiffstats
path: root/lib/public
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2013-06-24 22:52:01 +0200
committerJörn Friedrich Dreyer <jfd@butonic.de>2013-06-24 22:52:01 +0200
commitb32d6d84878798b78afa757c4d8a068a84ab9513 (patch)
tree8e3106e8522f487e901276d4fbc1abe530b80107 /lib/public
parentbca2eb39fa1950a72e159dd6cc44598c387a927a (diff)
downloadnextcloud-server-b32d6d84878798b78afa757c4d8a068a84ab9513.tar.gz
nextcloud-server-b32d6d84878798b78afa757c4d8a068a84ab9513.zip
for oracle use BITAND() instead of & in sharing permissions sql
Diffstat (limited to 'lib/public')
-rw-r--r--lib/public/share.php10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/public/share.php b/lib/public/share.php
index 122ab3fa030..f40cd0d77fa 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -662,9 +662,13 @@ class Share {
// Remove the permissions for all reshares of this item
if (!empty($ids)) {
$ids = "'".implode("','", $ids)."'";
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ?'
- .' WHERE `id` IN ('.$ids.')');
- $query->execute(array($permissions));
+ // the binary operator & works on sqlite, mysql, postgresql and mssql
+ $sql = 'UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')';
+ if (\OC_Config::getValue('dbtype', 'sqlite') === 'oci') {
+ // guess which dbms does not handle & and uses a function for this
+ $sql = 'UPDATE `*PREFIX*share` SET `permissions` = BITAND(`permissions`,?) WHERE `id` IN ('.$ids.')';
+ }
+ \OC_DB::executeAudited($sql, array($permissions));
}
}
}