objection
Version:
An SQL-friendly ORM for Node.js
73 lines (49 loc) • 6.42 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 _normalizeIds = require('../../utils/normalizeIds');
var _normalizeIds2 = _interopRequireDefault(_normalizeIds);
var _QueryBuilderOperation = require('../../queryBuilder/operations/QueryBuilderOperation');
var _QueryBuilderOperation2 = _interopRequireDefault(_QueryBuilderOperation);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var HasManyRelateOperation = function (_QueryBuilderOperatio) {
(0, _inherits3.default)(HasManyRelateOperation, _QueryBuilderOperatio);
function HasManyRelateOperation(name, opt) {
(0, _classCallCheck3.default)(this, HasManyRelateOperation);
var _this = (0, _possibleConstructorReturn3.default)(this, _QueryBuilderOperatio.call(this, name, opt));
_this.isWriteOperation = true;
_this.relation = opt.relation;
_this.owner = opt.owner;
_this.input = null;
_this.ids = null;
return _this;
}
HasManyRelateOperation.prototype.call = function call(builder, args) {
this.input = args[0];
this.ids = (0, _normalizeIds2.default)(args[0], this.relation.relatedModelClass.getIdPropertyArray(), { arrayOutput: true });
return true;
};
HasManyRelateOperation.prototype.queryExecutor = function queryExecutor(builder) {
var patch = {};
for (var i = 0, l = this.relation.relatedProp.length; i < l; ++i) {
var relatedProp = this.relation.relatedProp[i];
var ownerProp = this.relation.ownerProp[i];
patch[relatedProp] = this.owner[ownerProp];
}
return this.relation.relatedModelClass.query().childQueryOf(builder).patch(patch).copyFrom(builder, /where/i).whereInComposite(this.relation.relatedModelClass.getFullIdColumn(), this.ids).modify(this.relation.modify);
};
HasManyRelateOperation.prototype.onAfterInternal = function onAfterInternal() {
return this.input;
};
return HasManyRelateOperation;
}(_QueryBuilderOperation2.default);
exports.default = HasManyRelateOperation;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhhc01hbnlSZWxhdGVPcGVyYXRpb24uanMiXSwibmFtZXMiOlsiSGFzTWFueVJlbGF0ZU9wZXJhdGlvbiIsIm5hbWUiLCJvcHQiLCJpc1dyaXRlT3BlcmF0aW9uIiwicmVsYXRpb24iLCJvd25lciIsImlucHV0IiwiaWRzIiwiY2FsbCIsImJ1aWxkZXIiLCJhcmdzIiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJnZXRJZFByb3BlcnR5QXJyYXkiLCJhcnJheU91dHB1dCIsInF1ZXJ5RXhlY3V0b3IiLCJwYXRjaCIsImkiLCJsIiwicmVsYXRlZFByb3AiLCJsZW5ndGgiLCJvd25lclByb3AiLCJxdWVyeSIsImNoaWxkUXVlcnlPZiIsImNvcHlGcm9tIiwid2hlcmVJbkNvbXBvc2l0ZSIsImdldEZ1bGxJZENvbHVtbiIsIm1vZGlmeSIsIm9uQWZ0ZXJJbnRlcm5hbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7OztJQUVxQkEsc0I7OztBQUVuQixrQ0FBWUMsSUFBWixFQUFrQkMsR0FBbEIsRUFBdUI7QUFBQTs7QUFBQSwrREFDckIsaUNBQU1ELElBQU4sRUFBWUMsR0FBWixDQURxQjs7QUFHckIsVUFBS0MsZ0JBQUwsR0FBd0IsSUFBeEI7QUFDQSxVQUFLQyxRQUFMLEdBQWdCRixJQUFJRSxRQUFwQjtBQUNBLFVBQUtDLEtBQUwsR0FBYUgsSUFBSUcsS0FBakI7QUFDQSxVQUFLQyxLQUFMLEdBQWEsSUFBYjtBQUNBLFVBQUtDLEdBQUwsR0FBVyxJQUFYO0FBUHFCO0FBUXRCOzttQ0FFREMsSSxpQkFBS0MsTyxFQUFTQyxJLEVBQU07QUFDbEIsU0FBS0osS0FBTCxHQUFhSSxLQUFLLENBQUwsQ0FBYjtBQUNBLFNBQUtILEdBQUwsR0FBVyw0QkFBYUcsS0FBSyxDQUFMLENBQWIsRUFBc0IsS0FBS04sUUFBTCxDQUFjTyxpQkFBZCxDQUFnQ0Msa0JBQWhDLEVBQXRCLEVBQTRFLEVBQUNDLGFBQWEsSUFBZCxFQUE1RSxDQUFYO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsRzs7bUNBRURDLGEsMEJBQWNMLE8sRUFBUztBQUNyQixRQUFJTSxRQUFRLEVBQVo7O0FBRUEsU0FBSyxJQUFJQyxJQUFJLENBQVIsRUFBV0MsSUFBSSxLQUFLYixRQUFMLENBQWNjLFdBQWQsQ0FBMEJDLE1BQTlDLEVBQXNESCxJQUFJQyxDQUExRCxFQUE2RCxFQUFFRCxDQUEvRCxFQUFrRTtBQUNoRSxVQUFNRSxjQUFjLEtBQUtkLFFBQUwsQ0FBY2MsV0FBZCxDQUEwQkYsQ0FBMUIsQ0FBcEI7QUFDQSxVQUFNSSxZQUFZLEtBQUtoQixRQUFMLENBQWNnQixTQUFkLENBQXdCSixDQUF4QixDQUFsQjs7QUFFQUQsWUFBTUcsV0FBTixJQUFxQixLQUFLYixLQUFMLENBQVdlLFNBQVgsQ0FBckI7QUFDRDs7QUFFRCxXQUFPLEtBQUtoQixRQUFMLENBQWNPLGlCQUFkLENBQ0pVLEtBREksR0FFSkMsWUFGSSxDQUVTYixPQUZULEVBR0pNLEtBSEksQ0FHRUEsS0FIRixFQUlKUSxRQUpJLENBSUtkLE9BSkwsRUFJYyxRQUpkLEVBS0plLGdCQUxJLENBS2EsS0FBS3BCLFFBQUwsQ0FBY08saUJBQWQsQ0FBZ0NjLGVBQWhDLEVBTGIsRUFLZ0UsS0FBS2xCLEdBTHJFLEVBTUptQixNQU5JLENBTUcsS0FBS3RCLFFBQUwsQ0FBY3NCLE1BTmpCLENBQVA7QUFPRCxHOzttQ0FFREMsZSw4QkFBa0I7QUFDaEIsV0FBTyxLQUFLckIsS0FBWjtBQUNELEc7Ozs7O2tCQXZDa0JOLHNCIiwiZmlsZSI6Ikhhc01hbnlSZWxhdGVPcGVyYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9ybWFsaXplSWRzIGZyb20gJy4uLy4uL3V0aWxzL25vcm1hbGl6ZUlkcyc7XG5pbXBvcnQgUXVlcnlCdWlsZGVyT3BlcmF0aW9uIGZyb20gJy4uLy4uL3F1ZXJ5QnVpbGRlci9vcGVyYXRpb25zL1F1ZXJ5QnVpbGRlck9wZXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc01hbnlSZWxhdGVPcGVyYXRpb24gZXh0ZW5kcyBRdWVyeUJ1aWxkZXJPcGVyYXRpb24ge1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUsIG9wdCkge1xuICAgIHN1cGVyKG5hbWUsIG9wdCk7XG5cbiAgICB0aGlzLmlzV3JpdGVPcGVyYXRpb24gPSB0cnVlO1xuICAgIHRoaXMucmVsYXRpb24gPSBvcHQucmVsYXRpb247XG4gICAgdGhpcy5vd25lciA9IG9wdC5vd25lcjtcbiAgICB0aGlzLmlucHV0ID0gbnVsbDtcbiAgICB0aGlzLmlkcyA9IG51bGw7XG4gIH1cblxuICBjYWxsKGJ1aWxkZXIsIGFyZ3MpIHtcbiAgICB0aGlzLmlucHV0ID0gYXJnc1swXTtcbiAgICB0aGlzLmlkcyA9IG5vcm1hbGl6ZUlkcyhhcmdzWzBdLCB0aGlzLnJlbGF0aW9uLnJlbGF0ZWRNb2RlbENsYXNzLmdldElkUHJvcGVydHlBcnJheSgpLCB7YXJyYXlPdXRwdXQ6IHRydWV9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHF1ZXJ5RXhlY3V0b3IoYnVpbGRlcikge1xuICAgIHZhciBwYXRjaCA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlbGF0aW9uLnJlbGF0ZWRQcm9wLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgY29uc3QgcmVsYXRlZFByb3AgPSB0aGlzLnJlbGF0aW9uLnJlbGF0ZWRQcm9wW2ldO1xuICAgICAgY29uc3Qgb3duZXJQcm9wID0gdGhpcy5yZWxhdGlvbi5vd25lclByb3BbaV07XG5cbiAgICAgIHBhdGNoW3JlbGF0ZWRQcm9wXSA9IHRoaXMub3duZXJbb3duZXJQcm9wXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZWxhdGlvbi5yZWxhdGVkTW9kZWxDbGFzc1xuICAgICAgLnF1ZXJ5KClcbiAgICAgIC5jaGlsZFF1ZXJ5T2YoYnVpbGRlcilcbiAgICAgIC5wYXRjaChwYXRjaClcbiAgICAgIC5jb3B5RnJvbShidWlsZGVyLCAvd2hlcmUvaSlcbiAgICAgIC53aGVyZUluQ29tcG9zaXRlKHRoaXMucmVsYXRpb24ucmVsYXRlZE1vZGVsQ2xhc3MuZ2V0RnVsbElkQ29sdW1uKCksIHRoaXMuaWRzKVxuICAgICAgLm1vZGlmeSh0aGlzLnJlbGF0aW9uLm1vZGlmeSk7XG4gIH1cblxuICBvbkFmdGVySW50ZXJuYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQ7XG4gIH1cbn1cbiJdfQ==