Skip to content

datetime() default expression is quoted (NOW() becomes string literal) #2016

@xHeaven

Description

@xHeaven

Overview

When using a SQL expression as default in a migration, Tempest wraps it in quotes.

Example:

->datetime('created_at', default: 'NOW()')

This compiles to DEFAULT 'NOW()' instead of DEFAULT NOW().

Minimal reproduction

use Tempest\Database\Config\DatabaseDialect;
use Tempest\Database\QueryStatements\CreateTableStatement;

$sql = new CreateTableStatement('users')
    ->datetime('created_at', default: 'NOW()')
    ->compile(DatabaseDialect::MYSQL);

echo $sql;

// CREATE TABLE `users` (
//     `created_at` DATETIME DEFAULT 'NOW()' NOT NULL
// );

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions