remult 0.12.2 → 0.12.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/remult-knex/index.d.ts +7 -3
- package/remult-knex/index.js +25 -11
- package/src/shared-tests/db-tests.db-tests.js +112 -0
package/package.json
CHANGED
package/remult-knex/index.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { DataProvider, EntityDataProvider, EntityMetadata, FieldMetadata, Filter, Remult } from "..";
|
|
1
|
+
import { DataProvider, EntityDataProvider, EntityFilter, EntityMetadata, FieldMetadata, Filter, Remult } from "..";
|
|
2
2
|
import { Knex } from 'knex';
|
|
3
3
|
import { FilterConsumer } from "../src/filter/filter-interfaces";
|
|
4
|
-
import {
|
|
4
|
+
import { dbNameProvider } from "../src/filter/filter-consumer-bridge-to-sql-request";
|
|
5
5
|
export declare class KnexDataProvider implements DataProvider {
|
|
6
6
|
knex: Knex;
|
|
7
7
|
constructor(knex: Knex);
|
|
8
8
|
getEntityDataProvider(entity: EntityMetadata<any>): EntityDataProvider;
|
|
9
9
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
10
|
+
static customFilter(build: CustomKnexFilterBuilderFunction): EntityFilter<any>;
|
|
10
11
|
supportsCustomFilter?: boolean;
|
|
11
12
|
}
|
|
13
|
+
export declare type CustomKnexFilterBuilderFunction = () => Promise<(builder: Knex.QueryBuilder) => void>;
|
|
12
14
|
export declare class FilterConsumerBridgeToKnexRequest implements FilterConsumer {
|
|
13
15
|
private nameProvider;
|
|
14
16
|
_addWhere: boolean;
|
|
@@ -29,7 +31,9 @@ export declare class FilterConsumerBridgeToKnexRequest implements FilterConsumer
|
|
|
29
31
|
isLessThan(col: FieldMetadata, val: any): void;
|
|
30
32
|
containsCaseInsensitive(col: FieldMetadata, val: any): void;
|
|
31
33
|
private add;
|
|
32
|
-
databaseCustom(databaseCustom:
|
|
34
|
+
databaseCustom(databaseCustom: {
|
|
35
|
+
buildKnex: CustomKnexFilterBuilderFunction;
|
|
36
|
+
}): void;
|
|
33
37
|
}
|
|
34
38
|
export declare class KnexSchemaBuilder {
|
|
35
39
|
private knex;
|
package/remult-knex/index.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.createKnexDataProvider = exports.buildColumn = exports.KnexSchemaBuilder
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var __1 = require("..");
|
|
6
6
|
var knex_1 = require("knex");
|
|
7
|
+
var filter_interfaces_1 = require("../src/filter/filter-interfaces");
|
|
7
8
|
var filter_consumer_bridge_to_sql_request_1 = require("../src/filter/filter-consumer-bridge-to-sql-request");
|
|
8
9
|
var context_1 = require("../src/context");
|
|
9
10
|
var valueConverters_1 = require("../valueConverters");
|
|
@@ -43,6 +44,14 @@ var KnexDataProvider = /** @class */ (function () {
|
|
|
43
44
|
});
|
|
44
45
|
});
|
|
45
46
|
};
|
|
47
|
+
KnexDataProvider.customFilter = function (build) {
|
|
48
|
+
var _a;
|
|
49
|
+
return _a = {},
|
|
50
|
+
_a[filter_interfaces_1.customDatabaseFilterToken] = {
|
|
51
|
+
buildKnex: build
|
|
52
|
+
},
|
|
53
|
+
_a;
|
|
54
|
+
};
|
|
46
55
|
return KnexDataProvider;
|
|
47
56
|
}());
|
|
48
57
|
exports.KnexDataProvider = KnexDataProvider;
|
|
@@ -364,7 +373,6 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
|
|
|
364
373
|
};
|
|
365
374
|
FilterConsumerBridgeToKnexRequest.prototype.or = function (orElements) {
|
|
366
375
|
var _this = this;
|
|
367
|
-
var statement = '';
|
|
368
376
|
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
369
377
|
var result, _loop_1, this_1, orElements_1, orElements_1_1, element, e_5_1;
|
|
370
378
|
var e_5, _a;
|
|
@@ -476,16 +484,22 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
|
|
|
476
484
|
this.result.push(function (b) { return b.where(_this.nameProvider.nameOf(col), operator, col.valueConverter.toDb(val)); });
|
|
477
485
|
};
|
|
478
486
|
FilterConsumerBridgeToKnexRequest.prototype.databaseCustom = function (databaseCustom) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
487
|
+
var _this = this;
|
|
488
|
+
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
489
|
+
var _a, _b;
|
|
490
|
+
return tslib_1.__generator(this, function (_c) {
|
|
491
|
+
switch (_c.label) {
|
|
492
|
+
case 0:
|
|
493
|
+
if (!(databaseCustom === null || databaseCustom === void 0 ? void 0 : databaseCustom.buildKnex)) return [3 /*break*/, 2];
|
|
494
|
+
_b = (_a = this.result).push;
|
|
495
|
+
return [4 /*yield*/, databaseCustom.buildKnex()];
|
|
496
|
+
case 1:
|
|
497
|
+
_b.apply(_a, [_c.sent()]);
|
|
498
|
+
_c.label = 2;
|
|
499
|
+
case 2: return [2 /*return*/];
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
}); })());
|
|
489
503
|
};
|
|
490
504
|
return FilterConsumerBridgeToKnexRequest;
|
|
491
505
|
}());
|
|
@@ -20,6 +20,9 @@ var entityForCustomFilter_1 = require("../tests/entityForCustomFilter");
|
|
|
20
20
|
var entityWithValidationsOnColumn_1 = require("../tests/entityWithValidationsOnColumn");
|
|
21
21
|
var validators_1 = require("../validators");
|
|
22
22
|
var models_1 = require("../tests/testModel/models");
|
|
23
|
+
var backend_database_test_setup_backend_spec_1 = require("../backend-tests/backend-database-test-setup.backend-spec");
|
|
24
|
+
var __1 = require("../..");
|
|
25
|
+
var remult_knex_1 = require("../../remult-knex");
|
|
23
26
|
db_tests_setup_1.testAll("what", function (_a) {
|
|
24
27
|
var remult = _a.remult, createEntity = _a.createEntity;
|
|
25
28
|
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
@@ -1234,6 +1237,115 @@ db_tests_setup_1.testAll("filter", function (_a) {
|
|
|
1234
1237
|
});
|
|
1235
1238
|
});
|
|
1236
1239
|
}, false);
|
|
1240
|
+
backend_database_test_setup_backend_spec_1.testPostgresImplementation("sql filter", function (_a) {
|
|
1241
|
+
var createEntity = _a.createEntity;
|
|
1242
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1243
|
+
var s, _b;
|
|
1244
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1245
|
+
switch (_c.label) {
|
|
1246
|
+
case 0: return [4 /*yield*/, entityWithValidations_1.entityWithValidations.create4RowsInDp(createEntity)];
|
|
1247
|
+
case 1:
|
|
1248
|
+
s = _c.sent();
|
|
1249
|
+
_b = expect;
|
|
1250
|
+
return [4 /*yield*/, s.find({
|
|
1251
|
+
where: __1.SqlDatabase.customFilter(function (build) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1252
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1253
|
+
build.sql = s.metadata.fields.myId.options.dbName + ' in (1,3)';
|
|
1254
|
+
return [2 /*return*/];
|
|
1255
|
+
});
|
|
1256
|
+
}); })
|
|
1257
|
+
})];
|
|
1258
|
+
case 2:
|
|
1259
|
+
_b.apply(void 0, [(_c.sent()).length]).toBe(2);
|
|
1260
|
+
return [2 /*return*/];
|
|
1261
|
+
}
|
|
1262
|
+
});
|
|
1263
|
+
});
|
|
1264
|
+
}, false);
|
|
1265
|
+
backend_database_test_setup_backend_spec_1.testPostgresImplementation("sql filter2", function (_a) {
|
|
1266
|
+
var createEntity = _a.createEntity;
|
|
1267
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1268
|
+
var s, _b;
|
|
1269
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1270
|
+
switch (_c.label) {
|
|
1271
|
+
case 0: return [4 /*yield*/, entityWithValidations_1.entityWithValidations.create4RowsInDp(createEntity)];
|
|
1272
|
+
case 1:
|
|
1273
|
+
s = _c.sent();
|
|
1274
|
+
_b = expect;
|
|
1275
|
+
return [4 /*yield*/, s.find({
|
|
1276
|
+
where: {
|
|
1277
|
+
$or: [
|
|
1278
|
+
__1.SqlDatabase.customFilter(function (build) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1279
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1280
|
+
build.sql = s.metadata.fields.myId.options.dbName + ' in (1,3)';
|
|
1281
|
+
return [2 /*return*/];
|
|
1282
|
+
});
|
|
1283
|
+
}); }),
|
|
1284
|
+
{
|
|
1285
|
+
myId: 2
|
|
1286
|
+
}
|
|
1287
|
+
]
|
|
1288
|
+
}
|
|
1289
|
+
})];
|
|
1290
|
+
case 2:
|
|
1291
|
+
_b.apply(void 0, [(_c.sent()).length]).toBe(3);
|
|
1292
|
+
return [2 /*return*/];
|
|
1293
|
+
}
|
|
1294
|
+
});
|
|
1295
|
+
});
|
|
1296
|
+
}, false);
|
|
1297
|
+
backend_database_test_setup_backend_spec_1.testKnexPGSqlImpl("knex filter", function (_a) {
|
|
1298
|
+
var createEntity = _a.createEntity;
|
|
1299
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1300
|
+
var s, _b;
|
|
1301
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1302
|
+
switch (_c.label) {
|
|
1303
|
+
case 0: return [4 /*yield*/, entityWithValidations_1.entityWithValidations.create4RowsInDp(createEntity)];
|
|
1304
|
+
case 1:
|
|
1305
|
+
s = _c.sent();
|
|
1306
|
+
_b = expect;
|
|
1307
|
+
return [4 /*yield*/, s.find({
|
|
1308
|
+
where: remult_knex_1.KnexDataProvider.customFilter(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1309
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1310
|
+
return [2 /*return*/, function (build) { return build.whereIn(s.metadata.fields.myId.options.dbName, [1, 3]); }];
|
|
1311
|
+
});
|
|
1312
|
+
}); })
|
|
1313
|
+
})];
|
|
1314
|
+
case 2:
|
|
1315
|
+
_b.apply(void 0, [(_c.sent()).length]).toBe(2);
|
|
1316
|
+
return [2 /*return*/];
|
|
1317
|
+
}
|
|
1318
|
+
});
|
|
1319
|
+
});
|
|
1320
|
+
}, false);
|
|
1321
|
+
backend_database_test_setup_backend_spec_1.testKnexPGSqlImpl("knex filter2", function (_a) {
|
|
1322
|
+
var createEntity = _a.createEntity;
|
|
1323
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1324
|
+
var s, _b;
|
|
1325
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1326
|
+
switch (_c.label) {
|
|
1327
|
+
case 0: return [4 /*yield*/, entityWithValidations_1.entityWithValidations.create4RowsInDp(createEntity)];
|
|
1328
|
+
case 1:
|
|
1329
|
+
s = _c.sent();
|
|
1330
|
+
_b = expect;
|
|
1331
|
+
return [4 /*yield*/, s.find({
|
|
1332
|
+
where: {
|
|
1333
|
+
$or: [remult_knex_1.KnexDataProvider.customFilter(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1334
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1335
|
+
return [2 /*return*/, function (build) { return build.whereIn(s.metadata.fields.myId.options.dbName, [1, 3]); }];
|
|
1336
|
+
});
|
|
1337
|
+
}); }), {
|
|
1338
|
+
myId: 4
|
|
1339
|
+
}]
|
|
1340
|
+
}
|
|
1341
|
+
})];
|
|
1342
|
+
case 2:
|
|
1343
|
+
_b.apply(void 0, [(_c.sent()).length]).toBe(3);
|
|
1344
|
+
return [2 /*return*/];
|
|
1345
|
+
}
|
|
1346
|
+
});
|
|
1347
|
+
});
|
|
1348
|
+
}, false);
|
|
1237
1349
|
var testFilter = /** @class */ (function () {
|
|
1238
1350
|
function testFilter() {
|
|
1239
1351
|
this.id = 0;
|