+/* Query status */
+var STATUS_NONE = 500; // Query has not been started yet
+var STATUS_GET_IN_PROGRESS = 501; // Query has been sent, no result has been received
+var STATUS_GET_RECEIVED = 502; // Success
+var STATUS_GET_ERROR = 503; // Error
+var STATUS_UPDATE_PENDING = 504;
+var STATUS_UPDATE_IN_PROGRESS = 505;
+var STATUS_UPDATE_RECEIVED = 506;
+var STATUS_UPDATE_ERROR = 507;
+// outdated ?
+
+// A structure for storing queries
+
+
+
+function QueryExt(query, parent_query, main_query) {
+
+ /* Constructor */
+ if (typeof query == "undefined")
+ throw "Must pass a query in QueryExt constructor";
+ this.query = query
+ this.parent_query = (typeof parent_query == "undefined") ? false : parent_query
+ this.main_query = (typeof main_query == "undefined") ? false : main_query
+
+ this.status = null;
+ this.results = null;
+ this.update_query = null; // null unless we are a main_query (aka parent_query == null); only main_query_fields can be updated...
+}
+
+function QueryStore() {
+
+ this.main_queries = {};
+ this.analyzed_queries = {};
+
+ /* Insertion */
+
+ this.insert = function(query)
+ {
+ if (query.analyzed_query == null) {
+ query.analyze_subqueries();
+ }
+
+ query_ext = new QueryExt(query, null, null)
+ manifold.query_store.main_queries[query.query_uuid] = query_ext;
+
+ // We also need to insert all queries and subqueries from the analyzed_query
+ query.iter_subqueries(function(sq, data, parent_query) {
+ if (parent_query)
+ parent_query_ext = manifold.query_store.find_analyzed_query_ext(parent_query.query_uuid);
+ else
+ parent_query_ext = null;
+ sq_ext = QueryExt(sq, parent_query_ext, query_ext)
+ manifold.query_store.analyzed_queries[sq.query_uuid] = sq_ext;
+ });
+ }
+
+ /* Searching */
+
+ this.find_query_ext = function(query_uuid)
+ {
+ return this.main_queries[query_uuid];
+ }
+
+ this.find_query = function(query_uuid)
+ {
+ return this.find_query_ext(query_uuid).query;
+ }
+
+ this.find_analyzed_query_ext = function(query_uuid)
+ {
+ return this.analyzed_queries[query_uuid];
+ }
+
+ this.find_analyzed_query = function(query_uuid)
+ {
+ return this.find_analyzed_query_ext(query_uuid).query;
+ }
+}
+