public function __construct($name, $value, $params) { Charcoal_ParamTrait::validateString(1, $name); Charcoal_ParamTrait::validateString(2, $value); Charcoal_ParamTrait::validateVector(3, $params); $this->name = us($name); $this->value = us($value); $this->params = uv($params); }
/** * Constructor */ public function __construct($page_info, $where = NULL, $params = NULL, $order_by = NULL, $group_by = NULL) { Charcoal_ParamTrait::validateIsA(1, 'Charcoal_DBPageInfo', $page_info); Charcoal_ParamTrait::validateString(2, $where, TRUE); Charcoal_ParamTrait::validateVector(2, $params, TRUE); Charcoal_ParamTrait::validateString(3, $order_by, TRUE); Charcoal_ParamTrait::validateString(4, $group_by, TRUE); $this->page_info = $page_info; $page = $page_info->getPage(); $page_size = $page_info->getPageSize(); $page = ui($page); $page_size = ui($page_size); $limit = $page_size; $offset = ($page - 1) * $page_size; parent::__construct($where, $params, $order_by, $limit, $offset, $group_by); }
/** * real implementation of Charcoal_SmartGateway::insertAll() * * @param Charcoal_String|string $comment comment text * @param string|Charcoal_QueryTarget $query_target description about target model, alias, or joins * @param array|Charcoal_Vector $data_set array of array or DTO value to insert * * @return integer count of affected rows */ public function insertAll($comment, $query_target, $data_set) { Charcoal_ParamTrait::validateString(1, $comment, TRUE); Charcoal_ParamTrait::validateIsA(2, 'Charcoal_QueryTarget', $query_target); Charcoal_ParamTrait::validateVector(3, $data_set); $model = $this->getModel($query_target->getModelName()); $alias = $query_target->getAlias(); list($sql, $params) = $this->sql_builder->buildBulkInsertSQL($model, $alias, $data_set); $sql = !empty($comment) ? $this->sql_builder->prependComment($sql, $comment) : $sql; $this->data_source->prepareExecute($sql, $params); return $this->data_source->numRows(); }
/** * Generate RDBMS-specific SQL for MIN/MAX/SUM/COUNT/AVG * * @param Charcoal_ITableModel $model table model object related with th query * @param string $alias table model alias which is specified by $model * @param int $aggregate_func specify aggregate function which is defined in Charcoal_EnumSQLAggregateFunc * @param Charcoal_SQLCriteria $criteria criteria which should be used in WHERE clause * @param array $joins list of join(list of Charcoal_QueryJoin object) * @param array $fields list of fields which will be returned in query result * * @return string SQL */ public function buildAggregateSQL($model, $alias, $aggregate_func, $criteria, $joins, $fields = NULL) { Charcoal_ParamTrait::validateIsA(1, 'Charcoal_ITableModel', $model); Charcoal_ParamTrait::validateString(2, $alias, TRUE); Charcoal_ParamTrait::validateInteger(3, $aggregate_func); Charcoal_ParamTrait::validateIsA(4, 'Charcoal_SQLCriteria', $criteria); Charcoal_ParamTrait::validateVector(5, $joins); Charcoal_ParamTrait::validateVector(6, $fields, TRUE); $table_name = $model->getTableName(); /** @var int $aggregate_func */ $aggregate_func = ui($aggregate_func); $aggregate_func_map = array(Charcoal_EnumSQLAggregateFunc::FUNC_MIN => 'MIN', Charcoal_EnumSQLAggregateFunc::FUNC_MAX => 'MAX', Charcoal_EnumSQLAggregateFunc::FUNC_SUM => 'SUM', Charcoal_EnumSQLAggregateFunc::FUNC_COUNT => 'COUNT', Charcoal_EnumSQLAggregateFunc::FUNC_AVG => 'AVG'); $func = $aggregate_func_map[$aggregate_func]; $fields = v($fields)->join(","); $sql = "SELECT {$func}({$fields}) FROM " . us($table_name); if ($alias && !empty($alias)) { $sql .= ' AS ' . $alias; } foreach ($joins as $join) { /** @var Charcoal_QueryJoin $join */ $join_type = $join->getJoinType(); $join_model_name = $join->getModelName(); $join_alias = $join->getAlias(); $join_cond = $join->getCondition(); $join_model = $this->getSandbox()->createObject($join_model_name, 'table_model'); /** @var Charcoal_ITableModel $join_model */ /** @var Charcoal_String $join_alias */ /** @var Charcoal_String $join_cond */ switch ($join_type) { case Charcoal_EnumSQLJoinType::INNER_JOIN: $sql .= ' INNER JOIN ' . $join_model->getTableName(); break; case Charcoal_EnumSQLJoinType::LEFT_JOIN: $sql .= ' LEFT JOIN ' . $join_model->getTableName(); break; case Charcoal_EnumSQLJoinType::RIGHT_JOIN: $sql .= ' RIGHT JOIN ' . $join_model->getTableName(); break; } if ($join_alias && !$join_alias->isEmpty()) { $sql .= ' AS ' . $join_alias; } if ($join_cond && !$join_cond->isEmpty()) { $sql .= ' ON ' . $join_cond; } } $where_clause = $criteria->getWhere(); $limit = $criteria->getLimit(); $offset = $criteria->getOffset(); $group_by = $criteria->getGroupBy(); if (!empty($where_clause)) { $sql .= ' WHERE ' . $where_clause; } if (!empty($limit)) { $sql .= ' LIMIT ' . $limit; } if (!empty($offset)) { $sql .= ' OFFSET ' . $offset; } if (!empty($group_by)) { $sql .= ' GROUP BY ' . $group_by; } return $sql; }
/** * Add multiple parameters * * @param Charcoal_Vector|array $params array data to add */ public function addParams($params) { Charcoal_ParamTrait::validateVector(1, $params); if ($this->params) { $this->params = array_merge($this->params, $params); } else { $this->params = uv($params); } }