Skip to content

Commit f60df61

Browse files
committed
Reintroduce WP_SQLite_Driver as a temporary proxy exposing legacy API
1 parent 8ca0f1d commit f60df61

File tree

6 files changed

+154
-17
lines changed

6 files changed

+154
-17
lines changed

tests/WP_SQLite_Information_Schema_Reconstructor_Tests.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function setUp(): void {
4949
);
5050

5151
$builder = new WP_SQLite_Information_Schema_Builder(
52-
WP_SQLite_Driver::RESERVED_PREFIX,
52+
WP_MySQL_On_SQLite::RESERVED_PREFIX,
5353
$this->engine->get_connection()
5454
);
5555

tests/bootstrap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
require_once __DIR__ . '/../wp-includes/sqlite/class-wp-sqlite-translator.php';
1717
require_once __DIR__ . '/../wp-includes/sqlite-ast/class-wp-sqlite-connection.php';
1818
require_once __DIR__ . '/../wp-includes/sqlite-ast/class-wp-sqlite-configurator.php';
19+
require_once __DIR__ . '/../wp-includes/sqlite-ast/class-wp-mysql-on-sqlite.php';
1920
require_once __DIR__ . '/../wp-includes/sqlite-ast/class-wp-sqlite-driver.php';
2021
require_once __DIR__ . '/../wp-includes/sqlite-ast/class-wp-sqlite-driver-exception.php';
2122
require_once __DIR__ . '/../wp-includes/sqlite-ast/class-wp-sqlite-information-schema-builder.php';

wp-includes/sqlite-ast/class-wp-sqlite-configurator.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class WP_SQLite_Configurator {
1414
/**
1515
* The SQLite driver instance.
1616
*
17-
* @var WP_SQLite_Driver
17+
* @var WP_MySQL_On_SQLite
1818
*/
1919
private $driver;
2020

@@ -35,11 +35,11 @@ class WP_SQLite_Configurator {
3535
/**
3636
* Constructor.
3737
*
38-
* @param WP_SQLite_Driver $driver The SQLite driver instance.
38+
* @param WP_MySQL_On_SQLite $driver The SQLite driver instance.
3939
* @param WP_SQLite_Information_Schema_Builder $schema_builder The information schema builder instance.
4040
*/
4141
public function __construct(
42-
WP_SQLite_Driver $driver,
42+
WP_MySQL_On_SQLite $driver,
4343
WP_SQLite_Information_Schema_Builder $schema_builder
4444
) {
4545
$this->driver = $driver;
@@ -100,7 +100,7 @@ private function ensure_global_variables_table(): void {
100100
sprintf(
101101
'CREATE TABLE IF NOT EXISTS %s (name TEXT PRIMARY KEY, value TEXT)',
102102
$this->driver->get_connection()->quote_identifier(
103-
WP_SQLite_Driver::GLOBAL_VARIABLES_TABLE_NAME
103+
WP_MySQL_On_SQLite::GLOBAL_VARIABLES_TABLE_NAME
104104
)
105105
)
106106
);
@@ -260,11 +260,11 @@ private function save_current_driver_version(): void {
260260
sprintf(
261261
'INSERT INTO %s (name, value) VALUES (?, ?) ON CONFLICT(name) DO UPDATE SET value = ?',
262262
$this->driver->get_connection()->quote_identifier(
263-
WP_SQLite_Driver::GLOBAL_VARIABLES_TABLE_NAME
263+
WP_MySQL_On_SQLite::GLOBAL_VARIABLES_TABLE_NAME
264264
)
265265
),
266266
array(
267-
WP_SQLite_Driver::DRIVER_VERSION_VARIABLE_NAME,
267+
WP_MySQL_On_SQLite::DRIVER_VERSION_VARIABLE_NAME,
268268
SQLITE_DRIVER_VERSION,
269269
SQLITE_DRIVER_VERSION,
270270
)

wp-includes/sqlite-ast/class-wp-sqlite-driver-exception.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ class WP_SQLite_Driver_Exception extends PDOException {
44
/**
55
* The SQLite driver that originated the exception.
66
*
7-
* @var WP_SQLite_Driver
7+
* @var WP_MySQL_On_SQLite
88
*/
99
private $driver;
1010

1111
/**
1212
* Constructor.
1313
*
14-
* @param WP_SQLite_Driver $driver The SQLite driver that originated the exception.
14+
* @param WP_MySQL_On_SQLite $driver The SQLite driver that originated the exception.
1515
* @param string $message The exception message.
1616
* @param int|string $code The exception code. In PDO, it can be a string with value of SQLSTATE.
1717
* @param Throwable|null $previous The previous throwable used for the exception chaining.
1818
*/
1919
public function __construct(
20-
WP_SQLite_Driver $driver,
20+
WP_MySQL_On_SQLite $driver,
2121
string $message,
2222
$code = 0,
2323
?Throwable $previous = null
@@ -27,7 +27,7 @@ public function __construct(
2727
$this->driver = $driver;
2828
}
2929

30-
public function getDriver(): WP_SQLite_Driver {
30+
public function getDriver(): WP_MySQL_On_SQLite {
3131
return $this->driver;
3232
}
3333
}
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<?php
2+
3+
/*
4+
* The SQLite driver uses PDO. Enable PDO function calls:
5+
* phpcs:disable WordPress.DB.RestrictedClasses.mysql__PDO
6+
*/
7+
8+
/**
9+
* Deprecated: A proxy of the WP_MySQL_On_SQLite class preserving legacy API.
10+
*
11+
* This is a temporary class to preserve the legacy API for easier transition
12+
* to the new PDO-based API, developed in the "WP_MySQL_On_SQLite" class.
13+
*/
14+
class WP_SQLite_Driver {
15+
/** @var string */
16+
public $client_info;
17+
18+
/** @var WP_MySQL_On_SQLite */
19+
private $mysql_on_sqlite_driver;
20+
21+
public function __construct(
22+
WP_SQLite_Connection $connection,
23+
string $database,
24+
int $mysql_version = 80038
25+
) {
26+
$this->mysql_on_sqlite_driver = new WP_MySQL_On_SQLite( $connection, $database, $mysql_version );
27+
$this->main_db_name = $database;
28+
$this->client_info = $this->mysql_on_sqlite_driver->client_info;
29+
}
30+
31+
public function get_connection(): WP_SQLite_Connection {
32+
return $this->mysql_on_sqlite_driver->get_connection();
33+
}
34+
35+
public function get_sqlite_version(): string {
36+
return $this->mysql_on_sqlite_driver->get_sqlite_version();
37+
}
38+
39+
public function get_saved_driver_version(): string {
40+
return $this->mysql_on_sqlite_driver->get_saved_driver_version();
41+
}
42+
43+
public function is_sql_mode_active( string $mode ): bool {
44+
return $this->mysql_on_sqlite_driver->is_sql_mode_active( $mode );
45+
}
46+
47+
public function get_last_mysql_query(): ?string {
48+
return $this->mysql_on_sqlite_driver->get_last_mysql_query();
49+
}
50+
51+
public function get_last_sqlite_queries(): array {
52+
return $this->mysql_on_sqlite_driver->get_last_sqlite_queries();
53+
}
54+
55+
/** @return int|string */
56+
public function get_insert_id() {
57+
return $this->mysql_on_sqlite_driver->get_insert_id();
58+
}
59+
60+
/**
61+
* @param string $query Full SQL statement string.
62+
* @param int $fetch_mode PDO fetch mode. Default is PDO::FETCH_OBJ.
63+
* @param array ...$fetch_mode_args Additional fetch mode arguments.
64+
*
65+
* @return mixed Return value, depending on the query type.
66+
*
67+
* @throws WP_SQLite_Driver_Exception When the query execution fails.
68+
*/
69+
public function query( string $query, $fetch_mode = PDO::FETCH_OBJ, ...$fetch_mode_args ) {
70+
return $this->mysql_on_sqlite_driver->query( $query, $fetch_mode, ...$fetch_mode_args );
71+
}
72+
73+
public function create_parser( string $query ): WP_MySQL_Parser {
74+
return $this->mysql_on_sqlite_driver->create_parser( $query );
75+
}
76+
77+
/**
78+
* @return mixed
79+
*/
80+
public function get_query_results() {
81+
return $this->mysql_on_sqlite_driver->get_query_results();
82+
}
83+
84+
/**
85+
* @return mixed
86+
*/
87+
public function get_last_return_value() {
88+
return $this->mysql_on_sqlite_driver->get_last_return_value();
89+
}
90+
91+
public function get_last_column_count(): int {
92+
return $this->mysql_on_sqlite_driver->get_last_column_count();
93+
}
94+
95+
public function get_last_column_meta(): array {
96+
return $this->mysql_on_sqlite_driver->get_last_column_meta();
97+
}
98+
99+
public function execute_sqlite_query( string $sql, array $params = array() ): PDOStatement {
100+
return $this->mysql_on_sqlite_driver->execute_sqlite_query( $sql, $params );
101+
}
102+
103+
public function begin_transaction(): void {
104+
$this->mysql_on_sqlite_driver->begin_transaction();
105+
}
106+
107+
public function commit(): void {
108+
$this->mysql_on_sqlite_driver->commit();
109+
}
110+
111+
public function rollback(): void {
112+
$this->mysql_on_sqlite_driver->rollback();
113+
}
114+
115+
/**
116+
* Proxy also this private method, as it is used in tests.
117+
*/
118+
private function quote_mysql_utf8_string_literal( string $utf8_literal ): string {
119+
$closure = function ( string $utf8_literal ) {
120+
return $this->quote_mysql_utf8_string_literal( $utf8_literal );
121+
};
122+
return $closure->call( $this->mysql_on_sqlite_driver, $utf8_literal );
123+
}
124+
125+
/**
126+
* Proxy also the private property "$main_db_name", as it is used in tests.
127+
*/
128+
public function __set( string $name, $value ): void {
129+
if ( 'main_db_name' === $name ) {
130+
$closure = function ( string $value ) {
131+
$this->main_db_name = $value;
132+
};
133+
$closure->call( $this->mysql_on_sqlite_driver, $value );
134+
}
135+
}
136+
}

wp-includes/sqlite-ast/class-wp-sqlite-information-schema-reconstructor.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class WP_SQLite_Information_Schema_Reconstructor {
1919
/**
2020
* The SQLite driver instance.
2121
*
22-
* @var WP_SQLite_Driver
22+
* @var WP_MySQL_On_SQLite
2323
*/
2424
private $driver;
2525

@@ -40,11 +40,11 @@ class WP_SQLite_Information_Schema_Reconstructor {
4040
/**
4141
* Constructor.
4242
*
43-
* @param WP_SQLite_Driver $driver The SQLite driver instance.
43+
* @param WP_MySQL_On_SQLite $driver The SQLite driver instance.
4444
* @param WP_SQLite_Information_Schema_Builder $schema_builder The information schema builder instance.
4545
*/
4646
public function __construct(
47-
WP_SQLite_Driver $driver,
47+
$driver,
4848
WP_SQLite_Information_Schema_Builder $schema_builder
4949
) {
5050
$this->driver = $driver;
@@ -137,7 +137,7 @@ private function get_sqlite_table_names(): array {
137137
array(
138138
'_mysql_data_types_cache',
139139
'sqlite\_%',
140-
str_replace( '_', '\_', WP_SQLite_Driver::RESERVED_PREFIX ) . '%',
140+
str_replace( '_', '\_', WP_MySQL_On_SQLite::RESERVED_PREFIX ) . '%',
141141
)
142142
)->fetchAll( PDO::FETCH_COLUMN );
143143
}
@@ -692,9 +692,9 @@ private function get_mysql_column_type( string $column_type ): string {
692692
/**
693693
* Format a MySQL UTF-8 string literal for output in a CREATE TABLE statement.
694694
*
695-
* See WP_SQLite_Driver::quote_mysql_utf8_string_literal().
695+
* See WP_MySQL_On_SQLite::quote_mysql_utf8_string_literal().
696696
*
697-
* TODO: This is a copy of WP_SQLite_Driver::quote_mysql_utf8_string_literal().
697+
* TODO: This is a copy of WP_MySQL_On_SQLite::quote_mysql_utf8_string_literal().
698698
* We may consider extracing it to reusable MySQL helpers.
699699
*
700700
* @param string $utf8_literal The UTF-8 string literal to escape.

0 commit comments

Comments
 (0)