SqlServerProcessor.php
TLDR
This file contains the SqlServerProcessor
class which extends the Processor
class. The SqlServerProcessor
class has several methods for processing queries and results related to the SQL Server database.
Methods
processInsertGetId
This method is used to process an "insert get ID" query. It takes a Builder
instance, SQL string, values array, and an optional sequence parameter. The method executes the insert query and retrieves the last inserted ID using either the ODBC method or the PDO method.
processInsertGetIdForOdbc
This method is a helper method used by the processInsertGetId
method when the ODBC configuration is set to true. It executes a SELECT query to retrieve the last inserted ID for ODBC.
processColumnListing
This method processes the results of a column listing query. It takes an array of results and returns an array of column names.
processColumns
This method processes the results of a columns query. It takes an array of results and returns an array of column information. The column information includes the column name, type name, type, collation, nullable, default value, auto increment status, and comment.
processIndexes
This method processes the results of an indexes query. It takes an array of results and returns an array of index information. The index information includes the index name, columns, type, uniqueness status, and primary status.
processForeignKeys
This method processes the results of a foreign keys query. It takes an array of results and returns an array of foreign key information. The foreign key information includes the foreign key name, columns, foreign schema, foreign table, foreign columns, and the actions to take on update and delete.
Classes
Class: SqlServerProcessor
The SqlServerProcessor
class extends the Processor
class and implements methods for processing queries and results related to the SQL Server database. It includes methods such as processInsertGetId
, processColumnListing
, processColumns
, processIndexes
, and processForeignKeys
.
<?php
namespace Illuminate\Database\Query\Processors;
use Exception;
use Illuminate\Database\Connection;
use Illuminate\Database\Query\Builder;
class SqlServerProcessor 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->insert($sql, $values);
if ($connection->getConfig('odbc') === true) {
$id = $this->processInsertGetIdForOdbc($connection);
} else {
$id = $connection->getPdo()->lastInsertId();
}
return is_numeric($id) ? (int) $id : $id;
}
/**
* Process an "insert get ID" query for ODBC.
*
* @param \Illuminate\Database\Connection $connection
* @return int
*
* @throws \Exception
*/
protected function processInsertGetIdForOdbc(Connection $connection)
{
$result = $connection->selectFromWriteConnection(
'SELECT CAST(COALESCE(SCOPE_IDENTITY(), @@IDENTITY) AS int) AS insertid'
);
if (! $result) {
throw new Exception('Unable to retrieve lastInsertID for ODBC.');
}
$row = $result[0];
return is_object($row) ? $row->insertid : $row['insertid'];
}
/**
* 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)->name;
}, $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;
$type = match ($typeName = $result->type_name) {
'binary', 'varbinary', 'char', 'varchar', 'nchar', 'nvarchar' => $result->length == -1 ? $typeName.'(max)' : $typeName."($result->length)",
'decimal', 'numeric' => $typeName."($result->precision,$result->places)",
'float', 'datetime2', 'datetimeoffset', 'time' => $typeName."($result->precision)",
default => $typeName,
};
return [
'name' => $result->name,
'type_name' => $result->type_name,
'type' => $type,
'collation' => $result->collation,
'nullable' => (bool) $result->nullable,
'default' => $result->default,
'auto_increment' => (bool) $result->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' => strtolower(str_replace('_', ' ', $result->on_update)),
'on_delete' => strtolower(str_replace('_', ' ', $result->on_delete)),
];
}, $results);
}
}