/** * add feed item * * @return Charcoal_FeedCreatorFeedItem new feed item */ public function addItem($data = array()) { Charcoal_ParamTrait::validateHashMap(1, $data); $item = new Charcoal_FeedCreatorFeedItem($this, $data); $this->creator->addItem($item->getRawItem()); return $item; }
public function __construct($sandbox, $obj_path, $params = NULL) { Charcoal_ParamTrait::validateSandbox(1, $sandbox); Charcoal_ParamTrait::validateStringOrObjectPath(1, $obj_path); Charcoal_ParamTrait::validateHashMap(2, $params, TRUE); parent::__construct(p(array())); $this->_sandbox = $sandbox; $this->_obj_path = is_string(us($obj_path)) ? new Charcoal_ObjectPath($obj_path) : $obj_path; $this->_params = $params ? $params : m(array()); }
public static function makeAbsoluteURL($sandbox, $obj_path, $params = NULL) { Charcoal_ParamTrait::validateSandbox(1, $sandbox); Charcoal_ParamTrait::validateStringOrObject(2, 'Charcoal_ObjectPath', $obj_path); Charcoal_ParamTrait::validateHashMap(3, $params, TRUE); // サーバ名 $url = 'http://' . $_SERVER['SERVER_NAME']; // サーバのパス $url .= dirname($_SERVER['SCRIPT_NAME']); // 相対部分を追加 $url .= self::makeRelativeURL($sandbox, $obj_path, $params); return $url; }
/** * create * */ public function create($params) { Charcoal_ParamTrait::validateHashMap(1, $params); $this->pager = @Pager::factory($params); }
/** * Prepare for statement and execute query * * @param string|Charcoal_String $sql SQL statement(placeholders can be included) * @param array|Charcoal_HashMap $params Parameter values for prepared statement * @param array|Charcoal_HashMap $driver_options Driver options * * @return PDOStatement */ private function _prepareExecute($sql, $params, $driver_options) { Charcoal_ParamTrait::validateString(1, $sql); Charcoal_ParamTrait::validateHashMap(2, $params, TRUE); Charcoal_ParamTrait::validateHashMap(3, $driver_options, TRUE); $params = um($params); $driver_options = um($driver_options); $params = $params ? $params : array(); $driver_options = $driver_options ? $driver_options : array(); $timer_handle = Charcoal_Benchmark::start(); $command_id = $this->command_id++; $params_disp = $params ? implode(',', $params) : ''; log_debug('data_source,sql,debug', "[ID]{$command_id} [SQL]{$sql}", self::TAG); log_debug('data_source,sql,debug', "[ID]{$command_id} [params]{$params_disp}", self::TAG); /** @var PDOStatement $stmt */ $stmt = $this->getConnection()->prepare($sql, $driver_options); $this->sql_histories->push(new Charcoal_SQLHistory($sql, $params)); $success = $stmt->execute($params); if (!$success) { list($sqlstate, $err_code, $err_msg) = $stmt->errorInfo(); $msg = "PDO#execute failed. [ID]{$command_id} [SQL]{$sql} [params]{$params_disp} [SQLSTATE]{$sqlstate} [ERR_CODE]{$err_code} [ERR_MSG]{$err_msg}"; log_error('data_source,sql,debug', "...FAILED: {$msg}", self::TAG); _throw(new Charcoal_DBDataSourceException($msg)); } $this->num_rows = $rows = $stmt->rowCount(); log_info('data_source,sql,debug', "[ID]{$command_id} ...success(numRows={$rows})", self::TAG); // ログ $elapse = Charcoal_Benchmark::stop($timer_handle); log_debug('data_source,sql,debug', "[ID]{$command_id} _prepareExecute() end. time=[{$elapse}]msec.", self::TAG); // SQL benchmark ini_set('serialize_precision', 16); log_debug('sql_bench', var_export(array($sql, $rows, $elapse), true), self::TAG); return $stmt; }
/** * real implementation of Charcoal_SmartGateway::updateAll() * * @param Charcoal_QueryTarget $query_target description about target model, alias, or joins * @param Charcoal_SQLCriteria $criteria criteria object * @param Charcoal_HashMap|array $data associative array or HashMap object to update * @param Charcoal_String|string $comment comment text * * @return integer count of affected rows */ public function updateAll($comment, $query_target, $criteria, $data) { Charcoal_ParamTrait::validateString(1, $comment, TRUE); Charcoal_ParamTrait::validateIsA(2, 'Charcoal_QueryTarget', $query_target); Charcoal_ParamTrait::validateIsA(3, 'Charcoal_SQLCriteria', $criteria); Charcoal_ParamTrait::validateHashMap(4, $data); $model = $this->getModel($query_target->getModelName()); $alias = $query_target->getAlias(); $dto = $model->createDTO(um($data)); list($sql, $params) = $this->sql_builder->buildUpdateSQL($model, $alias, $dto, $criteria); $sql = !empty($comment) ? $this->sql_builder->prependComment($sql, $comment) : $sql; // log_debug( "debug,smart_gateway,sql", "sql:$sql", self::TAG ); // log_debug( "debug,smart_gateway,sql", "params:" . print_r($params,true), self::TAG ); // SQL実行 $this->data_source->prepareExecute($sql, $params); return $this->data_source->numRows(); }
/** * Generate RDBMS-specific SQL for bulk insert * * @param Charcoal_ITableModel $model table model object related with th query * @param string $alias table model alias which is specified by $model * @param array $data_set array of array or HashMap of objects * @param array $override association field set which you want to override * * @return array the first element means SQL, the second element means parameter values */ public function buildBulkInsertSQL($model, $alias, $data_set, $override = NULL) { Charcoal_ParamTrait::validateIsA(1, 'Charcoal_ITableModel', $model); Charcoal_ParamTrait::validateString(2, $alias, TRUE); Charcoal_ParamTrait::validateVector(3, $data_set); Charcoal_ParamTrait::validateHashMap(4, $override, TRUE); try { $SQL_field_list = NULL; $SQL_value_list = NULL; $SQL_params = array(); $override = up($override); $field_list = $model->getFieldList(); // determin field list foreach ($field_list as $field) { $insert = $model->getAnnotationValue(s($field), s('insert')); if ($override && isset($override[$field])) { $insert = isset($override[$field]['insert']) ? $override[$field]['insert'] : $insert; } if (!$insert) { // 無指定の場合エラー _throw(new Charcoal_TableModelFieldException($model, $field, '[@insert] annotation is required')); } // @insertアノテーションの値によって分岐 $insert_anno = us($insert->getValue()); switch ($insert_anno) { case 'value': case 'function': $SQL_field_list[] = $field; break; case 'no': break; default: _throw(new Charcoal_TableModelFieldException($model, $field, '[@insert] value is invalid')); } } // determin value list foreach ($data_set as $dto) { $SQL_value_list_line = array(); foreach ($SQL_field_list as $field) { $insert = $model->getAnnotationValue(s($field), s('insert')); if ($override && isset($override[$field])) { $insert = isset($override[$field]['insert']) ? $override[$field]['insert'] : $insert; } if (!$insert) { // 無指定の場合エラー _throw(new Charcoal_TableModelFieldException($model, $field, '[@insert] annotation is required')); } // @insertアノテーションの値によって分岐 $insert_anno = us($insert->getValue()); switch ($insert_anno) { case 'value': // 値で更新 $value = $dto->{$field}; if (is_array($value)) { $type = isset($value[0]) ? $value[0] : NULL; $arg = isset($value[1]) ? $value[1] : NULL; $processed = false; if (is_string($type) && is_string($arg)) { switch (strtolower($type)) { case 'value': if (strtolower($arg) == 'null') { $SQL_value_list_line[] = 'NULL'; $processed = true; } break; case 'function': if (strtolower($arg) == 'now') { $SQL_value_list_line[] = 'NOW()'; $processed = true; } break; } } // is not processed, save the array as a JSON string if (!$processed) { $SQL_value_list_line[] = '?'; $SQL_params[] = json_encode($value, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } } elseif ($value !== NULL) { $SQL_value_list_line[] = '?'; $SQL_params[] = $value; } break; case 'function': // 関数を決定 $params = uv($insert->getParameters()); $function = 'NULL'; if (count($params) == 1) { switch ($params[0]) { case 'now': $function = 'NOW()'; break; default: break; } } // 関数で更新 $SQL_value_list_line[] = $function; break; case 'no': // 更新しない break; default: _throw(new Charcoal_TableModelFieldException($model, $field, '[@insert] value is invalid')); } } $SQL_value_list[] = $SQL_value_list_line; } $SQL_field_list = implode(',', $SQL_field_list); $table = $model->getTableName(); $sql = "INSERT INTO " . us($table) . "(" . us($SQL_field_list) . ") VALUES"; $values = array(); foreach ($SQL_value_list as $line) { $SQL_value_list = implode(',', $line); $values[] = "(" . us($SQL_value_list) . ")"; } $sql .= implode(',', $values); return array($sql, $SQL_params); } catch (Exception $e) { _throw(new Charcoal_SQLBuilderException("DefaultSQLBuilder#buildInsertSQL failed")); } return array(); }
/** * set layout values * * @param Charcoal_HashMap|array $values array value which should be assigned to the template system */ public function setValues($values) { Charcoal_ParamTrait::validateHashMap(1, $values); $this->values = um($values); }