X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=manifold%2Fjs%2Fmanifold-query.js;h=77925c4e6dd8d0f508f6d27a5f6ff374d9ee9a45;hb=4c7212bd04ddb65511c42aac5bae6fc3044cd846;hp=2a1a162f29f903a2fdd2eecfa79c2dda2eedf6ef;hpb=401546ae932e7f2d120ec210c13e2db1ce754cc7;p=myslice.git diff --git a/manifold/js/manifold-query.js b/manifold/js/manifold-query.js index 2a1a162f..77925c4e 100644 --- a/manifold/js/manifold-query.js +++ b/manifold/js/manifold-query.js @@ -1,8 +1,8 @@ -function ManifoldQuery(action, subject, timestamp, filters, params, fields, unique, query_uuid, aq, sq) { +function ManifoldQuery(action, object, timestamp, filters, params, fields, unique, query_uuid, aq, sq) { // get, update, delete, create var action; // slice, user, network... - var subject; + var object; // timestamp, now, latest(cache) : date of the results queried var timestamp; // key(field),op(=<>),value @@ -23,17 +23,17 @@ function ManifoldQuery(action, subject, timestamp, filters, params, fields, uniq /*------------------------------------------------------------- Query properties are SQL like : --------------------------------------------------------------- -SELECT fields FROM subject WHERE filter; -UPDATE subject SET field=value WHERE filter; / returns SELECT -DELETE FROM subject WHERE filter -INSERT INTO subject VALUES(field=value) +SELECT fields FROM object WHERE filter; +UPDATE object SET field=value WHERE filter; / returns SELECT +DELETE FROM object WHERE filter +INSERT INTO object VALUES(field=value) -------------------------------------------------------------*/ this.__repr = function () { - res = "ManyfoldQuery "; + res = "ManifoldQuery "; res += " id=" + this.query_uuid; res += " a=" + this.action; - res += " s=" + this.subject; + res += " o=" + this.object; res += " ts=" + this.timestamp; res += " flts=" + this.filters; res += " flds=" + this.fields; @@ -74,7 +74,7 @@ INSERT INTO subject VALUES(field=value) } // FIXME These functions computing diff's between queries are meant to be shared - this.diff_fields = function (otherQuery) { + this.diff_fields = function(otherQuery) { var f1 = this.fields; var f2 = otherQuery.fields; @@ -87,7 +87,7 @@ INSERT INTO subject VALUES(field=value) } // FIXME Modify filter to filters - this.diff_filter = function (otherQuery) { + this.diff_filter = function(otherQuery) { var f1 = this.filters; var f2 = otherQuery.filters; @@ -98,9 +98,28 @@ INSERT INTO subject VALUES(field=value) return {'added':added, 'removed':removed}; } + + // Callaback received 3 parameters: query, data, parent_query + this.iter_subqueries = function(callback, data) + { + rec = function(query, callback, data, parent_query) { + jQuery.each(query.subqueries, function(object, subquery) { + rec(subquery, callback, data, query); + }); + callback(query, data, parent_query); + }; + + if (this.analyzed_query !== undefined) + query = this.analyzed_query; + else + query = this; + + rec(query, callback, data, null); + } + // we send queries as a json string now // this.as_POST = function() { -// return {'action': this.action, 'subject': this.subject, 'timestamp': this.timestamp, +// return {'action': this.action, 'object': this.object, 'timestamp': this.timestamp, // 'filters': this.filters, 'params': this.params, 'fields': this.fields}; // } this.analyze_subqueries = function() { @@ -108,7 +127,7 @@ INSERT INTO subject VALUES(field=value) var q = new ManifoldQuery(); q.query_uuid = this.query_uuid; q.action = this.action; - q.subject = this.subject; + q.object = this.object; q.timestamp = this.timestamp; /* Filters */ @@ -118,15 +137,15 @@ INSERT INTO subject VALUES(field=value) var v = filter[2]; var pos = k.indexOf('.'); if (pos != -1) { - var subject = k.substr(0, pos); + var object = k.substr(0, pos); var field = k.substr(pos+1); - if (!q.subqueries[subject]) { - q.subqueries[subject] = new ManifoldQuery(); - q.subqueries[subject].action = q.action; - q.subqueries[subject].subject = subject; - q.subqueries[subject].timestamp = q.timestamp; + if (!q.subqueries[object]) { + q.subqueries[object] = new ManifoldQuery(); + q.subqueries[object].action = q.action; + q.subqueries[object].object = object; + q.subqueries[object].timestamp = q.timestamp; } - q.subqueries[subject].filters.push(Array(field, op, v)); + q.subqueries[object].filters.push(Array(field, op, v)); } else { q.filters.push(filter); } @@ -136,15 +155,15 @@ INSERT INTO subject VALUES(field=value) jQuery.each(this.params, function(param, value) { var pos = param.indexOf('.'); if (pos != -1) { - var subject = param.substr(0, pos); + var object = param.substr(0, pos); var field = param.substr(pos+1); - if (!q.subqueries[subject]) { - q.subqueries[subject] = new ManifoldQuery(); - q.subqueries[subject].action = q.action; - q.subqueries[subject].subject = subject; - q.subqueries[subject].timestamp = q.timestamp; + if (!q.subqueries[object]) { + q.subqueries[object] = new ManifoldQuery(); + q.subqueries[object].action = q.action; + q.subqueries[object].object = object; + q.subqueries[object].timestamp = q.timestamp; } - q.subqueries[subject].params[field] = value; + q.subqueries[object].params[field] = value; } else { q.params[field] = value; } @@ -154,15 +173,15 @@ INSERT INTO subject VALUES(field=value) jQuery.each(this.fields, function(i, v) { var pos = v.indexOf('.'); if (pos != -1) { - var subject = v.substr(0, pos); + var object = v.substr(0, pos); var field = v.substr(pos+1); - if (!q.subqueries[subject]) { - q.subqueries[subject] = new ManifoldQuery(); - q.subqueries[subject].action = q.action; - q.subqueries[subject].subject = subject; - q.subqueries[subject].timestamp = q.timestamp; + if (!q.subqueries[object]) { + q.subqueries[object] = new ManifoldQuery(); + q.subqueries[object].action = q.action; + q.subqueries[object].object = object; + q.subqueries[object].timestamp = q.timestamp; } - q.subqueries[subject].fields.push(field); + q.subqueries[object].fields.push(field); } else { q.fields.push(v); } @@ -176,10 +195,10 @@ INSERT INTO subject VALUES(field=value) else this.action = action; - if (typeof subject == "undefined") - this.subject = null; + if (typeof object == "undefined") + this.object = null; else - this.subject = subject; + this.object = object; if (typeof timestamp == "undefined") this.timestamp = "now";