From 39a96bb69665e6ff488439c67443248107d81e78 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Fri, 3 Dec 2010 11:10:51 +0000 Subject: Modified search to return and display the group, parameter, and value that matched. You now can get the same device multiple times if there are multiple param matches. --- provisioning-model.lua | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'provisioning-model.lua') diff --git a/provisioning-model.lua b/provisioning-model.lua index e517907..1c063fd 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1292,27 +1292,32 @@ search_device_values = function(parameter_id, parameter_value, comparison) -- Get the devices from the DB if parameter_id and modelfunctions.validateselect(retval.id) and modelfunctions.validateselect(retval.comparison) then parameter_value = parameter_value or "" - sql = "SELECT * FROM provisioning_devices WHERE " - if parameter_id == "name" or parameter_id=="label" then - sql = sql..escape(parameter_id)..retval.comparison.value.."'"..escape(parameter_value).."'" - elseif parameter_id=="template_id" then - sql = sql.."CAST(template_id AS text)"..retval.comparison.value.."'"..escape(parameter_value).."'" - elseif parameter_id=="template" then - -- Search by template label - sql = sql.."template_id IN (SELECT template_id FROM provisioning_templates WHERE label"..retval.comparison.value.."'"..escape(parameter_value).."')" + sql = "SELECT d.device_id, d.name, d.label, d.template_id, " + local group, param = string.match(parameter_id or "", "([^%.]*)%.(.*)") + if not group then + sql = sql.."'"..escape(parameter_id).."' AS param, " + if parameter_id == "name" or parameter_id=="label" then + sql = sql.."d."..escape(parameter_id).." AS value FROM provisioning_devices d WHERE d."..escape(parameter_id) + elseif parameter_id=="template_id" then + sql = sql.."d.template_id AS value FROM provisioning_devices d WHERE CAST(d.template_id AS text)" + elseif parameter_id=="template" then + -- Search by template label + sql = sql.."t.label AS value FROM provisioning_devices d JOIN provisioning_templates t USING(template_id) WHERE t.label" + end + sql = sql..retval.comparison.value.."'"..escape(parameter_value).."'" else - local group, param = string.match(parameter_id or "", "([^%.]*)%.?(.*)") - sql = sql.."device_id IN (SELECT d2t.device_id FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) ".. - "JOIN provisioning_groups g USING(group_id) JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) ".. + sql = sql.."g.name as group, p.name as param, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END as value FROM ".. + "provisioning_devices d JOIN devices_to_classes d2t USING(device_id) JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) ".. + "JOIN provisioning_groups g USING(group_id) JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id) ".. "LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) " if group and group ~= "" then sql = sql.."WHERE g.name='"..escape(group).."' AND" else sql = sql.."WHERE" end - sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..retval.comparison.value.."'"..escape(parameter_value).."')" + sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..retval.comparison.value.."'"..escape(parameter_value).."'" end - sql = sql.." ORDER BY name ASC, label ASC" + sql = sql.." ORDER BY d.name ASC, d.label ASC" retval.result.value = getselectresponse(sql) end if connected then databasedisconnect() end -- cgit v1.2.3