Skip to content

Commit 338fc47

Browse files
committed
feat: new valuetype SheetRow
Replaces `Collection<text>` for interpreting tables.
1 parent 5f76428 commit 338fc47

11 files changed

Lines changed: 67 additions & 12 deletions

File tree

libs/execution/src/lib/types/value-types/internal-representation-parsing.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,8 @@ class InternalRepresentationParserVisitor extends ValueTypeVisitor<
147147
`Cannot parse valuetype definitions into internal values`,
148148
);
149149
}
150+
151+
override visitSheetRow(): InvalidValue {
152+
return new InvalidValue(`Cannot parse sheet rows into internal values`);
153+
}
150154
}

libs/execution/src/lib/types/value-types/value-representation-validity.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import { strict as assert } from 'assert';
77

88
import {
9+
type SheetRowValueType,
910
type AtomicValueType,
1011
type BooleanValuetype,
1112
type CellRangeValuetype,
@@ -130,6 +131,10 @@ class ValueRepresentationValidityVisitor extends ValueTypeVisitor<boolean> {
130131
return this.isValidForPrimitiveValuetype(valueType);
131132
}
132133

134+
override visitSheetRow(valueType: SheetRowValueType): boolean {
135+
return this.isValidForPrimitiveValuetype(valueType);
136+
}
137+
133138
override visitTransform(valueType: TransformValuetype): boolean {
134139
return this.isValidForPrimitiveValuetype(valueType);
135140
}

libs/execution/src/lib/types/value-types/visitors/sql-column-type-visitor.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ export class SQLColumnTypeVisitor extends ValueTypeVisitor<string> {
7676
);
7777
}
7878

79+
override visitSheetRow(): string {
80+
throw new Error(
81+
'No visit implementation given for sheet rows. Cannot be the type of a column.',
82+
);
83+
}
84+
7985
override visitTransform(): string {
8086
throw new Error(
8187
'No visit implementation given for transforms. Cannot be the type of a column.',

libs/execution/src/lib/types/value-types/visitors/sql-value-representation-visitor.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ export class SQLValueRepresentationVisitor extends ValueTypeVisitor<
130130
);
131131
}
132132

133+
override visitSheetRow(): (
134+
value: InternalValidValueRepresentation | InternalErrorValueRepresentation,
135+
) => string {
136+
throw new Error(
137+
'No visit implementation given for sheet row. Cannot be the type of a column.',
138+
);
139+
}
140+
133141
override visitTransform(): (
134142
value: InternalValidValueRepresentation | InternalErrorValueRepresentation,
135143
) => string {

libs/language-server/src/lib/ast/expressions/type-computers/dot-operator-type-computer.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { type BinaryExpression } from '../../generated/ast';
77
import {
88
type ValueType,
99
type ValueTypeProvider,
10-
isCollectionValueType,
1110
} from '../../wrappers/value-type';
1211
import { type BinaryOperatorTypeComputer } from '../operator-type-computer';
1312

@@ -20,12 +19,7 @@ export class DotOperatorTypeComputer implements BinaryOperatorTypeComputer {
2019
expression: BinaryExpression,
2120
context: ValidationContext | undefined,
2221
): ValueType | undefined {
23-
if (
24-
!isCollectionValueType(
25-
leftOperandType,
26-
this.valueTypeProvider.Primitives.Text,
27-
)
28-
) {
22+
if (!leftOperandType.equals(this.valueTypeProvider.Primitives.SheetRow)) {
2923
context?.accept(
3024
'error',
3125
`Operator does not support type ${leftOperandType.getName()}`,

libs/language-server/src/lib/ast/wrappers/value-type/primitive/collection/abstract-collection-value-type.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,4 @@ export abstract class AbstractCollectionValueType<
1414
override isAllowedAsRuntimeParameter(): boolean {
1515
return false;
1616
}
17-
18-
override isReferenceableByUser(): boolean {
19-
return true;
20-
}
2117
}

libs/language-server/src/lib/ast/wrappers/value-type/primitive/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export { type TextValuetype } from './text-value-type';
2222
export { type TransformValuetype } from './transform-value-type';
2323
export { type ValuetypeAssignmentValuetype } from './value-type-assignment-value-type';
2424
export { type ValuetypeDefinitionValuetype } from './value-type-definition-value-type';
25+
export { type SheetRowValueType } from './sheetrow-value-type';
2526

2627
export {
2728
ValueTypeProvider,

libs/language-server/src/lib/ast/wrappers/value-type/primitive/primitive-value-type-provider.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { type PrimitiveValueType } from './primitive-value-type';
1616
import { RegexValuetype } from './regex-value-type';
1717
import { TextValuetype } from './text-value-type';
1818
import { TransformValuetype } from './transform-value-type';
19+
import { SheetRowValueType } from './sheetrow-value-type';
1920
import { ValuetypeAssignmentValuetype } from './value-type-assignment-value-type';
2021
import { ValuetypeDefinitionValuetype } from './value-type-definition-value-type';
2122

@@ -48,6 +49,8 @@ export class PrimitiveValueTypeProvider {
4849

4950
Transform = new TransformValuetype();
5051

52+
SheetRow = new SheetRowValueType();
53+
5154
getAll(): PrimitiveValueType[] {
5255
return [
5356
this.Boolean,
@@ -60,6 +63,7 @@ export class PrimitiveValueTypeProvider {
6063
this.ValuetypeAssignment,
6164
this.ValuetypeDefinition,
6265
this.Transform,
66+
this.SheetRow,
6367
];
6468
}
6569
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-FileCopyrightText: 2023 Friedrich-Alexander-Universitat Erlangen-Nurnberg
2+
//
3+
// SPDX-License-Identifier: AGPL-3.0-only
4+
5+
import { PrimitiveValueType } from './primitive-value-type';
6+
import { type ValueTypeVisitor } from '../value-type';
7+
import { type InternalValidValueRepresentation } from '../../../expressions';
8+
9+
export class SheetRowValueType extends PrimitiveValueType<string[]> {
10+
acceptVisitor<R>(visitor: ValueTypeVisitor<R>): R {
11+
return visitor.visitSheetRow(this);
12+
}
13+
14+
override isAllowedAsRuntimeParameter(): false {
15+
return false;
16+
}
17+
18+
override getName(): 'SheetRow' {
19+
return 'SheetRow';
20+
}
21+
22+
override isInternalValidValueRepresentation(
23+
operandValue: InternalValidValueRepresentation,
24+
): operandValue is string[] {
25+
return (
26+
Array.isArray(operandValue) &&
27+
operandValue.every((element) => typeof element === 'string')
28+
);
29+
}
30+
31+
override isReferenceableByUser(): true {
32+
return true;
33+
}
34+
}

libs/language-server/src/lib/ast/wrappers/value-type/value-type.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
type RegexValuetype,
2121
type TextValuetype,
2222
type TransformValuetype,
23+
type SheetRowValueType,
2324
type ValuetypeAssignmentValuetype,
2425
} from './primitive';
2526

@@ -93,4 +94,6 @@ export abstract class ValueTypeVisitor<R = unknown> {
9394
abstract visitTransform(valueType: TransformValuetype): R;
9495

9596
abstract visitAtomicValueType(valueType: AtomicValueType): R;
97+
98+
abstract visitSheetRow(valueType: SheetRowValueType): R;
9699
}

0 commit comments

Comments
 (0)