Signed-off-by: William Desportes <williamdes@wdes.fr>
This commit is contained in:
commit
6eac1dd56a
@ -957,6 +957,9 @@ class Util
|
||||
}
|
||||
|
||||
$conditionValue = '';
|
||||
$isBinaryString = $meta->type === 'string' && stripos($fieldFlags, 'BINARY') !== false;
|
||||
// 63 is the binary charset, see: https://dev.mysql.com/doc/internals/en/charsets.html
|
||||
$isBlobAndIsBinaryCharset = $meta->type === 'blob' && $meta->charsetnr === 63;
|
||||
// timestamp is numeric on some MySQL 4.1
|
||||
// for real we use CONCAT above and it should compare to string
|
||||
if ($meta->numeric
|
||||
@ -964,10 +967,7 @@ class Util
|
||||
&& ($meta->type !== 'real')
|
||||
) {
|
||||
$conditionValue = '= ' . $row;
|
||||
} elseif (($meta->type === 'blob') || ($meta->type === 'string')
|
||||
&& stripos($fieldFlags, 'BINARY') !== false
|
||||
&& ! empty($row)
|
||||
) {
|
||||
} elseif ($isBlobAndIsBinaryCharset || (! empty($row) && $isBinaryString)) {
|
||||
// hexify only if this is a true not empty BLOB or a BINARY
|
||||
|
||||
// do not waste memory building a too big condition
|
||||
|
||||
@ -207,6 +207,66 @@ class UtilTest extends AbstractTestCase
|
||||
]
|
||||
)
|
||||
);
|
||||
$this->assertSame(
|
||||
['= \'value\'', ''],
|
||||
$this->callFunction(
|
||||
null,
|
||||
Util::class,
|
||||
'getConditionValue',
|
||||
[
|
||||
'value',// row
|
||||
((object) [
|
||||
'numeric' => false,
|
||||
'type' => 'blob',
|
||||
'charsetnr' => 32,// armscii8_general_ci
|
||||
]),// field meta
|
||||
'',// field flags
|
||||
0,// fields count
|
||||
'',// condition key
|
||||
'',// condition
|
||||
]
|
||||
)
|
||||
);
|
||||
$this->assertSame(
|
||||
['= \'value\'', ''],
|
||||
$this->callFunction(
|
||||
null,
|
||||
Util::class,
|
||||
'getConditionValue',
|
||||
[
|
||||
'value',// row
|
||||
((object) [
|
||||
'numeric' => false,
|
||||
'type' => 'blob',
|
||||
'charsetnr' => 48,// latin1_general_ci
|
||||
]),// field meta
|
||||
'',// field flags
|
||||
0,// fields count
|
||||
'',// condition key
|
||||
'',// condition
|
||||
]
|
||||
)
|
||||
);
|
||||
$this->assertSame(
|
||||
['= CAST(0x76616c7565 AS BINARY)', ''],
|
||||
$this->callFunction(
|
||||
null,
|
||||
Util::class,
|
||||
'getConditionValue',
|
||||
[
|
||||
'value',// row
|
||||
((object) [
|
||||
'numeric' => false,
|
||||
'type' => 'blob',
|
||||
'charsetnr' => 63,// binary
|
||||
]),// field meta
|
||||
'',// field flags
|
||||
0,// fields count
|
||||
'',// condition key
|
||||
'',// condition
|
||||
]
|
||||
)
|
||||
);
|
||||
$this->assertSame(
|
||||
['= CAST(0x76616c7565 AS BINARY)', ''],
|
||||
$this->callFunction(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user