# HG changeset patch
# User Asier Lostalé <asier.lostale@openbravo.com>
# Date 1383729452 -3600
#      Wed Nov 06 10:17:32 2013 +0100
# Node ID 9b54acccbbb0075a9ecd9ced402c4ff792dcaac2
# Parent  b14327d2d58191b180271a1ce998ddb882641332
fixed issue 25092: logging for slow local DB transactions

diff -r b14327d2d581 -r 9b54acccbbb0 web/org.openbravo.mobile.core/source/data/ob-dal.js
--- a/web/org.openbravo.mobile.core/source/data/ob-dal.js	Thu Oct 24 10:00:50 2013 +0200
+++ b/web/org.openbravo.mobile.core/source/data/ob-dal.js	Wed Nov 06 10:17:32 2013 +0100
@@ -138,7 +138,7 @@
           params = null,
           appendWhere = true,
           firstParam = true,
-          k, v, undef, colType, xhr, i, criteria, j, params_where, orderBy;
+          k, v, undef, colType, xhr, i, criteria, j, params_where, orderBy, tTrx0;
 
       if (model.prototype.online) {
         colType = OB && OB.Collection && OB.Collection[model.prototype.modelName + 'List'];
@@ -208,13 +208,27 @@
           sql = sql + ' LIMIT ' + model.prototype.dataLimit;
         }
 
-        //console.log(sql);
-        //console.log(params);
+
+        if (OB.MobileApp.model.get('logDBTrxThreshold')) {
+          // logging slow DB transactions
+          tTrx0 = new Date().valueOf();
+        }
+
         OB.Data.localDB.readTransaction(function (tx) {
           tx.executeSql(sql, params, function (tr, result) {
             var i, collectionType = OB.Collection[model.prototype.modelName + 'List'] || Backbone.Collection,
                 collection = new collectionType(),
-                len = result.rows.length;
+                len = result.rows.length,
+                t, tTrx;
+
+            if (tTrx0) {
+              // logging slow DB transactions
+              tTrx = new Date().valueOf() - tTrx0;
+              if (tTrx > OB.MobileApp.model.get('logDBTrxThreshold')) {
+                window.console.warn(tTrx, sql,params);
+              }
+            }
+
             if (len === 0) {
               success(collection, args);
             } else {
@@ -232,15 +246,32 @@
     },
 
     query: function (model, sql, params, success, error, args) {
+      var tTrx0;
+
       if (OB.Data.localDB) {
         if (model.prototype.dataLimit) {
           sql = sql + ' LIMIT ' + model.prototype.dataLimit;
         }
+
+        if (OB.MobileApp.model.get('logDBTrxThreshold')) {
+          // logging slow DB transactions
+          tTrx0 = new Date().valueOf();
+        }
+
         OB.Data.localDB.readTransaction(function (tx) {
           tx.executeSql(sql, params, function (tr, result) {
             var i, collectionType = OB.Collection[model.prototype.modelName + 'List'] || Backbone.Collection,
                 collection = new collectionType(),
                 len = result.rows.length;
+
+            if (tTrx0) {
+              // logging slow DB transactions
+              tTrx = new Date().valueOf() - tTrx0;
+              if (tTrx > OB.MobileApp.model.get('logDBTrxThreshold')) {
+                window.console.warn(tTrx, sql);
+              }
+            }
+
             if (len === 0) {
               success(collection, args);
             } else {
@@ -493,12 +524,26 @@
 
     get: function (model, id, success, error) {
       var tableName = OB.Dal.getTableName(model),
-          sql = 'SELECT * FROM ' + tableName + ' WHERE ' + tableName + '_id = ?';
+          sql = 'SELECT * FROM ' + tableName + ' WHERE ' + tableName + '_id = ?',
+          tTrx0;
 
       if (OB.Data.localDB) {
+        if (OB.MobileApp.model.get('logDBTrxThreshold')) {
+          // logging slow DB transactions
+          tTrx0 = new Date().valueOf();
+        }
+
         // websql
         OB.Data.localDB.readTransaction(function (tx) {
           tx.executeSql(sql, [id], function (tr, result) {
+            var tTrx;
+            if (tTrx0) {
+              // logging slow DB transactions
+              tTrx = new Date().valueOf() - tTrx0;
+              if (tTrx > OB.MobileApp.model.get('logDBTrxThreshold')) {
+                window.console.warn(tTrx, sql);
+              }
+            }
             if (result.rows.length === 0) {
               return null;
             } else {
@@ -513,6 +558,7 @@
     },
 
     initCache: function (model, initialData, success, error, incremental) {
+      var tTrx0;
       if (OB.Data.localDB) {
         // error must be defined, if not it fails in some android versions
         error = error ||
@@ -533,10 +579,13 @@
           }, error);
         }
 
+
+
         OB.Data.localDB.transaction(function (tx) {
           var createStatement = model.getCreateStatement ? model.getCreateStatement() : model.prototype.createStatement;
           var createIndexStatement;
           tx.executeSql(createStatement, null, function () {
+
             //Create Index
             if (model.hasIndex && model.hasIndex()) {
               _.each(model.getIndexes(), function (indexDefinition) {
@@ -550,6 +599,10 @@
         }, error);
 
         if (_.isArray(initialData)) {
+            if (OB.MobileApp.model.get('logDBTrxThreshold')) {
+                // logging slow DB transactions
+                tTrx0 = new Date().valueOf();
+              }
           OB.Data.localDB.transaction(function (tx) {
             var props = model.getProperties ? model.getProperties() : model.prototype.properties,
                 filterVal, values, _idx = 0,
