Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/glob-stream/readable.js b/node_modules/glob-stream/readable.js
new file mode 100644
index 0000000..36cf7b6
--- /dev/null
+++ b/node_modules/glob-stream/readable.js
@@ -0,0 +1,117 @@
+'use strict';
+
+var inherits = require('util').inherits;
+
+var glob = require('glob');
+var extend = require('extend');
+var Readable = require('readable-stream').Readable;
+var globParent = require('glob-parent');
+var toAbsoluteGlob = require('to-absolute-glob');
+var removeTrailingSeparator = require('remove-trailing-separator');
+
+var globErrMessage1 = 'File not found with singular glob: ';
+var globErrMessage2 = ' (if this was purposeful, use `allowEmpty` option)';
+
+function getBasePath(ourGlob, opt) {
+  return globParent(toAbsoluteGlob(ourGlob, opt));
+}
+
+function globIsSingular(glob) {
+  var globSet = glob.minimatch.set;
+  if (globSet.length !== 1) {
+    return false;
+  }
+
+  return globSet[0].every(function isString(value) {
+    return typeof value === 'string';
+  });
+}
+
+function GlobStream(ourGlob, negatives, opt) {
+  if (!(this instanceof GlobStream)) {
+    return new GlobStream(ourGlob, negatives, opt);
+  }
+
+  var ourOpt = extend({}, opt);
+
+  Readable.call(this, {
+    objectMode: true,
+    highWaterMark: ourOpt.highWaterMark || 16,
+  });
+
+  // Delete `highWaterMark` after inheriting from Readable
+  delete ourOpt.highWaterMark;
+
+  var self = this;
+
+  function resolveNegatives(negative) {
+    return toAbsoluteGlob(negative, ourOpt);
+  }
+
+  var ourNegatives = negatives.map(resolveNegatives);
+  ourOpt.ignore = ourNegatives;
+
+  var cwd = ourOpt.cwd;
+  var allowEmpty = ourOpt.allowEmpty || false;
+
+  // Extract base path from glob
+  var basePath = ourOpt.base || getBasePath(ourGlob, ourOpt);
+
+  // Remove path relativity to make globs make sense
+  ourGlob = toAbsoluteGlob(ourGlob, ourOpt);
+  // Delete `root` after all resolving done
+  delete ourOpt.root;
+
+  var globber = new glob.Glob(ourGlob, ourOpt);
+  this._globber = globber;
+
+  var found = false;
+
+  globber.on('match', function(filepath) {
+    found = true;
+    var obj = {
+      cwd: cwd,
+      base: basePath,
+      path: removeTrailingSeparator(filepath),
+    };
+    if (!self.push(obj)) {
+      globber.pause();
+    }
+  });
+
+  globber.once('end', function() {
+    if (allowEmpty !== true && !found && globIsSingular(globber)) {
+      var err = new Error(globErrMessage1 + ourGlob + globErrMessage2);
+
+      return self.destroy(err);
+    }
+
+    self.push(null);
+  });
+
+  function onError(err) {
+    self.destroy(err);
+  }
+
+  globber.once('error', onError);
+}
+inherits(GlobStream, Readable);
+
+GlobStream.prototype._read = function() {
+  this._globber.resume();
+};
+
+GlobStream.prototype.destroy = function(err) {
+  var self = this;
+
+  this._globber.abort();
+
+  process.nextTick(function() {
+    if (err) {
+      self.emit('error', err);
+    }
+    self.emit('close');
+  });
+};
+
+module.exports = GlobStream;