Skip to content

Commit d7cde37

Browse files
grammar, protocol for making db, schema, table,view and col annotated… (#3459)
1 parent 1e0d16c commit d7cde37

File tree

12 files changed

+377
-63
lines changed

12 files changed

+377
-63
lines changed

legend-engine-xts-relationalStore/legend-engine-xt-relationalStore-generation/legend-engine-xt-relationalStore-grammar/src/main/antlr4/org/finos/legend/engine/language/pure/grammar/from/antlr4/RelationalParserGrammar.g4

+10-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ identifier: unquotedIdentifier | STRING
2828
definition: (database)*
2929
EOF
3030
;
31-
database: DATABASE stereotypes? qualifiedName
31+
database: DATABASE stereotypes? taggedValues? qualifiedName
3232
PAREN_OPEN
3333
include*
3434
(
@@ -51,9 +51,14 @@ stereotypes: LESS_THAN LESS_THAN stereotype (COMMA stereo
5151

5252
stereotype: qualifiedName DOT identifier;
5353

54+
taggedValues: BRACE_OPEN taggedValue (COMMA taggedValue)* BRACE_CLOSE
55+
;
56+
taggedValue: qualifiedName DOT identifier EQUAL STRING
57+
;
58+
5459
// -------------------------------------- SCHEMA & TABLE --------------------------------------
5560

56-
schema: SCHEMA identifier
61+
schema: SCHEMA stereotypes? taggedValues? identifier
5762
PAREN_OPEN
5863
(
5964
table
@@ -62,13 +67,13 @@ schema: SCHEMA identifier
6267
)*
6368
PAREN_CLOSE
6469
;
65-
table: TABLE relationalIdentifier
70+
table: TABLE stereotypes? taggedValues? relationalIdentifier
6671
PAREN_OPEN
6772
milestoneSpec?
6873
(columnDefinition (COMMA columnDefinition)*)?
6974
PAREN_CLOSE
7075
;
71-
columnDefinition: relationalIdentifier identifier (PAREN_OPEN INTEGER (COMMA INTEGER)? PAREN_CLOSE)? (PRIMARY_KEY | NOT_NULL)?
76+
columnDefinition: relationalIdentifier stereotypes? taggedValues? identifier (PAREN_OPEN INTEGER (COMMA INTEGER)? PAREN_CLOSE)? (PRIMARY_KEY | NOT_NULL)?
7277
;
7378

7479
// -------------------------------------- MILESTONING --------------------------------------
@@ -114,7 +119,7 @@ processingMilestoning: PROCESSING_MILESTONING
114119

115120
// -------------------------------------- VIEW --------------------------------------
116121

117-
view: VIEW relationalIdentifier
122+
view: VIEW stereotypes? taggedValues? relationalIdentifier
118123
PAREN_OPEN
119124
(viewFilterMapping)?
120125
(viewGroupBy)?

legend-engine-xts-relationalStore/legend-engine-xt-relationalStore-generation/legend-engine-xt-relationalStore-grammar/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/HelperRelationalBuilder.java

+11-49
Original file line numberDiff line numberDiff line change
@@ -62,54 +62,7 @@
6262
import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.operation.JoinPointer;
6363
import org.finos.legend.engine.shared.core.operational.Assert;
6464
import org.finos.legend.engine.shared.core.operational.errorManagement.EngineException;
65-
import org.finos.legend.pure.generated.Root_meta_external_format_shared_binding_Binding;
66-
import org.finos.legend.pure.generated.Root_meta_external_format_shared_binding_BindingTransformer_Impl;
67-
import org.finos.legend.pure.generated.Root_meta_pure_functions_collection_Pair_Impl;
68-
import org.finos.legend.pure.generated.Root_meta_pure_mapping_MappingClass_Impl;
69-
import org.finos.legend.pure.generated.Root_meta_pure_metamodel_function_property_Property_Impl;
70-
import org.finos.legend.pure.generated.Root_meta_pure_metamodel_relationship_Generalization_Impl;
71-
import org.finos.legend.pure.generated.Root_meta_pure_metamodel_type_generics_GenericType_Impl;
72-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_ColumnMapping_Impl;
73-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_EmbeddedRelationalInstanceSetImplementation_Impl;
74-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_FilterMapping_Impl;
75-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_GroupByMapping_Impl;
76-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_InlineEmbeddedRelationalInstanceSetImplementation_Impl;
77-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_OtherwiseEmbeddedRelationalInstanceSetImplementation_Impl;
78-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_RelationalPropertyMapping_Impl;
79-
import org.finos.legend.pure.generated.Root_meta_relational_mapping_SemiStructuredEmbeddedRelationalInstanceSetImplementation_Impl;
80-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_Column_Impl;
81-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_DynaFunction_Impl;
82-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_Filter_Impl;
83-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_LiteralList_Impl;
84-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_Literal_Impl;
85-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_MultiGrainFilter_Impl;
86-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_RelationalOperationElementWithJoin_Impl;
87-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_SQLNull_Impl;
88-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_Schema_Impl;
89-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_TableAliasColumn_Impl;
90-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_TableAlias_Impl;
91-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Binary_Impl;
92-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Char_Impl;
93-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Decimal_Impl;
94-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Json_Impl;
95-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Numeric_Impl;
96-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Other_Impl;
97-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Real_Impl;
98-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_SemiStructured_Impl;
99-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_SmallInt_Impl;
100-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Timestamp_Impl;
101-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_TinyInt_Impl;
102-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Varbinary_Impl;
103-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_datatype_Varchar_Impl;
104-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_join_JoinTreeNode_Impl;
105-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_join_Join_Impl;
106-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_BusinessMilestoning_Impl;
107-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_BusinessSnapshotMilestoning_Impl;
108-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_ProcessingMilestoning_Impl;
109-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_Table_Impl;
110-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_TabularFunction_Impl;
111-
import org.finos.legend.pure.generated.Root_meta_relational_metamodel_relation_View_Impl;
112-
import org.finos.legend.pure.generated.core_pure_model_modelUnit;
65+
import org.finos.legend.pure.generated.*;
11366
import org.finos.legend.pure.m2.relational.M2RelationalPaths;
11467
import org.finos.legend.pure.m3.compiler.postprocessing.processor.milestoning.MilestoningFunctions;
11568
import org.finos.legend.pure.m3.compiler.postprocessing.processor.milestoning.MilestoningStereotype;
@@ -419,6 +372,8 @@ private static MutableSet<Database> collectIncludedDBs(Store store, MutableSet<D
419372
public static Schema processDatabaseSchema(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.Schema srcSchema, CompileContext context, Database database)
420373
{
421374
Schema schema = new Root_meta_relational_metamodel_Schema_Impl(srcSchema.name, SourceInformationHelper.toM3SourceInformation(srcSchema.sourceInformation), context.pureModel.getClass("meta::relational::metamodel::Schema"))._name(srcSchema.name);
375+
schema._stereotypes(srcSchema.stereotypes == null ? Lists.fixedSize.empty() : ListIterate.collect(srcSchema.stereotypes, stereotypePointer -> context.resolveStereotype(stereotypePointer.profile, stereotypePointer.value, stereotypePointer.profileSourceInformation, stereotypePointer.sourceInformation)));
376+
schema._taggedValues(srcSchema.taggedValues == null ? Lists.fixedSize.empty() : ListIterate.collect(srcSchema.taggedValues, taggedValue -> new Root_meta_pure_metamodel_extension_TaggedValue_Impl("", null, context.pureModel.getClass("meta::pure::metamodel::extension::TaggedValue"))._tag(context.resolveTag(taggedValue.tag.profile, taggedValue.tag.value, taggedValue.tag.profileSourceInformation, taggedValue.tag.sourceInformation))._value(taggedValue.value)));
422377
RichIterable<Table> tables = ListIterate.collect(srcSchema.tables, _table -> processDatabaseTable(_table, context, schema));
423378
RichIterable<TabularFunction> functions = ListIterate.collect(srcSchema.tabularFunctions, _function -> processDatabaseFunction(_function, context, schema));
424379
return schema._tables(tables)._tabularFunctions(functions)._database(database);
@@ -441,6 +396,8 @@ public static Schema processDatabaseSchemaViewsSecondPass(org.finos.legend.engin
441396
public static Table processDatabaseTable(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.Table databaseTable, CompileContext context, org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.Schema schema)
442397
{
443398
Table table = new Root_meta_relational_metamodel_relation_Table_Impl(databaseTable.name, SourceInformationHelper.toM3SourceInformation(databaseTable.sourceInformation), context.pureModel.getClass("meta::relational::metamodel::relation::Table"))._name(databaseTable.name);
399+
schema._stereotypes(databaseTable.stereotypes == null ? Lists.fixedSize.empty() : ListIterate.collect(databaseTable.stereotypes, stereotypePointer -> context.resolveStereotype(stereotypePointer.profile, stereotypePointer.value, stereotypePointer.profileSourceInformation, stereotypePointer.sourceInformation)));
400+
schema._taggedValues(databaseTable.taggedValues == null ? Lists.fixedSize.empty() : ListIterate.collect(databaseTable.taggedValues, taggedValue -> new Root_meta_pure_metamodel_extension_TaggedValue_Impl("", null, context.pureModel.getClass("meta::pure::metamodel::extension::TaggedValue"))._tag(context.resolveTag(taggedValue.tag.profile, taggedValue.tag.value, taggedValue.tag.profileSourceInformation, taggedValue.tag.sourceInformation))._value(taggedValue.value)));
444401
MutableList<Column> columns = Lists.mutable.empty();
445402
MutableSet<String> validColumnNames = Sets.mutable.empty();
446403
MutableSet<String> duplicateColumns = Sets.mutable.empty();
@@ -453,7 +410,10 @@ public static Table processDatabaseTable(org.finos.legend.engine.protocol.pure.v
453410
else
454411
{
455412
validColumnNames.add(column.name);
456-
columns.add(new Root_meta_relational_metamodel_Column_Impl(column.name, SourceInformationHelper.toM3SourceInformation(column.sourceInformation), context.pureModel.getClass("meta::relational::metamodel::Column"))._name(column.name)._name(column.name)._nullable(column.nullable)._type(transformDatabaseDataType(column.type, context))._owner(table));
413+
Column col = new Root_meta_relational_metamodel_Column_Impl(column.name, SourceInformationHelper.toM3SourceInformation(column.sourceInformation), context.pureModel.getClass("meta::relational::metamodel::Column"))._name(column.name)._name(column.name)._nullable(column.nullable)._type(transformDatabaseDataType(column.type, context))._owner(table);
414+
col._stereotypes(column.stereotypes == null ? Lists.fixedSize.empty() : ListIterate.collect(column.stereotypes, stereotypePointer -> context.resolveStereotype(stereotypePointer.profile, stereotypePointer.value, stereotypePointer.profileSourceInformation, stereotypePointer.sourceInformation)));
415+
col._taggedValues(column.taggedValues == null ? Lists.fixedSize.empty() : ListIterate.collect(column.taggedValues, taggedValue -> new Root_meta_pure_metamodel_extension_TaggedValue_Impl("", null, context.pureModel.getClass("meta::pure::metamodel::extension::TaggedValue"))._tag(context.resolveTag(taggedValue.tag.profile, taggedValue.tag.value, taggedValue.tag.profileSourceInformation, taggedValue.tag.sourceInformation))._value(taggedValue.value)));
416+
columns.add(col);
457417
}
458418
}
459419

@@ -476,6 +436,8 @@ public static TabularFunction processDatabaseFunction(org.finos.legend.engine.pr
476436
public static View processDatabaseViewFirstPass(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.relational.model.View srcView, CompileContext context, Schema schema)
477437
{
478438
View view = new Root_meta_relational_metamodel_relation_View_Impl(srcView.name, SourceInformationHelper.toM3SourceInformation(srcView.sourceInformation), context.pureModel.getClass("meta::relational::metamodel::relation::View"))._name(srcView.name);
439+
view._stereotypes(srcView.stereotypes == null ? Lists.fixedSize.empty() : ListIterate.collect(srcView.stereotypes, stereotypePointer -> context.resolveStereotype(stereotypePointer.profile, stereotypePointer.value, stereotypePointer.profileSourceInformation, stereotypePointer.sourceInformation)));
440+
view._taggedValues(srcView.taggedValues == null ? Lists.fixedSize.empty() : ListIterate.collect(srcView.taggedValues, taggedValue -> new Root_meta_pure_metamodel_extension_TaggedValue_Impl("", null, context.pureModel.getClass("meta::pure::metamodel::extension::TaggedValue"))._tag(context.resolveTag(taggedValue.tag.profile, taggedValue.tag.value, taggedValue.tag.profileSourceInformation, taggedValue.tag.sourceInformation))._value(taggedValue.value)));
479441
MutableList<Column> columns = ListIterate.collect(srcView.columnMappings, columnMapping -> new Root_meta_relational_metamodel_Column_Impl(columnMapping.name, SourceInformationHelper.toM3SourceInformation(columnMapping.sourceInformation), context.pureModel.getClass("meta::relational::metamodel::Column"))._name(columnMapping.name)._type(new Root_meta_relational_metamodel_datatype_Varchar_Impl("", null, context.pureModel.getClass("meta::relational::metamodel::datatype::Varchar")))._owner(view));
480442
RichIterable<Column> pk = ListIterate.collect(srcView.primaryKey, s -> columns.select(column -> s.equals(column._name())).getFirst());
481443
return view._columns(columns)._primaryKey(pk)._schema(schema);

0 commit comments

Comments
 (0)