/** * Escapes given value. * @param mixed|array|Traversable $value * @param string|array|null $type * @return mixed|array */ protected function escapeValue($value, $type = null) { if (!$type) { // NULL type if ($value === null) { return 'NULL'; } elseif (is_array($value)) { foreach ($value as $k => $v) { $value[$k] = $this->escapeValue($v); } return $value; } else { if ($value instanceof DateTime) { return $this->escapeValue($value, Manager::DATETIME); } elseif ($value instanceof Literal) { return $value->value; } else { return is_numeric($value) ? +$value : $this->stmt->getConnection()->getDriver()->escape($value, Manager::TEXT); } } } elseif (is_array($type)) { foreach ($value as $k => $v) { $value[$k] = $this->escapeValue($v, $type[$k]); } return $value; } elseif ($type !== null) { if ($type === Manager::INT) { return (int) $value; } elseif ($type === Manager::FLOAT) { return (double) $value; } elseif ($type === Manager::SUBQUERY && $value instanceof Result) { return "(\n\t" . implode("\n\t", explode("\n", $value)) . "\n)"; } elseif ($type === Manager::ARR) { $arr = $value instanceof Traversable ? iterator_to_array($value) : (array) $value; return '(' . implode(', ', $this->escapeValue($arr)) . ')'; } elseif ($type === Manager::LITERAL) { return $value instanceof Literal ? $value->value : $value; } else { return $this->stmt->getConnection()->getDriver()->escape($value, $type); } } }
public function randomizeOrder(BaseStatement $statement) { $statement->order('RANDOM()'); }
/** * Randomizes result order. * @param BaseStatement $statement */ public function randomizeOrder(BaseStatement $statement) { switch ($this->driverName) { case 'mysql': case 'pgsql': $random = 'RAND()'; case 'sqlite': case 'sqlite2': $random = 'RANDOM()'; case 'odbc': $random = 'Rnd(id)'; case 'oci': $random = 'dbms_random.value'; case 'mssql': $random = 'NEWID()'; } $statement->order($random); }
/** * Returns full table name (with prefix) if available. * @return string|null */ public function getTable() { if ($this->source instanceof self) { return null; } return parent::getTable(); }
/** * Resets the state of the statement. */ public function resetState() { parent::resetState(); $this->affectedRows = null; }