Improved alogirthm of compiling aliases to avoid possible skipping of parameters in certain cases.
This commit is contained in:
1 parent
8d06f34c56
commit
2bd5d7e603
1 file changed
+26
-20
+26
-20
@@ -105,23 +105,30 @@ splitIds = (batches, callback) ->
|
|||||||
|
|
||||||
compileAliases = (callback) ->
|
compileAliases = (callback) ->
|
||||||
map = () ->
|
map = () ->
|
||||||
|
recurse = (partIndex, ref) ->
|
||||||
|
part = parts[partIndex]
|
||||||
|
res = []
|
||||||
|
if part.test?
|
||||||
|
for p of ref
|
||||||
|
if part.test(p)
|
||||||
|
if partIndex == parts.length - 1
|
||||||
|
res.push(p)
|
||||||
|
else
|
||||||
|
for r in recurse(partIndex + 1, ref[p])
|
||||||
|
res.push("#{p}.#{r}")
|
||||||
|
else
|
||||||
|
if ref[part]?
|
||||||
|
if partIndex == parts.length - 1
|
||||||
|
return [part]
|
||||||
|
else
|
||||||
|
for r in recurse(partIndex + 1, ref[part])
|
||||||
|
res.push("#{part}.#{r}")
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
for key, parts of keys
|
for key, parts of keys
|
||||||
ref = this
|
for alias in recurse(0, this)
|
||||||
path = ''
|
emit(alias, key)
|
||||||
for part in parts
|
|
||||||
if part.test?
|
|
||||||
r = ref
|
|
||||||
ref = null
|
|
||||||
for p of r
|
|
||||||
if part.test(p)
|
|
||||||
path += ".#{p}"
|
|
||||||
ref = r[p]
|
|
||||||
break
|
|
||||||
else
|
|
||||||
path += ".#{part}"
|
|
||||||
ref = ref[part]
|
|
||||||
break if not ref
|
|
||||||
emit(path[1..], key) if ref
|
|
||||||
return
|
return
|
||||||
|
|
||||||
reduce = (k, v) ->
|
reduce = (k, v) ->
|
||||||
@@ -144,8 +151,7 @@ compileAliases = (callback) ->
|
|||||||
ar.push(p)
|
ar.push(p)
|
||||||
|
|
||||||
if isStatic
|
if isStatic
|
||||||
if not aliases[alias]?
|
aliases[alias] ?= []
|
||||||
aliases[alias] = []
|
|
||||||
aliases[alias].push(k)
|
aliases[alias].push(k)
|
||||||
else
|
else
|
||||||
keys[k] = ar
|
keys[k] = ar
|
||||||
@@ -164,8 +170,7 @@ compileAliases = (callback) ->
|
|||||||
db.devicesCollection.mapReduce(map, reduce, options, (err, out) ->
|
db.devicesCollection.mapReduce(map, reduce, options, (err, out) ->
|
||||||
for o in out
|
for o in out
|
||||||
alias = config.PARAMETERS[o.value].alias
|
alias = config.PARAMETERS[o.value].alias
|
||||||
if not aliases[alias]?
|
aliases[alias] ?= []
|
||||||
aliases[alias] = []
|
|
||||||
id = String(o._id)
|
id = String(o._id)
|
||||||
if id not in aliases[alias]
|
if id not in aliases[alias]
|
||||||
aliases[alias].push(id)
|
aliases[alias].push(id)
|
||||||
@@ -173,6 +178,7 @@ compileAliases = (callback) ->
|
|||||||
if ++counter == batches.length
|
if ++counter == batches.length
|
||||||
callback(err, aliases, config.ALIASES_CACHE)
|
callback(err, aliases, config.ALIASES_CACHE)
|
||||||
)
|
)
|
||||||
|
return
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user