// XXX query.change_action() should become deprecated
update_query = query.clone();
update_query.action = 'update';
+ update_query.fields = [];
update_query.analyzed_query.action = 'update';
update_query.params = {};
update_query_ext = new QueryExt(update_query);
default_set = (default_set === undefined) ? STATE_SET_OUT : default_set;
var self = this;
- var query_ext = this.find_analyzed_query_ext(query_uuid);
- var record_key = manifold.metadata.get_key(query_ext.query.object);
+ var key, object, query_ext, record_key;
+
+ query_ext = this.find_analyzed_query_ext(query_uuid);
+ object = query_ext.query.object;
+ if (object.indexOf(':') != -1) {
+ object = object.split(':')[1];
+ }
+ record_key = manifold.metadata.get_key(object);
+
+ // ["start_time", "resource", "end_time"]
+ // ["urn"]
+
$.each(records, function(i, record) {
- var key = manifold.metadata.get_key(query_ext.query.object);
- // ["start_time", "resource", "end_time"]
- // ["urn"]
+ //var key = manifold.metadata.get_key(query_ext.query.object);
var record_key_value = manifold.record_get_value(record, record_key);
query_ext.records.put(record_key_value, record);
this.iter_records(query_uuid, function(record_key, record) {
var is_reserved, is_pending, in_set, is_unconfigured;
+
+ /* By default, a record is visible unless a filter says the opposite */
var visible = true;
var record_state = manifold.query_store.get_record_state(query_uuid, record_key, STATE_SET);
if (op == '=' || op == '==') {
if ( col_value != value || col_value==null || col_value=="" || col_value=="n/a")
visible = false;
+
}else if (op == 'included') {
+ /* By default, the filter returns false unless the record
+ * field match at least one value of the included statement
+ */
+ visible = false;
$.each(value, function(i,x) {
if(x == col_value){
visible = true;
return false; // ~ break
- }else{
- visible = false;
}
});
}else if (op == '!=') {
});
var end = new Date().getTime();
- console.log("APPLY FILTERS took", end - start, "ms");
+ console.log("APPLY FILTERS [", filters, "] took", end - start, "ms");
}
} else {
console.log('Unknown field');
}
+ // FIX if the record contains a string instead of a key:value
+ // example: select resource, slice_hrn from slice where slice_hrn=='xxx'
+ // Result will be {slice_hrn:'xxx', resource:'urn+zzz'}
+ // We don't have this resource:{urn:'urn+zzz'}
+ } else if(typeof(record) === 'string'){
+ return record;
} else {
return record[fields];
}
switch (this_type) {
case TYPE_VALUE:
case TYPE_LIST_OF_VALUES:
+ case TYPE_LIST_OF_RECORDS:
if (this_value != other_value)
return false;
break;
if (!(_record_equals(this_value, other_value, key_fields)))
return false;
break;
+ /*
+ XXX WARNING = disabled for OpenFlow plugin !!!
+
case TYPE_LIST_OF_RECORDS:
if (this_value.length != other_value.length)
return false;
if (!(_record_equals(this_value[j], other_value[j], key_fields)))
return false;
break;
+ */
}
}
return true;
var query_ext = manifold.query_store.find_query_ext(query.query_uuid);
query_ext.query_state = QUERY_STATE_INPROGRESS;
- var query_json = JSON.stringify(query);
+ /*
+ If the Query object concerns SFA AM objects, iterate on each AM platform
+ Loop per platform, allows a progressive loading per AM platform
+ Update is run on all platforms at the same time to get a final answer, we don't manage partial answers yet...
+ */
+ // Removed slice from the per platform query - it's quick enough...
+ if((query.object == 'resource' || query.object == 'lease') && query.action != "update"){
+ var obj = query.object;
+ $.post("/rest/platform/", function( data ) {
+ $.each(data, function(index, p) {
+ query.object = p.platform+":"+obj;
+ var query_json = JSON.stringify(query);
+
+ // Inform plugins about the progress
+ query.iter_subqueries(function (sq) {
+ var sq_query_ext = manifold.query_store.find_analyzed_query_ext(sq.query_uuid);
+ sq_query_ext.query_state = QUERY_STATE_INPROGRESS;
+ manifold.raise_record_event(sq.query_uuid, IN_PROGRESS);
+ });
- // Inform plugins about the progress
- query.iter_subqueries(function (sq) {
- var sq_query_ext = manifold.query_store.find_analyzed_query_ext(sq.query_uuid);
- sq_query_ext.query_state = QUERY_STATE_INPROGRESS;
+ $.post(manifold.proxy_url, {'json': query_json} , manifold.success_closure(query, null, callback));
- manifold.raise_record_event(sq.query_uuid, IN_PROGRESS);
- });
+ });
+ });
+ }else{
+ var query_json = JSON.stringify(query);
- $.post(manifold.proxy_url, {'json': query_json} , manifold.success_closure(query, null, callback));
+ // Inform plugins about the progress
+ query.iter_subqueries(function (sq) {
+ var sq_query_ext = manifold.query_store.find_analyzed_query_ext(sq.query_uuid);
+ sq_query_ext.query_state = QUERY_STATE_INPROGRESS;
+ manifold.raise_record_event(sq.query_uuid, IN_PROGRESS);
+ });
+
+ $.post(manifold.proxy_url, {'json': query_json} , manifold.success_closure(query, null, callback));
+
+ }
},
// XXX DEPRECATED
// Has it a domain query, and has it completed ?
$.each(records, function(i, record) {
var key = manifold.metadata.get_key(query.object);
- var record_key = manifold.record_get_value(record, key);
+ if ( typeof record === "string" ){
+ var record_key = record;
+ }else{
+ var record_key = manifold.record_get_value(record, key);
+ }
manifold.query_store.set_record_state(query.query_uuid, record_key, STATE_SET, STATE_SET_IN);
});
make_record: function(object, record)
{
// To make an object a record, we just add the hash function
- var key = manifold.metadata.get_key(object);
+ var key, new_object;
+
+ if (object.indexOf(':') != -1) {
+ new_object = object.split(':')[1];
+ } else {
+ new_object = object;
+ }
+
+ key = manifold.metadata.get_key(new_object);
+ if (!key){
+ console.log("object type: " + new_object + " has no key");
+ console.log(record);
+ return;
+ }
record.hashCode = manifold.record_hashcode(key.sort());
record.equals = manifold.record_equals(key);
case TYPE_LIST_OF_VALUES: // XXX Until fixed
case TYPE_LIST_OF_RECORDS:
var key, new_state, cur_query_uuid;
-
- cur_query_uuid = query.analyzed_query.subqueries[field].query_uuid;
+ if($.inArray(field,Object.keys(query.analyzed_query.subqueries)) > -1){
+ cur_query_uuid = query.analyzed_query.subqueries[field].query_uuid;
+ }
// example: slice.resource
// - update_query_orig.params.resource = resources in slice before update
var query_ext = manifold.query_store.find_query_ext(query.query_uuid);
query_ext.query_state = QUERY_STATE_DONE;
+ var tmp_query = manifold.query_store.find_analyzed_query(query.query_uuid);
+ manifold.publish_result_rec(tmp_query, records);
// Send DONE message to plugins
query.iter_subqueries(function(sq, data, parent_query) {
break;
case RUN_UPDATE:
+ query_ext.main_query_ext.update_query_ext.query.fields = [];
manifold.run_query(query_ext.main_query_ext.update_query_ext.query);
break;