Просмотр исходного кода

clean up docHistory pack decoding

Brian Gough 11 лет назад
Родитель
Сommit
e47476369a
1 измененных файлов с 26 добавлено и 16 удалено
  1. 26 16
      services/track-changes/app/coffee/MongoManager.coffee

+ 26 - 16
services/track-changes/app/coffee/MongoManager.coffee

@@ -69,37 +69,47 @@ module.exports = MongoManager =
 			extraQuery[param] = {'$lt' : rangeQuery['$gte']}
 			extraQuery[param] = {'$lt' : rangeQuery['$gte']}
 		else if rangeQuery?['$gt']
 		else if rangeQuery?['$gt']
 			extraQuery[param] = {'$lte' : rangeQuery['$gt']}
 			extraQuery[param] = {'$lte' : rangeQuery['$gt']}
+		else
+			delete extraQuery[param]
 
 
 		filterFn = (item) ->
 		filterFn = (item) ->
-			#console.log 'filter', item, rangeQuery
 			return false if rangeQuery?['$gte']? && item[param] < rangeQuery['$gte']
 			return false if rangeQuery?['$gte']? && item[param] < rangeQuery['$gte']
 			return false if rangeQuery?['$lte']? && item[param] > rangeQuery['$lte']
 			return false if rangeQuery?['$lte']? && item[param] > rangeQuery['$lte']
 			return false if rangeQuery?['$lt']? && item[param] >= rangeQuery['$lt']
 			return false if rangeQuery?['$lt']? && item[param] >= rangeQuery['$lt']
 			return false if rangeQuery?['$gt']? && item[param] <= rangeQuery['$gt']
 			return false if rangeQuery?['$gt']? && item[param] <= rangeQuery['$gt']
-			#console.log 'accepted'
 			return true
 			return true
 
 
-		# need to support limit here
-			
-		cursor.toArray (err, updates) ->
-			console.log 'query=', query, 'UPDATES=', updates
-			all = MongoManager._unpackResults(updates).filter(filterFn)
-			if all.length == 0 
+		needMore = false
+		cursor.toArray (err, result) ->
+			unpackedSet = MongoManager._unpackResults(result)
+			updates = unpackedSet.filter(filterFn)
+			updates = updates.slice(0, limit) if limit?
+			last = if unpackedSet.length then unpackedSet[unpackedSet.length-1] else null
+			if limit? && updates.length == limit
+				needMore = false
+			else if extraQuery[param]? && last? && filterFn(last)
+				needMore = true
+			else if extraQuery[param]? && updates.length == 0
+				needMore = true
+			if needMore
 				# need an extra result set
 				# need an extra result set
-				console.log 'extraQuery', extraQuery
 				extra = db.docHistory
 				extra = db.docHistory
 					.find(extraQuery)
 					.find(extraQuery)
 					.sort(sort)
 					.sort(sort)
 					.limit(1)
 					.limit(1)
-				extra.toArray (err, updates2) ->
-					all2 = MongoManager._unpackResults(updates2).filter(filterFn)
-					console.log 'got extra', all2
-					callback err, all2
+				extra.toArray (err, result2) ->
+					if err?
+						return callback err, updates
+					else
+						extraSet = MongoManager._unpackResults(result2).filter(filterFn)
+						updates = updates.concat extraSet
+						updates = updates.slice(0, limit) if limit?
+						callback err, updates
 				return
 				return
 			if err?
 			if err?
-				callback err, updates
+				callback err, result
 			else
 			else
-				callback err, all
+				callback err, updates
 
 
 	_unpackResults: (updates) ->
 	_unpackResults: (updates) ->
 		result = []
 		result = []
@@ -121,7 +131,7 @@ module.exports = MongoManager =
 			item.project_id = project_id
 			item.project_id = project_id
 			item
 			item
 		return result.reverse()
 		return result.reverse()
-		
+
 	getDocUpdates:(doc_id, options = {}, callback = (error, updates) ->) ->
 	getDocUpdates:(doc_id, options = {}, callback = (error, updates) ->) ->
 		query = 
 		query = 
 			doc_id: ObjectId(doc_id.toString())
 			doc_id: ObjectId(doc_id.toString())