Skip to content
New issue

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

Advanced MySQL compatibility #23

Open
19 of 71 tasks
JanJakes opened this issue Mar 4, 2025 · 0 comments
Open
19 of 71 tasks

Advanced MySQL compatibility #23

JanJakes opened this issue Mar 4, 2025 · 0 comments

Comments

@JanJakes
Copy link
Contributor

JanJakes commented Mar 4, 2025

This is a tracking issue for introducing a new MySQL query parser and an AST-based SQLite driver to significantly improve MySQL compatibility and expand WordPress plugin support.

I think the project can be represented in roughly the following phases:

  1. Initial version of the MySQL parser — reasonably fast, small, and correct ("make it work").
  2. Initial version of the SQLite driver — reach parity with the current test suite ("make it work").
  3. Advanced MySQL support in the SQLite driver — see also test suites below ("make it right").
  4. Advanced MySQL parser — add version support, verify against MySQL server grammar, fix edge cases ("make it right").
  5. Advanced tooling — implement a custom parser for ANTLR or ENBF, add custom grammar tooling ("make it right").
  6. Performance optimizations — explore possibilities to further optimize the new parser ("make it fast").

Here's a list of tasks and issues:

Core

Test suites

Advanced parser and tooling

Supported MySQL constructs

CREATE TABLE

  • CREATE TABLE t (id INT)
  • CREATE TABLE t (id INT NOT NULL)
  • CREATE TABLE t (id INT) DEFAULT 0
  • CREATE TABLE t (...) ENGINE=InnoDB
  • CREATE TABLE t (id INT) COLLATE utf8mb4_czech_ci
  • CREATE TABLE t (id INT PRIMARY KEY)
  • CREATE TABLE t (id INT PRIMARY KEY AUTOINCREMENT)
  • CREATE TABLE t (id INT AUTOINCREMENT, PRIMARY KEY(id))
  • CREATE TABLE t (a INT AUTOINCREMENT, b INT, c INT, PRIMARY KEY(a, b, c))
  • CREATE TABLE t (id INT, UNIQUE(id))
  • CREATE TABLE t LIKE tt
  • CREATE TABLE t [AS] SELECT * FROM tt
  • CREATE TABLE t (...) [AS] SELECT * FROM tt
  • CREATE TABLE t (...) ENGINE=InnoDB [AS] SELECT * FROM tt
  • CREATE TEMPORARY TABLE t (...)
  • CREATE TEMPORARY TABLE t LIKE tt
  • CREATE TABLE IF NOT EXISTS t LIKE tt
  • CREATE TABLE IF NOT EXISTS t (...)
  • CREATE TEMPORARY TABLE IF NOT EXISTS t (...)
  • CREATE TEMPORARY TABLE IF NOT EXISTS t LIKE tt

ALTER TABLE

  • ALTER TABLE t ADD [COLUMN] c INT
  • ALTER TABLE t ADD [COLUMN] c1 INT, c2 TEXT, ...
  • ALTER TABLE t ADD [COLUMN] c INT NOT NULL
  • ALTER TABLE t ADD [COLUMN] c INT DEFAULT 0
  • ALTER TABLE t ADD [COLUMN] c INT NOT NULL DEFAULT 0
  • ALTER TABLE t ADD [COLUMN] c INT [PRIMARY] KEY
  • ALTER TABLE t ADD [COLUMN] c INT UNIQUE [KEY]
  • ALTER TABLE t ADD [COLUMN] c INT AUTO_INCREMENT
  • ALTER TABLE t ADD [COLUMN] c INT COMMENT 'abc'
  • ALTER TABLE t ADD [COLUMN] c TEXT COLLATE 'utf8mb4_0900_ai_ci'
  • ALTER TABLE t ADD [COLUMN] c INT [GENERATED ALWAYS] AS (...)
  • ALTER TABLE t ADD [COLUMN] c INT VIRTUAL
  • ALTER TABLE t ADD [COLUMN] c INT STORED
  • ALTER TABLE t ADD [COLUMN] c INT FIRST
  • ALTER TABLE t ADD [COLUMN] c INT AFTER cc
  • ALTER TABLE t ADD [COLUMN] c INT VISIBLE
  • ALTER TABLE t ADD [COLUMN] c INT INVISIBLE
  • ALTER TABLE t ADD [COLUMN] c INT COLUMN_FORMAT DEFAULT
  • ALTER TABLE t ADD [COLUMN] c INT COLUMN_FORMAT FIXED
  • ALTER TABLE t ADD [COLUMN] c INT COLUMN_FORMAT DYNAMIC
  • ALTER TABLE t ADD [COLUMN] c INT ENGINE_ATTRIBUTE = '...'
  • ALTER TABLE t ADD [COLUMN] c INT SECONDARY_ENGINE_ATTRIBUTE = '...'
  • ALTER TABLE t ADD [COLUMN] c INT STORAGE DISK
  • ALTER TABLE t ADD [COLUMN] c INT STORAGE MEMORY
  • ALTER TABLE t ADD [COLUMN] c REFERENCES tt (id)
  • ALTER TABLE t ADD [COLUMN] c REFERENCES tt (id) MATCH FULL
  • ALTER TABLE t ADD [COLUMN] c REFERENCES tt (id) MATCH PARTIAL
  • ALTER TABLE t ADD [COLUMN] c REFERENCES tt (id) MATCH SIMPLE
  • ALTER TABLE t ADD [COLUMN] c REFERENCES tt (id) ON UPDATE ...
  • ALTER TABLE t ADD [COLUMN] c REFERENCES tt (id) ON DELETE ...
  • ALTER TABLE t ADD [COLUMN] c [CONSTRAINT chck] CHECK (...)
  • ALTER TABLE t ADD [COLUMN] c [CONSTRAINT chck] CHECK (...) ENFORCED
  • ALTER TABLE t ADD [COLUMN] c [CONSTRAINT chck] CHECK (...) NOT ENFORCED
  • ALTER TABLE t DROP [COLUMN] c
  • ALTER TABLE t DROP [COLUMN] c1, c2, ...
  • ALTER TABLE t DROP INDEX idx
  • ALTER TABLE t DROP KEY idx
  • ALTER TABLE t DROP PRIMARY KEY
  • ALTER TABLE t DROP FOREIGN KEY fk
  • ALTER TABLE t DROP CHECK chck
  • ALTER TABLE t DROP CONSTRAINT chck
  • ALTER TABLE t ADD [COLUMN] c1 INT, DROP [COLUMN] c2
@JanJakes JanJakes pinned this issue Mar 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant