PluginProbe
SQLite Database Integration / trunk
SQLite Database Integration vtrunk
3.0.2 3.0.1 trunk 2.1.13 2.1.14 2.1.15 2.1.16 2.2.0 2.2.1 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.17 2.2.18 2.2.19 2.2.2 2.2.20 2.2.21 2.2.22 2.2.23 2.2.3 All 32 releases
← All changes | wp-includes/sqlite/install-functions.php +18 -74 2.2.2trunk View file →
@@ -1,10 +1,7 @@
1 1 <?php
2 2 /**
3 3 * Main integration file.
4 - *
5 - * @package wp-sqlite-integration
6 - * @since 1.0.0
7 4 */
8 5
9 6 /**
10 7 * Function to create tables according to the schemas of WordPress.
@@ -10,10 +7,8 @@
10 7 * Function to create tables according to the schemas of WordPress.
11 8 *
12 9 * This is executed only once while installation.
13 10 *
14 - * @since 1.0.0
15 - *
16 11 * @return boolean
17 12 *
18 13 * @throws PDOException If the database connection fails.
19 14 */
@@ -24,28 +19,32 @@
24 19
25 20 $table_schemas = wp_get_db_schema();
26 21 $queries = explode( ';', $table_schemas );
27 22 try {
28 - $pdo = new PDO( 'sqlite:' . FQDB, null, null, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); // phpcs:ignore WordPress.DB.RestrictedClasses
23 + $translator = new WP_MySQL_On_SQLite(
24 + sprintf(
25 + 'mysql-on-sqlite:path=%s;dbname=%s',
26 + str_replace( ';', ';;', FQDB ),
27 + str_replace( ';', ';;', $wpdb->dbname )
28 + ),
29 + null,
30 + null,
31 + array(
32 + 'sqlite_journal_mode' => defined( 'SQLITE_JOURNAL_MODE' ) ? SQLITE_JOURNAL_MODE : null,
33 + )
34 + );
35 + $translator->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true ); // phpcs:ignore WordPress.DB.RestrictedClasses.mysql__PDO
29 36 } catch ( PDOException $err ) {
30 37 $err_data = $err->errorInfo; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
31 38 $message = 'Database connection error!<br />';
32 - $message .= sprintf( 'Error message is: %s', $err_data[2] );
39 + $message .= sprintf( 'Error message is: %s', $err_data[2] ?? $err->getMessage() );
33 40 wp_die( $message, 'Database Error!' );
34 41 }
35 42
36 - if ( defined( 'WP_SQLITE_AST_DRIVER' ) && WP_SQLITE_AST_DRIVER ) {
37 - $translator = new WP_SQLite_Driver(
38 - new WP_SQLite_Connection( array( 'pdo' => $pdo ) ),
39 - $wpdb->dbname
40 - );
41 - } else {
42 - $translator = new WP_SQLite_Translator( $pdo );
43 - }
44 43 $query = null;
45 44
46 45 try {
47 - $translator->begin_transaction();
46 + $translator->beginTransaction();
48 47 foreach ( $queries as $query ) {
49 48 $query = trim( $query );
50 49 if ( empty( $query ) ) {
51 50 continue;
@@ -50,74 +49,21 @@
50 49 if ( empty( $query ) ) {
51 50 continue;
52 51 }
53 52
54 - $result = $translator->query( $query );
55 - if ( false === $result ) {
56 - throw new PDOException( $translator->get_error_message() );
57 - }
53 + $translator->query( $query );
58 54 }
59 55 $translator->commit();
60 56 } catch ( PDOException $err ) {
61 - $err_data = $err->errorInfo; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
62 - $err_code = $err_data[1];
63 - $translator->rollback();
57 + $translator->rollBack();
64 58 $message = sprintf(
65 59 'Error occurred while creating tables or indexes...<br />Query was: %s<br />',
66 60 var_export( $query, true )
67 61 );
68 - $message .= sprintf( 'Error message is: %s', $err_data[2] );
62 + $message .= sprintf( 'Error message is: %s', $err->getMessage() );
69 63 wp_die( $message, 'Database Error!' );
70 64 }
71 65
72 - /*
73 - * Debug: Cross-check with MySQL.
74 - * This is for debugging purpose only and requires files
75 - * that are present in the GitHub repository
76 - * but not the plugin published on WordPress.org.
77 - */
78 - if ( defined( 'SQLITE_DEBUG_CROSSCHECK' ) && SQLITE_DEBUG_CROSSCHECK ) {
79 - $host = DB_HOST;
80 - $port = 3306;
81 - if ( str_contains( $host, ':' ) ) {
82 - $host_parts = explode( ':', $host );
83 - $host = $host_parts[0];
84 - $port = $host_parts[1];
85 - }
86 - $dsn = 'mysql:host=' . $host . '; port=' . $port . '; dbname=' . DB_NAME;
87 - $pdo_mysql = new PDO( $dsn, DB_USER, DB_PASSWORD, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); // phpcs:ignore WordPress.DB.RestrictedClasses.mysql__PDO
88 - $pdo_mysql->query( 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";' );
89 - $pdo_mysql->query( 'SET time_zone = "+00:00";' );
90 - foreach ( $queries as $query ) {
91 - $query = trim( $query );
92 - if ( empty( $query ) ) {
93 - continue;
94 - }
95 - try {
96 - $pdo_mysql->beginTransaction();
97 - $pdo_mysql->query( $query );
98 - } catch ( PDOException $err ) {
99 - $err_data = $err->errorInfo; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
100 - $err_code = $err_data[1];
101 - // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual
102 - if ( 5 == $err_code || 6 == $err_code ) {
103 - // If the database is locked, commit again.
104 - $pdo_mysql->commit();
105 - } else {
106 - $pdo_mysql->rollBack();
107 - $message = sprintf(
108 - 'Error occurred while creating tables or indexes...<br />Query was: %s<br />',
109 - var_export( $query, true )
110 - );
111 - $message .= sprintf( 'Error message is: %s', $err_data[2] );
112 - wp_die( $message, 'Database Error!' );
113 - }
114 - }
115 - }
116 - }
117 -
118 - $pdo = null;
119 -
120 66 return true;
121 67 }
122 68
123 69 if ( ! function_exists( 'wp_install' ) ) {
@@ -125,10 +71,8 @@
125 71 * Installs the site.
126 72 *
127 73 * Runs the required functions to set up and populate the database,
128 74 * including primary admin user and initial options.
129 - *
130 - * @since 1.0.0
131 75 *
132 76 * @param string $blog_title Site title.
133 77 * @param string $user_name User's username.
134 78 * @param string $user_email User's email.