Skip to content

Commit ff540bf

Browse files
Nick-S-2018Me
andauthored
Updated handling of unsupported MySQL variables (#585)
* Added handling of unsupported MySQL variables * Restored errors on unexisting mysql variables * Restored errors on unexisting mysql variables * Fixed spelling in error messages * Moved sql vars info to json file * Updated logic to handle global/session queries * Removed debug info --------- Co-authored-by: Me <[email protected]>
1 parent 4af98c5 commit ff540bf

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/Plugin/Select/Handler.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -794,12 +794,19 @@ protected static function handleSelectSysVars(Client $manticoreClient, Payload $
794794
[$fieldNames, $aliasFields] = self::getFieldNamesAndAliases($payload->fields);
795795
// Get unsupported var names from the error message
796796
$errorFields = preg_split('/\s*;\s*/', str_replace('unknown sysvar ', '', $payload->error)) ?: [];
797-
$requeryFields = array_diff($fieldNames, $errorFields);
797+
// Error message has var names in lowercase,
798+
// so we need to convert original field names accordingly before further processing
799+
$fieldNamesLower = array_map('strtolower', $fieldNames);
800+
$requeryFields = array_diff($fieldNamesLower, $errorFields);
798801
$unsupportedMySQLVars = self::getUnsupportedMySQLVars();
799802
$allVars = [];
800-
foreach ($fieldNames as $fieldName) {
803+
foreach ($fieldNamesLower as $fieldName) {
801804
if (in_array($fieldName, $errorFields)) {
802-
$varName = str_replace('@@', '', $fieldName);
805+
$varName = str_ireplace(
806+
['@@global.', '@@session.', '@@'],
807+
'',
808+
$fieldName
809+
);
803810
if (!isset($unsupportedMySQLVars[$varName])) {
804811
throw new Exception('unknown sysvar ' . $fieldName);
805812
}
@@ -840,7 +847,7 @@ protected static function getFieldNamesAndAliases(array $fields): array {
840847
$fieldNames = $aliasFields = [];
841848
foreach ($fields as $fieldName) {
842849
if (str_contains(strtolower($fieldName), ' as ')) {
843-
$fieldInfo = preg_split('/\s+as\s+/', strtolower($fieldName));
850+
$fieldInfo = preg_split('/\s+as\s+/i', $fieldName);
844851
if ($fieldInfo) {
845852
[$fieldName, $alias] = $fieldInfo;
846853
$aliasFields[$fieldName] = $alias;

0 commit comments

Comments
 (0)