UNPKG

meteor-mysql

Version:

This is a meteor package which brings strong and easy way in order to write apps using Mysql.

110 lines (109 loc) 6.13 kB
var node_mysql_wrapper_1 = require("node-mysql-wrapper"); var LiveHelper = (function () { function LiveHelper() { } LiveHelper.canInsert = function (objRow, rawCriteria, joinedRow) { var canInsert = true; node_mysql_wrapper_1.Helper.forEachKey(rawCriteria, function (key) { if (!canInsert) { return; } try { if (objRow[key] !== undefined) { var _valCriteria = rawCriteria[key]; var _valSplited = _valCriteria.split(" "); if (_valSplited[0] === "IN(") { var _values = _valCriteria.substring(_valSplited[0].length, _valCriteria.lastIndexOf(")")).split(","); _values = " " + objRow[key] + " === " + _values.join("|| " + objRow[key] + " === "); if (!eval(_values)) { canInsert = false; } } else { var _symbolCombarison = node_mysql_wrapper_1.ConditionalConverter.toJS(_valSplited[0]); var valComparison = _valSplited[1]; var ifEvalStatementStr = objRow[key] + _symbolCombarison + valComparison; ifEvalStatementStr = node_mysql_wrapper_1.ConditionalConverter.toJSConditional(ifEvalStatementStr); if (!eval(ifEvalStatementStr)) { canInsert = false; } } } } catch (ex) { canInsert = false; } }); return canInsert; }; LiveHelper.listenToTable = function (table, collectionArray, criteriaRawJsObject, action) { var criteria = table.criteriaDivider.divide(criteriaRawJsObject); criteria.tables.forEach(function (_tb) { var joinedTableObj = table.connection.table(_tb.tableName); var joinedTableCriteria = joinedTableObj.criteriaDivider.divide(criteria.rawCriteriaObject[_tb.propertyName]); joinedTableObj.on("INSERT", function (rows) { rows.forEach(function (row) { var objRow = joinedTableObj.objectFromRow(row); collectionArray.forEach(function (_objInlist) { var joinedCriteria = {}; node_mysql_wrapper_1.Helper.forEachKey(joinedTableCriteria.rawCriteriaObject, function (key) { try { var valWithoutComparison = joinedTableCriteria.rawCriteriaObject[key].split(" ")[1]; var valComparisonSymbol = joinedTableCriteria.rawCriteriaObject[key].split(" ")[0]; if (_objInlist[valWithoutComparison] !== undefined) { joinedCriteria[key] = valComparisonSymbol + " " + _objInlist[valWithoutComparison]; } } catch (ex) { } }); var canInsert = LiveHelper.canInsert(objRow, joinedCriteria); if (canInsert) { var parentPropName = _tb.propertyName; var primkey = node_mysql_wrapper_1.Helper.toObjectProperty(table.primaryKey); var objToFind = {}; objToFind[primkey] = _objInlist[primkey]; if (_objInlist[parentPropName] instanceof Array) { _objInlist[parentPropName].push(objRow); action("INSERT", _tb, objRow, objToFind, true); } else { action("INSERT", _tb, objRow, objToFind, false); } } }); }); }); joinedTableObj.on("DELETE", function (rows) { rows.forEach(function (row) { var objRow = joinedTableObj.objectFromRow(row); var toBeRemovedCriteria = {}; toBeRemovedCriteria[node_mysql_wrapper_1.Helper.toObjectProperty(joinedTableObj.primaryKey)] = row[joinedTableObj.primaryKey]; var isArray = false; if (joinedTableCriteria === undefined || joinedTableCriteria.queryRules === undefined || (joinedTableCriteria.queryRules !== undefined && ((joinedTableCriteria.queryRules.limitEnd - joinedTableCriteria.queryRules.limitStart) !== 1))) { isArray = true; } action("DELETE", _tb, objRow, toBeRemovedCriteria, isArray); }); }); joinedTableObj.on("UPDATE", function (rows) { rows.forEach(function (row) { var rowUpdated = row["after"]; var objRow = joinedTableObj.objectFromRow(rowUpdated); var toBeUpdatedCriteria = {}; toBeUpdatedCriteria[node_mysql_wrapper_1.Helper.toObjectProperty(joinedTableObj.primaryKey)] = row[joinedTableObj.primaryKey]; var isArray = false; if (joinedTableCriteria === undefined || joinedTableCriteria.queryRules === undefined || (joinedTableCriteria.queryRules !== undefined && ((joinedTableCriteria.queryRules.limitEnd - joinedTableCriteria.queryRules.limitStart) !== 1))) { isArray = true; } action("UPDATE", _tb, objRow, toBeUpdatedCriteria, isArray); }); }); }); }; return LiveHelper; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = LiveHelper;