var emp = new StrelkiJS.IndexedArray();
emp.put({ id: "001", first_name: "John", last_name: "Smith", dep_id: "sales", address_id: "200" }); emp.put({ id: "002", first_name: "Ivan", last_name: "Krasonov", dep_id: "sales", address_id: "300" });
emp.createIndex("dep_id");
> emp.findIdsByIndex("dep_id","sales") < ["001", "002"]
emp.put({ id: "003", first_name: "George", last_name: "Clooney", dep_id: "hr", address_id: "400" }); emp.put({ id: "004", first_name: "Dev", last_name: "Patel", dep_id: "board", address_id: "500" });
var sales_emp = emp.where("dep_id","sales");
var adr = new StrelkiJS.IndexedArray(); adr.put({ id: "200", address: "New Orleans, Bourbon street, 100"}); adr.put({ id: "300", address: "Moscow, Rojdestvensko-Krasnopresnenskaya Naberejnaya"}); adr.put({ id: "500", address: "Bollywood, India"});
{ from_col: "address_id", // IndexedArray to_table: adr, // to_col: "id", // "id", type: "outer", // "outer" LEFT OUTER JOIN, null INNER JOIN join: // null , JOIN- }
var res = emp.query([ { from_col: "address_id", // name of the column in "emp" table to_table: adr, // reference to another table to_col: "id", // "id", or other indexed field in "adr" table type: "outer", // "outer" for LEFT OUTER JOIN, or null for INNER JOIN //join: [ // optional recursive nested joins of the same structure // { // from_col: ..., // to_table: ..., // to_col: ..., // ... // }, // ... //], } ])
SELECT ... FROM emp LEFT OUTER JOIN adr ON emp.address_id = adr.id
[ [ {"id":"001","first_name":"John","last_name":"Smith","dep_id":"sales","address_id":"200"}, {"id":"200","address":"New Orleans, Bourbon street, 100"} ], [ {"id":"002","first_name":"Ivan","last_name":"Krasonov","dep_id":"sales","address_id":"300"}, {"id":"300","address":"Moscow, Rojdestvensko-Krasnopresnenskaya Naberejnaya"} ], [ {"id":"003","first_name":"George","last_name":"Clooney","dep_id":"hr","address_id":"400"}, null ], [ {"id":"004","first_name":"Dev","last_name":"Patel","dep_id":"board","address_id":"500"}, {"id":"500","address":"Bollywood, India"} ] ]
var dep = new StrelkiJS.IndexedArray(); dep.createIndex("address"); dep.put({id:"sales", name: "Sales", address_id: "100"}); dep.put({id:"it", name: "IT", address_id: "100"}); dep.put({id:"hr", name: "Human resource", address_id: "100"}); dep.put({id:"ops", name: "Operations", address_id: "100"}); dep.put({id:"warehouse", name: "Warehouse", address_id: "500"}); var emp = new StrelkiJS.IndexedArray(); emp.createIndex("dep_id"); emp.put({id:"001", first_name: "john", last_name: "smith", dep_id: "sales", address_id: "200"}); emp.put({id:"002", first_name: "Tiger", last_name: "Woods", dep_id: "sales", address_id: "300"}); emp.put({id:"003", first_name: "George", last_name: "Bush", dep_id: "sales", address_id: "400"}); emp.put({id:"004", first_name: "Vlad", last_name: "Putin", dep_id: "ops", address_id: "400"}); emp.put({id:"005", first_name: "Donald", last_name: "Trump", dep_id: "ops", address_id: "600"}); var userRoles = new StrelkiJS.IndexedArray(); userRoles.createIndex("emp_id"); userRoles.put({id:"601", emp_id: "001", role_id: "worker"}); userRoles.put({id:"602", emp_id: "001", role_id: "picker"}); userRoles.put({id:"603", emp_id: "001", role_id: "cashier"}); userRoles.put({id:"604", emp_id: "002", role_id: "cashier"}); var joinInfo = [ { from_col: "id", to_table: emp, to_col: "dep_id", type: "outer", join: [{ from_col: "id", to_table: userRoles, to_col: "emp_id", type: "outer", }], }, // { // from_col: "id", // to_table: assets, // to_col: "dep_id", // } ]; //var js1 = IndexedArray.IndexedArray.doLookups(dep.get("sales"),joinInfo); var js = dep.where(null,null,function(el) { return el.id === "sales"}).query(joinInfo); // result [ [ {"id":"sales","name":"Sales","address_id":"100"}, {"id":"001","first_name":"john","last_name":"smith","dep_id":"sales","address_id":"200"}, {"id":"601","emp_id":"001","role_id":"worker"} ], [ {"id":"sales","name":"Sales","address_id":"100"}, {"id":"001","first_name":"john","last_name":"smith","dep_id":"sales","address_id":"200"}, {"id":"602","emp_id":"001","role_id":"picker"} ], [ {"id":"sales","name":"Sales","address_id":"100"}, {"id":"001","first_name":"john","last_name":"smith","dep_id":"sales","address_id":"200"}, {"id":"603","emp_id":"001","role_id":"cashier"} ], [ {"id":"sales","name":"Sales","address_id":"100"}, {"id":"002","first_name":"Tiger","last_name":"Woods","dep_id":"sales","address_id":"300"}, {"id":"604","emp_id":"002","role_id":"cashier"} ], [ {"id":"sales","name":"Sales","address_id":"100"}, {"id":"003","first_name":"George","last_name":"Bush","dep_id":"sales","address_id":"400"} ,null ] ]
Source: https://habr.com/ru/post/301258/
All Articles