/** * gc * * @param string $past * * @return bool */ public function gc($past) { $query = $this->db->getQuery(true); $query->delete($this->db->quoteName($this->options['table']))->where($this->db->quoteName($this->options['time_col']) . ' < ' . $this->db->quote((int) $past)); // Remove expired sessions from the database. $this->db->setQuery($query); return (bool) $this->db->execute(); }
/** * Validate that the primary key has been set. * * @return boolean True if the primary key(s) have been set. * * @since 2.0 */ public function hasPrimaryKey() { if ($this->autoIncrement) { $empty = true; foreach ($this->keys as $key) { $empty = $empty && !$this->{$key}; } } else { $query = $this->db->getQuery(true); $query->select('COUNT(*)')->from($this->table); $this->appendPrimaryKeys($query); $this->db->setQuery($query); $count = $this->db->loadResult(); if ($count == 1) { $empty = false; } else { $empty = true; } } return !$empty; }
/** * Batch update some data. * * @param string $table Table name. * @param array $data Data you want to update. * @param mixed $conditions Where conditions, you can use array or Compare object. * Example: * - `array('id' => 5)` => id = 5 * - `new GteCompare('id', 20)` => 'id >= 20' * - `new Compare('id', '%Flower%', 'LIKE')` => 'id LIKE "%Flower%"' * * @return boolean True if update success. */ public function updateBatch($table, $data, $conditions = array()) { $query = $this->db->getQuery(true); // Build conditions $query = QueryHelper::buildWheres($query, $conditions); // Build update values. $fields = array_keys($this->db->getTable($table)->getColumns()); $hasField = false; foreach ((array) $data as $field => $value) { if (!in_array($field, $fields)) { continue; } $query->set($query->format('%n = %q', $field, $value)); $hasField = true; } if (!$hasField) { return false; } $query->update($table); return $this->db->setQuery($query)->execute(); }
/** * Get the current query object or a new Query object. * * @param boolean $new False to return the current query object, True to return a new Query object. * * @return Query The current query object or a new object extending the Query class. * * @since 2.0 * @throws \RuntimeException */ public function getQuery($new = false) { if ($new) { // Derive the class name from the driver. $class = '\\Windwalker\\Query\\' . ucfirst($this->options['driver']) . '\\' . ucfirst($this->options['driver']) . 'Query'; // Make sure we have a query class for this driver. if (class_exists($class)) { $this->connect(); return new $class($this->getConnection()); } return parent::getQuery($new); } else { return $this->query; } }