From 6ad7a0336f58685f18454fd622395cf25d6908c1 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 26 Jun 2013 21:40:31 +0200 Subject: [PATCH] Oracle doesn't know & as bitwise AND Conflicts: lib/public/share.php --- lib/public/share.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/public/share.php b/lib/public/share.php index f40cd0d77f..304cb7239e 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -662,13 +662,15 @@ class Share { // Remove the permissions for all reshares of this item if (!empty($ids)) { $ids = "'".implode("','", $ids)."'"; - // 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.')'; + // TODO this should be done with Doctrine platform objects + if (\OC_Config::getValue( "dbtype") === 'oci') { + $andOp = 'BITAND(`permissions`, ?)'; + } else { + $andOp = '`permissions` & ?'; } - \OC_DB::executeAudited($sql, array($permissions)); + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = '.$andOp + .' WHERE `id` IN ('.$ids.')'); + $query->execute(array($permissions)); } } }