We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
When using Literal class to create a virtual column in MariaDB like so:
$this->table['imaginary_table']->addColumn('imaginary_column', Literal::from("varchar(30) COLLATE utf8mb4_general_ci GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(`json_column`, '$.json_value'))) VIRTUAL"));
it throws MySQL error
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NOT NULL
as NOT NULL is not allowed after creation of virtual column. NOT NULL is by default added on
NOT NULL
phinx/src/Phinx/Db/Adapter/MysqlAdapter.php
Line 1365 in 343645c
NULL
$this->table['imaginary_table']->addColumn('imaginary_column', Literal::from("varchar(30) COLLATE utf8mb4_general_ci GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(`json_column`, '$.json_value'))) VIRTUAL", [ 'null' => true ]));
note ['null' => true] as the option, it returns an error of
['null' => true]
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NULL
I suggest rewriting:
if (!($column->getType() instanceof Literal) || strpos($this->getConnection()->getAttribute(PDO::ATTR_SERVER_VERSION), "MariaDB") === false) { $def .= $column->isNull() ? ' NULL' : ' NOT NULL'; }
Tested on MariaDB and MySQL and works as expected.
Any thoughts?
Regards, Oskar
The text was updated successfully, but these errors were encountered:
Feel free to make a PR here with suggested changes
Sorry, something went wrong.
#2158 PR for the issue
PR open for discussion, please add the explanations there in the opening comment.
Successfully merging a pull request may close this issue.
When using Literal class to create a virtual column in MariaDB like so:
it throws MySQL error
as
NOT NULL
is not allowed after creation of virtual column.NOT NULL
is by default added onphinx/src/Phinx/Db/Adapter/MysqlAdapter.php
Line 1365 in 343645c
Virtual column is set as
NULL
in MariaDB as default and cannot be changed so also if create statement is rewritten to:note
['null' => true]
as the option, it returns an error ofI suggest rewriting:
phinx/src/Phinx/Db/Adapter/MysqlAdapter.php
Line 1365 in 343645c
to:
Tested on MariaDB and MySQL and works as expected.
Any thoughts?
Regards, Oskar
The text was updated successfully, but these errors were encountered: