/**
  * @param IIndexable $object
  * @return bool
  */
 public function deleteFromSphinx(IIndexable $object)
 {
     $id = $object->getIntId();
     $index = kSphinxSearchManager::getSphinxIndexName($object->getObjectIndexName());
     KalturaLog::debug('Deleting sphinx document for object [' . get_class($object) . '] [' . $object->getId() . ']');
     $sql = "delete from {$index} where id = {$id}";
     return $this->execSphinx($sql, $object);
 }
 /**
  * @param IIndexable $object
  * @param bool $isInsert
  * @param bool $force
  * @return string|bool
  */
 public function getSphinxSaveSql(IIndexable $object, $isInsert = false, $force = false)
 {
     $id = $object->getIntId();
     if (!$id) {
         KalturaLog::err("Object [" . get_class($object) . "] id [" . $object->getId() . "] could not be saved to sphinx, int_id is empty");
         return false;
     }
     //		if(!$force && !$isInsert && !$this->saveToSphinxRequired($object))
     //			return false;
     $data = array('id' => $id);
     // NOTE: the order matters
     $dataStrings = array();
     $dataInts = array();
     $dataTimes = array();
     $fields = $object->getIndexFieldsMap();
     foreach ($fields as $field => $getterName) {
         $fieldType = $object->getIndexFieldType($field);
         $getter = "get{$getterName}";
         switch ($fieldType) {
             case IIndexable::FIELD_TYPE_STRING:
                 $dataStrings[$field] = $object->{$getter}();
                 break;
             case IIndexable::FIELD_TYPE_INTEGER:
                 $dataInts[$field] = $object->{$getter}();
                 break;
             case IIndexable::FIELD_TYPE_DATETIME:
                 $dataTimes[$field] = $object->{$getter}(null);
                 break;
         }
     }
     // TODO - remove after solving the replace bug that removes all fields
     $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaSearchDataContributor');
     $sphinxPluginsData = array();
     foreach ($pluginInstances as $pluginName => $pluginInstance) {
         KalturaLog::debug("Loading {$pluginName} sphinx texts");
         $sphinxPluginData = null;
         try {
             $sphinxPluginData = $pluginInstance->getSearchData($object);
         } catch (Exception $e) {
             KalturaLog::err($e->getMessage());
             continue;
         }
         if ($sphinxPluginData) {
             KalturaLog::debug("Sphinx data for {$pluginName} [{$sphinxPluginData}]");
             $sphinxPluginsData[] = $sphinxPluginData;
         }
     }
     if (count($sphinxPluginsData)) {
         $dataStrings['plugins_data'] = implode(',', $sphinxPluginsData);
     }
     foreach ($dataStrings as $key => $value) {
         $search = array("\\", "", "\n", "\r", "", "'", '"');
         $replace = array("\\\\", "\\0", "\\n", "\\r", "\\Z", "\\'", '\\"');
         $value = str_replace($search, $replace, $value);
         $data[$key] = "'{$value}'";
     }
     foreach ($dataInts as $key => $value) {
         $value = (int) $value;
         $data[$key] = $value;
     }
     foreach ($dataTimes as $key => $value) {
         $value = (int) $value;
         $data[$key] = $value;
     }
     $values = implode(',', $data);
     $fields = implode(',', array_keys($data));
     $index = kSphinxSearchManager::getSphinxIndexName($object->getObjectIndexName());
     $command = 'insert';
     if (!$isInsert) {
         $command = 'replace';
     }
     return "{$command} into {$index} ({$fields}) values({$values})";
 }