Skip to content

Commit c1016cb

Browse files
committed
fix
1 parent 36580af commit c1016cb

2 files changed

Lines changed: 86 additions & 26 deletions

File tree

tests/WP_SQLite_Driver_Tests.php

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10118,10 +10118,17 @@ public function testCastValuesOnInsert(): void {
1011810118
$this->assertQuery( "INSERT INTO t VALUES ('2')" );
1011910119
$this->assertQuery( "INSERT INTO t VALUES ('3.0')" );
1012010120

10121-
// TODO: These are supported in MySQL:
10122-
$this->assertQueryError( "INSERT INTO t VALUES ('4.5')", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store REAL value in INTEGER column t.value' );
10123-
$this->assertQueryError( 'INSERT INTO t VALUES (0x05)', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10124-
$this->assertQueryError( "INSERT INTO t VALUES (x'06')", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10121+
$is_legacy_sqlite = version_compare( $this->engine->get_sqlite_version(), WP_PDO_MySQL_On_SQLite::MINIMUM_SQLITE_VERSION, '<' );
10122+
if ( $is_legacy_sqlite ) {
10123+
$this->assertQuery( "INSERT INTO t VALUES ('4.5')" );
10124+
$this->assertQuery( 'INSERT INTO t VALUES (0x05)' );
10125+
$this->assertQuery( "INSERT INTO t VALUES (x'06')" );
10126+
} else {
10127+
// TODO: These are supported in MySQL:
10128+
$this->assertQueryError( "INSERT INTO t VALUES ('4.5')", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store REAL value in INTEGER column t.value' );
10129+
$this->assertQueryError( 'INSERT INTO t VALUES (0x05)', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10130+
$this->assertQueryError( "INSERT INTO t VALUES (x'06')", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10131+
}
1012510132

1012610133
$result = $this->assertQuery( 'SELECT * FROM t' );
1012710134
$this->assertSame( null, $result[0]->value );
@@ -10146,8 +10153,13 @@ public function testCastValuesOnInsert(): void {
1014610153
$this->assertQuery( "INSERT INTO t VALUES ('5')" );
1014710154

1014810155
// TODO: These are supported in MySQL:
10149-
$this->assertQueryError( 'INSERT INTO t VALUES (0x06)', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10150-
$this->assertQueryError( "INSERT INTO t VALUES (x'07')", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10156+
if ( $is_legacy_sqlite ) {
10157+
$this->assertQuery( 'INSERT INTO t VALUES (0x06)' );
10158+
$this->assertQuery( "INSERT INTO t VALUES (x'07')" );
10159+
} else {
10160+
$this->assertQueryError( 'INSERT INTO t VALUES (0x06)', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10161+
$this->assertQueryError( "INSERT INTO t VALUES (x'07')", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10162+
}
1015110163

1015210164
$result = $this->assertQuery( 'SELECT * FROM t' );
1015310165
$this->assertSame( null, $result[0]->value );
@@ -10613,10 +10625,17 @@ public function testCastValuesOnUpdate(): void {
1061310625
$this->assertQuery( "UPDATE t SET value = '3.0'" );
1061410626
$this->assertSame( '3', $this->assertQuery( 'SELECT * FROM t' )[0]->value );
1061510627

10616-
// TODO: These are supported in MySQL:
10617-
$this->assertQueryError( "UPDATE t SET value = '4.5'", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store REAL value in INTEGER column t.value' );
10618-
$this->assertQueryError( 'UPDATE t SET value = 0x05', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10619-
$this->assertQueryError( "UPDATE t SET value = x'06'", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10628+
$is_legacy_sqlite = version_compare( $this->engine->get_sqlite_version(), WP_PDO_MySQL_On_SQLite::MINIMUM_SQLITE_VERSION, '<' );
10629+
if ( $is_legacy_sqlite ) {
10630+
$this->assertQuery( "UPDATE t SET value = '4.5'" );
10631+
$this->assertQuery( 'UPDATE t SET value = 0x05' );
10632+
$this->assertQuery( "UPDATE t SET value = x'06'" );
10633+
} else {
10634+
// TODO: These are supported in MySQL:
10635+
$this->assertQueryError( "UPDATE t SET value = '4.5'", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store REAL value in INTEGER column t.value' );
10636+
$this->assertQueryError( 'UPDATE t SET value = 0x05', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10637+
$this->assertQueryError( "UPDATE t SET value = x'06'", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in INTEGER column t.value' );
10638+
}
1062010639

1062110640
$this->assertQuery( 'DROP TABLE t' );
1062210641

@@ -10652,8 +10671,13 @@ public function testCastValuesOnUpdate(): void {
1065210671
$this->assertSame( PHP_VERSION_ID < 80100 ? '5.0' : '5', $this->assertQuery( 'SELECT * FROM t' )[0]->value );
1065310672

1065410673
// TODO: These are supported in MySQL:
10655-
$this->assertQueryError( 'UPDATE t SET value = 0x06', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10656-
$this->assertQueryError( "UPDATE t SET value = x'07'", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10674+
if ( $is_legacy_sqlite ) {
10675+
$this->assertQuery( 'UPDATE t SET value = 0x06' );
10676+
$this->assertQuery( "UPDATE t SET value = x'07'" );
10677+
} else {
10678+
$this->assertQueryError( 'UPDATE t SET value = 0x06', 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10679+
$this->assertQueryError( "UPDATE t SET value = x'07'", 'SQLSTATE[23000]: Integrity constraint violation: 19 cannot store BLOB value in REAL column t.value' );
10680+
}
1065710681

1065810682
$this->assertQuery( 'DROP TABLE t' );
1065910683

tests/WP_SQLite_Driver_Translation_Tests.php

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -102,23 +102,33 @@ public function testInsert(): void {
102102
$this->driver->query( 'CREATE TABLE t2 (c1 INT, c2 INT)' );
103103
$this->driver->query( 'INSERT INTO t2 VALUES (1, 2)' );
104104

105+
$is_values_naming_supported = version_compare( $this->driver->get_sqlite_version(), '3.33.0', '>=' );
106+
105107
$this->assertQuery(
106-
'INSERT INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true',
108+
$is_values_naming_supported
109+
? 'INSERT INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true'
110+
: 'INSERT INTO `t` (`c`) SELECT `column1` FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 )) WHERE true',
107111
'INSERT INTO t (c) VALUES (1)'
108112
);
109113

110114
$this->assertQuery(
111-
'INSERT INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true',
115+
$is_values_naming_supported
116+
? 'INSERT INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true'
117+
: 'INSERT INTO `t` (`c`) SELECT `column1` FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 )) WHERE true',
112118
'INSERT INTO wp.t (c) VALUES (1)'
113119
);
114120

115121
$this->assertQuery(
116-
'INSERT INTO `t` (`c1`, `c2`) SELECT `column1`, `column2` FROM (VALUES ( 1 , 2 )) WHERE true',
122+
$is_values_naming_supported
123+
? 'INSERT INTO `t` (`c1`, `c2`) SELECT `column1`, `column2` FROM (VALUES ( 1 , 2 )) WHERE true'
124+
: 'INSERT INTO `t` (`c1`, `c2`) SELECT `column1`, `column2` FROM (SELECT NULL AS `column1`, NULL AS `column2` WHERE FALSE UNION ALL VALUES ( 1 , 2 )) WHERE true',
117125
'INSERT INTO t (c1, c2) VALUES (1, 2)'
118126
);
119127

120128
$this->assertQuery(
121-
'INSERT INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 ) , ( 2 )) WHERE true',
129+
$is_values_naming_supported
130+
? 'INSERT INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 ) , ( 2 )) WHERE true'
131+
: 'INSERT INTO `t` (`c`) SELECT `column1` FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 ) , ( 2 )) WHERE true',
122132
'INSERT INTO t (c) VALUES (1), (2)'
123133
);
124134

@@ -136,18 +146,26 @@ public function testInsertWithTypeCasting(): void {
136146
$this->driver->query( 'CREATE TABLE t2 (c1 TEXT, c2 TEXT)' );
137147
$this->driver->query( 'INSERT INTO t2 VALUES (1, 2)' );
138148

149+
$is_values_naming_supported = version_compare( $this->driver->get_sqlite_version(), '3.33.0', '>=' );
150+
139151
$this->assertQuery(
140-
'INSERT INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 )) WHERE true',
152+
$is_values_naming_supported
153+
? 'INSERT INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 )) WHERE true'
154+
: 'INSERT INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 )) WHERE true',
141155
'INSERT INTO t1 (c1) VALUES (1)'
142156
);
143157

144158
$this->assertQuery(
145-
'INSERT INTO `t1` (`c1`, `c2`) SELECT CAST(`column1` AS TEXT), CAST(`column2` AS TEXT) FROM (VALUES ( 1 , 2 )) WHERE true',
159+
$is_values_naming_supported
160+
? 'INSERT INTO `t1` (`c1`, `c2`) SELECT CAST(`column1` AS TEXT), CAST(`column2` AS TEXT) FROM (VALUES ( 1 , 2 )) WHERE true'
161+
: 'INSERT INTO `t1` (`c1`, `c2`) SELECT CAST(`column1` AS TEXT), CAST(`column2` AS TEXT) FROM (SELECT NULL AS `column1`, NULL AS `column2` WHERE FALSE UNION ALL VALUES ( 1 , 2 )) WHERE true',
146162
'INSERT INTO t1 (c1, c2) VALUES (1, 2)'
147163
);
148164

149165
$this->assertQuery(
150-
'INSERT INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 ) , ( 2 )) WHERE true',
166+
$is_values_naming_supported
167+
? 'INSERT INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 ) , ( 2 )) WHERE true'
168+
: 'INSERT INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 ) , ( 2 )) WHERE true',
151169
'INSERT INTO t1 (c1) VALUES (1), (2)'
152170
);
153171

@@ -166,23 +184,33 @@ public function testReplace(): void {
166184
$this->driver->query( 'CREATE TABLE t2 (c1 INT, c2 INT)' );
167185
$this->driver->query( 'INSERT INTO t2 VALUES (1, 2)' );
168186

187+
$is_values_naming_supported = version_compare( $this->driver->get_sqlite_version(), '3.33.0', '>=' );
188+
169189
$this->assertQuery(
170-
'REPLACE INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true',
190+
$is_values_naming_supported
191+
? 'REPLACE INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true'
192+
: 'REPLACE INTO `t` (`c`) SELECT `column1` FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 )) WHERE true',
171193
'REPLACE INTO t (c) VALUES (1)'
172194
);
173195

174196
$this->assertQuery(
175-
'REPLACE INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true',
197+
$is_values_naming_supported
198+
? 'REPLACE INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 )) WHERE true'
199+
: 'REPLACE INTO `t` (`c`) SELECT `column1` FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 )) WHERE true',
176200
'REPLACE INTO wp.t (c) VALUES (1)'
177201
);
178202

179203
$this->assertQuery(
180-
'REPLACE INTO `t` (`c1`, `c2`) SELECT `column1`, `column2` FROM (VALUES ( 1 , 2 )) WHERE true',
204+
$is_values_naming_supported
205+
? 'REPLACE INTO `t` (`c1`, `c2`) SELECT `column1`, `column2` FROM (VALUES ( 1 , 2 )) WHERE true'
206+
: 'REPLACE INTO `t` (`c1`, `c2`) SELECT `column1`, `column2` FROM (SELECT NULL AS `column1`, NULL AS `column2` WHERE FALSE UNION ALL VALUES ( 1 , 2 )) WHERE true',
181207
'REPLACE INTO t (c1, c2) VALUES (1, 2)'
182208
);
183209

184210
$this->assertQuery(
185-
'REPLACE INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 ) , ( 2 )) WHERE true',
211+
$is_values_naming_supported
212+
? 'REPLACE INTO `t` (`c`) SELECT `column1` FROM (VALUES ( 1 ) , ( 2 )) WHERE true'
213+
: 'REPLACE INTO `t` (`c`) SELECT `column1` FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 ) , ( 2 )) WHERE true',
186214
'REPLACE INTO t (c) VALUES (1), (2)'
187215
);
188216

@@ -200,18 +228,26 @@ public function testReplaceWithTypeCasting(): void {
200228
$this->driver->query( 'CREATE TABLE t2 (c1 TEXT, c2 TEXT)' );
201229
$this->driver->query( 'INSERT INTO t2 VALUES (1, 2)' );
202230

231+
$is_values_naming_supported = version_compare( $this->driver->get_sqlite_version(), '3.33.0', '>=' );
232+
203233
$this->assertQuery(
204-
'REPLACE INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 )) WHERE true',
234+
$is_values_naming_supported
235+
? 'REPLACE INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 )) WHERE true'
236+
: 'REPLACE INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 )) WHERE true',
205237
'REPLACE INTO t1 (c1) VALUES (1)'
206238
);
207239

208240
$this->assertQuery(
209-
'REPLACE INTO `t1` (`c1`, `c2`) SELECT CAST(`column1` AS TEXT), CAST(`column2` AS TEXT) FROM (VALUES ( 1 , 2 )) WHERE true',
241+
$is_values_naming_supported
242+
? 'REPLACE INTO `t1` (`c1`, `c2`) SELECT CAST(`column1` AS TEXT), CAST(`column2` AS TEXT) FROM (VALUES ( 1 , 2 )) WHERE true'
243+
: 'REPLACE INTO `t1` (`c1`, `c2`) SELECT CAST(`column1` AS TEXT), CAST(`column2` AS TEXT) FROM (SELECT NULL AS `column1`, NULL AS `column2` WHERE FALSE UNION ALL VALUES ( 1 , 2 )) WHERE true',
210244
'REPLACE INTO t1 (c1, c2) VALUES (1, 2)'
211245
);
212246

213247
$this->assertQuery(
214-
'REPLACE INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 ) , ( 2 )) WHERE true',
248+
$is_values_naming_supported
249+
? 'REPLACE INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (VALUES ( 1 ) , ( 2 )) WHERE true'
250+
: 'REPLACE INTO `t1` (`c1`) SELECT CAST(`column1` AS TEXT) FROM (SELECT NULL AS `column1` WHERE FALSE UNION ALL VALUES ( 1 ) , ( 2 )) WHERE true',
215251
'REPLACE INTO t1 (c1) VALUES (1), (2)'
216252
);
217253

0 commit comments

Comments
 (0)