Example #1
0
 /**
  * Return where part of query.
  *
  * @param  int    $id
  * @return string
  */
 private function getWherePartById($id)
 {
     if (empty($id)) {
         throw new InvalidArgumentException("Value '{$id}' is not a valid ID");
     }
     return $this->connection->prepare('(`id` = ?)', $id);
 }
 /**
  * {@inheritdoc}
  */
 public function uniqueWhere($field_name, $where, ...$context)
 {
     if (empty($field_name)) {
         throw new InvalidArgumentException("Value '{$field_name}' is not a valid field name");
     }
     if (empty($context) && (!array_key_exists($field_name, $this->field_values) || $this->field_values[$field_name] === null)) {
         return true;
         // NULL is always good for single column keys because MySQL does not check NULL for uniqueness
     }
     $field_names = [$field_name];
     if (count($context)) {
         $field_names = array_merge($field_names, $context);
     }
     // Check if we have existsing columns
     foreach ($field_names as $v) {
         if (!array_key_exists($v, $this->field_values)) {
             throw new InvalidArgumentException("Field '{$v}' is not known");
         }
     }
     $table_name = $this->connection->escapeTableName($this->table_name);
     $conditions = [];
     if ($where) {
         $conditions[] = $this->connection->prepareConditions($where);
     }
     foreach ($field_names as $v) {
         $escaped_field_name = $this->connection->escapeFieldName($v);
         if ($this->field_values[$v] === null) {
             $conditions[] = "{$escaped_field_name} IS NULL";
         } else {
             $conditions[] = $this->connection->prepare("{$escaped_field_name} = ?", $this->field_values[$v]);
         }
     }
     $conditions = implode(' AND ', $conditions);
     if (empty($this->object_id)) {
         $sql = sprintf("SELECT COUNT(`id`) AS 'row_count' FROM {$table_name} WHERE {$conditions}");
     } else {
         $sql = $this->connection->prepare("SELECT COUNT(`id`) AS 'row_count' FROM {$table_name} WHERE ({$conditions}) AND (`id` != ?)", $this->old_object_id ? $this->old_object_id : $this->object_id);
     }
     if ($this->connection->executeFirstCell($sql) > 0) {
         if (empty($context)) {
             $this->addFieldError($field_name, "Value of '{$field_name}' needs to be unique");
         } else {
             $this->addFieldError($field_name, "Value of '{$field_name}' needs to be unique in context of " . implode(', ', array_map(function ($field_name) {
                 return "'{$field_name}'";
             }, $context)));
         }
         return false;
     }
     return true;
 }
 /**
  * Insert a row with the given field values.
  *
  * @param mixed ...$field_values
  */
 public function insert(...$field_values)
 {
     if ($this->is_done) {
         throw new RuntimeException('This batch insert is already done');
     }
     if (count($field_values) == $this->fields_num) {
         $this->rows[] = $this->connection->prepare($this->row_prepare_pattern, ...$field_values);
         if (count($this->rows) == $this->rows_per_batch) {
             $this->flush();
         }
     } else {
         throw new BadMethodCallException('Number of arguments does not match number of fields');
     }
 }