var FIELD_REQUEST_CHANGE = 301;
var FIELD_REQUEST_ADD = 302;
var FIELD_REQUEST_REMOVE = 303;
-var FIELD_REQUEST_RESET = 304;
+var FIELD_REQUEST_ADD_RESET = 304;
+var FIELD_REQUEST_REMOVE_RESET = 305;
// status
var FIELD_REQUEST_PENDING = 401;
var FIELD_REQUEST_SUCCESS = 402;
manifold.publish_result(query, result);
},
- process_get_query_records: function(query, records)
+ setup_update_query: function(query, records)
{
- /* This consists in managing the update query */
-
// We don't prepare an update query if the result has more than 1 entry
- if (records.length == 1) {
- var query_ext = manifold.query_store.find_query_ext(query.query_uuid);
-
- var record = records[0];
-
- var update_query_ext = query_ext.update_query_ext;
- var update_query = update_query_ext.query;
- var update_query_ext = query_ext.update_query_ext;
- var update_query_orig = query_ext.update_query_orig_ext.query;
-
- // Testing whether the result has subqueries (one level deep only)
- // iif the query has subqueries
- var count = 0;
- var obj = query.analyzed_query.subqueries;
- for (method in obj) {
- if (obj.hasOwnProperty(method)) {
- var key = manifold.metadata.get_key(method);
- if (!key)
- continue;
- if (key.length > 1)
- continue;
- key = key[0];
- var sq_keys = [];
- var subrecords = record[method];
- if (!subrecords)
- continue
- $.each(subrecords, function (i, subrecord) {
- sq_keys.push(subrecord[key]);
- });
- update_query.params[method] = sq_keys;
- update_query_orig.params[method] = sq_keys.slice();
- count++;
- }
- }
+ if (records.length != 1)
+ return;
+ var query_ext = manifold.query_store.find_query_ext(query.query_uuid);
+
+ var record = records[0];
- if (count > 0) {
- update_query_ext.disabled = false;
- update_query_orig_ext.disabled = false;
+ var update_query_ext = query_ext.update_query_ext;
+ var update_query = update_query_ext.query;
+ var update_query_ext = query_ext.update_query_ext;
+ var update_query_orig = query_ext.update_query_orig_ext.query;
+
+ // Testing whether the result has subqueries (one level deep only)
+ // iif the query has subqueries
+ var count = 0;
+ var obj = query.analyzed_query.subqueries;
+ for (method in obj) {
+ if (obj.hasOwnProperty(method)) {
+ var key = manifold.metadata.get_key(method);
+ if (!key)
+ continue;
+ if (key.length > 1)
+ continue;
+ key = key[0];
+ var sq_keys = [];
+ var subrecords = record[method];
+ if (!subrecords)
+ continue
+ $.each(subrecords, function (i, subrecord) {
+ sq_keys.push(subrecord[key]);
+ });
+ update_query.params[method] = sq_keys;
+ update_query_orig.params[method] = sq_keys.slice();
+ count++;
}
}
- /* Publish results */
- // NOTE: this is redundant only for Get queries
+ if (count > 0) {
+ update_query_ext.disabled = false;
+ update_query_orig_ext.disabled = false;
+ }
+ },
+
+ process_get_query_records: function(query, records)
+ {
+ this.setup_update_query(query, records);
+
+ /* Publish full results */
tmp_query = manifold.find_query(query.query_uuid);
manifold.publish_result_rec(tmp_query.analyzed_query, records);
},
break;
}
}
+
+ // XXX Now we need to adapt 'update' and 'update_orig' queries as if we had done a get
+ this.setup_update_query(query, records);
},
process_query_records: function(query, records)
break;
case FIELD_REQUEST_ADD:
if ($.inArray(value.value, update_query_orig.params[value.key]) != -1)
- value.request = FIELD_REQUEST_RESET;
+ value.request = FIELD_REQUEST_ADD_RESET;
update_query.params[value.key].push(value.value);
break;
case FIELD_REQUEST_REMOVE:
if ($.inArray(value.value, update_query_orig.params[value.key]) == -1)
- value.request = FIELD_REQUEST_RESET;
+ value.request = FIELD_REQUEST_REMOVE_RESET;
var arr = update_query.params[value.key];
arr = $.grep(arr, function(x) { return x != value.value; });
update_query.params[value.key] = arr;
break;
- case FIELD_REQUEST_RESET:
+ case FIELD_REQUEST_ADD_RESET:
+ case FIELD_REQUEST_REMOVE_RESET:
// XXX We would need to keep track of the original query
throw "Not implemented";
break;
manifold.raise_record_event(query_uuid, event_type, value);
// b) subqueries eventually (dot in the key)
+ // Let's unfold
+ var path_array = value.key.split('.');
+ var value_key = value.key.split('.');
+
+ var cur_query = query;
+ if (cur_query.analyzed_query)
+ cur_query = cur_query.analyzed_query;
+ $.each(path_array, function(i, method) {
+ cur_query = cur_query.subqueries[method];
+ value_key.shift(); // XXX check that method is indeed shifted
+ });
+ value.key = value_key;
+
+ manifold.raise_record_event(cur_query.query_uuid, event_type, value);
+
// XXX make this DOT a global variable... could be '/'
break;