PostgresProcessor.php
TLDR
This file, src/Illuminate/Database/Query/Processors/PostgresProcessor.php
, contains the implementation for the PostgresProcessor
class, which is responsible for processing various types of queries related to the PostgreSQL database.
Methods
processInsertGetId
This method processes an "insert get ID" query, which inserts a record into a table and returns the ID of the inserted row.
processColumnListing
This method processes the results of a column listing query and converts the results into an array with only the column names.
processTypes
This method processes the results of a types query and converts the results into a formatted array that provides information about the types of columns in the database.
processColumns
This method processes the results of a columns query and converts the results into a formatted array that provides information about the columns in a table.
processIndexes
This method processes the results of an indexes query and converts the results into a formatted array that provides information about the indexes in a table.
processForeignKeys
This method processes the results of a foreign keys query and converts the results into a formatted array that provides information about the foreign keys in a table.
Classes
<?php
namespace Illuminate\Database\Query\Processors;
use Illuminate\Database\Query\Builder;
class PostgresProcessor extends Processor
{
/**
* Process an "insert get ID" query.
*
* @param \Illuminate\Database\Query\Builder $query
* @param string $sql
* @param array $values
* @param string|null $sequence
* @return int
*/
public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
{
$connection = $query->getConnection();
$connection->recordsHaveBeenModified();
$result = $connection->selectFromWriteConnection($sql, $values)[0];
$sequence = $sequence ?: 'id';
$id = is_object($result) ? $result->{$sequence} : $result[$sequence];
return is_numeric($id) ? (int) $id : $id;
}
/**
* Process the results of a column listing query.
*
* @deprecated Will be removed in a future Laravel version.
*
* @param array $results
* @return array
*/
public function processColumnListing($results)
{
return array_map(function ($result) {
return ((object) $result)->column_name;
}, $results);
}
/**
* Process the results of a types query.
*
* @param array $results
* @return array
*/
public function processTypes($results)
{
return array_map(function ($result) {
$result = (object) $result;
return [
'name' => $result->name,
'schema' => $result->schema,
'implicit' => (bool) $result->implicit,
'type' => match (strtolower($result->type)) {
'b' => 'base',
'c' => 'composite',
'd' => 'domain',
'e' => 'enum',
'p' => 'pseudo',
'r' => 'range',
'm' => 'multirange',
default => null,
},
'category' => match (strtolower($result->category)) {
'a' => 'array',
'b' => 'boolean',
'c' => 'composite',
'd' => 'date_time',
'e' => 'enum',
'g' => 'geometric',
'i' => 'network_address',
'n' => 'numeric',
'p' => 'pseudo',
'r' => 'range',
's' => 'string',
't' => 'timespan',
'u' => 'user_defined',
'v' => 'bit_string',
'x' => 'unknown',
'z' => 'internal_use',
default => null,
},
];
}, $results);
}
/**
* Process the results of a columns query.
*
* @param array $results
* @return array
*/
public function processColumns($results)
{
return array_map(function ($result) {
$result = (object) $result;
$autoincrement = $result->default !== null && str_starts_with($result->default, 'nextval(');
return [
'name' => $result->name,
'type_name' => $result->type_name,
'type' => $result->type,
'collation' => $result->collation,
'nullable' => (bool) $result->nullable,
'default' => $autoincrement ? null : $result->default,
'auto_increment' => $autoincrement,
'comment' => $result->comment,
];
}, $results);
}
/**
* Process the results of an indexes query.
*
* @param array $results
* @return array
*/
public function processIndexes($results)
{
return array_map(function ($result) {
$result = (object) $result;
return [
'name' => strtolower($result->name),
'columns' => explode(',', $result->columns),
'type' => strtolower($result->type),
'unique' => (bool) $result->unique,
'primary' => (bool) $result->primary,
];
}, $results);
}
/**
* Process the results of a foreign keys query.
*
* @param array $results
* @return array
*/
public function processForeignKeys($results)
{
return array_map(function ($result) {
$result = (object) $result;
return [
'name' => $result->name,
'columns' => explode(',', $result->columns),
'foreign_schema' => $result->foreign_schema,
'foreign_table' => $result->foreign_table,
'foreign_columns' => explode(',', $result->foreign_columns),
'on_update' => match (strtolower($result->on_update)) {
'a' => 'no action',
'r' => 'restrict',
'c' => 'cascade',
'n' => 'set null',
'd' => 'set default',
default => null,
},
'on_delete' => match (strtolower($result->on_delete)) {
'a' => 'no action',
'r' => 'restrict',
'c' => 'cascade',
'n' => 'set null',
'd' => 'set default',
default => null,
},
];
}, $results);
}
}