diff --git a/legend-engine-pure-ide/legend-engine-pure-ide-light/src/main/java/org/finos/legend/engine/ide/PureIDELight.java b/legend-engine-pure-ide/legend-engine-pure-ide-light/src/main/java/org/finos/legend/engine/ide/PureIDELight.java index 651c8de346a..ea180ae1168 100644 --- a/legend-engine-pure-ide/legend-engine-pure-ide-light/src/main/java/org/finos/legend/engine/ide/PureIDELight.java +++ b/legend-engine-pure-ide/legend-engine-pure-ide-light/src/main/java/org/finos/legend/engine/ide/PureIDELight.java @@ -89,6 +89,7 @@ protected MutableList buildRepositories(SourceLocationCon .with(this.buildCore("legend-engine-xts-service/legend-engine-language-pure-dsl-service-pure","service")) .with(this.buildCore("legend-engine-pure-ide/legend-engine-pure-ide-light-metadata-pure", "ide_metadata")) .with(this.buildCore("legend-engine-pure-code/legend-engine-pure-code-compiled-core", "")) + .with(this.buildCore("legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure","external-tableformat-iceberg")) ; } diff --git a/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/pom.xml b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/pom.xml new file mode 100644 index 00000000000..58b70fcd8eb --- /dev/null +++ b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/pom.xml @@ -0,0 +1,133 @@ + + + + + org.finos.legend.engine + legend-engine-xts-iceberg + 4.20.4-SNAPSHOT + + 4.0.0 + + Legend Engine - XT - Table Format - Iceberg - PAR/JAVA + legend-engine-xt-iceberg-pure + + + + + org.finos.legend.pure + legend-pure-maven-generation-par + + src/main/resources + ${legend.pure.version} + + platform + core + core_external_tableformat_iceberg + + + ${project.basedir}/src/main/resources/core_external_tableformat_iceberg.definition.json + + + + + generate-sources + + build-pure-jar + + + + + + org.finos.legend.pure + legend-pure-m2-dsl-diagram-grammar + ${legend.pure.version} + + + org.finos.legend.engine + legend-engine-pure-code-compiled-core + ${project.version} + + + + + org.finos.legend.pure + legend-pure-maven-generation-java + + + compile + + build-pure-compiled-jar + + + true + true + modular + true + + core_external_tableformat_iceberg + + + + + + + org.finos.legend.pure + legend-pure-m2-dsl-diagram-grammar + ${legend.pure.version} + + + org.finos.legend.engine + legend-engine-pure-code-compiled-core + ${project.version} + + + + + + + + + + org.finos.legend.pure + legend-pure-m4 + + + org.finos.legend.pure + legend-pure-m3-core + + + org.finos.legend.pure + legend-pure-runtime-java-engine-compiled + + + org.finos.legend.engine + legend-engine-pure-platform-java + + + + org.eclipse.collections + eclipse-collections + + + org.eclipse.collections + eclipse-collections-api + + + + diff --git a/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/java/org/finos/legend/pure/code/core/CoreIcebergCodeRepositoryProvider.java b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/java/org/finos/legend/pure/code/core/CoreIcebergCodeRepositoryProvider.java new file mode 100644 index 00000000000..627e867a8d9 --- /dev/null +++ b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/java/org/finos/legend/pure/code/core/CoreIcebergCodeRepositoryProvider.java @@ -0,0 +1,28 @@ +// Copyright 2022 Goldman Sachs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.finos.legend.pure.code.core; + +import org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepository; +import org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepositoryProvider; +import org.finos.legend.pure.m3.serialization.filesystem.repository.GenericCodeRepository; + +public class CoreIcebergCodeRepositoryProvider implements CodeRepositoryProvider +{ + @Override + public CodeRepository repository() + { + return GenericCodeRepository.build("core_external_tableformat_iceberg.definition.json"); + } +} diff --git a/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/META-INF/services/org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepositoryProvider b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/META-INF/services/org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepositoryProvider new file mode 100644 index 00000000000..6c152f556e5 --- /dev/null +++ b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/META-INF/services/org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepositoryProvider @@ -0,0 +1,17 @@ +# +# Copyright 2023 Goldman Sachs +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +org.finos.legend.pure.code.core.CoreIcebergCodeRepositoryProvider \ No newline at end of file diff --git a/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/core_external_tableformat_iceberg.definition.json b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/core_external_tableformat_iceberg.definition.json new file mode 100644 index 00000000000..0b3898debce --- /dev/null +++ b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/core_external_tableformat_iceberg.definition.json @@ -0,0 +1,8 @@ +{ + "name": "core_external_tableformat_iceberg", + "pattern": "(meta::external::tableformat::iceberg|meta::protocols::pure)(::.*)?", + "dependencies": [ + "platform", + "core" + ] +} diff --git a/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/core_external_tableformat_iceberg/metamodel.pure b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/core_external_tableformat_iceberg/metamodel.pure new file mode 100644 index 00000000000..094ccd65d78 --- /dev/null +++ b/legend-engine-xts-iceberg/legend-engine-xt-iceberg-pure/src/main/resources/core_external_tableformat_iceberg/metamodel.pure @@ -0,0 +1,124 @@ +import meta::external::tableformat::iceberg::metamodel::*; + +Class meta::external::tableformat::iceberg::metamodel::Type +{ +} + +// nested types + +Class meta::external::tableformat::iceberg::metamodel::NestedType extends meta::external::tableformat::iceberg::metamodel::Type +{ +} + +Class meta::external::tableformat::iceberg::metamodel::StructType extends meta::external::tableformat::iceberg::metamodel::NestedType +{ + fields: meta::external::tableformat::iceberg::metamodel::NestedField[1..*]; +} + +Class meta::external::tableformat::iceberg::metamodel::ListType extends meta::external::tableformat::iceberg::metamodel::NestedType +{ + elementField: meta::external::tableformat::iceberg::metamodel::NestedField[1]; +} + +Class meta::external::tableformat::iceberg::metamodel::MapType extends meta::external::tableformat::iceberg::metamodel::NestedType +{ + keyField: meta::external::tableformat::iceberg::metamodel::NestedField[1]; + valueField: meta::external::tableformat::iceberg::metamodel::NestedField[1]; +} + +Class meta::external::tableformat::iceberg::metamodel::NestedField +{ + id: Integer[1]; + name: String[1]; + type: meta::external::tableformat::iceberg::metamodel::Type[1]; + required: Boolean[1]; + doc: String[1]; +} + +// primitive types + +Class meta::external::tableformat::iceberg::metamodel::PrimitiveType extends meta::external::tableformat::iceberg::metamodel::Type +{ +} + +Class meta::external::tableformat::iceberg::metamodel::BooleanType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = '32-bit signed integer'} +meta::external::tableformat::iceberg::metamodel::IntegerType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = '64-bit signed integer'} +meta::external::tableformat::iceberg::metamodel::LongType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = '32-bit IEEE 754 floating point'} +meta::external::tableformat::iceberg::metamodel::FloatType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = '64-bit IEEE 754 floating point'} +meta::external::tableformat::iceberg::metamodel::DoubleType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = 'Fixed point decimal'} +meta::external::tableformat::iceberg::metamodel::DecimalType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +[ + precisionMaxLength: $this.precision <= 38 +] +{ + scale: Integer[1]; + precision: Integer[1]; +} + +Class +{doc.doc = 'Calendar date without timezone or time'} +meta::external::tableformat::iceberg::metamodel::DateType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = 'Time of day without date or timezone'} +meta::external::tableformat::iceberg::metamodel::TimeType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = 'Timestamp without timezone. These represent a date and time of day regardless of zone. Values are independent of zone adjustment and stored with microsecond precision'} +meta::external::tableformat::iceberg::metamodel::TimestampType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = 'Timestamp with timzeone. These represent a point in time. Values are stored in UTC, do not retain source timezone, and have microsecond precision'} +meta::external::tableformat::iceberg::metamodel::TimestampTzType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = 'Arbitrary length character sequences'} +meta::external::tableformat::iceberg::metamodel::StringType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} + +Class +{doc.doc = 'Fixed-length byte array'} +meta::external::tableformat::iceberg::metamodel::FixedType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ + length: Integer[1]; +} + +Class +{doc.doc = 'Arbitrary length byte array'} +meta::external::tableformat::iceberg::metamodel::BinaryType extends meta::external::tableformat::iceberg::metamodel::PrimitiveType +{ +} diff --git a/legend-engine-xts-iceberg/pom.xml b/legend-engine-xts-iceberg/pom.xml new file mode 100644 index 00000000000..73ae019c1bb --- /dev/null +++ b/legend-engine-xts-iceberg/pom.xml @@ -0,0 +1,38 @@ + + + + + org.finos.legend.engine + legend-engine + 4.20.4-SNAPSHOT + + 4.0.0 + + Legend Engine - XTS - Iceberg + legend-engine-xts-iceberg + pom + + + ${project.basedir}/../ + + + + legend-engine-xt-iceberg-pure + + diff --git a/pom.xml b/pom.xml index fda3ee75b0f..3868cb5b8a1 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,9 @@ legend-engine-xts-json legend-engine-xts-avro + + legend-engine-xts-iceberg + legend-engine-xts-rosetta legend-engine-xts-haskell