protected function Schema::createDataType in Drupal driver for SQL Server and SQL Azure 4.1.x
Same name and namespace in other branches
- 4.2.x src/Driver/Database/sqlsrv/Schema.php \Drupal\sqlsrv\Driver\Database\sqlsrv\Schema::createDataType()
- 3.1.x src/Driver/Database/sqlsrv/Schema.php \Drupal\sqlsrv\Driver\Database\sqlsrv\Schema::createDataType()
- 4.0.x src/Driver/Database/sqlsrv/Schema.php \Drupal\sqlsrv\Driver\Database\sqlsrv\Schema::createDataType()
Create the data type from a field specification.
2 calls to Schema::createDataType()
- Schema::changeField in src/
Driver/ Database/ sqlsrv/ Schema.php - Change a field definition.
- Schema::createFieldSql in src/
Driver/ Database/ sqlsrv/ Schema.php - Create Field SQL.
File
- src/
Driver/ Database/ sqlsrv/ Schema.php, line 1407
Class
Namespace
Drupal\sqlsrv\Driver\Database\sqlsrvCode
protected function createDataType($table, $name, $spec) {
$sqlsrv_type = $spec['sqlsrv_type'];
$sqlsrv_type_native = $spec['sqlsrv_type_native'];
$lengthable = in_array($sqlsrv_type_native, [
'char',
'varchar',
'nchar',
'nvarchar',
]);
if (!empty($spec['length']) && $lengthable) {
$length = $spec['length'];
if (is_int($length) && $this
->isUtf8()) {
// Do we need to check if this exceeds the max length?
// If so, use varchar(max).
$length *= 3;
}
return $sqlsrv_type_native . '(' . $length . ')';
}
elseif (in_array($sqlsrv_type_native, [
'numeric',
'decimal',
]) && isset($spec['precision']) && isset($spec['scale'])) {
// Maximum precision for SQL Server 2008 or greater is 38.
// For previous versions it's 28.
if ($spec['precision'] > 38) {
// Logs an error.
\Drupal::logger('sqlsrv')
->warning("Field '@field' in table '@table' has had it's precision dropped from @precision to 38", [
'@field' => $name,
'@table' => $table,
'@precision' => $spec['precision'],
]);
$spec['precision'] = 38;
}
return $sqlsrv_type_native . '(' . $spec['precision'] . ', ' . $spec['scale'] . ')';
}
else {
return $sqlsrv_type;
}
}