'use strict';
|
|
const Aspect = require('./operation').Aspect;
|
const defineAspects = require('./operation').defineAspects;
|
const loadCursor = require('../dynamic_loaders').loadCursor;
|
const OperationBase = require('./operation').OperationBase;
|
const nextObject = require('./common_functions').nextObject;
|
|
class HasNextOperation extends OperationBase {
|
constructor(cursor) {
|
super();
|
|
this.cursor = cursor;
|
}
|
|
execute(callback) {
|
const cursor = this.cursor;
|
let Cursor = loadCursor();
|
|
if (cursor.s.currentDoc) {
|
return callback(null, true);
|
}
|
|
if (cursor.isNotified()) {
|
return callback(null, false);
|
}
|
|
nextObject(cursor, (err, doc) => {
|
if (err) return callback(err, null);
|
if (cursor.s.state === Cursor.CLOSED || cursor.isDead()) return callback(null, false);
|
if (!doc) return callback(null, false);
|
cursor.s.currentDoc = doc;
|
callback(null, true);
|
});
|
}
|
}
|
|
defineAspects(HasNextOperation, Aspect.SKIP_SESSION);
|
|
module.exports = HasNextOperation;
|