@traqula/rules-sparql-1-1 0.0.21 → 0.0.23
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/cjs/lib/MinimalSparqlParser.js +64 -0
- package/dist/cjs/lib/Sparql11types.js +16 -0
- package/dist/cjs/lib/astFactory.js +121 -0
- package/dist/cjs/lib/expressionHelpers.js +215 -0
- package/dist/cjs/lib/factoryMixins/ContextFactory.js +55 -0
- package/dist/cjs/lib/factoryMixins/ExpressionFactory.js +105 -0
- package/dist/cjs/lib/factoryMixins/GraphRefFactory.js +76 -0
- package/dist/cjs/lib/factoryMixins/PathFactory.js +90 -0
- package/dist/cjs/lib/factoryMixins/Patternfactory.js +123 -0
- package/dist/cjs/lib/factoryMixins/QueryFactory.js +68 -0
- package/dist/cjs/lib/factoryMixins/SolutionModifiersFactory.js +80 -0
- package/dist/cjs/lib/factoryMixins/TermFactory.js +105 -0
- package/dist/cjs/lib/factoryMixins/UpdateOperationFactory.js +150 -0
- package/dist/cjs/lib/factoryMixins/mixins.js +43 -0
- package/dist/cjs/lib/grammar/builtIn.js +385 -0
- package/dist/cjs/lib/grammar/dataSetClause.js +118 -0
- package/dist/cjs/lib/grammar/expression.js +384 -0
- package/dist/cjs/lib/grammar/general.js +168 -0
- package/dist/cjs/lib/grammar/index.js +115 -0
- package/dist/cjs/lib/grammar/literals.js +282 -0
- package/dist/cjs/lib/grammar/propertyPaths.js +206 -0
- package/dist/cjs/lib/grammar/queryUnit.js +390 -0
- package/dist/cjs/lib/grammar/solutionModifier.js +280 -0
- package/dist/cjs/lib/grammar/tripleBlock.js +384 -0
- package/dist/cjs/lib/grammar/updateUnit.js +546 -0
- package/dist/cjs/lib/grammar/whereClause.js +483 -0
- package/dist/cjs/lib/index.js +56 -0
- package/dist/cjs/lib/lexer/BuiltInCalls.js +337 -0
- package/dist/cjs/lib/lexer/graph.js +41 -0
- package/dist/cjs/lib/lexer/index.js +50 -0
- package/dist/cjs/lib/lexer/lexer.js +199 -0
- package/dist/cjs/lib/lexer/lexerPatterns.js +133 -0
- package/dist/cjs/lib/lexer/symbols.js +107 -0
- package/dist/cjs/lib/lexer/terminals.js +103 -0
- package/dist/cjs/lib/sparql11HelperTypes.js +16 -0
- package/dist/cjs/lib/utils.js +64 -0
- package/dist/cjs/lib/validation/validators.js +214 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/lib/MinimalSparqlParser.js.map +1 -0
- package/dist/esm/lib/Sparql11types.js.map +1 -0
- package/dist/esm/lib/astFactory.js.map +1 -0
- package/{lib → dist/esm/lib}/expressionHelpers.d.ts +1 -1
- package/dist/esm/lib/expressionHelpers.js.map +1 -0
- package/dist/esm/lib/factoryMixins/ContextFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/ExpressionFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/GraphRefFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/PathFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/Patternfactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/QueryFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/SolutionModifiersFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/TermFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/UpdateOperationFactory.js.map +1 -0
- package/dist/esm/lib/factoryMixins/mixins.js.map +1 -0
- package/{lib → dist/esm/lib}/grammar/builtIn.d.ts +1 -1
- package/dist/esm/lib/grammar/builtIn.js.map +1 -0
- package/{lib → dist/esm/lib}/grammar/dataSetClause.d.ts +1 -1
- package/dist/esm/lib/grammar/dataSetClause.js.map +1 -0
- package/dist/esm/lib/grammar/expression.js.map +1 -0
- package/dist/esm/lib/grammar/general.js.map +1 -0
- package/dist/esm/lib/grammar/index.js.map +1 -0
- package/dist/esm/lib/grammar/literals.js.map +1 -0
- package/{lib → dist/esm/lib}/grammar/propertyPaths.d.ts +3 -3
- package/dist/esm/lib/grammar/propertyPaths.js.map +1 -0
- package/dist/esm/lib/grammar/queryUnit.js.map +1 -0
- package/dist/esm/lib/grammar/solutionModifier.js.map +1 -0
- package/{lib → dist/esm/lib}/grammar/tripleBlock.d.ts +4 -4
- package/dist/esm/lib/grammar/tripleBlock.js.map +1 -0
- package/dist/esm/lib/grammar/updateUnit.js.map +1 -0
- package/dist/esm/lib/grammar/whereClause.js.map +1 -0
- package/dist/esm/lib/index.js.map +1 -0
- package/{lib → dist/esm/lib}/lexer/BuiltInCalls.d.ts +1 -1
- package/dist/esm/lib/lexer/BuiltInCalls.js.map +1 -0
- package/{lib → dist/esm/lib}/lexer/graph.d.ts +1 -1
- package/dist/esm/lib/lexer/graph.js.map +1 -0
- package/dist/esm/lib/lexer/index.js.map +1 -0
- package/{lib → dist/esm/lib}/lexer/lexer.d.ts +2 -2
- package/dist/esm/lib/lexer/lexer.js.map +1 -0
- package/dist/esm/lib/lexer/lexerPatterns.js.map +1 -0
- package/{lib → dist/esm/lib}/lexer/symbols.d.ts +1 -1
- package/dist/esm/lib/lexer/symbols.js.map +1 -0
- package/{lib → dist/esm/lib}/lexer/terminals.d.ts +1 -1
- package/{lib → dist/esm/lib}/lexer/terminals.js +1 -1
- package/dist/esm/lib/lexer/terminals.js.map +1 -0
- package/dist/esm/lib/sparql11HelperTypes.js.map +1 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/lib/validation/validators.js.map +1 -0
- package/package.json +14 -18
- package/lib/MinimalSparqlParser.js.map +0 -1
- package/lib/Sparql11types.js.map +0 -1
- package/lib/astFactory.js.map +0 -1
- package/lib/expressionHelpers.js.map +0 -1
- package/lib/factoryMixins/ContextFactory.js.map +0 -1
- package/lib/factoryMixins/ExpressionFactory.js.map +0 -1
- package/lib/factoryMixins/GraphRefFactory.js.map +0 -1
- package/lib/factoryMixins/PathFactory.js.map +0 -1
- package/lib/factoryMixins/Patternfactory.js.map +0 -1
- package/lib/factoryMixins/QueryFactory.js.map +0 -1
- package/lib/factoryMixins/SolutionModifiersFactory.js.map +0 -1
- package/lib/factoryMixins/TermFactory.js.map +0 -1
- package/lib/factoryMixins/UpdateOperationFactory.js.map +0 -1
- package/lib/factoryMixins/mixins.js.map +0 -1
- package/lib/grammar/builtIn.js.map +0 -1
- package/lib/grammar/dataSetClause.js.map +0 -1
- package/lib/grammar/expression.js.map +0 -1
- package/lib/grammar/general.js.map +0 -1
- package/lib/grammar/index.js.map +0 -1
- package/lib/grammar/literals.js.map +0 -1
- package/lib/grammar/propertyPaths.js.map +0 -1
- package/lib/grammar/queryUnit.js.map +0 -1
- package/lib/grammar/solutionModifier.js.map +0 -1
- package/lib/grammar/tripleBlock.js.map +0 -1
- package/lib/grammar/updateUnit.js.map +0 -1
- package/lib/grammar/whereClause.js.map +0 -1
- package/lib/index.cjs +0 -14673
- package/lib/index.js.map +0 -1
- package/lib/lexer/BuiltInCalls.js.map +0 -1
- package/lib/lexer/graph.js.map +0 -1
- package/lib/lexer/index.js.map +0 -1
- package/lib/lexer/lexer.js.map +0 -1
- package/lib/lexer/lexerPatterns.js.map +0 -1
- package/lib/lexer/symbols.js.map +0 -1
- package/lib/lexer/terminals.js.map +0 -1
- package/lib/sparql11HelperTypes.js.map +0 -1
- package/lib/utils.js.map +0 -1
- package/lib/validation/validators.js.map +0 -1
- /package/{lib → dist/esm/lib}/MinimalSparqlParser.d.ts +0 -0
- /package/{lib → dist/esm/lib}/MinimalSparqlParser.js +0 -0
- /package/{lib → dist/esm/lib}/Sparql11types.d.ts +0 -0
- /package/{lib → dist/esm/lib}/Sparql11types.js +0 -0
- /package/{lib → dist/esm/lib}/astFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/astFactory.js +0 -0
- /package/{lib → dist/esm/lib}/expressionHelpers.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/ContextFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/ContextFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/ExpressionFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/ExpressionFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/GraphRefFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/GraphRefFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/PathFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/PathFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/Patternfactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/Patternfactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/QueryFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/QueryFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/SolutionModifiersFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/SolutionModifiersFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/TermFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/TermFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/UpdateOperationFactory.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/UpdateOperationFactory.js +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/mixins.d.ts +0 -0
- /package/{lib → dist/esm/lib}/factoryMixins/mixins.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/builtIn.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/dataSetClause.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/expression.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/expression.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/general.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/general.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/index.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/index.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/literals.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/literals.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/propertyPaths.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/queryUnit.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/queryUnit.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/solutionModifier.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/solutionModifier.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/tripleBlock.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/updateUnit.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/updateUnit.js +0 -0
- /package/{lib → dist/esm/lib}/grammar/whereClause.d.ts +0 -0
- /package/{lib → dist/esm/lib}/grammar/whereClause.js +0 -0
- /package/{lib → dist/esm/lib}/index.d.ts +0 -0
- /package/{lib → dist/esm/lib}/index.js +0 -0
- /package/{lib → dist/esm/lib}/lexer/BuiltInCalls.js +0 -0
- /package/{lib → dist/esm/lib}/lexer/graph.js +0 -0
- /package/{lib → dist/esm/lib}/lexer/index.d.ts +0 -0
- /package/{lib → dist/esm/lib}/lexer/index.js +0 -0
- /package/{lib → dist/esm/lib}/lexer/lexer.js +0 -0
- /package/{lib → dist/esm/lib}/lexer/lexerPatterns.d.ts +0 -0
- /package/{lib → dist/esm/lib}/lexer/lexerPatterns.js +0 -0
- /package/{lib → dist/esm/lib}/lexer/symbols.js +0 -0
- /package/{lib → dist/esm/lib}/sparql11HelperTypes.d.ts +0 -0
- /package/{lib → dist/esm/lib}/sparql11HelperTypes.js +0 -0
- /package/{lib → dist/esm/lib}/utils.d.ts +0 -0
- /package/{lib → dist/esm/lib}/utils.js +0 -0
- /package/{lib → dist/esm/lib}/validation/validators.d.ts +0 -0
- /package/{lib → dist/esm/lib}/validation/validators.js +0 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var queryUnit_exports = {};
|
|
30
|
+
__export(queryUnit_exports, {
|
|
31
|
+
askQuery: () => askQuery,
|
|
32
|
+
constructQuery: () => constructQuery,
|
|
33
|
+
constructTemplate: () => constructTemplate,
|
|
34
|
+
constructTriples: () => constructTriples,
|
|
35
|
+
describeQuery: () => describeQuery,
|
|
36
|
+
query: () => query,
|
|
37
|
+
queryUnit: () => queryUnit,
|
|
38
|
+
selectClause: () => selectClause,
|
|
39
|
+
selectQuery: () => selectQuery,
|
|
40
|
+
subSelect: () => subSelect,
|
|
41
|
+
valuesClause: () => valuesClause
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(queryUnit_exports);
|
|
44
|
+
var import_core = require("@traqula/core");
|
|
45
|
+
var l = __toESM(require("../lexer/index.js"), 1);
|
|
46
|
+
var import_validators = require("../validation/validators.js");
|
|
47
|
+
var import_dataSetClause = require("./dataSetClause.js");
|
|
48
|
+
var import_expression = require("./expression.js");
|
|
49
|
+
var import_general = require("./general.js");
|
|
50
|
+
var import_solutionModifier = require("./solutionModifier.js");
|
|
51
|
+
var import_tripleBlock = require("./tripleBlock.js");
|
|
52
|
+
var import_whereClause = require("./whereClause.js");
|
|
53
|
+
const queryUnit = {
|
|
54
|
+
name: "queryUnit",
|
|
55
|
+
impl: ({ SUBRULE }) => () => SUBRULE(query)
|
|
56
|
+
};
|
|
57
|
+
const query = {
|
|
58
|
+
name: "query",
|
|
59
|
+
impl: ({ ACTION, SUBRULE, OR }) => (C) => {
|
|
60
|
+
const prologueValues = SUBRULE(import_general.prologue);
|
|
61
|
+
const subType = OR([
|
|
62
|
+
{ ALT: () => SUBRULE(selectQuery) },
|
|
63
|
+
{ ALT: () => SUBRULE(constructQuery) },
|
|
64
|
+
{ ALT: () => SUBRULE(describeQuery) },
|
|
65
|
+
{ ALT: () => SUBRULE(askQuery) }
|
|
66
|
+
]);
|
|
67
|
+
const values = SUBRULE(valuesClause);
|
|
68
|
+
return ACTION(() => ({
|
|
69
|
+
context: prologueValues,
|
|
70
|
+
...subType,
|
|
71
|
+
type: "query",
|
|
72
|
+
...values && { values },
|
|
73
|
+
loc: C.astFactory.sourceLocation(prologueValues.at(0), subType, values)
|
|
74
|
+
}));
|
|
75
|
+
},
|
|
76
|
+
gImpl: ({ SUBRULE }) => (ast, { astFactory: F }) => {
|
|
77
|
+
SUBRULE(import_general.prologue, ast.context);
|
|
78
|
+
if (F.isQuerySelect(ast)) {
|
|
79
|
+
SUBRULE(selectQuery, ast);
|
|
80
|
+
} else if (F.isQueryConstruct(ast)) {
|
|
81
|
+
SUBRULE(constructQuery, ast);
|
|
82
|
+
} else if (F.isQueryDescribe(ast)) {
|
|
83
|
+
SUBRULE(describeQuery, ast);
|
|
84
|
+
} else if (F.isQueryAsk(ast)) {
|
|
85
|
+
SUBRULE(askQuery, ast);
|
|
86
|
+
}
|
|
87
|
+
if (ast.values) {
|
|
88
|
+
SUBRULE(import_whereClause.inlineData, ast.values);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const selectQuery = {
|
|
93
|
+
name: "selectQuery",
|
|
94
|
+
impl: ({ ACTION, SUBRULE }) => (C) => {
|
|
95
|
+
const selectVal = SUBRULE(selectClause);
|
|
96
|
+
const from = SUBRULE(import_dataSetClause.datasetClauseStar);
|
|
97
|
+
const where = SUBRULE(import_whereClause.whereClause);
|
|
98
|
+
const modifiers = SUBRULE(import_solutionModifier.solutionModifier);
|
|
99
|
+
return ACTION(() => {
|
|
100
|
+
const ret = {
|
|
101
|
+
subType: "select",
|
|
102
|
+
where: where.val,
|
|
103
|
+
solutionModifiers: modifiers,
|
|
104
|
+
datasets: from,
|
|
105
|
+
...selectVal.val,
|
|
106
|
+
loc: C.astFactory.sourceLocation(selectVal, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
|
|
107
|
+
};
|
|
108
|
+
(0, import_validators.queryIsGood)(ret);
|
|
109
|
+
return ret;
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
gImpl: ({ SUBRULE }) => (ast, { astFactory: F }) => {
|
|
113
|
+
SUBRULE(selectClause, F.wrap({
|
|
114
|
+
variables: ast.variables,
|
|
115
|
+
distinct: ast.distinct,
|
|
116
|
+
reduced: ast.reduced
|
|
117
|
+
}, F.sourceLocation(...ast.variables)));
|
|
118
|
+
SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
|
|
119
|
+
SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.where.loc));
|
|
120
|
+
SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const subSelect = {
|
|
124
|
+
name: "subSelect",
|
|
125
|
+
impl: ({ ACTION, SUBRULE }) => (C) => {
|
|
126
|
+
const selectVal = SUBRULE(selectClause);
|
|
127
|
+
const where = SUBRULE(import_whereClause.whereClause);
|
|
128
|
+
const modifiers = SUBRULE(import_solutionModifier.solutionModifier);
|
|
129
|
+
const values = SUBRULE(valuesClause);
|
|
130
|
+
return ACTION(() => C.astFactory.querySelect({
|
|
131
|
+
where: where.val,
|
|
132
|
+
datasets: C.astFactory.datasetClauses([], C.astFactory.sourceLocation()),
|
|
133
|
+
context: [],
|
|
134
|
+
solutionModifiers: modifiers,
|
|
135
|
+
...selectVal.val,
|
|
136
|
+
...values && { values }
|
|
137
|
+
}, C.astFactory.sourceLocation(selectVal, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset, values)));
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
const selectClause = {
|
|
141
|
+
name: "selectClause",
|
|
142
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, SUBRULE2, CONSUME, OPTION, OR1, OR2, OR3 }) => (C) => {
|
|
143
|
+
const select = CONSUME(l.select);
|
|
144
|
+
const couldParseAgg = ACTION(() => C.parseMode.has("canParseAggregate") || !C.parseMode.add("canParseAggregate"));
|
|
145
|
+
const distinctAndReduced = OPTION(() => OR1([
|
|
146
|
+
{ ALT: () => {
|
|
147
|
+
CONSUME(l.distinct);
|
|
148
|
+
return [true, false];
|
|
149
|
+
} },
|
|
150
|
+
{ ALT: () => {
|
|
151
|
+
CONSUME(l.reduced);
|
|
152
|
+
return [false, true];
|
|
153
|
+
} }
|
|
154
|
+
])) ?? [false, false];
|
|
155
|
+
const distRed = ACTION(() => {
|
|
156
|
+
const [distinct, reduced] = distinctAndReduced;
|
|
157
|
+
return {
|
|
158
|
+
...distinct && { distinct },
|
|
159
|
+
...reduced && { reduced }
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
let last;
|
|
163
|
+
const val = OR2([
|
|
164
|
+
{ ALT: () => {
|
|
165
|
+
const star = CONSUME(l.symbols.star);
|
|
166
|
+
return ACTION(() => {
|
|
167
|
+
last = star;
|
|
168
|
+
return { variables: [C.astFactory.wildcard(C.astFactory.sourceLocation(star))], ...distRed };
|
|
169
|
+
});
|
|
170
|
+
} },
|
|
171
|
+
{ ALT: () => {
|
|
172
|
+
const usedVars = [];
|
|
173
|
+
const variables = [];
|
|
174
|
+
AT_LEAST_ONE(() => OR3([
|
|
175
|
+
{ ALT: () => {
|
|
176
|
+
const raw = SUBRULE1(import_general.var_);
|
|
177
|
+
ACTION(() => {
|
|
178
|
+
if (usedVars.some((v) => v.value === raw.value)) {
|
|
179
|
+
throw new Error(`Variable ${raw.value} used more than once in SELECT clause`);
|
|
180
|
+
}
|
|
181
|
+
usedVars.push(raw);
|
|
182
|
+
variables.push(raw);
|
|
183
|
+
last = raw;
|
|
184
|
+
});
|
|
185
|
+
} },
|
|
186
|
+
{ ALT: () => {
|
|
187
|
+
const open = CONSUME(l.symbols.LParen);
|
|
188
|
+
const expr = SUBRULE1(import_expression.expression);
|
|
189
|
+
CONSUME(l.as);
|
|
190
|
+
const variable = SUBRULE2(import_general.var_);
|
|
191
|
+
const close = CONSUME(l.symbols.RParen);
|
|
192
|
+
ACTION(() => {
|
|
193
|
+
last = close;
|
|
194
|
+
if (usedVars.some((v) => v.value === variable.value)) {
|
|
195
|
+
throw new Error(`Variable ${variable.value} used more than once in SELECT clause`);
|
|
196
|
+
}
|
|
197
|
+
usedVars.push(variable);
|
|
198
|
+
variables.push(C.astFactory.patternBind(expr, variable, C.astFactory.sourceLocation(open, last)));
|
|
199
|
+
});
|
|
200
|
+
} }
|
|
201
|
+
]));
|
|
202
|
+
return { variables, ...distRed };
|
|
203
|
+
} }
|
|
204
|
+
]);
|
|
205
|
+
ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
|
|
206
|
+
return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(select, last)));
|
|
207
|
+
},
|
|
208
|
+
gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
|
|
209
|
+
F.printFilter(ast, () => {
|
|
210
|
+
PRINT_ON_EMPTY("SELECT ");
|
|
211
|
+
if (ast.val.distinct) {
|
|
212
|
+
PRINT_WORD("DISTINCT");
|
|
213
|
+
} else if (ast.val.reduced) {
|
|
214
|
+
PRINT_WORD("REDUCED");
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
for (const variable of ast.val.variables) {
|
|
218
|
+
if (F.isWildcard(variable)) {
|
|
219
|
+
F.printFilter(ast, () => PRINT_WORD("*"));
|
|
220
|
+
} else if (F.isTerm(variable)) {
|
|
221
|
+
SUBRULE(import_general.var_, variable);
|
|
222
|
+
} else {
|
|
223
|
+
F.printFilter(ast, () => PRINT_WORD("("));
|
|
224
|
+
SUBRULE(import_expression.expression, variable.expression);
|
|
225
|
+
F.printFilter(ast, () => PRINT_WORD("AS"));
|
|
226
|
+
SUBRULE(import_general.var_, variable.variable);
|
|
227
|
+
F.printFilter(ast, () => PRINT_WORD(")"));
|
|
228
|
+
}
|
|
229
|
+
F.printFilter(ast, () => PRINT_WORD(""));
|
|
230
|
+
}
|
|
231
|
+
F.printFilter(ast, () => PRINT_WORD(""));
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
const constructQuery = {
|
|
235
|
+
name: "constructQuery",
|
|
236
|
+
impl: ({ ACTION, SUBRULE1, SUBRULE2, CONSUME, OR }) => (C) => {
|
|
237
|
+
const construct = CONSUME(l.construct);
|
|
238
|
+
return OR([
|
|
239
|
+
{ ALT: () => {
|
|
240
|
+
const template = SUBRULE1(constructTemplate);
|
|
241
|
+
const from = SUBRULE1(import_dataSetClause.datasetClauseStar);
|
|
242
|
+
const where = SUBRULE1(import_whereClause.whereClause);
|
|
243
|
+
const modifiers = SUBRULE1(import_solutionModifier.solutionModifier);
|
|
244
|
+
return ACTION(() => ({
|
|
245
|
+
subType: "construct",
|
|
246
|
+
template: template.val,
|
|
247
|
+
datasets: from,
|
|
248
|
+
where: where.val,
|
|
249
|
+
solutionModifiers: modifiers,
|
|
250
|
+
loc: C.astFactory.sourceLocation(construct, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
|
|
251
|
+
}));
|
|
252
|
+
} },
|
|
253
|
+
{ ALT: () => {
|
|
254
|
+
const from = SUBRULE2(import_dataSetClause.datasetClauseStar);
|
|
255
|
+
CONSUME(l.where);
|
|
256
|
+
const template = SUBRULE2(constructTemplate);
|
|
257
|
+
const modifiers = SUBRULE2(import_solutionModifier.solutionModifier);
|
|
258
|
+
return ACTION(() => ({
|
|
259
|
+
subType: "construct",
|
|
260
|
+
template: template.val,
|
|
261
|
+
datasets: from,
|
|
262
|
+
where: C.astFactory.patternGroup([template.val], C.astFactory.sourceLocation()),
|
|
263
|
+
solutionModifiers: modifiers,
|
|
264
|
+
loc: C.astFactory.sourceLocation(construct, template, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
|
|
265
|
+
}));
|
|
266
|
+
} }
|
|
267
|
+
]);
|
|
268
|
+
},
|
|
269
|
+
gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY, PRINT_ON_OWN_LINE, NEW_LINE }) => (ast, C) => {
|
|
270
|
+
const { astFactory: F, indentInc } = C;
|
|
271
|
+
F.printFilter(ast, () => PRINT_ON_EMPTY("CONSTRUCT "));
|
|
272
|
+
if (!F.isSourceLocationNoMaterialize(ast.where.loc)) {
|
|
273
|
+
F.printFilter(ast, () => {
|
|
274
|
+
C[import_core.traqulaIndentation] += indentInc;
|
|
275
|
+
PRINT_WORD("{");
|
|
276
|
+
NEW_LINE();
|
|
277
|
+
});
|
|
278
|
+
SUBRULE(import_tripleBlock.triplesBlock, ast.template);
|
|
279
|
+
F.printFilter(ast, () => {
|
|
280
|
+
C[import_core.traqulaIndentation] -= indentInc;
|
|
281
|
+
PRINT_ON_OWN_LINE("}");
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
|
|
285
|
+
if (F.isSourceLocationNoMaterialize(ast.where.loc)) {
|
|
286
|
+
SUBRULE(import_whereClause.whereClause, F.wrap(F.patternGroup([ast.template], ast.template.loc), ast.template.loc));
|
|
287
|
+
} else {
|
|
288
|
+
SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.where.loc));
|
|
289
|
+
}
|
|
290
|
+
SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
const describeQuery = {
|
|
294
|
+
name: "describeQuery",
|
|
295
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, CONSUME, OPTION, OR }) => (C) => {
|
|
296
|
+
const describe = CONSUME(l.describe);
|
|
297
|
+
const variables = OR([
|
|
298
|
+
{ ALT: () => {
|
|
299
|
+
const variables2 = [];
|
|
300
|
+
AT_LEAST_ONE(() => {
|
|
301
|
+
variables2.push(SUBRULE1(import_general.varOrIri));
|
|
302
|
+
});
|
|
303
|
+
return variables2;
|
|
304
|
+
} },
|
|
305
|
+
{ ALT: () => {
|
|
306
|
+
const star = CONSUME(l.symbols.star);
|
|
307
|
+
return [ACTION(() => C.astFactory.wildcard(C.astFactory.sourceLocation(star)))];
|
|
308
|
+
} }
|
|
309
|
+
]);
|
|
310
|
+
const from = SUBRULE1(import_dataSetClause.datasetClauseStar);
|
|
311
|
+
const where = OPTION(() => SUBRULE1(import_whereClause.whereClause));
|
|
312
|
+
const modifiers = SUBRULE1(import_solutionModifier.solutionModifier);
|
|
313
|
+
return ACTION(() => ({
|
|
314
|
+
subType: "describe",
|
|
315
|
+
variables,
|
|
316
|
+
datasets: from,
|
|
317
|
+
...where && { where: where.val },
|
|
318
|
+
solutionModifiers: modifiers,
|
|
319
|
+
loc: C.astFactory.sourceLocation(describe, ...variables, from, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
|
|
320
|
+
}));
|
|
321
|
+
},
|
|
322
|
+
gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
|
|
323
|
+
F.printFilter(ast, () => PRINT_ON_EMPTY("DESCRIBE "));
|
|
324
|
+
if (F.isWildcard(ast.variables[0])) {
|
|
325
|
+
F.printFilter(ast, () => PRINT_WORD("*"));
|
|
326
|
+
} else {
|
|
327
|
+
for (const variable of ast.variables) {
|
|
328
|
+
SUBRULE(import_general.varOrTerm, variable);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
|
|
332
|
+
if (ast.where) {
|
|
333
|
+
SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.loc));
|
|
334
|
+
}
|
|
335
|
+
SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
const askQuery = {
|
|
339
|
+
name: "askQuery",
|
|
340
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
341
|
+
const ask = CONSUME(l.ask);
|
|
342
|
+
const from = SUBRULE(import_dataSetClause.datasetClauseStar);
|
|
343
|
+
const where = SUBRULE(import_whereClause.whereClause);
|
|
344
|
+
const modifiers = SUBRULE(import_solutionModifier.solutionModifier);
|
|
345
|
+
return ACTION(() => ({
|
|
346
|
+
subType: "ask",
|
|
347
|
+
datasets: from,
|
|
348
|
+
where: where.val,
|
|
349
|
+
solutionModifiers: modifiers,
|
|
350
|
+
loc: C.astFactory.sourceLocation(ask, from, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
|
|
351
|
+
}));
|
|
352
|
+
},
|
|
353
|
+
gImpl: ({ SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
|
|
354
|
+
F.printFilter(ast, () => PRINT_ON_EMPTY("ASK "));
|
|
355
|
+
SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
|
|
356
|
+
SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.loc));
|
|
357
|
+
SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
const valuesClause = {
|
|
361
|
+
name: "valuesClause",
|
|
362
|
+
impl: ({ OPTION, SUBRULE }) => () => OPTION(() => SUBRULE(import_whereClause.inlineData))
|
|
363
|
+
};
|
|
364
|
+
const constructTemplate = {
|
|
365
|
+
name: "constructTemplate",
|
|
366
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION }) => (C) => {
|
|
367
|
+
const open = CONSUME(l.symbols.LCurly);
|
|
368
|
+
const triples = OPTION(() => SUBRULE1(constructTriples));
|
|
369
|
+
const close = CONSUME(l.symbols.RCurly);
|
|
370
|
+
return ACTION(() => C.astFactory.wrap(triples ?? C.astFactory.patternBgp([], C.astFactory.sourceLocation()), C.astFactory.sourceLocation(open, close)));
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
const constructTriples = {
|
|
374
|
+
name: "constructTriples",
|
|
375
|
+
impl: import_tripleBlock.triplesTemplate.impl
|
|
376
|
+
};
|
|
377
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
378
|
+
0 && (module.exports = {
|
|
379
|
+
askQuery,
|
|
380
|
+
constructQuery,
|
|
381
|
+
constructTemplate,
|
|
382
|
+
constructTriples,
|
|
383
|
+
describeQuery,
|
|
384
|
+
query,
|
|
385
|
+
queryUnit,
|
|
386
|
+
selectClause,
|
|
387
|
+
selectQuery,
|
|
388
|
+
subSelect,
|
|
389
|
+
valuesClause
|
|
390
|
+
});
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var solutionModifier_exports = {};
|
|
30
|
+
__export(solutionModifier_exports, {
|
|
31
|
+
groupClause: () => groupClause,
|
|
32
|
+
groupCondition: () => groupCondition,
|
|
33
|
+
havingClause: () => havingClause,
|
|
34
|
+
havingCondition: () => havingCondition,
|
|
35
|
+
limitClause: () => limitClause,
|
|
36
|
+
limitOffsetClauses: () => limitOffsetClauses,
|
|
37
|
+
offsetClause: () => offsetClause,
|
|
38
|
+
orderClause: () => orderClause,
|
|
39
|
+
orderCondition: () => orderCondition,
|
|
40
|
+
solutionModifier: () => solutionModifier
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(solutionModifier_exports);
|
|
43
|
+
var l = __toESM(require("../lexer/index.js"), 1);
|
|
44
|
+
var import_builtIn = require("./builtIn.js");
|
|
45
|
+
var import_expression = require("./expression.js");
|
|
46
|
+
var import_general = require("./general.js");
|
|
47
|
+
var import_whereClause = require("./whereClause.js");
|
|
48
|
+
const solutionModifier = {
|
|
49
|
+
name: "solutionModifier",
|
|
50
|
+
impl: ({ ACTION, SUBRULE, OPTION1, OPTION2, OPTION3, OPTION4 }) => () => {
|
|
51
|
+
const group = OPTION1(() => SUBRULE(groupClause));
|
|
52
|
+
const having = OPTION2(() => SUBRULE(havingClause));
|
|
53
|
+
const order = OPTION3(() => SUBRULE(orderClause));
|
|
54
|
+
const limitOffset = OPTION4(() => SUBRULE(limitOffsetClauses));
|
|
55
|
+
return ACTION(() => ({
|
|
56
|
+
...limitOffset && { limitOffset },
|
|
57
|
+
...group && { group },
|
|
58
|
+
...having && { having },
|
|
59
|
+
...order && { order }
|
|
60
|
+
}));
|
|
61
|
+
},
|
|
62
|
+
gImpl: ({ SUBRULE }) => (ast) => {
|
|
63
|
+
if (ast.group) {
|
|
64
|
+
SUBRULE(groupClause, ast.group);
|
|
65
|
+
}
|
|
66
|
+
if (ast.having) {
|
|
67
|
+
SUBRULE(havingClause, ast.having);
|
|
68
|
+
}
|
|
69
|
+
if (ast.order) {
|
|
70
|
+
SUBRULE(orderClause, ast.order);
|
|
71
|
+
}
|
|
72
|
+
if (ast.limitOffset) {
|
|
73
|
+
SUBRULE(limitOffsetClauses, ast.limitOffset);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const groupClause = {
|
|
78
|
+
name: "groupClause",
|
|
79
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, CONSUME }) => (C) => {
|
|
80
|
+
const groupings = [];
|
|
81
|
+
const start = CONSUME(l.groupByGroup);
|
|
82
|
+
CONSUME(l.by);
|
|
83
|
+
AT_LEAST_ONE(() => {
|
|
84
|
+
groupings.push(SUBRULE1(groupCondition));
|
|
85
|
+
});
|
|
86
|
+
return ACTION(() => ({
|
|
87
|
+
type: "solutionModifier",
|
|
88
|
+
subType: "group",
|
|
89
|
+
groupings,
|
|
90
|
+
loc: C.astFactory.sourceLocation(start, groupings.at(-1))
|
|
91
|
+
}));
|
|
92
|
+
},
|
|
93
|
+
gImpl: ({ PRINT_WORDS, SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
|
|
94
|
+
F.printFilter(ast, () => {
|
|
95
|
+
PRINT_ON_EMPTY("GROUP BY ");
|
|
96
|
+
});
|
|
97
|
+
for (const grouping of ast.groupings) {
|
|
98
|
+
if (F.isExpression(grouping)) {
|
|
99
|
+
SUBRULE(import_expression.expression, grouping);
|
|
100
|
+
} else {
|
|
101
|
+
F.printFilter(ast, () => PRINT_WORDS("("));
|
|
102
|
+
SUBRULE(import_expression.expression, grouping.value);
|
|
103
|
+
F.printFilter(ast, () => PRINT_WORDS("AS"));
|
|
104
|
+
SUBRULE(import_general.var_, grouping.variable);
|
|
105
|
+
F.printFilter(ast, () => PRINT_WORDS(")"));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const groupCondition = {
|
|
111
|
+
name: "groupCondition",
|
|
112
|
+
impl: ({ ACTION, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR }) => (C) => OR([
|
|
113
|
+
{ ALT: () => SUBRULE(import_builtIn.builtInCall) },
|
|
114
|
+
{ ALT: () => SUBRULE(import_whereClause.functionCall) },
|
|
115
|
+
{ ALT: () => SUBRULE2(import_general.var_) },
|
|
116
|
+
{
|
|
117
|
+
ALT: () => {
|
|
118
|
+
const open = CONSUME(l.symbols.LParen);
|
|
119
|
+
const expressionValue = SUBRULE(import_expression.expression);
|
|
120
|
+
const variable = OPTION(() => {
|
|
121
|
+
CONSUME(l.as);
|
|
122
|
+
return SUBRULE1(import_general.var_);
|
|
123
|
+
});
|
|
124
|
+
const close = CONSUME(l.symbols.RParen);
|
|
125
|
+
return ACTION(() => {
|
|
126
|
+
if (variable !== void 0) {
|
|
127
|
+
return {
|
|
128
|
+
variable,
|
|
129
|
+
value: expressionValue,
|
|
130
|
+
loc: C.astFactory.sourceLocation(open, close)
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return expressionValue;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
])
|
|
138
|
+
};
|
|
139
|
+
const havingClause = {
|
|
140
|
+
name: "havingClause",
|
|
141
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME }) => (C) => {
|
|
142
|
+
const having = CONSUME(l.having);
|
|
143
|
+
const expressions = [];
|
|
144
|
+
const couldParseAgg = ACTION(() => C.parseMode.has("canParseAggregate") || !C.parseMode.add("canParseAggregate"));
|
|
145
|
+
AT_LEAST_ONE(() => {
|
|
146
|
+
expressions.push(SUBRULE(havingCondition));
|
|
147
|
+
});
|
|
148
|
+
ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
|
|
149
|
+
return ACTION(() => C.astFactory.solutionModifierHaving(expressions, C.astFactory.sourceLocation(having, expressions.at(-1))));
|
|
150
|
+
},
|
|
151
|
+
gImpl: ({ PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F }) => {
|
|
152
|
+
F.printFilter(ast, () => {
|
|
153
|
+
PRINT_ON_EMPTY("HAVING ");
|
|
154
|
+
});
|
|
155
|
+
for (const having of ast.having) {
|
|
156
|
+
SUBRULE(import_expression.expression, having);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const havingCondition = {
|
|
161
|
+
name: "havingCondition",
|
|
162
|
+
impl: ({ SUBRULE }) => () => SUBRULE(import_whereClause.constraint)
|
|
163
|
+
};
|
|
164
|
+
const orderClause = {
|
|
165
|
+
name: "orderClause",
|
|
166
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, CONSUME }) => (C) => {
|
|
167
|
+
const order = CONSUME(l.order);
|
|
168
|
+
CONSUME(l.by);
|
|
169
|
+
const orderings = [];
|
|
170
|
+
const couldParseAgg = ACTION(() => C.parseMode.has("canParseAggregate") || !C.parseMode.add("canParseAggregate"));
|
|
171
|
+
AT_LEAST_ONE(() => {
|
|
172
|
+
orderings.push(SUBRULE1(orderCondition));
|
|
173
|
+
});
|
|
174
|
+
ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
|
|
175
|
+
return ACTION(() => C.astFactory.solutionModifierOrder(orderings, C.astFactory.sourceLocation(order, orderings.at(-1))));
|
|
176
|
+
},
|
|
177
|
+
gImpl: ({ PRINT_WORDS, PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F }) => {
|
|
178
|
+
F.printFilter(ast, () => {
|
|
179
|
+
PRINT_ON_EMPTY("ORDER BY ");
|
|
180
|
+
});
|
|
181
|
+
for (const ordering of ast.orderDefs) {
|
|
182
|
+
if (ordering.descending) {
|
|
183
|
+
F.printFilter(ast, () => PRINT_WORDS("DESC"));
|
|
184
|
+
} else {
|
|
185
|
+
F.printFilter(ast, () => PRINT_WORDS("ASC"));
|
|
186
|
+
}
|
|
187
|
+
F.printFilter(ast, () => PRINT_WORDS("("));
|
|
188
|
+
SUBRULE(import_expression.expression, ordering.expression);
|
|
189
|
+
F.printFilter(ast, () => PRINT_WORDS(")"));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const orderCondition = {
|
|
194
|
+
name: "orderCondition",
|
|
195
|
+
impl: ({ ACTION, SUBRULE, CONSUME, OR1, OR2 }) => (C) => OR1([
|
|
196
|
+
{ ALT: () => {
|
|
197
|
+
const descending = OR2([
|
|
198
|
+
{ ALT: () => {
|
|
199
|
+
const token = CONSUME(l.orderAsc);
|
|
200
|
+
return [false, token];
|
|
201
|
+
} },
|
|
202
|
+
{ ALT: () => {
|
|
203
|
+
const token = CONSUME(l.orderDesc);
|
|
204
|
+
return [true, token];
|
|
205
|
+
} }
|
|
206
|
+
]);
|
|
207
|
+
const expr = SUBRULE(import_expression.brackettedExpression);
|
|
208
|
+
return ACTION(() => ({
|
|
209
|
+
expression: expr,
|
|
210
|
+
descending: descending[0],
|
|
211
|
+
loc: C.astFactory.sourceLocation(descending[1], expr)
|
|
212
|
+
}));
|
|
213
|
+
} },
|
|
214
|
+
{ ALT: () => {
|
|
215
|
+
const expr = SUBRULE(import_whereClause.constraint);
|
|
216
|
+
return ACTION(() => ({ expression: expr, descending: false, loc: expr.loc }));
|
|
217
|
+
} },
|
|
218
|
+
{ ALT: () => {
|
|
219
|
+
const expr = SUBRULE(import_general.var_);
|
|
220
|
+
return ACTION(() => ({ expression: expr, descending: false, loc: expr.loc }));
|
|
221
|
+
} }
|
|
222
|
+
])
|
|
223
|
+
};
|
|
224
|
+
const limitOffsetClauses = {
|
|
225
|
+
name: "limitOffsetClauses",
|
|
226
|
+
impl: ({ ACTION, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OR }) => (C) => OR([
|
|
227
|
+
{ ALT: () => {
|
|
228
|
+
const limit = SUBRULE1(limitClause);
|
|
229
|
+
const offset = OPTION1(() => SUBRULE1(offsetClause));
|
|
230
|
+
return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit.val, offset?.val, C.astFactory.sourceLocation(limit, ...offset ? [offset] : [])));
|
|
231
|
+
} },
|
|
232
|
+
{ ALT: () => {
|
|
233
|
+
const offset = SUBRULE2(offsetClause);
|
|
234
|
+
const limit = OPTION2(() => SUBRULE2(limitClause));
|
|
235
|
+
return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit?.val, offset.val, C.astFactory.sourceLocation(offset, limit)));
|
|
236
|
+
} }
|
|
237
|
+
]),
|
|
238
|
+
gImpl: ({ PRINT_WORDS, NEW_LINE }) => (ast, { astFactory: F }) => {
|
|
239
|
+
F.printFilter(ast, () => {
|
|
240
|
+
NEW_LINE();
|
|
241
|
+
if (ast.limit) {
|
|
242
|
+
PRINT_WORDS("LIMIT", String(ast.limit));
|
|
243
|
+
}
|
|
244
|
+
if (ast.offset) {
|
|
245
|
+
PRINT_WORDS("OFFSET", String(ast.offset));
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
const limitClause = {
|
|
251
|
+
name: "limitClause",
|
|
252
|
+
impl: ({ ACTION, CONSUME }) => (C) => {
|
|
253
|
+
const offset = CONSUME(l.limit);
|
|
254
|
+
const value = CONSUME(l.terminals.integer);
|
|
255
|
+
const val = Number.parseInt(value.image, 10);
|
|
256
|
+
return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(offset, value)));
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const offsetClause = {
|
|
260
|
+
name: "offsetClause",
|
|
261
|
+
impl: ({ CONSUME, ACTION }) => (C) => {
|
|
262
|
+
const offset = CONSUME(l.offset);
|
|
263
|
+
const value = CONSUME(l.terminals.integer);
|
|
264
|
+
const val = Number.parseInt(value.image, 10);
|
|
265
|
+
return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(offset, value)));
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
269
|
+
0 && (module.exports = {
|
|
270
|
+
groupClause,
|
|
271
|
+
groupCondition,
|
|
272
|
+
havingClause,
|
|
273
|
+
havingCondition,
|
|
274
|
+
limitClause,
|
|
275
|
+
limitOffsetClauses,
|
|
276
|
+
offsetClause,
|
|
277
|
+
orderClause,
|
|
278
|
+
orderCondition,
|
|
279
|
+
solutionModifier
|
|
280
|
+
});
|