FSN#41986 Kleine API2 optimalisatie

svn path=/Website/trunk/; revision=35422
This commit is contained in:
Jos Groot Lipman
2017-09-25 12:18:01 +00:00
parent d6a1499e30
commit 79fdd6f8a7

View File

@@ -907,6 +907,8 @@ api2 = {
} }
}, },
// Geeft de GET terug van een enkel veld // Geeft de GET terug van een enkel veld
// Onder bepaalde omstandigheden wordt deze functie *heel* veel aangroepen
// Houd hem daarom efficient.
sql2jsonval: function _sql2jsonval(oRs, fld, model) sql2jsonval: function _sql2jsonval(oRs, fld, model)
{ {
var field = model.fields[fld]; var field = model.fields[fld];
@@ -914,26 +916,27 @@ api2 = {
if (field.val instanceof Function) if (field.val instanceof Function)
var val = field.val(oRs, field, model, sqlfieldname); var val = field.val(oRs, field, model, sqlfieldname);
else if (field.dbs.indexOf(".") < 0) else if (field.dbs.indexOf(".") < 0)
{
var val = oRs(sqlfieldname).Value; var val = oRs(sqlfieldname).Value;
}
else else
var val = oRs(field.dbs.split(".")[1]).Value; var val = oRs(field.dbs.split(".")[1]).Value;
if (field.typ == "check" || field.typ == "check0")
{
if (field.invert)
val = (val==1?0:1);
}
if (val === null) if (val === null)
return val; return val;
if (field.typ == "date")
val = new Date(val); switch (field.typ)
if (field.typ == "datetime") {
val = new Date(val); case "check":
if (field.typ == "time") // In de database ondersteunen we dit niet maar komt voor bij fac_report case "check0":
val = new Date(val); if (field.invert)
val = (val==1?0:1);
return val;
break;
case "date":
case "datetime":
case "time": // In de database ondersteunen we dit niet maar komt voor bij fac_report
return new Date(val);
break;
}
// Wat te doen met lege waarde // Wat te doen met lege waarde
// action: null // action: null
// action: {key: null, name: null} // action: {key: null, name: null}
@@ -1097,6 +1100,8 @@ api2 = {
limit = params.filter.limit; limit = params.filter.limit;
if (params.filter.nolimit || limit == -1) if (params.filter.nolimit || limit == -1)
limit = 99999999; // Excel/CSV alles tonen limit = 99999999; // Excel/CSV alles tonen
while (!oRs.Eof) while (!oRs.Eof)
{ {
if (data.length >= limit) // Alleen nog maar tellen if (data.length >= limit) // Alleen nog maar tellen
@@ -1115,6 +1120,7 @@ api2 = {
oRs.MoveNext(); oRs.MoveNext();
continue; continue;
} }
var newrecord = true;
if (model.primary) if (model.primary)
{ {
var key = oRs(model.primary).Value; var key = oRs(model.primary).Value;
@@ -1134,6 +1140,8 @@ api2 = {
} }
var record = {}; var record = {};
} }
else
newrecord = false; // er komen nog wel include-records achteraan
} }
// Complexe filtering die we niet voor elkaar kregen met een WHERE-clause // Complexe filtering die we niet voor elkaar kregen met een WHERE-clause
@@ -1148,21 +1156,24 @@ api2 = {
} }
var fld; var fld;
for (fld in model.fields) if (newrecord) // dan moeten de velden van het basis model eerst
{ {
if (fld.substring(0,1) == "_") for (fld in model.fields)
continue; {
var field = model.fields[fld]; if (fld.substring(0,1) == "_")
if (field.hidden) continue;
continue; var field = model.fields[fld];
if ("fields" in params.filter && !inArray(fld, params.filter.fields.split(","))) if (field.hidden)
continue; continue;
if ("fields" in params.filter && !inArray(fld, params.filter.fields.split(",")))
continue;
var val = api2.sql2jsonval(oRs, fld, model) var val = api2.sql2jsonval(oRs, fld, model)
//waarom was dit aanwezig? //waarom was dit aanwezig?
//if (field.readonly && !val.id) //if (field.readonly && !val.id)
// continue; // continue;
record[fld] = val; record[fld] = val;
}
} }
if (params.include && model.includes) if (params.include && model.includes)
{ {