Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/now-and-later/LICENSE b/node_modules/now-and-later/LICENSE
new file mode 100644
index 0000000..0b2955a
--- /dev/null
+++ b/node_modules/now-and-later/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Blaine Bublitz, Eric Schoffstall and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/now-and-later/README.md b/node_modules/now-and-later/README.md
new file mode 100644
index 0000000..15486a8
--- /dev/null
+++ b/node_modules/now-and-later/README.md
@@ -0,0 +1,203 @@
+<p align="center">
+  <a href="http://gulpjs.com">
+    <img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
+  </a>
+</p>
+
+# now-and-later
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Map over an array or object of values in parallel or series, passing each through the async iterator, with optional lifecycle hooks.
+
+## Usage
+
+```js
+var nal = require('now-and-later');
+
+function iterator(value, key, cb){
+  // called with each value in sequence
+  // also passes the key
+  cb(null, value * 2)
+}
+
+function create(value, key){
+  // called at the beginning of every iteration
+  // return a storage object to be passed to each lifecycle method
+  return { key: key, value: value };
+}
+
+function before(storage){
+  // called before the iterator function of every iteration
+  // receives the storage returned from `create`
+}
+
+function after(result, storage){
+  // called after a success occurs in the iterator function of any iteration
+  // receives the `result` of the iterator and the storage returned from `create`
+}
+
+function error(error, storage){
+  // called after an error occurs in the iterator function of any iteration
+  // receives the `error` of the iterator and the storage returned from `create`
+}
+
+function done(error, results) {
+  // called after all iterations complete or an error occurs in an iterator
+  // receives an `error` if one occurred and all results (or partial results upon error) of the iterators
+}
+
+/*
+  Calling mapSeries with an object can't guarantee order
+  It uses Object.keys to get an order
+  It is better to use an array if order must be guaranteed
+ */
+nal.mapSeries([1, 2, 3], iterator, {
+  create: create,
+  before: before,
+  after: after,
+  error: error
+}, done);
+
+nal.map({
+  iter1: 1,
+  iter2: 2
+}, iterator, {
+  create: create,
+  before: before,
+  after: after,
+  error: error
+}, done);
+```
+
+## API
+
+### `map(values, iterator[, extensions][, callback])`
+
+Takes an object or array of `values` and an `iterator` function to execute with each value.
+Optionally, takes an `extensions` object and a `callback` function that is called upon completion of the iterations.
+
+All iterations run in parallel.
+
+#### `values`
+
+An array or object of values to iterate over.
+
+If `values` is an array, iterations are started in order by index. If `values` is an object, iterations are started in order by the order returned by `Object.keys` (order is not guaranteed).
+
+If `values` is an array, the results of each iteration will be mapped to an array. If `values` is an object, the results of each iteration will be mapped to an object with corresponding keys.
+
+#### `iterator(value, key, done)`
+
+An async function called per iteration. All iterations are run in parallel.
+
+The `iterator` function is called once with each `value`, `key` and a function (`done(error, result)`) to call when the async work is complete.
+
+If `done` is passed an error as the first argument, the iteration will fail and the sequence will be ended; however, any iterations in progress will still complete. If `done` is passed a `result` value as the second argument, it will be added to the final results array or object.
+
+#### `extensions`
+
+The `extensions` object is used for specifying functions that give insight into the lifecycle of each iteration. The possible extension points are `create`, `before`, `after` and `error`. If an extension point is not specified, it defaults to a no-op function.
+
+##### `extensions.create(value, key)`
+
+Called at the very beginning of each iteration with the `value` being iterated and the `key` from the array or object. If `create` returns a value (`storage`), it is passed to the `before`, `after` and `error` extension points.
+
+If a value is not returned, an empty object is used as `storage` for each other extension point.
+
+This is useful for tracking information across an iteration.
+
+##### `extensions.before(storage)`
+
+Called immediately before each iteration with the `storage` value returned from the `create` extension point.
+
+##### `extensions.after(result, storage)`
+
+Called immediately after each iteration with the `result` of the iteration and the `storage` value returned from the `create` extension point.
+
+##### `extensions.error(error, storage)`
+
+Called immediately after a failed iteration with the `error` of the iteration and the `storage` value returned from the `create` extension point.
+
+#### `callback(error, results)`
+
+A function that is called after all iterations have completed or one iteration has errored.
+
+If all iterations completed successfully, the `error` argument will be empty and the `results` will be a mapping of the `iterator` results.
+
+If an iteration errored, the `error` argument will be passed from that iteration and the `results` will be whatever partial results had completed successfully before the error occurred.
+
+### `mapSeries(values, iterator[, extensions][, callback])`
+
+Takes an object or array of `values` and an `iterator` function to execute with each value.
+Optionally, takes an `extensions` object and a `callback` function that is called upon completion of the iterations.
+
+All iterations run in serial.
+
+#### `values`
+
+An array or object of values to iterate over.
+
+If `values` is an array, iterations are started in order by index. If `values` is an object, iterations are started in order by the order returned by `Object.keys` (order is not guaranteed).
+
+If `values` is an array, the results of each iteration will be mapped to an array. If `values` is an object, the results of each iteration will be mapped to an object with corresponding keys.
+
+#### `iterator(value, key, done)`
+
+An async function called per iteration. All iterations are run in serial.
+
+The `iterator` function is called once with each `value`, `key` and a function (`done(error, result)`) to call when the async work is complete.
+
+If `done` is passed an error as the first argument, the iteration will fail and the sequence will be ended without executing any more iterations. If `done` is passed a `result` value as the second argument, it will be added to the final results array or object.
+
+#### `extensions`
+
+The `extensions` object is used for specifying functions that give insight into the lifecycle of each iteration. The possible extension points are `create`, `before`, `after` and `error`. If an extension point is not specified, it defaults to a no-op function.
+
+##### `extensions.create(value, key)`
+
+Called at the very beginning of each iteration with the `value` being iterated and the `key` from the array or object. If `create` returns a value (`storage`), it is passed to the `before`, `after` and `error` extension points.
+
+If a value is not returned, an empty object is used as `storage` for each other extension point.
+
+This is useful for tracking information across an iteration.
+
+##### `extensions.before(storage)`
+
+Called immediately before each iteration with the `storage` value returned from the `create` extension point.
+
+##### `extensions.after(result, storage)`
+
+Called immediately after each iteration with the `result` of the iteration and the `storage` value returned from the `create` extension point.
+
+##### `extensions.error(error, storage)`
+
+Called immediately after a failed iteration with the `error` of the iteration and the `storage` value returned from the `create` extension point.
+
+#### `callback(error, results)`
+
+A function that is called after all iterations have completed or one iteration has errored.
+
+If all iterations completed successfully, the `error` argument will be empty and the `results` will be a mapping of the `iterator` results.
+
+If an iteration errored, the `error` argument will be passed from that iteration and the `results` will be whatever partial results had completed successfully before the error occurred.
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/now-and-later.svg
+[npm-url]: https://www.npmjs.com/package/now-and-later
+[npm-image]: http://img.shields.io/npm/v/now-and-later.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/now-and-later
+[travis-image]: http://img.shields.io/travis/gulpjs/now-and-later.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/now-and-later
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/now-and-later.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/now-and-later
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/now-and-later/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/now-and-later/index.js b/node_modules/now-and-later/index.js
new file mode 100644
index 0000000..692f0b7
--- /dev/null
+++ b/node_modules/now-and-later/index.js
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = {
+  map: require('./lib/map'),
+  mapSeries: require('./lib/mapSeries'),
+};
diff --git a/node_modules/now-and-later/lib/helpers.js b/node_modules/now-and-later/lib/helpers.js
new file mode 100644
index 0000000..b0e913c
--- /dev/null
+++ b/node_modules/now-and-later/lib/helpers.js
@@ -0,0 +1,41 @@
+'use strict';
+
+function noop() {}
+
+var defaultExts = {
+  create: noop,
+  before: noop,
+  after: noop,
+  error: noop,
+};
+
+function defaultExtensions(extensions) {
+  extensions = extensions || {};
+  return {
+    create: extensions.create || defaultExts.create,
+    before: extensions.before || defaultExts.before,
+    after: extensions.after || defaultExts.after,
+    error: extensions.error || defaultExts.error,
+  };
+}
+
+function initializeResults(values) {
+  var keys = Object.keys(values);
+  var results = Array.isArray(values) ? [] : {};
+
+  var idx = 0;
+  var length = keys.length;
+
+  for (idx = 0; idx < length; idx++) {
+    var key = keys[idx];
+    results[key] = undefined;
+  }
+
+  return results;
+}
+
+module.exports = {
+  defaultExtensions: defaultExtensions,
+  noop: noop,
+  initializeResults: initializeResults,
+};
diff --git a/node_modules/now-and-later/lib/map.js b/node_modules/now-and-later/lib/map.js
new file mode 100644
index 0000000..cd278fe
--- /dev/null
+++ b/node_modules/now-and-later/lib/map.js
@@ -0,0 +1,63 @@
+'use strict';
+
+var once = require('once');
+
+var helpers = require('./helpers');
+
+function map(values, iterator, extensions, done) {
+  // Allow for extensions to not be specified
+  if (typeof extensions === 'function') {
+    done = extensions;
+    extensions = {};
+  }
+
+  // Handle no callback case
+  if (typeof done !== 'function') {
+    done = helpers.noop;
+  }
+
+  done = once(done);
+
+  // Will throw if non-object
+  var keys = Object.keys(values);
+  var length = keys.length;
+  var count = length;
+  var idx = 0;
+  // Return the same type as passed in
+  var results = helpers.initializeResults(values);
+
+  var exts = helpers.defaultExtensions(extensions);
+
+  if (length === 0) {
+    return done(null, results);
+  }
+
+  for (idx = 0; idx < length; idx++) {
+    var key = keys[idx];
+    next(key);
+  }
+
+  function next(key) {
+    var value = values[key];
+
+    var storage = exts.create(value, key) || {};
+
+    exts.before(storage);
+    iterator(value, key, once(handler));
+
+    function handler(err, result) {
+      if (err) {
+        exts.error(err, storage);
+        return done(err, results);
+      }
+
+      exts.after(result, storage);
+      results[key] = result;
+      if (--count === 0) {
+        done(err, results);
+      }
+    }
+  }
+}
+
+module.exports = map;
diff --git a/node_modules/now-and-later/lib/mapSeries.js b/node_modules/now-and-later/lib/mapSeries.js
new file mode 100644
index 0000000..02cce77
--- /dev/null
+++ b/node_modules/now-and-later/lib/mapSeries.js
@@ -0,0 +1,63 @@
+'use strict';
+
+var once = require('once');
+
+var helpers = require('./helpers');
+
+function mapSeries(values, iterator, extensions, done) {
+  // Allow for extensions to not be specified
+  if (typeof extensions === 'function') {
+    done = extensions;
+    extensions = {};
+  }
+
+  // Handle no callback case
+  if (typeof done !== 'function') {
+    done = helpers.noop;
+  }
+
+  done = once(done);
+
+  // Will throw if non-object
+  var keys = Object.keys(values);
+  var length = keys.length;
+  var idx = 0;
+  // Return the same type as passed in
+  var results = helpers.initializeResults(values);
+
+  var exts = helpers.defaultExtensions(extensions);
+
+  if (length === 0) {
+    return done(null, results);
+  }
+
+  var key = keys[idx];
+  next(key);
+
+  function next(key) {
+    var value = values[key];
+
+    var storage = exts.create(value, key) || {};
+
+    exts.before(storage);
+    iterator(value, key, once(handler));
+
+    function handler(err, result) {
+      if (err) {
+        exts.error(err, storage);
+        return done(err, results);
+      }
+
+      exts.after(result, storage);
+      results[key] = result;
+
+      if (++idx >= length) {
+        done(err, results);
+      } else {
+        next(keys[idx]);
+      }
+    }
+  }
+}
+
+module.exports = mapSeries;
diff --git a/node_modules/now-and-later/package.json b/node_modules/now-and-later/package.json
new file mode 100644
index 0000000..dbf9ff1
--- /dev/null
+++ b/node_modules/now-and-later/package.json
@@ -0,0 +1,93 @@
+{
+  "_from": "now-and-later@^2.0.0",
+  "_id": "now-and-later@2.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+  "_location": "/now-and-later",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "now-and-later@^2.0.0",
+    "name": "now-and-later",
+    "escapedName": "now-and-later",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/vinyl-sourcemap"
+  ],
+  "_resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+  "_shasum": "8e579c8685764a7cc02cb680380e94f43ccb1f7c",
+  "_spec": "now-and-later@^2.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\vinyl-sourcemap",
+  "author": {
+    "name": "Gulp Team",
+    "email": "team@gulpjs.com",
+    "url": "http://gulpjs.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/gulpjs/now-and-later/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "once": "^1.3.2"
+  },
+  "deprecated": false,
+  "description": "Map over an array or object of values in parallel or series, passing each through the async iterator, with optional lifecycle hooks.",
+  "devDependencies": {
+    "eslint": "^1.7.3",
+    "eslint-config-gulp": "^2.0.0",
+    "expect": "^1.19.0",
+    "istanbul": "^0.4.3",
+    "istanbul-coveralls": "^1.0.3",
+    "jscs": "^2.3.5",
+    "jscs-preset-gulp": "^1.0.0",
+    "mocha": "^2.4.5"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "index.js",
+    "lib",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/gulpjs/now-and-later#readme",
+  "keywords": [
+    "async",
+    "async.js",
+    "map",
+    "control",
+    "flow",
+    "extension",
+    "tracing",
+    "debug",
+    "aop",
+    "aspect",
+    "timing",
+    "tracing"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "now-and-later",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gulpjs/now-and-later.git"
+  },
+  "scripts": {
+    "cover": "istanbul cover _mocha --report lcovonly",
+    "coveralls": "npm run cover && istanbul-coveralls",
+    "lint": "eslint . && jscs index.js lib/ test/",
+    "pretest": "npm run lint",
+    "test": "mocha --async-only"
+  },
+  "version": "2.0.1"
+}