diff --git a/packages/mysql-on-sqlite/src/load.php b/packages/mysql-on-sqlite/src/load.php index 41c7d803..6e1d2d8f 100644 --- a/packages/mysql-on-sqlite/src/load.php +++ b/packages/mysql-on-sqlite/src/load.php @@ -12,8 +12,24 @@ require_once __DIR__ . '/parser/class-wp-parser-node.php'; require_once __DIR__ . '/parser/class-wp-parser-token.php'; require_once __DIR__ . '/mysql/class-wp-mysql-token.php'; -require_once __DIR__ . '/mysql/class-wp-mysql-lexer.php'; -require_once __DIR__ . '/mysql/class-wp-mysql-parser.php'; + +/* + * The MySQL lexer and parser have an optional native (e.g. Rust) implementation. + * When the native extension is loaded, it pre-declares WP_MySQL_Native_Lexer / + * WP_MySQL_Native_Parser; otherwise we fall back to the pure-PHP classes shipped + * here. WP_MySQL_Lexer / WP_MySQL_Parser is the public entrypoint either way. + */ +if ( class_exists( 'WP_MySQL_Native_Lexer', false ) ) { + require_once __DIR__ . '/mysql/native/class-wp-mysql-lexer.php'; +} else { + require_once __DIR__ . '/mysql/class-wp-mysql-lexer.php'; +} + +if ( class_exists( 'WP_MySQL_Native_Parser', false ) ) { + require_once __DIR__ . '/mysql/native/class-wp-mysql-parser.php'; +} else { + require_once __DIR__ . '/mysql/class-wp-mysql-parser.php'; +} require_once __DIR__ . '/sqlite/class-wp-sqlite-connection.php'; require_once __DIR__ . '/sqlite/class-wp-sqlite-configurator.php'; require_once __DIR__ . '/sqlite/class-wp-sqlite-driver.php'; diff --git a/packages/mysql-on-sqlite/src/mysql/native/class-wp-mysql-lexer.php b/packages/mysql-on-sqlite/src/mysql/native/class-wp-mysql-lexer.php new file mode 100644 index 00000000..def8ca3f --- /dev/null +++ b/packages/mysql-on-sqlite/src/mysql/native/class-wp-mysql-lexer.php @@ -0,0 +1,3 @@ +