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; }