@contember/engine-content-api 1.2.0-alpha.11 → 1.2.0-alpha.12
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/dist/src/mapper/select/WhereBuilder.d.ts +2 -0
- package/dist/src/mapper/select/WhereBuilder.d.ts.map +1 -1
- package/dist/src/mapper/select/WhereBuilder.js +43 -4
- package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/unit/whereBuilder.test.d.ts +2 -0
- package/dist/tests/cases/unit/whereBuilder.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/whereBuilder.test.js +75 -0
- package/dist/tests/cases/unit/whereBuilder.test.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/mapper/select/WhereBuilder.ts +53 -6
- package/tests/cases/unit/whereBuilder.test.ts +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whereBuilder.test.d.ts","sourceRoot":"","sources":["../../../../tests/cases/unit/whereBuilder.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const ConditionOptimizer_1 = require("../../../src/mapper/select/optimizer/ConditionOptimizer");
|
|
5
|
+
const schema_definition_1 = require("@contember/schema-definition");
|
|
6
|
+
const WhereOptimizer_1 = require("../../../src/mapper/select/optimizer/WhereOptimizer");
|
|
7
|
+
const mapper_1 = require("../../../src/mapper");
|
|
8
|
+
const database_1 = require("@contember/database");
|
|
9
|
+
var WhereBuilderModel;
|
|
10
|
+
(function (WhereBuilderModel) {
|
|
11
|
+
class Author {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.name = schema_definition_1.SchemaDefinition.stringColumn();
|
|
14
|
+
this.isPublic = schema_definition_1.SchemaDefinition.boolColumn().notNull();
|
|
15
|
+
this.articles = schema_definition_1.SchemaDefinition.oneHasMany(Article, 'author');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
WhereBuilderModel.Author = Author;
|
|
19
|
+
class Article {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.title = schema_definition_1.SchemaDefinition.stringColumn();
|
|
22
|
+
this.isPublic = schema_definition_1.SchemaDefinition.boolColumn().notNull();
|
|
23
|
+
this.author = schema_definition_1.SchemaDefinition.manyHasOne(Author, 'articles');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
WhereBuilderModel.Article = Article;
|
|
27
|
+
})(WhereBuilderModel || (WhereBuilderModel = {}));
|
|
28
|
+
const createWhere = (schema, where) => {
|
|
29
|
+
const pathFactory = new mapper_1.PathFactory();
|
|
30
|
+
const joinBuilder = new mapper_1.JoinBuilder(schema.model);
|
|
31
|
+
const conditionBuilder = new mapper_1.ConditionBuilder();
|
|
32
|
+
const whereOptimizer = new WhereOptimizer_1.WhereOptimizer(schema.model, new ConditionOptimizer_1.ConditionOptimizer());
|
|
33
|
+
const whereBuilder = new mapper_1.WhereBuilder(schema.model, joinBuilder, conditionBuilder, pathFactory, whereOptimizer);
|
|
34
|
+
const qb = database_1.SelectBuilder.create()
|
|
35
|
+
.from('author', 'root_');
|
|
36
|
+
return whereBuilder.build(qb, schema.model.entities.Author, pathFactory.create([]), where).options.where.compile().sql;
|
|
37
|
+
};
|
|
38
|
+
(0, vitest_1.describe)('where builder', () => {
|
|
39
|
+
(0, vitest_1.it)('where on has-many relation with AND outside', () => {
|
|
40
|
+
const schema = (0, schema_definition_1.createSchema)(WhereBuilderModel);
|
|
41
|
+
const where = createWhere(schema, {
|
|
42
|
+
and: [
|
|
43
|
+
{
|
|
44
|
+
articles: { isPublic: { eq: true } },
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
articles: { title: { eq: 'Hello' } },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
vitest_1.assert.equal(where, ' where exists (select 1 from "__SCHEMA__"."article" as "sub_" where "root_"."id" = "sub_"."author_id" and "sub_"."is_public" = ?) and exists (select 1 from "__SCHEMA__"."article" as "sub_" where "root_"."id" = "sub_"."author_id" and "sub_"."title" = ?)');
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.it)('where on has-many relation with AND inside', () => {
|
|
54
|
+
const schema = (0, schema_definition_1.createSchema)(WhereBuilderModel);
|
|
55
|
+
const where = createWhere(schema, {
|
|
56
|
+
articles: {
|
|
57
|
+
and: [
|
|
58
|
+
{ isPublic: { eq: true } },
|
|
59
|
+
{ title: { eq: 'Hello' } },
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
vitest_1.assert.equal(where, ' where exists (select 1 from "__SCHEMA__"."article" as "sub_" where "root_"."id" = "sub_"."author_id" and "sub_"."is_public" = ? and "sub_"."title" = ?)');
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.it)('where on has-many relation with isNull', () => {
|
|
66
|
+
const schema = (0, schema_definition_1.createSchema)(WhereBuilderModel);
|
|
67
|
+
const where = createWhere(schema, {
|
|
68
|
+
articles: {
|
|
69
|
+
id: { isNull: true },
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
vitest_1.assert.equal(where, ' where exists (select 1 from (select "root_"."id") as "sub2_" left join "__SCHEMA__"."article" as "sub_" on "sub2_"."id" = "sub_"."author_id" where "sub_"."id" is null)');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=whereBuilder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whereBuilder.test.js","sourceRoot":"","sources":["../../../../tests/cases/unit/whereBuilder.test.ts"],"names":[],"mappings":"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"}
|