-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathangular-sql-query.min.js
More file actions
1 lines (1 loc) · 7.92 KB
/
angular-sql-query.min.js
File metadata and controls
1 lines (1 loc) · 7.92 KB
1
"use strict";!function(e){function n(n,u){function c(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.indexed_fields||[];return this.options=t,this.backUpName=e,this.helpers={indexed_fields:r},this.backUpDB=function(){return n()},this}return c.prototype.getBackUp=function(e){if(!e)throw new Error("You need to provide an id");var t=this,c=r(t.backUpName,{id:e});return this.execute(c.query,c.params).then(function(e){return e.rows.length?q(e,0):u.reject({message:"Not Found",status:404})}).catch(function(e){throw n.error("[Backup] Get",t.backUpName,":",e.message),e})},c.prototype.listBackUp=function(e){var t=this,u=r(t.backUpName,{},e);return this.execute(u.query).then(E).catch(function(e){throw n.error("[Backup] List",t.backUpName,":",e.message),e})},c.prototype.queryBackUp=function(){function r(e,n,t){return T(t,A).map(function(t){return{query:"INSERT INTO "+e+" "+d(t,n),params:t}})}var c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=this,f=a.helpers.indexed_fields,s=U(c),l=function(n){var t=function(n){return e.isArray(n)&&w<n.length};return Object.keys(n).reduce(function(e,r){var u=n[r];return e[t(u)?"ext":"self"][r]=u,e},{self:{},ext:{}})}(O(f,s)),h=function(e,n){return Object.keys(n.ext).map(function(t){var u="tmp_"+e+"_"+t,c="DROP TABLE IF EXISTS "+u,o="CREATE TABLE IF NOT EXISTS "+u+" (value TEXT)",i=r(u,"value",n.ext[t]);return[{query:c},{query:o}].concat(i)})}(a.backUpName,l).reduce(function(e,n){return e.concat(n)},[]),m=j(f,s),v=Boolean(0===Object.keys(s).filter(function(e){return-1!==f.indexOf(e)}).length&&Object.keys(m).length);return(h.length?a.batch(h):u.when()).then(function(){var e=t(a.backUpName,l,v?{}:o,i),n=v?p(o):function(e){return e};return a.execute(e.query,e.params).then(function(e){var t=E(e);return n(b(t,m))})}).catch(function(e){throw n.error("[Backup] Query",a.backUpName,":",e.message),e})},c.prototype.saveBackUp=function(e,t){var r=this,u=r.helpers.indexed_fields,c=this.backUpName,o=h([t],u,c);return this.execute(o.query,o.params).then(function(){return t}).catch(function(e){throw n.error("[Backup] Save",r.backUpName,":",e.message),e})},c.prototype.updateBackUp=function(e){var t=this,r=t.backUpName,u=t.helpers.indexed_fields,c=v(e,u,r);return this.execute(c.query,c.params).then(function(){return e}).catch(function(e){throw n.error("[Backup] Update",r,":",e.message),e})},c.prototype.removeBackUp=function(e){var t=this,r=y({id:e},t.backUpName);return this.execute(r.query,r.params).catch(function(e){throw n.error("[Backup] Remove",t.backUpName,":",e.message),e})},c.prototype.removeQueryBackUp=function(e){var t=this,r=y(e,t.backUpName);return this.execute(r.query,r.params).catch(function(e){throw n.error("[Backup] Remove",t.backUpName,":",e.message),e})},c.prototype.bulkDocsBackUp=function(e){var t=this,r=t.helpers.indexed_fields,c=t.backUpName,o=[],i=e.filter(function(e){return e._deleted}).map(function(e){return e.id}),a=e.filter(function(e){return!e._deleted});return i.length&&o.push(y({id:i},c)),a.length&&o.push(h(a,r,c)),o.length?u.all(o.map(function(e){return t.execute(e.query,e.params)})).catch(function(e){throw n.error("[Backup] Bulk",t.backUpName,":",e.message),e}):u.when()},c.prototype.execute=function(e,n){var t=u.defer();return this.backUpDB().then(function(r){r.transaction(function(r){r.executeSql(e,n,function(e,n){t.resolve(n)},function(e,n){return t.reject(n),!1})})}),t.promise},c.prototype.batch=function(e){function n(n){var t=u.defer();return n.transaction(function(n){e.forEach(function(e){n.executeSql(e.query,e.params||[])})},t.reject,t.resolve),t.promise}var t=u.defer();return this.backUpDB().then(function(r){return r.sqlBatch?r.sqlBatch(e.map(function(e){return[e.query,e.params||[]]}),function(e){return t.resolve(e)},function(e){return t.reject(e)}):n(r).then(t.resolve).catch(t.reject)}),t.promise},c}function t(e,n,t,r){function u(e){return Object.keys(e).map(function(n){return a(n,e[n])})}function c(n){return Object.keys(n).map(function(n){return n+" IN (SELECT value FROM "+("tmp_"+e+"_"+n)+")"})}return{query:function(n){var o="SELECT * FROM "+e,i=[].concat(u(n.self),c(n.ext));return l(s(o+(i.length?" WHERE ":"")+i.join(" AND "),r),t)+";"}(n),params:Object.keys(n.self).reduce(function(e,t){return e.concat(R(n.self[t]))},[])}}function r(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return{query:l(f("SELECT * FROM "+e,n),t),params:i(n)}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o(Object.keys(e).map(function(n){return a(n,e[n])}))}function c(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(function(e){return e.key+(e.desc?" DESC":"")}).join(",")}function o(e){return e.join(" AND ")}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).map(function(n){return R(e[n])}).reduce(function(e,n){return e.concat(n)},[])}function a(e,n){return Array.isArray(n)?e+" IN ("+N(n)+")":S(n)?e+" LIKE ?":e+"=?"}function f(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return 0<Object.keys(n).length?e+" WHERE "+u(n):e}function s(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return 0<n.length?e+" ORDER BY "+c(n):e}function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(n){var t=e.offset,r=e.limit;return{}.undef!==t&&{}.undef!==r?n.slice(t,t+r):{}.undef!==t?n.slice(t):n.slice(0,r)}}function l(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=e;return n.limit&&(t+=" LIMIT "+n.limit),n.offset&&(t+=" OFFSET "+n.offset),t}function h(e,n,t){var r="INSERT OR REPLACE INTO "+t,u=["id","payload"].concat(n);return{query:r+" "+("("+u.join(", ")+")")+" "+(1<e.length?d(e,u):"VALUES ("+N(u)+")"),params:e.map(function(e){return[e.id].concat(k(e,n))}).reduce(function(e,n){return e.concat(n)},[])}}function d(e,n){var t=[].concat(n),r=m(t);return e.map(function(e,n){return 0===n?r:"UNION ALL SELECT "+N(t)}).join(" ")}function m(e){return"SELECT "+e.map(function(e){return"? as "+e}).join(", ")}function v(e,n,t){var r="UPDATE "+t,u=["payload"].concat(n),c=k(e,n);return{query:r+" SET "+u.map(function(e){return e+"=?"}).join(", ")+" WHERE id=?",params:c.concat([e.id])}}function y(e,n){return{query:f("DELETE FROM "+n,e),params:i(e)}}function k(n,t){var r=g(n,t);return[e.toJson(n)].concat(r)}function g(n,t){return t.map(function(t){var r=x(n[t]);return e.isDefined(r)?r:null})}function b(n){function t(e,n){for(var t=0,r=e.length;null!==n&&n!=={}.undef&&t<r;)n=n[e[t++]];return t&&t===r?n:{}.undef}var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(r).length?n.filter(function(n){return Object.keys(r).every(function(u){var c=t(u.split("."),n),o=r[u];return e.isArray(o)&&e.isArray(c)?o.every(function(n){return c.some(function(t){return e.equals(n,t)})}):e.isArray(o)?o.some(function(n){return e.equals(n,c)}):e.isArray(c)?c.some(function(n){return e.equals(n,o)}):e.equals(o,c)})}):n}function E(e){var n=[],t=0;for(t=0;t<e.rows.length;t++)n[t]=q(e,t);return n}function U(e){return Object.keys(e).reduce(function(n,t){return n[t]=x(e[t]),n},{})}function j(e,n){var t=function(n){return-1!==e.indexOf(n)||"id"===n};return Object.keys(n).reduce(function(e,r){return t(r)||(e[r]=n[r]),e},{})}function O(e,n){var t=function(n){return-1!==e.indexOf(n)||"id"===n};return Object.keys(n).reduce(function(e,r){return t(r)&&(e[r]=n[r]),e},{})}function q(n,t){return e.fromJson(n.rows.item(t).payload)}function N(e){return e.map(function(){return"?"}).join(",")}function x(e){return B(e)?e?1:0:e}function B(e){return"boolean"==typeof e}function T(e,n){for(var t=e.length,r=Math.ceil(t/n),u=[],c=0,o=0,i=0;c<r;c++)o=c*n,i=(c+1)*n,u.push(e.slice(o,i));return u}function S(e){return"[object RegExp]"===Object.prototype.toString.call(e)}function R(e){return S(e)?"%"+e.source+"%":e}n.$inject=["$log","$q"];var w=100,A=300;e.module("sf.sqlQuery",[]).factory("SqlQueryService",n)}(window.angular);