@balena/abstract-sql-compiler 11.0.0-build-11-x-45529f014aa1c181f338c0f7348767f2990a9084-1 → 11.0.0-build-11-x-7511b8ebe5a9461f20add0ed97d0670ed3b5a479-1
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 +5 -2
- package/.github/workflows/flowzone.yml +0 -21
- package/.husky/pre-commit +0 -2
- package/.versionbot/CHANGELOG.yml +0 -10729
- package/CHANGELOG.md +0 -3515
- package/repo.yml +0 -12
- package/src/abstract-sql-compiler.ts +0 -1138
- package/src/abstract-sql-optimizer.ts +0 -1632
- package/src/abstract-sql-rules-to-sql.ts +0 -1730
- package/src/abstract-sql-schema-optimizer.ts +0 -172
- package/src/referenced-fields.ts +0 -600
- package/test/abstract-sql/aggregate-json.ts +0 -49
- package/test/abstract-sql/aggregate.ts +0 -161
- package/test/abstract-sql/and-or-boolean-optimisations.ts +0 -115
- package/test/abstract-sql/case-when-else.ts +0 -48
- package/test/abstract-sql/cast.ts +0 -25
- package/test/abstract-sql/coalesce.ts +0 -24
- package/test/abstract-sql/comparisons.ts +0 -360
- package/test/abstract-sql/dates.ts +0 -512
- package/test/abstract-sql/duration.ts +0 -56
- package/test/abstract-sql/empty-query-optimisations.ts +0 -54
- package/test/abstract-sql/functions-wrapper.ts +0 -70
- package/test/abstract-sql/get-referenced-fields.ts +0 -674
- package/test/abstract-sql/get-rule-referenced-fields.ts +0 -345
- package/test/abstract-sql/insert-query.ts +0 -22
- package/test/abstract-sql/is-distinct.ts +0 -102
- package/test/abstract-sql/joins.ts +0 -84
- package/test/abstract-sql/json.ts +0 -58
- package/test/abstract-sql/math.ts +0 -467
- package/test/abstract-sql/nested-in-optimisations.ts +0 -200
- package/test/abstract-sql/not-not-optimisations.ts +0 -15
- package/test/abstract-sql/schema-checks.ts +0 -168
- package/test/abstract-sql/schema-informative-reference.ts +0 -420
- package/test/abstract-sql/schema-rule-optimization.ts +0 -120
- package/test/abstract-sql/schema-rule-to-check.ts +0 -393
- package/test/abstract-sql/schema-views.ts +0 -73
- package/test/abstract-sql/test.ts +0 -192
- package/test/abstract-sql/text.ts +0 -168
- package/test/model.sbvr +0 -60
- package/test/odata/expand.ts +0 -674
- package/test/odata/fields.ts +0 -59
- package/test/odata/filterby.ts +0 -1517
- package/test/odata/orderby.ts +0 -96
- package/test/odata/paging.ts +0 -48
- package/test/odata/resource-parsing.ts +0 -568
- package/test/odata/select.ts +0 -119
- package/test/odata/stress.ts +0 -93
- package/test/odata/test.ts +0 -297
- package/test/sbvr/pilots.ts +0 -1097
- package/test/sbvr/reference-type.ts +0 -211
- package/test/sbvr/test.ts +0 -101
- package/tsconfig.build.json +0 -6
- package/tsconfig.json +0 -25
package/test/sbvr/pilots.ts
DELETED
@@ -1,1097 +0,0 @@
|
|
1
|
-
import fs from 'node:fs';
|
2
|
-
const typeVocab = fs.readFileSync(
|
3
|
-
new URL(import.meta.resolve('@balena/sbvr-types/Type.sbvr')),
|
4
|
-
'utf8',
|
5
|
-
);
|
6
|
-
import { getTestHelpers } from './test.js';
|
7
|
-
const test = getTestHelpers(typeVocab);
|
8
|
-
|
9
|
-
const modifiedAtTrigger = (tableName: string) => `\
|
10
|
-
DO
|
11
|
-
$$
|
12
|
-
BEGIN
|
13
|
-
IF NOT EXISTS(
|
14
|
-
SELECT 1
|
15
|
-
FROM "information_schema"."triggers"
|
16
|
-
WHERE "event_object_table" = '${tableName}'
|
17
|
-
AND "trigger_name" = '${tableName}_trigger_update_modified_at'
|
18
|
-
) THEN
|
19
|
-
CREATE TRIGGER "${tableName}_trigger_update_modified_at"
|
20
|
-
BEFORE UPDATE ON "${tableName}"
|
21
|
-
FOR EACH ROW
|
22
|
-
EXECUTE PROCEDURE "trigger_update_modified_at"();
|
23
|
-
END IF;
|
24
|
-
END;
|
25
|
-
$$;`;
|
26
|
-
|
27
|
-
describe('pilots', function () {
|
28
|
-
test(
|
29
|
-
`\
|
30
|
-
Term: name
|
31
|
-
Concept Type: Short Text (Type)
|
32
|
-
Term: years of experience
|
33
|
-
Concept Type: Integer (Type)
|
34
|
-
Term: person
|
35
|
-
Term: pilot
|
36
|
-
Concept Type: person
|
37
|
-
Reference Scheme: name
|
38
|
-
Term: plane
|
39
|
-
Reference Scheme: name
|
40
|
-
Fact Type: pilot has name
|
41
|
-
Necessity: each pilot has exactly one name
|
42
|
-
Fact Type: pilot has years of experience
|
43
|
-
Necessity: each pilot has exactly one years of experience
|
44
|
-
Fact Type: plane has name
|
45
|
-
Necessity: each plane has exactly one name
|
46
|
-
Definition: "planeA" or "planeB" or "planeC"
|
47
|
-
Fact Type: pilot can fly plane
|
48
|
-
Synonymous Form: plane can be flown by pilot
|
49
|
-
Fact Type: pilot is experienced
|
50
|
-
Term: veteran pilot
|
51
|
-
Definition: pilot that can fly at least 2 planes
|
52
|
-
|
53
|
-
-- Test circular dependency
|
54
|
-
Term: licence
|
55
|
-
Fact type: pilot has licence
|
56
|
-
Necessity: each pilot has exactly one licence
|
57
|
-
Fact type: licence was granted by pilot
|
58
|
-
Necessity: each licence was granted by exactly one pilot`,
|
59
|
-
[
|
60
|
-
`\
|
61
|
-
DO $$
|
62
|
-
BEGIN
|
63
|
-
CREATE FUNCTION "trigger_update_modified_at"()
|
64
|
-
RETURNS TRIGGER AS $fn$
|
65
|
-
BEGIN
|
66
|
-
NEW."modified at" = NOW();
|
67
|
-
RETURN NEW;
|
68
|
-
END;
|
69
|
-
$fn$ LANGUAGE plpgsql;
|
70
|
-
EXCEPTION WHEN duplicate_function THEN
|
71
|
-
NULL;
|
72
|
-
END;
|
73
|
-
$$;`,
|
74
|
-
`\
|
75
|
-
CREATE TABLE IF NOT EXISTS "person" (
|
76
|
-
"created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
77
|
-
, "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
78
|
-
, "id" SERIAL NOT NULL PRIMARY KEY
|
79
|
-
);`,
|
80
|
-
modifiedAtTrigger('person'),
|
81
|
-
`\
|
82
|
-
CREATE TABLE IF NOT EXISTS "plane" (
|
83
|
-
"created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
84
|
-
, "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
85
|
-
, "id" SERIAL NOT NULL PRIMARY KEY
|
86
|
-
, "name" VARCHAR(255) NOT NULL CHECK ("name" IN ('planeA', 'planeB', 'planeC'))
|
87
|
-
);`,
|
88
|
-
modifiedAtTrigger('plane'),
|
89
|
-
`\
|
90
|
-
CREATE TABLE IF NOT EXISTS "veteran pilot" (
|
91
|
-
"created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
92
|
-
, "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
93
|
-
, "id" SERIAL NOT NULL PRIMARY KEY
|
94
|
-
);`,
|
95
|
-
modifiedAtTrigger('veteran pilot'),
|
96
|
-
`\
|
97
|
-
CREATE TABLE IF NOT EXISTS "licence" (
|
98
|
-
"created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
99
|
-
, "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
100
|
-
, "id" SERIAL NOT NULL PRIMARY KEY
|
101
|
-
, "was granted by-pilot" INTEGER NOT NULL
|
102
|
-
);`,
|
103
|
-
modifiedAtTrigger('licence'),
|
104
|
-
`\
|
105
|
-
CREATE TABLE IF NOT EXISTS "pilot" (
|
106
|
-
"created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
107
|
-
, "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
108
|
-
, "id" SERIAL NOT NULL PRIMARY KEY
|
109
|
-
, "person" INTEGER NOT NULL
|
110
|
-
, "name" VARCHAR(255) NOT NULL
|
111
|
-
, "years of experience" INTEGER NOT NULL
|
112
|
-
, "is experienced" BOOLEAN DEFAULT FALSE NOT NULL
|
113
|
-
, "licence" INTEGER NOT NULL
|
114
|
-
, FOREIGN KEY ("person") REFERENCES "person" ("id")
|
115
|
-
, FOREIGN KEY ("licence") REFERENCES "licence" ("id")
|
116
|
-
);`,
|
117
|
-
modifiedAtTrigger('pilot'),
|
118
|
-
`\
|
119
|
-
CREATE TABLE IF NOT EXISTS "pilot-can fly-plane" (
|
120
|
-
"created at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
121
|
-
, "modified at" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
122
|
-
, "pilot" INTEGER NOT NULL
|
123
|
-
, "can fly-plane" INTEGER NOT NULL
|
124
|
-
, "id" SERIAL NOT NULL PRIMARY KEY
|
125
|
-
, FOREIGN KEY ("pilot") REFERENCES "pilot" ("id")
|
126
|
-
, FOREIGN KEY ("can fly-plane") REFERENCES "plane" ("id")
|
127
|
-
, UNIQUE("pilot", "can fly-plane")
|
128
|
-
);`,
|
129
|
-
modifiedAtTrigger('pilot-can fly-plane'),
|
130
|
-
`\
|
131
|
-
DO $$
|
132
|
-
BEGIN
|
133
|
-
IF NOT EXISTS (
|
134
|
-
SELECT 1
|
135
|
-
FROM information_schema.table_constraints tc
|
136
|
-
JOIN information_schema.key_column_usage kcu USING (constraint_catalog, constraint_schema, constraint_name)
|
137
|
-
JOIN information_schema.constraint_column_usage ccu USING (constraint_catalog, constraint_schema, constraint_name)
|
138
|
-
WHERE constraint_type = 'FOREIGN KEY'
|
139
|
-
AND tc.table_schema = CURRENT_SCHEMA()
|
140
|
-
AND tc.table_name = 'licence'
|
141
|
-
AND kcu.column_name = 'was granted by-pilot'
|
142
|
-
AND ccu.table_schema = CURRENT_SCHEMA()
|
143
|
-
AND ccu.table_name = 'pilot'
|
144
|
-
AND ccu.column_name = 'id'
|
145
|
-
) THEN
|
146
|
-
ALTER TABLE "licence"
|
147
|
-
ADD CONSTRAINT "licence_was granted by-pilot_fkey"
|
148
|
-
FOREIGN KEY ("was granted by-pilot") REFERENCES "pilot" ("id");
|
149
|
-
END IF;
|
150
|
-
END;
|
151
|
-
$$;`,
|
152
|
-
],
|
153
|
-
);
|
154
|
-
|
155
|
-
test.rule(
|
156
|
-
'It is necessary that each pilot can fly at least 1 plane',
|
157
|
-
`\
|
158
|
-
SELECT (
|
159
|
-
SELECT COUNT(*)
|
160
|
-
FROM "pilot" AS "pilot.0"
|
161
|
-
WHERE NOT EXISTS (
|
162
|
-
SELECT 1
|
163
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
164
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
165
|
-
)
|
166
|
-
AND ($1 = '{}'
|
167
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
168
|
-
) = 0 AS "result";`,
|
169
|
-
);
|
170
|
-
|
171
|
-
test.rule(
|
172
|
-
'It is necessary that each pilot that is experienced, can fly at least 2 planes',
|
173
|
-
`\
|
174
|
-
SELECT (
|
175
|
-
SELECT COUNT(*)
|
176
|
-
FROM "pilot" AS "pilot.0"
|
177
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
178
|
-
AND NOT (
|
179
|
-
(
|
180
|
-
SELECT COUNT(*)
|
181
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
182
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
183
|
-
) >= 2
|
184
|
-
)
|
185
|
-
AND ($1 = '{}'
|
186
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
187
|
-
) = 0 AS "result";`,
|
188
|
-
);
|
189
|
-
|
190
|
-
test.rule(
|
191
|
-
'It is necessary that each pilot that is not experienced, can fly at most 2 planes',
|
192
|
-
`\
|
193
|
-
SELECT (
|
194
|
-
SELECT COUNT(*)
|
195
|
-
FROM "pilot" AS "pilot.0"
|
196
|
-
WHERE "pilot.0"."is experienced" = FALSE
|
197
|
-
AND (
|
198
|
-
SELECT COUNT(*)
|
199
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
200
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
201
|
-
) >= 3
|
202
|
-
AND ($1 = '{}'
|
203
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
204
|
-
) = 0 AS "result";`,
|
205
|
-
);
|
206
|
-
|
207
|
-
test.rule(
|
208
|
-
'It is necessary that each pilot that can fly at most 2 planes, is not experienced',
|
209
|
-
`\
|
210
|
-
SELECT (
|
211
|
-
SELECT COUNT(*)
|
212
|
-
FROM "pilot" AS "pilot.0"
|
213
|
-
WHERE NOT (
|
214
|
-
(
|
215
|
-
SELECT COUNT(*)
|
216
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
217
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
218
|
-
) >= 3
|
219
|
-
)
|
220
|
-
AND "pilot.0"."is experienced" != FALSE
|
221
|
-
AND ($1 = '{}'
|
222
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
223
|
-
) = 0 AS "result";`,
|
224
|
-
);
|
225
|
-
|
226
|
-
test.rule(
|
227
|
-
'It is necessary that each plane that at least 3 pilots can fly, has a name',
|
228
|
-
`\
|
229
|
-
SELECT (
|
230
|
-
SELECT COUNT(*)
|
231
|
-
FROM "plane" AS "plane.0"
|
232
|
-
WHERE (
|
233
|
-
SELECT COUNT(*)
|
234
|
-
FROM "pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
235
|
-
WHERE "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
236
|
-
) >= 3
|
237
|
-
AND "plane.0"."name" IS NULL
|
238
|
-
AND ($1 = '{}'
|
239
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
240
|
-
) = 0 AS "result";`,
|
241
|
-
);
|
242
|
-
|
243
|
-
test.rule(
|
244
|
-
'It is necessary that each plane that at least 3 pilots that are experienced can fly, has a name',
|
245
|
-
`\
|
246
|
-
SELECT (
|
247
|
-
SELECT COUNT(*)
|
248
|
-
FROM "plane" AS "plane.0"
|
249
|
-
WHERE (
|
250
|
-
SELECT COUNT(*)
|
251
|
-
FROM "pilot" AS "pilot.1",
|
252
|
-
"pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
253
|
-
WHERE "pilot.1"."is experienced" = TRUE
|
254
|
-
AND "pilot.1-can fly-plane.0"."pilot" = "pilot.1"."id"
|
255
|
-
AND "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
256
|
-
) >= 3
|
257
|
-
AND "plane.0"."name" IS NULL
|
258
|
-
AND ($1 = '{}'
|
259
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
260
|
-
) = 0 AS "result";`,
|
261
|
-
);
|
262
|
-
|
263
|
-
(function () {
|
264
|
-
const sql = `\
|
265
|
-
SELECT (
|
266
|
-
SELECT COUNT(*)
|
267
|
-
FROM "plane" AS "plane.0"
|
268
|
-
WHERE (
|
269
|
-
SELECT COUNT(*)
|
270
|
-
FROM "pilot" AS "pilot.1",
|
271
|
-
"pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
272
|
-
WHERE "pilot.1"."is experienced" = FALSE
|
273
|
-
AND "pilot.1-can fly-plane.0"."pilot" = "pilot.1"."id"
|
274
|
-
AND "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
275
|
-
) >= 3
|
276
|
-
AND "plane.0"."name" IS NULL
|
277
|
-
AND ($1 = '{}'
|
278
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
279
|
-
) = 0 AS "result";`;
|
280
|
-
test.rule(
|
281
|
-
'It is necessary that each plane that at least 3 pilots that are not experienced can fly, has a name',
|
282
|
-
sql,
|
283
|
-
);
|
284
|
-
test.rule(
|
285
|
-
"It is necessary that each plane that at least 3 pilots that aren't experienced can fly, has a name",
|
286
|
-
sql,
|
287
|
-
);
|
288
|
-
})();
|
289
|
-
|
290
|
-
test.rule(
|
291
|
-
'It is necessary that each plane that at least 3 pilot that is experienced, can fly, has a name.',
|
292
|
-
`\
|
293
|
-
SELECT (
|
294
|
-
SELECT COUNT(*)
|
295
|
-
FROM "plane" AS "plane.0"
|
296
|
-
WHERE (
|
297
|
-
SELECT COUNT(*)
|
298
|
-
FROM "pilot" AS "pilot.1",
|
299
|
-
"pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
300
|
-
WHERE "pilot.1"."is experienced" = TRUE
|
301
|
-
AND "pilot.1-can fly-plane.0"."pilot" = "pilot.1"."id"
|
302
|
-
AND "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
303
|
-
) >= 3
|
304
|
-
AND "plane.0"."name" IS NULL
|
305
|
-
AND ($1 = '{}'
|
306
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
307
|
-
) = 0 AS "result";`,
|
308
|
-
);
|
309
|
-
|
310
|
-
test.rule(
|
311
|
-
'It is necessary that each plane that at least 3 pilots that a name is of can fly, has a name',
|
312
|
-
`\
|
313
|
-
SELECT (
|
314
|
-
SELECT COUNT(*)
|
315
|
-
FROM "plane" AS "plane.0"
|
316
|
-
WHERE (
|
317
|
-
SELECT COUNT(*)
|
318
|
-
FROM "pilot" AS "pilot.1",
|
319
|
-
"pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
320
|
-
WHERE "pilot.1"."name" IS NOT NULL
|
321
|
-
AND "pilot.1-can fly-plane.0"."pilot" = "pilot.1"."id"
|
322
|
-
AND "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
323
|
-
) >= 3
|
324
|
-
AND "plane.0"."name" IS NULL
|
325
|
-
AND ($1 = '{}'
|
326
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
327
|
-
) = 0 AS "result";`,
|
328
|
-
);
|
329
|
-
|
330
|
-
test.rule(
|
331
|
-
'It is necessary that each pilot has a years of experience that is greater than 0',
|
332
|
-
`\
|
333
|
-
SELECT (
|
334
|
-
SELECT COUNT(*)
|
335
|
-
FROM "pilot" AS "pilot.0"
|
336
|
-
WHERE NOT (
|
337
|
-
0 < "pilot.0"."years of experience"
|
338
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
339
|
-
)
|
340
|
-
AND ($1 = '{}'
|
341
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
342
|
-
) = 0 AS "result";`,
|
343
|
-
);
|
344
|
-
|
345
|
-
test.rule(
|
346
|
-
'It is necessary that each plane can be flown by at least 1 pilot',
|
347
|
-
`\
|
348
|
-
SELECT (
|
349
|
-
SELECT COUNT(*)
|
350
|
-
FROM "plane" AS "plane.0"
|
351
|
-
WHERE NOT EXISTS (
|
352
|
-
SELECT 1
|
353
|
-
FROM "pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
354
|
-
WHERE "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
355
|
-
)
|
356
|
-
AND ($1 = '{}'
|
357
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
358
|
-
) = 0 AS "result";`,
|
359
|
-
);
|
360
|
-
|
361
|
-
// OR
|
362
|
-
test.rule(
|
363
|
-
'It is necessary that each pilot that is experienced, can fly at least 2 planes or has a years of experience that is greater than 5',
|
364
|
-
`\
|
365
|
-
SELECT (
|
366
|
-
SELECT COUNT(*)
|
367
|
-
FROM "pilot" AS "pilot.0"
|
368
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
369
|
-
AND NOT (
|
370
|
-
((
|
371
|
-
SELECT COUNT(*)
|
372
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
373
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
374
|
-
) >= 2
|
375
|
-
OR 5 < "pilot.0"."years of experience"
|
376
|
-
AND "pilot.0"."years of experience" IS NOT NULL)
|
377
|
-
)
|
378
|
-
AND ($1 = '{}'
|
379
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
380
|
-
) = 0 AS "result";`,
|
381
|
-
);
|
382
|
-
|
383
|
-
test.rule(
|
384
|
-
'It is necessary that each pilot that is experienced or can fly at least 2 planes, has a years of experience that is greater than 5',
|
385
|
-
`\
|
386
|
-
SELECT (
|
387
|
-
SELECT COUNT(*)
|
388
|
-
FROM "pilot" AS "pilot.0"
|
389
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
390
|
-
OR (
|
391
|
-
SELECT COUNT(*)
|
392
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
393
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
394
|
-
) >= 2)
|
395
|
-
AND NOT (
|
396
|
-
5 < "pilot.0"."years of experience"
|
397
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
398
|
-
)
|
399
|
-
AND ($1 = '{}'
|
400
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
401
|
-
) = 0 AS "result";`,
|
402
|
-
);
|
403
|
-
|
404
|
-
test.rule(
|
405
|
-
'It is necessary that each pilot that is experienced or can fly at least 3 planes or can fly exactly one plane, has a years of experience that is greater than 5',
|
406
|
-
`\
|
407
|
-
SELECT (
|
408
|
-
SELECT COUNT(*)
|
409
|
-
FROM "pilot" AS "pilot.0"
|
410
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
411
|
-
OR (
|
412
|
-
SELECT COUNT(*)
|
413
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
414
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
415
|
-
) >= 3
|
416
|
-
OR (
|
417
|
-
SELECT COUNT(*)
|
418
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
419
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
420
|
-
) = 1)
|
421
|
-
AND NOT (
|
422
|
-
5 < "pilot.0"."years of experience"
|
423
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
424
|
-
)
|
425
|
-
AND ($1 = '{}'
|
426
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
427
|
-
) = 0 AS "result";`,
|
428
|
-
);
|
429
|
-
|
430
|
-
test.rule(
|
431
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes or exactly one plane',
|
432
|
-
`\
|
433
|
-
SELECT (
|
434
|
-
SELECT COUNT(*)
|
435
|
-
FROM "pilot" AS "pilot.0"
|
436
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
437
|
-
AND NOT (
|
438
|
-
((
|
439
|
-
SELECT COUNT(*)
|
440
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
441
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
442
|
-
) >= 3
|
443
|
-
OR (
|
444
|
-
SELECT COUNT(*)
|
445
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
446
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
447
|
-
) = 1)
|
448
|
-
)
|
449
|
-
AND ($1 = '{}'
|
450
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
451
|
-
) = 0 AS "result";`,
|
452
|
-
);
|
453
|
-
|
454
|
-
test.rule(
|
455
|
-
'It is necessary that each pilot that can fly at least 3 planes or exactly one plane, is experienced',
|
456
|
-
`\
|
457
|
-
SELECT (
|
458
|
-
SELECT COUNT(*)
|
459
|
-
FROM "pilot" AS "pilot.0"
|
460
|
-
WHERE ((
|
461
|
-
SELECT COUNT(*)
|
462
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
463
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
464
|
-
) >= 3
|
465
|
-
OR (
|
466
|
-
SELECT COUNT(*)
|
467
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
468
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
469
|
-
) = 1)
|
470
|
-
AND "pilot.0"."is experienced" != TRUE
|
471
|
-
AND ($1 = '{}'
|
472
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
473
|
-
) = 0 AS "result";`,
|
474
|
-
);
|
475
|
-
|
476
|
-
test.rule(
|
477
|
-
'It is necessary that each pilot can fly at least one plane or a pilot can fly at least 10 planes',
|
478
|
-
`\
|
479
|
-
SELECT ((
|
480
|
-
SELECT COUNT(*)
|
481
|
-
FROM "pilot" AS "pilot.0"
|
482
|
-
WHERE NOT EXISTS (
|
483
|
-
SELECT 1
|
484
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
485
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
486
|
-
)
|
487
|
-
) = 0
|
488
|
-
OR EXISTS (
|
489
|
-
SELECT 1
|
490
|
-
FROM "pilot" AS "pilot.2"
|
491
|
-
WHERE (
|
492
|
-
SELECT COUNT(*)
|
493
|
-
FROM "pilot-can fly-plane" AS "pilot.2-can fly-plane.3"
|
494
|
-
WHERE "pilot.2-can fly-plane.3"."pilot" = "pilot.2"."id"
|
495
|
-
) >= 10
|
496
|
-
)) AS "result";`,
|
497
|
-
);
|
498
|
-
|
499
|
-
test.rule(
|
500
|
-
'It is necessary that each plane that at least 3 pilots can fly or exactly one pilot can fly, has a name',
|
501
|
-
`\
|
502
|
-
SELECT (
|
503
|
-
SELECT COUNT(*)
|
504
|
-
FROM "plane" AS "plane.0"
|
505
|
-
WHERE ((
|
506
|
-
SELECT COUNT(*)
|
507
|
-
FROM "pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
508
|
-
WHERE "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
509
|
-
) >= 3
|
510
|
-
OR (
|
511
|
-
SELECT COUNT(*)
|
512
|
-
FROM "pilot-can fly-plane" AS "pilot.2-can fly-plane.0"
|
513
|
-
WHERE "pilot.2-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
514
|
-
) = 1)
|
515
|
-
AND "plane.0"."name" IS NULL
|
516
|
-
AND ($1 = '{}'
|
517
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
518
|
-
) = 0 AS "result";`,
|
519
|
-
);
|
520
|
-
|
521
|
-
// AND
|
522
|
-
test.rule(
|
523
|
-
'It is necessary that each pilot that is experienced, can fly at least 2 planes and has a years of experience that is greater than 5',
|
524
|
-
`\
|
525
|
-
SELECT (
|
526
|
-
SELECT COUNT(*)
|
527
|
-
FROM "pilot" AS "pilot.0"
|
528
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
529
|
-
AND NOT (
|
530
|
-
(
|
531
|
-
SELECT COUNT(*)
|
532
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
533
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
534
|
-
) >= 2
|
535
|
-
AND 5 < "pilot.0"."years of experience"
|
536
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
537
|
-
)
|
538
|
-
AND ($1 = '{}'
|
539
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
540
|
-
) = 0 AS "result";`,
|
541
|
-
);
|
542
|
-
|
543
|
-
test.rule(
|
544
|
-
'It is necessary that each pilot that is experienced and can fly at least 2 planes, has a years of experience that is greater than 5',
|
545
|
-
`\
|
546
|
-
SELECT (
|
547
|
-
SELECT COUNT(*)
|
548
|
-
FROM "pilot" AS "pilot.0"
|
549
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
550
|
-
AND (
|
551
|
-
SELECT COUNT(*)
|
552
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
553
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
554
|
-
) >= 2
|
555
|
-
AND NOT (
|
556
|
-
5 < "pilot.0"."years of experience"
|
557
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
558
|
-
)
|
559
|
-
AND ($1 = '{}'
|
560
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
561
|
-
) = 0 AS "result";`,
|
562
|
-
);
|
563
|
-
|
564
|
-
test.rule(
|
565
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes and exactly one plane',
|
566
|
-
`\
|
567
|
-
SELECT (
|
568
|
-
SELECT COUNT(*)
|
569
|
-
FROM "pilot" AS "pilot.0"
|
570
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
571
|
-
AND NOT (
|
572
|
-
(
|
573
|
-
SELECT COUNT(*)
|
574
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
575
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
576
|
-
) >= 3
|
577
|
-
AND (
|
578
|
-
SELECT COUNT(*)
|
579
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
580
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
581
|
-
) = 1
|
582
|
-
)
|
583
|
-
AND ($1 = '{}'
|
584
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
585
|
-
) = 0 AS "result";`,
|
586
|
-
);
|
587
|
-
|
588
|
-
test.rule(
|
589
|
-
'It is necessary that each pilot that can fly at least 3 planes and exactly one plane, is experienced',
|
590
|
-
`\
|
591
|
-
SELECT (
|
592
|
-
SELECT COUNT(*)
|
593
|
-
FROM "pilot" AS "pilot.0"
|
594
|
-
WHERE (
|
595
|
-
SELECT COUNT(*)
|
596
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
597
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
598
|
-
) >= 3
|
599
|
-
AND (
|
600
|
-
SELECT COUNT(*)
|
601
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
602
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
603
|
-
) = 1
|
604
|
-
AND "pilot.0"."is experienced" != TRUE
|
605
|
-
AND ($1 = '{}'
|
606
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
607
|
-
) = 0 AS "result";`,
|
608
|
-
);
|
609
|
-
|
610
|
-
test.rule(
|
611
|
-
'It is necessary that each pilot can fly at least one plane and a pilot can fly at least 10 planes',
|
612
|
-
`\
|
613
|
-
SELECT (
|
614
|
-
SELECT COUNT(*)
|
615
|
-
FROM "pilot" AS "pilot.0"
|
616
|
-
WHERE NOT EXISTS (
|
617
|
-
SELECT 1
|
618
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
619
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
620
|
-
)
|
621
|
-
) = 0
|
622
|
-
AND EXISTS (
|
623
|
-
SELECT 1
|
624
|
-
FROM "pilot" AS "pilot.2"
|
625
|
-
WHERE (
|
626
|
-
SELECT COUNT(*)
|
627
|
-
FROM "pilot-can fly-plane" AS "pilot.2-can fly-plane.3"
|
628
|
-
WHERE "pilot.2-can fly-plane.3"."pilot" = "pilot.2"."id"
|
629
|
-
) >= 10
|
630
|
-
) AS "result";`,
|
631
|
-
);
|
632
|
-
|
633
|
-
test.rule(
|
634
|
-
'It is necessary that each plane that at least 3 pilots can fly and exactly one pilot can fly, has a name',
|
635
|
-
`\
|
636
|
-
SELECT (
|
637
|
-
SELECT COUNT(*)
|
638
|
-
FROM "plane" AS "plane.0"
|
639
|
-
WHERE (
|
640
|
-
SELECT COUNT(*)
|
641
|
-
FROM "pilot-can fly-plane" AS "pilot.1-can fly-plane.0"
|
642
|
-
WHERE "pilot.1-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
643
|
-
) >= 3
|
644
|
-
AND (
|
645
|
-
SELECT COUNT(*)
|
646
|
-
FROM "pilot-can fly-plane" AS "pilot.2-can fly-plane.0"
|
647
|
-
WHERE "pilot.2-can fly-plane.0"."can fly-plane" = "plane.0"."id"
|
648
|
-
) = 1
|
649
|
-
AND "plane.0"."name" IS NULL
|
650
|
-
AND ($1 = '{}'
|
651
|
-
OR "plane.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
652
|
-
) = 0 AS "result";`,
|
653
|
-
);
|
654
|
-
|
655
|
-
// AND / OR
|
656
|
-
test.rule(
|
657
|
-
'It is necessary that each pilot that is experienced and can fly at least 3 planes or can fly exactly one plane, has a years of experience that is greater than 5',
|
658
|
-
`\
|
659
|
-
SELECT (
|
660
|
-
SELECT COUNT(*)
|
661
|
-
FROM "pilot" AS "pilot.0"
|
662
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
663
|
-
AND ((
|
664
|
-
SELECT COUNT(*)
|
665
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
666
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
667
|
-
) >= 3
|
668
|
-
OR (
|
669
|
-
SELECT COUNT(*)
|
670
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
671
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
672
|
-
) = 1)
|
673
|
-
AND NOT (
|
674
|
-
5 < "pilot.0"."years of experience"
|
675
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
676
|
-
)
|
677
|
-
AND ($1 = '{}'
|
678
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
679
|
-
) = 0 AS "result";`,
|
680
|
-
);
|
681
|
-
|
682
|
-
test.rule(
|
683
|
-
'It is necessary that each pilot that can fly at least 3 planes or can fly exactly one plane and is experienced, has a years of experience that is greater than 5',
|
684
|
-
`\
|
685
|
-
SELECT (
|
686
|
-
SELECT COUNT(*)
|
687
|
-
FROM "pilot" AS "pilot.0"
|
688
|
-
WHERE ((
|
689
|
-
SELECT COUNT(*)
|
690
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
691
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
692
|
-
) >= 3
|
693
|
-
OR (
|
694
|
-
SELECT COUNT(*)
|
695
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
696
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
697
|
-
) = 1
|
698
|
-
AND "pilot.0"."is experienced" = TRUE)
|
699
|
-
AND NOT (
|
700
|
-
5 < "pilot.0"."years of experience"
|
701
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
702
|
-
)
|
703
|
-
AND ($1 = '{}'
|
704
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
705
|
-
) = 0 AS "result";`,
|
706
|
-
);
|
707
|
-
|
708
|
-
// Commas
|
709
|
-
test.rule(
|
710
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes, and can fly at most 10 planes, has a years of experience that is greater than 5',
|
711
|
-
`\
|
712
|
-
SELECT (
|
713
|
-
SELECT COUNT(*)
|
714
|
-
FROM "pilot" AS "pilot.0"
|
715
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
716
|
-
AND (
|
717
|
-
SELECT COUNT(*)
|
718
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
719
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
720
|
-
) >= 3
|
721
|
-
AND NOT (
|
722
|
-
(
|
723
|
-
SELECT COUNT(*)
|
724
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
725
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
726
|
-
) >= 11
|
727
|
-
)
|
728
|
-
AND NOT (
|
729
|
-
5 < "pilot.0"."years of experience"
|
730
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
731
|
-
)
|
732
|
-
AND ($1 = '{}'
|
733
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
734
|
-
) = 0 AS "result";`,
|
735
|
-
);
|
736
|
-
|
737
|
-
test.rule(
|
738
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes, or can fly exactly one plane, has a years of experience that is greater than 5',
|
739
|
-
`\
|
740
|
-
SELECT (
|
741
|
-
SELECT COUNT(*)
|
742
|
-
FROM "pilot" AS "pilot.0"
|
743
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
744
|
-
OR (
|
745
|
-
SELECT COUNT(*)
|
746
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
747
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
748
|
-
) >= 3
|
749
|
-
OR (
|
750
|
-
SELECT COUNT(*)
|
751
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
752
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
753
|
-
) = 1)
|
754
|
-
AND NOT (
|
755
|
-
5 < "pilot.0"."years of experience"
|
756
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
757
|
-
)
|
758
|
-
AND ($1 = '{}'
|
759
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
760
|
-
) = 0 AS "result";`,
|
761
|
-
);
|
762
|
-
|
763
|
-
test.rule(
|
764
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes, and can fly at most 10 planes or has a name that has a Length (Type) that is greater than 10, has a years of experience that is greater than 5',
|
765
|
-
`\
|
766
|
-
SELECT (
|
767
|
-
SELECT COUNT(*)
|
768
|
-
FROM "pilot" AS "pilot.0"
|
769
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
770
|
-
AND (
|
771
|
-
SELECT COUNT(*)
|
772
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
773
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
774
|
-
) >= 3
|
775
|
-
AND (NOT (
|
776
|
-
(
|
777
|
-
SELECT COUNT(*)
|
778
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
779
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
780
|
-
) >= 11
|
781
|
-
)
|
782
|
-
OR 10 < LENGTH("pilot.0"."name")
|
783
|
-
AND LENGTH("pilot.0"."name") IS NOT NULL
|
784
|
-
AND "pilot.0"."name" IS NOT NULL)
|
785
|
-
AND NOT (
|
786
|
-
5 < "pilot.0"."years of experience"
|
787
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
788
|
-
)
|
789
|
-
AND ($1 = '{}'
|
790
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
791
|
-
) = 0 AS "result";`,
|
792
|
-
);
|
793
|
-
|
794
|
-
test.rule(
|
795
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes, or can fly exactly one plane and has a name that has a Length (Type) that is greater than 10, has a years of experience that is greater than 5',
|
796
|
-
`\
|
797
|
-
SELECT (
|
798
|
-
SELECT COUNT(*)
|
799
|
-
FROM "pilot" AS "pilot.0"
|
800
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
801
|
-
OR (
|
802
|
-
SELECT COUNT(*)
|
803
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
804
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
805
|
-
) >= 3
|
806
|
-
OR (
|
807
|
-
SELECT COUNT(*)
|
808
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
809
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
810
|
-
) = 1
|
811
|
-
AND 10 < LENGTH("pilot.0"."name")
|
812
|
-
AND LENGTH("pilot.0"."name") IS NOT NULL
|
813
|
-
AND "pilot.0"."name" IS NOT NULL)
|
814
|
-
AND NOT (
|
815
|
-
5 < "pilot.0"."years of experience"
|
816
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
817
|
-
)
|
818
|
-
AND ($1 = '{}'
|
819
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
820
|
-
) = 0 AS "result";`,
|
821
|
-
);
|
822
|
-
|
823
|
-
test.rule(
|
824
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes, or can fly exactly one plane and has a name that has a Length (Type) that is greater than 10, has a years of experience that is greater than 5',
|
825
|
-
`\
|
826
|
-
SELECT (
|
827
|
-
SELECT COUNT(*)
|
828
|
-
FROM "pilot" AS "pilot.0"
|
829
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
830
|
-
OR (
|
831
|
-
SELECT COUNT(*)
|
832
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
833
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
834
|
-
) >= 3
|
835
|
-
OR (
|
836
|
-
SELECT COUNT(*)
|
837
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
838
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
839
|
-
) = 1
|
840
|
-
AND 10 < LENGTH("pilot.0"."name")
|
841
|
-
AND LENGTH("pilot.0"."name") IS NOT NULL
|
842
|
-
AND "pilot.0"."name" IS NOT NULL)
|
843
|
-
AND NOT (
|
844
|
-
5 < "pilot.0"."years of experience"
|
845
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
846
|
-
)
|
847
|
-
AND ($1 = '{}'
|
848
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
849
|
-
) = 0 AS "result";`,
|
850
|
-
);
|
851
|
-
|
852
|
-
test.rule(
|
853
|
-
'It is necessary that each pilot that is experienced, can fly at least 3 planes, or can fly exactly one plane and has a name that has a Length (Type) that is greater than 10, has a years of experience that is greater than 5',
|
854
|
-
`\
|
855
|
-
SELECT (
|
856
|
-
SELECT COUNT(*)
|
857
|
-
FROM "pilot" AS "pilot.0"
|
858
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
859
|
-
OR (
|
860
|
-
SELECT COUNT(*)
|
861
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
862
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
863
|
-
) >= 3
|
864
|
-
OR (
|
865
|
-
SELECT COUNT(*)
|
866
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
867
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
868
|
-
) = 1
|
869
|
-
AND 10 < LENGTH("pilot.0"."name")
|
870
|
-
AND LENGTH("pilot.0"."name") IS NOT NULL
|
871
|
-
AND "pilot.0"."name" IS NOT NULL)
|
872
|
-
AND NOT (
|
873
|
-
5 < "pilot.0"."years of experience"
|
874
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
875
|
-
)
|
876
|
-
AND ($1 = '{}'
|
877
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
878
|
-
) = 0 AS "result";`,
|
879
|
-
);
|
880
|
-
|
881
|
-
test.rule(
|
882
|
-
'It is necessary that each pilot that is experienced, can fly exactly one plane or can fly at least 5 planes, and can fly at least 3 planes, has a years of experience that is greater than 5',
|
883
|
-
`\
|
884
|
-
SELECT (
|
885
|
-
SELECT COUNT(*)
|
886
|
-
FROM "pilot" AS "pilot.0"
|
887
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
888
|
-
AND ((
|
889
|
-
SELECT COUNT(*)
|
890
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
891
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
892
|
-
) = 1
|
893
|
-
OR (
|
894
|
-
SELECT COUNT(*)
|
895
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
896
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
897
|
-
) >= 5)
|
898
|
-
AND (
|
899
|
-
SELECT COUNT(*)
|
900
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.3"
|
901
|
-
WHERE "pilot.0-can fly-plane.3"."pilot" = "pilot.0"."id"
|
902
|
-
) >= 3
|
903
|
-
AND NOT (
|
904
|
-
5 < "pilot.0"."years of experience"
|
905
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
906
|
-
)
|
907
|
-
AND ($1 = '{}'
|
908
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
909
|
-
) = 0 AS "result";`,
|
910
|
-
);
|
911
|
-
|
912
|
-
test.rule(
|
913
|
-
'It is necessary that each pilot that is experienced, can fly at least one plane and can fly at most 5 planes, or can fly at least 3 planes, has a years of experience that is greater than 5',
|
914
|
-
`\
|
915
|
-
SELECT (
|
916
|
-
SELECT COUNT(*)
|
917
|
-
FROM "pilot" AS "pilot.0"
|
918
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
919
|
-
OR EXISTS (
|
920
|
-
SELECT 1
|
921
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
922
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
923
|
-
)
|
924
|
-
AND NOT (
|
925
|
-
(
|
926
|
-
SELECT COUNT(*)
|
927
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
928
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
929
|
-
) >= 6
|
930
|
-
)
|
931
|
-
OR (
|
932
|
-
SELECT COUNT(*)
|
933
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.3"
|
934
|
-
WHERE "pilot.0-can fly-plane.3"."pilot" = "pilot.0"."id"
|
935
|
-
) >= 3)
|
936
|
-
AND NOT (
|
937
|
-
5 < "pilot.0"."years of experience"
|
938
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
939
|
-
)
|
940
|
-
AND ($1 = '{}'
|
941
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
942
|
-
) = 0 AS "result";`,
|
943
|
-
);
|
944
|
-
|
945
|
-
test.rule(
|
946
|
-
'It is necessary that each pilot that is experienced, can fly at most 10 planes or has a name that has a Length (Type) that is greater than 10, and can fly at least 3 planes, has a years of experience that is greater than 5',
|
947
|
-
`\
|
948
|
-
SELECT (
|
949
|
-
SELECT COUNT(*)
|
950
|
-
FROM "pilot" AS "pilot.0"
|
951
|
-
WHERE "pilot.0"."is experienced" = TRUE
|
952
|
-
AND (NOT (
|
953
|
-
(
|
954
|
-
SELECT COUNT(*)
|
955
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
956
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
957
|
-
) >= 11
|
958
|
-
)
|
959
|
-
OR 10 < LENGTH("pilot.0"."name")
|
960
|
-
AND LENGTH("pilot.0"."name") IS NOT NULL
|
961
|
-
AND "pilot.0"."name" IS NOT NULL)
|
962
|
-
AND (
|
963
|
-
SELECT COUNT(*)
|
964
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.4"
|
965
|
-
WHERE "pilot.0-can fly-plane.4"."pilot" = "pilot.0"."id"
|
966
|
-
) >= 3
|
967
|
-
AND NOT (
|
968
|
-
5 < "pilot.0"."years of experience"
|
969
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
970
|
-
)
|
971
|
-
AND ($1 = '{}'
|
972
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
973
|
-
) = 0 AS "result";`,
|
974
|
-
);
|
975
|
-
|
976
|
-
test.rule(
|
977
|
-
'It is necessary that each pilot that is experienced, can fly exactly one plane and has a name that has a Length (Type) that is greater than 10, or can fly at least 3 planes, has a years of experience that is greater than 5',
|
978
|
-
`\
|
979
|
-
SELECT (
|
980
|
-
SELECT COUNT(*)
|
981
|
-
FROM "pilot" AS "pilot.0"
|
982
|
-
WHERE ("pilot.0"."is experienced" = TRUE
|
983
|
-
OR (
|
984
|
-
SELECT COUNT(*)
|
985
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
986
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
987
|
-
) = 1
|
988
|
-
AND 10 < LENGTH("pilot.0"."name")
|
989
|
-
AND LENGTH("pilot.0"."name") IS NOT NULL
|
990
|
-
AND "pilot.0"."name" IS NOT NULL
|
991
|
-
OR (
|
992
|
-
SELECT COUNT(*)
|
993
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.4"
|
994
|
-
WHERE "pilot.0-can fly-plane.4"."pilot" = "pilot.0"."id"
|
995
|
-
) >= 3)
|
996
|
-
AND NOT (
|
997
|
-
5 < "pilot.0"."years of experience"
|
998
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
999
|
-
)
|
1000
|
-
AND ($1 = '{}'
|
1001
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
1002
|
-
) = 0 AS "result";`,
|
1003
|
-
);
|
1004
|
-
|
1005
|
-
test.rule(
|
1006
|
-
'It is necessary that each pilot that can fly at most 10 planes or can fly at least 15 planes, and is experienced and can fly at least 3 planes, has a years of experience that is greater than 5',
|
1007
|
-
`\
|
1008
|
-
SELECT (
|
1009
|
-
SELECT COUNT(*)
|
1010
|
-
FROM "pilot" AS "pilot.0"
|
1011
|
-
WHERE (NOT (
|
1012
|
-
(
|
1013
|
-
SELECT COUNT(*)
|
1014
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
1015
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
1016
|
-
) >= 11
|
1017
|
-
)
|
1018
|
-
OR (
|
1019
|
-
SELECT COUNT(*)
|
1020
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
1021
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
1022
|
-
) >= 15)
|
1023
|
-
AND "pilot.0"."is experienced" = TRUE
|
1024
|
-
AND (
|
1025
|
-
SELECT COUNT(*)
|
1026
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.3"
|
1027
|
-
WHERE "pilot.0-can fly-plane.3"."pilot" = "pilot.0"."id"
|
1028
|
-
) >= 3
|
1029
|
-
AND NOT (
|
1030
|
-
5 < "pilot.0"."years of experience"
|
1031
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
1032
|
-
)
|
1033
|
-
AND ($1 = '{}'
|
1034
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
1035
|
-
) = 0 AS "result";`,
|
1036
|
-
);
|
1037
|
-
|
1038
|
-
test.rule(
|
1039
|
-
'It is necessary that each pilot that can fly at least one plane and at most 10 planes, or is experienced or can fly at least 3 planes, has a years of experience that is greater than 5',
|
1040
|
-
`\
|
1041
|
-
SELECT (
|
1042
|
-
SELECT COUNT(*)
|
1043
|
-
FROM "pilot" AS "pilot.0"
|
1044
|
-
WHERE (EXISTS (
|
1045
|
-
SELECT 1
|
1046
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
1047
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
1048
|
-
)
|
1049
|
-
AND NOT (
|
1050
|
-
(
|
1051
|
-
SELECT COUNT(*)
|
1052
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
1053
|
-
WHERE "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
1054
|
-
) >= 11
|
1055
|
-
)
|
1056
|
-
OR "pilot.0"."is experienced" = TRUE
|
1057
|
-
OR (
|
1058
|
-
SELECT COUNT(*)
|
1059
|
-
FROM "pilot-can fly-plane" AS "pilot.0-can fly-plane.3"
|
1060
|
-
WHERE "pilot.0-can fly-plane.3"."pilot" = "pilot.0"."id"
|
1061
|
-
) >= 3)
|
1062
|
-
AND NOT (
|
1063
|
-
5 < "pilot.0"."years of experience"
|
1064
|
-
AND "pilot.0"."years of experience" IS NOT NULL
|
1065
|
-
)
|
1066
|
-
AND ($1 = '{}'
|
1067
|
-
OR "pilot.0"."id" = ANY(CAST($1 AS INTEGER[])))
|
1068
|
-
) = 0 AS "result";`,
|
1069
|
-
);
|
1070
|
-
|
1071
|
-
test.rule(
|
1072
|
-
'It is necessary that each pilot0 that can fly a plane0, can fly a plane1 that can be flown by a pilot1 that can fly the plane0',
|
1073
|
-
`\
|
1074
|
-
SELECT (
|
1075
|
-
SELECT COUNT(*)
|
1076
|
-
FROM "pilot" AS "pilot.0",
|
1077
|
-
"plane" AS "plane.1",
|
1078
|
-
"pilot-can fly-plane" AS "pilot.0-can fly-plane.1"
|
1079
|
-
WHERE "pilot.0-can fly-plane.1"."pilot" = "pilot.0"."id"
|
1080
|
-
AND "pilot.0-can fly-plane.1"."can fly-plane" = "plane.1"."id"
|
1081
|
-
AND NOT EXISTS (
|
1082
|
-
SELECT 1
|
1083
|
-
FROM "plane" AS "plane.2",
|
1084
|
-
"pilot" AS "pilot.3",
|
1085
|
-
"pilot-can fly-plane" AS "pilot.3-can fly-plane.1",
|
1086
|
-
"pilot-can fly-plane" AS "pilot.3-can fly-plane.2",
|
1087
|
-
"pilot-can fly-plane" AS "pilot.0-can fly-plane.2"
|
1088
|
-
WHERE "pilot.3-can fly-plane.1"."pilot" = "pilot.3"."id"
|
1089
|
-
AND "pilot.3-can fly-plane.1"."can fly-plane" = "plane.1"."id"
|
1090
|
-
AND "pilot.3-can fly-plane.2"."pilot" = "pilot.3"."id"
|
1091
|
-
AND "pilot.3-can fly-plane.2"."can fly-plane" = "plane.2"."id"
|
1092
|
-
AND "pilot.0-can fly-plane.2"."pilot" = "pilot.0"."id"
|
1093
|
-
AND "pilot.0-can fly-plane.2"."can fly-plane" = "plane.2"."id"
|
1094
|
-
)
|
1095
|
-
) = 0 AS "result";`,
|
1096
|
-
);
|
1097
|
-
});
|