@@ -761,9 +761,9 @@ protected function whereHaving(string $qbKey, $key, $value = null, string $type
761761 $ k = trim ($ k );
762762
763763 end ($ op );
764-
765764 $ op = trim (current ($ op ));
766765
766+ // Does the key end with operator?
767767 if (substr ($ k , -strlen ($ op )) === $ op ) {
768768 $ k = rtrim (substr ($ k , 0 , -strlen ($ op )));
769769 $ op = " {$ op }" ;
@@ -783,7 +783,15 @@ protected function whereHaving(string $qbKey, $key, $value = null, string $type
783783 } elseif (! $ this ->hasOperator ($ k ) && $ qbKey !== 'QBHaving ' ) {
784784 // value appears not to have been set, assign the test to IS NULL
785785 $ op = ' IS NULL ' ;
786- } elseif (preg_match ('/\s*(!?=|<>|IS(?:\s+NOT)?)\s*$/i ' , $ k , $ match , PREG_OFFSET_CAPTURE )) {
786+ } elseif (
787+ // The key ends with !=, =, <>, IS, IS NOT
788+ preg_match (
789+ '/\s*(!?=|<>|IS(?:\s+NOT)?)\s*$/i ' ,
790+ $ k ,
791+ $ match ,
792+ PREG_OFFSET_CAPTURE
793+ )
794+ ) {
787795 $ k = substr ($ k , 0 , $ match [0 ][1 ]);
788796 $ op = $ match [1 ][0 ] === '= ' ? ' IS NULL ' : ' IS NOT NULL ' ;
789797 } else {
@@ -3377,16 +3385,16 @@ protected function getOperator(string $str, bool $list = false)
33773385 : '' ;
33783386 $ this ->pregOperators = [
33793387 '\s*(?:<|>|!)?=\s* ' , // =, <=, >=, !=
3380- '\s*<>?\s* ' , // <, <>
3381- '\s*>\s* ' , // >
3382- '\s+IS NULL ' , // IS NULL
3383- '\s+IS NOT NULL ' , // IS NOT NULL
3384- '\s+EXISTS\s*\(.*\) ' , // EXISTS(sql)
3388+ '\s*<>?\s* ' , // <, <>
3389+ '\s*>\s* ' , // >
3390+ '\s+IS NULL ' , // IS NULL
3391+ '\s+IS NOT NULL ' , // IS NOT NULL
3392+ '\s+EXISTS\s*\(.*\) ' , // EXISTS (sql)
33853393 '\s+NOT EXISTS\s*\(.*\) ' , // NOT EXISTS(sql)
3386- '\s+BETWEEN\s+ ' , // BETWEEN value AND value
3387- '\s+IN\s*\(.*\) ' , // IN(list)
3388- '\s+NOT IN\s*\(.*\) ' , // NOT IN (list)
3389- '\s+LIKE\s+\S.*( ' . $ _les . ')? ' , // LIKE 'expr'[ ESCAPE '%s']
3394+ '\s+BETWEEN\s+ ' , // BETWEEN value AND value
3395+ '\s+IN\s*\(.*\) ' , // IN (list)
3396+ '\s+NOT IN\s*\(.*\) ' , // NOT IN (list)
3397+ '\s+LIKE\s+\S.*( ' . $ _les . ')? ' , // LIKE 'expr'[ ESCAPE '%s']
33903398 '\s+NOT LIKE\s+\S.*( ' . $ _les . ')? ' , // NOT LIKE 'expr'[ ESCAPE '%s']
33913399 ];
33923400 }
@@ -3409,13 +3417,18 @@ private function getOperatorFromWhereKey(string $whereKey)
34093417 $ whereKey = trim ($ whereKey );
34103418
34113419 $ pregOperators = [
3412- '\s*(?:<|>|!)?= ' , // =, <=, >=, !=
3413- '\s*<>? ' , // <, <>
3414- '\s*> ' , // >
3415- '\s+IS NULL ' , // IS NULL
3416- '\s+IS NOT NULL ' , // IS NOT NULL
3417- '\s+LIKE ' , // LIKE
3418- '\s+NOT LIKE ' , // NOT LIKE
3420+ '\s*(?:<|>|!)?= ' , // =, <=, >=, !=
3421+ '\s*<>? ' , // <, <>
3422+ '\s*> ' , // >
3423+ '\s+IS NULL ' , // IS NULL
3424+ '\s+IS NOT NULL ' , // IS NOT NULL
3425+ '\s+EXISTS\s*\(.*\) ' , // EXISTS (sql)
3426+ '\s+NOT EXISTS\s*\(.*\) ' , // NOT EXISTS (sql)
3427+ '\s+BETWEEN\s+ ' , // BETWEEN value AND value
3428+ '\s+IN\s*\(.*\) ' , // IN (list)
3429+ '\s+NOT IN\s*\(.*\) ' , // NOT IN (list)
3430+ '\s+LIKE ' , // LIKE
3431+ '\s+NOT LIKE ' , // NOT LIKE
34193432 ];
34203433
34213434 return preg_match_all (
0 commit comments