summaryrefslogtreecommitdiffstats
path: root/provisioning-model.lua
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2010-12-03 11:10:51 +0000
committerTed Trask <ttrask01@yahoo.com>2010-12-03 11:10:51 +0000
commit39a96bb69665e6ff488439c67443248107d81e78 (patch)
treee9b1508fc1bac2ef899f05c150fa97accb82f61d /provisioning-model.lua
parenta7001d559885b3d494777f0b2d98d1b75b6557b3 (diff)
downloadacf-provisioning-39a96bb69665e6ff488439c67443248107d81e78.tar.bz2
acf-provisioning-39a96bb69665e6ff488439c67443248107d81e78.tar.xz
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.
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r--provisioning-model.lua31
1 files changed, 18 insertions, 13 deletions
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