public static function getColumnId($name) { $name = trim($name); if (is_null(self::$_column_groups)) { self::$_column_groups = array(); foreach (ColumnGroup::search(1) as $group) { self::$_column_groups[$group->name] = $group->id; } } if (!array_key_exists($name, self::$_column_groups)) { self::$_column_groups[$name] = ColumnGroup::insert(array('name' => $name))->id; } return self::$_column_groups[$name]; }
public function getData() { if (is_null(self::$_columns)) { self::$_columns = array(); foreach (ColumnGroup::search(1) as $columngroup) { self::$_columns[$columngroup->id] = $columngroup->name; } } $data = new StdClass(); foreach (UnitData::search(array('id' => $this->id)) as $unitdata) { $data->{self::$_columns[$unitdata->column_id]} = json_decode($unitdata->value); } $data = Unit::walkObject($data); return $data; }
public function dump() { $columns = array(); foreach (ColumnGroup::search(1) as $columngroup) { $columns[$columngroup->id] = $columngroup->name; } $delta = 10000000; for ($i = 0; $i * $delta < 99999999; $i++) { $start = $i * $delta; $end = $start + $delta - 1; $tmpname1 = tempnam('', ''); $tmpname2 = tempnam('', ''); $file_name1 = 'files/' . str_pad($i * $delta, 8, '0', STR_PAD_LEFT) . '.json.gz'; $file_name2 = 'files/bussiness-' . str_pad($i * $delta, 8, '0', STR_PAD_LEFT) . '.json.gz'; $fp[1] = $fp[3] = gzopen($tmpname1, 'w'); $fp[2] = gzopen($tmpname2, 'w'); $unit_id = null; $unit = new StdClass(); foreach (UnitData::search("`id` >= {$start} AND `id` <= {$end}")->order("`id`, `column_id`")->volumemode(10000) as $unit_data) { if (!is_null($unit_id) and $unit_data->id != $unit_id) { fwrite($fp[$this->getType($unit_id)], str_pad($unit_id, 8, '0', STR_PAD_LEFT) . ',' . json_encode($unit, JSON_UNESCAPED_UNICODE) . "\n"); $unit = new StdClass(); } $unit_id = $unit_data->id; $unit->{$columns[$unit_data->column_id]} = json_decode($unit_data->value); } if (!is_null($unit_id)) { fwrite($fp[$this->getType($unit_id)], str_pad($unit_id, 8, '0', STR_PAD_LEFT) . ',' . json_encode($unit, JSON_UNESCAPED_UNICODE) . "\n"); } fclose($fp[1]); fclose($fp[2]); DropboxLib::putFile($tmpname1, $file_name1); DropboxLib::putFile($tmpname2, $file_name2); unlink($tmpname1); unlink($tmpname2); } }
<?php /** * 從之前的 sqlite 備份備到 mysql 的 script */ include __DIR__ . '/../init.inc.php'; Pix_Table::$_save_memory = true; Pix_Table::addStaticResultSetHelper('Pix_Array_Volume'); $file = $_SERVER['argv'][1]; if (!$file or !file_exists($file)) { die('need file'); } // 先把所有 column 抓出來,之後就不需要再抓了 $columns = array(); foreach (ColumnGroup::search(1) as $columngroup) { $columns[$columngroup->name] = $columngroup->id; } // 匯入檔的格式 class ImportData extends Pix_Table { public function init() { $this->_name = 'data'; $this->_primary = 'no'; $this->_columns['no'] = array('type' => 'varchar'); $this->_columns['data'] = array('type' => 'text'); } } $db = new Pix_Table_Db_Adapter_Sqlite($file); ImportData::setDb($db); $wdb = UnitData::getDb();