public static function setsStatement($tableName, $data, $db = null)
 {
     if ($db == null) {
         $db = self::$_db;
     }
     $struct = Lms_Item_Store::getStruct($tableName);
     $columns = $struct->getColumns();
     $sets = array();
     foreach ($columns as $fieldName => $meta) {
         if (array_key_exists($fieldName, $data)) {
             $statement = $db->escape($fieldName, true) . '=';
             if ($data[$fieldName] === null) {
                 $statement .= 'NULL';
             } else {
                 switch ($meta['escape']) {
                     case Lms_Item_Struct::ESCAPE_AS_INT:
                         $statement .= intval($data[$fieldName]);
                         break;
                     case Lms_Item_Struct::ESCAPE_AS_FLOAT:
                         $statement .= str_replace(',', '.', floatval($data[$fieldName]));
                         break;
                     case Lms_Item_Struct::ESCAPE_AS_STRING:
                     default:
                         $statement .= $db->escape($data[$fieldName]);
                         break;
                 }
             }
             $sets[] = $statement;
         }
     }
     return implode(', ', $sets);
 }
 public static function rowToItem($row, $itemName = null)
 {
     if (!$row) {
         return null;
     }
     if (!$itemName) {
         $itemName = Lms_Item::getCallingItemName();
     }
     Lms_Item::initStructure(Lms_Item::getClassName($itemName));
     $simplePk = Lms_Item::getSimplePk($itemName);
     $tableName = Lms_Item::getTableName($itemName);
     Lms_Item_Store::setValues($tableName, $row[$simplePk], $row, true);
     return Lms_Item::create($itemName, $row[$simplePk]);
 }
 /**
  * Полностью очищает регистр
  *
  */
 public static function clean()
 {
     $tables = func_get_args();
     if (count($tables)) {
         foreach ($tables as $tableName) {
             self::$_data[$tableName] = array();
             self::$_index[$tableName] = array();
             self::$_indexStatuses[$tableName] = array();
             self::$_changes[$tableName] = array();
         }
     } else {
         self::$_data = array();
         self::$_index = array();
         self::$_indexStatuses = array();
         self::$_changes = array();
     }
 }
 public static function getStruct($itemName)
 {
     $tableName = self::getTableName($itemName);
     return Lms_Item_Store::getStruct($tableName);
 }
 /**
  * Добавляет индекс $indexName по полям $fields
  * @param string $indexName
  * @param array $fields
  * @return Lms_Item_Struct 
  */
 public function addIndex($indexName, array $fields)
 {
     $this->_indexes[$indexName] = array('fields' => $fields);
     foreach ($fields as $fieldName) {
         $this->_indexingFields[$fieldName][] = $indexName;
     }
     Lms_Item_Store::rebuildIndex($this->_tableName, $indexName);
     /*
     Добавляет индекс
     Добавляет в _indexingFields соответствующие значения
     вызывает Lms_Item_Store::rebuildIndex(_tableName, indexName)
     */
     return $this;
 }
 private static function _fillData($tableName, $rows, $foreignKey)
 {
     $newScalarPKs = array();
     if (!count($rows)) {
         return $newScalarPKs;
     }
     $struct = Lms_Item_Store::getStruct($tableName);
     $pk = $struct->getPk();
     for ($i = count($rows) - 1; $i >= 0; $i--) {
         if (is_array($pk)) {
             $assocPK = array();
             foreach ($pk as $pkFieldName) {
                 $assocPK[$pkFieldName] = $rows[$i][$pkFieldName];
             }
             $scalarPk = Lms_Item_Scalar::scalarize($assocPK);
         } else {
             $scalarPk = $rows[$i][$pk];
         }
         $newScalarPKs[] = $scalarPk;
         Lms_Item_Store::setValues($tableName, $scalarPk, $rows[$i], true);
         if ($foreignKey && isset($rows[$i][$foreignKey])) {
             $indexKey = $rows[$i][$foreignKey];
             Lms_Item_Store::setIndexStatus($tableName, $foreignKey, $indexKey, Lms_Item_Struct::FULL_INDEX);
         }
     }
     Lms_Item_Store::rebuildIndex($tableName);
     return $newScalarPKs;
 }