예제 #1
0
 /**
  * Delete iblock by its code.
  *
  * @param string $code
  *
  * @throws MigrationException
  *
  * @return void
  */
 protected function deleteIblockByCode($code)
 {
     $id = $this->getIblockIdByCode($code);
     $this->db->startTransaction();
     if (!CIBlock::Delete($id)) {
         $this->db->rollbackTransaction();
         throw new MigrationException('Ошибка при удалении инфоблока');
     }
     $this->db->commitTransaction();
 }
예제 #2
0
 /**
  * @param resource $result Database-specific query result.
  * @param Connection $dbConnection Connection object.
  * @param \Bitrix\Main\Diag\SqlTrackerQuery $trackerQuery Helps to collect debug information.
  */
 public function __construct($result, Connection $dbConnection = null, \Bitrix\Main\Diag\SqlTrackerQuery $trackerQuery = null)
 {
     $this->resource = $result;
     $this->connection = $dbConnection;
     $this->trackerQuery = $trackerQuery;
     $resultFields = $this->getFields();
     if ($resultFields && $this->connection) {
         $helper = $this->connection->getSqlHelper();
         foreach ($resultFields as $key => $type) {
             $converter = $helper->getConverter($resultFields[$key]);
             if (is_callable($converter)) {
                 $this->converters[$key] = $converter;
             }
         }
     }
 }
예제 #3
0
 /**
  * Convert the info block to i18n.
  * 
  * @param string $propCodePublicId
  * @param string $propCodeLang
  * @param string $defaultLang
  * 
  * @throws InternationalizeException
  * @throws \Exception
  */
 public function convert($propCodePublicId, $propCodeLang, $defaultLang)
 {
     $rsDefaultLang = LanguageTable::query()->setFilter(['LID' => $defaultLang])->exec();
     if ($rsDefaultLang->getSelectedRowsCount() <= 0) {
         throw new InternationalizeException([Loc::getMessage('NOTAMEDIA_I18N_IMANAGER_NOT_FOUND_LANG')]);
     }
     foreach ($this->converters as $converter) {
         $this->connection->startTransaction();
         try {
             $converter->internationalize($propCodePublicId, $propCodeLang, $defaultLang);
             $converter->fill($propCodePublicId, $propCodeLang, $defaultLang);
         } catch (\Exception $e) {
             $this->connection->rollbackTransaction();
             throw $e;
         }
         $this->connection->commitTransaction();
     }
 }
예제 #4
0
 /**
  * Executes a query to the database.
  *
  * - query($sql)
  * - query($sql, $limit)
  * - query($sql, $offset, $limit)
  * - query($sql, $binds)
  * - query($sql, $binds, $limit)
  * - query($sql, $binds, $offset, $limit)
  *
  * @param string $sql Sql query.
  * @param array $binds,... Array of binds.
  * @param int $offset,... Offset of first row returned.
  * @param int $limit,... Limit rows count.
  *
  * @return Result
  * @throws \Bitrix\Main\Db\SqlQueryException
  */
 public function query($sql)
 {
     list($sql, $binds, $offset, $limit) = self::parseQueryFunctionArgs(func_get_args());
     if (!empty($binds)) {
         $binds1 = $binds2 = "";
         foreach ($binds as $key => $value) {
             if (strlen($value) > 0) {
                 if ($binds1 != "") {
                     $binds1 .= ",";
                     $binds2 .= ",";
                 }
                 $binds1 .= $key;
                 $binds2 .= ":" . $key;
             }
         }
         if ($binds1 != "") {
             $sql .= " RETURNING " . $binds1 . " INTO " . $binds2;
         }
     }
     return parent::query($sql, $binds, $offset, $limit);
 }
예제 #5
0
 /**
  * Create Schema
  *
  * @return AdapterInterface
  */
 public function createSchema()
 {
     $this->db->createTable($this->tableName, array('version' => new StringField('version'), 'name' => new StringField('name')));
     return $this;
 }
예제 #6
0
 /**
  * $configuration may contain following keys:
  * <ul>
  * <li>host
  * <li>database
  * <li>login
  * <li>password
  * <li>initCommand
  * <li>options
  * <li>engine
  * </ul>
  *
  * @param array $configuration Array of Name => Value pairs.
  */
 public function __construct(array $configuration)
 {
     parent::__construct($configuration);
     $this->engine = isset($configuration['engine']) ? $configuration['engine'] : "";
 }
예제 #7
0
 /**
  * Builds the string for the SQL assignment operation of the given column.
  *
  * @param string $tableName A table name.
  * @param string $columnName A column name.
  * @param string $value A value to assign.
  *
  * @return string
  */
 public function prepareAssignment($tableName, $columnName, $value)
 {
     $tableField = $this->connection->getTableField($tableName, $columnName);
     return $this->quote($columnName) . ' = ' . $this->convertToDb($value, $tableField);
 }
 private function moveCommonElements($storageId, $rootObjectId, $iblock)
 {
     $iblockId = $iblock['ID'];
     $sqlHelper = $this->connection->getSqlHelper();
     if ($iblock['VERSION'] == 2) {
         $props = $this->connection->query("SELECT * FROM b_iblock_property WHERE VERSION = 2 AND IBLOCK_ID = {$iblockId} AND CODE IN ('WEBDAV_SIZE', 'FILE', 'WEBDAV_VERSION')")->fetchAll();
         $joinTable = 'b_iblock_element_prop_s' . $iblockId;
         $columnForFileId = $columnForSize = 'null';
         $columnForVersion = '1';
         foreach ($props as $prop) {
             switch ($prop['CODE']) {
                 case 'WEBDAV_SIZE':
                     $columnForSize = 'PROPERTY_' . $prop['ID'];
                     break;
                 case 'FILE':
                     $columnForFileId = 'PROPERTY_' . $prop['ID'];
                     break;
                 case 'WEBDAV_VERSION':
                     $columnForVersion = 'PROPERTY_' . $prop['ID'];
                     break;
             }
         }
         unset($prop);
         if ($this->isMysql) {
             $sql = "\n\t\t\t\t\t\tINSERT IGNORE INTO b_disk_object (FILE_ID, SIZE, GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT {$columnForFileId}, {$columnForSize}, {$columnForVersion}, child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID   FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN {$joinTable} props ON props.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t";
         } elseif ($this->isOracle || $this->isMssql) {
             $sql = "\n\t\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT {$columnForFileId}, {$columnForSize}, {$columnForVersion}, child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID   FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN {$joinTable} props ON props.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object WHERE NAME = child.NAME AND PARENT_ID = child.IBLOCK_SECTION_ID AND child.IBLOCK_SECTION_ID IS NOT NULL)\n\t\t\t\t\t";
         }
         $this->connection->queryExecute($sql);
         $this->connection->queryExecute("\n\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\tSELECT {$columnForFileId}, {$columnForSize}, {$columnForVersion}, " . $this->getConcatFunction('child.ID', 'child.NAME') . ", 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID   FROM b_iblock_element child\n\n\t\t\t\t\tINNER JOIN {$joinTable} props ON props.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tchild.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object do WHERE do.WEBDAV_ELEMENT_ID=child.ID)\n\n\t\t\t\t");
     } else {
         if ($this->isMysql) {
             $sql = "\n\t\t\t\t\t\tINSERT IGNORE INTO b_disk_object (FILE_ID, SIZE, GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT PROP_FILE_EL.VALUE, PROP_SIZE_EL.VALUE, " . $sqlHelper->getIsNullFunction('PPROP_VERSION_G_EL.VALUE', 1) . ", child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID   FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_SIZE ON PROP_SIZE.IBLOCK_ID = child.IBLOCK_ID AND PROP_SIZE.CODE = 'WEBDAV_SIZE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_SIZE_EL ON PROP_SIZE_EL.IBLOCK_PROPERTY_ID = PROP_SIZE.ID AND PROP_SIZE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_FILE ON PROP_FILE.IBLOCK_ID = child.IBLOCK_ID AND PROP_FILE.CODE = 'FILE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_FILE_EL ON PROP_FILE_EL.IBLOCK_PROPERTY_ID = PROP_FILE.ID AND PROP_FILE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tLEFT JOIN b_iblock_property PROP_VERSION_G ON PROP_VERSION_G.IBLOCK_ID = child.IBLOCK_ID AND PROP_VERSION_G.CODE = 'WEBDAV_VERSION'\n\t\t\t\t\t\tLEFT JOIN b_iblock_element_property PPROP_VERSION_G_EL ON PPROP_VERSION_G_EL.IBLOCK_PROPERTY_ID = PROP_VERSION_G.ID AND PPROP_VERSION_G_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t";
         } elseif ($this->isOracle || $this->isMssql) {
             $sql = "\n\t\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT PROP_FILE_EL.VALUE, PROP_SIZE_EL.VALUE, " . $sqlHelper->getIsNullFunction('PPROP_VERSION_G_EL.VALUE', 1) . ", child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID   FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_SIZE ON PROP_SIZE.IBLOCK_ID = child.IBLOCK_ID AND PROP_SIZE.CODE = 'WEBDAV_SIZE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_SIZE_EL ON PROP_SIZE_EL.IBLOCK_PROPERTY_ID = PROP_SIZE.ID AND PROP_SIZE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_FILE ON PROP_FILE.IBLOCK_ID = child.IBLOCK_ID AND PROP_FILE.CODE = 'FILE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_FILE_EL ON PROP_FILE_EL.IBLOCK_PROPERTY_ID = PROP_FILE.ID AND PROP_FILE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tLEFT JOIN b_iblock_property PROP_VERSION_G ON PROP_VERSION_G.IBLOCK_ID = child.IBLOCK_ID AND PROP_VERSION_G.CODE = 'WEBDAV_VERSION'\n\t\t\t\t\t\tLEFT JOIN b_iblock_element_property PPROP_VERSION_G_EL ON PPROP_VERSION_G_EL.IBLOCK_PROPERTY_ID = PROP_VERSION_G.ID AND PPROP_VERSION_G_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object WHERE NAME = child.NAME AND PARENT_ID = child.IBLOCK_SECTION_ID AND child.IBLOCK_SECTION_ID IS NOT NULL)\n\t\t\t\t\t";
         }
         $this->connection->queryExecute($sql);
         $this->connection->queryExecute("\n\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\tSELECT PROP_FILE_EL.VALUE, PROP_SIZE_EL.VALUE, " . $sqlHelper->getIsNullFunction('PPROP_VERSION_G_EL.VALUE', 1) . ", " . $this->getConcatFunction('child.ID', 'child.NAME') . ", 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID   FROM b_iblock_element child\n\n\t\t\t\t\tINNER JOIN b_iblock_property PROP_SIZE ON PROP_SIZE.IBLOCK_ID = child.IBLOCK_ID AND PROP_SIZE.CODE = 'WEBDAV_SIZE'\n\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_SIZE_EL ON PROP_SIZE_EL.IBLOCK_PROPERTY_ID = PROP_SIZE.ID AND PROP_SIZE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tINNER JOIN b_iblock_property PROP_FILE ON PROP_FILE.IBLOCK_ID = child.IBLOCK_ID AND PROP_FILE.CODE = 'FILE'\n\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_FILE_EL ON PROP_FILE_EL.IBLOCK_PROPERTY_ID = PROP_FILE.ID AND PROP_FILE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tLEFT JOIN b_iblock_property PROP_VERSION_G ON PROP_VERSION_G.IBLOCK_ID = child.IBLOCK_ID AND PROP_VERSION_G.CODE = 'WEBDAV_VERSION'\n\t\t\t\t\tLEFT JOIN b_iblock_element_property PPROP_VERSION_G_EL ON PPROP_VERSION_G_EL.IBLOCK_PROPERTY_ID = PROP_VERSION_G.ID AND PPROP_VERSION_G_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tchild.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object do WHERE do.WEBDAV_ELEMENT_ID=child.ID)\n\n\t\t\t\t");
     }
 }
예제 #9
0
 public function setAffectedRowsCount(Connection $connection)
 {
     $this->affectedRowsCount = $connection->getAffectedRowsCount();
 }
예제 #10
0
 /**
  * Fills subtree by simple rights.
  * Any positive rights, which contains operation OP_READ, will fill subtree. It's unnecessary has node negative rights
  * and not.
  * @return $this
  */
 private function fillTree()
 {
     if ($this->hasAllTasksWithOperationRead()) {
         $this->connection->queryExecute("\n\t\t\t\tINSERT INTO b_disk_simple_right (OBJECT_ID, ACCESS_CODE)\n\t\t\t\tSELECT DISTINCT pathchild.OBJECT_ID, r.ACCESS_CODE FROM b_disk_object_path path\n\t\t\t\t    INNER JOIN b_disk_right r ON r.OBJECT_ID = path.OBJECT_ID\n\t\t\t\t    INNER JOIN b_disk_object_path pathchild ON pathchild.PARENT_ID = r.OBJECT_ID\n\t\t\t\tWHERE path.PARENT_ID = {$this->objectId} AND r.NEGATIVE = 0\n\t\t\t");
     } else {
         $ids = array();
         foreach ($this->getTasksWithOperationRead() as $task) {
             $ids[] = (int) $task['ID'];
         }
         unset($task);
         if (!$ids) {
             return $this;
         }
         $this->connection->queryExecute("\n\t\t\t\tINSERT INTO b_disk_simple_right (OBJECT_ID, ACCESS_CODE)\n\t\t\t\tSELECT DISTINCT pathchild.OBJECT_ID, r.ACCESS_CODE FROM b_disk_object_path path\n\t\t\t\t    INNER JOIN b_disk_right r ON r.OBJECT_ID = path.OBJECT_ID\n\t\t\t\t    INNER JOIN b_disk_object_path pathchild ON pathchild.PARENT_ID = r.OBJECT_ID\n\t\t\t\tWHERE path.PARENT_ID = {$this->objectId} AND r.NEGATIVE = 0 AND r.TASK_ID IN (" . implode(', ', $ids) . ")\n\t\t\t");
     }
     return $this;
 }
예제 #11
0
 private function appendOneNegative(array $right, $hadOppositeRight = false)
 {
     $isValidNegaviteRight = $this->validateNegaviteRight($right);
     if (!$isValidNegaviteRight && !$hadOppositeRight) {
         $this->errorCollection->addOne(new Error('Invalid negative right'));
         return false;
     }
     //we don't have to add negative right. We must only delete old simple rights. condition($hadOppositeRight && !$isValidNegaviteRight)
     if ($isValidNegaviteRight) {
         //May we have to add record to b_disk_right in final.
         $right['OBJECT_ID'] = $this->object->getId();
         $result = RightTable::add($right);
         if (!$result->isSuccess()) {
             $this->errorCollection->addFromResult($result);
             return false;
         }
     }
     $rightsManager = Driver::getInstance()->getRightsManager();
     if (!$rightsManager->containsOperationInTask($rightsManager::OP_READ, $right['TASK_ID'])) {
         return true;
     }
     if (!$this->hasAlreadySimpleRight($right['ACCESS_CODE'])) {
         //below we already have negative rights, which deleted simple rights.
         return true;
     }
     //need to delete simple rights from descendants
     $conflictRightsInSubTree = $this->getConflictRightsInSubTree($right['ACCESS_CODE'], $right['TASK_ID']);
     $accessCode = $this->sqlHelper->forSql($right['ACCESS_CODE']);
     if (empty($conflictRightsInSubTree)) {
         //we have to destroy simple right from all descendants and from current OBJECT_ID
         if ($this->connection instanceof OracleConnection) {
             $this->connection->queryExecute("\n\t\t\t\t\tDELETE FROM (SELECT simple.* FROM b_disk_simple_right simple\n\t\t\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = simple.OBJECT_ID\n\t\t\t\t\tWHERE p.PARENT_ID = {$this->object->getId()} AND simple.ACCESS_CODE = '{$accessCode}')\n\t\t\t\t");
         } else {
             $this->connection->queryExecute("\n\t\t\t\t\tDELETE simple FROM b_disk_simple_right simple\n\t\t\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = simple.OBJECT_ID\n\t\t\t\t\tWHERE p.PARENT_ID = {$this->object->getId()} AND simple.ACCESS_CODE = '{$accessCode}'\n\t\t\t\t");
         }
     } else {
         $objectIds = array();
         foreach ($conflictRightsInSubTree as $conflictRight) {
             $objectIds[] = $conflictRight['OBJECT_ID'];
         }
         unset($conflictRight);
         //we have to destroy simple right from all descendants and from current OBJECT_ID without nodes with conflict rights in path.
         if ($this->connection instanceof OracleConnection) {
             $this->connection->queryExecute("\n\t\t\t\t\tDELETE FROM (SELECT simple.* FROM b_disk_simple_right simple\n\t\t\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = simple.OBJECT_ID\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tp.PARENT_ID = {$this->object->getId()} AND simple.ACCESS_CODE = '{$accessCode}' AND\n\t\t\t\t\t\tNOT EXISTS(\n\t\t\t\t\t\t\tSELECT 'x' FROM b_disk_object_path pp\n\t\t\t\t\t\t\t\tWHERE pp.OBJECT_ID = p.OBJECT_ID AND\n\t\t\t\t\t\t\t\tpp.PARENT_ID IN (" . implode(',', $objectIds) . ") ))\n\t\t\t\t");
         } else {
             $this->connection->queryExecute("\n\t\t\t\t\tDELETE simple FROM b_disk_simple_right simple\n\t\t\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = simple.OBJECT_ID\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tp.PARENT_ID = {$this->object->getId()} AND simple.ACCESS_CODE = '{$accessCode}' AND\n\t\t\t\t\t\tNOT EXISTS(\n\t\t\t\t\t\t\tSELECT 'x' FROM b_disk_object_path pp\n\t\t\t\t\t\t\t\tWHERE pp.OBJECT_ID = p.OBJECT_ID AND\n\t\t\t\t\t\t\t\tpp.PARENT_ID IN (" . implode(',', $objectIds) . ") )\n\t\t\t\t");
         }
     }
     return true;
 }