@stormzx/sqlbuilder
Version:
A simple sql builder.
63 lines (45 loc) • 1.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var _fragment = _interopRequireDefault(require("./fragment"));
var _utils = require("../utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const NATURAL_NUMBER_PATTERN = /^\d+$/;
class LimitFragment extends _fragment.default {
#rows = null;
#offset = 0;
get priority() {
return 800;
}
get sql() {
return `limit ${this.#offset}, ${this.#rows}`;
}
get countSql() {
return '';
}
limit(offset, rows) {
if (_lodash.default.isObject(offset)) {
let pagination = offset;
let page = pagination.page ?? 1;
let size = (pagination.size || pagination.pageSize) ?? 10;
if (!NATURAL_NUMBER_PATTERN.test(page) || !NATURAL_NUMBER_PATTERN.test(size)) {
throw new Error('Invalid page or size');
}
return this.limit((page - 1) * size, size);
}
if (rows == undefined) {
rows = offset;
offset = 0;
}
if (!NATURAL_NUMBER_PATTERN.test(offset) || !NATURAL_NUMBER_PATTERN.test(rows)) {
throw new Error('offset and rows must be natural number');
}
this.#rows = parseInt(rows);
this.#offset = parseInt(offset);
return this;
}
}
exports.default = LimitFragment;