From 6ad7a0336f58685f18454fd622395cf25d6908c1 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
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));
 					}
 				}
 			}
-- 
GitLab