diff options
author | Matthew Wild <mwild1@gmail.com> | 2012-05-22 14:31:19 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2012-05-22 14:31:19 +0100 |
commit | 532d3ba7156e0e614bceef4f8477da878e4340b5 (patch) | |
tree | 614da4a205ac8417dd79ef5b1278014e2e5528f2 | |
parent | 425452286cd7d2edba1743e8ed9283301610b04c (diff) | |
download | prosody-532d3ba7156e0e614bceef4f8477da878e4340b5.tar.gz prosody-532d3ba7156e0e614bceef4f8477da878e4340b5.zip |
util.multitable: Some fixes for iter()... always match against query, and pass value after path results
-rw-r--r-- | util/multitable.lua | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/util/multitable.lua b/util/multitable.lua index 299eecb1..dbf34d28 100644 --- a/util/multitable.lua +++ b/util/multitable.lua @@ -144,18 +144,19 @@ function iter(self, ...) keys[depth] = key; end local value = stack[depth][key]; - if depth == maxdepth then -- Result - local result = {}; -- Collect keys forming path to result - for i = 1, depth do - result[i] = keys[i]; + if query[depth] == nil or key == query[depth] then + if depth == maxdepth then -- Result + local result = {}; -- Collect keys forming path to result + for i = 1, depth do + result[i] = keys[i]; + end + result[depth+1] = value; + return unpack(result, 1, depth+1); + elseif type(value) == "table" then + t_insert(stack, value); -- Descend end - return unpack(result, 1, depth); - else - if (query[depth] == nil or key == query[depth]) and type(value) == "table" then -- Descend - t_insert(stack, value); - end - return it(self); end + return it(self); end; return it, self; end |