Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Database;use Illuminate\Database\Query\Expression;use Illuminate\Support\Traits\Macroable;use RuntimeException;abstract class Grammar{use Macroable;/*** The grammar table prefix.** @var string*/protected $tablePrefix = '';/*** Wrap an array of values.** @param array $values* @return array*/public function wrapArray(array $values){return array_map([$this, 'wrap'], $values);}/*** Wrap a table in keyword identifiers.** @param \Illuminate\Database\Query\Expression|string $table* @return string*/public function wrapTable($table){if (! $this->isExpression($table)) {return $this->wrap($this->tablePrefix.$table, true);}return $this->getValue($table);}/*** Wrap a value in keyword identifiers.** @param \Illuminate\Database\Query\Expression|string $value* @param bool $prefixAlias* @return string*/public function wrap($value, $prefixAlias = false){if ($this->isExpression($value)) {return $this->getValue($value);}// If the value being wrapped has a column alias we will need to separate out// the pieces so we can wrap each of the segments of the expression on its// own, and then join these both back together using the "as" connector.if (stripos($value, ' as ') !== false) {return $this->wrapAliasedValue($value, $prefixAlias);}// If the given value is a JSON selector we will wrap it differently than a// traditional value. We will need to split this path and wrap each part// wrapped, etc. Otherwise, we will simply wrap the value as a string.if ($this->isJsonSelector($value)) {return $this->wrapJsonSelector($value);}return $this->wrapSegments(explode('.', $value));}/*** Wrap a value that has an alias.** @param string $value* @param bool $prefixAlias* @return string*/protected function wrapAliasedValue($value, $prefixAlias = false){$segments = preg_split('/\s+as\s+/i', $value);// If we are wrapping a table we need to prefix the alias with the table prefix// as well in order to generate proper syntax. If this is a column of course// no prefix is necessary. The condition will be true when from wrapTable.if ($prefixAlias) {$segments[1] = $this->tablePrefix.$segments[1];}return $this->wrap($segments[0]).' as '.$this->wrapValue($segments[1]);}/*** Wrap the given value segments.** @param array $segments* @return string*/protected function wrapSegments($segments){return collect($segments)->map(function ($segment, $key) use ($segments) {return $key == 0 && count($segments) > 1? $this->wrapTable($segment): $this->wrapValue($segment);})->implode('.');}/*** Wrap a single string in keyword identifiers.** @param string $value* @return string*/protected function wrapValue($value){if ($value !== '*') {return '"'.str_replace('"', '""', $value).'"';}return $value;}/*** Wrap the given JSON selector.** @param string $value* @return string** @throws \RuntimeException*/protected function wrapJsonSelector($value){throw new RuntimeException('This database engine does not support JSON operations.');}/*** Determine if the given string is a JSON selector.** @param string $value* @return bool*/protected function isJsonSelector($value){return str_contains($value, '->');}/*** Convert an array of column names into a delimited string.** @param array $columns* @return string*/public function columnize(array $columns){return implode(', ', array_map([$this, 'wrap'], $columns));}/*** Create query parameter place-holders for an array.** @param array $values* @return string*/public function parameterize(array $values){return implode(', ', array_map([$this, 'parameter'], $values));}/*** Get the appropriate query parameter place-holder for a value.** @param mixed $value* @return string*/public function parameter($value){return $this->isExpression($value) ? $this->getValue($value) : '?';}/*** Quote the given string literal.** @param string|array $value* @return string*/public function quoteString($value){if (is_array($value)) {return implode(', ', array_map([$this, __FUNCTION__], $value));}return "'$value'";}/*** Determine if the given value is a raw expression.** @param mixed $value* @return bool*/public function isExpression($value){return $value instanceof Expression;}/*** Get the value of a raw expression.** @param \Illuminate\Database\Query\Expression $expression* @return mixed*/public function getValue($expression){return $expression->getValue();}/*** Get the format for database stored dates.** @return string*/public function getDateFormat(){return 'Y-m-d H:i:s';}/*** Get the grammar's table prefix.** @return string*/public function getTablePrefix(){return $this->tablePrefix;}/*** Set the grammar's table prefix.** @param string $prefix* @return $this*/public function setTablePrefix($prefix){$this->tablePrefix = $prefix;return $this;}}