diff --git a/pom.xml b/pom.xml
index f502287ab..0469d0df7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,7 +91,7 @@
vtl-engine
vtl-envs
vtl-meta
- vtl-parser
+ vtl-parsers
vtl-samples
vtl-session
vtl-transform
@@ -141,7 +141,6 @@
3.12.1
2.3.4
- 2.2.4
1.12.0
2.0.12
@@ -163,7 +162,7 @@
4.0.5
3.1.2.RELEASE
v20.12.2
- 4.13.1
+ 4.9.3
1.0.57
5.3.31
30.1.1-jre
@@ -303,10 +302,10 @@
it.bancaditalia.oss.vtl
- vtl-parser
- parser-js
+ vtl-jsparser
${project.version}
zip
+ grammar
it.bancaditalia.oss.vtl
@@ -540,7 +539,7 @@
com.esotericsoftware
kryo
- 4.0.2
+ 4.0.3
test
@@ -587,11 +586,6 @@
reflow-velocity-tools
${reflow.version}
-
- org.asciidoctor
- asciidoctor-maven-plugin
- ${asciidoctor.version}
-
org.apache.maven.doxia
doxia-module-markdown
@@ -834,14 +828,10 @@
SCRIPT_STYLE
- ASCIIDOC_STYLE
JAVADOC_STYLE
XML_STYLE
true
-
- license-files/asciidoc-format.xml
-
${project.organization.name}
@@ -920,11 +910,6 @@
18881
${project.build.directory}/site
-
-
- ${project.basedir}/vtl-bundles/vtl-rest/target/generated-snippets
-
-
diff --git a/src/site/asciidoc/compile.adoc b/src/site/asciidoc/compile.adoc
deleted file mode 100644
index 489238200..000000000
--- a/src/site/asciidoc/compile.adoc
+++ /dev/null
@@ -1,61 +0,0 @@
-////
- // Copyright © 2020 Banca D'Italia
- //
- // Licensed under the EUPL, Version 1.2 (the "License");
- // You may not use this work except in compliance with the
- // License.
- // You may obtain a copy of the License at:
- //
- // https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt
- //
- // 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.
-////
-=== `/compile` POST Method ===
-
-Compiles a snippet of VTL code in a new session.
-
-Returns the uuid of the created session.
-
-==== HTTP Request ====
-
-===== Request fields =====
-
-include::{rest-snippets}/compile/request-parameters.adoc[]
-
-==== HTTP Response ====
-
-===== Response fields =====
-
-include::{rest-snippets}/compile/response-fields.adoc[]
-
-===== Response cookies =====
-
-include::{rest-snippets}/compile/response-headers.adoc[]
-
-===== Sample response body =====
-
-include::{rest-snippets}/compile/response-body.adoc[]
-
-==== Invocation examples ====
-
-===== Curl command =====
-
-include::{rest-snippets}/compile/curl-request.adoc[]
-
-===== http command =====
-
-include::{rest-snippets}/compile/httpie-request.adoc[]
-
-==== Sample HTTP dump ====
-
-include::{rest-snippets}/compile/http-request.adoc[]
-
-include::{rest-snippets}/compile/http-response.adoc[]
-
diff --git a/src/site/asciidoc/metadata.adoc b/src/site/asciidoc/metadata.adoc
deleted file mode 100644
index 619310b75..000000000
--- a/src/site/asciidoc/metadata.adoc
+++ /dev/null
@@ -1,59 +0,0 @@
-////
- // Copyright © 2020 Banca D'Italia
- //
- // Licensed under the EUPL, Version 1.2 (the "License");
- // You may not use this work except in compliance with the
- // License.
- // You may obtain a copy of the License at:
- //
- // https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt
- //
- // 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.
-////
-=== `/metadata` GET Method ===
-
-Returns the metadata associated with a given object defined in a given session.
-
-==== HTTP Request ====
-
-===== Request fields =====
-
-include::{rest-snippets}/metadata/request-parameters.adoc[]
-
-===== Request cookies =====
-
-include::{rest-snippets}/metadata/request-headers.adoc[]
-
-==== HTTP Response ====
-
-===== Response fields =====
-
-include::{rest-snippets}/metadata/response-fields.adoc[]
-
-===== Sample response body =====
-
-include::{rest-snippets}/metadata/response-body.adoc[]
-
-==== Invocation examples ====
-
-===== Curl command =====
-
-include::{rest-snippets}/metadata/curl-request.adoc[]
-
-===== http command =====
-
-include::{rest-snippets}/metadata/httpie-request.adoc[]
-
-==== Sample request and response dump ====
-
-include::{rest-snippets}/metadata/http-request.adoc[]
-
-include::{rest-snippets}/metadata/http-response.adoc[]
-
diff --git a/src/site/asciidoc/resolve.adoc b/src/site/asciidoc/resolve.adoc
deleted file mode 100644
index c5028e2b9..000000000
--- a/src/site/asciidoc/resolve.adoc
+++ /dev/null
@@ -1,59 +0,0 @@
-////
- // Copyright © 2020 Banca D'Italia
- //
- // Licensed under the EUPL, Version 1.2 (the "License");
- // You may not use this work except in compliance with the
- // License.
- // You may obtain a copy of the License at:
- //
- // https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt
- //
- // 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.
-////
-=== `/resolve` GET Method ===
-
-Returns the value of a given object defined in a given session.
-
-==== HTTP Request ====
-
-===== Request fields =====
-
-include::{rest-snippets}/resolve/request-parameters.adoc[]
-
-===== Request cookies =====
-
-include::{rest-snippets}/resolve/request-headers.adoc[]
-
-==== HTTP Response ====
-
-===== Response fields =====
-
-include::{rest-snippets}/resolve/response-fields.adoc[]
-
-===== Sample response body =====
-
-include::{rest-snippets}/resolve/response-body.adoc[]
-
-==== Invocation examples ====
-
-===== Curl command =====
-
-include::{rest-snippets}/resolve/curl-request.adoc[]
-
-===== http command =====
-
-include::{rest-snippets}/resolve/httpie-request.adoc[]
-
-==== HTTP request and response dump ====
-
-include::{rest-snippets}/resolve/http-request.adoc[]
-
-include::{rest-snippets}/resolve/http-response.adoc[]
-
diff --git a/src/site/markdown/rest-setup.md.vm b/src/site/markdown/rest-setup.md.vm
deleted file mode 100644
index 9603742a6..000000000
--- a/src/site/markdown/rest-setup.md.vm
+++ /dev/null
@@ -1,109 +0,0 @@
-#*
- * Copyright © 2020 Banca D'Italia
- *
- * Licensed under the EUPL, Version 1.2 (the "License");
- * You may not use this work except in compliance with the
- * License.
- * You may obtain a copy of the License at:
- *
- * https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt
- *
- * 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.
- *#
-#set($h1 = '#')
-#set($h2 = '##')
-#set($h3 = '###')
-#set($h4 = '####')
-#set($h5 = '#####')
-#set($RCODE = '```R')
-#set($CSTART = '```')
-#set($CEND = '```')
-
-$h1 Setting up VTL RESTful services
-
-$h2 Deploying the RESTful services web application
-
-To deploy the application, acquire the war package either by Maven or from the
-[GitHub releases](https://github.com/vpinna80/VTL/releases/latest) page.
-
-To download the package with Maven into Tomcat deployment folder, use:
-
-$CSTART
-$ mvn dependency:copy -Dmdep.stripVersion=true \
- -Dartifact=it.bancaditalia.oss.vtl:vtl-rest:${project.version}:war \
- -DoutputDirectory=/path/to/tomcat/deploy
-$CEND
-
-After the package has been downloaded, Tomcat should unpack and start it automatically.
-
-Tomcat usually deploys applications under a path that starts with the war file name, so, if the
-file was download by Maven, the entry point for the services should be in this case `/vtl-rest/`.
-
-$h2 System requirements
-
-The requirements of VTL RESTful services are:
-
-* Java 8+
-* [Web Container](https://en.wikipedia.org/wiki/Web_container#List_of_Servlet_containers)
- compatible with Servlet 3.1
-* Internet connection (optional)
-
-Please note that [Jakarta EE technology](https://en.wikipedia.org/wiki/Jakarta_EE) is not required,
-although the services application could be run in any of the compatible containers.
-
-$h2 Particular configurations
-
-Some of the VTL engine features require an internet connection.
-
-If you are behind a proxy server, you may need additional configuration to enable these features.
-
-$h3 CSV Environment
-
-Please note that CSV Environment accesses files located on the container host.
-
-Although it fails if the requested file is not in a CSV format, it may pose a security risk.
-
-If this would be the case to a production environment, it can be disabled by setting the
-[Java system property](apidocs/it/bancaditalia/oss/vtl/config/VTLGeneralProperties.html#ENVIRONMENT_IMPLEMENTATION).
-
-This property must be set to a sequence of class names, separated by commas, which must implement
-the [`Environment`](apidocs/it/bancaditalia/oss/vtl/environment/Environment.html) interface.
-
-Available implementation classes are found in the Java package
-[`it.bancaditalia.oss.vtl.impl.environment`](apidocs/it/bancaditalia/oss/vtl/impl/environment/package-summary.html).
-
-**NOTE**: In order for the engine to work correctly, at least one of the chosen classes must
-also implement the [`Workspace`](apidocs/it/bancaditalia/oss/vtl/environment/Workspace.html) interface.
-
-$h3 SDMX Environment
-
-To enable the use of SDMX environment by the web services, you must follow
-[this document](https://github.com/amattioc/SDMX/wiki/System-Configuration#network-settings)
-to setup a properties file, which should contain your proxy settings, and then link it with an
-[environment variable](https://github.com/amattioc/SDMX/wiki/System-Configuration#configuration-file-location).
-
-$h3 Choose a VTL metadata repository implementation
-
-This [Java system property](apidocs/it/bancaditalia/oss/vtl/config/VTLGeneralProperties.html#METADATA_REPOSITORY)
-allows you to choose which implementation class you want to use as a metadata repository.
-
-There are three available implementations, [described here](documentation.html#editor-config_toc_metadata-repository).
-
-The default implementation is the In-Memory repository. To choose a different one, you can add
-a system property in your container configuration.
-
-It must point to a class that implements the [`MetadataRepository`](apidocs/it/bancaditalia/oss/vtl/session/MetadataRepository.html)
-interface, such as:
-
-* [it.bancaditalia.oss.vtl.impl.domains.CSVMetadataRepository](apidocs/it/bancaditalia/oss/vtl/impl/domains/CSVMetadataRepository.html)
-* [it.bancaditalia.oss.vtl.impl.domains.SDMXMetadataRepository](apidocs/it/bancaditalia/oss/vtl/impl/domains/CSVMetadataRepository.html)
-
-If you want to use the SDMX Metadata Repository, you might also need to set standard
-[Java proxy properties](https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html).
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManager.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManager.java
index fd1c9dc32..df4839f4c 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManager.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManager.java
@@ -37,7 +37,7 @@
* Interface for the service used by the application to load and provide implementations
* for the various VTL Engine components.
*
- * Instances of this interface are provided by {@link ConfigurationManagerFactory#getInstance()}.
+ * Instances of this interface are provided by {@link ConfigurationManagerFactory#newManager()}.
*
* @author Valentino Pinna
*/
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManagerFactory.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManagerFactory.java
index 94c5011a8..37726ddac 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManagerFactory.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManagerFactory.java
@@ -68,7 +68,7 @@ public static void loadConfiguration(Reader input) throws IOException
/**
* @return an application-wide {@link ConfigurationManager} instance.
*/
- public static ConfigurationManager getInstance()
+ public static ConfigurationManager newManager()
{
if (INSTANCE != null)
return INSTANCE;
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLGeneralProperties.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLGeneralProperties.java
index 97bc28e2e..a238891d6 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLGeneralProperties.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLGeneralProperties.java
@@ -22,6 +22,7 @@
import static java.util.stream.Collectors.joining;
import java.util.Arrays;
+import java.util.Objects;
import it.bancaditalia.oss.vtl.engine.Engine;
import it.bancaditalia.oss.vtl.environment.Environment;
@@ -114,9 +115,9 @@ public String getValue()
}
@Override
- public void setValue(String newValue)
+ public void setValue(Object newValue)
{
- value = newValue;
+ value = Objects.toString(newValue);
}
@Override
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLProperty.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLProperty.java
index 69513bbfe..865a62ced 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLProperty.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/VTLProperty.java
@@ -24,6 +24,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
/**
* This interface provides access to the configuration properties of the VTL Engine components.
@@ -46,11 +47,11 @@ public interface VTLProperty
public String getValue();
/**
- * Change the value for this property
+ * Change the value for this property. {@link Objects#toString()} is used to determine the object representation.
*
- * @param newValue The new value for this property
+ * @param newValue The new value for this property.
*/
- public void setValue(String newValue);
+ public void setValue(Object newValue);
/**
* @return A description of the property
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/DataSet.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/DataSet.java
index b04488090..5810d8c38 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/DataSet.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/DataSet.java
@@ -19,11 +19,6 @@
*/
package it.bancaditalia.oss.vtl.model.data;
-import static it.bancaditalia.oss.vtl.util.SerCollectors.toMapWithValues;
-import static java.util.Collections.emptyMap;
-import static java.util.Collections.singleton;
-import static java.util.Collections.singletonMap;
-
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@@ -216,63 +211,6 @@ public Stream streamByKeys(Set groupCollector,
SerBiFunction super TT, ? super Map, ScalarValue, ?, ?, ?>>, T> finisher);
- /**
- * Groups all the datapoints of this DataSet having the same values for the specified identifiers,
- * and performs a mutable reduction
- * over each of the groups, and applying a final transformation.
- *
- * The same as {@link #streamByKeys(Set, Map, SerCollector, SerBiFunction)} with an empty filter.
- *
- * @param the type of the result of the computation.
- * @param keys the {@link Identifier}s used to group the datapoints
- * @param groupCollector a {@link Collector} applied to each group to produce the result
- * @param finisher a {@link BiFunction} to apply to the group key and result to produce the final result
- * @return a {@link Stream} of {@code } objects containing the result of the computation for each group.
- */
- public default Stream streamByKeys(Set> keys,
- SerCollector groupCollector,
- SerBiFunction super TT, ? super Map, ScalarValue, ?, ?, ?>>, T> finisher)
- {
- return streamByKeys(keys, emptyMap(), groupCollector, finisher);
- }
-
- /**
- * Groups all the datapoints of this DataSet having the same values for the specified identifiers,
- * and performs a mutable reduction
- * over each of a chosen subset of the groups.
- *
- * The same as {@link #streamByKeys(Set, Map, SerCollector, SerBiFunction)} with an identity finisher.
- *
- * @param the type of the result of the computation.
- * @param keys the {@link Identifier}s used to group the datapoints
- * @param filter a {@code Map} of {@link Identifier}'s values used to exclude matching groups
- * @param groupCollector a {@link Collector} applied to each group to produce the result
- * @return a {@link Stream} of {@code } objects containing the result of the computation for each group.
- */
- public default Stream streamByKeys(Set> keys,
- Map, ScalarValue, ?, ?, ?>> filter,
- SerCollector groupCollector)
- {
- return streamByKeys(keys, filter, groupCollector, (a, b) -> a);
- }
-
- /**
- * Groups all the datapoints of this DataSet having the same values for the specified identifiers,
- * and performs a mutable reduction
- * over each of the groups.
- *
- * The same as {@link #streamByKeys(Set, Map, SerCollector, SerBiFunction)} with an empty filter and an identity finisher.
- *
- * @param the type of the result of the computation.
- * @param keys the {@link Identifier}s used to group the datapoints
- * @param groupCollector a {@link Collector} applied to each group to produce the result
- * @return a {@link Stream} of {@code } objects containing the result of the computation for each group.
- */
- public default Stream streamByKeys(Set> keys, SerCollector groupCollector)
- {
- return streamByKeys(keys, emptyMap(), groupCollector);
- }
-
/**
* Perform a reduction over a dataset, producing a result for each group defined common values of the specified identifiers
*
@@ -290,77 +228,43 @@ public default Stream streamByKeys(Set The intermediate result of a single analytic function on one window
* @param components A map from source components to result components
- * @param windowSpec The clause specifying the window
+ * @param clause The clause specifying the window
+ * @param extractors extractors that extract a value from a datapoint
* @param collectors Collectors that compute the intermediate results for each source component and window
* @param finishers Finishers to transform intermediate results and partition keys into a collection of new values
*
- * @return The dataset result of the analytic invocation
- */
- public DataSet analytic(SerFunction lineageOp, Map extends DataStructureComponent, ?, ?>, ? extends DataStructureComponent, ?, ?>> components,
- WindowClause windowSpec, Map extends DataStructureComponent, ?, ?>, SerCollector, ?, TT>> collectors,
- Map extends DataStructureComponent, ?, ?>, SerBiFunction, Collection>>> finishers);
-
- /**
- * Creates a new DataSet by applying a window function over a single component of this DataSet.
- * Each application can produce one or more results that will be exploded into multiple datapoints.
- *
- * @param The intermediate result of the analytic function on one window
- * @param component The source component
- * @param windowSpec The clause specifying the window
- * @param collector Collector that compute the intermediate result for each window
- * @param finisher Finisher to transform intermediate result and partition keys into a collection of new values
- *
- * @return The dataset result of the analytic invocation
- */
- public default DataSet analytic(SerFunction lineageOp, DataStructureComponent, ?, ?> component,
- WindowClause windowSpec, SerCollector, ?, TT> collector,
- SerBiFunction, Collection>> finisher)
- {
- return analytic(lineageOp, singletonMap(component, component), windowSpec, singletonMap(component, collector), singletonMap(component, finisher));
- }
-
- /**
- * Creates a new DataSet by applying a window function over multiple source components of this DataSet.
- * Each application can produce one or more results that will be exploded into multiple datapoints.
- *
* @param The intermediate result of a single analytic function on one window
- * @param components The set of source components. Result components will be the same.
- * @param windowSpec The clause specifying the window
- * @param collectors Collectors that compute the intermediate results for each source component and window
- * @param finishers Finishers to transform intermediate results and partition keys into a collection of new values
- *
* @return The dataset result of the analytic invocation
*/
- public default DataSet analytic(SerFunction lineageOp, Set extends DataStructureComponent, ?, ?>> components,
- WindowClause windowSpec, Map extends DataStructureComponent, ?, ?>, SerCollector, ?, TT>> collectors,
- Map extends DataStructureComponent, ?, ?>, SerBiFunction, Collection>>> finishers)
- {
- return analytic(lineageOp, components.stream().collect(toMapWithValues(k -> k)), windowSpec, collectors, finishers);
- }
-
+
/**
- * Creates a new DataSet by applying a window function over multiple source components of this DataSet.
- * Each window function will produce a single result value and the result will have the same cardinality as this dataset.
- * This is the standard VTL analytic invocation.
+ * Creates a new DataSet by applying a window function over a component of this DataSet.
+ * Each application can produce one or more values that will be exploded into multiple datapoints.
+ * The result values are stored in the destination component of the resulting dataset.
*
- * @param components The set of source components. Result components will be the same.
- * @param windowSpec The clause specifying the window
- * @param collectors Collectors that compute the results for each source component and window
+ * @param The type of elements fed into the window
+ * @param The type of the result produced by the window function
+ * @param lineageOp A lineage definition for each result datapoint
+ * @param sourceComp The source component
+ * @param destComp The destination component
+ * @param clause The window clause
+ * @param extractor Extractor that feeds a value into the window. If null, the value fed
+ * will be the value assumed by the source component in each datapoint
+ * @param collector The collector to produce the results for each window
+ * @param finisher A final mapping from the accumulated result into a collaction of values.
+ * If null, the collector result will be taken as-is, and it must be a collection of scalar values.
*
- * @return The dataset result of the analytic invocation
+ * @return A new dataset resulting from the application of the specified window function.
*/
- public default DataSet analytic(SerFunction lineageOp, Set extends DataStructureComponent, ?, ?>> components, WindowClause windowSpec,
- Map extends DataStructureComponent, ?, ?>, SerCollector, ?, ScalarValue, ?, ?, ?>>> collectors)
+ public DataSet analytic(SerFunction lineageOp, DataStructureComponent, ?, ?> sourceComp,
+ DataStructureComponent, ?, ?> destComp, WindowClause clause, SerFunction extractor,
+ SerCollector collector, SerBiFunction>> finisher);
+
+ public default DataSet analytic(SerFunction lineageOp, DataStructureComponent, ?, ?> component,
+ WindowClause clause, SerCollector, ?, ScalarValue, ?, ?, ?>> collector)
{
- Map extends DataStructureComponent, ?, ?>, DataStructureComponent, ?, ?>> measures = components.stream()
- .collect(toMapWithValues(measure -> measure));
- Map extends DataStructureComponent, ?, ?>, SerBiFunction, ScalarValue, ?, ?, ?>, Collection>>> finishers = components.stream()
- .collect(toMapWithValues(measure -> (value, originalValue) -> singleton(value)));
-
- return analytic(lineageOp, measures, windowSpec, collectors, finishers);
+ return analytic(lineageOp, component, component, clause, null, collector, null);
}
/**
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/ScalarValue.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/ScalarValue.java
index 759fa4d25..4d0eb99c2 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/ScalarValue.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/ScalarValue.java
@@ -42,7 +42,7 @@ public interface ScalarValue, R extends Compar
* @return the {@link ValueDomainSubset} of this ScalarValue.
*/
public S getDomain();
-
+
@Override
public ScalarValueMetadata getMetadata();
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/domain/ValueDomain.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/domain/ValueDomain.java
index cb93c800a..d74777bd6 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/domain/ValueDomain.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/domain/ValueDomain.java
@@ -48,4 +48,10 @@ public interface ValueDomain extends Serializable
* @return true if the comparison is possible
*/
public boolean isComparableWith(ValueDomain other);
+
+ /**
+ *
+ * @return the representation type for this domain
+ */
+ public Class extends Serializable> getRepresentation();
}
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/GenericTuple.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/GenericTuple.java
new file mode 100644
index 000000000..ca2a2419e
--- /dev/null
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/GenericTuple.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright © 2020 Banca D'Italia
+ *
+ * Licensed under the EUPL, Version 1.2 (the "License");
+ * You may not use this work except in compliance with the
+ * License.
+ * You may obtain a copy of the License at:
+ *
+ * https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt
+ *
+ * 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 it.bancaditalia.oss.vtl.util;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+public class GenericTuple implements Serializable, Cloneable
+{
+ private static final long serialVersionUID = 1L;
+
+ private final Serializable[] values;
+
+ public GenericTuple(Serializable[] values)
+ {
+ this.values = values;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(values);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (!(obj instanceof GenericTuple))
+ return false;
+ GenericTuple other = (GenericTuple) obj;
+ if (!Arrays.equals(values, other.values))
+ return false;
+ return true;
+ }
+
+ public int size()
+ {
+ return values.length;
+ }
+
+ public Serializable get1() { return values[0]; }
+ public Serializable get2() { return values[1]; }
+ public Serializable get3() { return values[2]; }
+ public Serializable get4() { return values[3]; }
+ public Serializable get5() { return values[4]; }
+ public Serializable get6() { return values[5]; }
+ public Serializable get7() { return values[6]; }
+ public Serializable get8() { return values[7]; }
+ public Serializable get9() { return values[8]; }
+ public Serializable get10() { return values[9]; }
+ public Serializable get11() { return values[10]; }
+ public Serializable get12() { return values[11]; }
+ public Serializable get13() { return values[12]; }
+ public Serializable get14() { return values[13]; }
+ public Serializable get15() { return values[14]; }
+ public Serializable get16() { return values[15]; }
+ public Serializable get17() { return values[16]; }
+ public Serializable get18() { return values[17]; }
+ public Serializable get19() { return values[18]; }
+ public Serializable get20() { return values[19]; }
+
+ public void set1(Serializable value) { values[0] = value; }
+ public void set2(Serializable value) { values[1] = value; }
+ public void set3(Serializable value) { values[2] = value; }
+ public void set4(Serializable value) { values[3] = value; }
+ public void set5(Serializable value) { values[4] = value; }
+ public void set6(Serializable value) { values[5] = value; }
+ public void set7(Serializable value) { values[6] = value; }
+ public void set8(Serializable value) { values[7] = value; }
+ public void set9(Serializable value) { values[8] = value; }
+ public void set10(Serializable value) { values[9] = value; }
+ public void set11(Serializable value) { values[10] = value; }
+ public void set12(Serializable value) { values[11] = value; }
+ public void set13(Serializable value) { values[12] = value; }
+ public void set14(Serializable value) { values[13] = value; }
+ public void set15(Serializable value) { values[14] = value; }
+ public void set16(Serializable value) { values[15] = value; }
+ public void set17(Serializable value) { values[16] = value; }
+ public void set18(Serializable value) { values[17] = value; }
+ public void set19(Serializable value) { values[18] = value; }
+ public void set20(Serializable value) { values[19] = value; }
+}
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/OptionalBox.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/OptionalBox.java
deleted file mode 100644
index 40db18ac6..000000000
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/OptionalBox.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright © 2020 Banca D'Italia
- *
- * Licensed under the EUPL, Version 1.2 (the "License");
- * You may not use this work except in compliance with the
- * License.
- * You may obtain a copy of the License at:
- *
- * https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt
- *
- * 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 it.bancaditalia.oss.vtl.util;
-
-public class OptionalBox implements SerConsumer
-{
- private static final long serialVersionUID = 1L;
-
- private final SerBinaryOperator op;
- private T value = null;
- private boolean present = false;
-
- public OptionalBox(SerBinaryOperator op)
- {
- this.op = op;
- }
-
- @Override
- public void accept(T t)
- {
- if (present)
- value = op.apply(value, t);
- else
- {
- value = t;
- present = true;
- }
- }
-
- public boolean isPresent()
- {
- return present;
- }
-
- public T get()
- {
- return value;
- }
-}
\ No newline at end of file
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerBinaryOperator.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerBinaryOperator.java
index cff40f78b..eb01a13d8 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerBinaryOperator.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerBinaryOperator.java
@@ -27,14 +27,14 @@ public interface SerBinaryOperator extends BinaryOperator, SerBiFunction SerBinaryOperator minBy(Comparator super T> comparator)
{
- SerIntBiFunction op = comparator::compare;
- return (a, b) -> op.apply(a, b) <= 0 ? a : b;
+ SerToIntBiFunction fn = comparator::compare;
+ return (a, b) -> fn.applyAsInt(a, b) <= 0 ? a : b;
}
public static SerBinaryOperator maxBy(Comparator super T> comparator)
{
- SerIntBiFunction op = comparator::compare;
- return (a, b) -> op.apply(a, b) >= 0 ? a : b;
+ SerToIntBiFunction fn = comparator::compare;
+ return (a, b) -> fn.applyAsInt(a, b) >= 0 ? a : b;
}
public default SerBinaryOperator reverseIf(boolean condition)
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerCollectors.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerCollectors.java
index 8338d7ef0..f973b6c77 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerCollectors.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerCollectors.java
@@ -20,6 +20,7 @@
package it.bancaditalia.oss.vtl.util;
import static it.bancaditalia.oss.vtl.util.SerFunction.identity;
+import static it.bancaditalia.oss.vtl.util.Utils.coalesce;
import static java.lang.Boolean.TRUE;
import static java.util.Collections.emptySet;
import static java.util.Objects.requireNonNull;
@@ -44,6 +45,7 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collector.Characteristics;
import it.bancaditalia.oss.vtl.exceptions.VTLNestedException;
@@ -107,6 +109,14 @@ public static SerCollector reducing(U identity, SerFunction
(a, b) -> { a[0] = op.apply(a[0], b[0]); return a; },
a -> a[0], emptySet());
}
+
+ public static SerCollector> reducing(SerBinaryOperator op)
+ {
+ return new SerCollector<>(boxSupplier((T) null),
+ (a, t) -> { if (a[0] == null) a[0] = t; else a[0] = op.apply(a[0], t); },
+ (a, b) -> { if (a[0] == null) a[0] = b[0]; else a[0] = op.apply(a[0], coalesce(b[0], a[0])); return a; },
+ a -> Optional.ofNullable(a[0]), emptySet());
+ }
public static SerCollector mapping(SerFunction super T, ? extends U> mapper, SerCollector super U, A, R> downstream)
{
@@ -149,12 +159,18 @@ public static SerCollector reducing(U identity, SerFunction
public static SerCollector, List> toList()
{
- return new SerCollector<>(ArrayList::new, List::add, (left, right) -> { left.addAll(right); return left; }, identity(), emptySet());
+ return new SerCollector<>(ArrayList::new, List::add, (left, right) -> { left.addAll(right); return left; }, identity(), EnumSet.of(IDENTITY_FINISH, CONCURRENT));
+ }
+
+ public static SerCollector, List> toList(SerSupplier> supplier)
+ {
+ return new SerCollector<>(supplier::get, List::add, (left, right) -> { left.addAll(right); return left; }, identity(), EnumSet.of(IDENTITY_FINISH, CONCURRENT));
}
public static SerCollector toArray(T[] result)
{
- return new SerCollector<>(() -> new ArrayHolder(result), ArrayHolder::accumulate, ArrayHolder::merge, acc -> result, EnumSet.of(CONCURRENT));
+ AtomicInteger index = new AtomicInteger(0);
+ return new SerCollector<>(() -> result, (a, v) -> a[index.getAndIncrement()] = v, (a, b) -> a, identity(), EnumSet.of(CONCURRENT));
}
public static SerCollector filtering(SerPredicate super T> predicate, SerCollector super T, A, R> downstream)
@@ -277,13 +293,6 @@ public static SerCollector peeking(SerConsumer super T> act
return SerCollector.of(mangledFactory, accumulator, merger, finisher, EnumSet.of(UNORDERED));
}
}
-
- public static SerCollector, Optional> reducing(SerBinaryOperator op)
- {
- return new SerCollector<>(() -> new OptionalBox(op), OptionalBox::accept,
- (a, b) -> { if (b.isPresent()) a.accept(b.get()); return a; },
- a -> Optional.ofNullable(a.get()), emptySet());
- }
public static SerCollector teeing(SerCollector super T, ?, R1> downstream1,
SerCollector super T, ?, R2> downstream2, SerBiFunction super R1, ? super R2, R> merger)
@@ -338,7 +347,7 @@ public R finish()
@SuppressWarnings("unchecked")
private static SerSupplier boxSupplier(T identity) {
- return () -> (T[]) new Object[] { identity };
+ return () -> (T[]) new Serializable[] { (Serializable) identity };
}
private static > SerBinaryOperator mapMerger(SerBinaryOperator mergeFunction)
@@ -432,27 +441,4 @@ private static > SerBinaryOperator throwingMerger()
{
return SerCollector.of(mapSupplier::get, throwingPutter(Entry::getKey, Entry::getValue), throwingMerger(), characteristics);
}
-
- private static class ArrayHolder implements Serializable
- {
- private static final long serialVersionUID = 1L;
-
- private final T[] result;
- private transient volatile int index;
-
- public ArrayHolder(T[] result)
- {
- this.result = result;
- }
-
- public void accumulate(T v)
- {
- result[index++] = v;
- }
-
- public ArrayHolder merge(ArrayHolder other)
- {
- throw new UnsupportedOperationException();
- }
- }
}
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerDoubleSumAvgCount.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerDoubleSumAvgCount.java
index 775909cc4..ba28ec4c1 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerDoubleSumAvgCount.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerDoubleSumAvgCount.java
@@ -78,16 +78,21 @@ public SerDoubleSumAvgCount combine(SerDoubleSumAvgCount other)
private void sumWithCompensation(double value)
{
- double tmp = value - sums[1];
- double velvel = sums[0] + tmp;
- sums[1] = (velvel - sums[0]) - tmp;
- sums[0] = velvel;
+ double tmp1 = value - sums[1];
+ double tmp2 = sums[0] + tmp1;
+ sums[1] = (tmp2 - sums[0]) - tmp1;
+ sums[0] = tmp2;
}
public final long getCount()
{
return count;
}
+
+ public final double[] getSums()
+ {
+ return sums;
+ }
public final OptionalDouble getSum()
{
diff --git a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerIntBiFunction.java b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerIntPredicate.java
similarity index 76%
rename from vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerIntBiFunction.java
rename to vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerIntPredicate.java
index cff05dcda..7a8eaf2fa 100644
--- a/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerIntBiFunction.java
+++ b/vtl-api/src/main/java/it/bancaditalia/oss/vtl/util/SerIntPredicate.java
@@ -20,13 +20,9 @@
package it.bancaditalia.oss.vtl.util;
import java.io.Serializable;
+import java.util.function.IntPredicate;
-public interface SerIntBiFunction extends Serializable
+public interface SerIntPredicate extends IntPredicate, Serializable
{
- public int apply(T t, U u);
-
- public default SerBiFunction andThen(SerIntFunction mapper)
- {
- return (t, u) -> mapper.apply(apply(t, u));
- }
+
}
diff --git a/vtl-bundles/vtl-cli/src/main/java/it/bancaditalia/oss/vtl/impl/cli/VTLShell.java b/vtl-bundles/vtl-cli/src/main/java/it/bancaditalia/oss/vtl/impl/cli/VTLShell.java
index 136e75fb0..e57e6e7a0 100644
--- a/vtl-bundles/vtl-cli/src/main/java/it/bancaditalia/oss/vtl/impl/cli/VTLShell.java
+++ b/vtl-bundles/vtl-cli/src/main/java/it/bancaditalia/oss/vtl/impl/cli/VTLShell.java
@@ -77,7 +77,7 @@ public Void call() throws Exception
ConfigurationManagerFactory.loadConfiguration(reader);
}
- ConfigurationManager manager = ConfigurationManagerFactory.getInstance();
+ ConfigurationManager manager = ConfigurationManagerFactory.newManager();
VTLSession session;
try (Reader reader = file != null ? Files.newBufferedReader(file.toPath(), UTF_8) : new BufferedReader(new InputStreamReader(System.in, UTF_8)))
diff --git a/vtl-bundles/vtl-coverage/pom.xml b/vtl-bundles/vtl-coverage/pom.xml
index 55e19ad55..1e3a22eab 100644
--- a/vtl-bundles/vtl-coverage/pom.xml
+++ b/vtl-bundles/vtl-coverage/pom.xml
@@ -36,47 +36,6 @@
vtl-coverage
Coverage report aggregator
-
-
- with-spark
-
-
- it.bancaditalia.oss.vtl
- vtl-spark
-
-
-
-
- with-cli
-
-
- it.bancaditalia.oss.vtl
- vtl-cli
-
-
-
-
- with-jupyter
-
-
- it.bancaditalia.oss.vtl
- vtl-jupyter
- ${project.version}
-
-
-
-
- with-r
-
-
- it.bancaditalia.oss.vtl
- vtl-java2r
- ${project.version}
-
-
-
-
-
@@ -126,11 +85,20 @@
it.bancaditalia.oss.vtl
vtl-session
+
+ it.bancaditalia.oss.vtl
+ vtl-spark
+
org.junit.jupiter
junit-jupiter
test
+
+ org.apache.spark
+ spark-sql_${scala.compat.version}
+ provided
+
org.junit.jupiter
junit-jupiter-params
diff --git a/vtl-bundles/vtl-coverage/src/test/java/it/bancaditalia/oss/vtl/coverage/tests/IntegrationTestSuite.java b/vtl-bundles/vtl-coverage/src/test/java/it/bancaditalia/oss/vtl/coverage/tests/IntegrationTestSuite.java
index c2fda41b0..cb2db4f76 100644
--- a/vtl-bundles/vtl-coverage/src/test/java/it/bancaditalia/oss/vtl/coverage/tests/IntegrationTestSuite.java
+++ b/vtl-bundles/vtl-coverage/src/test/java/it/bancaditalia/oss/vtl/coverage/tests/IntegrationTestSuite.java
@@ -22,6 +22,8 @@
import static it.bancaditalia.oss.vtl.config.VTLGeneralProperties.ENVIRONMENT_IMPLEMENTATION;
import static it.bancaditalia.oss.vtl.config.VTLGeneralProperties.METADATA_REPOSITORY;
import static it.bancaditalia.oss.vtl.impl.environment.CSVPathEnvironment.VTL_CSV_ENVIRONMENT_SEARCH_PATH;
+import static it.bancaditalia.oss.vtl.impl.environment.spark.SparkEnvironment.VTL_SPARK_SEARCH_PATH;
+import static it.bancaditalia.oss.vtl.impl.environment.spark.SparkEnvironment.VTL_SPARK_UI_ENABLED;
import static it.bancaditalia.oss.vtl.impl.meta.json.JsonMetadataRepository.JSON_METADATA_URL;
import static it.bancaditalia.oss.vtl.util.SerCollectors.toList;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -38,6 +40,8 @@
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.hamcrest.Matchers;
@@ -48,6 +52,7 @@
import it.bancaditalia.oss.vtl.config.ConfigurationManagerFactory;
import it.bancaditalia.oss.vtl.impl.environment.CSVPathEnvironment;
import it.bancaditalia.oss.vtl.impl.environment.WorkspaceImpl;
+import it.bancaditalia.oss.vtl.impl.environment.spark.SparkEnvironment;
import it.bancaditalia.oss.vtl.impl.meta.json.JsonMetadataRepository;
import it.bancaditalia.oss.vtl.model.data.DataPoint;
import it.bancaditalia.oss.vtl.model.data.DataSet;
@@ -67,16 +72,175 @@ public static Stream test() throws IOException, URISyntaxException
root = Paths.get(IntegrationTestSuite.class.getResource("../tests").toURI());
METADATA_REPOSITORY.setValue(JsonMetadataRepository.class);
- ENVIRONMENT_IMPLEMENTATION.setValues(CSVPathEnvironment.class, WorkspaceImpl.class);
List tests = new ArrayList<>();
String testName;
StringBuilder testCode = new StringBuilder();
+
+ Set skipped = Stream.of(
+ "abs",
+ "absolute_value_1",
+ "absolute_value_2",
+ "aggr",
+ "aggr_1",
+ "aggr_2",
+ "and_1",
+ "and_2",
+ "and_or",
+ "average",
+ "basic_arithmetic_1",
+ "basic_arithmetic_2",
+ "between_1",
+ "between_2",
+ "boolean_and_1",
+ "boolean_and_2",
+ "boolean_not_1",
+ "boolean_or_1",
+ "boolean_or_2",
+ "boolean_xor_1",
+ "boolean_xor_2",
+ "calc",
+ "calc_1",
+ "case_conversion_1",
+ "case_conversion_2",
+ "case_conversion_3",
+ "ceil",
+ "ceil_1",
+ "ceil_floor_1",
+ "count",
+ "div",
+ "drop",
+ "element_of_1",
+ "element_of_2",
+ "element_of_3",
+ "equal",
+ "equal_1",
+ "equal_2",
+ "exists_in_1",
+ "exists_in_2",
+ "exists_in_3",
+ "exp",
+ "exp_2",
+ "fill_timeseries_1",
+ "fill_timeseries_2",
+ "filter",
+ "filter_1",
+ "filter_2",
+ "first_value_1",
+ "first_value_2",
+ "floor",
+ "floor_1",
+ "flow_to_stock_1",
+ "flow_to_stock_2",
+ "greater",
+ "greatereq",
+ "greater_than_1",
+ "greater_than_2",
+ "if-then-else_1",
+ "if-then-else_2",
+ "intersection",
+ "is_null_1",
+ "is_null_2",
+ "keep",
+ "keep_1",
+ "lag_1",
+ "lag_2",
+ "last_value_1",
+ "last_value_2",
+ "lead_1",
+ "lead_2",
+ "lesser",
+ "lessereq",
+ "less_than_1",
+ "ln",
+ "ln_1",
+ "ln_2",
+ "log_1",
+ "log_2",
+ "match_characters_1",
+ "match_characters_2",
+ "max",
+ "median",
+ "membership_1",
+ "min",
+ "minus",
+ "mod",
+ "mod_1",
+ "mod_2",
+ "mult",
+ "notequal",
+ "not_1",
+ "not_2",
+ "not_equal_1",
+ "not_equal_2",
+ "not_xor",
+ "nvl_1",
+ "nvl_2",
+ "nvl_3",
+ "op_with_calculated_scalar",
+ "or_1",
+ "or_2",
+ "parentheses_1",
+ "parentheses_2",
+ "pattern_location_1",
+ "pattern_location_2",
+ "pattern_replacement_1",
+ "pattern_replacement_2",
+ "pattern_replacement_3",
+ "plus",
+ "pow",
+ "power_1",
+ "power_2",
+ "rank_1",
+ "ratio_to_report_1",
+ "ratio_to_report_2",
+ "rename",
+ "rename_1",
+ "round",
+ "round_1",
+ "round_2",
+ "self_defined_operator1",
+ "self_defined_operator2",
+ "set_difference_1",
+ "sqrt",
+ "sqrt_1",
+ "sqrt_2",
+ "standard_deviation_pop",
+ "standard_deviation_samp",
+ "stock_to_flow_1",
+ "stock_to_flow_2",
+ "string_concatenation_1",
+ "string_concatenation_2",
+ "string_concatenation_3",
+ "string_trim_1",
+ "string_trim_2",
+ "string_trim_3",
+ "string_trim_4",
+ "sub",
+ "substring_extraction_1",
+ "substring_extraction_2",
+ "sub_1",
+ "sum",
+ "sum_1",
+ "symmetric_difference_1",
+ "timeshift_1",
+ "timeshift_2",
+ "trunc_1",
+ "trunc_2",
+ "uminus",
+ "union_1",
+ "union_2",
+ "uplus",
+ "var_pop",
+ "var_samp",
+ "xor_1",
+ "xor_2"
+ ).collect(Collectors.toSet());
try (BufferedReader dirReader = new BufferedReader(new InputStreamReader(IntegrationTestSuite.class.getResourceAsStream("../tests"), UTF_8)))
{
while ((testName = dirReader.readLine()) != null)
- if (!testName.endsWith(".class"))
+ if (!testName.endsWith(".class")/* && !skipped.contains(testName) */)
{
try (BufferedReader testReader = Files.newBufferedReader(root.resolve(testName).resolve(testName + ".vtl")))
{
@@ -93,7 +257,7 @@ public static Stream test() throws IOException, URISyntaxException
testCode.setLength(0);
}
}
-
+
return tests.stream();
}
@@ -108,9 +272,56 @@ public synchronized void test(final String testName, final String testCode) thro
System.out.println(testCode);
System.out.println("------------------------------------------------------------------------------------------------");
+ ENVIRONMENT_IMPLEMENTATION.setValues(CSVPathEnvironment.class, WorkspaceImpl.class);
VTL_CSV_ENVIRONMENT_SEARCH_PATH.setValues(root.resolve(testName).toString());
JSON_METADATA_URL.setValue(IntegrationTestSuite.class.getResource(testName + "/" + testName + ".json").toString());
- VTLSession session = ConfigurationManagerFactory.getInstance().createSession(testCode);
+ VTLSession session = ConfigurationManagerFactory.newManager().createSession(testCode);
+
+ session.compile();
+
+ DataSet expected = session.resolve("expected", DataSet.class);
+ DataSet result = session.resolve("test_result", DataSet.class);
+
+ for (DataStructureComponent, ?, ?> comp: expected.getMetadata())
+ assertTrue(result.getMetadata().contains(comp), "Expected component " + comp + " is missing in " + result.getMetadata());
+ for (DataStructureComponent, ?, ?> comp: result.getMetadata())
+ assertTrue(expected.getMetadata().contains(comp), "Unexpected component " + comp + " in result.");
+
+ List resDPs;
+ List expectedDPs;
+ try (Stream resStream = result.stream(); Stream expStream = expected.stream())
+ {
+ resDPs = resStream.collect(toList());
+ expectedDPs = expStream.collect(toList());
+ }
+
+ System.out.println("Expected:");
+ expectedDPs.forEach(System.out::println);
+ System.out.println("Actual:");
+ resDPs.forEach(System.out::println);
+
+ for (DataPoint dp: resDPs)
+ assertThat(dp, anyOf(expectedDPs.stream().map(Matchers::equalTo).collect(toList())));
+ for (DataPoint dp: expectedDPs)
+ assertThat(dp, anyOf(resDPs.stream().map(Matchers::equalTo).collect(toList())));
+ }
+
+ @ParameterizedTest(name = "{0} - Spark")
+ @MethodSource("test")
+ public synchronized void testSpark(final String testName, final String testCode) throws IOException, URISyntaxException
+ {
+ System.out.println("------------------------------------------------------------------------------------------------");
+ System.out.println(" SPARK -- " + testName);
+ System.out.println("------------------------------------------------------------------------------------------------");
+ System.out.println();
+ System.out.println(testCode);
+ System.out.println("------------------------------------------------------------------------------------------------");
+
+ ENVIRONMENT_IMPLEMENTATION.setValues(SparkEnvironment.class, WorkspaceImpl.class);
+ VTL_SPARK_SEARCH_PATH.setValues(root.resolve(testName).toString());
+ VTL_SPARK_UI_ENABLED.setValue(false);
+ JSON_METADATA_URL.setValue(IntegrationTestSuite.class.getResource(testName + "/" + testName + "-spark.json").toString());
+ VTLSession session = ConfigurationManagerFactory.newManager().createSession(testCode);
session.compile();
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/abs/abs-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/abs/abs-spark.json
new file mode 100644
index 000000000..0791ed574
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/abs/abs-spark.json
@@ -0,0 +1,56 @@
+{
+ "datasets": [
+ {
+ "name": "number_test3",
+ "source": "spark:csv:number_test3.csv",
+ "structure": "number_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "abs_str",
+ "source": "spark:csv:abs.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test3_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "abs_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/absolute_value_1/absolute_value_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/absolute_value_1/absolute_value_1-spark.json
new file mode 100644
index 000000000..b14581b72
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/absolute_value_1/absolute_value_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "absolute_value_1_str",
+ "source": "spark:csv:absolute_value_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "absolute_value_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/absolute_value_2/absolute_value_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/absolute_value_2/absolute_value_2-spark.json
new file mode 100644
index 000000000..9596a4cb0
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/absolute_value_2/absolute_value_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "absolute_value_2_str",
+ "source": "spark:csv:absolute_value_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "absolute_value_2_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "abs_3",
+ "role": "Measure"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "abs_3",
+ "domain": "number"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr/aggr-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr/aggr-spark.json
new file mode 100644
index 000000000..9dc19567e
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr/aggr-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test5",
+ "source": "spark:csv:number_test5.csv",
+ "structure": "number_test5_str"
+ },
+ {
+ "name": "expected",
+ "structure": "clauses_aggr_1_str",
+ "source": "spark:csv:aggr.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test5_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "clauses_aggr_1_str",
+ "components": [
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m2",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "m2",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr_1/aggr_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr_1/aggr_1-spark.json
new file mode 100644
index 000000000..281068f92
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr_1/aggr_1-spark.json
@@ -0,0 +1,184 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "aggr_1_str",
+ "source": "spark:csv:aggr_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "aggr_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr_2/aggr_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr_2/aggr_2-spark.json
new file mode 100644
index 000000000..d09643f70
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/aggr_2/aggr_2-spark.json
@@ -0,0 +1,184 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "aggr_2_str",
+ "source": "spark:csv:aggr_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "aggr_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_1/and_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_1/and_1-spark.json
new file mode 100644
index 000000000..9bcfa166e
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_1/and_1-spark.json
@@ -0,0 +1,122 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test5",
+ "source": "spark:csv:boolean_test5.csv",
+ "structure": "boolean_test5_str"
+ },
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "and_1_str",
+ "source": "spark:csv:and_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "and_1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test5_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_2/and_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_2/and_2-spark.json
new file mode 100644
index 000000000..b48059e8f
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_2/and_2-spark.json
@@ -0,0 +1,112 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "and_2_str",
+ "source": "spark:csv:and_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "and_2_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "andt",
+ "role": "Measure"
+ },
+ {
+ "name": "andf",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "andt",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "andf",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_or/and_or-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_or/and_or-spark.json
new file mode 100644
index 000000000..837288287
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/and_or/and_or-spark.json
@@ -0,0 +1,124 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test6",
+ "source": "spark:csv:boolean_test6.csv",
+ "structure": "boolean_test6_str"
+ },
+ {
+ "name": "expected",
+ "structure": "and_or_str",
+ "source": "spark:csv:and_or.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "and_or_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_and",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_or",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test6_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_or",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_and",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/average/average-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/average/average-spark.json
new file mode 100644
index 000000000..90f718799
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/average/average-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "median_data",
+ "source": "spark:csv:median_variance.csv",
+ "structure": "median_str"
+ },
+ {
+ "name": "expected",
+ "structure": "average_str",
+ "source": "spark:csv:average.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "average_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "median_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/basic_arithmetic_1/basic_arithmetic_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/basic_arithmetic_1/basic_arithmetic_1-spark.json
new file mode 100644
index 000000000..3608093e1
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/basic_arithmetic_1/basic_arithmetic_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "basic_arithmetic_1_str",
+ "source": "spark:csv:basic_arithmetic_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "basic_arithmetic_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/basic_arithmetic_2/basic_arithmetic_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/basic_arithmetic_2/basic_arithmetic_2-spark.json
new file mode 100644
index 000000000..c61ff6103
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/basic_arithmetic_2/basic_arithmetic_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "basic_arithmetic_2_str",
+ "source": "spark:csv:basic_arithmetic_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "basic_arithmetic_2_str",
+ "components": [
+ {
+ "name": "num_3",
+ "role": "Measure"
+ },
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "num_3",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/between_1/between_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/between_1/between_1-spark.json
new file mode 100644
index 000000000..9b7739689
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/between_1/between_1-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "between_test",
+ "source": "spark:csv:between_test.csv",
+ "structure": "between_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "between_1_str",
+ "source": "spark:csv:between_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "between_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "between_1_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/between_2/between_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/between_2/between_2-spark.json
new file mode 100644
index 000000000..ce8da8433
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/between_2/between_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "between_test",
+ "source": "spark:csv:between_test.csv",
+ "structure": "between_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "between_2_str",
+ "source": "spark:csv:between_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "between_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "between_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ },
+ {
+ "name": "btwn",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "btwn",
+ "domain": "boolean"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_and_1/boolean_and_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_and_1/boolean_and_1-spark.json
new file mode 100644
index 000000000..e45a5762c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_and_1/boolean_and_1-spark.json
@@ -0,0 +1,74 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test2",
+ "source": "spark:csv:boolean_test2.csv",
+ "structure": "boolean_test2_str"
+ },
+ {
+ "name": "boolean_test1",
+ "source": "spark:csv:boolean_test1.csv",
+ "structure": "boolean_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_and_1_str",
+ "source": "spark:csv:boolean_and_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test2_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_and_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_and_2/boolean_and_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_and_2/boolean_and_2-spark.json
new file mode 100644
index 000000000..5ff4a3405
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_and_2/boolean_and_2-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test3",
+ "source": "spark:csv:boolean_test3.csv",
+ "structure": "boolean_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_and_2_str",
+ "source": "spark:csv:boolean_and_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test3_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_and_2_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "m3",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "m3",
+ "domain": "boolean"
+ },
+ {
+ "name": "m2",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_not_1/boolean_not_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_not_1/boolean_not_1-spark.json
new file mode 100644
index 000000000..ac6b7c122
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_not_1/boolean_not_1-spark.json
@@ -0,0 +1,56 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test1",
+ "source": "spark:csv:boolean_test1.csv",
+ "structure": "boolean_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_not_1_str",
+ "source": "spark:csv:boolean_not_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_not_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_or_1/boolean_or_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_or_1/boolean_or_1-spark.json
new file mode 100644
index 000000000..dcb6c9865
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_or_1/boolean_or_1-spark.json
@@ -0,0 +1,74 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test2",
+ "source": "spark:csv:boolean_test2.csv",
+ "structure": "boolean_test2_str"
+ },
+ {
+ "name": "boolean_test1",
+ "source": "spark:csv:boolean_test1.csv",
+ "structure": "boolean_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_or_1_str",
+ "source": "spark:csv:boolean_or_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test2_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_or_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_or_2/boolean_or_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_or_2/boolean_or_2-spark.json
new file mode 100644
index 000000000..bb6f62f36
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_or_2/boolean_or_2-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test3",
+ "source": "spark:csv:boolean_test3.csv",
+ "structure": "boolean_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_or_2_str",
+ "source": "spark:csv:boolean_or_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test3_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_or_2_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "m3",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "m3",
+ "domain": "boolean"
+ },
+ {
+ "name": "m2",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_xor_1/boolean_xor_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_xor_1/boolean_xor_1-spark.json
new file mode 100644
index 000000000..aa46d76a4
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_xor_1/boolean_xor_1-spark.json
@@ -0,0 +1,74 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test2",
+ "source": "spark:csv:boolean_test2.csv",
+ "structure": "boolean_test2_str"
+ },
+ {
+ "name": "boolean_test1",
+ "source": "spark:csv:boolean_test1.csv",
+ "structure": "boolean_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_xor_1_str",
+ "source": "spark:csv:boolean_xor_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test2_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_xor_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_xor_2/boolean_xor_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_xor_2/boolean_xor_2-spark.json
new file mode 100644
index 000000000..234bae8bb
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/boolean_xor_2/boolean_xor_2-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test3",
+ "source": "spark:csv:boolean_test3.csv",
+ "structure": "boolean_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "boolean_xor_2_str",
+ "source": "spark:csv:boolean_xor_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "boolean_test3_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_xor_2_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "m3",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "m3",
+ "domain": "boolean"
+ },
+ {
+ "name": "m2",
+ "domain": "boolean"
+ },
+ {
+ "name": "m1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/calc/calc-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/calc/calc-spark.json
new file mode 100644
index 000000000..9e161d755
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/calc/calc-spark.json
@@ -0,0 +1,51 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "number_test1_str",
+ "source": "spark:csv:calc.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/calc_1/calc_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/calc_1/calc_1-spark.json
new file mode 100644
index 000000000..48db334b7
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/calc_1/calc_1-spark.json
@@ -0,0 +1,252 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "calc_1_str",
+ "source": "spark:csv:calc_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "calc_1_str",
+ "components": [
+ {
+ "name": "me_sum",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "integer"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "integer"
+ },
+ {
+ "name": "me_sum",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_1/case_conversion_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_1/case_conversion_1-spark.json
new file mode 100644
index 000000000..9683ead48
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_1/case_conversion_1-spark.json
@@ -0,0 +1,112 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "case_conversion_1_str",
+ "source": "spark:csv:case_conversion_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "case_conversion_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_low",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_up",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_low",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_up",
+ "domain": "string"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_2/case_conversion_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_2/case_conversion_2-spark.json
new file mode 100644
index 000000000..564686c65
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_2/case_conversion_2-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "case_conversion_2_str",
+ "source": "spark:csv:case_conversion_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "case_conversion_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_3/case_conversion_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_3/case_conversion_3-spark.json
new file mode 100644
index 000000000..86e4af248
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/case_conversion_3/case_conversion_3-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "case_conversion_3_str",
+ "source": "spark:csv:case_conversion_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "case_conversion_3_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil/ceil-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil/ceil-spark.json
new file mode 100644
index 000000000..5740e8d0a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil/ceil-spark.json
@@ -0,0 +1,43 @@
+{
+ "datasets": [
+ {
+ "name": "number_test2",
+ "source": "spark:csv:number_test3.csv",
+ "structure": "number_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "number_test3_str",
+ "source": "spark:csv:ceil.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test3_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil_1/ceil_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil_1/ceil_1-spark.json
new file mode 100644
index 000000000..84c0f7a47
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil_1/ceil_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ceil_1_str",
+ "source": "spark:csv:ceil_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ceil_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil_floor_1/ceil_floor_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil_floor_1/ceil_floor_1-spark.json
new file mode 100644
index 000000000..88433395c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ceil_floor_1/ceil_floor_1-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ceil_floor_1_str",
+ "source": "spark:csv:ceil_floor_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ceil_floor_1_str",
+ "components": [
+ {
+ "name": "num_ceil",
+ "role": "Measure"
+ },
+ {
+ "name": "num_floor",
+ "role": "Measure"
+ },
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_ceil",
+ "domain": "number"
+ },
+ {
+ "name": "num_floor",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/count/count-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/count/count-spark.json
new file mode 100644
index 000000000..c53aba84c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/count/count-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "count_str",
+ "source": "spark:csv:count.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "count_str",
+ "components": [
+ {
+ "name": "integer_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "integer_var",
+ "domain": "integer"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/div/div-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/div/div-spark.json
new file mode 100644
index 000000000..4df0bce21
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/div/div-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "number_div_1_str",
+ "source": "spark:csv:div.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_div_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/drop/drop-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/drop/drop-spark.json
new file mode 100644
index 000000000..98f6d0002
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/drop/drop-spark.json
@@ -0,0 +1,84 @@
+{
+ "datasets": [
+ {
+ "name": "number_test6",
+ "source": "spark:csv:number_test6.csv",
+ "structure": "number_test6_str"
+ },
+ {
+ "name": "expected",
+ "structure": "clauses_drop_1_str",
+ "source": "spark:csv:drop.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test6_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "clauses_drop_1_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "m2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_1/element_of_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_1/element_of_1-spark.json
new file mode 100644
index 000000000..e03a31661
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_1/element_of_1-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "between_test",
+ "source": "spark:csv:between_test.csv",
+ "structure": "between_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "element_of_1_str",
+ "source": "spark:csv:element_of_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "element_of_1_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "between_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "integer"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_2/element_of_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_2/element_of_2-spark.json
new file mode 100644
index 000000000..a33b3c7cd
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_2/element_of_2-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "between_test",
+ "source": "spark:csv:between_test.csv",
+ "structure": "between_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "element_of_2_str",
+ "source": "spark:csv:element_of_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "element_of_2_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "between_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_3/element_of_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_3/element_of_3-spark.json
new file mode 100644
index 000000000..5639ad30a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/element_of_3/element_of_3-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "between_test",
+ "source": "spark:csv:between_test.csv",
+ "structure": "between_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "element_of_3_str",
+ "source": "spark:csv:element_of_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "between_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "element_of_3_str",
+ "components": [
+ {
+ "name": "isleap",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "isleap",
+ "domain": "boolean"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal/equal-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal/equal-spark.json
new file mode 100644
index 000000000..dd302513a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal/equal-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "number_test4",
+ "source": "spark:csv:number_test4.csv",
+ "structure": "number_test4_str"
+ },
+ {
+ "name": "comparison_eq_1",
+ "source": "spark:csv:comparison_eq_1.csv",
+ "structure": "comparison_eq_1_str"
+ },
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "equal_str",
+ "source": "spark:csv:equal.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "equal_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test4_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "comparison_eq_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal_1/equal_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal_1/equal_1-spark.json
new file mode 100644
index 000000000..b41560dd9
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal_1/equal_1-spark.json
@@ -0,0 +1,152 @@
+{
+ "datasets": [
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "eq_1",
+ "source": "spark:csv:eq_1.csv",
+ "structure": "eq_1_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "equal_1_str",
+ "source": "spark:csv:equal_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "equal_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "eq_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal_2/equal_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal_2/equal_2-spark.json
new file mode 100644
index 000000000..f553cc4ba
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/equal_2/equal_2-spark.json
@@ -0,0 +1,130 @@
+{
+ "datasets": [
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "eq_2_str",
+ "source": "spark:csv:equal_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "eq_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "eq",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "eq",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_1/exists_in_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_1/exists_in_1-spark.json
new file mode 100644
index 000000000..bac5e1ca5
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_1/exists_in_1-spark.json
@@ -0,0 +1,90 @@
+{
+ "datasets": [
+ {
+ "name": "match_characters_test",
+ "source": "spark:csv:match_characters_test.csv",
+ "structure": "match_characters_test_str"
+ },
+ {
+ "name": "exists_in_test2",
+ "source": "spark:csv:exists_in_test2.csv",
+ "structure": "exists_in_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "exists_in_1_str",
+ "source": "spark:csv:exists_in_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "match_characters_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "exists_in_1_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "exists_in_test2_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_2/exists_in_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_2/exists_in_2-spark.json
new file mode 100644
index 000000000..53ccc6626
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_2/exists_in_2-spark.json
@@ -0,0 +1,112 @@
+{
+ "datasets": [
+ {
+ "name": "match_characters_test",
+ "source": "spark:csv:match_characters_test.csv",
+ "structure": "match_characters_test_str"
+ },
+ {
+ "name": "exists_in_1",
+ "source": "spark:csv:exists_in_1.csv",
+ "structure": "exists_in_1_str"
+ },
+ {
+ "name": "exists_in_test2",
+ "source": "spark:csv:exists_in_test2.csv",
+ "structure": "exists_in_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "exists_in_2_str",
+ "source": "spark:csv:exists_in_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "exists_in_2_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "match_characters_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "exists_in_1_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "exists_in_test2_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_3/exists_in_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_3/exists_in_3-spark.json
new file mode 100644
index 000000000..ec4858119
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exists_in_3/exists_in_3-spark.json
@@ -0,0 +1,112 @@
+{
+ "datasets": [
+ {
+ "name": "match_characters_test",
+ "source": "spark:csv:match_characters_test.csv",
+ "structure": "match_characters_test_str"
+ },
+ {
+ "name": "exists_in_1",
+ "source": "spark:csv:exists_in_1.csv",
+ "structure": "exists_in_1_str"
+ },
+ {
+ "name": "exists_in_test2",
+ "source": "spark:csv:exists_in_test2.csv",
+ "structure": "exists_in_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "exists_in_3_str",
+ "source": "spark:csv:exists_in_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "exists_in_3_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "match_characters_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "exists_in_1_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "exists_in_test2_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exp/exp-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exp/exp-spark.json
new file mode 100644
index 000000000..237b88106
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exp/exp-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "number_exp_1_str",
+ "source": "spark:csv:exp.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_exp_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exp_2/exp_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exp_2/exp_2-spark.json
new file mode 100644
index 000000000..212b2ac5a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/exp_2/exp_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "exp_2_str",
+ "source": "spark:csv:exp_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "exp_2_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "exp_3",
+ "role": "Measure"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "exp_3",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/fill_timeseries_1/fill_timeseries_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/fill_timeseries_1/fill_timeseries_1-spark.json
new file mode 100644
index 000000000..15883e953
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/fill_timeseries_1/fill_timeseries_1-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "fill_timeseries_test",
+ "source": "spark:csv:fill_timeseries_test.csv",
+ "structure": "fill_timeseries_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "fill_timeseries_1_str",
+ "source": "spark:csv:fill_timeseries_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "fill_timeseries_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_date",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "fill_timeseries_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_date",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_date",
+ "domain": "date"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/fill_timeseries_2/fill_timeseries_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/fill_timeseries_2/fill_timeseries_2-spark.json
new file mode 100644
index 000000000..d68f91c87
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/fill_timeseries_2/fill_timeseries_2-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "fill_timeseries_test",
+ "source": "spark:csv:fill_timeseries_test.csv",
+ "structure": "fill_timeseries_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "fill_timeseries_2_str",
+ "source": "spark:csv:fill_timeseries_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "fill_timeseries_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_date",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "fill_timeseries_2_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_date",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_date",
+ "domain": "date"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter/filter-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter/filter-spark.json
new file mode 100644
index 000000000..2bacfdade
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter/filter-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "clauses_filter_1_str",
+ "source": "spark:csv:filter.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "clauses_filter_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "obs_agg",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "obs_agg",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter_1/filter_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter_1/filter_1-spark.json
new file mode 100644
index 000000000..4b99de5ab
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter_1/filter_1-spark.json
@@ -0,0 +1,252 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "filter_1_str",
+ "source": "spark:csv:filter_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "filter_1_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter_2/filter_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter_2/filter_2-spark.json
new file mode 100644
index 000000000..193fed84b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/filter_2/filter_2-spark.json
@@ -0,0 +1,252 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "filter_2_str",
+ "source": "spark:csv:filter_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "filter_2_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/first_value_1/first_value_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/first_value_1/first_value_1-spark.json
new file mode 100644
index 000000000..1e6e8aed8
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/first_value_1/first_value_1-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "first_value_1_str",
+ "source": "spark:csv:first_value_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "first_value_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/first_value_2/first_value_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/first_value_2/first_value_2-spark.json
new file mode 100644
index 000000000..b8c0b0931
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/first_value_2/first_value_2-spark.json
@@ -0,0 +1,108 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "first_value_2_str",
+ "source": "spark:csv:first_value_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "first_value_2_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "me_3",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_3",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/floor/floor-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/floor/floor-spark.json
new file mode 100644
index 000000000..19c0067cf
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/floor/floor-spark.json
@@ -0,0 +1,56 @@
+{
+ "datasets": [
+ {
+ "name": "number_test3",
+ "source": "spark:csv:number_test3.csv",
+ "structure": "number_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "number_floor_1_str",
+ "source": "spark:csv:floor.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test3_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_floor_1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/floor_1/floor_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/floor_1/floor_1-spark.json
new file mode 100644
index 000000000..de87f4ec9
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/floor_1/floor_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "floor_1_str",
+ "source": "spark:csv:floor_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "floor_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/flow_to_stock_1/flow_to_stock_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/flow_to_stock_1/flow_to_stock_1-spark.json
new file mode 100644
index 000000000..956350584
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/flow_to_stock_1/flow_to_stock_1-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "flow_test",
+ "source": "spark:csv:flow_test.csv",
+ "structure": "flow_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "flow_to_stock_1_str",
+ "source": "spark:csv:flow_to_stock_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "flow_to_stock_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_date",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "flow_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_date",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_date",
+ "domain": "date"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/flow_to_stock_2/flow_to_stock_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/flow_to_stock_2/flow_to_stock_2-spark.json
new file mode 100644
index 000000000..40217796a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/flow_to_stock_2/flow_to_stock_2-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "flow_annual_test",
+ "source": "spark:csv:flow_annual_test.csv",
+ "structure": "flow_annual_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "flow_to_stock_2_str",
+ "source": "spark:csv:flow_to_stock_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "flow_to_stock_2_str",
+ "components": [
+ {
+ "name": "id_annual",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "flow_annual_test_str",
+ "components": [
+ {
+ "name": "id_annual",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_annual",
+ "domain": "date"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater/greater-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater/greater-spark.json
new file mode 100644
index 000000000..bd9f735d6
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater/greater-spark.json
@@ -0,0 +1,82 @@
+{
+ "datasets": [
+ {
+ "name": "number_test4",
+ "source": "spark:csv:number_test4.csv",
+ "structure": "number_test4_str"
+ },
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "greater_str",
+ "source": "spark:csv:greater.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "greater_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test4_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater_than_1/greater_than_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater_than_1/greater_than_1-spark.json
new file mode 100644
index 000000000..29fc6675f
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater_than_1/greater_than_1-spark.json
@@ -0,0 +1,152 @@
+{
+ "datasets": [
+ {
+ "name": "gr_1",
+ "source": "spark:csv:gr_1.csv",
+ "structure": "gr_1_str"
+ },
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "greater_than_1_str",
+ "source": "spark:csv:greater_than_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "gr_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "greater_than_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater_than_2/greater_than_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater_than_2/greater_than_2-spark.json
new file mode 100644
index 000000000..cd8da0430
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greater_than_2/greater_than_2-spark.json
@@ -0,0 +1,130 @@
+{
+ "datasets": [
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "gr_2_str",
+ "source": "spark:csv:greater_than_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "gr_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "gr",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "gr",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greatereq/greatereq-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greatereq/greatereq-spark.json
new file mode 100644
index 000000000..5b98289b8
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/greatereq/greatereq-spark.json
@@ -0,0 +1,82 @@
+{
+ "datasets": [
+ {
+ "name": "number_test4",
+ "source": "spark:csv:number_test4.csv",
+ "structure": "number_test4_str"
+ },
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "greatereq_str",
+ "source": "spark:csv:greatereq.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test4_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "greatereq_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/if-then-else_1/if-then-else_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/if-then-else_1/if-then-else_1-spark.json
new file mode 100644
index 000000000..168b9db41
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/if-then-else_1/if-then-else_1-spark.json
@@ -0,0 +1,152 @@
+{
+ "datasets": [
+ {
+ "name": "if_test1",
+ "source": "spark:csv:if_test1.csv",
+ "structure": "if_test1_str"
+ },
+ {
+ "name": "if_test2",
+ "source": "spark:csv:if_test2.csv",
+ "structure": "if_test2_str"
+ },
+ {
+ "name": "if_test3",
+ "source": "spark:csv:if_test3.csv",
+ "structure": "if_test3_str"
+ },
+ {
+ "name": "expected",
+ "structure": "if_1_str",
+ "source": "spark:csv:if-then-else_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "if_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "if_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "if_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "if_test3_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/if-then-else_2/if-then-else_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/if-then-else_2/if-then-else_2-spark.json
new file mode 100644
index 000000000..8bd68fdf6
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/if-then-else_2/if-then-else_2-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "if_test1",
+ "source": "spark:csv:if_test1.csv",
+ "structure": "if_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "if_2_str",
+ "source": "spark:csv:if-then-else_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "if_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "if_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/intersection/intersection-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/intersection/intersection-spark.json
new file mode 100644
index 000000000..8336fa2de
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/intersection/intersection-spark.json
@@ -0,0 +1,146 @@
+{
+ "datasets": [
+ {
+ "name": "intersection_test1",
+ "source": "spark:csv:intersection_test1.csv",
+ "structure": "intersection_test1_str"
+ },
+ {
+ "name": "intersection_test2",
+ "source": "spark:csv:intersection_test2.csv",
+ "structure": "intersection_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "intersection_1_str",
+ "source": "spark:csv:intersection.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "intersection_1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "intersection_test1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "intersection_test2_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "quality_status",
+ "domain": "string"
+ },
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf2",
+ "domain": "number"
+ },
+ {
+ "name": "edf3",
+ "domain": "number"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/is_null_1/is_null_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/is_null_1/is_null_1-spark.json
new file mode 100644
index 000000000..e58f39c4d
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/is_null_1/is_null_1-spark.json
@@ -0,0 +1,122 @@
+{
+ "datasets": [
+ {
+ "name": "isnull_1",
+ "source": "spark:csv:isnull_1.csv",
+ "structure": "isnull_1_str"
+ },
+ {
+ "name": "isnull_test1",
+ "source": "spark:csv:isnull_test1.csv",
+ "structure": "isnull_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "is_null_1_str",
+ "source": "spark:csv:is_null_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "is_null_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "isnull_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "isnull_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/is_null_2/is_null_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/is_null_2/is_null_2-spark.json
new file mode 100644
index 000000000..8e7afb63c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/is_null_2/is_null_2-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "isnull_test1",
+ "source": "spark:csv:isnull_test1.csv",
+ "structure": "isnull_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "isnull_2_str",
+ "source": "spark:csv:is_null_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "isnull_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "isnull_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "isnl",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "isnl",
+ "domain": "boolean"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/keep/keep-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/keep/keep-spark.json
new file mode 100644
index 000000000..84f426cf0
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/keep/keep-spark.json
@@ -0,0 +1,84 @@
+{
+ "datasets": [
+ {
+ "name": "number_test6",
+ "source": "spark:csv:number_test6.csv",
+ "structure": "number_test6_str"
+ },
+ {
+ "name": "expected",
+ "structure": "clauses_keep_1_str",
+ "source": "spark:csv:keep.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test6_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "clauses_keep_1_str",
+ "components": [
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "m2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/keep_1/keep_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/keep_1/keep_1-spark.json
new file mode 100644
index 000000000..b43f3cd80
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/keep_1/keep_1-spark.json
@@ -0,0 +1,196 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "keep_str",
+ "source": "spark:csv:keep_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "keep_str",
+ "components": [
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lag_1/lag_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lag_1/lag_1-spark.json
new file mode 100644
index 000000000..281f7d7ce
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lag_1/lag_1-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "lag_data",
+ "source": "spark:csv:lag.csv",
+ "structure": "lag_str"
+ },
+ {
+ "name": "expected",
+ "structure": "lag_1_str",
+ "source": "spark:csv:lag_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "lag_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "lag_1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lag_2/lag_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lag_2/lag_2-spark.json
new file mode 100644
index 000000000..b073fcdb3
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lag_2/lag_2-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "lag_data",
+ "source": "spark:csv:lag.csv",
+ "structure": "lag_str"
+ },
+ {
+ "name": "expected",
+ "structure": "lag_2_str",
+ "source": "spark:csv:lag_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "lag_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "lag_2_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "previous",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "previous",
+ "domain": "number"
+ },
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/last_value_1/last_value_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/last_value_1/last_value_1-spark.json
new file mode 100644
index 000000000..a4654e0d1
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/last_value_1/last_value_1-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "last_value_1_str",
+ "source": "spark:csv:last_value_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "last_value_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/last_value_2/last_value_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/last_value_2/last_value_2-spark.json
new file mode 100644
index 000000000..515d1c408
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/last_value_2/last_value_2-spark.json
@@ -0,0 +1,108 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "last_value_2_str",
+ "source": "spark:csv:last_value_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "last_value_2_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "me_3",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_3",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lead_1/lead_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lead_1/lead_1-spark.json
new file mode 100644
index 000000000..5135d3e8b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lead_1/lead_1-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "lag_data",
+ "source": "spark:csv:lag.csv",
+ "structure": "lag_str"
+ },
+ {
+ "name": "expected",
+ "structure": "lead_1_str",
+ "source": "spark:csv:lead_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "lag_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "lead_1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lead_2/lead_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lead_2/lead_2-spark.json
new file mode 100644
index 000000000..026ade31c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lead_2/lead_2-spark.json
@@ -0,0 +1,80 @@
+{
+ "datasets": [
+ {
+ "name": "lag_data",
+ "source": "spark:csv:lag.csv",
+ "structure": "lag_str"
+ },
+ {
+ "name": "expected",
+ "structure": "lead_2_str",
+ "source": "spark:csv:lead_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "lag_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "lead_2_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "next",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "next",
+ "domain": "number"
+ },
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/less_than_1/less_than_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/less_than_1/less_than_1-spark.json
new file mode 100644
index 000000000..b10d6b4b3
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/less_than_1/less_than_1-spark.json
@@ -0,0 +1,130 @@
+{
+ "datasets": [
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "less_than_1_str",
+ "source": "spark:csv:less_than_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "less_than_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "le",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "le",
+ "domain": "boolean"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lesser/lesser-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lesser/lesser-spark.json
new file mode 100644
index 000000000..bd95c69f0
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lesser/lesser-spark.json
@@ -0,0 +1,81 @@
+{
+ "datasets": [
+ {
+ "name": "number_test4",
+ "source": "spark:csv:number_test4.csv",
+ "structure": "number_test4_str"
+ },
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "lesser_str",
+ "source": "spark:csv:lesser.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test4_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "lesser_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ }
+ ]
+ } ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lessereq/lessereq-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lessereq/lessereq-spark.json
new file mode 100644
index 000000000..14d821f73
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/lessereq/lessereq-spark.json
@@ -0,0 +1,82 @@
+{
+ "datasets": [
+ {
+ "name": "number_test4",
+ "source": "spark:csv:number_test4.csv",
+ "structure": "number_test4_str"
+ },
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "lessereq_str",
+ "source": "spark:csv:lessereq.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test4_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "lessereq_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln/ln-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln/ln-spark.json
new file mode 100644
index 000000000..c52150ebc
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln/ln-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ln_str",
+ "source": "spark:csv:ln.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ln_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln_1/ln_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln_1/ln_1-spark.json
new file mode 100644
index 000000000..818b0e123
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln_1/ln_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ln_1_str",
+ "source": "spark:csv:ln_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "ln_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln_2/ln_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln_2/ln_2-spark.json
new file mode 100644
index 000000000..98ef8f78d
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ln_2/ln_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ln_2_str",
+ "source": "spark:csv:ln_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ln_2_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "ln_3",
+ "role": "Measure"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "ln_3",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/log_1/log_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/log_1/log_1-spark.json
new file mode 100644
index 000000000..88bfc9dd4
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/log_1/log_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "log_1_str",
+ "source": "spark:csv:log_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "log_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/log_2/log_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/log_2/log_2-spark.json
new file mode 100644
index 000000000..75bfcd739
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/log_2/log_2-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "log_2_str",
+ "source": "spark:csv:log_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "log_2_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "log_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ },
+ {
+ "name": "log_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "log_1",
+ "domain": "number"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ },
+ {
+ "name": "log_2",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/match_characters_1/match_characters_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/match_characters_1/match_characters_1-spark.json
new file mode 100644
index 000000000..5cb21ba52
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/match_characters_1/match_characters_1-spark.json
@@ -0,0 +1,68 @@
+{
+ "datasets": [
+ {
+ "name": "match_characters_test",
+ "source": "spark:csv:match_characters_test.csv",
+ "structure": "match_characters_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "match_characters_1_str",
+ "source": "spark:csv:match_characters_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "match_characters_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "match_characters_1_str",
+ "components": [
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/match_characters_2/match_characters_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/match_characters_2/match_characters_2-spark.json
new file mode 100644
index 000000000..39ebaa2c2
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/match_characters_2/match_characters_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "match_characters_test",
+ "source": "spark:csv:match_characters_test.csv",
+ "structure": "match_characters_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "match_characters_2_str",
+ "source": "spark:csv:match_characters_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "match_characters_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "match_characters_2_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "is_isin",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "is_isin",
+ "domain": "boolean"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/max/max-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/max/max-spark.json
new file mode 100644
index 000000000..068c2659a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/max/max-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "max_str",
+ "source": "spark:csv:max.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "max_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/median/median-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/median/median-spark.json
new file mode 100644
index 000000000..91714b2b2
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/median/median-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "median_data",
+ "source": "spark:csv:median_variance.csv",
+ "structure": "median_str"
+ },
+ {
+ "name": "expected",
+ "structure": "median_1_str",
+ "source": "spark:csv:median.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "median_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "median_1_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "integer"
+ },
+ {
+ "name": "me_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/membership_1/membership_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/membership_1/membership_1-spark.json
new file mode 100644
index 000000000..9cd54543b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/membership_1/membership_1-spark.json
@@ -0,0 +1,104 @@
+{
+ "datasets": [
+ {
+ "name": "gen_operators_test1",
+ "source": "spark:csv:gen_operators_test1.csv",
+ "structure": "gen_operators_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "membership_1_str",
+ "source": "spark:csv:membership_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "gen_operators_test1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "membership_1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "string_var",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ },
+ {
+ "name": "string_var",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/min/min-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/min/min-spark.json
new file mode 100644
index 000000000..cfd287e3a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/min/min-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "min_str",
+ "source": "spark:csv:min.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "min_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/minus/minus-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/minus/minus-spark.json
new file mode 100644
index 000000000..d6d80661f
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/minus/minus-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "minus_str",
+ "source": "spark:csv:minus.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "minus_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod/mod-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod/mod-spark.json
new file mode 100644
index 000000000..9582870ea
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod/mod-spark.json
@@ -0,0 +1,78 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "number_test2",
+ "source": "spark:csv:number_test2.csv",
+ "structure": "number_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "mod_str",
+ "source": "spark:csv:mod.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "mod_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "number_test2_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod_1/mod_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod_1/mod_1-spark.json
new file mode 100644
index 000000000..322bb6420
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod_1/mod_1-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "mod_test",
+ "source": "spark:csv:mod_test.csv",
+ "structure": "mod_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "mod_1_str",
+ "source": "spark:csv:mod_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "mod_test_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "mod_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "integer"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod_2/mod_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod_2/mod_2-spark.json
new file mode 100644
index 000000000..7f48de3fd
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mod_2/mod_2-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "mod_test",
+ "source": "spark:csv:mod_test.csv",
+ "structure": "mod_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "mod_2_str",
+ "source": "spark:csv:mod_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "mod_test_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "mod_2_str",
+ "components": [
+ {
+ "name": "mod_1",
+ "role": "Measure"
+ },
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "integer"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "mod_1",
+ "domain": "integer"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mult/mult-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mult/mult-spark.json
new file mode 100644
index 000000000..59ad541ad
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/mult/mult-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "mult_str",
+ "source": "spark:csv:mult.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "mult_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_1/not_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_1/not_1-spark.json
new file mode 100644
index 000000000..35482e93b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_1/not_1-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "not_1_str",
+ "source": "spark:csv:not_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "not_1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_2/not_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_2/not_2-spark.json
new file mode 100644
index 000000000..46a8649d9
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_2/not_2-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "not_2_str",
+ "source": "spark:csv:not_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "not_2_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_not",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "me_not",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_equal_1/not_equal_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_equal_1/not_equal_1-spark.json
new file mode 100644
index 000000000..106206cae
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_equal_1/not_equal_1-spark.json
@@ -0,0 +1,152 @@
+{
+ "datasets": [
+ {
+ "name": "neq_1",
+ "source": "spark:csv:neq_1.csv",
+ "structure": "neq_1_str"
+ },
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "not_equal_1_str",
+ "source": "spark:csv:not_equal_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "not_equal_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "neq_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_equal_2/not_equal_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_equal_2/not_equal_2-spark.json
new file mode 100644
index 000000000..2fd05f1ab
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_equal_2/not_equal_2-spark.json
@@ -0,0 +1,130 @@
+{
+ "datasets": [
+ {
+ "name": "dataset_comparison_test2",
+ "source": "spark:csv:dataset_comparison_test2.csv",
+ "structure": "dataset_comparison_test2_str"
+ },
+ {
+ "name": "dataset_comparison_test1",
+ "source": "spark:csv:dataset_comparison_test1.csv",
+ "structure": "dataset_comparison_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "not_equal_2_str",
+ "source": "spark:csv:not_equal_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "not_equal_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "neq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "dataset_comparison_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "neq",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_xor/not_xor-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_xor/not_xor-spark.json
new file mode 100644
index 000000000..5398dc833
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/not_xor/not_xor-spark.json
@@ -0,0 +1,124 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test6",
+ "source": "spark:csv:boolean_test6.csv",
+ "structure": "boolean_test6_str"
+ },
+ {
+ "name": "expected",
+ "structure": "not_xor_str",
+ "source": "spark:csv:not_xor.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "not_xor_str",
+ "components": [
+ {
+ "name": "bool_not",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_xor",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test6_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_not",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_2",
+ "domain": "boolean"
+ },
+ {
+ "name": "bool_xor",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/notequal/notequal-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/notequal/notequal-spark.json
new file mode 100644
index 000000000..41f256c0d
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/notequal/notequal-spark.json
@@ -0,0 +1,82 @@
+{
+ "datasets": [
+ {
+ "name": "number_test4",
+ "source": "spark:csv:number_test4.csv",
+ "structure": "number_test4_str"
+ },
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "notequal_str",
+ "source": "spark:csv:notequal.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test4_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "notequal_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "bool_var",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_1/nvl_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_1/nvl_1-spark.json
new file mode 100644
index 000000000..b04a0c184
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_1/nvl_1-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "nvl_test1",
+ "source": "spark:csv:nvl_test1.csv",
+ "structure": "nvl_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "nvl_1_str",
+ "source": "spark:csv:nvl_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "nvl_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "nvl_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_2/nvl_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_2/nvl_2-spark.json
new file mode 100644
index 000000000..eb52bc4e0
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_2/nvl_2-spark.json
@@ -0,0 +1,122 @@
+{
+ "datasets": [
+ {
+ "name": "nvl_test1",
+ "source": "spark:csv:nvl_test1.csv",
+ "structure": "nvl_test1_str"
+ },
+ {
+ "name": "nvl_test2",
+ "source": "spark:csv:nvl_test2.csv",
+ "structure": "nvl_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "nvl_2_str",
+ "source": "spark:csv:nvl_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "nvl_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "nvl_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "nvl_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_3/nvl_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_3/nvl_3-spark.json
new file mode 100644
index 000000000..7aff1bba9
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/nvl_3/nvl_3-spark.json
@@ -0,0 +1,104 @@
+{
+ "datasets": [
+ {
+ "name": "nvl_test1",
+ "source": "spark:csv:nvl_test1.csv",
+ "structure": "nvl_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "nvl_3_str",
+ "source": "spark:csv:nvl_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "nvl_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "nvl_3_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "nullrepl",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "nullrepl",
+ "domain": "number"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_4",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/op_with_calculated_scalar/op_with_calculated_scalar-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/op_with_calculated_scalar/op_with_calculated_scalar-spark.json
new file mode 100644
index 000000000..9d6fe5c0b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/op_with_calculated_scalar/op_with_calculated_scalar-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "op_with_calculated_scalar_str",
+ "source": "spark:csv:op_with_calculated_scalar.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "op_with_calculated_scalar_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/or_1/or_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/or_1/or_1-spark.json
new file mode 100644
index 000000000..03e1d2dd2
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/or_1/or_1-spark.json
@@ -0,0 +1,122 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test5",
+ "source": "spark:csv:boolean_test5.csv",
+ "structure": "boolean_test5_str"
+ },
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "or_1_str",
+ "source": "spark:csv:or_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "or_1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test5_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/or_2/or_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/or_2/or_2-spark.json
new file mode 100644
index 000000000..90d3dafa4
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/or_2/or_2-spark.json
@@ -0,0 +1,112 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "or_2_str",
+ "source": "spark:csv:or_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "or_2_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "orf",
+ "role": "Measure"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "ort",
+ "role": "Measure"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "ort",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "orf",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/parentheses_1/parentheses_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/parentheses_1/parentheses_1-spark.json
new file mode 100644
index 000000000..db7aac5b8
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/parentheses_1/parentheses_1-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "gen_operators_test1",
+ "source": "spark:csv:gen_operators_test1.csv",
+ "structure": "gen_operators_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "parentheses_1_str",
+ "source": "spark:csv:parentheses_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "gen_operators_test1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "parentheses_1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/parentheses_2/parentheses_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/parentheses_2/parentheses_2-spark.json
new file mode 100644
index 000000000..abe2ee1e1
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/parentheses_2/parentheses_2-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "gen_operators_test1",
+ "source": "spark:csv:gen_operators_test1.csv",
+ "structure": "gen_operators_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "parentheses_2_str",
+ "source": "spark:csv:parentheses_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "gen_operators_test1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "parentheses_2_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "integer"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_location_1/pattern_location_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_location_1/pattern_location_1-spark.json
new file mode 100644
index 000000000..e431df57d
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_location_1/pattern_location_1-spark.json
@@ -0,0 +1,84 @@
+{
+ "datasets": [
+ {
+ "name": "pattern_test",
+ "source": "spark:csv:pattern_test.csv",
+ "structure": "pattern_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "pattern_location_1_str",
+ "source": "spark:csv:pattern_location_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "pattern_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "pattern_location_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "integer_var",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "integer_var",
+ "domain": "integer"
+ },
+ {
+ "name": "id_3",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_location_2/pattern_location_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_location_2/pattern_location_2-spark.json
new file mode 100644
index 000000000..98440fc19
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_location_2/pattern_location_2-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "pattern_test",
+ "source": "spark:csv:pattern_test.csv",
+ "structure": "pattern_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "pattern_location_2_str",
+ "source": "spark:csv:pattern_location_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "pattern_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "pattern_location_2_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "a_location",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "a_location",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_1/pattern_replacement_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_1/pattern_replacement_1-spark.json
new file mode 100644
index 000000000..4ab2adc36
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_1/pattern_replacement_1-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "substring_test",
+ "source": "spark:csv:substring_test.csv",
+ "structure": "substring_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "pattern_replacement_1_str",
+ "source": "spark:csv:pattern_replacement_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "substring_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "pattern_replacement_1_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2-spark.json
new file mode 100644
index 000000000..07917691a
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "substring_test",
+ "source": "spark:csv:substring_test.csv",
+ "structure": "substring_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "pattern_replacement_2_str",
+ "source": "spark:csv:pattern_replacement_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "substring_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "pattern_replacement_2_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2.csv
index 05bf6821c..925f079f7 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/pattern_replacement_2.csv
@@ -1,9 +1,9 @@
id_1,id_2,text_1
-2001-12-14,B,"""-L-o-r-e-m- -i-p-s-u-m- -d-o-l-o-r- -s-i-t- -a-m-e-t-,- -c-o-n-s-e-c-t-e-t-u-r- -a-d-i-p-i-s-c-i-n-g- -e-l-i-t-.- -P-h-a-s-e-l-l-u-s- -a- -v-u-l-p-u-t-a-t-e- -u-r-n-a-.- -I-n- -f-e-r-m-e-n-t-u-m- -d-u-i- -e-g-e-t- -n-i-s-i- -p-l-a-c-e-r-a-t-,- -e-t-.-"""
-2001-12-15,B,"""-N-u-l-l-a-m- -h-e-n-d-r-e-r-i-t- -m-o-l-e-s-t-i-e- -c-o-n-g-u-e-.- -U-t- -l-o-r-e-m- -l-o-r-e-m-,- -s-u-s-c-i-p-i-t- -q-u-i-s- -f-r-i-n-g-i-l-l-a- -e-t-,- -t-e-m-p-u-s- -r-u-t-r-u-m- -e-x-.- -E-t-i-a-m- -s-c-e-l-e-r-i-s-q-u-e- -d-i-a-m- -u-t- -s-a-p-i-e-n-.-"""
-2001-12-14,A,"""-D-o-n-e-c- -v-e-n-e-n-a-t-i-s- -c-o-n-d-i-m-e-n-t-u-m- -j-u-s-t-o-,- -n-o-n- -i-a-c-u-l-i-s- -e-r-a-t- -f-i-n-i-b-u-s- -q-u-i-s-.- -A-l-i-q-u-a-m- -e-u-i-s-m-o-d-,- -l-a-c-u-s- -e-g-e-t- -l-a-c-i-n-i-a- -v-e-h-i-c-u-l-a-,- -n-u-l-l-a- -d-o-l-o-r- -d-a-p-i-b-u-s- -e-n-i-m-.-"""
-2001-12-15,A,"""-N-u-n-c- -m-o-l-l-i-s- -v-i-t-a-e- -n-i-s-i- -v-a-r-i-u-s- -t-i-n-c-i-d-u-n-t-.- -V-i-v-a-m-u-s- -u-t- -v-e-l-i-t- -l-a-c-u-s-.- -M-a-u-r-i-s- -e-s-t- -u-r-n-a-,- -v-o-l-u-t-p-a-t- -a- -t-i-n-c-i-d-u-n-t- -s-e-d-,- -c-o-n-g-u-e- -u-t-.-"""
-2001-12-14,D,"""-"""
-2001-12-15,D,"""-V-i-v-a-m-u-s- -d-u-i- -a-r-c-u-,- -b-i-b-e-n-d-u-m- -n-o-n- -m-a-u-r-i-s- -n-e-c-,- -v-e-n-e-n-a-t-i-s- -e-g-e-s-t-a-s- -l-i-b-e-r-o-.- -P-r-o-i-n- -u-l-t-r-i-c-e-s- -l-e-c-t-u-s- -m-o-l-e-s-t-i-e- -p-u-r-u-s- -g-r-a-v-i-d-a-,- -e-t- -b-i-b-e-n-d-u-m- -a-r-c-u-.-"""
-2001-12-14,G,"""-A-l-i-q-u-a-m- -c-u-r-s-u-s-,- -t-e-l-l-u-s- -u-t- -p-o-r-t-a- -i-n-t-e-r-d-u-m-,- -m-i- -l-a-c-u-s- -l-u-c-t-u-s- -l-o-r-e-m-,- -e-g-e-t- -c-o-n-g-u-e- -n-e-q-u-e- -l-e-o- -e-t- -a-n-t-e-.- -I-n- -c-o-m-m-o-d-o- -p-r-e-t-i-u-m-.-"""
-2001-12-15,G,"""-P-r-a-e-s-e-n-t- -v-e-l- -a-n-t-e- -a- -s-e-m- -e-l-e-i-f-e-n-d- -e-g-e-s-t-a-s-.- -"""
+2001-12-14,B,"-L-o-r-e-m- -i-p-s-u-m- -d-o-l-o-r- -s-i-t- -a-m-e-t-,- -c-o-n-s-e-c-t-e-t-u-r- -a-d-i-p-i-s-c-i-n-g- -e-l-i-t-.- -P-h-a-s-e-l-l-u-s- -a- -v-u-l-p-u-t-a-t-e- -u-r-n-a-.- -I-n- -f-e-r-m-e-n-t-u-m- -d-u-i- -e-g-e-t- -n-i-s-i- -p-l-a-c-e-r-a-t-,- -e-t-.-"
+2001-12-15,B,"-N-u-l-l-a-m- -h-e-n-d-r-e-r-i-t- -m-o-l-e-s-t-i-e- -c-o-n-g-u-e-.- -U-t- -l-o-r-e-m- -l-o-r-e-m-,- -s-u-s-c-i-p-i-t- -q-u-i-s- -f-r-i-n-g-i-l-l-a- -e-t-,- -t-e-m-p-u-s- -r-u-t-r-u-m- -e-x-.- -E-t-i-a-m- -s-c-e-l-e-r-i-s-q-u-e- -d-i-a-m- -u-t- -s-a-p-i-e-n-.-"
+2001-12-14,A,"-D-o-n-e-c- -v-e-n-e-n-a-t-i-s- -c-o-n-d-i-m-e-n-t-u-m- -j-u-s-t-o-,- -n-o-n- -i-a-c-u-l-i-s- -e-r-a-t- -f-i-n-i-b-u-s- -q-u-i-s-.- -A-l-i-q-u-a-m- -e-u-i-s-m-o-d-,- -l-a-c-u-s- -e-g-e-t- -l-a-c-i-n-i-a- -v-e-h-i-c-u-l-a-,- -n-u-l-l-a- -d-o-l-o-r- -d-a-p-i-b-u-s- -e-n-i-m-.-"
+2001-12-15,A,"-N-u-n-c- -m-o-l-l-i-s- -v-i-t-a-e- -n-i-s-i- -v-a-r-i-u-s- -t-i-n-c-i-d-u-n-t-.- -V-i-v-a-m-u-s- -u-t- -v-e-l-i-t- -l-a-c-u-s-.- -M-a-u-r-i-s- -e-s-t- -u-r-n-a-,- -v-o-l-u-t-p-a-t- -a- -t-i-n-c-i-d-u-n-t- -s-e-d-,- -c-o-n-g-u-e- -u-t-.-"
+2001-12-14,D,
+2001-12-15,D,"-V-i-v-a-m-u-s- -d-u-i- -a-r-c-u-,- -b-i-b-e-n-d-u-m- -n-o-n- -m-a-u-r-i-s- -n-e-c-,- -v-e-n-e-n-a-t-i-s- -e-g-e-s-t-a-s- -l-i-b-e-r-o-.- -P-r-o-i-n- -u-l-t-r-i-c-e-s- -l-e-c-t-u-s- -m-o-l-e-s-t-i-e- -p-u-r-u-s- -g-r-a-v-i-d-a-,- -e-t- -b-i-b-e-n-d-u-m- -a-r-c-u-.-"
+2001-12-14,G,"-A-l-i-q-u-a-m- -c-u-r-s-u-s-,- -t-e-l-l-u-s- -u-t- -p-o-r-t-a- -i-n-t-e-r-d-u-m-,- -m-i- -l-a-c-u-s- -l-u-c-t-u-s- -l-o-r-e-m-,- -e-g-e-t- -c-o-n-g-u-e- -n-e-q-u-e- -l-e-o- -e-t- -a-n-t-e-.- -I-n- -c-o-m-m-o-d-o- -p-r-e-t-i-u-m-.-"
+2001-12-15,G,"-P-r-a-e-s-e-n-t- -v-e-l- -a-n-t-e- -a- -s-e-m- -e-l-e-i-f-e-n-d- -e-g-e-s-t-a-s-.- -"
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/substring_test.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/substring_test.csv
index 359fb614c..bd040ff67 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/substring_test.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_2/substring_test.csv
@@ -1,9 +1,9 @@
id_1,id_2,num_1,text_1
-2001-12-14,B,2.3,"""Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus a vulputate urna. In fermentum dui eget nisi placerat, et."""
-2001-12-15,B,,"""Nullam hendrerit molestie congue. Ut lorem lorem, suscipit quis fringilla et, tempus rutrum ex. Etiam scelerisque diam ut sapien."""
-2001-12-14,A,5.443,"""Donec venenatis condimentum justo, non iaculis erat finibus quis. Aliquam euismod, lacus eget lacinia vehicula, nulla dolor dapibus enim."""
-2001-12-15,A,2,"""Nunc mollis vitae nisi varius tincidunt. Vivamus ut velit lacus. Mauris est urna, volutpat a tincidunt sed, congue ut."""
-2001-12-14,D,4,""""""
-2001-12-15,D,6,"""Vivamus dui arcu, bibendum non mauris nec, venenatis egestas libero. Proin ultrices lectus molestie purus gravida, et bibendum arcu."""
-2001-12-14,G,4,"""Aliquam cursus, tellus ut porta interdum, mi lacus luctus lorem, eget congue neque leo et ante. In commodo pretium."""
-2001-12-15,G,1.1,"""Praesent vel ante a sem eleifend egestas. """
+2001-12-14,B,2.3,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus a vulputate urna. In fermentum dui eget nisi placerat, et."
+2001-12-15,B,,"Nullam hendrerit molestie congue. Ut lorem lorem, suscipit quis fringilla et, tempus rutrum ex. Etiam scelerisque diam ut sapien."
+2001-12-14,A,5.443,"Donec venenatis condimentum justo, non iaculis erat finibus quis. Aliquam euismod, lacus eget lacinia vehicula, nulla dolor dapibus enim."
+2001-12-15,A,2,"Nunc mollis vitae nisi varius tincidunt. Vivamus ut velit lacus. Mauris est urna, volutpat a tincidunt sed, congue ut."
+2001-12-14,D,4,""
+2001-12-15,D,6,"Vivamus dui arcu, bibendum non mauris nec, venenatis egestas libero. Proin ultrices lectus molestie purus gravida, et bibendum arcu."
+2001-12-14,G,4,"Aliquam cursus, tellus ut porta interdum, mi lacus luctus lorem, eget congue neque leo et ante. In commodo pretium."
+2001-12-15,G,1.1,"Praesent vel ante a sem eleifend egestas. "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_3/pattern_replacement_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_3/pattern_replacement_3-spark.json
new file mode 100644
index 000000000..56a2ab94b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pattern_replacement_3/pattern_replacement_3-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "substring_test",
+ "source": "spark:csv:substring_test.csv",
+ "structure": "substring_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "pattern_replacement_3_str",
+ "source": "spark:csv:pattern_replacement_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "pattern_replacement_3_str",
+ "components": [
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "substring_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/plus/plus-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/plus/plus-spark.json
new file mode 100644
index 000000000..3caee9e67
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/plus/plus-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "plus_str",
+ "source": "spark:csv:plus.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "plus_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pow/pow-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pow/pow-spark.json
new file mode 100644
index 000000000..9719b2f1b
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/pow/pow-spark.json
@@ -0,0 +1,51 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "pow_str"
+ },
+ {
+ "name": "expected",
+ "structure": "pow_str",
+ "source": "spark:csv:pow.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "pow_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/power_1/power_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/power_1/power_1-spark.json
new file mode 100644
index 000000000..57a33b790
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/power_1/power_1-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:power_1_in.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "power_1_str",
+ "source": "spark:csv:power_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "power_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/power_2/power_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/power_2/power_2-spark.json
new file mode 100644
index 000000000..bc4addb05
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/power_2/power_2-spark.json
@@ -0,0 +1,80 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:power_2_in.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "power_2_str",
+ "source": "spark:csv:power_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "power_2_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "pow_1",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ },
+ {
+ "name": "pow_2",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "pow_1",
+ "domain": "integer"
+ },
+ {
+ "name": "pow_2",
+ "domain": "number"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rank_1/rank_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rank_1/rank_1-spark.json
new file mode 100644
index 000000000..9f5517c44
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rank_1/rank_1-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "rank_data",
+ "source": "spark:csv:rank.csv",
+ "structure": "rank_str"
+ },
+ {
+ "name": "expected",
+ "structure": "rank_1_str",
+ "source": "spark:csv:rank_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "rank_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "me_3",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "rank_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "me_3",
+ "domain": "integer"
+ },
+ {
+ "name": "me_2",
+ "domain": "integer"
+ },
+ {
+ "name": "me_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ratio_to_report_1/ratio_to_report_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ratio_to_report_1/ratio_to_report_1-spark.json
new file mode 100644
index 000000000..57c1796ed
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ratio_to_report_1/ratio_to_report_1-spark.json
@@ -0,0 +1,96 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ratio_to_report_1_str",
+ "source": "spark:csv:ratio_to_report_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "ratio_to_report_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ratio_to_report_2/ratio_to_report_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ratio_to_report_2/ratio_to_report_2-spark.json
new file mode 100644
index 000000000..4a273a962
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/ratio_to_report_2/ratio_to_report_2-spark.json
@@ -0,0 +1,108 @@
+{
+ "datasets": [
+ {
+ "name": "ratiotoreport",
+ "source": "spark:csv:ratiotoreport.csv",
+ "structure": "ratiotoreport_str"
+ },
+ {
+ "name": "expected",
+ "structure": "ratio_to_report_2_str",
+ "source": "spark:csv:ratio_to_report_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "ratiotoreport_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "ratio_to_report_2_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "me_3",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_3",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rename/rename-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rename/rename-spark.json
new file mode 100644
index 000000000..9f30c3a85
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rename/rename-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "rename_str",
+ "source": "spark:csv:rename.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "rename_str",
+ "components": [
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m2",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "m2",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rename_1/rename_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rename_1/rename_1-spark.json
new file mode 100644
index 000000000..789468905
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/rename_1/rename_1-spark.json
@@ -0,0 +1,284 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "rename_str",
+ "source": "spark:csv:rename_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "rename_str",
+ "components": [
+ {
+ "name": "me_4",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_3",
+ "role": "Measure"
+ },
+ {
+ "name": "me_6",
+ "role": "Measure"
+ },
+ {
+ "name": "me_5",
+ "role": "Measure"
+ },
+ {
+ "name": "me_7",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res5",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_6",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_7",
+ "domain": "string"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "me_3",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "me_4",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "me_5",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ },
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round/round-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round/round-spark.json
new file mode 100644
index 000000000..223ca07e4
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round/round-spark.json
@@ -0,0 +1,39 @@
+{
+ "datasets": [
+ {
+ "name": "number_test3",
+ "source": "spark:csv:number_test3.csv",
+ "structure": "round_str"
+ },
+ {
+ "name": "expected",
+ "structure": "round_str",
+ "source": "spark:csv:round.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "round_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round_1/round_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round_1/round_1-spark.json
new file mode 100644
index 000000000..c3b66b7a1
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round_1/round_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "round_1_str",
+ "source": "spark:csv:round_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "round_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round_2/round_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round_2/round_2-spark.json
new file mode 100644
index 000000000..56acee562
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/round_2/round_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "round_2_str",
+ "source": "spark:csv:round_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "round_2_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "round_1",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "round_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator1/self_defined_operator1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator1/self_defined_operator1-spark.json
new file mode 100644
index 000000000..3e9e2f341
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator1/self_defined_operator1-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "number_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "self_defined_operator1_str",
+ "source": "spark:csv:self_defined_operator1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "self_defined_operator1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test1_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test1.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test1.csv
index c691b32ff..f62e2e033 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test1.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test1.csv
@@ -1,9 +1,9 @@
id_1,id_2,id_3,text_1
-2012,B,Total,""" this is text"""
-2011,B,Total,"""sample """
-2012,G,Total,"""third example"""
-2011,G,Total,""" left space"""
-2012,S,Total,"""right space """
-2011,S,Total,""" """
-2012,F,Total,""" 12-12-2001 """
-2011,F,Total,"""F """
+2012,B,Total," this is text"
+2011,B,Total,"sample "
+2012,G,Total,"third example"
+2011,G,Total," left space"
+2012,S,Total,"right space "
+2011,S,Total," "
+2012,F,Total," 12-12-2001 "
+2011,F,Total,"F "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test2.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test2.csv
index b57cfd8a4..e8a415db5 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test2.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/concat_test2.csv
@@ -1,9 +1,9 @@
id_1,id_2,id_3,text_1
-2012,B,Total,"""abc def gh"""
-2011,B,Total,""" comment!!"""
-2012,G,Total,"""abc """
-2011,G,Total,""""""
+2012,B,Total,"abc def gh"
+2011,B,Total," comment!!"
+2012,G,Total,"abc "
+2011,G,Total,""
2012,S,Total,
-2011,S,Total,"""nulls included above for testing """
-2012,F,Total,"""two spaces in between"""
-2011,F,Total,"""123:) """
+2011,S,Total,"nulls included above for testing "
+2012,F,Total,"two spaces in between"
+2011,F,Total,"123:) "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2-spark.json
new file mode 100644
index 000000000..2fb0ceadd
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2-spark.json
@@ -0,0 +1,102 @@
+{
+ "datasets": [
+ {
+ "name": "concat_test2",
+ "source": "spark:csv:concat_test2.csv",
+ "structure": "concat_test2_str"
+ },
+ {
+ "name": "concat_test1",
+ "source": "spark:csv:concat_test1.csv",
+ "structure": "concat_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "self_defined_operator2_str",
+ "source": "spark:csv:self_defined_operator2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "self_defined_operator2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "concat_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "concat_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2.csv
index 5608bd879..afb2bc459 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/self_defined_operator2/self_defined_operator2.csv
@@ -3,7 +3,7 @@ id_1,id_2,id_3,text_1
2011,B,Total,"sample - comment!!"
2012,G,Total,"third example - abc "
2011,G,Total," left space - "
-2012,S,Total,
+2012,S,Total,"right space - "
2011,S,Total," - nulls included above for testing "
2012,F,Total," 12-12-2001 - two spaces in between"
2011,F,Total,"F - 123:) "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/set_difference_1/set_difference_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/set_difference_1/set_difference_1-spark.json
new file mode 100644
index 000000000..20db7c34f
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/set_difference_1/set_difference_1-spark.json
@@ -0,0 +1,146 @@
+{
+ "datasets": [
+ {
+ "name": "intersection_test1",
+ "source": "spark:csv:intersection_test1.csv",
+ "structure": "intersection_test1_str"
+ },
+ {
+ "name": "intersection_test2",
+ "source": "spark:csv:intersection_test2.csv",
+ "structure": "intersection_test2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "set_difference_1_str",
+ "source": "spark:csv:set_difference_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "set_difference_1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "intersection_test1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "intersection_test2_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "quality_status",
+ "domain": "string"
+ },
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf2",
+ "domain": "number"
+ },
+ {
+ "name": "edf3",
+ "domain": "number"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt/sqrt-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt/sqrt-spark.json
new file mode 100644
index 000000000..d9d03b88d
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt/sqrt-spark.json
@@ -0,0 +1,51 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "sqrt_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sqrt_str",
+ "source": "spark:csv:sqrt.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "sqrt_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt_1/sqrt_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt_1/sqrt_1-spark.json
new file mode 100644
index 000000000..1ff29501d
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt_1/sqrt_1-spark.json
@@ -0,0 +1,64 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sqrt_1_str",
+ "source": "spark:csv:sqrt_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "sqrt_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt_2/sqrt_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt_2/sqrt_2-spark.json
new file mode 100644
index 000000000..ee9329395
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sqrt_2/sqrt_2-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sqrt_2_str",
+ "source": "spark:csv:sqrt_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "sqrt_2_str",
+ "components": [
+ {
+ "name": "sqrt_3",
+ "role": "Measure"
+ },
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "integer"
+ },
+ {
+ "name": "sqrt_3",
+ "domain": "number"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/standard_deviation_pop/standard_deviation_pop-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/standard_deviation_pop/standard_deviation_pop-spark.json
new file mode 100644
index 000000000..fd66aaafe
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/standard_deviation_pop/standard_deviation_pop-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "median_data",
+ "source": "spark:csv:median_variance.csv",
+ "structure": "median_str"
+ },
+ {
+ "name": "expected",
+ "structure": "standard_deviation_pop_str",
+ "source": "spark:csv:standard_deviation_pop.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "median_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "standard_deviation_pop_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/standard_deviation_samp/standard_deviation_samp-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/standard_deviation_samp/standard_deviation_samp-spark.json
new file mode 100644
index 000000000..512645d89
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/standard_deviation_samp/standard_deviation_samp-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "stdev",
+ "source": "spark:csv:stdev.csv",
+ "structure": "stdev_str"
+ },
+ {
+ "name": "expected",
+ "structure": "standard_deviation_samp_str",
+ "source": "spark:csv:standard_deviation_samp.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "standard_deviation_samp_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "stdev_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/stock_to_flow_1/stock_to_flow_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/stock_to_flow_1/stock_to_flow_1-spark.json
new file mode 100644
index 000000000..d966d52dc
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/stock_to_flow_1/stock_to_flow_1-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "stock_daily_test",
+ "source": "spark:csv:stock_daily_test.csv",
+ "structure": "stock_daily_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "stock_to_flow_1_str",
+ "source": "spark:csv:stock_to_flow_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "stock_daily_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_daily",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "stock_to_flow_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_daily",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_daily",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/stock_to_flow_2/stock_to_flow_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/stock_to_flow_2/stock_to_flow_2-spark.json
new file mode 100644
index 000000000..48b756884
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/stock_to_flow_2/stock_to_flow_2-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "stock_annual_test",
+ "source": "spark:csv:stock_annual_test.csv",
+ "structure": "stock_annual_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "stock_to_flow_2_str",
+ "source": "spark:csv:stock_to_flow_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "stock_annual_test_str",
+ "components": [
+ {
+ "name": "id_annual",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "stock_to_flow_2_str",
+ "components": [
+ {
+ "name": "id_annual",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_annual",
+ "domain": "date"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_1/string_concatenation_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_1/string_concatenation_1-spark.json
new file mode 100644
index 000000000..7f276a3e2
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_1/string_concatenation_1-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_concatenation_1_str",
+ "source": "spark:csv:string_concatenation_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "string_concatenation_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_3",
+ "role": "Measure"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "number"
+ },
+ {
+ "name": "text_3",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2-spark.json
new file mode 100644
index 000000000..462594841
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_concatenation_2_str",
+ "source": "spark:csv:string_concatenation_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "string_concatenation_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_3",
+ "role": "Measure"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_3",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2.csv
index 9e774671a..a49cd42f5 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_2/string_concatenation_2.csv
@@ -2,8 +2,8 @@ id_1,id_2,id_3,text_1,text_2,text_3
2012,B,Total," this is text","ABC def gh"," this is textABC def gh"
2011,B,Total,"sample "," comment!!","sample comment!!",
2012,G,Total,"third example","abc ","third exampleabc "
-2011,G,Total," left space",,
-2012,S,Total,"right space ",,
+2011,G,Total," left space",," left space"
+2012,S,Total,"right space ",,"right space "
2011,S,Total," ","NULLS included above for testing "," NULLS included above for testing "
2012,F,Total," 12-12-2001 ","two spaces in between"," 12-12-2001 two spaces in between"
2011,F,Total,"F ","123:) Aa ","F 123:) Aa "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test1.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test1.csv
index c691b32ff..f62e2e033 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test1.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test1.csv
@@ -1,9 +1,9 @@
id_1,id_2,id_3,text_1
-2012,B,Total,""" this is text"""
-2011,B,Total,"""sample """
-2012,G,Total,"""third example"""
-2011,G,Total,""" left space"""
-2012,S,Total,"""right space """
-2011,S,Total,""" """
-2012,F,Total,""" 12-12-2001 """
-2011,F,Total,"""F """
+2012,B,Total," this is text"
+2011,B,Total,"sample "
+2012,G,Total,"third example"
+2011,G,Total," left space"
+2012,S,Total,"right space "
+2011,S,Total," "
+2012,F,Total," 12-12-2001 "
+2011,F,Total,"F "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test2.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test2.csv
index b57cfd8a4..384240a00 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test2.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/concat_test2.csv
@@ -1,9 +1,9 @@
id_1,id_2,id_3,text_1
-2012,B,Total,"""abc def gh"""
-2011,B,Total,""" comment!!"""
-2012,G,Total,"""abc """
-2011,G,Total,""""""
+2012,B,Total,"abc def gh"
+2011,B,Total," comment!!"
+2012,G,Total,"abc "
+2011,G,Total,
2012,S,Total,
-2011,S,Total,"""nulls included above for testing """
-2012,F,Total,"""two spaces in between"""
-2011,F,Total,"""123:) """
+2011,S,Total,"nulls included above for testing "
+2012,F,Total,"two spaces in between"
+2011,F,Total,"123:) "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3-spark.json
new file mode 100644
index 000000000..7e7dca07f
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3-spark.json
@@ -0,0 +1,102 @@
+{
+ "datasets": [
+ {
+ "name": "concat_test2",
+ "source": "spark:csv:concat_test2.csv",
+ "structure": "concat_test2_str"
+ },
+ {
+ "name": "concat_test1",
+ "source": "spark:csv:concat_test1.csv",
+ "structure": "concat_test1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_concatenation_3_str",
+ "source": "spark:csv:string_concatenation_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "string_concatenation_3_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "concat_test2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "concat_test1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3.csv b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3.csv
index 5608bd879..afb2bc459 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3.csv
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_concatenation_3/string_concatenation_3.csv
@@ -3,7 +3,7 @@ id_1,id_2,id_3,text_1
2011,B,Total,"sample - comment!!"
2012,G,Total,"third example - abc "
2011,G,Total," left space - "
-2012,S,Total,
+2012,S,Total,"right space - "
2011,S,Total," - nulls included above for testing "
2012,F,Total," 12-12-2001 - two spaces in between"
2011,F,Total,"F - 123:) "
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_1/string_trim_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_1/string_trim_1-spark.json
new file mode 100644
index 000000000..6774356a5
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_1/string_trim_1-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_trim_1_str",
+ "source": "spark:csv:string_trim_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "string_trim_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_2/string_trim_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_2/string_trim_2-spark.json
new file mode 100644
index 000000000..ccb6bc78c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_2/string_trim_2-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_trim_2_str",
+ "source": "spark:csv:string_trim_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "string_trim_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_3/string_trim_3-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_3/string_trim_3-spark.json
new file mode 100644
index 000000000..7a9e608b9
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_3/string_trim_3-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_trim_3_str",
+ "source": "spark:csv:string_trim_3.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "string_trim_3_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_4/string_trim_4-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_4/string_trim_4-spark.json
new file mode 100644
index 000000000..99d8c45db
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/string_trim_4/string_trim_4-spark.json
@@ -0,0 +1,104 @@
+{
+ "datasets": [
+ {
+ "name": "trim_test",
+ "source": "spark:csv:trim_test.csv",
+ "structure": "trim_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "string_trim_4_str",
+ "source": "spark:csv:string_trim_4.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "trim_test_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "string_trim_4_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_3",
+ "role": "Measure"
+ },
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "text_4",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "integer"
+ },
+ {
+ "name": "text_3",
+ "domain": "string"
+ },
+ {
+ "name": "text_4",
+ "domain": "string"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sub/sub-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sub/sub-spark.json
new file mode 100644
index 000000000..99653d658
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sub/sub-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test5",
+ "source": "spark:csv:number_test5.csv",
+ "structure": "number_test5_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sub_str",
+ "source": "spark:csv:sub.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test5_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "sub_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sub_1/sub_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sub_1/sub_1-spark.json
new file mode 100644
index 000000000..167ed2842
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sub_1/sub_1-spark.json
@@ -0,0 +1,248 @@
+{
+ "datasets": [
+ {
+ "name": "ecbexrusd_vtl",
+ "source": "spark:csv:ecbexrusd_vtl.csv",
+ "structure": "ecbexrusd_vtl_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sub_str",
+ "source": "spark:csv:sub_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "sub_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "ecbexrusd_vtl_str",
+ "components": [
+ {
+ "name": "exr_suffix",
+ "role": "Measure"
+ },
+ {
+ "name": "time_format",
+ "role": "Attribute"
+ },
+ {
+ "name": "freq",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id",
+ "role": "Attribute"
+ },
+ {
+ "name": "title",
+ "role": "Attribute"
+ },
+ {
+ "name": "unit_mult",
+ "role": "Attribute"
+ },
+ {
+ "name": "year",
+ "role": "Identifier"
+ },
+ {
+ "name": "unit",
+ "role": "Attribute"
+ },
+ {
+ "name": "currency",
+ "role": "Measure"
+ },
+ {
+ "name": "currency_denom",
+ "role": "Measure"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "source_agency",
+ "role": "Attribute"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "exr_type",
+ "role": "Measure"
+ },
+ {
+ "name": "decimals",
+ "role": "Attribute"
+ },
+ {
+ "name": "collection",
+ "role": "Attribute"
+ },
+ {
+ "name": "obs_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "unit",
+ "domain": "string"
+ },
+ {
+ "name": "decimals",
+ "domain": "string"
+ },
+ {
+ "name": "currency_denom",
+ "domain": "string"
+ },
+ {
+ "name": "source_agency",
+ "domain": "string"
+ },
+ {
+ "name": "exr_suffix",
+ "domain": "string"
+ },
+ {
+ "name": "collection",
+ "domain": "string"
+ },
+ {
+ "name": "title",
+ "domain": "string"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "freq",
+ "domain": "string"
+ },
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id",
+ "domain": "string"
+ },
+ {
+ "name": "exr_type",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "time_format",
+ "domain": "string"
+ },
+ {
+ "name": "obs_status",
+ "domain": "string"
+ },
+ {
+ "name": "year",
+ "domain": "number"
+ },
+ {
+ "name": "unit_mult",
+ "domain": "string"
+ },
+ {
+ "name": "currency",
+ "domain": "string"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/substring_extraction_1/substring_extraction_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/substring_extraction_1/substring_extraction_1-spark.json
new file mode 100644
index 000000000..606351905
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/substring_extraction_1/substring_extraction_1-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "substring_test",
+ "source": "spark:csv:substring_test.csv",
+ "structure": "substring_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "substring_extraction_1_str",
+ "source": "spark:csv:substring_extraction_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "substring_extraction_1_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "substring_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/substring_extraction_2/substring_extraction_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/substring_extraction_2/substring_extraction_2-spark.json
new file mode 100644
index 000000000..7fb2f216c
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/substring_extraction_2/substring_extraction_2-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "substring_test",
+ "source": "spark:csv:substring_test.csv",
+ "structure": "substring_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "substring_extraction_2_str",
+ "source": "spark:csv:substring_extraction_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "substring_extraction_2_str",
+ "components": [
+ {
+ "name": "text_2",
+ "role": "Measure"
+ },
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "substring_test_str",
+ "components": [
+ {
+ "name": "text_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "text_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ },
+ {
+ "name": "text_2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sum/sum-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sum/sum-spark.json
new file mode 100644
index 000000000..ccf761505
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sum/sum-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "number_test5",
+ "source": "spark:csv:number_test5.csv",
+ "structure": "number_test5_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sum_str",
+ "source": "spark:csv:sum.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test5_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ },
+ {
+ "name": "sum_str",
+ "components": [
+ {
+ "name": "id2",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "m2",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ },
+ {
+ "name": "id2",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sum_1/sum_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sum_1/sum_1-spark.json
new file mode 100644
index 000000000..7f756ea70
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/sum_1/sum_1-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "median_data",
+ "source": "spark:csv:median_variance.csv",
+ "structure": "median_str"
+ },
+ {
+ "name": "expected",
+ "structure": "sum_str",
+ "source": "spark:csv:sum_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "median_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "sum_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/symmetric_difference_1/symmetric_difference_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/symmetric_difference_1/symmetric_difference_1-spark.json
new file mode 100644
index 000000000..0f5b8b458
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/symmetric_difference_1/symmetric_difference_1-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "intersection_test1",
+ "source": "spark:csv:intersection_test1.csv",
+ "structure": "symmetric_difference_1_str"
+ },
+ {
+ "name": "intersection_test2",
+ "source": "spark:csv:intersection_test2.csv",
+ "structure": "symmetric_difference_1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "symmetric_difference_1_str",
+ "source": "spark:csv:symmetric_difference_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "symmetric_difference_1_str",
+ "components": [
+ {
+ "name": "edfdate",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf2",
+ "role": "Measure"
+ },
+ {
+ "name": "mkmvid",
+ "role": "Identifier"
+ },
+ {
+ "name": "edf1",
+ "role": "Measure"
+ },
+ {
+ "name": "edf3",
+ "role": "Measure"
+ },
+ {
+ "name": "quality_status",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "quality_status",
+ "domain": "string"
+ },
+ {
+ "name": "edfdate",
+ "domain": "date"
+ },
+ {
+ "name": "edf2",
+ "domain": "number"
+ },
+ {
+ "name": "edf3",
+ "domain": "number"
+ },
+ {
+ "name": "edf1",
+ "domain": "number"
+ },
+ {
+ "name": "mkmvid",
+ "domain": "string"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/timeshift_1/timeshift_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/timeshift_1/timeshift_1-spark.json
new file mode 100644
index 000000000..bac8efb74
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/timeshift_1/timeshift_1-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "stock_daily_test",
+ "source": "spark:csv:stock_daily_test.csv",
+ "structure": "stock_daily_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "timeshift_1_str",
+ "source": "spark:csv:timeshift_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "stock_daily_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_daily",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "timeshift_1_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_daily",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_daily",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/timeshift_2/timeshift_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/timeshift_2/timeshift_2-spark.json
new file mode 100644
index 000000000..9992d69e4
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/timeshift_2/timeshift_2-spark.json
@@ -0,0 +1,92 @@
+{
+ "datasets": [
+ {
+ "name": "stock_daily_test",
+ "source": "spark:csv:stock_daily_test.csv",
+ "structure": "stock_daily_test_str"
+ },
+ {
+ "name": "expected",
+ "structure": "timeshift_2_str",
+ "source": "spark:csv:timeshift_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "stock_daily_test_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_daily",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "timeshift_2_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_daily",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "res4",
+ "domain": "boolean"
+ },
+ {
+ "name": "res3",
+ "domain": "boolean"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "id_daily",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/trunc_1/trunc_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/trunc_1/trunc_1-spark.json
new file mode 100644
index 000000000..6fb15a800
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/trunc_1/trunc_1-spark.json
@@ -0,0 +1,72 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "trunc_1_str",
+ "source": "spark:csv:trunc_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "trunc_1_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/trunc_2/trunc_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/trunc_2/trunc_2-spark.json
new file mode 100644
index 000000000..6ab889048
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/trunc_2/trunc_2-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "number_test7",
+ "source": "spark:csv:number_test7.csv",
+ "structure": "number_test7_str"
+ },
+ {
+ "name": "expected",
+ "structure": "trunc_2_str",
+ "source": "spark:csv:trunc_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "number_test7_str",
+ "components": [
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "trunc_2_str",
+ "components": [
+ {
+ "name": "trun",
+ "role": "Measure"
+ },
+ {
+ "name": "roun",
+ "role": "Measure"
+ },
+ {
+ "name": "time_period",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "time_period",
+ "domain": "number"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "roun",
+ "domain": "number"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ },
+ {
+ "name": "trun",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/uminus/uminus-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/uminus/uminus-spark.json
new file mode 100644
index 000000000..29f5485fd
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/uminus/uminus-spark.json
@@ -0,0 +1,51 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "uminus_str"
+ },
+ {
+ "name": "expected",
+ "structure": "uminus_str",
+ "source": "spark:csv:uminus.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "uminus_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/union_1/union_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/union_1/union_1-spark.json
new file mode 100644
index 000000000..73628e5c2
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/union_1/union_1-spark.json
@@ -0,0 +1,110 @@
+{
+ "datasets": [
+ {
+ "name": "union_test_2",
+ "source": "spark:csv:union_test_2.csv",
+ "structure": "union_test_2_str"
+ },
+ {
+ "name": "union_test_1",
+ "source": "spark:csv:union_test_1.csv",
+ "structure": "union_test_1_str"
+ },
+ {
+ "name": "expected",
+ "structure": "union_1_str",
+ "source": "spark:csv:union_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "union_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "union_test_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "union_test_1_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "num_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/union_2/union_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/union_2/union_2-spark.json
new file mode 100644
index 000000000..649558406
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/union_2/union_2-spark.json
@@ -0,0 +1,76 @@
+{
+ "datasets": [
+ {
+ "name": "union_test_2",
+ "source": "spark:csv:union_test_2.csv",
+ "structure": "union_test_2_str"
+ },
+ {
+ "name": "expected",
+ "structure": "union_2_str",
+ "source": "spark:csv:union_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "union_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "union_test_2_str",
+ "components": [
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "num_2",
+ "role": "Measure"
+ },
+ {
+ "name": "num_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "date"
+ },
+ {
+ "name": "num_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "num_1",
+ "domain": "integer"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/uplus/uplus-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/uplus/uplus-spark.json
new file mode 100644
index 000000000..69cf0da57
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/uplus/uplus-spark.json
@@ -0,0 +1,51 @@
+{
+ "datasets": [
+ {
+ "name": "number_test1",
+ "source": "spark:csv:number_test1.csv",
+ "structure": "uplus_str"
+ },
+ {
+ "name": "expected",
+ "structure": "uplus_str",
+ "source": "spark:csv:uplus.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "uplus_str",
+ "components": [
+ {
+ "name": "id1",
+ "role": "Identifier"
+ },
+ {
+ "name": "m1",
+ "role": "Measure"
+ },
+ {
+ "name": "att1",
+ "role": "Attribute"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "m1",
+ "domain": "number"
+ },
+ {
+ "name": "id1",
+ "domain": "string"
+ },
+ {
+ "name": "att1",
+ "domain": "string"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/var_pop/var_pop-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/var_pop/var_pop-spark.json
new file mode 100644
index 000000000..8bdfccb55
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/var_pop/var_pop-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "median_data",
+ "source": "spark:csv:median_variance.csv",
+ "structure": "median_str"
+ },
+ {
+ "name": "expected",
+ "structure": "var_pop_str",
+ "source": "spark:csv:var_pop.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "median_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "var_pop_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/var_samp/var_samp-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/var_samp/var_samp-spark.json
new file mode 100644
index 000000000..7dc9bffb6
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/var_samp/var_samp-spark.json
@@ -0,0 +1,88 @@
+{
+ "datasets": [
+ {
+ "name": "median_data",
+ "source": "spark:csv:median_variance.csv",
+ "structure": "median_str"
+ },
+ {
+ "name": "expected",
+ "structure": "var_samp_str",
+ "source": "spark:csv:var_samp.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "median_str",
+ "components": [
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ },
+ {
+ "name": "var_samp_str",
+ "components": [
+ {
+ "name": "me_2",
+ "role": "Measure"
+ },
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_2",
+ "domain": "string"
+ },
+ {
+ "name": "res2",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_3",
+ "domain": "date"
+ },
+ {
+ "name": "res1",
+ "domain": "boolean"
+ },
+ {
+ "name": "me_2",
+ "domain": "number"
+ },
+ {
+ "name": "me_1",
+ "domain": "number"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/xor_1/xor_1-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/xor_1/xor_1-spark.json
new file mode 100644
index 000000000..0bbd7bce9
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/xor_1/xor_1-spark.json
@@ -0,0 +1,122 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test5",
+ "source": "spark:csv:boolean_test5.csv",
+ "structure": "boolean_test5_str"
+ },
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "xor_1_str",
+ "source": "spark:csv:xor_1.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "xor_1_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test5_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "number"
+ },
+ {
+ "name": "id_4",
+ "domain": "number"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/xor_2/xor_2-spark.json b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/xor_2/xor_2-spark.json
new file mode 100644
index 000000000..8dab72eff
--- /dev/null
+++ b/vtl-bundles/vtl-coverage/src/test/resources/it/bancaditalia/oss/vtl/coverage/tests/xor_2/xor_2-spark.json
@@ -0,0 +1,100 @@
+{
+ "datasets": [
+ {
+ "name": "boolean_test4",
+ "source": "spark:csv:boolean_test4.csv",
+ "structure": "boolean_test4_str"
+ },
+ {
+ "name": "expected",
+ "structure": "xor_2_str",
+ "source": "spark:csv:xor_2.csv"
+ }
+ ],
+ "structures": [
+ {
+ "name": "xor_2_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "xorf",
+ "role": "Measure"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ },
+ {
+ "name": "boolean_test4_str",
+ "components": [
+ {
+ "name": "id_2",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_4",
+ "role": "Identifier"
+ },
+ {
+ "name": "me_1",
+ "role": "Measure"
+ },
+ {
+ "name": "id_3",
+ "role": "Identifier"
+ },
+ {
+ "name": "id_1",
+ "role": "Identifier"
+ }
+ ]
+ }
+ ],
+ "variables": [
+ {
+ "name": "id_1",
+ "domain": "string"
+ },
+ {
+ "name": "id_3",
+ "domain": "string"
+ },
+ {
+ "name": "me_1",
+ "domain": "boolean"
+ },
+ {
+ "name": "id_2",
+ "domain": "integer"
+ },
+ {
+ "name": "id_4",
+ "domain": "integer"
+ },
+ {
+ "name": "xorf",
+ "domain": "boolean"
+ },
+ {
+ "name": "bool_var",
+ "domain": "boolean"
+ }
+ ]
+}
diff --git a/vtl-bundles/vtl-coverage/src/test/resources/log4j2.xml b/vtl-bundles/vtl-coverage/src/test/resources/log4j2.xml
index cfee69254..95e7c39ed 100644
--- a/vtl-bundles/vtl-coverage/src/test/resources/log4j2.xml
+++ b/vtl-bundles/vtl-coverage/src/test/resources/log4j2.xml
@@ -43,8 +43,8 @@
-
-
+
+
diff --git a/vtl-bundles/vtl-jupyter/pom.xml b/vtl-bundles/vtl-jupyter/pom.xml
index be2e9351f..a0e503ed4 100644
--- a/vtl-bundles/vtl-jupyter/pom.xml
+++ b/vtl-bundles/vtl-jupyter/pom.xml
@@ -109,9 +109,9 @@
it.bancaditalia.oss.vtl
- vtl-parser
- parser-js
+ vtl-jsparser
zip
+ grammar
diff --git a/vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/MessageReplies.java b/vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/MessageReplies.java
index 4511f22a6..aa15763f2 100644
--- a/vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/MessageReplies.java
+++ b/vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/MessageReplies.java
@@ -188,7 +188,7 @@ private static void compile(MessageChannel iopub, JupyterMessage request, Jupyte
VTLSession oldSession = SESSIONS.get(sessionName);
VTLSession vtlSession = SESSIONS.compute(sessionName, (n, v) -> {
String mergedCode = v == null ? code : v.getOriginalCode() + "\n\n" + code;
- return ConfigurationManagerFactory.getInstance().createSession(mergedCode);
+ return ConfigurationManagerFactory.newManager().createSession(mergedCode);
});
Map compiled = new HashMap<>(vtlSession.compile());
diff --git a/vtl-bundles/vtl-r/vtl-editor/pom.xml b/vtl-bundles/vtl-r/vtl-editor/pom.xml
index 85fc56e71..475776a51 100644
--- a/vtl-bundles/vtl-r/vtl-editor/pom.xml
+++ b/vtl-bundles/vtl-r/vtl-editor/pom.xml
@@ -38,9 +38,9 @@
it.bancaditalia.oss.vtl
- vtl-parser
- parser-js
+ vtl-jsparser
zip
+ grammar
@@ -52,14 +52,9 @@
index.ts
package.json
- package-lock.json
tsconfig.json
test.html
-
- node_modules
- Vtl*
-
@@ -68,6 +63,7 @@
maven-dependency-plugin
+ unpack-grammar
generate-resources
unpack-dependencies
@@ -76,9 +72,7 @@
${project.build.outputDirectory}
- vtl-parser
- parser-js
- zip
+ vtl-jsparser
diff --git a/vtl-envs/vtl-spark/pom.xml b/vtl-envs/vtl-spark/pom.xml
index 279033743..bcdc821e0 100644
--- a/vtl-envs/vtl-spark/pom.xml
+++ b/vtl-envs/vtl-spark/pom.xml
@@ -53,7 +53,6 @@
org.apache.spark
spark-sql_${scala.compat.version}
provided
- true
org.slf4j
diff --git a/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/DataPointEncoder.java b/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/DataPointEncoder.java
index 1b5f7e2ac..ef35d2a62 100644
--- a/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/DataPointEncoder.java
+++ b/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/DataPointEncoder.java
@@ -45,11 +45,9 @@
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
-import it.bancaditalia.oss.vtl.impl.types.dataset.DataStructureBuilder;
import it.bancaditalia.oss.vtl.model.data.Component;
import it.bancaditalia.oss.vtl.model.data.Component.NonIdentifier;
import it.bancaditalia.oss.vtl.model.data.DataPoint;
-import it.bancaditalia.oss.vtl.model.data.DataSetMetadata;
import it.bancaditalia.oss.vtl.model.data.DataStructureComponent;
import it.bancaditalia.oss.vtl.model.data.Lineage;
import it.bancaditalia.oss.vtl.model.data.ScalarValue;
@@ -60,14 +58,12 @@ public class DataPointEncoder implements Serializable
{
private static final long serialVersionUID = 1L;
public final DataStructureComponent, ?, ?>[] components;
- public final DataSetMetadata structure;
public final StructType schema;
public final Encoder rowEncoder;
public final Encoder rowEncoderNoLineage;
- public DataPointEncoder(Set extends DataStructureComponent, ?, ?>> dataStructure)
+ public DataPointEncoder(Set extends DataStructureComponent, ?, ?>> structure)
{
- structure = dataStructure instanceof DataSetMetadata ? (DataSetMetadata) dataStructure : new DataStructureBuilder(dataStructure).build();
components = structure.toArray(new DataStructureComponent, ?, ?>[structure.size()]);
Arrays.sort(components, DataStructureComponent::byNameAndRole);
List fields = new ArrayList<>(createStructFromComponents(components));
@@ -103,7 +99,7 @@ public DataPointImpl decode(Row row, int start)
{
ScalarValue, ?, ?, ?>[] vals = new ScalarValue, ?, ?, ?>[components.length];
for (int i = 0; i < components.length; i++)
- vals[i] = getScalarFor(components[i], row.get(i + start));
+ vals[i] = getScalarFor(components[i], (Serializable) row.get(i + start));
Object lineage = row.get(components.length + start);
if (lineage instanceof byte[])
@@ -131,11 +127,6 @@ public Encoder getRowEncoderNoLineage()
{
return rowEncoderNoLineage;
}
-
- public DataSetMetadata getStructure()
- {
- return structure;
- }
public static class DataPointImpl extends AbstractMap, ScalarValue, ?, ?, ?>> implements DataPoint, Serializable
{
diff --git a/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/SparkDataSet.java b/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/SparkDataSet.java
index aa01cbc03..86a316a41 100644
--- a/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/SparkDataSet.java
+++ b/vtl-envs/vtl-spark/src/main/java/it/bancaditalia/oss/vtl/impl/environment/spark/SparkDataSet.java
@@ -29,13 +29,18 @@
import static it.bancaditalia.oss.vtl.impl.environment.spark.SparkUtils.getNamesFromComponents;
import static it.bancaditalia.oss.vtl.impl.environment.spark.SparkUtils.getScalarFor;
import static it.bancaditalia.oss.vtl.impl.types.dataset.DataPointBuilder.toDataPoint;
+import static it.bancaditalia.oss.vtl.impl.types.domain.Domains.NULLDS;
import static it.bancaditalia.oss.vtl.model.transform.analytic.LimitCriterion.LimitDirection.PRECEDING;
import static it.bancaditalia.oss.vtl.model.transform.analytic.SortCriterion.SortingMethod.ASC;
import static it.bancaditalia.oss.vtl.model.transform.analytic.WindowCriterion.LimitType.RANGE;
import static it.bancaditalia.oss.vtl.util.SerCollectors.collectingAndThen;
+import static it.bancaditalia.oss.vtl.util.SerCollectors.mapping;
import static it.bancaditalia.oss.vtl.util.SerCollectors.toArray;
+import static it.bancaditalia.oss.vtl.util.SerCollectors.toConcurrentMap;
import static it.bancaditalia.oss.vtl.util.SerCollectors.toList;
import static it.bancaditalia.oss.vtl.util.SerCollectors.toMapWithValues;
+import static it.bancaditalia.oss.vtl.util.SerUnaryOperator.identity;
+import static java.lang.Boolean.TRUE;
import static java.util.Collections.emptyMap;
import static java.util.Spliterator.ORDERED;
import static java.util.Spliterators.spliteratorUnknownSize;
@@ -48,7 +53,6 @@
import static org.apache.spark.sql.functions.udaf;
import static org.apache.spark.sql.functions.udf;
import static org.apache.spark.sql.types.DataTypes.createArrayType;
-import static scala.collection.JavaConverters.asJava;
import static scala.collection.JavaConverters.asScala;
import java.io.Serializable;
@@ -56,13 +60,17 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Set;
+import java.util.SortedMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@@ -88,24 +96,22 @@
import org.apache.spark.sql.expressions.Window;
import org.apache.spark.sql.expressions.Window$;
import org.apache.spark.sql.expressions.WindowSpec;
+import org.apache.spark.sql.types.ArrayType;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.io.Input;
-
import it.bancaditalia.oss.vtl.exceptions.VTLInvariantIdentifiersException;
import it.bancaditalia.oss.vtl.impl.environment.spark.DataPointEncoder.DataPointImpl;
+import it.bancaditalia.oss.vtl.impl.types.data.NullValue;
import it.bancaditalia.oss.vtl.impl.types.dataset.AbstractDataSet;
import it.bancaditalia.oss.vtl.impl.types.dataset.DataPointBuilder;
import it.bancaditalia.oss.vtl.impl.types.dataset.DataStructureBuilder;
import it.bancaditalia.oss.vtl.impl.types.lineage.LineageExternal;
import it.bancaditalia.oss.vtl.impl.types.lineage.LineageNode;
import it.bancaditalia.oss.vtl.model.data.Component.Identifier;
-import it.bancaditalia.oss.vtl.model.data.Component.NonIdentifier;
import it.bancaditalia.oss.vtl.model.data.DataPoint;
import it.bancaditalia.oss.vtl.model.data.DataSet;
import it.bancaditalia.oss.vtl.model.data.DataSetMetadata;
@@ -113,6 +119,7 @@
import it.bancaditalia.oss.vtl.model.data.Lineage;
import it.bancaditalia.oss.vtl.model.data.ScalarValue;
import it.bancaditalia.oss.vtl.model.data.Variable;
+import it.bancaditalia.oss.vtl.model.domain.ValueDomainSubset;
import it.bancaditalia.oss.vtl.model.transform.analytic.LimitCriterion;
import it.bancaditalia.oss.vtl.model.transform.analytic.WindowClause;
import it.bancaditalia.oss.vtl.util.SerBiFunction;
@@ -123,8 +130,6 @@
import it.bancaditalia.oss.vtl.util.SerPredicate;
import it.bancaditalia.oss.vtl.util.SerUnaryOperator;
import it.bancaditalia.oss.vtl.util.Utils;
-import scala.collection.immutable.Seq;
-import scala.collection.immutable.SeqOps;
public class SparkDataSet extends AbstractDataSet
{
@@ -135,11 +140,11 @@ public class SparkDataSet extends AbstractDataSet
private final DataPointEncoder encoder;
private final Dataset dataFrame;
- public SparkDataSet(SparkSession session, DataPointEncoder encoder, Dataset dataFrame)
+ public SparkDataSet(SparkSession session, DataSetMetadata structure, DataPointEncoder encoder, Dataset dataFrame)
{
- super(encoder.getStructure());
+ super(structure);
- for (DataStructureComponent, ?, ?> component: encoder.getStructure())
+ for (DataStructureComponent, ?, ?> component: encoder.components)
{
String name = component.getVariable().getName();
dataFrame = dataFrame.withColumn(name, dataFrame.col(name), getMetadataFor(component));
@@ -153,9 +158,9 @@ public SparkDataSet(SparkSession session, DataPointEncoder encoder, Dataset
logInfo(toString());
}
- public SparkDataSet(SparkSession session, DataSetMetadata dataStructure, Dataset dataFrame)
+ public SparkDataSet(SparkSession session, DataSetMetadata structure, Dataset dataFrame)
{
- this(session, new DataPointEncoder(dataStructure), dataFrame);
+ this(session, structure, new DataPointEncoder(structure), dataFrame);
}
public SparkDataSet(SparkSession session, DataSetMetadata dataStructure, DataSet toWrap)
@@ -187,14 +192,16 @@ public Dataset getDataFrame()
@Override
public DataSet membership(String alias)
{
- final DataSetMetadata membershipStructure = getMetadata().membership(alias);
+ DataSetMetadata membershipStructure = getMetadata().membership(alias);
LOGGER.debug("Creating dataset by membership on {} from {} to {}", alias, getMetadata(), membershipStructure);
- DataStructureComponent extends NonIdentifier, ?, ?> membershipMeasure = membershipStructure.getMeasures().iterator().next();
-
Dataset newDF = dataFrame;
- if (!getMetadata().contains(membershipMeasure))
- newDF = dataFrame.withColumnRenamed(alias, membershipMeasure.getVariable().getName());
+ Optional> idMembership = getMetadata().getComponent(alias).filter(d -> d.is(Identifier.class));
+ if (idMembership.isPresent())
+ {
+ String defaultName = idMembership.get().getVariable().getDomain().getDefaultVariable().getName();
+ newDF = dataFrame.withColumn(defaultName, dataFrame.col(alias));
+ }
Column[] columns = getColumnsFromComponents(membershipStructure).toArray(new Column[membershipStructure.size()]);
@@ -247,7 +254,7 @@ public DataSet subspace(Map extends DataStructureComponent extends Identifie
newDf = newDf.withColumn("$lineage$", udf(dpLin -> LineageNode.of("sub " + keyValues, (Lineage) dpLin), LineageSparkUDT)
.apply(newDf.col("$lineage$")));
- return new SparkDataSet(session, newEncoder, newDf);
+ return new SparkDataSet(session, newMetadata, newEncoder, newDf);
}
@Override
@@ -340,7 +347,7 @@ public DataSet flatmapKeepingKeys(DataSetMetadata metadata, SerFunction super
}).iterator();
}, resultEncoder.getRowEncoder());
- return new SparkDataSet(session, resultEncoder, flattenedDf);
+ return new SparkDataSet(session, metadata, resultEncoder, flattenedDf);
}
@Override
@@ -352,16 +359,9 @@ public DataSet filteredMappedJoin(DataSetMetadata metadata, DataSet other, SerBi
.filter(other.getMetadata()::contains)
.map(DataStructureComponent::getVariable).map(Variable::getName)
.collect(toList());
-
+
Dataset leftDataframe = dataFrame.as("a");
Dataset rightDataframe = sparkOther.dataFrame.as("b");
- Column joinKeys = null;
- for (String commonID: commonIDs)
- {
- Column newCond = leftDataframe.col(commonID).equalTo(rightDataframe.col(commonID));
- joinKeys = joinKeys == null ? newCond : joinKeys.and(newCond);
- }
-
int leftSize = getMetadata().size();
// TODO: Try to execute filter with a null datapoint?
@@ -371,6 +371,13 @@ public DataSet filteredMappedJoin(DataSetMetadata metadata, DataSet other, SerBi
return predicate.test(encoder.decode(row), right);
};
+ Column joinKeys = null;
+ for (String commonID: commonIDs)
+ {
+ Column newCond = leftDataframe.col(commonID).equalTo(rightDataframe.col(commonID));
+ joinKeys = joinKeys == null ? newCond : joinKeys.and(newCond);
+ }
+
DataPointEncoder newEncoder = new DataPointEncoder(metadata);
MapPartitionsFunction sparkMerge = iterator -> new Iterator() {
@Override
@@ -388,19 +395,23 @@ public Row next()
}
};
- Dataset joined = leftDataframe.join(rightDataframe, joinKeys, leftJoin ? "left" : "inner");
+ Dataset joined;
+ if (commonIDs.isEmpty())
+ joined = leftDataframe.crossJoin(rightDataframe);
+ else
+ joined = leftDataframe.join(rightDataframe, joinKeys, leftJoin ? "left" : "inner");
+
if (!predicate.equals(DataSet.ALL))
joined = joined.filter(sparkFilter);
return new SparkDataSet(session, metadata, joined.mapPartitions(sparkMerge, newEncoder.getRowEncoder()));
}
+
@Override
- public DataSet analytic(SerFunction lineageOp,
- Map extends DataStructureComponent, ?, ?>, ? extends DataStructureComponent, ?, ?>> components,
- WindowClause clause,
- Map extends DataStructureComponent, ?, ?>, SerCollector, ?, TT>> collectors,
- Map extends DataStructureComponent, ?, ?>, SerBiFunction, Collection>>> finishers)
+ public DataSet analytic(SerFunction lineageOp, DataStructureComponent, ?, ?> sourceComp,
+ DataStructureComponent, ?, ?> destComp, WindowClause clause, SerFunction extractor,
+ SerCollector collector2, SerBiFunction>> finisher)
{
// Convert a VTL window clause to a Spark Window Specification
WindowSpec windowSpec = null;
@@ -432,90 +443,102 @@ public DataSet analytic(SerFunction lineageOp,
windowSpec = windowSpec == null ? Window.rangeBetween(inf, sup) : windowSpec.rangeBetween(inf, sup);
else
windowSpec = windowSpec == null ? Window.rowsBetween(inf, sup) : windowSpec.rowsBetween(inf, sup);
-
WindowSpec finalWindowSpec = windowSpec == null ? Window$.MODULE$.spec() : windowSpec;
+
+ SerCollector collector;
+ if (extractor == null)
+ collector = (SerCollector) collector2;
+ else
+ collector = mapping(extractor.compose(encoder::decode), collector2);
+
+ Serializable accum = (Serializable) collector.supplier().get();
+ @SuppressWarnings("unchecked")
+ Serializable tag = ((SerFunction