@finos/legend-extension-dsl-data-quality 2.1.34 → 2.1.36
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/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.d.ts.map +1 -1
- package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.js +45 -13
- package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.js.map +1 -1
- package/lib/components/DataQualityCustomSelector.d.ts +16 -1
- package/lib/components/DataQualityCustomSelector.d.ts.map +1 -1
- package/lib/components/DataQualityCustomSelector.js +29 -4
- package/lib/components/DataQualityCustomSelector.js.map +1 -1
- package/lib/components/DataQualityRelationComparisonEditor.d.ts +19 -0
- package/lib/components/DataQualityRelationComparisonEditor.d.ts.map +1 -0
- package/lib/components/DataQualityRelationComparisonEditor.js +239 -0
- package/lib/components/DataQualityRelationComparisonEditor.js.map +1 -0
- package/lib/components/DataQualityRelationGridResult.d.ts +3 -0
- package/lib/components/DataQualityRelationGridResult.d.ts.map +1 -1
- package/lib/components/DataQualityRelationGridResult.js +1 -1
- package/lib/components/DataQualityRelationGridResult.js.map +1 -1
- package/lib/components/DataQualityRelationLambdaGUIDataTypeHandlers.d.ts +0 -10
- package/lib/components/DataQualityRelationLambdaGUIDataTypeHandlers.d.ts.map +1 -1
- package/lib/components/DataQualityRelationLambdaGUIDataTypeHandlers.js +11 -24
- package/lib/components/DataQualityRelationLambdaGUIDataTypeHandlers.js.map +1 -1
- package/lib/components/DataQualityRelationLambdaGUIValidationEditor.d.ts.map +1 -1
- package/lib/components/DataQualityRelationLambdaGUIValidationEditor.js +6 -4
- package/lib/components/DataQualityRelationLambdaGUIValidationEditor.js.map +1 -1
- package/lib/components/states/DataQualityRelationComparisonConfigurationState.d.ts +111 -0
- package/lib/components/states/DataQualityRelationComparisonConfigurationState.d.ts.map +1 -0
- package/lib/components/states/DataQualityRelationComparisonConfigurationState.js +495 -0
- package/lib/components/states/DataQualityRelationComparisonConfigurationState.js.map +1 -0
- package/lib/data-quality-custom-selector.css +2 -2
- package/lib/data-quality-custom-selector.css.map +1 -1
- package/lib/graph/metamodel/DSL_DataQuality_HashUtils.d.ts +3 -1
- package/lib/graph/metamodel/DSL_DataQuality_HashUtils.d.ts.map +1 -1
- package/lib/graph/metamodel/DSL_DataQuality_HashUtils.js +2 -0
- package/lib/graph/metamodel/DSL_DataQuality_HashUtils.js.map +1 -1
- package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.d.ts.map +1 -1
- package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.js +2 -1
- package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.js.map +1 -1
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts +35 -0
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts.map +1 -1
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js +37 -0
- package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.d.ts +2 -1
- package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.d.ts.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.js +2 -1
- package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.js.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts +7 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js +18 -0
- package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.d.ts.map +1 -1
- package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.js +5 -2
- package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.js.map +1 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts +3 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts.map +1 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js +28 -1
- package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js.map +1 -1
- package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.d.ts +4 -1
- package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.js.map +1 -1
- package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.js +33 -5
- package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.d.ts +26 -2
- package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.js +107 -3
- package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts +19 -0
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js +37 -0
- package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js +26 -3
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts +3 -2
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js +29 -2
- package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts +4 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js +37 -2
- package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +1 -1
- package/package.json +11 -11
- package/src/components/DSL_DataQuality_LegendStudioApplicationPlugin.tsx +64 -12
- package/src/components/DataQualityCustomSelector.tsx +111 -6
- package/src/components/DataQualityRelationComparisonEditor.tsx +795 -0
- package/src/components/DataQualityRelationGridResult.tsx +1 -1
- package/src/components/DataQualityRelationLambdaGUIDataTypeHandlers.tsx +9 -87
- package/src/components/DataQualityRelationLambdaGUIValidationEditor.tsx +16 -6
- package/src/components/states/DataQualityRelationComparisonConfigurationState.ts +747 -0
- package/src/graph/metamodel/DSL_DataQuality_HashUtils.ts +2 -0
- package/src/graph/metamodel/DSL_DataQuality_PureGraphPlugin.ts +2 -0
- package/src/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.ts +66 -0
- package/src/graph-manager/DSL_DataQuality_GraphManagerHelper.ts +13 -0
- package/src/graph-manager/DSL_DataQuality_GraphModifierHelper.ts +57 -0
- package/src/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.ts +8 -0
- package/src/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.ts +42 -0
- package/src/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.ts +16 -0
- package/src/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.ts +65 -0
- package/src/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.ts +171 -1
- package/src/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.ts +49 -0
- package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.ts +39 -0
- package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.ts +50 -0
- package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.ts +71 -0
- package/style/_data-quality-relation-comparison-editor.scss +361 -0
- package/style/data-quality-custom-selector.scss +23 -0
- package/style/index.scss +74 -0
- package/tsconfig.json +2 -0
|
@@ -165,3 +165,52 @@ export class V1_DataQualityRelationValidationsConfiguration
|
|
|
165
165
|
return visitor.visit_PackageableElement(this);
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
+
|
|
169
|
+
export abstract class V1_ReconStrategy implements Hashable {
|
|
170
|
+
abstract get hashCode(): string;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export class V1_MD5HashStrategy extends V1_ReconStrategy {
|
|
174
|
+
sourceHashColumn?: string | undefined;
|
|
175
|
+
targetHashColumn?: string | undefined;
|
|
176
|
+
aggregatedHash?: boolean | undefined;
|
|
177
|
+
|
|
178
|
+
override get hashCode(): string {
|
|
179
|
+
return hashArray([
|
|
180
|
+
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_MD5_HASH_STRATEGY,
|
|
181
|
+
this.sourceHashColumn ?? '',
|
|
182
|
+
this.targetHashColumn ?? '',
|
|
183
|
+
this.aggregatedHash ?? false,
|
|
184
|
+
]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export class V1_DataQualityRelationComparisonConfiguration
|
|
189
|
+
extends V1_DataQualityValidationsConfiguration
|
|
190
|
+
implements Hashable
|
|
191
|
+
{
|
|
192
|
+
source!: V1_DataQualityRelationQueryLambda;
|
|
193
|
+
target!: V1_DataQualityRelationQueryLambda;
|
|
194
|
+
keys: string[] = [];
|
|
195
|
+
columnsToCompare: string[] = [];
|
|
196
|
+
strategy!: V1_ReconStrategy;
|
|
197
|
+
expectedMatch?: number | undefined;
|
|
198
|
+
|
|
199
|
+
override get hashCode(): string {
|
|
200
|
+
return hashArray([
|
|
201
|
+
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_COMPARISON_HASH_STRUCTURE,
|
|
202
|
+
this.source,
|
|
203
|
+
this.target,
|
|
204
|
+
hashArray(this.keys),
|
|
205
|
+
hashArray(this.columnsToCompare),
|
|
206
|
+
String(this.expectedMatch ?? ''),
|
|
207
|
+
this.strategy,
|
|
208
|
+
]);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
accept_PackageableElementVisitor<T>(
|
|
212
|
+
visitor: V1_PackageableElementVisitor<T>,
|
|
213
|
+
): T {
|
|
214
|
+
return visitor.visit_PackageableElement(this);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
@@ -31,8 +31,10 @@ import {
|
|
|
31
31
|
type V1_DataQualityRelationValidation,
|
|
32
32
|
type V1_DataQualityRelationValidationsConfiguration,
|
|
33
33
|
type V1_DataQualityServiceValidationsConfiguration,
|
|
34
|
+
type V1_DataQualityRelationComparisonConfiguration,
|
|
34
35
|
V1_DataSpaceDataQualityExecutionContext,
|
|
35
36
|
V1_MappingAndRuntimeDataQualityExecutionContext,
|
|
37
|
+
V1_MD5HashStrategy,
|
|
36
38
|
} from '../V1_DataQualityValidationConfiguration.js';
|
|
37
39
|
import {
|
|
38
40
|
type DataQualityExecutionContext,
|
|
@@ -40,6 +42,7 @@ import {
|
|
|
40
42
|
DataQualityRelationValidation,
|
|
41
43
|
DataSpaceDataQualityExecutionContext,
|
|
42
44
|
MappingAndRuntimeDataQualityExecutionContext,
|
|
45
|
+
MD5HashStrategy,
|
|
43
46
|
} from '../../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
|
|
44
47
|
import {
|
|
45
48
|
type V1_GraphBuilderContext,
|
|
@@ -65,6 +68,7 @@ import {
|
|
|
65
68
|
getOwnDataQualityClassValidationsConfiguration,
|
|
66
69
|
getOwnDataQualityServiceValidationsConfiguration,
|
|
67
70
|
getOwnDataQualityRelationValidationsConfiguration,
|
|
71
|
+
getOwnDataQualityRelationComparisonConfiguration,
|
|
68
72
|
} from '../../../../DSL_DataQuality_GraphManagerHelper.js';
|
|
69
73
|
|
|
70
74
|
export function V1_buildDataQualityExecutionContext(
|
|
@@ -355,3 +359,38 @@ export function V1_buildDataQualityServiceValidationConfiguration(
|
|
|
355
359
|
) as DataQualityRootGraphFetchTree)
|
|
356
360
|
: undefined;
|
|
357
361
|
}
|
|
362
|
+
|
|
363
|
+
export function V1_buildDataQualityRelationComparisonConfiguration(
|
|
364
|
+
elementProtocol: V1_DataQualityRelationComparisonConfiguration,
|
|
365
|
+
context: V1_GraphBuilderContext,
|
|
366
|
+
): void {
|
|
367
|
+
const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name);
|
|
368
|
+
const element = getOwnDataQualityRelationComparisonConfiguration(
|
|
369
|
+
path,
|
|
370
|
+
context.currentSubGraph,
|
|
371
|
+
);
|
|
372
|
+
element.source = new DataQualityRelationQueryLambda();
|
|
373
|
+
element.source.body = elementProtocol.source.body;
|
|
374
|
+
element.source.parameters = elementProtocol.source.parameters.map((param) =>
|
|
375
|
+
V1_buildVariable(param, context),
|
|
376
|
+
);
|
|
377
|
+
element.target = new DataQualityRelationQueryLambda();
|
|
378
|
+
element.target.body = elementProtocol.target.body;
|
|
379
|
+
element.target.parameters = elementProtocol.target.parameters.map((param) =>
|
|
380
|
+
V1_buildVariable(param, context),
|
|
381
|
+
);
|
|
382
|
+
element.keys = elementProtocol.keys;
|
|
383
|
+
element.columnsToCompare = elementProtocol.columnsToCompare;
|
|
384
|
+
if (elementProtocol.strategy instanceof V1_MD5HashStrategy) {
|
|
385
|
+
const strategy = new MD5HashStrategy();
|
|
386
|
+
strategy.sourceHashColumn = elementProtocol.strategy.sourceHashColumn;
|
|
387
|
+
strategy.targetHashColumn = elementProtocol.strategy.targetHashColumn;
|
|
388
|
+
strategy.aggregatedHash = elementProtocol.strategy.aggregatedHash;
|
|
389
|
+
element.strategy = strategy;
|
|
390
|
+
} else {
|
|
391
|
+
throw new UnsupportedOperationError(
|
|
392
|
+
`Can't build recon strategy: unsupported type`,
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
element.expectedMatch = elementProtocol.expectedMatch;
|
|
396
|
+
}
|
|
@@ -45,17 +45,23 @@ import {
|
|
|
45
45
|
type DataQualityRelationValidation,
|
|
46
46
|
type DataQualityRelationValidationConfiguration,
|
|
47
47
|
type DataQualityClassValidationsConfiguration,
|
|
48
|
+
type DataQualityRelationComparisonConfiguration,
|
|
49
|
+
type ReconStrategy,
|
|
50
|
+
MD5HashStrategy,
|
|
48
51
|
DataSpaceDataQualityExecutionContext,
|
|
49
52
|
MappingAndRuntimeDataQualityExecutionContext,
|
|
50
53
|
} from '../../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
|
|
51
54
|
import {
|
|
52
55
|
type V1_DataQualityExecutionContext,
|
|
56
|
+
type V1_ReconStrategy,
|
|
53
57
|
V1_DataQualityClassValidationsConfiguration,
|
|
54
58
|
V1_DataQualityRelationValidation,
|
|
55
59
|
V1_DataQualityRelationValidationsConfiguration,
|
|
56
60
|
V1_DataSpaceDataQualityExecutionContext,
|
|
57
61
|
V1_MappingAndRuntimeDataQualityExecutionContext,
|
|
58
62
|
V1_DataQualityRelationQueryLambda,
|
|
63
|
+
V1_DataQualityRelationComparisonConfiguration,
|
|
64
|
+
V1_MD5HashStrategy,
|
|
59
65
|
} from '../V1_DataQualityValidationConfiguration.js';
|
|
60
66
|
import { DATA_SPACE_ELEMENT_POINTER } from '@finos/legend-extension-dsl-data-space/graph';
|
|
61
67
|
|
|
@@ -224,3 +230,47 @@ export function V1_transformDataQualityRelationValidationConfiguration(
|
|
|
224
230
|
);
|
|
225
231
|
return protocol;
|
|
226
232
|
}
|
|
233
|
+
|
|
234
|
+
function V1_transformReconStrategy(value: ReconStrategy): V1_ReconStrategy {
|
|
235
|
+
if (value instanceof MD5HashStrategy) {
|
|
236
|
+
const protocol = new V1_MD5HashStrategy();
|
|
237
|
+
protocol.sourceHashColumn = value.sourceHashColumn;
|
|
238
|
+
protocol.targetHashColumn = value.targetHashColumn;
|
|
239
|
+
protocol.aggregatedHash = value.aggregatedHash;
|
|
240
|
+
return protocol;
|
|
241
|
+
}
|
|
242
|
+
throw new UnsupportedOperationError(
|
|
243
|
+
`Can't transform recon strategy: unsupported type`,
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export function V1_transformDataQualityRelationComparisonConfiguration(
|
|
248
|
+
metamodel: DataQualityRelationComparisonConfiguration,
|
|
249
|
+
context: V1_GraphTransformerContext,
|
|
250
|
+
): V1_DataQualityRelationComparisonConfiguration {
|
|
251
|
+
const protocol = new V1_DataQualityRelationComparisonConfiguration();
|
|
252
|
+
V1_initPackageableElement(protocol, metamodel);
|
|
253
|
+
protocol.name = metamodel.name;
|
|
254
|
+
protocol.package = metamodel.package?.path ?? '';
|
|
255
|
+
protocol.source = new V1_DataQualityRelationQueryLambda();
|
|
256
|
+
protocol.source.body = metamodel.source.body;
|
|
257
|
+
protocol.source.parameters = metamodel.source.parameters.map(
|
|
258
|
+
(v) =>
|
|
259
|
+
v.accept_RawValueSpecificationVisitor(
|
|
260
|
+
new V1_RawValueSpecificationTransformer(context),
|
|
261
|
+
) as V1_RawVariable,
|
|
262
|
+
);
|
|
263
|
+
protocol.target = new V1_DataQualityRelationQueryLambda();
|
|
264
|
+
protocol.target.body = metamodel.target.body;
|
|
265
|
+
protocol.target.parameters = metamodel.target.parameters.map(
|
|
266
|
+
(v) =>
|
|
267
|
+
v.accept_RawValueSpecificationVisitor(
|
|
268
|
+
new V1_RawValueSpecificationTransformer(context),
|
|
269
|
+
) as V1_RawVariable,
|
|
270
|
+
);
|
|
271
|
+
protocol.keys = metamodel.keys;
|
|
272
|
+
protocol.columnsToCompare = metamodel.columnsToCompare;
|
|
273
|
+
protocol.strategy = V1_transformReconStrategy(metamodel.strategy);
|
|
274
|
+
protocol.expectedMatch = metamodel.expectedMatch;
|
|
275
|
+
return protocol;
|
|
276
|
+
}
|
|
@@ -24,9 +24,11 @@ import {
|
|
|
24
24
|
list,
|
|
25
25
|
optional,
|
|
26
26
|
raw,
|
|
27
|
+
SKIP,
|
|
27
28
|
} from 'serializr';
|
|
28
29
|
import {
|
|
29
30
|
type V1_DataQualityExecutionContext,
|
|
31
|
+
type V1_ReconStrategy,
|
|
30
32
|
V1_DataQualityClassValidationsConfiguration,
|
|
31
33
|
V1_DataQualityServiceValidationsConfiguration,
|
|
32
34
|
V1_DataSpaceDataQualityExecutionContext,
|
|
@@ -34,6 +36,8 @@ import {
|
|
|
34
36
|
V1_DataQualityRelationValidationsConfiguration,
|
|
35
37
|
V1_DataQualityRelationValidation,
|
|
36
38
|
V1_DataQualityRelationQueryLambda,
|
|
39
|
+
V1_DataQualityRelationComparisonConfiguration,
|
|
40
|
+
V1_MD5HashStrategy,
|
|
37
41
|
} from '../../V1_DataQualityValidationConfiguration.js';
|
|
38
42
|
import {
|
|
39
43
|
type PlainObject,
|
|
@@ -60,6 +64,8 @@ export const V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE =
|
|
|
60
64
|
'dataqualityRelationValidation';
|
|
61
65
|
export const V1_DATA_QUALITY_SERVICE_PROTOCOL_TYPE =
|
|
62
66
|
'dataQualityServiceValidations';
|
|
67
|
+
export const V1_DATA_QUALITY_RELATION_COMPARISON_PROTOCOL_TYPE =
|
|
68
|
+
'dataQualityRelationComparison';
|
|
63
69
|
const V1_DATA_QUALITY_DATASPACE_EXECUTION_CONTEXT =
|
|
64
70
|
'dataSpaceDataQualityExecutionContext';
|
|
65
71
|
const V1_DATA_QUALITY_MAPPING_AND_RUNTIME_EXECUTION_CONTEXT =
|
|
@@ -251,3 +257,68 @@ export const V1_deserializeDataQualityRelationValidation = (
|
|
|
251
257
|
plugins: PureProtocolProcessorPlugin[],
|
|
252
258
|
): V1_DataQualityRelationValidationsConfiguration =>
|
|
253
259
|
deserialize(V1_dataQualityRelationValidationModelSchema(plugins), json);
|
|
260
|
+
|
|
261
|
+
const V1_MD5_HASH_STRATEGY_TYPE = 'md5Hash';
|
|
262
|
+
|
|
263
|
+
const V1_md5HashStrategyModelSchema = createModelSchema(V1_MD5HashStrategy, {
|
|
264
|
+
_type: usingConstantValueSchema(V1_MD5_HASH_STRATEGY_TYPE),
|
|
265
|
+
sourceHashColumn: optional(primitive()),
|
|
266
|
+
targetHashColumn: optional(primitive()),
|
|
267
|
+
aggregatedHash: optional(primitive()),
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
function V1_serializeReconStrategy(
|
|
271
|
+
value: V1_ReconStrategy,
|
|
272
|
+
): PlainObject<V1_ReconStrategy> {
|
|
273
|
+
if (value instanceof V1_MD5HashStrategy) {
|
|
274
|
+
return serialize(V1_md5HashStrategyModelSchema, value);
|
|
275
|
+
}
|
|
276
|
+
throw new UnsupportedOperationError(
|
|
277
|
+
`Can't serialize recon strategy: unsupported type`,
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function V1_deserializeReconStrategy(
|
|
282
|
+
json: PlainObject<V1_ReconStrategy>,
|
|
283
|
+
): V1_ReconStrategy {
|
|
284
|
+
switch (json._type) {
|
|
285
|
+
case V1_MD5_HASH_STRATEGY_TYPE:
|
|
286
|
+
return deserialize(V1_md5HashStrategyModelSchema, json);
|
|
287
|
+
default:
|
|
288
|
+
throw new UnsupportedOperationError(
|
|
289
|
+
`Can't deserialize recon strategy of type '${json._type}'`,
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const V1_dataQualityRelationComparisonModelSchema = (
|
|
295
|
+
plugins: PureProtocolProcessorPlugin[],
|
|
296
|
+
): ModelSchema<V1_DataQualityRelationComparisonConfiguration> =>
|
|
297
|
+
createModelSchema(V1_DataQualityRelationComparisonConfiguration, {
|
|
298
|
+
_type: usingConstantValueSchema(
|
|
299
|
+
V1_DATA_QUALITY_RELATION_COMPARISON_PROTOCOL_TYPE,
|
|
300
|
+
),
|
|
301
|
+
name: primitive(),
|
|
302
|
+
package: primitive(),
|
|
303
|
+
source: usingModelSchema(V1_rawLambdaModelSchemaParameters),
|
|
304
|
+
target: usingModelSchema(V1_rawLambdaModelSchemaParameters),
|
|
305
|
+
keys: list(primitive()),
|
|
306
|
+
columnsToCompare: list(primitive()),
|
|
307
|
+
strategy: optionalCustom(
|
|
308
|
+
(val) => (val ? V1_serializeReconStrategy(val) : SKIP),
|
|
309
|
+
(val) => (val ? V1_deserializeReconStrategy(val) : SKIP),
|
|
310
|
+
),
|
|
311
|
+
expectedMatch: optional(primitive()),
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
export const V1_serializeDataQualityRelationComparison = (
|
|
315
|
+
protocol: V1_DataQualityRelationComparisonConfiguration,
|
|
316
|
+
plugins: PureProtocolProcessorPlugin[],
|
|
317
|
+
): PlainObject<V1_DataQualityRelationComparisonConfiguration> =>
|
|
318
|
+
serialize(V1_dataQualityRelationComparisonModelSchema(plugins), protocol);
|
|
319
|
+
|
|
320
|
+
export const V1_deserializeDataQualityRelationComparison = (
|
|
321
|
+
json: PlainObject<V1_DataQualityRelationComparisonConfiguration>,
|
|
322
|
+
plugins: PureProtocolProcessorPlugin[],
|
|
323
|
+
): V1_DataQualityRelationComparisonConfiguration =>
|
|
324
|
+
deserialize(V1_dataQualityRelationComparisonModelSchema(plugins), json);
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
@use 'mixins' as *;
|
|
18
|
+
|
|
19
|
+
.data-quality-relation-comparison-editor {
|
|
20
|
+
height: 100%;
|
|
21
|
+
width: 100%;
|
|
22
|
+
background: var(--color-dark-grey-50);
|
|
23
|
+
|
|
24
|
+
.panel {
|
|
25
|
+
height: 100%;
|
|
26
|
+
width: 100%;
|
|
27
|
+
|
|
28
|
+
&__header__title__label {
|
|
29
|
+
background: var(--color-dark-grey-250);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&__content {
|
|
33
|
+
background: var(--color-dark-grey-50);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&__header {
|
|
37
|
+
padding-left: 0.5rem;
|
|
38
|
+
color: var(--color-light-grey-300);
|
|
39
|
+
font-weight: bold;
|
|
40
|
+
background: var(--color-dark-grey-50);
|
|
41
|
+
border-bottom: 0.1rem solid var(--color-dark-grey-200);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__panel__content__form {
|
|
46
|
+
padding-left: 1rem;
|
|
47
|
+
padding-top: 1rem;
|
|
48
|
+
max-width: 160rem;
|
|
49
|
+
width: 100%;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&__actions-bar {
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
justify-content: end;
|
|
56
|
+
gap: 1rem;
|
|
57
|
+
background: var(--color-dark-grey-50);
|
|
58
|
+
margin-top: 2rem;
|
|
59
|
+
height: 4rem;
|
|
60
|
+
padding-top: 0.5rem;
|
|
61
|
+
|
|
62
|
+
&__limit {
|
|
63
|
+
@include flexVCenter;
|
|
64
|
+
|
|
65
|
+
flex-shrink: 0;
|
|
66
|
+
height: 2.8rem;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
&__limit__label {
|
|
70
|
+
@include flexVCenter;
|
|
71
|
+
|
|
72
|
+
height: 100%;
|
|
73
|
+
padding: 0 1rem;
|
|
74
|
+
background: var(--color-dark-grey-280);
|
|
75
|
+
border-radius: 0.2rem 0 0 0.2rem;
|
|
76
|
+
color: var(--color-light-grey-300);
|
|
77
|
+
font-size: 1.2rem;
|
|
78
|
+
text-transform: lowercase;
|
|
79
|
+
white-space: nowrap;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&__limit__input {
|
|
83
|
+
width: 7rem;
|
|
84
|
+
height: 2.8rem;
|
|
85
|
+
padding: 0 0.8rem;
|
|
86
|
+
color: var(--color-light-grey-150);
|
|
87
|
+
background: var(--color-dark-grey-100);
|
|
88
|
+
border: 0.1rem solid var(--color-dark-grey-300);
|
|
89
|
+
border-radius: 0.2rem;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
&__cancel-btn {
|
|
93
|
+
padding-right: 2.8rem;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&__cancel-label {
|
|
97
|
+
height: 2.8rem;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&__run-group {
|
|
101
|
+
display: flex;
|
|
102
|
+
gap: 0.02rem;
|
|
103
|
+
padding-right: 2.8rem;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
&__run-btn {
|
|
107
|
+
height: 2.8rem;
|
|
108
|
+
width: 14rem;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
&__dropdown-btn {
|
|
113
|
+
height: 2.8rem;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
&__column-fetch-error {
|
|
118
|
+
@include flexVCenter;
|
|
119
|
+
|
|
120
|
+
gap: 0.8rem;
|
|
121
|
+
padding: 0.8rem 1rem;
|
|
122
|
+
margin: 0 1rem 1rem;
|
|
123
|
+
border-radius: 0.2rem;
|
|
124
|
+
background: var(--color-dark-grey-200);
|
|
125
|
+
border: 0.1rem solid var(--color-red-200);
|
|
126
|
+
|
|
127
|
+
&__icon {
|
|
128
|
+
flex-shrink: 0;
|
|
129
|
+
color: var(--color-red-200);
|
|
130
|
+
font-size: 1.6rem;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
&__message {
|
|
134
|
+
flex: 1;
|
|
135
|
+
color: var(--color-red-100);
|
|
136
|
+
font-size: 1.2rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
&__retry-btn {
|
|
140
|
+
@include flexVCenter;
|
|
141
|
+
|
|
142
|
+
flex-shrink: 0;
|
|
143
|
+
gap: 0.4rem;
|
|
144
|
+
height: 2.4rem;
|
|
145
|
+
min-width: 7rem;
|
|
146
|
+
padding: 0 0.8rem;
|
|
147
|
+
border: none;
|
|
148
|
+
border-radius: 0.2rem;
|
|
149
|
+
cursor: pointer;
|
|
150
|
+
font-size: 1.2rem;
|
|
151
|
+
white-space: nowrap;
|
|
152
|
+
color: var(--color-light-grey-200);
|
|
153
|
+
background: var(--color-dark-grey-300);
|
|
154
|
+
|
|
155
|
+
&:hover:not(:disabled) {
|
|
156
|
+
background: var(--color-dark-grey-350);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&:disabled {
|
|
160
|
+
opacity: 0.5;
|
|
161
|
+
cursor: not-allowed;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
svg {
|
|
165
|
+
font-size: 1.3rem;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
&__column-overlap-warning {
|
|
171
|
+
@include flexVCenter;
|
|
172
|
+
|
|
173
|
+
gap: 0.8rem;
|
|
174
|
+
padding: 0.8rem 1rem;
|
|
175
|
+
margin: 0 1rem 1rem;
|
|
176
|
+
border-radius: 0.2rem;
|
|
177
|
+
background: var(--color-dark-grey-200);
|
|
178
|
+
border: 0.1rem solid var(--color-yellow-200);
|
|
179
|
+
|
|
180
|
+
&__icon {
|
|
181
|
+
flex-shrink: 0;
|
|
182
|
+
color: var(--color-yellow-200);
|
|
183
|
+
font-size: 1.6rem;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
&__message {
|
|
187
|
+
flex: 1;
|
|
188
|
+
color: var(--color-yellow-100);
|
|
189
|
+
font-size: 1.2rem;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
&__queries {
|
|
194
|
+
height: 25rem;
|
|
195
|
+
min-height: 15rem;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
&__query-panel {
|
|
199
|
+
display: flex;
|
|
200
|
+
flex-direction: column;
|
|
201
|
+
height: 100%;
|
|
202
|
+
|
|
203
|
+
&__header {
|
|
204
|
+
@include flexVCenter;
|
|
205
|
+
|
|
206
|
+
height: 2.8rem;
|
|
207
|
+
padding-left: 2rem;
|
|
208
|
+
font-weight: 500;
|
|
209
|
+
color: var(--color-light-grey-300);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
&__content {
|
|
213
|
+
flex: 1;
|
|
214
|
+
min-height: 0;
|
|
215
|
+
margin-left: 2rem;
|
|
216
|
+
margin-right: 2rem;
|
|
217
|
+
padding-top: 0.5rem;
|
|
218
|
+
overflow: hidden;
|
|
219
|
+
border-bottom: 0.1rem solid var(--color-dark-grey-200);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
&__title {
|
|
223
|
+
height: 2.8rem;
|
|
224
|
+
|
|
225
|
+
@include flexVCenter;
|
|
226
|
+
|
|
227
|
+
background: var(--color-dark-grey-200);
|
|
228
|
+
color: var(--color-light-grey-100);
|
|
229
|
+
padding: 0 1rem;
|
|
230
|
+
border-radius: 0.2rem;
|
|
231
|
+
margin: 0;
|
|
232
|
+
font-weight: 500;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
&__lambda-editor {
|
|
237
|
+
height: 28rem !important;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
&__result {
|
|
241
|
+
padding-top: 1rem;
|
|
242
|
+
padding-left: 2rem;
|
|
243
|
+
padding-right: 1rem;
|
|
244
|
+
|
|
245
|
+
&__header {
|
|
246
|
+
padding-right: 1rem;
|
|
247
|
+
|
|
248
|
+
@include flexVCenter;
|
|
249
|
+
@include flexHSpaceBetween;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
&__header-group {
|
|
253
|
+
display: flex;
|
|
254
|
+
flex-direction: row;
|
|
255
|
+
color: var(--color-light-grey-300);
|
|
256
|
+
|
|
257
|
+
@include flexVCenter;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
&__title {
|
|
261
|
+
height: 2.8rem;
|
|
262
|
+
|
|
263
|
+
@include flexVCenter;
|
|
264
|
+
|
|
265
|
+
background: var(--color-dark-grey-200);
|
|
266
|
+
color: var(--color-light-grey-100);
|
|
267
|
+
padding: 0 1rem;
|
|
268
|
+
border-radius: 0.2rem;
|
|
269
|
+
margin: 0;
|
|
270
|
+
font-weight: 500;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
&__status {
|
|
274
|
+
@include flexVCenter;
|
|
275
|
+
|
|
276
|
+
margin-left: 1rem;
|
|
277
|
+
color: var(--color-yellow-200);
|
|
278
|
+
font-size: 1.2rem;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
&__analytics {
|
|
282
|
+
@include flexVCenter;
|
|
283
|
+
|
|
284
|
+
margin-left: 1rem;
|
|
285
|
+
color: var(--color-light-grey-400);
|
|
286
|
+
font-size: 1.2rem;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
&__content {
|
|
290
|
+
width: 100%;
|
|
291
|
+
padding-top: 0.5rem;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
&__viewer {
|
|
295
|
+
height: 35rem !important;
|
|
296
|
+
border: 0.1rem solid var(--color-dark-grey-280);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
&__parameters-modal {
|
|
301
|
+
width: 96rem;
|
|
302
|
+
max-width: calc(100vw - 4rem);
|
|
303
|
+
|
|
304
|
+
&__body {
|
|
305
|
+
display: flex;
|
|
306
|
+
flex-direction: column;
|
|
307
|
+
gap: 1.6rem;
|
|
308
|
+
max-height: 70vh;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
&__description {
|
|
312
|
+
color: var(--color-light-grey-300);
|
|
313
|
+
font-size: 1.2rem;
|
|
314
|
+
line-height: 1.8rem;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
&__sections {
|
|
318
|
+
display: grid;
|
|
319
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
320
|
+
gap: 1.6rem;
|
|
321
|
+
align-items: start;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
&__section {
|
|
325
|
+
display: flex;
|
|
326
|
+
flex-direction: column;
|
|
327
|
+
gap: 1.2rem;
|
|
328
|
+
padding: 1.2rem;
|
|
329
|
+
border: 0.1rem solid var(--color-dark-grey-200);
|
|
330
|
+
border-radius: 0.2rem;
|
|
331
|
+
background: var(--color-dark-grey-50);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
&__section__title {
|
|
335
|
+
color: var(--color-light-grey-100);
|
|
336
|
+
font-size: 1.2rem;
|
|
337
|
+
font-weight: 700;
|
|
338
|
+
letter-spacing: 0.04rem;
|
|
339
|
+
text-transform: uppercase;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
&__section__body {
|
|
343
|
+
display: flex;
|
|
344
|
+
flex-direction: column;
|
|
345
|
+
gap: 1.2rem;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.value-spec-editor__reset-btn,
|
|
349
|
+
.value-spec-editor__variable__reset-btn {
|
|
350
|
+
display: none;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
@media (width <= 1000px) {
|
|
354
|
+
width: calc(100vw - 4rem);
|
|
355
|
+
|
|
356
|
+
&__sections {
|
|
357
|
+
grid-template-columns: minmax(0, 1fr);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
.data-quality-custom-selector {
|
|
20
20
|
@include flexVCenter;
|
|
21
21
|
|
|
22
|
+
width: 100%;
|
|
22
23
|
height: 2.8rem;
|
|
23
24
|
border: 0.1rem solid var(--color-dark-grey-280);
|
|
24
25
|
border-radius: 0.2rem;
|
|
@@ -50,6 +51,28 @@
|
|
|
50
51
|
user-select: none;
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
&__clear {
|
|
55
|
+
@include flexCenter;
|
|
56
|
+
|
|
57
|
+
flex-shrink: 0;
|
|
58
|
+
width: 2rem;
|
|
59
|
+
min-width: 2rem;
|
|
60
|
+
height: 100%;
|
|
61
|
+
padding: 0;
|
|
62
|
+
border: none;
|
|
63
|
+
background: transparent;
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
color: var(--color-light-grey-400);
|
|
66
|
+
|
|
67
|
+
&:hover {
|
|
68
|
+
color: var(--color-light-grey-100);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
svg {
|
|
72
|
+
font-size: 1.1rem;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
53
76
|
&__dropdown__trigger {
|
|
54
77
|
@include flexCenter;
|
|
55
78
|
|