Skip to content

Commit ff36738

Browse files
authored
Add a hook for native MySQL lexer and parser implementations (#384)
## Summary Add a small entry point in `load.php` so an optional native (e.g. Rust) MySQL lexer/parser extension can plug itself in as `WP_MySQL_Lexer` / `WP_MySQL_Parser`. The extension pre-declares `WP_MySQL_Native_Lexer` / `WP_MySQL_Native_Parser` before this file loads; otherwise the existing pure-PHP classes ship as the implementation, unchanged. The existing PHP files keep their original names, locations, and class names — no rename, no polyfill scaffolding. Native shims live in a separate `mysql/native/` directory and are only required when the native classes are present. ## Testing - `php -l` on changed files - Smoke: `WP_MySQL_Lexer` and `WP_MySQL_Parser` instantiate and parse `SELECT 1` end-to-end with no native extension loaded - `phpcs` clean
1 parent 2622441 commit ff36738

3 files changed

Lines changed: 24 additions & 2 deletions

File tree

packages/mysql-on-sqlite/src/load.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,24 @@
1212
require_once __DIR__ . '/parser/class-wp-parser-node.php';
1313
require_once __DIR__ . '/parser/class-wp-parser-token.php';
1414
require_once __DIR__ . '/mysql/class-wp-mysql-token.php';
15-
require_once __DIR__ . '/mysql/class-wp-mysql-lexer.php';
16-
require_once __DIR__ . '/mysql/class-wp-mysql-parser.php';
15+
16+
/*
17+
* The MySQL lexer and parser have an optional native (e.g. Rust) implementation.
18+
* When the native extension is loaded, it pre-declares WP_MySQL_Native_Lexer /
19+
* WP_MySQL_Native_Parser; otherwise we fall back to the pure-PHP classes shipped
20+
* here. WP_MySQL_Lexer / WP_MySQL_Parser is the public entrypoint either way.
21+
*/
22+
if ( class_exists( 'WP_MySQL_Native_Lexer', false ) ) {
23+
require_once __DIR__ . '/mysql/native/class-wp-mysql-lexer.php';
24+
} else {
25+
require_once __DIR__ . '/mysql/class-wp-mysql-lexer.php';
26+
}
27+
28+
if ( class_exists( 'WP_MySQL_Native_Parser', false ) ) {
29+
require_once __DIR__ . '/mysql/native/class-wp-mysql-parser.php';
30+
} else {
31+
require_once __DIR__ . '/mysql/class-wp-mysql-parser.php';
32+
}
1733
require_once __DIR__ . '/sqlite/class-wp-sqlite-connection.php';
1834
require_once __DIR__ . '/sqlite/class-wp-sqlite-configurator.php';
1935
require_once __DIR__ . '/sqlite/class-wp-sqlite-driver.php';
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
class WP_MySQL_Lexer extends WP_MySQL_Native_Lexer {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
class WP_MySQL_Parser extends WP_MySQL_Native_Parser {}

0 commit comments

Comments
 (0)