@malloydata/malloy 0.0.222-dev241212204326 → 0.0.222
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/lang/ast/expressions/constant-expression.d.ts +1 -0
- package/dist/lang/ast/expressions/constant-expression.js +3 -0
- package/dist/lang/ast/field-space/dynamic-space.d.ts +2 -0
- package/dist/lang/ast/field-space/dynamic-space.js +38 -1
- package/dist/lang/ast/field-space/parameter-space.d.ts +1 -0
- package/dist/lang/ast/field-space/parameter-space.js +3 -0
- package/dist/lang/ast/field-space/query-input-space.d.ts +3 -1
- package/dist/lang/ast/field-space/query-input-space.js +5 -1
- package/dist/lang/ast/field-space/query-spaces.js +1 -1
- package/dist/lang/ast/field-space/refined-space.d.ts +10 -2
- package/dist/lang/ast/field-space/refined-space.js +53 -2
- package/dist/lang/ast/field-space/static-space.d.ts +1 -0
- package/dist/lang/ast/field-space/static-space.js +17 -0
- package/dist/lang/ast/index.d.ts +1 -0
- package/dist/lang/ast/index.js +1 -0
- package/dist/lang/ast/query-items/field-declaration.d.ts +2 -0
- package/dist/lang/ast/query-items/field-declaration.js +6 -0
- package/dist/lang/ast/query-items/field-references.d.ts +5 -0
- package/dist/lang/ast/query-items/field-references.js +16 -2
- package/dist/lang/ast/query-properties/declare-fields.d.ts +4 -1
- package/dist/lang/ast/query-properties/declare-fields.js +5 -1
- package/dist/lang/ast/source-elements/composite-source.js +10 -3
- package/dist/lang/ast/source-elements/refined-source.d.ts +3 -1
- package/dist/lang/ast/source-elements/refined-source.js +150 -2
- package/dist/lang/ast/source-properties/join.d.ts +5 -2
- package/dist/lang/ast/source-properties/join.js +8 -1
- package/dist/lang/ast/source-properties/renames.d.ts +5 -0
- package/dist/lang/ast/source-properties/renames.js +9 -2
- package/dist/lang/ast/source-properties/view-field-declaration.d.ts +1 -0
- package/dist/lang/ast/source-properties/view-field-declaration.js +3 -0
- package/dist/lang/ast/source-properties/views.d.ts +4 -0
- package/dist/lang/ast/source-properties/views.js +6 -2
- package/dist/lang/ast/source-query-elements/include-item.d.ts +31 -0
- package/dist/lang/ast/source-query-elements/include-item.js +53 -0
- package/dist/lang/ast/source-query-elements/sq-extend.d.ts +3 -1
- package/dist/lang/ast/source-query-elements/sq-extend.js +3 -2
- package/dist/lang/ast/types/field-space.d.ts +1 -0
- package/dist/lang/ast/types/space-entry.d.ts +1 -0
- package/dist/lang/ast/view-elements/reference-view.js +1 -1
- package/dist/lang/lib/Malloy/MalloyLexer.d.ts +151 -144
- package/dist/lang/lib/Malloy/MalloyLexer.js +1256 -1197
- package/dist/lang/lib/Malloy/MalloyParser.d.ts +404 -248
- package/dist/lang/lib/Malloy/MalloyParser.js +6981 -5702
- package/dist/lang/lib/Malloy/MalloyParserListener.d.ts +123 -0
- package/dist/lang/lib/Malloy/MalloyParserVisitor.d.ts +78 -0
- package/dist/lang/malloy-to-ast.d.ts +12 -5
- package/dist/lang/malloy-to-ast.js +139 -16
- package/dist/lang/parse-log.d.ts +14 -0
- package/dist/lang/test/annotation.spec.js +149 -0
- package/dist/lang/test/composite-field-usage.spec.js +67 -0
- package/dist/lang/test/source.spec.js +255 -0
- package/dist/model/composite_source_utils.js +3 -1
- package/dist/model/malloy_types.d.ts +5 -0
- package/package.json +1 -1
|
@@ -15,6 +15,7 @@ export declare class ConstantFieldSpace implements FieldSpace {
|
|
|
15
15
|
dialectName(): string;
|
|
16
16
|
dialectObj(): undefined;
|
|
17
17
|
isQueryFieldSpace(): this is QueryFieldSpace;
|
|
18
|
+
isProtectedAccessSpace(): boolean;
|
|
18
19
|
}
|
|
19
20
|
export declare class ConstantExpression extends ExpressionDef {
|
|
20
21
|
readonly expr: ExpressionDef;
|
|
@@ -12,6 +12,8 @@ export declare abstract class DynamicSpace extends StaticSpace implements Source
|
|
|
12
12
|
private complete;
|
|
13
13
|
private parameters;
|
|
14
14
|
protected newTimezone?: string;
|
|
15
|
+
protected newAccessModifiers: Map<string, model.AccessModifierLabel>;
|
|
16
|
+
protected newNotes: Map<string, model.Annotation>;
|
|
15
17
|
constructor(extending: SourceDef);
|
|
16
18
|
protected setEntry(name: string, value: SpaceEntry): void;
|
|
17
19
|
addParameters(parameters: HasParameter[]): DynamicSpace;
|
|
@@ -61,6 +61,8 @@ class DynamicSpace extends static_space_1.StaticSpace {
|
|
|
61
61
|
super(structuredClone(extending), extending.dialect);
|
|
62
62
|
this.complete = false;
|
|
63
63
|
this.parameters = [];
|
|
64
|
+
this.newAccessModifiers = new Map();
|
|
65
|
+
this.newNotes = new Map();
|
|
64
66
|
this.fromSource = extending;
|
|
65
67
|
this.sourceDef = undefined;
|
|
66
68
|
}
|
|
@@ -112,6 +114,7 @@ class DynamicSpace extends static_space_1.StaticSpace {
|
|
|
112
114
|
}
|
|
113
115
|
this.sourceDef = { ...this.fromSource, fields: [] };
|
|
114
116
|
this.sourceDef.parameters = parameters;
|
|
117
|
+
const fieldIndices = new Map();
|
|
115
118
|
// Need to process the entities in specific order
|
|
116
119
|
const fields = [];
|
|
117
120
|
const joins = [];
|
|
@@ -130,10 +133,11 @@ class DynamicSpace extends static_space_1.StaticSpace {
|
|
|
130
133
|
}
|
|
131
134
|
const reorderFields = [...fields, ...joins, ...turtles];
|
|
132
135
|
const parameterSpace = this.parameterSpace();
|
|
133
|
-
for (const [, field] of reorderFields) {
|
|
136
|
+
for (const [name, field] of reorderFields) {
|
|
134
137
|
if (field instanceof join_space_field_1.JoinSpaceField) {
|
|
135
138
|
const joinStruct = field.join.structDef(parameterSpace);
|
|
136
139
|
if (!error_factory_1.ErrorFactory.didCreate(joinStruct)) {
|
|
140
|
+
fieldIndices.set(name, this.sourceDef.fields.length);
|
|
137
141
|
this.sourceDef.fields.push(joinStruct);
|
|
138
142
|
fixupJoins.push([field.join, joinStruct]);
|
|
139
143
|
}
|
|
@@ -141,6 +145,7 @@ class DynamicSpace extends static_space_1.StaticSpace {
|
|
|
141
145
|
else {
|
|
142
146
|
const fieldDef = field.fieldDef();
|
|
143
147
|
if (fieldDef) {
|
|
148
|
+
fieldIndices.set(name, this.sourceDef.fields.length);
|
|
144
149
|
this.sourceDef.fields.push(fieldDef);
|
|
145
150
|
}
|
|
146
151
|
// TODO I'm just removing this, but perhaps instead I should just filter
|
|
@@ -154,6 +159,38 @@ class DynamicSpace extends static_space_1.StaticSpace {
|
|
|
154
159
|
for (const [join, missingOn] of fixupJoins) {
|
|
155
160
|
join.fixupJoinOn(this, missingOn);
|
|
156
161
|
}
|
|
162
|
+
// Add access modifiers at the end so views don't obey them
|
|
163
|
+
for (const [name, access] of this.newAccessModifiers) {
|
|
164
|
+
const index = this.sourceDef.fields.findIndex(f => { var _a; return (_a = f.as) !== null && _a !== void 0 ? _a : f.name === name; });
|
|
165
|
+
if (index === -1) {
|
|
166
|
+
throw new Error(`Can't find field '${name}' to set access modifier`);
|
|
167
|
+
}
|
|
168
|
+
if (access === 'public') {
|
|
169
|
+
delete this.sourceDef.fields[index].accessModifier;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
this.sourceDef.fields[index] = {
|
|
173
|
+
...this.sourceDef.fields[index],
|
|
174
|
+
accessModifier: access,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// TODO does this need to be done when the space is instantiated?
|
|
179
|
+
// e.g. if a field had a compiler flag on it...
|
|
180
|
+
for (const [name, note] of this.newNotes) {
|
|
181
|
+
const index = this.sourceDef.fields.findIndex(f => { var _a; return (_a = f.as) !== null && _a !== void 0 ? _a : f.name === name; });
|
|
182
|
+
if (index === -1) {
|
|
183
|
+
throw new Error(`Can't find field '${name}' to set access modifier`);
|
|
184
|
+
}
|
|
185
|
+
const field = this.sourceDef.fields[index];
|
|
186
|
+
this.sourceDef.fields[index] = {
|
|
187
|
+
...field,
|
|
188
|
+
annotation: {
|
|
189
|
+
...note,
|
|
190
|
+
inherits: field.annotation,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
157
194
|
}
|
|
158
195
|
if (this.newTimezone && model.isSourceDef(this.sourceDef)) {
|
|
159
196
|
this.sourceDef.queryTimezone = this.newTimezone;
|
|
@@ -13,6 +13,7 @@ import { QueryOperationSpace } from './query-spaces';
|
|
|
13
13
|
import { RefinedSpace } from './refined-space';
|
|
14
14
|
export declare class QueryInputSpace extends RefinedSpace implements QueryFieldSpace {
|
|
15
15
|
private queryOutput;
|
|
16
|
+
readonly _isProtectedAccessSpace: boolean;
|
|
16
17
|
extendList: string[];
|
|
17
18
|
/**
|
|
18
19
|
* Because of circularity concerns this constructor is not typed
|
|
@@ -20,9 +21,10 @@ export declare class QueryInputSpace extends RefinedSpace implements QueryFieldS
|
|
|
20
21
|
* @param input The source which might be extended
|
|
21
22
|
* @param queryOutput MUST BE A QuerySpace
|
|
22
23
|
*/
|
|
23
|
-
constructor(input: SourceDef, queryOutput: QueryOperationSpace);
|
|
24
|
+
constructor(input: SourceDef, queryOutput: QueryOperationSpace, _isProtectedAccessSpace: boolean);
|
|
24
25
|
extendSource(extendField: Join | AtomicFieldDeclaration): void;
|
|
25
26
|
isQueryFieldSpace(): this is QueryFieldSpace;
|
|
26
27
|
outputSpace(): QueryOperationSpace;
|
|
27
28
|
inputSpace(): this;
|
|
29
|
+
isProtectedAccessSpace(): boolean;
|
|
28
30
|
}
|
|
@@ -32,9 +32,10 @@ class QueryInputSpace extends refined_space_1.RefinedSpace {
|
|
|
32
32
|
* @param input The source which might be extended
|
|
33
33
|
* @param queryOutput MUST BE A QuerySpace
|
|
34
34
|
*/
|
|
35
|
-
constructor(input, queryOutput) {
|
|
35
|
+
constructor(input, queryOutput, _isProtectedAccessSpace) {
|
|
36
36
|
super(input);
|
|
37
37
|
this.queryOutput = queryOutput;
|
|
38
|
+
this._isProtectedAccessSpace = _isProtectedAccessSpace;
|
|
38
39
|
this.extendList = [];
|
|
39
40
|
}
|
|
40
41
|
extendSource(extendField) {
|
|
@@ -55,6 +56,9 @@ class QueryInputSpace extends refined_space_1.RefinedSpace {
|
|
|
55
56
|
inputSpace() {
|
|
56
57
|
return this;
|
|
57
58
|
}
|
|
59
|
+
isProtectedAccessSpace() {
|
|
60
|
+
return this._isProtectedAccessSpace;
|
|
61
|
+
}
|
|
58
62
|
}
|
|
59
63
|
exports.QueryInputSpace = QueryInputSpace;
|
|
60
64
|
//# sourceMappingURL=query-input-space.js.map
|
|
@@ -81,7 +81,7 @@ class QueryOperationSpace extends refined_space_1.RefinedSpace {
|
|
|
81
81
|
// (or `getPipeSegment` for index segments); if anyone
|
|
82
82
|
// tries to access it before that, they'll get an error
|
|
83
83
|
this._compositeFieldUsage = undefined;
|
|
84
|
-
this.exprSpace = new query_input_space_1.QueryInputSpace(queryInputSpace.structDef(), this);
|
|
84
|
+
this.exprSpace = new query_input_space_1.QueryInputSpace(queryInputSpace.structDef(), this, queryInputSpace.isProtectedAccessSpace());
|
|
85
85
|
if (refineThis)
|
|
86
86
|
this.addRefineFromFields(refineThis);
|
|
87
87
|
}
|
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import { SourceDef } from '../../../model/malloy_types';
|
|
1
|
+
import { AccessModifierLabel, Annotation, DocumentLocation, SourceDef } from '../../../model/malloy_types';
|
|
2
2
|
import { FieldListEdit } from '../source-properties/field-list-edit';
|
|
3
3
|
import { DynamicSpace } from './dynamic-space';
|
|
4
4
|
import { MalloyElement } from '../types/malloy-element';
|
|
5
5
|
import { ParameterSpace } from './parameter-space';
|
|
6
|
+
import { FieldReference } from '../query-items/field-references';
|
|
6
7
|
export declare class RefinedSpace extends DynamicSpace {
|
|
7
8
|
/**
|
|
8
9
|
* Factory for FieldSpace when there are accept/except edits
|
|
9
10
|
* @param from A structdef which seeds this space
|
|
10
11
|
* @param choose A accept/except edit of the "from" fields
|
|
11
12
|
*/
|
|
12
|
-
static filteredFrom(from: SourceDef, choose: FieldListEdit | undefined,
|
|
13
|
+
static filteredFrom(from: SourceDef, choose: FieldListEdit | undefined, fieldsToInclude: Set<string> | undefined, renames: {
|
|
14
|
+
as: string;
|
|
15
|
+
name: FieldReference;
|
|
16
|
+
location: DocumentLocation;
|
|
17
|
+
}[] | undefined, parameters: ParameterSpace | undefined): RefinedSpace;
|
|
13
18
|
pushFields(...defs: MalloyElement[]): void;
|
|
14
19
|
addField(def: MalloyElement): void;
|
|
20
|
+
addAccessModifiers(ams: Map<string, AccessModifierLabel>): void;
|
|
21
|
+
addNotes(notes: Map<string, Annotation>): void;
|
|
22
|
+
isProtectedAccessSpace(): boolean;
|
|
15
23
|
}
|
|
@@ -25,15 +25,53 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
25
25
|
exports.RefinedSpace = void 0;
|
|
26
26
|
const dynamic_space_1 = require("./dynamic-space");
|
|
27
27
|
const space_entry_1 = require("../types/space-entry");
|
|
28
|
+
const rename_space_field_1 = require("./rename-space-field");
|
|
29
|
+
const space_field_1 = require("../types/space-field");
|
|
28
30
|
class RefinedSpace extends dynamic_space_1.DynamicSpace {
|
|
29
31
|
/**
|
|
30
32
|
* Factory for FieldSpace when there are accept/except edits
|
|
31
33
|
* @param from A structdef which seeds this space
|
|
32
34
|
* @param choose A accept/except edit of the "from" fields
|
|
33
35
|
*/
|
|
34
|
-
static filteredFrom(from, choose, parameters) {
|
|
36
|
+
static filteredFrom(from, choose, fieldsToInclude, renames, parameters) {
|
|
35
37
|
const edited = new RefinedSpace(from);
|
|
36
|
-
|
|
38
|
+
const renameMap = new Map();
|
|
39
|
+
for (const rename of renames !== null && renames !== void 0 ? renames : []) {
|
|
40
|
+
if (renameMap.has(rename.name.refString)) {
|
|
41
|
+
rename.name.logError('already-renamed', `${rename.name.refString} already renamed to ${rename.as}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
renameMap.set(rename.name.refString, {
|
|
45
|
+
as: rename.as,
|
|
46
|
+
location: rename.location,
|
|
47
|
+
logTo: rename.name,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (fieldsToInclude !== undefined) {
|
|
52
|
+
const oldMap = edited.entries();
|
|
53
|
+
edited.dropEntries();
|
|
54
|
+
for (const [symbol, value] of oldMap) {
|
|
55
|
+
if (fieldsToInclude.has(symbol)) {
|
|
56
|
+
const renamed = renameMap.get(symbol);
|
|
57
|
+
if (renamed) {
|
|
58
|
+
if (value instanceof space_field_1.SpaceField) {
|
|
59
|
+
edited.setEntry(renamed.as, new rename_space_field_1.RenameSpaceField(value, renamed.as, renamed.location));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
renamed.logTo.logError('cannot-rename-non-field', `Cannot rename \`${symbol}\` which is not a field`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
edited.setEntry(symbol, value);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (choose !== undefined) {
|
|
71
|
+
choose.logError('accept-except-not-compatible-with-include', "Can't use `accept:` or `except:` with `include`");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (choose) {
|
|
37
75
|
const names = choose.refs.list;
|
|
38
76
|
const oldMap = edited.entries();
|
|
39
77
|
for (const name of names) {
|
|
@@ -71,6 +109,19 @@ class RefinedSpace extends dynamic_space_1.DynamicSpace {
|
|
|
71
109
|
def.logError('unexpected-element-type', `Internal error, ${def.elementType} not expected in this context`);
|
|
72
110
|
}
|
|
73
111
|
}
|
|
112
|
+
addAccessModifiers(ams) {
|
|
113
|
+
for (const [symbol, am] of ams) {
|
|
114
|
+
this.newAccessModifiers.set(symbol, am);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
addNotes(notes) {
|
|
118
|
+
for (const [symbol, note] of notes) {
|
|
119
|
+
this.newNotes.set(symbol, note);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
isProtectedAccessSpace() {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
74
125
|
}
|
|
75
126
|
exports.RefinedSpace = RefinedSpace;
|
|
76
127
|
//# sourceMappingURL=refined-space.js.map
|
|
@@ -15,6 +15,7 @@ export declare class StaticSpace implements FieldSpace {
|
|
|
15
15
|
dialectObj(): Dialect | undefined;
|
|
16
16
|
defToSpaceField(from: FieldDef): SpaceField;
|
|
17
17
|
private get map();
|
|
18
|
+
isProtectedAccessSpace(): boolean;
|
|
18
19
|
protected dropEntries(): void;
|
|
19
20
|
protected dropEntry(name: string): void;
|
|
20
21
|
entry(name: string): SpaceEntry | undefined;
|
|
@@ -75,6 +75,9 @@ class StaticSpace {
|
|
|
75
75
|
}
|
|
76
76
|
return this.memoMap;
|
|
77
77
|
}
|
|
78
|
+
isProtectedAccessSpace() {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
78
81
|
dropEntries() {
|
|
79
82
|
this.memoMap = {};
|
|
80
83
|
}
|
|
@@ -138,6 +141,20 @@ class StaticSpace {
|
|
|
138
141
|
text: head.refString,
|
|
139
142
|
});
|
|
140
143
|
}
|
|
144
|
+
if (definition === null || definition === void 0 ? void 0 : definition.accessModifier) {
|
|
145
|
+
// TODO path.length === 1 will not work with namespaces
|
|
146
|
+
if (!(this.isProtectedAccessSpace() &&
|
|
147
|
+
definition.accessModifier === 'internal' &&
|
|
148
|
+
path.length === 1)) {
|
|
149
|
+
return {
|
|
150
|
+
error: {
|
|
151
|
+
message: `'${head}' is ${definition === null || definition === void 0 ? void 0 : definition.accessModifier}`,
|
|
152
|
+
code: 'field-not-accessible',
|
|
153
|
+
},
|
|
154
|
+
found: undefined,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
141
158
|
} // cswenson review todo { else this is SpaceEntry not a field which can only be a param and what is going on? }
|
|
142
159
|
const joinPath = found instanceof struct_space_field_base_1.StructSpaceFieldBase
|
|
143
160
|
? [{ ...found.joinPathElement, name: head.refString }]
|
package/dist/lang/ast/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './source-query-elements/sq-source';
|
|
|
10
10
|
export * from './source-query-elements/sq-reference';
|
|
11
11
|
export * from './source-query-elements/sq-extend';
|
|
12
12
|
export * from './source-query-elements/sq-compose';
|
|
13
|
+
export * from './source-query-elements/include-item';
|
|
13
14
|
export * from './source-properties/field-list-edit';
|
|
14
15
|
export * from './source-properties/primary-key';
|
|
15
16
|
export * from './source-properties/renames';
|
package/dist/lang/ast/index.js
CHANGED
|
@@ -48,6 +48,7 @@ __exportStar(require("./source-query-elements/sq-source"), exports);
|
|
|
48
48
|
__exportStar(require("./source-query-elements/sq-reference"), exports);
|
|
49
49
|
__exportStar(require("./source-query-elements/sq-extend"), exports);
|
|
50
50
|
__exportStar(require("./source-query-elements/sq-compose"), exports);
|
|
51
|
+
__exportStar(require("./source-query-elements/include-item"), exports);
|
|
51
52
|
__exportStar(require("./source-properties/field-list-edit"), exports);
|
|
52
53
|
__exportStar(require("./source-properties/primary-key"), exports);
|
|
53
54
|
__exportStar(require("./source-properties/renames"), exports);
|
|
@@ -18,6 +18,7 @@ export declare abstract class AtomicFieldDeclaration extends MalloyElement imple
|
|
|
18
18
|
extendNote: typeof extendNoteMethod;
|
|
19
19
|
note?: Annotation;
|
|
20
20
|
constructor(expr: ExpressionDef, defineName: string, exprSrc?: string | undefined);
|
|
21
|
+
getName(): string;
|
|
21
22
|
fieldDef(fs: FieldSpace, exprName: string): FieldDef;
|
|
22
23
|
abstract typecheckExprValue(expr: ExprValue): void;
|
|
23
24
|
executesInOutputSpace(): boolean;
|
|
@@ -72,6 +73,7 @@ export declare class DefSpace implements FieldSpace {
|
|
|
72
73
|
isQueryFieldSpace(): this is QueryFieldSpace;
|
|
73
74
|
outputSpace(): import("../field-space/query-spaces").QueryOperationSpace;
|
|
74
75
|
inputSpace(): import("../types/field-space").SourceFieldSpace;
|
|
76
|
+
isProtectedAccessSpace(): boolean;
|
|
75
77
|
}
|
|
76
78
|
export declare class FieldDefinitionValue extends SpaceField {
|
|
77
79
|
readonly space: FieldSpace;
|
|
@@ -62,6 +62,9 @@ class AtomicFieldDeclaration extends malloy_element_1.MalloyElement {
|
|
|
62
62
|
this.isNoteableObj = true;
|
|
63
63
|
this.extendNote = noteable_1.extendNoteMethod;
|
|
64
64
|
}
|
|
65
|
+
getName() {
|
|
66
|
+
return this.defineName;
|
|
67
|
+
}
|
|
65
68
|
fieldDef(fs, exprName) {
|
|
66
69
|
/*
|
|
67
70
|
* In an explore we cannot reference the thing we are defining, you need
|
|
@@ -274,6 +277,9 @@ class DefSpace {
|
|
|
274
277
|
}
|
|
275
278
|
throw new Error('Not a query field space');
|
|
276
279
|
}
|
|
280
|
+
isProtectedAccessSpace() {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
277
283
|
}
|
|
278
284
|
exports.DefSpace = DefSpace;
|
|
279
285
|
class FieldDefinitionValue extends space_field_1.SpaceField {
|
|
@@ -13,6 +13,7 @@ export declare abstract class FieldReference extends ListOf<FieldName> implement
|
|
|
13
13
|
extendNote: typeof extendNoteMethod;
|
|
14
14
|
constructor(names: FieldName[]);
|
|
15
15
|
makeEntry(fs: DynamicSpace): void;
|
|
16
|
+
getName(): string;
|
|
16
17
|
get refToField(): RefToField;
|
|
17
18
|
get refString(): string;
|
|
18
19
|
get path(): string[];
|
|
@@ -26,6 +27,10 @@ export declare class AcceptExceptFieldReference extends FieldReference {
|
|
|
26
27
|
elementType: string;
|
|
27
28
|
typecheck(): void;
|
|
28
29
|
}
|
|
30
|
+
export declare class AccessModifierFieldReference extends FieldReference {
|
|
31
|
+
elementType: string;
|
|
32
|
+
typecheck(): void;
|
|
33
|
+
}
|
|
29
34
|
export declare class ExpressionFieldReference extends FieldReference {
|
|
30
35
|
elementType: string;
|
|
31
36
|
typecheck(): void;
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.FieldReferences = exports.WildcardFieldReference = exports.ViewOrScalarFieldReference = exports.DimensionFieldReference = exports.MeasureFieldReference = exports.DeclareFieldReference = exports.ProjectFieldReference = exports.GroupByFieldReference = exports.AggregateFieldReference = exports.IndexFieldReference = exports.CalculateFieldReference = exports.ParameterFieldReference = exports.PartitionByFieldReference = exports.ExpressionFieldReference = exports.AcceptExceptFieldReference = exports.FieldReference = void 0;
|
|
25
|
+
exports.FieldReferences = exports.WildcardFieldReference = exports.ViewOrScalarFieldReference = exports.DimensionFieldReference = exports.MeasureFieldReference = exports.DeclareFieldReference = exports.ProjectFieldReference = exports.GroupByFieldReference = exports.AggregateFieldReference = exports.IndexFieldReference = exports.CalculateFieldReference = exports.ParameterFieldReference = exports.PartitionByFieldReference = exports.ExpressionFieldReference = exports.AccessModifierFieldReference = exports.AcceptExceptFieldReference = exports.FieldReference = void 0;
|
|
26
26
|
const reference_field_1 = require("../field-space/reference-field");
|
|
27
27
|
const definition_list_1 = require("../types/definition-list");
|
|
28
28
|
const malloy_element_1 = require("../types/malloy-element");
|
|
@@ -45,6 +45,9 @@ class FieldReference extends malloy_element_1.ListOf {
|
|
|
45
45
|
fs.newEntry(refName, this, new reference_field_1.ReferenceField(this, fromFS));
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
+
getName() {
|
|
49
|
+
return this.nameString;
|
|
50
|
+
}
|
|
48
51
|
get refToField() {
|
|
49
52
|
return {
|
|
50
53
|
type: 'fieldref',
|
|
@@ -94,6 +97,17 @@ class AcceptExceptFieldReference extends FieldReference {
|
|
|
94
97
|
}
|
|
95
98
|
}
|
|
96
99
|
exports.AcceptExceptFieldReference = AcceptExceptFieldReference;
|
|
100
|
+
class AccessModifierFieldReference extends FieldReference {
|
|
101
|
+
constructor() {
|
|
102
|
+
super(...arguments);
|
|
103
|
+
this.elementType = 'accessModifierFieldReference';
|
|
104
|
+
}
|
|
105
|
+
// Nothing to typecheck here
|
|
106
|
+
typecheck() {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.AccessModifierFieldReference = AccessModifierFieldReference;
|
|
97
111
|
class ExpressionFieldReference extends FieldReference {
|
|
98
112
|
constructor() {
|
|
99
113
|
super(...arguments);
|
|
@@ -230,7 +244,7 @@ class WildcardFieldReference extends malloy_element_1.MalloyElement {
|
|
|
230
244
|
this.isNoteableObj = true;
|
|
231
245
|
this.extendNote = noteable_1.extendNoteMethod;
|
|
232
246
|
this.except = new Set();
|
|
233
|
-
this.has({ joinPath
|
|
247
|
+
this.has({ joinPath });
|
|
234
248
|
}
|
|
235
249
|
getFieldDef() {
|
|
236
250
|
throw this.internalError('fielddef request from wildcard reference');
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { AccessModifierLabel } from '../../../model';
|
|
1
2
|
import { AtomicFieldDeclaration } from '../query-items/field-declaration';
|
|
2
3
|
import { DefinitionList } from '../types/definition-list';
|
|
3
4
|
import { QueryBuilder } from '../types/query-builder';
|
|
4
5
|
import { LegalRefinementStage, QueryPropertyInterface } from '../types/query-property-interface';
|
|
5
6
|
export declare class DeclareFields extends DefinitionList<AtomicFieldDeclaration> implements QueryPropertyInterface {
|
|
7
|
+
readonly accessModifier: AccessModifierLabel | undefined;
|
|
6
8
|
elementType: string;
|
|
7
9
|
queryRefinementStage: LegalRefinementStage;
|
|
8
10
|
forceQueryClass: undefined;
|
|
9
|
-
constructor(fields: AtomicFieldDeclaration[]);
|
|
11
|
+
constructor(fields: AtomicFieldDeclaration[], accessModifier: AccessModifierLabel | undefined);
|
|
10
12
|
queryExecute(executeFor: QueryBuilder): void;
|
|
13
|
+
get delarationNames(): string[];
|
|
11
14
|
}
|
|
@@ -26,8 +26,9 @@ exports.DeclareFields = void 0;
|
|
|
26
26
|
const definition_list_1 = require("../types/definition-list");
|
|
27
27
|
const query_property_interface_1 = require("../types/query-property-interface");
|
|
28
28
|
class DeclareFields extends definition_list_1.DefinitionList {
|
|
29
|
-
constructor(fields) {
|
|
29
|
+
constructor(fields, accessModifier) {
|
|
30
30
|
super(fields);
|
|
31
|
+
this.accessModifier = accessModifier;
|
|
31
32
|
this.elementType = 'declareFields';
|
|
32
33
|
this.queryRefinementStage = query_property_interface_1.LegalRefinementStage.Single;
|
|
33
34
|
this.forceQueryClass = undefined;
|
|
@@ -37,6 +38,9 @@ class DeclareFields extends definition_list_1.DefinitionList {
|
|
|
37
38
|
executeFor.inputFS.extendSource(qel);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
41
|
+
get delarationNames() {
|
|
42
|
+
return this.list.map(el => el.defineName);
|
|
43
|
+
}
|
|
40
44
|
}
|
|
41
45
|
exports.DeclareFields = DeclareFields;
|
|
42
46
|
//# sourceMappingURL=declare-fields.js.map
|
|
@@ -28,7 +28,7 @@ class CompositeSource extends source_1.Source {
|
|
|
28
28
|
const dialect = sourceDefs[0].dialect;
|
|
29
29
|
const name = 'composite_source';
|
|
30
30
|
const fields = [];
|
|
31
|
-
const
|
|
31
|
+
const fieldsByName = new Map();
|
|
32
32
|
this.sources.forEach((source, index) => {
|
|
33
33
|
var _a;
|
|
34
34
|
const sourceDef = sourceDefs[index];
|
|
@@ -42,9 +42,12 @@ class CompositeSource extends source_1.Source {
|
|
|
42
42
|
source.logWarning('composite-source-atomic-fields-only', `Only atomic fields are supported in composite sources; field \`${field.name}\` is not atomic and will be ignored`);
|
|
43
43
|
continue;
|
|
44
44
|
}
|
|
45
|
+
if (field.accessModifier === 'private') {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
45
48
|
const fieldName = (_a = field.as) !== null && _a !== void 0 ? _a : field.name;
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
const existing = fieldsByName.get(fieldName);
|
|
50
|
+
if (existing === undefined) {
|
|
48
51
|
const compositeField = {
|
|
49
52
|
...field,
|
|
50
53
|
name: fieldName,
|
|
@@ -54,8 +57,12 @@ class CompositeSource extends source_1.Source {
|
|
|
54
57
|
code: this.code,
|
|
55
58
|
location: this.codeLocation,
|
|
56
59
|
};
|
|
60
|
+
fieldsByName.set(fieldName, compositeField);
|
|
57
61
|
fields.push(compositeField);
|
|
58
62
|
}
|
|
63
|
+
else if (field.accessModifier === 'internal') {
|
|
64
|
+
existing.accessModifier = 'internal';
|
|
65
|
+
}
|
|
59
66
|
}
|
|
60
67
|
});
|
|
61
68
|
return {
|
|
@@ -3,15 +3,17 @@ import { HasParameter } from '../parameters/has-parameter';
|
|
|
3
3
|
import { SourceDesc } from '../types/source-desc';
|
|
4
4
|
import { Source } from './source';
|
|
5
5
|
import { ParameterSpace } from '../field-space/parameter-space';
|
|
6
|
+
import { IncludeItem } from '../source-query-elements/include-item';
|
|
6
7
|
/**
|
|
7
8
|
* A Source made from a source reference and a set of refinements
|
|
8
9
|
*/
|
|
9
10
|
export declare class RefinedSource extends Source {
|
|
10
11
|
readonly source: Source;
|
|
11
12
|
readonly refinement: SourceDesc;
|
|
13
|
+
readonly includeList: IncludeItem[] | undefined;
|
|
12
14
|
elementType: string;
|
|
13
15
|
currentAnnotation?: Annotation;
|
|
14
|
-
constructor(source: Source, refinement: SourceDesc);
|
|
16
|
+
constructor(source: Source, refinement: SourceDesc, includeList: IncludeItem[] | undefined);
|
|
15
17
|
getSourceDef(parameterSpace: ParameterSpace | undefined): SourceDef;
|
|
16
18
|
withParameters(parameterSpace: ParameterSpace | undefined, pList: HasParameter[] | undefined): SourceDef;
|
|
17
19
|
}
|