objection
Version:
An SQL-friendly ORM for Node.js
72 lines (47 loc) • 7.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _QueryBuilderOperation = require('../../queryBuilder/operations/QueryBuilderOperation');
var _QueryBuilderOperation2 = _interopRequireDefault(_QueryBuilderOperation);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var sqliteBuiltInRowId = '_rowid_';
var ManyToManyUnrelateSqliteOperation = function (_QueryBuilderOperatio) {
(0, _inherits3.default)(ManyToManyUnrelateSqliteOperation, _QueryBuilderOperatio);
function ManyToManyUnrelateSqliteOperation(name, opt) {
(0, _classCallCheck3.default)(this, ManyToManyUnrelateSqliteOperation);
var _this = (0, _possibleConstructorReturn3.default)(this, _QueryBuilderOperatio.call(this, name, opt));
_this.isWriteOperation = true;
_this.relation = opt.relation;
_this.owner = opt.owner;
return _this;
}
ManyToManyUnrelateSqliteOperation.prototype.queryExecutor = function queryExecutor(builder) {
var _this2 = this;
var joinTableAlias = this.relation.joinTableAlias();
var joinTableAsAlias = this.relation.joinTable + ' as ' + joinTableAlias;
var joinTableAliasRowId = joinTableAlias + '.' + sqliteBuiltInRowId;
var joinTableRowId = this.relation.joinTable + '.' + sqliteBuiltInRowId;
var ownerId = this.owner.$values(this.relation.ownerProp);
var fullRelatedCol = this.relation.fullRelatedCol();
var selectRelatedQuery = this.relation.relatedModelClass.query().childQueryOf(builder).copyFrom(builder, /where/i).select(joinTableAliasRowId).modify(this.relation.modify).whereComposite(this.relation.fullJoinTableOwnerCol(), ownerId).join(joinTableAsAlias, function (join) {
var fullJoinTableRelatedCol = _this2.relation.fullJoinTableRelatedCol();
for (var i = 0, l = fullJoinTableRelatedCol.length; i < l; ++i) {
join.on(fullJoinTableRelatedCol[i], fullRelatedCol[i]);
}
});
return this.relation.joinTableModelClass(builder.knex()).query().childQueryOf(builder).delete().whereIn(joinTableRowId, selectRelatedQuery).runAfter(_lodash2.default.constant({}));
};
return ManyToManyUnrelateSqliteOperation;
}(_QueryBuilderOperation2.default);
exports.default = ManyToManyUnrelateSqliteOperation;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbnlUb01hbnlVbnJlbGF0ZVNxbGl0ZU9wZXJhdGlvbi5qcyJdLCJuYW1lcyI6WyJzcWxpdGVCdWlsdEluUm93SWQiLCJNYW55VG9NYW55VW5yZWxhdGVTcWxpdGVPcGVyYXRpb24iLCJuYW1lIiwib3B0IiwiaXNXcml0ZU9wZXJhdGlvbiIsInJlbGF0aW9uIiwib3duZXIiLCJxdWVyeUV4ZWN1dG9yIiwiYnVpbGRlciIsImpvaW5UYWJsZUFsaWFzIiwiam9pblRhYmxlQXNBbGlhcyIsImpvaW5UYWJsZSIsImpvaW5UYWJsZUFsaWFzUm93SWQiLCJqb2luVGFibGVSb3dJZCIsIm93bmVySWQiLCIkdmFsdWVzIiwib3duZXJQcm9wIiwiZnVsbFJlbGF0ZWRDb2wiLCJzZWxlY3RSZWxhdGVkUXVlcnkiLCJyZWxhdGVkTW9kZWxDbGFzcyIsInF1ZXJ5IiwiY2hpbGRRdWVyeU9mIiwiY29weUZyb20iLCJzZWxlY3QiLCJtb2RpZnkiLCJ3aGVyZUNvbXBvc2l0ZSIsImZ1bGxKb2luVGFibGVPd25lckNvbCIsImpvaW4iLCJmdWxsSm9pblRhYmxlUmVsYXRlZENvbCIsImkiLCJsIiwibGVuZ3RoIiwib24iLCJqb2luVGFibGVNb2RlbENsYXNzIiwia25leCIsImRlbGV0ZSIsIndoZXJlSW4iLCJydW5BZnRlciIsImNvbnN0YW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEscUJBQXFCLFNBQTNCOztJQUVxQkMsaUM7OztBQUVuQiw2Q0FBWUMsSUFBWixFQUFrQkMsR0FBbEIsRUFBdUI7QUFBQTs7QUFBQSwrREFDckIsaUNBQU1ELElBQU4sRUFBWUMsR0FBWixDQURxQjs7QUFHckIsVUFBS0MsZ0JBQUwsR0FBd0IsSUFBeEI7QUFDQSxVQUFLQyxRQUFMLEdBQWdCRixJQUFJRSxRQUFwQjtBQUNBLFVBQUtDLEtBQUwsR0FBYUgsSUFBSUcsS0FBakI7QUFMcUI7QUFNdEI7OzhDQUVEQyxhLDBCQUFjQyxPLEVBQVM7QUFBQTs7QUFDckIsUUFBSUMsaUJBQWlCLEtBQUtKLFFBQUwsQ0FBY0ksY0FBZCxFQUFyQjtBQUNBLFFBQUlDLG1CQUFtQixLQUFLTCxRQUFMLENBQWNNLFNBQWQsR0FBMEIsTUFBMUIsR0FBbUNGLGNBQTFEO0FBQ0EsUUFBSUcsc0JBQXNCSCxpQkFBaUIsR0FBakIsR0FBdUJULGtCQUFqRDtBQUNBLFFBQUlhLGlCQUFpQixLQUFLUixRQUFMLENBQWNNLFNBQWQsR0FBMEIsR0FBMUIsR0FBZ0NYLGtCQUFyRDs7QUFFQSxRQUFJYyxVQUFVLEtBQUtSLEtBQUwsQ0FBV1MsT0FBWCxDQUFtQixLQUFLVixRQUFMLENBQWNXLFNBQWpDLENBQWQ7QUFDQSxRQUFJQyxpQkFBaUIsS0FBS1osUUFBTCxDQUFjWSxjQUFkLEVBQXJCOztBQUVBLFFBQUlDLHFCQUFxQixLQUFLYixRQUFMLENBQWNjLGlCQUFkLENBQ3RCQyxLQURzQixHQUV0QkMsWUFGc0IsQ0FFVGIsT0FGUyxFQUd0QmMsUUFIc0IsQ0FHYmQsT0FIYSxFQUdKLFFBSEksRUFJdEJlLE1BSnNCLENBSWZYLG1CQUplLEVBS3RCWSxNQUxzQixDQUtmLEtBQUtuQixRQUFMLENBQWNtQixNQUxDLEVBTXRCQyxjQU5zQixDQU1QLEtBQUtwQixRQUFMLENBQWNxQixxQkFBZCxFQU5PLEVBTWdDWixPQU5oQyxFQU90QmEsSUFQc0IsQ0FPakJqQixnQkFQaUIsRUFPQyxnQkFBUTtBQUM5QixVQUFNa0IsMEJBQTBCLE9BQUt2QixRQUFMLENBQWN1Qix1QkFBZCxFQUFoQzs7QUFFQSxXQUFLLElBQUlDLElBQUksQ0FBUixFQUFXQyxJQUFJRix3QkFBd0JHLE1BQTVDLEVBQW9ERixJQUFJQyxDQUF4RCxFQUEyRCxFQUFFRCxDQUE3RCxFQUFnRTtBQUM5REYsYUFBS0ssRUFBTCxDQUFRSix3QkFBd0JDLENBQXhCLENBQVIsRUFBb0NaLGVBQWVZLENBQWYsQ0FBcEM7QUFDRDtBQUNGLEtBYnNCLENBQXpCOztBQWVBLFdBQU8sS0FBS3hCLFFBQUwsQ0FBYzRCLG1CQUFkLENBQWtDekIsUUFBUTBCLElBQVIsRUFBbEMsRUFDSmQsS0FESSxHQUVKQyxZQUZJLENBRVNiLE9BRlQsRUFHSjJCLE1BSEksR0FJSkMsT0FKSSxDQUlJdkIsY0FKSixFQUlvQkssa0JBSnBCLEVBS0ptQixRQUxJLENBS0ssaUJBQUVDLFFBQUYsQ0FBVyxFQUFYLENBTEwsQ0FBUDtBQU1ELEc7Ozs7O2tCQXhDa0JyQyxpQyIsImZpbGUiOiJNYW55VG9NYW55VW5yZWxhdGVTcWxpdGVPcGVyYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFF1ZXJ5QnVpbGRlck9wZXJhdGlvbiBmcm9tICcuLi8uLi9xdWVyeUJ1aWxkZXIvb3BlcmF0aW9ucy9RdWVyeUJ1aWxkZXJPcGVyYXRpb24nO1xuXG5jb25zdCBzcWxpdGVCdWlsdEluUm93SWQgPSAnX3Jvd2lkXyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hbnlUb01hbnlVbnJlbGF0ZVNxbGl0ZU9wZXJhdGlvbiBleHRlbmRzIFF1ZXJ5QnVpbGRlck9wZXJhdGlvbiB7XG5cbiAgY29uc3RydWN0b3IobmFtZSwgb3B0KSB7XG4gICAgc3VwZXIobmFtZSwgb3B0KTtcblxuICAgIHRoaXMuaXNXcml0ZU9wZXJhdGlvbiA9IHRydWU7XG4gICAgdGhpcy5yZWxhdGlvbiA9IG9wdC5yZWxhdGlvbjtcbiAgICB0aGlzLm93bmVyID0gb3B0Lm93bmVyO1xuICB9XG5cbiAgcXVlcnlFeGVjdXRvcihidWlsZGVyKSB7XG4gICAgbGV0IGpvaW5UYWJsZUFsaWFzID0gdGhpcy5yZWxhdGlvbi5qb2luVGFibGVBbGlhcygpO1xuICAgIGxldCBqb2luVGFibGVBc0FsaWFzID0gdGhpcy5yZWxhdGlvbi5qb2luVGFibGUgKyAnIGFzICcgKyBqb2luVGFibGVBbGlhcztcbiAgICBsZXQgam9pblRhYmxlQWxpYXNSb3dJZCA9IGpvaW5UYWJsZUFsaWFzICsgJy4nICsgc3FsaXRlQnVpbHRJblJvd0lkO1xuICAgIGxldCBqb2luVGFibGVSb3dJZCA9IHRoaXMucmVsYXRpb24uam9pblRhYmxlICsgJy4nICsgc3FsaXRlQnVpbHRJblJvd0lkO1xuXG4gICAgbGV0IG93bmVySWQgPSB0aGlzLm93bmVyLiR2YWx1ZXModGhpcy5yZWxhdGlvbi5vd25lclByb3ApO1xuICAgIGxldCBmdWxsUmVsYXRlZENvbCA9IHRoaXMucmVsYXRpb24uZnVsbFJlbGF0ZWRDb2woKTtcblxuICAgIGxldCBzZWxlY3RSZWxhdGVkUXVlcnkgPSB0aGlzLnJlbGF0aW9uLnJlbGF0ZWRNb2RlbENsYXNzXG4gICAgICAucXVlcnkoKVxuICAgICAgLmNoaWxkUXVlcnlPZihidWlsZGVyKVxuICAgICAgLmNvcHlGcm9tKGJ1aWxkZXIsIC93aGVyZS9pKVxuICAgICAgLnNlbGVjdChqb2luVGFibGVBbGlhc1Jvd0lkKVxuICAgICAgLm1vZGlmeSh0aGlzLnJlbGF0aW9uLm1vZGlmeSlcbiAgICAgIC53aGVyZUNvbXBvc2l0ZSh0aGlzLnJlbGF0aW9uLmZ1bGxKb2luVGFibGVPd25lckNvbCgpLCBvd25lcklkKVxuICAgICAgLmpvaW4oam9pblRhYmxlQXNBbGlhcywgam9pbiA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGxKb2luVGFibGVSZWxhdGVkQ29sID0gdGhpcy5yZWxhdGlvbi5mdWxsSm9pblRhYmxlUmVsYXRlZENvbCgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZnVsbEpvaW5UYWJsZVJlbGF0ZWRDb2wubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgam9pbi5vbihmdWxsSm9pblRhYmxlUmVsYXRlZENvbFtpXSwgZnVsbFJlbGF0ZWRDb2xbaV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnJlbGF0aW9uLmpvaW5UYWJsZU1vZGVsQ2xhc3MoYnVpbGRlci5rbmV4KCkpXG4gICAgICAucXVlcnkoKVxuICAgICAgLmNoaWxkUXVlcnlPZihidWlsZGVyKVxuICAgICAgLmRlbGV0ZSgpXG4gICAgICAud2hlcmVJbihqb2luVGFibGVSb3dJZCwgc2VsZWN0UmVsYXRlZFF1ZXJ5KVxuICAgICAgLnJ1bkFmdGVyKF8uY29uc3RhbnQoe30pKTtcbiAgfVxufVxuIl19