1) Fixed search queries that compare something with a field that isn't present.

If a field is not present, we use a default value of 0 for that field.
master
Durel 7 years ago
parent c4b52405f2
commit 79a50f45de

@ -7253,6 +7253,7 @@ function inv.items.search(arrayOfQueryArrays)
end -- if
end -- if
local statsVal = stats[key] or ""
local statsNum = tonumber(stats[key] or 0)
-- Ensure that "min" and "max" queries are only used on numbers
@ -7276,13 +7277,6 @@ function inv.items.search(arrayOfQueryArrays)
break
end -- if
-- If the current item doesn't have a field matching the given key, we don't match; try the next
-- item. The behavior is the same whether or not the field is inverted (i.e., "~fieldName") so
-- we don't bother checking for inversion in this test.
elseif (stats[key] == nil) then
itemMatches = false
break
-- If we are searching for an element in a string of elements (e.g., a keyword in a keyword list
-- or a flag in a list of flags) check if the queried string is present. We use a case-insensitive
-- search by making everything in the strings lower case. We also temporarily replace special
@ -7297,14 +7291,14 @@ function inv.items.search(arrayOfQueryArrays)
elseif (key == invStatFieldName) or (key == invStatFieldLeadsTo) then
local escapedValue = string.gsub(value, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1")
local noMatch = (string.find(string.lower(stats[key]), string.lower(escapedValue)) == nil)
local noMatch = (string.find(string.lower(statsVal), string.lower(escapedValue)) == nil)
if ((invert == false) and noMatch) or ((invert == true) and not noMatch) then
itemMatches = false
break
end -- if
elseif (key == invStatFieldKeywords) or (key == invStatFieldFlags) or (key == invStatFieldClan) then
local statField = stats[key] or ""
local statField = statsVal or ""
local element
local isInField = false
@ -7332,11 +7326,19 @@ function inv.items.search(arrayOfQueryArrays)
itemMatches = false
break
-- Check for entries that aren't present (defaults to "0")
elseif (statsVal == "") then
if ((invert == false) and (statsNum ~= valueNum)) or
((invert == true) and (statsNum == valueNum)) then
itemMatches = false
break
end -- if
-- Handle a basic string query (use lowercase only to make queries a bit simpler)
elseif ((invert == false) and (prefix == nil) and
(string.lower(stats[key]) ~= string.lower(value))) or
(string.lower(statsVal) ~= string.lower(value))) or
((invert == true) and (prefix == nil) and
(string.lower(stats[key]) == string.lower(value))) then
(string.lower(statsVal) == string.lower(value))) then
itemMatches = false
break
end -- if

Loading…
Cancel
Save