From e93e1e72c2a7ce7d87ba5c386aac010ed4ad091f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 22 Oct 2018 15:41:55 +0530 Subject: [PATCH 01/80] First cut for multiple Spark version support from same code base --- cluster/build.gradle | 8 + .../cluster/ExecutorInitiator.scala | 2 +- .../scala/io/snappydata/impl/LeadImpl.scala | 2 +- .../SnappyCoarseGrainedExecutorBackend.scala | 2 +- .../SnappyEmbeddedModeClusterManager.scala | 5 +- compatibility/spark-2.1.0/build.gradle | 141 +++++++ .../sql/execution/ui/SnappySQLListener.scala | 83 ++-- .../sql/internal/Spark210Internals.scala | 372 ++++++++++++++++++ .../org/apache/spark/sql/internal/plans.scala | 63 +++ compatibility/spark-2.1.1/build.gradle | 149 +++++++ .../sql/internal/Spark211Internals.scala | 37 ++ compatibility/spark-2.3.2/build.gradle | 141 +++++++ .../execution/ui/SnappySQLAppListener.scala | 70 ++++ .../sql/internal/Spark232Internals.scala | 293 ++++++++++++++ .../org/apache/spark/sql/internal/plans.scala | 66 ++++ .../spark/sql/hive/SnappySharedState.java | 32 +- .../main/scala/io/snappydata/Literals.scala | 122 +++--- .../main/scala/io/snappydata/functions.scala | 24 +- .../impl/SmartConnectorRDDHelper.scala | 36 +- .../io/snappydata/util/ServiceUtils.scala | 2 +- .../apache/spark/sql/SnappyBaseParser.scala | 37 +- .../org/apache/spark/sql/SnappyContext.scala | 12 +- .../apache/spark/sql/SnappyDDLParser.scala | 59 ++- .../apache/spark/sql/SnappyImplicits.scala | 11 +- .../org/apache/spark/sql/SnappyParser.scala | 242 +++++++----- .../org/apache/spark/sql/SnappySession.scala | 121 +++--- .../apache/spark/sql/SnappyStrategies.scala | 104 ++--- .../org/apache/spark/sql/SparkInternals.scala | 356 +++++++++++++++++ .../org/apache/spark/sql/SparkSupport.scala | 83 ++++ .../sql/aqp/SnappyContextFunctions.scala | 41 +- .../catalyst/expressions/ParamLiteral.scala | 27 +- .../collection/MultiColumnOpenHashSet.scala | 19 +- .../apache/spark/sql/collection/Utils.scala | 23 +- .../spark/sql/execution/EncoderScanExec.scala | 13 +- .../spark/sql/execution/ExistingPlans.scala | 14 +- .../sql/execution/NonRecursivePlans.scala | 5 +- .../sql/execution/ObjectHashMapAccessor.scala | 7 +- .../spark/sql/execution/SnappySortExec.scala | 9 +- .../spark/sql/execution/TableExec.scala | 6 +- .../aggregate/CollectAggregateExec.scala | 8 +- .../aggregate/SnappyHashAggregateExec.scala | 49 +-- .../columnar/ColumnBatchCreator.scala | 17 +- .../execution/columnar/ColumnDeleteExec.scala | 22 +- .../sql/execution/columnar/ColumnExec.scala | 6 +- .../execution/columnar/ColumnInsertExec.scala | 103 ++--- .../execution/columnar/ColumnTableScan.scala | 130 +++--- .../execution/columnar/ColumnUpdateExec.scala | 21 +- .../columnar/ExternalStoreUtils.scala | 2 +- .../columnar/JDBCAppendableRelation.scala | 6 +- .../columnar/impl/StoreCallbacksImpl.scala | 7 +- .../sql/execution/joins/HashJoinExec.scala | 41 +- .../spark/sql/execution/row/RowExec.scala | 18 +- .../sql/execution/row/RowTableScan.scala | 5 +- .../sources/StoreDataSourceStrategy.scala | 21 +- .../spark/sql/hive/ConnectorCatalog.scala | 3 +- .../sql/hive/SnappyExternalCatalog.scala | 20 +- .../sql/hive/SnappyStoreHiveCatalog.scala | 2 +- .../sql/internal/ColumnTableBulkOps.scala | 38 +- .../sql/internal/SnappySessionState.scala | 171 ++++---- .../spark/sql/policy/policyFunctions.scala | 29 +- .../spark/sql/row/JDBCMutableRelation.scala | 6 +- .../spark/sql/sources/StoreStrategy.scala | 26 +- .../apache/spark/sql/sources/subrules.scala | 4 +- .../spark/sql/store/CodeGeneration.scala | 19 +- .../main/scala/io/snappydata/Constant.scala | 17 +- settings.gradle | 9 + 66 files changed, 2695 insertions(+), 944 deletions(-) create mode 100644 compatibility/spark-2.1.0/build.gradle rename {core => compatibility/spark-2.1.0}/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala (75%) create mode 100644 compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala create mode 100644 compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala create mode 100644 compatibility/spark-2.1.1/build.gradle create mode 100644 compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala create mode 100644 compatibility/spark-2.3.2/build.gradle create mode 100644 compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala create mode 100644 compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala create mode 100644 compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/SparkInternals.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/SparkSupport.scala diff --git a/cluster/build.gradle b/cluster/build.gradle index d18f4b0478..a79c3427fc 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -85,6 +85,14 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } + compile (project(":compatibility:spark${sparkVersion}_${scalaBinaryVersion}")) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + } if (new File(rootDir, 'store/build.gradle').exists()) { testCompile project(path: ':snappy-store:snappydata-store-tools', configuration: 'testOutput') diff --git a/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala b/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala index c752a1b804..88d3c62a44 100644 --- a/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala +++ b/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala @@ -100,7 +100,7 @@ object ExecutorInitiator extends Logging { dm: InternalDistributedMember): Unit = lock.synchronized { driverURL = url driverDM = dm - SnappyContext.clearStaticArtifacts() + SnappyContext.clearStaticArtifacts(SnappyContext.globalSparkContext) lock.notifyAll() } diff --git a/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala b/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala index d35c75f4c2..e228cc0130 100644 --- a/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala +++ b/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala @@ -154,7 +154,7 @@ class LeadImpl extends ServerImpl with Lead val initServices = Future { val locator = bootProperties.getProperty(Property.Locators.name) val conf = new SparkConf(false) // system properties already in bootProperties - conf.setMaster(s"${Constant.SNAPPY_URL_PREFIX}$locator"). + conf.setMaster(s"${Constant.JDBC_URL_PREFIX}$locator"). setAppName("SnappyData"). set(Property.JobServerEnabled.name, "true"). set("spark.scheduler.mode", "FAIR"). diff --git a/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala b/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala index cbc8c2b826..ae5e850966 100644 --- a/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala +++ b/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala @@ -40,7 +40,7 @@ class SnappyCoarseGrainedExecutorBackend( executorId, hostName, cores, userClassPath, env) { override def onStop() { - SnappyContext.clearStaticArtifacts() + SnappyContext.clearStaticArtifacts(SnappyContext.globalSparkContext) exitWithoutRestart() } diff --git a/cluster/src/main/scala/org/apache/spark/scheduler/cluster/SnappyEmbeddedModeClusterManager.scala b/cluster/src/main/scala/org/apache/spark/scheduler/cluster/SnappyEmbeddedModeClusterManager.scala index 858714bac6..d946ad2c40 100644 --- a/cluster/src/main/scala/org/apache/spark/scheduler/cluster/SnappyEmbeddedModeClusterManager.scala +++ b/cluster/src/main/scala/org/apache/spark/scheduler/cluster/SnappyEmbeddedModeClusterManager.scala @@ -22,6 +22,7 @@ import io.snappydata.{Constant, Property, ServiceManager} import org.slf4j.LoggerFactory import org.apache.spark.scheduler._ +import org.apache.spark.sql.SnappyContext import org.apache.spark.{SparkContext, SparkException} /** @@ -41,8 +42,8 @@ class SnappyEmbeddedModeClusterManager extends ExternalClusterManager { // as lead in embedded mode, we need the locator to connect // to the snappy distributed system and hence the locator is // passed in masterurl itself. - if (sc.master.startsWith(Constant.SNAPPY_URL_PREFIX)) { - val locator = sc.master.replaceFirst(Constant.SNAPPY_URL_PREFIX, "").trim + if (sc.master.startsWith(Constant.JDBC_URL_PREFIX)) { + val locator = sc.master.replaceFirst(Constant.JDBC_URL_PREFIX, "").trim val (prop, value) = { if (locator.indexOf("mcast-port") >= 0) { diff --git a/compatibility/spark-2.1.0/build.gradle b/compatibility/spark-2.1.0/build.gradle new file mode 100644 index 0000000000..21545c9a83 --- /dev/null +++ b/compatibility/spark-2.1.0/build.gradle @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +plugins { + id 'com.github.johnrengelman.shadow' version '2.0.4' +} + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +ext { + sparkVersion = '2.1.0' +} + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compile 'org.slf4j:slf4j-api:' + slf4jVersion + compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compile (project(':snappy-core_' + scalaBinaryVersion)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + } + + compile project(':snappy-store:snappydata-store-client') + compile project(':snappy-store:snappydata-store-core') + compile project(':snappy-store:snappydata-store-tools') +} + +task packageScalaDocs(type: Jar, dependsOn: scaladoc) { + classifier = 'javadoc' + from scaladoc +} +if (rootProject.hasProperty('enablePublish')) { + artifacts { + archives packageScalaDocs, packageSources + } +} + + +archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" +shadowJar { + zip64 = true + // avoid conflict with the 0.9.2 version in stock Spark + relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' + // relocate koloboke for possible conflicts with user dependencies + relocate 'com.koloboke', 'io.snappydata.com.koloboke' + // relocate the guava's com.google packages + relocate 'com.google.common', 'io.snappydata.com.google.common' + + mergeServiceFiles() + exclude 'log4j.properties' + + if (rootProject.hasProperty('enablePublish')) { + createdBy = 'SnappyData Build Team' + } else { + createdBy = System.getProperty('user.name') + } + manifest { + attributes( + 'Manifest-Version' : '1.0', + 'Created-By' : createdBy, + 'Title' : archivesBaseName, + 'Version' : version, + 'Vendor' : vendorName + ) + } +} + +// write the POM for spark-package +String sparkPackageName = "snappydata-${version}_${sparkVersion}-s_${scalaBinaryVersion}" + +task sparkPackagePom(dependsOn: shadowJar) { doLast { + file("${rootProject.buildDir}/distributions").mkdirs() + pom { + project { + groupId 'SnappyDataInc' + artifactId 'snappydata' + version "${version}-s_${scalaBinaryVersion}" + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + distribution 'repo' + } + } + } + whenConfigured { p -> p.dependencies.clear() } + }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") + copy { + from "${buildDir}/libs" + into "${rootProject.buildDir}/distributions" + include "${shadowJar.archiveName}" + rename { filename -> "${sparkPackageName}.jar" } + } +} } + +task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { + archiveName "${sparkPackageName}.zip" + destinationDir = file("${rootProject.buildDir}/distributions") + outputs.upToDateWhen { false } + + from ("${rootProject.buildDir}/distributions") { + include "${sparkPackageName}.jar" + include "${sparkPackageName}.pom" + } +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala similarity index 75% rename from core/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala rename to compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala index 057576eff1..f169768e2d 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 SnappyData, Inc. All rights reserved. + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -19,24 +19,17 @@ package org.apache.spark.sql.execution.ui import scala.collection.mutable import org.apache.spark.scheduler.{SparkListenerEvent, SparkListenerJobStart} -import org.apache.spark.sql.CachedDataFrame -import org.apache.spark.sql.execution.{SQLExecution, SparkPlanInfo} +import org.apache.spark.sql.execution.SQLExecution +import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionStart} import org.apache.spark.{JobExecutionStatus, SparkConf} /** - * A new event that is fired when a plan is executed to get an RDD. - */ -case class SparkListenerSQLPlanExecutionStart( - executionId: Long, - description: String, - details: String, - physicalPlanDescription: String, - sparkPlanInfo: SparkPlanInfo, - time: Long) - extends SparkListenerEvent - -/** - * Snappy's SQL Listener. + * SnappyData's SQL Listener. This extends Spark's SQL listener to handle + * combining the two part execution with CachedDataFrame where first execution + * does the caching ("prepare" phase) along with the actual execution while subsequent + * executions only do the latter. This listener also shortens the SQL string + * to display properly in the UI (CachedDataFrame already takes care of posting + * the SQL string rather than method name unlike Spark). * * @param conf SparkConf of active SparkContext */ @@ -44,18 +37,18 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { // base class variables that are private private val baseStageIdToStageMetrics = { getInternalField("org$apache$spark$sql$execution$ui$SQLListener$$_stageIdToStageMetrics"). - asInstanceOf[mutable.HashMap[Long, SQLStageMetrics]] + asInstanceOf[mutable.HashMap[Long, SQLStageMetrics]] } private val baseJobIdToExecutionId = { getInternalField("org$apache$spark$sql$execution$ui$SQLListener$$_jobIdToExecutionId"). - asInstanceOf[mutable.HashMap[Long, Long]] + asInstanceOf[mutable.HashMap[Long, Long]] } private val baseActiveExecutions = { getInternalField("activeExecutions").asInstanceOf[mutable.HashMap[Long, SQLExecutionUIData]] } private val baseExecutionIdToData = { getInternalField("org$apache$spark$sql$execution$ui$SQLListener$$_executionIdToData"). - asInstanceOf[mutable.HashMap[Long, SQLExecutionUIData]] + asInstanceOf[mutable.HashMap[Long, SQLExecutionUIData]] } def getInternalField(fieldName: String): Any = { @@ -80,7 +73,7 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { // in the active executions. For such cases, we need to // look up the executionUIToData as well. val executionData = baseActiveExecutions.get(executionId). - orElse(baseExecutionIdToData.get(executionId)) + orElse(baseExecutionIdToData.get(executionId)) executionData.foreach { executionUIData => executionUIData.jobs(jobId) = JobExecutionStatus.RUNNING executionUIData.stages ++= stageIds @@ -107,30 +100,6 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { */ override def onOtherEvent(event: SparkListenerEvent): Unit = { event match { - - case SparkListenerSQLExecutionStart(executionId, description, details, - physicalPlanDescription, sparkPlanInfo, time) => synchronized { - val executionUIData = baseExecutionIdToData.getOrElseUpdate(executionId, { - val physicalPlanGraph = SparkPlanGraph(sparkPlanInfo) - val sqlPlanMetrics = physicalPlanGraph.allNodes.flatMap { node => - node.metrics.map(metric => metric.accumulatorId -> metric) - } - // description and details strings being reference equals means - // trim off former here - val desc = if (description eq details) { - CachedDataFrame.queryStringShortForm(details) - } else description - new SQLExecutionUIData( - executionId, - desc, - details, - physicalPlanDescription, - physicalPlanGraph, - sqlPlanMetrics.toMap, - time) - }) - baseActiveExecutions(executionId) = executionUIData - } case SparkListenerSQLPlanExecutionStart(executionId, description, details, physicalPlanDescription, sparkPlanInfo, time) => val physicalPlanGraph = SparkPlanGraph(sparkPlanInfo) @@ -148,8 +117,32 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { synchronized { baseExecutionIdToData(executionId) = executionUIData } + + case SparkListenerSQLExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time) => synchronized { + val executionUIData = baseExecutionIdToData.getOrElseUpdate(executionId, { + val physicalPlanGraph = SparkPlanGraph(sparkPlanInfo) + val sqlPlanMetrics = physicalPlanGraph.allNodes.flatMap { node => + node.metrics.map(metric => metric.accumulatorId -> metric) + } + // description and details strings being reference equals means + // trim off former here + val desc = if (description eq details) { + CachedDataFrame.queryStringShortForm(details) + } else description + new SQLExecutionUIData( + executionId, + desc, + details, + physicalPlanDescription, + physicalPlanGraph, + sqlPlanMetrics.toMap, + time) + }) + baseActiveExecutions(executionId) = executionUIData + } + case _ => super.onOtherEvent(event) } - } } diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala new file mode 100644 index 0000000000..b5e1495014 --- /dev/null +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -0,0 +1,372 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import scala.reflect.ClassTag +import scala.util.control.NonFatal + +import io.snappydata.{HintName, QueryHint} + +import org.apache.spark.SparkContext +import org.apache.spark.deploy.SparkSubmitUtils +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.catalog.{CatalogTable, FunctionResource} +import org.apache.spark.sql.catalyst.encoders.RowEncoder +import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} +import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.plans.logical._ +import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap +import org.apache.spark.sql.catalyst.{FunctionIdentifier, SQLBuilder, TableIdentifier} +import org.apache.spark.sql.collection.Utils +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} +import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} +import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} +import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} +import org.apache.spark.sql.execution.{SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} +import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.types.{DataType, Metadata} + +/** + * Implementation of [[SparkInternals]] for Spark 2.1.0. + */ +class Spark210Internals extends SparkInternals { + + override def version: String = "2.1.0" + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + implicit val encoder = RowEncoder(plan.schema) + spark.sharedState.cacheManager.uncacheQuery(Dataset(spark, plan), blocking) + } + + /** + * Apply a map function to each expression present in this query operator, and return a new + * query operator based on the mapped expressions. + * + * Taken from the mapExpressions in Spark 2.1.1 and beyond. + */ + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + var changed = false + + @inline def transformExpression(e: Expression): Expression = { + val newE = f(e) + if (newE.fastEquals(e)) { + e + } else { + changed = true + newE + } + } + + def recursiveTransform(arg: Any): AnyRef = arg match { + case e: Expression => transformExpression(e) + case Some(e: Expression) => Some(transformExpression(e)) + case Some(seq: Traversable[_]) => Some(seq.map(recursiveTransform)) + case m: Map[_, _] => m + case d: DataType => d // Avoid unpacking Structs + case seq: Traversable[_] => seq.map(recursiveTransform) + case other: AnyRef => other + case null => null + } + + /** + * Efficient alternative to `productIterator.map(f).toArray`. + */ + def mapProductIterator[B: ClassTag](f: Any => B): Array[B] = { + val arr = Array.ofDim[B](plan.productArity) + var i = 0 + while (i < arr.length) { + arr(i) = f(plan.productElement(i)) + i += 1 + } + arr + } + + val newArgs = mapProductIterator(recursiveTransform) + + if (changed) plan.makeCopy(newArgs).asInstanceOf[plan.type] else plan + } + + override def registerFunction(session: SparkSession, name: FunctionIdentifier, + info: ExpressionInfo, function: (Seq[Expression]) => Expression): Unit = { + session.sessionState.functionRegistry.registerFunction(name.unquotedString, info, function) + } + + override def addClassField(ctx: CodegenContext, javaType: String, + varName: String, initFunc: String => String, + forceInline: Boolean, useFreshName: Boolean): String = { + val variableName = if (useFreshName) ctx.freshName(varName) else varName + ctx.addMutableState(javaType, varName, initFunc(variableName)) + variableName + } + + override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { + ctx.splitExpressions(ctx.INPUT_ROW, expressions) + } + + override def resetCopyResult(ctx: CodegenContext): Unit = ctx.copyResult = false + + override def isPredicateSubquery(expr: Expression): Boolean = expr match { + case _: PredicateSubquery => true + case _ => false + } + + override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, + newExprId: ExprId): Expression = { + expr.asInstanceOf[PredicateSubquery].copy(plan = newPlan, exprId = newExprId) + } + + override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { + WholeStageCodegenExec(plan) + } + + override def createCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + new CaseInsensitiveMap(map) + } + + def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { + SparkSession.sqlListener.get() match { + case _: SnappySQLListener => // already set + case _ => + val listener = new SnappySQLListener(sparkContext.conf) + if (SparkSession.sqlListener.compareAndSet(null, listener)) { + sparkContext.addSparkListener(listener) + sparkContext.ui match { + case Some(ui) if !SnappyContext.getClusterMode(sparkContext) + .isInstanceOf[SnappyEmbeddedMode] => new SQLTab(listener, ui) + case _ => + } + } + } + } + + def createAndAttachSQLListener(state: SharedState): Unit = { + // check that SparkSession.sqlListener should be set correctly + SparkSession.sqlListener.get() match { + case _: SnappySQLListener => + case l => + throw new IllegalStateException(s"expected SnappySQLListener to be set but was $l") + } + } + + def clearSQLListener(): Unit = { + SparkSession.sqlListener.set(null) + } + + override def createViewSQL(session: SparkSession, plan: LogicalPlan, + originalText: Option[String]): String = { + val viewSQL = new SQLBuilder(plan).toSQL + // Validate the view SQL - make sure we can parse it and analyze it. + // If we cannot analyze the generated query, there is probably a bug in SQL generation. + try { + session.sql(viewSQL).queryExecution.assertAnalyzed() + } catch { + case NonFatal(e) => + throw new RuntimeException(s"Failed to analyze the canonicalized SQL: $viewSQL", e) + } + viewSQL + } + + override def createView(desc: CatalogTable, output: Seq[Attribute], + child: LogicalPlan): LogicalPlan = child + + override def newCreateFunctionCommand(schemaName: Option[String], functionName: String, + className: String, resources: Seq[FunctionResource], isTemp: Boolean, + ignoreIfExists: Boolean, replace: Boolean): LogicalPlan = { + if (ignoreIfExists) { + throw new ParseException(s"CREATE FUNCTION does not support IF NOT EXISTS in Spark $version") + } + if (replace) { + throw new ParseException(s"CREATE FUNCTION does not support REPLACE in Spark $version") + } + CreateFunctionCommand(schemaName, functionName, className, resources, isTemp) + } + + override def newDescribeTableCommand(table: TableIdentifier, + partitionSpec: Map[String, String], isExtended: Boolean): LogicalPlan = { + DescribeTableCommand(table, partitionSpec, isExtended, isFormatted = false) + } + + override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand + + override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], + ivyPath: Option[String], exclusions: Seq[String]): String = { + SparkSubmitUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath, exclusions) + } + + override def copyAttribute(attr: AttributeReference)(name: String, + dataType: DataType, nullable: Boolean, metadata: Metadata): AttributeReference = { + attr.copy(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + exprId = attr.exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) + } + + override def newInsertPlanWithCountOutput(table: LogicalPlan, + partition: Map[String, Option[String]], child: LogicalPlan, + overwrite: Boolean, ifNotExists: Boolean): LogicalPlan = { + new Insert(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) + } + + override def newGroupingSet(groupingSets: Seq[Seq[Expression]], + groupByExprs: Seq[Expression], child: LogicalPlan, + aggregations: Seq[NamedExpression]): LogicalPlan = { + val keyMap = groupByExprs.zipWithIndex.toMap + val numExpressions = keyMap.size + val mask = (1 << numExpressions) - 1 + val bitmasks: Seq[Int] = groupingSets.map(set => set.foldLeft(mask)((bitmap, col) => { + if (!keyMap.contains(col)) { + throw new ParseException(s"GROUPING SETS column '$col' does not appear in GROUP BY list") + } + bitmap & ~(1 << (numExpressions - 1 - keyMap(col))) + })) + GroupingSets(bitmasks, groupByExprs, child, aggregations) + } + + override def newUnresolvedRelation(tableIdentifier: TableIdentifier, + alias: Option[String]): LogicalPlan = { + UnresolvedRelation(tableIdentifier, alias) + } + + override def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias = { + SubqueryAlias(alias, child, view = None) + } + + override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], + child: LogicalPlan): LogicalPlan = { + if (outputColumnNames.isEmpty) child + else { + throw new ParseException(s"Aliases ($outputColumnNames) for column names " + + s"of a sub-plan not supported in Spark $version") + } + } + + override def newSortOrder(child: Expression, direction: SortDirection, + nullOrdering: NullOrdering): SortOrder = { + SortOrder(child, direction, nullOrdering) + } + + override def newRepartitionByExpression(partitionExpressions: Seq[Expression], + numPartitions: Int, child: LogicalPlan): RepartitionByExpression = { + RepartitionByExpression(partitionExpressions, child, Some(numPartitions)) + } + + override def newUnresolvedTableValuedFunction(functionName: String, + functionArgs: Seq[Expression], outputNames: Seq[String]): UnresolvedTableValuedFunction = { + if (outputNames.nonEmpty) { + throw new ParseException(s"Aliases ($outputNames) for table value function " + + s"'$functionName' not supported in Spark $version") + } + UnresolvedTableValuedFunction(functionName, functionArgs) + } + + private def boundaryInt(boundaryType: FrameBoundaryType.Type, + num: Option[Expression]): Int = num match { + case Some(l: Literal) => l.value.toString.toInt + case _ => throw new ParseException( + s"Expression ($num) in frame boundary ($boundaryType) not supported in Spark $version") + } + + override def newFrameBoundary(boundaryType: FrameBoundaryType.Type, + num: Option[Expression]): FrameBoundary = { + boundaryType match { + case FrameBoundaryType.UnboundedPreceding => UnboundedPreceding + case FrameBoundaryType.ValuePreceding => ValuePreceding(boundaryInt(boundaryType, num)) + case FrameBoundaryType.CurrentRow => CurrentRow + case FrameBoundaryType.UnboundedFollowing => UnboundedFollowing + case FrameBoundaryType.ValueFollowing => ValueFollowing(boundaryInt(boundaryType, num)) + } + } + + override def newSpecifiedWindowFrame(frameType: FrameType, frameStart: Any, + frameEnd: Any): SpecifiedWindowFrame = { + SpecifiedWindowFrame(frameType, frameStart.asInstanceOf[FrameBoundary], + frameEnd.asInstanceOf[FrameBoundary]) + } + + override def newLogicalPlanWithHints(child: LogicalPlan, + hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints = { + new PlanWithHints(child, hints) + } + + override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[BroadcastHint] + + override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { + case p: PlanWithHints => p.allHints + case _: BroadcastHint => Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) + case _ => Map.empty + } + + override def isBroadcastable(plan: LogicalPlan): Boolean = plan.statistics.isBroadcastable + + override def newOneRowRelation(): LogicalPlan = OneRowRelation + + override def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], + generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan = { + Generate(generator, join = true, outer, qualifier, generatorOutput, child) + } + + override def writeToDataSource(ds: DataSource, mode: SaveMode, + data: Dataset[Row]): BaseRelation = { + ds.write(mode, data) + ds.copy(userSpecifiedSchema = Some(data.schema.asNullable)).resolveRelation() + } + + override def newLogicalRelation(relation: BaseRelation, + expectedOutputAttributes: Option[Seq[AttributeReference]], + catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation = { + if (isStreaming) { + throw new ParseException(s"Streaming relations not supported in Spark $version") + } + LogicalRelation(relation, expectedOutputAttributes, catalogTable) + } + + override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { + ShuffleExchange(newPartitioning, child) + } + + override def getStatistics(plan: LogicalPlan): Statistics = plan.statistics + + override def supportsPartial(aggregate: AggregateFunction): Boolean = aggregate.supportsPartial + + override def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], + aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], + planChild: () => SparkPlan): Seq[SparkPlan] = { + aggregate.AggUtils.planAggregateWithoutPartial( + groupingExpressions, + aggregateExpressions, + resultExpressions, + planChild()) + } + + override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code) + + override def newJSONOptions(parameters: Map[String, String], + session: Option[SparkSession]): JSONOptions = new JSONOptions(parameters) + + override def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { + new SparkOptimizer(sessionState.catalog, sessionState.conf, sessionState.experimentalMethods) + with DefaultOptimizer { + override def state: SnappySessionState = sessionState + } + } + + override def newPreWriteCheck(sessionState: SnappySessionState): (LogicalPlan => Unit) = { + PreWriteCheck(sessionState.conf, sessionState.catalog) + } +} diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala new file mode 100644 index 0000000000..946d5866f7 --- /dev/null +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import io.snappydata.{HintName, QueryHint} + +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference} +import org.apache.spark.sql.catalyst.plans.logical.{BroadcastHint, InsertIntoTable, LogicalPlan, OverwriteOptions} +import org.apache.spark.sql.types.LongType + + +/** + * Unlike Spark's InsertIntoTable this plan provides the count of rows + * inserted as the output. + */ +final class Insert( + table: LogicalPlan, + partition: Map[String, Option[String]], + child: LogicalPlan, + overwrite: OverwriteOptions, + ifNotExists: Boolean) + extends InsertIntoTable(table, partition, child, overwrite, ifNotExists) { + + override def output: Seq[Attribute] = AttributeReference( + "count", LongType)() :: Nil + + override def copy(table: LogicalPlan = table, + partition: Map[String, Option[String]] = partition, + child: LogicalPlan = child, + overwrite: OverwriteOptions = overwrite, + ifNotExists: Boolean = ifNotExists): Insert = { + new Insert(table, partition, child, overwrite, ifNotExists) + } +} + +/** + * An extended version of [[BroadcastHint]] to encapsulate any kind of hint rather + * than just broadcast. + */ +class PlanWithHints(_child: LogicalPlan, override val allHints: Map[QueryHint.Type, HintName.Type]) + extends BroadcastHint(_child) with LogicalPlanWithHints { + + override def productArity: Int = 2 + + override def productElement(n: Int): Any = n match { + case 0 => child + case 1 => allHints + } +} diff --git a/compatibility/spark-2.1.1/build.gradle b/compatibility/spark-2.1.1/build.gradle new file mode 100644 index 0000000000..20cb890062 --- /dev/null +++ b/compatibility/spark-2.1.1/build.gradle @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +plugins { + id 'com.github.johnrengelman.shadow' version '2.0.4' +} + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +ext { + sparkVersion = '2.1.1' +} + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compile 'org.slf4j:slf4j-api:' + slf4jVersion + compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compile (project(':snappy-core_' + scalaBinaryVersion)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + } + compile (project(':compatibility:spark2.1.0_' + scalaBinaryVersion)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + } + + compile project(':snappy-store:snappydata-store-client') + compile project(':snappy-store:snappydata-store-core') + compile project(':snappy-store:snappydata-store-tools') +} + +task packageScalaDocs(type: Jar, dependsOn: scaladoc) { + classifier = 'javadoc' + from scaladoc +} +if (rootProject.hasProperty('enablePublish')) { + artifacts { + archives packageScalaDocs, packageSources + } +} + + +archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" +shadowJar { + zip64 = true + // avoid conflict with the 0.9.2 version in stock Spark + relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' + // relocate koloboke for possible conflicts with user dependencies + relocate 'com.koloboke', 'io.snappydata.com.koloboke' + // relocate the guava's com.google packages + relocate 'com.google.common', 'io.snappydata.com.google.common' + + mergeServiceFiles() + exclude 'log4j.properties' + + if (rootProject.hasProperty('enablePublish')) { + createdBy = 'SnappyData Build Team' + } else { + createdBy = System.getProperty('user.name') + } + manifest { + attributes( + 'Manifest-Version' : '1.0', + 'Created-By' : createdBy, + 'Title' : archivesBaseName, + 'Version' : version, + 'Vendor' : vendorName + ) + } +} + +// write the POM for spark-package +String sparkPackageName = "snappydata-${version}_${sparkVersion}-s_${scalaBinaryVersion}" + +task sparkPackagePom(dependsOn: shadowJar) { doLast { + file("${rootProject.buildDir}/distributions").mkdirs() + pom { + project { + groupId 'SnappyDataInc' + artifactId 'snappydata' + version "${version}-s_${scalaBinaryVersion}" + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + distribution 'repo' + } + } + } + whenConfigured { p -> p.dependencies.clear() } + }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") + copy { + from "${buildDir}/libs" + into "${rootProject.buildDir}/distributions" + include "${shadowJar.archiveName}" + rename { filename -> "${sparkPackageName}.jar" } + } +} } + +task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { + archiveName "${sparkPackageName}.zip" + destinationDir = file("${rootProject.buildDir}/distributions") + outputs.upToDateWhen { false } + + from ("${rootProject.buildDir}/distributions") { + include "${sparkPackageName}.jar" + include "${sparkPackageName}.pom" + } +} diff --git a/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala new file mode 100644 index 0000000000..134a78013e --- /dev/null +++ b/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.expressions.Expression +import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan + +/** + * Implementation of [[SparkInternals]] for Spark 2.1.1. + */ +class Spark211Internals extends Spark210Internals { + + override def version: String = "2.1.1" + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) + } + + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + plan.mapExpressions(f) + } +} diff --git a/compatibility/spark-2.3.2/build.gradle b/compatibility/spark-2.3.2/build.gradle new file mode 100644 index 0000000000..9f4f123f3a --- /dev/null +++ b/compatibility/spark-2.3.2/build.gradle @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +plugins { + id 'com.github.johnrengelman.shadow' version '2.0.4' +} + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +ext { + sparkVersion = '2.3.2' +} + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compile 'org.slf4j:slf4j-api:' + slf4jVersion + compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compile (project(':snappy-core_' + scalaBinaryVersion)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + } + + compile project(':snappy-store:snappydata-store-client') + compile project(':snappy-store:snappydata-store-core') + compile project(':snappy-store:snappydata-store-tools') +} + +task packageScalaDocs(type: Jar, dependsOn: scaladoc) { + classifier = 'javadoc' + from scaladoc +} +if (rootProject.hasProperty('enablePublish')) { + artifacts { + archives packageScalaDocs, packageSources + } +} + + +archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" +shadowJar { + zip64 = true + // avoid conflict with the 0.9.2 version in stock Spark + relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' + // relocate koloboke for possible conflicts with user dependencies + relocate 'com.koloboke', 'io.snappydata.com.koloboke' + // relocate the guava's com.google packages + relocate 'com.google.common', 'io.snappydata.com.google.common' + + mergeServiceFiles() + exclude 'log4j.properties' + + if (rootProject.hasProperty('enablePublish')) { + createdBy = 'SnappyData Build Team' + } else { + createdBy = System.getProperty('user.name') + } + manifest { + attributes( + 'Manifest-Version' : '1.0', + 'Created-By' : createdBy, + 'Title' : archivesBaseName, + 'Version' : version, + 'Vendor' : vendorName + ) + } +} + +// write the POM for spark-package +String sparkPackageName = "snappydata-${version}_${sparkVersion}-s_${scalaBinaryVersion}" + +task sparkPackagePom(dependsOn: shadowJar) { doLast { + file("${rootProject.buildDir}/distributions").mkdirs() + pom { + project { + groupId 'SnappyDataInc' + artifactId 'snappydata' + version "${version}-s_${scalaBinaryVersion}" + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + distribution 'repo' + } + } + } + whenConfigured { p -> p.dependencies.clear() } + }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") + copy { + from "${buildDir}/libs" + into "${rootProject.buildDir}/distributions" + include "${shadowJar.archiveName}" + rename { filename -> "${sparkPackageName}.jar" } + } +} } + +task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { + archiveName "${sparkPackageName}.zip" + destinationDir = file("${rootProject.buildDir}/distributions") + outputs.upToDateWhen { false } + + from ("${rootProject.buildDir}/distributions") { + include "${sparkPackageName}.jar" + include "${sparkPackageName}.pom" + } +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala new file mode 100644 index 0000000000..47730148eb --- /dev/null +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.ui + +import org.apache.spark.SparkContext +import org.apache.spark.scheduler.SparkListenerEvent +import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionStart} +import org.apache.spark.status.ElementTrackingStore + +/** + * SnappyData's SQL Listener. This extends Spark's SQL listener to handle + * combining the two part execution with CachedDataFrame where first execution + * does the caching ("prepare" phase) along with the actual execution while subsequent + * executions only do the latter. This listener also shortens the SQL string + * to display properly in the UI (CachedDataFrame already takes care of posting + * the SQL string rather than method name unlike Spark). + * + * @param context the active SparkContext + */ +class SnappySQLAppListener(context: SparkContext) + extends SQLAppStatusListener(context.conf, + context.statusStore.store.asInstanceOf[ElementTrackingStore], live = true) { + + /** + * Snappy's execution happens in two phases. First phase the plan is executed + * to create a rdd which is then used to create a CachedDataFrame. + * In second phase, the CachedDataFrame is then used for further actions. + * For accumulating the metrics for first phase, + * SparkListenerSQLPlanExecutionStart is fired. This keeps the current + * executionID in _executionIdToData but does not add it to the active + * executions. This ensures that query is not shown in the UI but the + * new jobs that are run while the plan is being executed are tracked + * against this executionID. In the second phase, when the query is + * actually executed, SparkListenerSQLPlanExecutionStart adds the execution + * data to the active executions. SparkListenerSQLPlanExecutionEnd is + * then sent with the accumulated time of both the phases. + */ + override def onOtherEvent(event: SparkListenerEvent): Unit = event match { + case SparkListenerSQLPlanExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time) => + super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time)) + + case SparkListenerSQLExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time) => + // description and details strings being reference equals means + // trim off former here + if (description eq details) { + val desc = CachedDataFrame.queryStringShortForm(details) + super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, desc, details, + physicalPlanDescription, sparkPlanInfo, time)) + } else super.onOtherEvent(event) + + case _ => super.onOtherEvent(event) + } +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala new file mode 100644 index 0000000000..f912164492 --- /dev/null +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import io.snappydata.{HintName, QueryHint} + +import org.apache.spark.SparkContext +import org.apache.spark.deploy.SparkSubmitUtils +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.catalog.{CatalogTable, FunctionResource} +import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} +import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.plans.logical._ +import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap +import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} +import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} +import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} +import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} +import org.apache.spark.sql.execution.{SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.types.{DataType, Metadata} + +/** + * Implementation of [[SparkInternals]] for Spark 2.3.2. + */ +class Spark232Internals extends SparkInternals { + + override def version: String = "2.3.2" + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) + } + + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + plan.mapExpressions(f) + } + + override def registerFunction(session: SparkSession, name: FunctionIdentifier, + info: ExpressionInfo, function: (Seq[Expression]) => Expression): Unit = { + session.sessionState.functionRegistry.registerFunction(name, info, function) + } + + override def addClassField(ctx: CodegenContext, javaType: String, + varName: String, initFunc: String => String, + forceInline: Boolean, useFreshName: Boolean): String = { + ctx.addMutableState(javaType, varName, initFunc, forceInline, useFreshName) + } + + override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { + ctx.splitExpressionsWithCurrentInputs(expressions) + } + + override def resetCopyResult(ctx: CodegenContext): Unit = {} + + override def isPredicateSubquery(expr: Expression): Boolean = false + + override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, + newExprId: ExprId): Expression = { + throw new UnsupportedOperationException( + "unexpected copyPredicateSubquery call in Spark 2.3 module") + } + + override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { + WholeStageCodegenExec(plan)(codegenStageId = 0) + } + + override def createCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + new CaseInsensitiveMap[String](map) + } + + def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { + // SQLAppStatusListener is created in the constructor of SharedState that needs to be overridden + } + + def createAndAttachSQLListener(state: SharedState): Unit = { + // replace inside SQLAppStatusStore as well as change on the Spark ListenerBus + val listenerField = classOf[SQLAppStatusStore].getDeclaredField("listener") + listenerField.setAccessible(true) + listenerField.get(state.statusStore).asInstanceOf[Option[SQLAppStatusListener]] match { + case Some(_: SnappySQLAppListener) => // already changed + case Some(_: SQLAppStatusListener) => + val newListener = new SnappySQLAppListener(state.sparkContext) + // update on ListenerBus + state.sparkContext.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( + state.sparkContext.removeSparkListener) + state.sparkContext.listenerBus.addToStatusQueue(newListener) + listenerField.set(state.statusStore, newListener) + } + } + + def clearSQLListener(): Unit = { + // no global SQLListener in Spark 2.3 + } + + override def createViewSQL(session: SparkSession, plan: LogicalPlan, + originalText: Option[String]): String = originalText match { + case Some(viewSQL) => viewSQL + case None => + throw new AnalysisException( + "Cannot create a persisted VIEW from the Dataset API") + } + + override def createView(desc: CatalogTable, output: Seq[Attribute], + child: LogicalPlan): LogicalPlan = View(desc, output, child) + + override def newCreateFunctionCommand(schemaName: Option[String], functionName: String, + className: String, resources: Seq[FunctionResource], isTemp: Boolean, + ignoreIfExists: Boolean, replace: Boolean): LogicalPlan = { + CreateFunctionCommand(schemaName, functionName, className, resources, isTemp, + ignoreIfExists, replace) + } + + override def newDescribeTableCommand(table: TableIdentifier, + partitionSpec: Map[String, String], isExtended: Boolean): LogicalPlan = { + DescribeTableCommand(table, partitionSpec, isExtended) + } + + override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand() + + override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], + ivyPath: Option[String], exclusions: Seq[String]): String = { + SparkSubmitUtils.resolveMavenCoordinates(coordinates, + SparkSubmitUtils.buildIvySettings(remoteRepos, ivyPath), exclusions) + } + + override def copyAttribute(attr: AttributeReference)(name: String, + dataType: DataType, nullable: Boolean, metadata: Metadata): AttributeReference = { + attr.copy(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + exprId = attr.exprId, qualifier = attr.qualifier) + } + + override def newInsertPlanWithCountOutput(table: LogicalPlan, + partition: Map[String, Option[String]], child: LogicalPlan, + overwrite: Boolean, ifNotExists: Boolean): LogicalPlan = { + new Insert23(table, partition, child, overwrite, ifNotExists) + } + + override def newGroupingSet(groupingSets: Seq[Seq[Expression]], + groupByExprs: Seq[Expression], child: LogicalPlan, + aggregations: Seq[NamedExpression]): LogicalPlan = { + GroupingSets(groupingSets, groupByExprs, child, aggregations) + } + + override def newUnresolvedRelation(tableIdentifier: TableIdentifier, + alias: Option[String]): LogicalPlan = alias match { + case None => UnresolvedRelation(tableIdentifier) + case Some(a) => SubqueryAlias(a, UnresolvedRelation(tableIdentifier)) + } + + override def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias = { + SubqueryAlias(alias, child) + } + + override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], + child: LogicalPlan): LogicalPlan = { + if (outputColumnNames.isEmpty) child + else UnresolvedSubqueryColumnAliases(outputColumnNames, child) + } + + override def newSortOrder(child: Expression, direction: SortDirection, + nullOrdering: NullOrdering): SortOrder = { + SortOrder(child, direction, nullOrdering, Set.empty) + } + + override def newRepartitionByExpression(partitionExpressions: Seq[Expression], + numPartitions: Int, child: LogicalPlan): RepartitionByExpression = { + RepartitionByExpression(partitionExpressions, child, numPartitions) + } + + override def newUnresolvedTableValuedFunction(functionName: String, + functionArgs: Seq[Expression], outputNames: Seq[String]): UnresolvedTableValuedFunction = { + UnresolvedTableValuedFunction(functionName, functionArgs, outputNames) + } + + override def newFrameBoundary(boundaryType: FrameBoundaryType.Type, + num: Option[Expression]): Any = { + boundaryType match { + case FrameBoundaryType.UnboundedPreceding => UnboundedPreceding + case FrameBoundaryType.ValuePreceding => UnaryMinus(num.get) + case FrameBoundaryType.CurrentRow => CurrentRow + case FrameBoundaryType.UnboundedFollowing => UnboundedFollowing + case FrameBoundaryType.ValueFollowing => num.get + } + } + + override def newSpecifiedWindowFrame(frameType: FrameType, frameStart: Any, + frameEnd: Any): SpecifiedWindowFrame = { + SpecifiedWindowFrame(frameType, frameStart.asInstanceOf[Expression], + frameEnd.asInstanceOf[Expression]) + } + + override def newLogicalPlanWithHints(child: LogicalPlan, + hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints = { + new ResolvedPlanWithHints(child, hints) + } + + override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[ResolvedHint] + + override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { + case p: ResolvedPlanWithHints => p.allHints + case _: ResolvedHint => + // only broadcast supported + Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) + case _ => Map.empty + } + + override def isBroadcastable(plan: LogicalPlan): Boolean = { + // Spark now uses the UnresolvedHint/ResolvedHint infrastructure and not a fixed flag + false + } + + override def newOneRowRelation(): LogicalPlan = OneRowRelation() + + override def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], + generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan = { + Generate(generator, unrequiredChildIndex = Nil, outer, qualifier, generatorOutput, child) + } + + override def writeToDataSource(ds: DataSource, mode: SaveMode, + data: Dataset[Row]): BaseRelation = { + ds.writeAndRead(mode, data.planWithBarrier, data.planWithBarrier.output.map(_.name), + data.queryExecution.executedPlan) + } + + override def newLogicalRelation(relation: BaseRelation, + expectedOutputAttributes: Option[Seq[AttributeReference]], + catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation = { + val output = expectedOutputAttributes match { + case None => relation.schema.toAttributes + case Some(attrs) => attrs + } + LogicalRelation(relation, output, catalogTable, isStreaming) + } + + override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { + ShuffleExchangeExec(newPartitioning, child) + } + + override def getStatistics(plan: LogicalPlan): Statistics = plan.stats + + override def supportsPartial(aggregate: AggregateFunction): Boolean = true + + override def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], + aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], + planChild: () => SparkPlan): Seq[SparkPlan] = { + throw new UnsupportedOperationException( + "unexpected planAggregateWithoutPartial call in Spark 2.3 module") + } + + override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code)._1 + + override def newJSONOptions(parameters: Map[String, String], + session: Option[SparkSession]): JSONOptions = session match { + case None => + new JSONOptions(parameters, + SQLConf.SESSION_LOCAL_TIMEZONE.defaultValue.get, + SQLConf.COLUMN_NAME_OF_CORRUPT_RECORD.defaultValue.get) + case Some(sparkSession) => + new JSONOptions(parameters, + sparkSession.sessionState.conf.sessionLocalTimeZone, + sparkSession.sessionState.conf.columnNameOfCorruptRecord) + } + + override def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { + new SparkOptimizer(sessionState.catalog, sessionState.experimentalMethods) + with DefaultOptimizer { + override def state: SnappySessionState = sessionState + } + } + + override def newPreWriteCheck(sessionState: SnappySessionState): (LogicalPlan => Unit) = { + PreWriteCheck + } +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala new file mode 100644 index 0000000000..9682f63e9b --- /dev/null +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import io.snappydata.{HintName, QueryHint} + +import org.apache.spark.sql.JoinStrategy +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference} +import org.apache.spark.sql.catalyst.plans.logical.{HintInfo, InsertIntoTable, LogicalPlan, ResolvedHint} +import org.apache.spark.sql.types.LongType + +/** + * Unlike Spark's InsertIntoTable this plan provides the count of rows + * inserted as the output. + */ +final class Insert23( + table: LogicalPlan, + partition: Map[String, Option[String]], + child: LogicalPlan, + overwrite: Boolean, + ifNotExists: Boolean) + extends InsertIntoTable(table, partition, child, overwrite, ifNotExists) { + + override def output: Seq[Attribute] = AttributeReference( + "count", LongType)() :: Nil + + override def copy(table: LogicalPlan = table, + partition: Map[String, Option[String]] = partition, + child: LogicalPlan = child, + overwrite: Boolean = overwrite, + ifNotExists: Boolean = ifNotExists): Insert23 = { + new Insert23(table, partition, child, overwrite, ifNotExists) + } +} + +/** + * An extension to [[ResolvedHint]] to encapsulate any kind of hint rather + * than just broadcast. + */ +class ResolvedPlanWithHints(child: LogicalPlan, + override val allHints: Map[QueryHint.Type, HintName.Type]) + extends ResolvedHint(child, HintInfo(JoinStrategy.hasBroadcastHint(allHints))) + with LogicalPlanWithHints { + + override def productArity: Int = 3 + + override def productElement(n: Int): Any = n match { + case 0 => child + case 1 => hints + case 2 => allHints + } +} diff --git a/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java b/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java index 1dfe3f5204..23f83cdb4a 100644 --- a/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java +++ b/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java @@ -23,18 +23,14 @@ import org.apache.spark.sql.SnappyContext; import org.apache.spark.sql.SnappyEmbeddedMode; import org.apache.spark.sql.SparkSession; +import org.apache.spark.sql.SparkSupport$; import org.apache.spark.sql.ThinClientConnectorMode; import org.apache.spark.sql.catalyst.catalog.ExternalCatalog; import org.apache.spark.sql.catalyst.catalog.GlobalTempViewManager; import org.apache.spark.sql.collection.Utils; -import org.apache.spark.sql.execution.columnar.ExternalStoreUtils; -import org.apache.spark.sql.execution.ui.SQLListener; -import org.apache.spark.sql.execution.ui.SQLTab; -import org.apache.spark.sql.execution.ui.SnappySQLListener; import org.apache.spark.sql.hive.client.HiveClientImpl; import org.apache.spark.sql.internal.SharedState; import org.apache.spark.sql.internal.StaticSQLConf; -import org.apache.spark.ui.SparkUI; /** * Overrides Spark's SharedState to enable setting up own ExternalCatalog. @@ -66,23 +62,17 @@ public final class SnappySharedState extends SharedState { private static final String CATALOG_IMPLEMENTATION = "spark.sql.catalogImplementation"; /** - * Create Snappy's SQL Listener instead of SQLListener + * Create Snappy's SQL Listener instead of SQLListener (before SharedState creation). */ private static void createListenerAndUI(SparkContext sc) { - SQLListener initListener = ExternalStoreUtils.getSQLListener().get(); - if (initListener == null) { - SnappySQLListener listener = new SnappySQLListener(sc.conf()); - if (ExternalStoreUtils.getSQLListener().compareAndSet(null, listener)) { - sc.addSparkListener(listener); - scala.Option ui = sc.ui(); - // embedded mode attaches SQLTab later via ToolsCallbackImpl that also - // takes care of injecting any authentication module if configured - if (ui.isDefined() && - !(SnappyContext.getClusterMode(sc) instanceof SnappyEmbeddedMode)) { - new SQLTab(listener, ui.get()); - } - } - } + SparkSupport$.MODULE$.internals(sc).createAndAttachSQLListener(sc); + } + + /** + * Create Snappy's SQL Listener instead of SQLListener (post SharedState creation). + */ + private void createListenerAndUI() { + SparkSupport$.MODULE$.internals(sparkContext()).createAndAttachSQLListener(this); } private SnappySharedState(SparkContext sparkContext) throws SparkException { @@ -138,6 +128,8 @@ public static synchronized SnappySharedState create(SparkContext sparkContext) createListenerAndUI(sparkContext); final SnappySharedState sharedState = new SnappySharedState(sparkContext); + // new Spark versions initialize the UI listener in constructor which is updated next + sharedState.createListenerAndUI(); // reset the catalog implementation to original if (catalogImpl != null) { diff --git a/core/src/main/scala/io/snappydata/Literals.scala b/core/src/main/scala/io/snappydata/Literals.scala index 6616479401..f23840fda7 100644 --- a/core/src/main/scala/io/snappydata/Literals.scala +++ b/core/src/main/scala/io/snappydata/Literals.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 SnappyData, Inc. All rights reserved. + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -22,6 +22,7 @@ import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.internal.{AltName, SQLAltName, SQLConfigEntry} object StreamingConstants { + val EVENT_TYPE_COLUMN = "_eventType" val SINK_STATE_TABLE = s"SNAPPYSYS_INTERNAL____SINK_STATE_TABLE" val SNAPPY_SINK_NAME = "snappysink" @@ -293,6 +294,51 @@ object SnappySparkSQLProperty { Property.getSnappyPropertyValue(property.name) } +object HintName extends Enumeration { + + case class Name(names: String*) extends HintName.Val(names.head) { + + def contains(name: String): Boolean = { + if (names.length == 1) names.head.equalsIgnoreCase(name) + else names.exists(_.equalsIgnoreCase(name)) + } + + override def toString: String = if (names.length == 1) names.head else names.mkString(",") + } + + type Type = Name + + // hints for joinType + /** broadcast join */ + val JoinType_Broadcast = Name("broadcast", "broadcastJoin", "mapJoin") + /** hash join (both colocated or after exchange) */ + val JoinType_Hash = Name("hash", "hashJoin") + /** force sort-merge-join in case some other is being selected */ + val JoinType_Sort = Name("sort", "sortMerge", "sortMergeJoin") + + // hints for joinOrder + /** + * Continue to attempt optimization choices of index for colocated joins even if user have + * specified explicit index hints for some tables. + * + * `Note:` user specified index hint will be honored and optimizer will only attempt for + * other tables in the query. + */ + val JoinOrder_ContinueOptimizations = Name("continueOpts") + /** + * By default if query have atleast one colocated join conditions mentioned between a pair of + * partitiioned tables, optimizer won't try to derive colocation possibilities with replicated + * tables in between. This switch tells the optimizer to include partition -> replicated -> + * partition like indirect colocation possibilities even if partition -> partition join + * conditions are mentioned. + */ + val JoinOrder_IncludeGeneratedPaths = Name("includeGeneratedPaths") + /** + * Don't alter the join order provided by the user. + */ + val JoinOrder_Fixed = Name("fixed") +} + /** * SQL query hints as interpreted by the SnappyData SQL parser. The format * mirrors closely the format used by Hive,Oracle query hints with a comment @@ -302,12 +348,28 @@ object SnappySparkSQLProperty { */ object QueryHint extends Enumeration { - type Type = Value + case class HintValue(name: String, values: Vector[HintName.Type]) extends QueryHint.Val(name) { + + def get(hintValue: String): Option[HintName.Type] = values.find(_.contains(hintValue)) + + override def toString: String = if (values.isEmpty) name else s"$name=${values.mkString(",")}" + } + + type Type = HintValue import scala.language.implicitConversions implicit def toStr(h: Type): String = h.toString + def get(hint: String, allowed: Array[HintValue]): Option[HintValue] = { + var i = 0 + while (i < allowed.length) { + if (hint.equalsIgnoreCase(allowed(i).name)) return Some(allowed(i)) + i += 1 + } + None + } + /** * Query hint for SQL queries to serialize complex types (ARRAY, MAP, STRUCT) * as CLOBs in JSON format for routed JDBC/ODBC queries (default) to display better @@ -318,7 +380,7 @@ object QueryHint extends Enumeration { * Example:
* SELECT * FROM t1 --+ complexTypeAsJson(0) */ - val ComplexTypeAsJson = Value(Constant.COMPLEX_TYPE_AS_JSON_HINT) + val ComplexTypeAsJson = HintValue(Constant.COMPLEX_TYPE_AS_JSON_HINT, Vector.empty) /** * Query hint followed by table to override optimizer choice of index per table. @@ -328,18 +390,19 @@ object QueryHint extends Enumeration { * Example:
* SELECT * FROM t1 /`*`+ index(xxx) *`/`, t2 --+ withIndex(yyy) */ - val Index = Value("index") + val Index = HintValue("index", Vector.empty) /** * Query hint after FROM clause to indicate following tables have join order fixed and * optimizer shouldn't try to re-order joined tables. * - * Possible comma separated values are [[io.snappydata.JOS]]. + * Possible comma separated values are listed in [[HintName]] starting with "JoinOrder_". * * Example:
* SELECT * FROM /`*`+ joinOrder(fixed) *`/` t1, t2 */ - val JoinOrder = Value("joinOrder") + val JoinOrder = HintValue("joinOrder", Vector(HintName.JoinOrder_Fixed, + HintName.JoinOrder_ContinueOptimizations, HintName.JoinOrder_IncludeGeneratedPaths)) /** * Query hint to force a join type for the current join. This should appear after @@ -347,13 +410,13 @@ object QueryHint extends Enumeration { * Note that this will enable the specific join type only if it is possible * for that table in the join and silently ignore otherwise. * - * Possible values are [[Constant.JOIN_TYPE_BROADCAST]], [[Constant.JOIN_TYPE_HASH]], - * [[Constant.JOIN_TYPE_SORT]]. + * Possible values are listed in [[HintName]] starting with "JoinType_". * * Example:
* SELECT * FROM t1 /`*`+ joinType(broadcast) -- broadcast t1 *`/`, t2 where ... */ - val JoinType: Value = Value("joinType") + val JoinType = HintValue("joinType", Vector(HintName.JoinType_Broadcast, + HintName.JoinType_Hash, HintName.JoinType_Sort)) /** * Query hint for SQL queries to serialize STRING type as CLOB rather than @@ -367,44 +430,5 @@ object QueryHint extends Enumeration { * SELECT id, name, addr, medical_history FROM t1 --+ columnsAsClob(addr) * SELECT id, name, addr, medical_history FROM t1 --+ columnsAsClob(*) */ - val ColumnsAsClob = Value("columnsAsClob") -} - -/** - * List of possible values for Join Order QueryHint. - * - * `Note:` Ordering is applicable only when index choice is left to the optimizer. By default, - * if user specifies explicit index hint like "select * from t1 --+ index()", optimizer will just - * honor the hint and skip everything mentioned in joinOrder. In other words, a blank index() - * hint for any table disables choice of index and its associated following rules. - */ -object JOS extends Enumeration { - type Type = Value - - import scala.language.implicitConversions - - implicit def toStr(h: Type): String = h.toString - - /** - * Continue to attempt optimization choices of index for colocated joins even if user have - * specified explicit index hints for some tables. - * - * `Note:` user specified index hint will be honored and optimizer will only attempt for - * other tables in the query. - */ - val ContinueOptimizations = Value("continueOpts") - - /** - * By default if query have atleast one colocated join conditions mentioned between a pair of - * partitiioned tables, optimizer won't try to derive colocation possibilities with replicated - * tables in between. This switch tells the optimizer to include partition -> replicated -> - * partition like indirect colocation possibilities even if partition -> partition join - * conditions are mentioned. - */ - val IncludeGeneratedPaths = Value("includeGeneratedPaths") - - /** - * Don't alter the join order provided by the user. - */ - val Fixed = Value("fixed") + val ColumnsAsClob = HintValue("columnsAsClob", Vector.empty) } diff --git a/core/src/main/scala/io/snappydata/functions.scala b/core/src/main/scala/io/snappydata/functions.scala index 6a504a3f08..ae43804beb 100644 --- a/core/src/main/scala/io/snappydata/functions.scala +++ b/core/src/main/scala/io/snappydata/functions.scala @@ -23,30 +23,21 @@ import com.pivotal.gemfirexd.internal.engine.Misc import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} import org.apache.spark.sql.catalyst.InternalRow -import org.apache.spark.sql.catalyst.analysis.FunctionRegistry import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} -import org.apache.spark.sql.catalyst.expressions.{ExpressionDescription, ExpressionInfo, LeafExpression, Nondeterministic} +import org.apache.spark.sql.catalyst.expressions.{ExpressionDescription, LeafExpression, Nondeterministic} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.hive.SnappyStoreHiveCatalog import org.apache.spark.sql.sources.ConnectionProperties import org.apache.spark.sql.types.{DataType, StringType} -import org.apache.spark.sql.{SnappyContext, ThinClientConnectorMode} +import org.apache.spark.sql.{SnappyContext, SparkSupport, ThinClientConnectorMode} import org.apache.spark.unsafe.types.UTF8String /** - * This will contain all the functions specific to snappydata + * Helper functions for execution in embedded as well as smart connector mode. */ object SnappyDataFunctions { - val usageStr: String = "_FUNC_() - Returns the unique distributed member" + - " ID of the server containing the row." - - def registerSnappyFunctions(functionRegistry: FunctionRegistry): Unit = { - val info = new ExpressionInfo(DSID.getClass.getCanonicalName, null, "DSID", usageStr, "") - functionRegistry.registerFunction("DSID", info, _ => DSID()) - } - lazy val defaultConnectionProps: ConnectionProperties = SnappyContext.getClusterMode( SnappyContext.globalSparkContext) match { case _: ThinClientConnectorMode => @@ -79,7 +70,7 @@ object SnappyDataFunctions { */ @ExpressionDescription( usage = "_FUNC_() - Returns the dsid of the server containing the row.") -case class DSID() extends LeafExpression with Nondeterministic { +case class DSID() extends LeafExpression with Nondeterministic with SparkSupport { override def nullable: Boolean = false @@ -99,8 +90,9 @@ case class DSID() extends LeafExpression with Nondeterministic { override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { val connPropsRef = ctx.addReferenceObj("connProps", connectionProps, classOf[ConnectionProperties].getName) - ctx.addMutableState("UTF8String", ev.value, s"${ev.value} = UTF8String" + - s".fromString(io.snappydata.SnappyDataFunctions.getDSID($connPropsRef));") - ev.copy(code = "", isNull = "false") + val dsidVar = internals.addClassField(ctx, "UTF8String", "dsid", + varName => s"$varName = UTF8String.fromString(" + + s"io.snappydata.SnappyDataFunctions.getDSID($connPropsRef));") + ev.copy(code = "", isNull = "false", value = dsidVar) } } diff --git a/core/src/main/scala/io/snappydata/impl/SmartConnectorRDDHelper.scala b/core/src/main/scala/io/snappydata/impl/SmartConnectorRDDHelper.scala index 942261d41f..19d49527fd 100644 --- a/core/src/main/scala/io/snappydata/impl/SmartConnectorRDDHelper.scala +++ b/core/src/main/scala/io/snappydata/impl/SmartConnectorRDDHelper.scala @@ -29,15 +29,15 @@ import io.snappydata.Constant import io.snappydata.collection.ObjectObjectHashMap import io.snappydata.thrift.internal.ClientPreparedStatement -import org.apache.spark.Partition import org.apache.spark.sql.SnappySession -import org.apache.spark.sql.collection.{SmartExecutorBucketPartition, Utils} +import org.apache.spark.sql.collection.SmartExecutorBucketPartition import org.apache.spark.sql.execution.ConnectionPool import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry import org.apache.spark.sql.row.SnappyStoreClientDialect import org.apache.spark.sql.sources.ConnectionProperties import org.apache.spark.sql.store.StoreUtils +import org.apache.spark.{Partition, SparkEnv} final class SmartConnectorRDDHelper { @@ -121,6 +121,16 @@ object SmartConnectorRDDHelper { var snapshotTxIdForRead: ThreadLocal[String] = new ThreadLocal[String] var snapshotTxIdForWrite: ThreadLocal[String] = new ThreadLocal[String] + private lazy val preferHostName: Boolean = SparkEnv.get match { + case null => false + case env => + val executors = env.blockManager.master.getStorageStatus + if (executors.length > 0 && executors(0).blockManagerId.executorId != "driver") { + val host = executors(0).blockManagerId.host + host.indexOf('.') == -1 && host.indexOf("::") == -1 + } else false + } + def getPartitions(bucketToServerList: Array[ArrayBuffer[(String, String)]]): Array[Partition] = { val numPartitions = bucketToServerList.length val partitions = new Array[Partition](numPartitions) @@ -138,29 +148,15 @@ object SmartConnectorRDDHelper { private def useLocatorUrl(hostList: ArrayBuffer[(String, String)]): Boolean = hostList.isEmpty - private def preferHostName(session: SnappySession): Boolean = { - // check if Spark executors are using IP addresses or host names - Utils.executorsListener(session.sparkContext) match { - case Some(l) => - val preferHost = l.activeStorageStatusList.collectFirst { - case status if status.blockManagerId.executorId != "driver" => - val host = status.blockManagerId.host - host.indexOf('.') == -1 && host.indexOf("::") == -1 - } - preferHost.isDefined && preferHost.get - case _ => false - } - } - def setBucketToServerMappingInfo(bucketToServerMappingStr: String, session: SnappySession): Array[ArrayBuffer[(String, String)]] = { - val urlPrefix = "jdbc:" + Constant.JDBC_URL_PREFIX + val urlPrefix = Constant.DEFAULT_THIN_CLIENT_URL // no query routing or load-balancing val urlSuffix = "/" + ClientAttribute.ROUTE_QUERY + "=false;" + ClientAttribute.LOAD_BALANCE + "=false" if (bucketToServerMappingStr != null) { // check if Spark executors are using IP addresses or host names - val preferHost = preferHostName(session) + val preferHost = preferHostName val arr: Array[String] = bucketToServerMappingStr.split(":") var orphanBuckets: ArrayBuffer[Int] = null val noOfBuckets = arr(0).toInt @@ -212,8 +208,8 @@ object SmartConnectorRDDHelper { def setReplicasToServerMappingInfo(replicaNodesStr: String, session: SnappySession): Array[ArrayBuffer[(String, String)]] = { // check if Spark executors are using IP addresses or host names - val preferHost = preferHostName(session) - val urlPrefix = "jdbc:" + Constant.JDBC_URL_PREFIX + val preferHost = preferHostName + val urlPrefix = Constant.DEFAULT_THIN_CLIENT_URL // no query routing or load-balancing val urlSuffix = "/" + ClientAttribute.ROUTE_QUERY + "=false;" + ClientAttribute.LOAD_BALANCE + "=false" diff --git a/core/src/main/scala/io/snappydata/util/ServiceUtils.scala b/core/src/main/scala/io/snappydata/util/ServiceUtils.scala index a58e401d2a..6f25ca21fa 100644 --- a/core/src/main/scala/io/snappydata/util/ServiceUtils.scala +++ b/core/src/main/scala/io/snappydata/util/ServiceUtils.scala @@ -138,7 +138,7 @@ object ServiceUtils { org.apache.spark.sql.collection.Utils.getClientHostPort(locator._2) }).mkString(",") - "jdbc:" + Constant.SNAPPY_URL_PREFIX + (if (locatorUrl.contains(",")) { + Constant.DEFAULT_THIN_CLIENT_URL + (if (locatorUrl.contains(",")) { locatorUrl.substring(0, locatorUrl.indexOf(",")) + "/;secondary-locators=" + locatorUrl.substring(locatorUrl.indexOf(",") + 1) } else locatorUrl + "/") diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala index d29095ce1f..e1ad6bfdf2 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala @@ -19,8 +19,8 @@ package org.apache.spark.sql import java.util.concurrent.ConcurrentHashMap import com.gemstone.gemfire.internal.shared.SystemProperties -import io.snappydata.QueryHint import io.snappydata.collection.{ObjectObjectHashMap, OpenHashSet} +import io.snappydata.{HintName, QueryHint} import org.parboiled2._ import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan @@ -39,17 +39,17 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { private[sql] final val queryHints: ConcurrentHashMap[String, String] = new ConcurrentHashMap[String, String](4, 0.7f, 1) - @volatile private final var _planHints: java.util.Stack[(String, String)] = _ + @volatile private final var _planHints: java.util.Stack[(QueryHint.Type, HintName.Type)] = _ /** * Tracks the hints that need to be applied at current plan level and will be * wrapped by LogicalPlanWithHints */ - private[sql] final def planHints: java.util.Stack[(String, String)] = { + private[sql] final def planHints: java.util.Stack[(QueryHint.Type, HintName.Type)] = { val hints = _planHints if (hints ne null) hints else synchronized { - if (_planHints eq null) _planHints = new java.util.Stack[(String, String)] + if (_planHints eq null) _planHints = new java.util.Stack[(QueryHint.Type, HintName.Type)] _planHints } } @@ -70,7 +70,17 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { */ protected def handleQueryHint(hint: String, hintValue: String): Unit = { // check for a plan-level hint - if (Consts.allowedPlanHints.contains(hint)) planHints.push(hint -> hintValue) + QueryHint.get(hint, Consts.allowedPlanHints) match { + case Some(h) => h.get(hintValue) match { + case Some(v) => planHints.push(h -> v) + case None => throw new ParseException(s"Unknown hint name '$hintValue' for $hint. " + + s"Expected one of ${h.values.mkString(",")}") + } + case _ => + } + // put all hints into the queryHints map including planHints (helps plan caching + // to determine whether or not to re-use the LogicalPlan that does not have + // physical plan information that planHints effect) queryHints.put(hint, hintValue) } @@ -155,7 +165,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def identifier: Rule1[String] = rule { - unquotedIdentifier ~> { (s: String) => + unquotedIdentifier ~> { s: String => val ucase = Utils.toUpperCase(s) test(!Consts.reservedKeywords.contains(ucase)) ~ push(if (caseSensitive) s else ucase) @@ -164,10 +174,10 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def quotedIdentifier: Rule1[String] = rule { - atomic('`' ~ capture((noneOf("`") | "``"). +) ~ '`') ~ ws ~> { (s: String) => + atomic('`' ~ capture((noneOf("`") | "``"). +) ~ '`') ~ ws ~> { s: String => if (s.indexOf("``") >= 0) s.replace("``", "`") else s } | - atomic('"' ~ capture((noneOf("\"") | "\"\""). +) ~ '"') ~ ws ~> { (s: String) => + atomic('"' ~ capture((noneOf("\"") | "\"\""). +) ~ '"') ~ ws ~> { s: String => if (s.indexOf("\"\"") >= 0) s.replace("\"\"", "\"") else s } } @@ -178,7 +188,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { * interpreted as a strictIdentifier. */ protected final def strictIdentifier: Rule1[String] = rule { - unquotedIdentifier ~> { (s: String) => + unquotedIdentifier ~> { s: String => val ucase = Utils.toUpperCase(s) test(!Consts.allKeywords.contains(ucase)) ~ push(if (caseSensitive) s else ucase) @@ -303,7 +313,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } } -final class Keyword private[sql] (s: String) { +final class Keyword private[sql](s: String) { val lower: String = Utils.toLowerCase(s) val upper: String = Utils.toUpperCase(s) } @@ -343,7 +353,7 @@ object SnappyParserConsts { * Define the hints that need to be applied at plan-level and will be * wrapped by LogicalPlanWithHints */ - final val allowedPlanHints: List[String] = List(QueryHint.JoinType.toString) + final val allowedPlanHints: Array[QueryHint.Type] = Array(QueryHint.JoinType) // -10 in sequence will mean all arguments, -1 will mean all odd argument and // -2 will mean all even arguments. -3 will mean all arguments except those listed after it. @@ -426,6 +436,7 @@ object SnappyParserConsts { final val EXISTS: Keyword = reservedKeyword("exists") final val FALSE: Keyword = reservedKeyword("false") final val FROM: Keyword = reservedKeyword("from") + final val FUNCTION: Keyword = reservedKeyword("function") final val GROUP: Keyword = reservedKeyword("group") final val HAVING: Keyword = reservedKeyword("having") final val IN: Keyword = reservedKeyword("in") @@ -457,10 +468,6 @@ object SnappyParserConsts { final val WHEN: Keyword = reservedKeyword("when") final val WHERE: Keyword = reservedKeyword("where") final val WITH: Keyword = reservedKeyword("with") - final val FUNCTION: Keyword = reservedKeyword("function") - - - // marked as internal keywords to prevent use in SQL final val HIVE_METASTORE: Keyword = reservedKeyword(SystemProperties.SNAPPY_HIVE_METASTORE) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 113b917533..d74bdaaccd 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -44,7 +44,6 @@ import org.apache.spark.memory.MemoryManagerCallback import org.apache.spark.rdd.RDD import org.apache.spark.scheduler.{SparkListener, SparkListenerApplicationEnd} import org.apache.spark.sql.catalyst.expressions.SortDirection -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.ConnectionPool import org.apache.spark.sql.execution.columnar.ExternalStoreUtils @@ -845,7 +844,7 @@ object SnappyContext extends Logging { classOf[execution.row.DefaultSource].getCanonicalName, "org.apache.spark.sql.sampling.DefaultSource" ) - private val builtinSources = new CaseInsensitiveMap(Map( + private lazy val builtinSources = SparkSupport.internals().createCaseInsensitiveMap(Map( ParserConsts.COLUMN_SOURCE -> classOf[execution.columnar.impl.DefaultSource].getCanonicalName, ParserConsts.ROW_SOURCE -> classOf[execution.row.DefaultSource].getCanonicalName, SAMPLE_SOURCE -> SAMPLE_SOURCE_CLASS, @@ -1172,9 +1171,8 @@ object SnappyContext extends Logging { } ServiceUtils.invokeStopFabricServer(sc, props) } - // clear static objects on the driver - clearStaticArtifacts() + clearStaticArtifacts(sc) contextLock.synchronized { _sharedState = null @@ -1184,6 +1182,8 @@ object SnappyContext extends Logging { } } MemoryManagerCallback.resetMemoryManager() + } else { + SparkSupport.clear(sc) } contextLock.synchronized { _clusterMode = null @@ -1194,12 +1194,12 @@ object SnappyContext extends Logging { } /** Cleanup static artifacts on this lead/executor. */ - def clearStaticArtifacts(): Unit = { + def clearStaticArtifacts(context: SparkContext): Unit = { CachedDataFrame.clear() ConnectionPool.clear() CodeGeneration.clearAllCache(skipTypeCache = false) HashedObjectCache.close() - SparkSession.sqlListener.set(null) + SparkSupport.clear(context) ServiceUtils.clearStaticArtifacts() } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index 7b4f6ea208..a70e33d6d6 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -22,12 +22,12 @@ import java.io.File import java.lang import java.nio.file.{Files, Paths} import java.sql.SQLException +import java.util.Locale import java.util.Map.Entry import java.util.function.Consumer import scala.collection.mutable.ArrayBuffer import scala.util.Try -import scala.util.control.NonFatal import com.gemstone.gemfire.SystemFailure import com.pivotal.gemfirexd.internal.engine.Misc @@ -37,13 +37,12 @@ import io.snappydata.{Constant, QueryHint} import org.parboiled2._ import shapeless.{::, HNil} -import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation import org.apache.spark.sql.catalyst.catalog.{CatalogDatabase, FunctionResource, FunctionResourceType} import org.apache.spark.sql.catalyst.expressions._ import org.apache.spark.sql.catalyst.plans.QueryPlan import org.apache.spark.sql.catalyst.plans.logical._ -import org.apache.spark.sql.catalyst.{FunctionIdentifier, SQLBuilder, TableIdentifier} +import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.command._ @@ -58,7 +57,7 @@ import org.apache.spark.sql.{SnappyParserConsts => Consts} import org.apache.spark.streaming._ abstract class SnappyDDLParser(session: SparkSession) - extends SnappyBaseParser(session) { + extends SnappyBaseParser(session) with SparkSupport { final def ALL: Rule0 = rule { keyword(Consts.ALL) } final def AND: Rule0 = rule { keyword(Consts.AND) } @@ -335,14 +334,13 @@ abstract class SnappyDDLParser(session: SparkSession) identifier ~ ws ~> {(ldapOpt: Any, x) => ldapOpt.asInstanceOf[Option[String]].map(_ + x).getOrElse(x)} ). + (commaSep) ~> { - (policyTo: Any) => policyTo.asInstanceOf[Seq[String]].map(_.trim) - }).? ~> { (toOpt: Any) => + policyTo: Any => policyTo.asInstanceOf[Seq[String]].map(_.trim) + }).? ~> { toOpt: Any => toOpt match { case Some(x) => x.asInstanceOf[Seq[String]] case _ => Seq(SnappyParserConsts.CURRENT_USER.upper) } } - } protected def createPolicy: Rule1[LogicalPlan] = rule { @@ -549,7 +547,7 @@ abstract class SnappyDDLParser(session: SparkSession) protected final def resourceType: Rule1[FunctionResource] = rule { identifier ~ stringLiteral ~> { (rType: String, path: String) => - val resourceType = rType.toLowerCase + val resourceType = rType.toLowerCase(Locale.ROOT) resourceType match { case "jar" => FunctionResource(FunctionResourceType.fromString(resourceType), path) @@ -560,6 +558,7 @@ abstract class SnappyDDLParser(session: SparkSession) } def checkExists(resource: FunctionResource): Unit = { + // TODO: SW: why only local "jar" type resources supported? if (!new File(resource.uri).exists()) { throw Utils.analysisException(s"No file named ${resource.uri} exists") } @@ -575,25 +574,23 @@ abstract class SnappyDDLParser(session: SparkSession) * }}} */ protected def createFunction: Rule1[LogicalPlan] = rule { - CREATE ~ (TEMPORARY ~ push(true)).? ~ FUNCTION ~ functionIdentifier ~ AS ~ - qualifiedName ~ RETURNS ~ columnDataType ~ USING ~ resourceType ~> - { (te: Any, functionIdent: FunctionIdentifier, className: String, - t: DataType, funcResource : FunctionResource) => + CREATE ~ (OR ~ REPLACE ~ push(true)).? ~ (TEMPORARY ~ push(true)).? ~ FUNCTION ~ + ifNotExists ~ functionIdentifier ~ AS ~ qualifiedName ~ RETURNS ~ columnDataType ~ + USING ~ (resourceType + commaSep) ~> + { (replace: Any, te: Any, ignoreIfExists: Boolean, functionIdent: FunctionIdentifier, + className: String, t: DataType, resources: Any) => val isTemp = te.asInstanceOf[Option[Boolean]].isDefined - val funcResources = Seq(funcResource) + val funcResources = resources.asInstanceOf[Seq[FunctionResource]] funcResources.foreach(checkExists) val catalogString = t match { case VarcharType(Int.MaxValue) => "string" case _ => t.catalogString } val classNameWithType = className + "__" + catalogString - CreateFunctionCommand( - functionIdent.database, - functionIdent.funcName, - classNameWithType, - funcResources, - isTemp) + internals.newCreateFunctionCommand(functionIdent.database, + functionIdent.funcName, classNameWithType, funcResources, isTemp, + ignoreIfExists, replace != None) } } @@ -682,8 +679,7 @@ abstract class SnappyDDLParser(session: SparkSession) ((extended: Any, tableIdent: TableIdentifier) => { // ensure columns are sent back as CLOB for large results with EXTENDED queryHints.put(QueryHint.ColumnsAsClob.toString, "data_type,comment") - DescribeTableCommand(tableIdent, Map.empty[String, String], extended - .asInstanceOf[Option[Boolean]].isDefined, isFormatted = false) + internals.newDescribeTableCommand(tableIdent, Map.empty, extended != None) }) ) } @@ -704,14 +700,14 @@ abstract class SnappyDDLParser(session: SparkSession) UNCACHE ~ TABLE ~ ifExists ~ tableIdentifier ~> ((ifExists: Boolean, tableIdent: TableIdentifier) => UncacheTableCommand(tableIdent, ifExists)) | - CLEAR ~ CACHE ~> (() => ClearCacheCommand) + CLEAR ~ CACHE ~> (() => internals.newClearCacheCommand()) } protected def set: Rule1[LogicalPlan] = rule { SET ~ ( CURRENT.? ~ SCHEMA ~ '='.? ~ ws ~ identifier ~> ((schemaName: String) => SetSchema(schemaName)) | - capture(ANY.*) ~> { (rest: String) => + capture(ANY.*) ~> { rest: String => val separatorIndex = rest.indexOf('=') if (separatorIndex >= 0) { val key = rest.substring(0, separatorIndex).trim @@ -979,11 +975,11 @@ case class DeployCommand( alias: String, repos: Option[String], jarCache: Option[String], - restart: Boolean) extends RunnableCommand { + restart: Boolean) extends RunnableCommand with SparkSupport { override def run(sparkSession: SparkSession): Seq[Row] = { try { - val jarsstr = SparkSubmitUtils.resolveMavenCoordinates(coordinates, repos, jarCache) + val jarsstr = internals.resolveMavenCoordinates(coordinates, repos, jarCache, Nil) if (jarsstr.nonEmpty) { val jars = jarsstr.split(",") val sc = sparkSession.sparkContext @@ -1114,7 +1110,7 @@ case class CreateSnappyViewCommand(name: TableIdentifier, allowExisting: Boolean, replace: Boolean, viewType: ViewType) - extends RunnableCommand { + extends RunnableCommand with SparkSupport { override def run(sparkSession: SparkSession): Seq[Row] = { if (viewType != PersistedView) { @@ -1147,16 +1143,7 @@ case class CreateSnappyViewCommand(name: TableIdentifier, val actualSchemaJson = aliasedPlan.schema.json - val viewSQL: String = new SQLBuilder(aliasedPlan).toSQL - - // Validate the view SQL - make sure we can parse it and analyze it. - // If we cannot analyze the generated query, there is probably a bug in SQL generation. - try { - sparkSession.sql(viewSQL).queryExecution.assertAnalyzed() - } catch { - case NonFatal(e) => - throw new RuntimeException(s"Failed to analyze the canonicalized SQL: $viewSQL", e) - } + val viewSQL = internals.createViewSQL(sparkSession, aliasedPlan, originalText) var opts = JdbcExtendedUtils.addSplitProperty(viewSQL, Constant.SPLIT_VIEW_TEXT_PROPERTY, properties) opts = JdbcExtendedUtils.addSplitProperty(originalText.getOrElse(viewSQL), diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala b/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala index 5e43e1c5c3..7b239ad696 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala @@ -62,7 +62,7 @@ object snappy extends Serializable { def unwrapSubquery(plan: LogicalPlan): LogicalPlan = { plan match { - case SubqueryAlias(_, child, _) => unwrapSubquery(child) + case s: SubqueryAlias => unwrapSubquery(s.child) case _ => plan } } @@ -172,7 +172,7 @@ object snappy extends Serializable { parColsMethod.setAccessible(true) implicit class DataFrameWriterExtensions(writer: DataFrameWriter[_]) - extends Serializable { + extends Serializable with SparkSupport { /** * "Puts" the content of the [[DataFrame]] to the specified table. It @@ -204,10 +204,9 @@ object snappy extends Serializable { session.sessionState.catalog.newQualifiedTableName(tableName)), input)) .executedPlan.executeCollect() - session.getContextObject[LogicalPlan](SnappySession.CACHED_PUTINTO_UPDATE_PLAN). - foreach { cachedPlan => - session.sharedState.cacheManager.uncacheQuery(session, cachedPlan, blocking = true) - } + session.getContextObject[LogicalPlan](SnappySession.CACHED_PUTINTO_UPDATE_PLAN).foreach { + cached => internals.uncacheQuery(session, cached, blocking = true) + } } def deleteFrom(tableName: String): Unit = { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index a9cd4b6384..1a97101558 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -35,8 +35,8 @@ import org.apache.spark.sql.catalyst.plans._ import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, _} import org.apache.spark.sql.catalyst.{CatalystTypeConverters, FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.execution.command._ -import org.apache.spark.sql.internal.{LikeEscapeSimplification, LogicalPlanWithHints} -import org.apache.spark.sql.sources.{Delete, DeleteFromTable, Insert, PutIntoTable, Update} +import org.apache.spark.sql.internal.LikeEscapeSimplification +import org.apache.spark.sql.sources.{Delete, DeleteFromTable, PutIntoTable, Update} import org.apache.spark.sql.streaming.WindowLogicalPlan import org.apache.spark.sql.types._ import org.apache.spark.sql.{SnappyParserConsts => Consts} @@ -166,19 +166,19 @@ class SnappyParser(session: SnappySession) } private def updatePerTableQueryHint(tableIdent: TableIdentifier, - optAlias: Option[String]): Unit = { + optAlias: Option[(String, Seq[String])]): Unit = { if (queryHints.isEmpty) return val indexHint = queryHints.remove(QueryHint.Index.toString) if (indexHint ne null) { val table = optAlias match { - case Some(alias) => alias + case Some((alias, _)) => alias case _ => tableIdent.unquotedString } queryHints.put(QueryHint.Index.toString + table, indexHint) } } - private final def assertNoQueryHint(hint: QueryHint.Value, msg: => String) = { + private final def assertNoQueryHint(hint: QueryHint.Value, msg: => String): Unit = { if (!queryHints.isEmpty) { val hintStr = hint.toString queryHints.forEach(new BiConsumer[String, String] { @@ -336,9 +336,17 @@ class SnappyParser(session: SnappySession) ) ~ ws } + protected final def identifierList: Rule1[Seq[String]] = rule { + '(' ~ ws ~ (identifier + commaSep) ~ ')' ~ ws + } + final def namedExpression: Rule1[Expression] = rule { expression ~ ( - AS ~ identifier ~> ((e: Expression, a: String) => Alias(e, a)()) | + AS ~ ( + identifierList ~> ((e: Expression, ids: Seq[String]) => MultiAlias(e, ids)) | + identifier ~> ((e: Expression, a: String) => Alias(e, a)()) + ) | + identifierList ~> ((e: Expression, ids: Seq[String]) => MultiAlias(e, ids)) | strictIdentifier ~> ((e: Expression, a: String) => Alias(e, a)()) | MATCH.asInstanceOf[Rule[Expression::HNil, Expression::HNil]] ) @@ -533,21 +541,6 @@ class SnappyParser(session: SnappySession) (d, s.asInstanceOf[Option[Duration]])) } - protected final def extractGroupingSet( - child: LogicalPlan, - aggregations: Seq[NamedExpression], - groupByExprs: Seq[Expression], - groupingSets: Seq[Seq[Expression]]): GroupingSets = { - val keyMap = groupByExprs.zipWithIndex.toMap - val numExpressions = keyMap.size - val mask = (1 << numExpressions) - 1 - val bitmasks: Seq[Int] = groupingSets.map(set => set.foldLeft(mask)((bitmap, col) => { - require(keyMap.contains(col), s"$col doesn't show up in the GROUP BY list") - bitmap & ~(1 << (numExpressions - 1 - keyMap(col))) - })) - GroupingSets(bitmasks, groupByExprs, child, aggregations) - } - protected final def groupingSetExpr: Rule1[Seq[Expression]] = rule { '(' ~ ws ~ (expression * commaSep) ~ ')' ~ ws ~> ((e: Any) => e.asInstanceOf[Seq[Expression]]) | @@ -583,47 +576,69 @@ class SnappyParser(session: SnappySession) }) } - protected final def relationFactor: Rule1[LogicalPlan] = rule { - tableIdentifier ~ streamWindowOptions.? ~ - (AS ~ identifier | strictIdentifier).? ~> - ((tableIdent: TableIdentifier, - window: Any, alias: Any) => window.asInstanceOf[Option[ - (Duration, Option[Duration])]] match { - case None => - val optAlias = alias.asInstanceOf[Option[String]] - updatePerTableQueryHint(tableIdent, optAlias) - UnresolvedRelation(tableIdent, optAlias) - case Some(win) => - val optAlias = alias.asInstanceOf[Option[String]] - updatePerTableQueryHint(tableIdent, optAlias) - WindowLogicalPlan(win._1, win._2, - UnresolvedRelation(tableIdent, optAlias)) - }) | - '(' ~ ws ~ start ~ ')' ~ ws ~ streamWindowOptions.? ~ - (AS ~ identifier | strictIdentifier).? ~> { (child: LogicalPlan, w: Any, alias: Any) => - val aliasPlan = alias.asInstanceOf[Option[String]] match { - case None => child - case Some(name) => SubqueryAlias(name, child, None) - } - w.asInstanceOf[Option[(Duration, Option[Duration])]] match { - case None => - assertNoQueryHint(QueryHint.Index, - s"${QueryHint.Index} cannot be applied to derived table $alias") - aliasPlan - case Some(win) => - assertNoQueryHint(QueryHint.Index, - s"${QueryHint.Index} cannot be applied to derived table $alias") - WindowLogicalPlan(win._1, win._2, aliasPlan) - } + protected final def tableAlias: Rule1[(String, Seq[String])] = rule { + (AS ~ identifier | strictIdentifier) ~ identifierList.? ~> + ((alias: String, columnAliases: Any) => columnAliases match { + case None => (alias, Nil) + case Some(aliases: Seq[_]) => (alias, aliases.asInstanceOf[Seq[String]]) + }) + } + + protected final def handleSubqueryAlias(aliasSpec: Option[(String, Seq[String])], + child: LogicalPlan): LogicalPlan = aliasSpec match { + case None => child + case Some((alias, columnAliases)) => + internals.newUnresolvedColumnAliases(columnAliases, internals.newSubqueryAlias(alias, child)) + } + + protected final def handleWindowSpec(window: Option[(Duration, Option[Duration])], + child: LogicalPlan, alias: Option[(String, Seq[String])], + isSubquery: Boolean = true): LogicalPlan = { + if (isSubquery) { + assertNoQueryHint(QueryHint.Index, + s"${QueryHint.Index} cannot be applied to derived table $alias") + } + window match { + case None => child + case Some(win) => WindowLogicalPlan(win._1, win._2, child) } } + protected final def baseRelation: Rule1[LogicalPlan] = rule { + tableIdentifier ~ streamWindowOptions.? ~ tableAlias.? ~> + ((tableIdent: TableIdentifier, w: Any, a: Any) => { + val optAlias = a.asInstanceOf[Option[(String, Seq[String])]] + updatePerTableQueryHint(tableIdent, optAlias) + val window = w.asInstanceOf[Option[(Duration, Option[Duration])]] + val plan = optAlias match { + case None => internals.newUnresolvedRelation(tableIdent, None) + case Some((alias, columnAliases)) => + internals.newUnresolvedColumnAliases(columnAliases, + internals.newUnresolvedRelation(tableIdent, Some(alias))) + } + handleWindowSpec(window, plan, optAlias, isSubquery = false) + }) | + '(' ~ ws ~ ( + start ~ ')' ~ ws ~ streamWindowOptions.? ~ tableAlias.? ~> { (child: LogicalPlan, + w: Any, a: Any) => + val alias = a.asInstanceOf[Option[(String, Seq[String])]] + val plan = handleSubqueryAlias(alias, child) + handleWindowSpec(w.asInstanceOf[Option[(Duration, Option[Duration])]], plan, alias) + } | + relation ~ ')' ~ ws ~ streamWindowOptions.? ~ tableAlias.? ~> { (child: LogicalPlan, + w: Any, a: Any) => + val alias = a.asInstanceOf[Option[(String, Seq[String])]] + val plan = handleSubqueryAlias(alias, child) + handleWindowSpec(w.asInstanceOf[Option[(Duration, Option[Duration])]], plan, alias) + } + ) + } + protected final def inlineTable: Rule1[LogicalPlan] = rule { VALUES ~ push(tokenize) ~ push(canTokenize) ~ DISABLE_TOKENIZE ~ - (expression + commaSep) ~ AS.? ~ identifier.? ~ - ('(' ~ ws ~ (identifier + commaSep) ~ ')' ~ ws).? ~> + (expression + commaSep) ~ tableAlias.? ~> ((tokenized: Boolean, canTokenized: Boolean, - valuesExpr: Seq[Expression], alias: Any, identifiers: Any) => { + valuesExpr: Seq[Expression], a: Any) => { canTokenize = canTokenized tokenize = tokenized val rows = valuesExpr.map { @@ -632,14 +647,17 @@ class SnappyParser(session: SnappySession) // e.g. values 1, 2, 3 case child => Seq(child) } + val (alias, identifiers) = a match { + case None => (None, Nil) + case Some((id: String, ids: Seq[_])) => (Some(id), ids.asInstanceOf[Seq[String]]) + } val aliases = identifiers match { - case None => Seq.tabulate(rows.head.size)(i => s"col${i + 1}") - case Some(ids) => ids.asInstanceOf[Seq[String]] + case l if l.isEmpty => Seq.tabulate(rows.head.size)(i => s"col${i + 1}") + case _ => identifiers } alias match { case None => UnresolvedInlineTable(aliases, rows) - case Some(a) => SubqueryAlias(a.asInstanceOf[String], - UnresolvedInlineTable(aliases, rows), None) + case Some(id) => internals.newSubqueryAlias(id, UnresolvedInlineTable(aliases, rows)) } }) } @@ -677,7 +695,7 @@ class SnappyParser(session: SnappySession) case Some(true) => NullsFirst case None => direction.defaultNullOrdering } - SortOrder(child, direction, nulls) + internals.newSortOrder(child, direction, nulls) }) } @@ -691,7 +709,8 @@ class SnappyParser(session: SnappySession) distributeBy | CLUSTER ~ BY ~ (expression + commaSep) ~> ((e: Seq[Expression]) => (l: LogicalPlan) => Sort(e.map(SortOrder(_, Ascending)), global = false, - RepartitionByExpression(e, l)))).? ~ + internals.newRepartitionByExpression(e, + session.sessionState.conf.numShufflePartitions, l)))).? ~ (WINDOW ~ ((identifier ~ AS ~ windowSpec ~> ((id: String, w: WindowSpec) => id -> w)) + commaSep)).? ~ ((LIMIT ~ expressionNoTokens) | fetchExpression).? ~> { @@ -732,7 +751,8 @@ class SnappyParser(session: SnappySession) protected final def distributeBy: Rule1[LogicalPlan => LogicalPlan] = rule { DISTRIBUTE ~ BY ~ (expression + commaSep) ~> ((e: Seq[Expression]) => - (l: LogicalPlan) => RepartitionByExpression(e, l)) + (l: LogicalPlan) => internals.newRepartitionByExpression( + e, session.sessionState.conf.numShufflePartitions, l)) } protected final def windowSpec: Rule1[WindowSpec] = rule { @@ -750,44 +770,49 @@ class SnappyParser(session: SnappySession) protected final def windowFrame: Rule1[SpecifiedWindowFrame] = rule { (RANGE ~> (() => RangeFrame) | ROWS ~> (() => RowFrame)) ~ ( BETWEEN ~ frameBound ~ AND ~ frameBound ~> ((t: FrameType, - s: FrameBoundary, e: FrameBoundary) => SpecifiedWindowFrame(t, s, e)) | - frameBound ~> ((t: FrameType, s: FrameBoundary) => - SpecifiedWindowFrame(t, s, CurrentRow)) + s: Any, e: Any) => internals.newSpecifiedWindowFrame(t, s, e)) | + frameBound ~> ((t: FrameType, s: Any) => + internals.newSpecifiedWindowFrame(t, s, CurrentRow)) ) } - protected final def frameBound: Rule1[FrameBoundary] = rule { + protected final def frameBound: Rule1[Any] = rule { UNBOUNDED ~ ( - PRECEDING ~> (() => UnboundedPreceding) | - FOLLOWING ~> (() => UnboundedFollowing) + PRECEDING ~> (() => internals.newFrameBoundary(FrameBoundaryType.UnboundedPreceding)) | + FOLLOWING ~> (() => internals.newFrameBoundary(FrameBoundaryType.UnboundedFollowing)) ) | - CURRENT ~ ROW ~> (() => CurrentRow) | + CURRENT ~ ROW ~> (() => internals.newFrameBoundary(FrameBoundaryType.CurrentRow)) | integral ~ ( - PRECEDING ~> ((num: String) => ValuePreceding(num.toInt)) | - FOLLOWING ~> ((num: String) => ValueFollowing(num.toInt)) + PRECEDING ~> ((num: String) => + internals.newFrameBoundary(FrameBoundaryType.ValuePreceding, Some(Literal(num)))) | + FOLLOWING ~> ((num: String) => + internals.newFrameBoundary(FrameBoundaryType.ValueFollowing, Some(Literal(num)))) + ) | + expression ~ ( + PRECEDING ~> ((num: Expression) => + internals.newFrameBoundary(FrameBoundaryType.ValuePreceding, Some(num))) | + FOLLOWING ~> ((num: Expression) => + internals.newFrameBoundary(FrameBoundaryType.ValueFollowing, Some(num))) ) } protected final def tableValuedFunctionExpressions: Rule1[Seq[Expression]] = rule { '(' ~ ws ~ (expression + commaSep).? ~ ')' ~> - ((e: Any) => e.asInstanceOf[Option[Vector[Expression]]] match { + ((e: Any) => e.asInstanceOf[Option[Seq[Expression]]] match { case Some(ve) => ve case _ => Nil }) } - protected final def relationWithExternal: Rule1[LogicalPlan] = rule { - ((inlineTable | relationFactor) ~ tableValuedFunctionExpressions.?) ~> - ((lp: LogicalPlan, se: Any) => { - se.asInstanceOf[Option[Seq[Expression]]] match { - case None => lp - case Some(exprs) => - val ur = lp.asInstanceOf[UnresolvedRelation] - val fname = org.apache.spark.sql.collection.Utils.toLowerCase( - ur.tableIdentifier.identifier) - UnresolvedTableValuedFunction(fname, exprs) - } - }) + protected final def relationPrimary: Rule1[LogicalPlan] = rule { + inlineTable | baseRelation | + identifier ~ '(' ~ ws ~ (expression + commaSep) ~ ')' ~ ws ~ tableAlias.? ~> + ((name: String, args: Seq[Expression], a: Any) => a match { + case None => internals.newUnresolvedTableValuedFunction(name, args, Nil) + case Some((alias: String, columnAliases: Seq[_])) => + internals.newSubqueryAlias(alias, internals.newUnresolvedTableValuedFunction( + name, args, columnAliases.asInstanceOf[Seq[String]])) + }) } protected final def withHints(plan: LogicalPlan): LogicalPlan = { @@ -796,9 +821,9 @@ class SnappyParser(session: SnappySession) val planHints = this.planHints while (planHints.size() > 0) { newPlan match { - case l: LogicalPlanWithHints => - newPlan = new LogicalPlanWithHints(l.child, l.hints + planHints.pop()) - case _ => newPlan = new LogicalPlanWithHints(plan, Map(planHints.pop())) + case p if internals.isHintPlan(p) => + newPlan = internals.newLogicalPlanWithHints(p, internals.getHints(p) + planHints.pop()) + case _ => newPlan = internals.newLogicalPlanWithHints(plan, Map(planHints.pop())) } } newPlan @@ -806,8 +831,8 @@ class SnappyParser(session: SnappySession) } protected final def relation: Rule1[LogicalPlan] = rule { - relationWithExternal ~> ((plan) => withHints(plan)) ~ ( - joinType.? ~ JOIN ~ (relationWithExternal ~> ((plan) => withHints(plan))) ~ ( + relationPrimary ~> (plan => withHints(plan)) ~ ( + joinType.? ~ JOIN ~ (relationPrimary ~> (plan => withHints(plan))) ~ ( ON ~ expression ~> ((l: LogicalPlan, t: Any, r: LogicalPlan, e: Expression) => Join(l, r, t.asInstanceOf[Option[JoinType]].getOrElse(Inner), Some(e))) | USING ~ '(' ~ ws ~ (identifier + commaSep) ~ ')' ~ ws ~> @@ -817,7 +842,7 @@ class SnappyParser(session: SnappySession) MATCH ~> ((l: LogicalPlan, t: Option[JoinType], r: LogicalPlan) => Join(l, r, t.getOrElse(Inner), None)) ) | - NATURAL ~ joinType.? ~ JOIN ~ (relationWithExternal ~> ((plan) => withHints(plan))) ~> + NATURAL ~ joinType.? ~ JOIN ~ (relationPrimary ~> (plan => withHints(plan))) ~> ((l: LogicalPlan, t: Any, r: LogicalPlan) => Join(l, r, NaturalJoin(t.asInstanceOf[Option[JoinType]].getOrElse(Inner)), None)) ).* @@ -919,7 +944,7 @@ class SnappyParser(session: SnappySession) } else { UnresolvedAttribute(i1 +: rest.asInstanceOf[Seq[String]]) } - } | '*' ~ ws ~> { (i1: String) => + } | '*' ~ ws ~> { i1: String => UnresolvedStar(Some(Seq(i1))) }) | MATCH ~> UnresolvedAttribute.quoted _ @@ -950,7 +975,7 @@ class SnappyParser(session: SnappySession) (expression + commaSep) ~ ')' ~ ws ~> ((exprs: Seq[Expression]) => if (exprs.length == 1) exprs.head else CreateStruct(exprs) ) | - query ~ ')' ~ ws ~> { (plan: LogicalPlan) => + query ~ ')' ~ ws ~> { plan: LogicalPlan => session.planCaching = false // never cache scalar subquery plans ScalarSubquery(plan) } @@ -980,7 +1005,7 @@ class SnappyParser(session: SnappySession) q: LogicalPlan => LogicalPlan) => val base = f match { case Some(plan) => plan.asInstanceOf[LogicalPlan] - case _ => OneRowRelation + case _ => internals.newOneRowRelation() } val withFilter = w match { case Some(expr) => Filter(expr.asInstanceOf[Expression], base) @@ -992,15 +1017,16 @@ class SnappyParser(session: SnappySession) } val gr = g.asInstanceOf[Option[(Seq[Expression], Seq[Seq[Expression]], String)]] val withProjection = gr match { - case Some(x) => x._3 match { + case Some((groupByExprs, groupingSets, groupType)) => groupType match { // group by cols with rollup - case "ROLLUP" => Aggregate(Seq(Rollup(x._1)), expressions, withFilter) + case "ROLLUP" => Aggregate(Seq(Rollup(groupByExprs)), expressions, withFilter) // group by cols with cube - case "CUBE" => Aggregate(Seq(Cube(x._1)), expressions, withFilter) + case "CUBE" => Aggregate(Seq(Cube(groupByExprs)), expressions, withFilter) // group by cols with grouping sets()() - case "GROUPINGSETS" => extractGroupingSet(withFilter, expressions, x._1, x._2) + case "GROUPINGSETS" => internals.newGroupingSet( + groupingSets, groupByExprs, withFilter, expressions) // just "group by cols" - case _ => Aggregate(x._1, expressions, withFilter) + case _ => Aggregate(groupByExprs, expressions, withFilter) } case _ => Project(expressions, withFilter) } @@ -1067,7 +1093,7 @@ class SnappyParser(session: SnappySession) case Some(s) => s.map(UnresolvedAttribute.apply) case None => Nil } - Generate(UnresolvedGenerator(functionName, expressions), join = true, + internals.newGeneratePlan(UnresolvedGenerator(functionName, expressions), outer = o.asInstanceOf[Option[Boolean]].isDefined, Some(tableName), columnNames, child) }) @@ -1075,17 +1101,17 @@ class SnappyParser(session: SnappySession) protected final def insert: Rule1[LogicalPlan] = rule { INSERT ~ ((OVERWRITE ~ push(true)) | (INTO ~ push(false))) ~ - TABLE.? ~ relationFactor ~ subSelectQuery ~> ((o: Boolean, r: LogicalPlan, - s: LogicalPlan) => new Insert(r, Map.empty[String, - Option[String]], s, OverwriteOptions(o), ifNotExists = false)) + TABLE.? ~ baseRelation ~ subSelectQuery ~> ((overwrite: Boolean, r: LogicalPlan, + s: LogicalPlan) => internals.newInsertPlanWithCountOutput( + r, Map.empty[String, Option[String]], s, overwrite, ifNotExists = false)) } protected final def put: Rule1[LogicalPlan] = rule { - PUT ~ INTO ~ TABLE.? ~ relationFactor ~ subSelectQuery ~> PutIntoTable + PUT ~ INTO ~ TABLE.? ~ baseRelation ~ subSelectQuery ~> PutIntoTable } protected final def update: Rule1[LogicalPlan] = rule { - UPDATE ~ relationFactor ~ SET ~ TOKENIZE_BEGIN ~ (((identifier + ('.' ~ ws)) ~ + UPDATE ~ baseRelation ~ SET ~ TOKENIZE_BEGIN ~ (((identifier + ('.' ~ ws)) ~ '=' ~ ws ~ expression ~> ((cols: Seq[String], e: Expression) => UnresolvedAttribute(cols) -> e)) + commaSep) ~ TOKENIZE_END ~ (FROM ~ relations).? ~ (WHERE ~ TOKENIZE_BEGIN ~ expression ~ TOKENIZE_END).? ~> @@ -1106,7 +1132,7 @@ class SnappyParser(session: SnappySession) } protected final def delete: Rule1[LogicalPlan] = rule { - DELETE ~ FROM ~ relationFactor ~ ( + DELETE ~ FROM ~ baseRelation ~ ( WHERE ~ TOKENIZE_BEGIN ~ expression ~ TOKENIZE_END ~> ((base: LogicalPlan, expr: Expression) => Delete(base, Filter(expr, base), Nil)) | query ~> DeleteFromTable | @@ -1118,13 +1144,13 @@ class SnappyParser(session: SnappySession) WITH ~ ((identifier ~ AS.? ~ '(' ~ ws ~ query ~ ')' ~ ws ~> ((id: String, p: LogicalPlan) => (id, p))) + commaSep) ~ (query | insert) ~> ((r: Seq[(String, LogicalPlan)], s: LogicalPlan) => - With(s, r.map(ns => (ns._1, SubqueryAlias(ns._1, ns._2, None))))) + With(s, r.map(ns => (ns._1, internals.newSubqueryAlias(ns._1, ns._2))))) } protected def dmlOperation: Rule1[LogicalPlan] = rule { (INSERT ~ INTO | PUT ~ INTO) ~ tableIdentifier ~ ANY.* ~> ((r: TableIdentifier) => DMLExternalTable(r, - UnresolvedRelation(r), input.sliceString(0, input.length))) + internals.newUnresolvedRelation(r, None), input.sliceString(0, input.length))) } // It can be the following patterns: diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 0fce1fc82f..22243c632b 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -38,17 +38,17 @@ import com.pivotal.gemfirexd.internal.iapi.util.IdUtil import com.pivotal.gemfirexd.internal.iapi.{types => stypes} import com.pivotal.gemfirexd.internal.shared.common.{SharedUtils, StoredFormatIds} import io.snappydata.collection.ObjectObjectHashMap -import io.snappydata.{Constant, Property, SnappyDataFunctions, SnappyTableStatsProviderService} +import io.snappydata.{Constant, Property, SnappyTableStatsProviderService} import org.apache.spark.annotation.{DeveloperApi, Experimental} import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} import org.apache.spark.rdd.RDD -import org.apache.spark.scheduler.{SparkListener, SparkListenerApplicationEnd} +import org.apache.spark.scheduler.{SparkListener, SparkListenerApplicationEnd, SparkListenerEvent} import org.apache.spark.sql.catalyst.analysis.{EliminateSubqueryAliases, NoSuchTableException} import org.apache.spark.sql.catalyst.encoders._ import org.apache.spark.sql.catalyst.expressions.aggregate.AggregateExpression import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext -import org.apache.spark.sql.catalyst.expressions.{Alias, Ascending, AttributeReference, Descending, Exists, ExprId, Expression, GenericRow, ListQuery, ParamLiteral, PredicateSubquery, ScalarSubquery, SortDirection, TokenLiteral} +import org.apache.spark.sql.catalyst.expressions.{Alias, Ascending, AttributeReference, Descending, Exists, ExprId, Expression, GenericRow, ListQuery, ParamLiteral, PlanExpression, ScalarSubquery, SortDirection, TokenLiteral} import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, Union} import org.apache.spark.sql.catalyst.{DefinedByConstructorParams, InternalRow, ScalaReflection, TableIdentifier} import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils, WrappedInternalRow} @@ -61,7 +61,6 @@ import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JdbcUtils} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.BroadcastExchangeExec import org.apache.spark.sql.execution.joins.{BroadcastHashJoinExec, BroadcastNestedLoopJoinExec} -import org.apache.spark.sql.execution.ui.SparkListenerSQLPlanExecutionStart import org.apache.spark.sql.hive.{ConnectorCatalog, ExternalTableType, HiveClientUtil, QualifiedTableName, SnappySharedState, SnappyStoreHiveCatalog} import org.apache.spark.sql.internal.{BypassRowLevelSecurity, PreprocessTableInsertOrPut, SnappySessionState} import org.apache.spark.sql.policy.PolicyProperties @@ -75,8 +74,7 @@ import org.apache.spark.streaming.dstream.DStream import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.{Logging, ShuffleDependency, SparkContext, SparkEnv} - -class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { +class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSupport { self => @@ -151,7 +149,6 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { private[spark] def snappyContextFunctions = sessionState.contextFunctions SnappyContext.initGlobalSnappyContext(sparkContext, this) - SnappyDataFunctions.registerSnappyFunctions(sessionState.functionRegistry) snappyContextFunctions.registerSnappyFunctions(this) /** @@ -414,10 +411,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { keyVars: Seq[String]): Option[String] = getContextObject(ctx, "H", keyVars) private[sql] def clearContext(): Unit = synchronized { - getContextObject[LogicalPlan](SnappySession.CACHED_PUTINTO_UPDATE_PLAN). - foreach { cachedPlan => - sharedState.cacheManager.uncacheQuery(this, cachedPlan, blocking = true) - } + getContextObject[LogicalPlan](SnappySession.CACHED_PUTINTO_UPDATE_PLAN).foreach { cached => + internals.uncacheQuery(this, cached, blocking = true) + } contextObjects.clear() planCaching = Property.PlanCaching.get(sessionState.conf) sqlWarnings = null @@ -535,8 +531,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { } Dataset.ofRows(this, plan).unpersist(blocking = true) plan match { - case LogicalRelation(br, _, _) => - br match { + case lr: LogicalRelation => + lr.relation match { case d: DestroyRelation => d.truncate() case _ => if (!ignoreIfUnsupported) { throw new AnalysisException(s"Table $tableIdent cannot be truncated") @@ -1108,14 +1104,18 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { case _ => None } - val plan = relation.map(LogicalRelation(_)) + val plan = relation match { + case None => null + case Some(r) => internals.newLogicalRelation(r, None, None, + isStreaming = false) + } if (!SnappyContext.internalTableSources.exists(_.equals(source))) { sessionCatalog.registerDataSourceTable(tableIdent, userSpecifiedSchema, Array.empty[String], source, params, relation) } snappyContextFunctions.postRelationCreation(relation, this) - plan.orNull + plan } private[sql] def createTable( @@ -1206,7 +1206,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { val plan = new PreprocessTableInsertOrPut(sessionState.conf).apply( sessionState.catalog.lookupRelation(tableIdent)) EliminateSubqueryAliases(plan) match { - case LogicalRelation(ir: InsertableRelation, _, _) => Some(ir) + case lr: LogicalRelation if lr.relation.isInstanceOf[InsertableRelation] => + Some(lr.relation.asInstanceOf[InsertableRelation]) case o => throw new AnalysisException( s"Saving data in ${o.toString} is not supported.") } @@ -1245,7 +1246,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { try { ir.insert(data, overwrite) success = true - ir + ir.asInstanceOf[BaseRelation] } finally { if (!success) ir match { case dr: DestroyRelation => @@ -1259,8 +1260,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { userSpecifiedSchema = userSpecifiedSchema, partitionColumns = partitionColumns, options = params) - ds.write(mode, df) - ds.copy(userSpecifiedSchema = Some(df.schema.asNullable)).resolveRelation() + internals.writeToDataSource(ds, mode, df) } } @@ -1273,7 +1273,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { } snappyContextFunctions.postRelationCreation(relationOpt, this) } - LogicalRelation(relation, catalogTable = Some(tableIdent.getTable(this.sessionCatalog))) + internals.newLogicalRelation(relation, None, Some(tableIdent.getTable(this.sessionCatalog)), + isStreaming = false) } /** @@ -1360,8 +1361,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { // resolve whether table is external or not at source since the required // classes to resolve may not be available in embedded cluster val isExternal = planOpt match { - case Some(LogicalRelation(br, _, _)) => - sessionCatalog.getTableType(br) == ExternalTableType.External + case Some(lr: LogicalRelation) => + sessionCatalog.getTableType(lr.relation) == ExternalTableType.External case _ => false } sessionCatalog.asInstanceOf[ConnectorCatalog].connectorHelper @@ -1373,7 +1374,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { // additional cleanup for external and temp tables, if required planOpt match { - case Some(plan@LogicalRelation(br, _, _)) => + case Some(plan: LogicalRelation) => + val br = plan.relation br match { case p: ParentRelation => // fail if any existing dependents @@ -1469,8 +1471,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { } plan match { - case LogicalRelation(rls: RowLevelSecurityRelation, _, _) => - rls.enableOrDisableRowLevelSecurity(tableIdent, enableRls) + case lr: LogicalRelation if lr.relation.isInstanceOf[RowLevelSecurityRelation] => + lr.relation.asInstanceOf[RowLevelSecurityRelation].enableOrDisableRowLevelSecurity( + tableIdent, enableRls) sessionCatalog.invalidateAll() tableIdent.invalidate() SnappyStoreHiveCatalog.registerRelationDestroy() @@ -1492,7 +1495,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { throw new AnalysisException("alter table not supported for temp tables") } plan match { - case LogicalRelation(_: ColumnFormatRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] => throw new AnalysisException("alter table not supported for column tables") case _ => } @@ -1508,9 +1511,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { } plan match { - case LogicalRelation(ar: AlterableRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[AlterableRelation] => sessionCatalog.invalidateTable(tableIdent) - ar.alterTable(tableIdent, isAddColumn, column) + lr.relation.asInstanceOf[AlterableRelation].alterTable(tableIdent, isAddColumn, column) SnappyStoreHiveCatalog.registerRelationDestroy() SnappySession.clearAllCache() case _ => @@ -1675,8 +1678,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { s"Could not find $tableIdent in catalog") } sessionCatalog.lookupRelation(tableIdent) match { - case LogicalRelation(ir: IndexableRelation, _, _) => - ir.createIndex(indexIdent, + case lr: LogicalRelation if lr.relation.isInstanceOf[IndexableRelation] => + lr.relation.asInstanceOf[IndexableRelation].createIndex(indexIdent, tableIdent, indexColumns, options) @@ -1731,11 +1734,13 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { dropRowStoreIndex(indexName.toString(), ifExists) } else { sessionCatalog.lookupRelation(indexIdent) match { - case LogicalRelation(dr: DependentRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[DependentRelation] => // Remove the index from the bse table props + val dr = lr.relation.asInstanceOf[DependentRelation] val baseTableIdent = sessionCatalog.newQualifiedTableName(dr.baseTable.get) sessionCatalog.lookupRelation(baseTableIdent) match { - case LogicalRelation(cr: ColumnFormatRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] => + val cr = lr.relation.asInstanceOf[ColumnFormatRelation] cr.removeDependent(dr, sessionCatalog) cr.dropIndex(indexIdent, baseTableIdent, ifExists) } @@ -1788,7 +1793,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { @DeveloperApi def insert(tableName: String, rows: Row*): Int = { sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(r: RowInsertableRelation, _, _) => r.insert(rows) + case lr: LogicalRelation if lr.relation.isInstanceOf[RowInsertableRelation] => + lr.relation.asInstanceOf[RowInsertableRelation].insert(rows) case _ => throw new AnalysisException( s"$tableName is not a row insertable table") } @@ -1810,7 +1816,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { def insert(tableName: String, rows: java.util.ArrayList[java.util.ArrayList[_]]): Int = { val convertedRowSeq: Seq[Row] = rows.asScala.map(row => convertListToRow(row)) sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(r: RowInsertableRelation, _, _) => r.insert(convertedRowSeq) + case lr: LogicalRelation if lr.relation.isInstanceOf[RowInsertableRelation] => + lr.relation.asInstanceOf[RowInsertableRelation].insert(convertedRowSeq) case _ => throw new AnalysisException( s"$tableName is not a row insertable table") } @@ -1829,8 +1836,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { @DeveloperApi def put(tableName: String, rows: Row*): Int = { sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(r: RowPutRelation, _, _) => r.put(rows) - case _ => throw new AnalysisException( + case lr: LogicalRelation if lr.relation.isInstanceOf[RowPutRelation] => + lr.relation.asInstanceOf[RowPutRelation].put(rows) + case _ => throw new AnalysisException( s"$tableName is not a row upsertable table") } } @@ -1853,8 +1861,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { def update(tableName: String, filterExpr: String, newColumnValues: Row, updateColumns: String*): Int = { sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(u: UpdatableRelation, _, _) => - u.update(filterExpr, newColumnValues, updateColumns) + case lr: LogicalRelation if lr.relation.isInstanceOf[UpdatableRelation] => + lr.relation.asInstanceOf[UpdatableRelation].update(filterExpr, + newColumnValues, updateColumns) case _ => throw new AnalysisException( s"$tableName is not an updatable table") } @@ -1878,8 +1887,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { def update(tableName: String, filterExpr: String, newColumnValues: java.util.ArrayList[_], updateColumns: java.util.ArrayList[String]): Int = { sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(u: UpdatableRelation, _, _) => - u.update(filterExpr, convertListToRow(newColumnValues), updateColumns.asScala) + case lr: LogicalRelation if lr.relation.isInstanceOf[UpdatableRelation] => + lr.relation.asInstanceOf[UpdatableRelation].update(filterExpr, + convertListToRow(newColumnValues), updateColumns.asScala) case _ => throw new AnalysisException( s"$tableName is not an updatable table") } @@ -1899,8 +1909,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { @Experimental def put(tableName: String, rows: java.util.ArrayList[java.util.ArrayList[_]]): Int = { sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(r: RowPutRelation, _, _) => - r.put(rows.asScala.map(row => convertListToRow(row))) + case lr: LogicalRelation if lr.relation.isInstanceOf[RowPutRelation] => + lr.relation.asInstanceOf[RowPutRelation].put( + rows.asScala.map(row => convertListToRow(row))) case _ => throw new AnalysisException( s"$tableName is not a row upsertable table") } @@ -1917,7 +1928,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) { @DeveloperApi def delete(tableName: String, filterExpr: String): Int = { sessionCatalog.lookupRelation(sessionCatalog.newQualifiedTableName(tableName)) match { - case LogicalRelation(d: DeletableRelation, _, _) => d.delete(filterExpr) + case lr: LogicalRelation if lr.relation.isInstanceOf[DeletableRelation] => + lr.relation.asInstanceOf[DeletableRelation].delete(filterExpr) case _ => throw new AnalysisException( s"$tableName is not a deletable table") } @@ -2386,7 +2398,7 @@ object SnappySession extends Logging { override def onApplicationEnd( applicationEnd: SparkListenerApplicationEnd): Unit = { SparkSession.setDefaultSession(null) - SparkSession.sqlListener.set(null) + SparkSupport.clear(sc) } }) } @@ -2476,7 +2488,7 @@ final class CachedKey(val session: SnappySession, } } -object CachedKey { +object CachedKey extends SparkSupport { def apply(session: SnappySession, currschema: String, plan: LogicalPlan, sqlText: String, paramLiterals: Array[ParamLiteral], forCaching: Boolean): CachedKey = { @@ -2490,12 +2502,13 @@ object CachedKey { } else "none" Alias(a.child, name)(exprId = ExprId(-1)) case ae: AggregateExpression => ae.copy(resultId = ExprId(-1)) - case s: ScalarSubquery => + case _: ScalarSubquery => throw new IllegalStateException("scalar subquery should not have been present") case e: Exists => e.copy(plan = e.plan.transformAllExpressions(normalizeExprIds), exprId = ExprId(-1)) - case p: PredicateSubquery => - p.copy(plan = p.plan.transformAllExpressions(normalizeExprIds), exprId = ExprId(-1)) + case p if internals.isPredicateSubquery(p) => + internals.copyPredicateSubquery(p, p.asInstanceOf[PlanExpression[LogicalPlan]].plan + .transformAllExpressions(normalizeExprIds), ExprId(-1)) case l: ListQuery => l.copy(plan = l.plan.transformAllExpressions(normalizeExprIds), exprId = ExprId(-1)) } @@ -2517,3 +2530,15 @@ object CachedKey { new CachedKey(session, currschema, normalizedPlan, sqlText, session.queryHints.hashCode()) } } + +/** + * A new event that is fired when a plan is executed to get an RDD. + */ +case class SparkListenerSQLPlanExecutionStart( + executionId: Long, + description: String, + details: String, + physicalPlanDescription: String, + sparkPlanInfo: SparkPlanInfo, + time: Long) + extends SparkListenerEvent diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 50959734f9..0e40597fc0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -21,12 +21,12 @@ import java.sql.SQLWarning import scala.util.control.NonFatal import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState -import io.snappydata.{Constant, Property, QueryHint} +import io.snappydata.{HintName, Property, QueryHint} import org.apache.spark.sql.JoinStrategy._ import org.apache.spark.sql.catalyst.analysis import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction, Complete, Final, ImperativeAggregate, Partial, PartialMerge} -import org.apache.spark.sql.catalyst.expressions.{Alias, Expression, NamedExpression, RowOrdering} +import org.apache.spark.sql.catalyst.expressions.{Alias, Expression, NamedExpression, RowOrdering, SubqueryExpression} import org.apache.spark.sql.catalyst.planning.{ExtractEquiJoinKeys, PhysicalAggregation} import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.{ClusteredDistribution, HashPartitioning} @@ -37,9 +37,9 @@ import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.aggregate.{AggUtils, CollectAggregateExec, SnappyHashAggregateExec} import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.datasources.LogicalRelation -import org.apache.spark.sql.execution.exchange.{EnsureRequirements, Exchange, ShuffleExchange} +import org.apache.spark.sql.execution.exchange.{EnsureRequirements, Exchange} import org.apache.spark.sql.execution.sources.PhysicalScan -import org.apache.spark.sql.internal.{DefaultPlanner, JoinQueryPlanning, LogicalPlanWithHints, SQLConf} +import org.apache.spark.sql.internal.{DefaultPlanner, JoinQueryPlanning, SQLConf} import org.apache.spark.sql.streaming._ /** @@ -68,40 +68,43 @@ private[sql] trait SnappyStrategies { PhysicalDStreamPlan(output, rowStream) :: Nil case WindowLogicalPlan(d, s, LogicalDStreamPlan(output, rowStream), _) => WindowPhysicalPlan(d, s, PhysicalDStreamPlan(output, rowStream)) :: Nil - case WindowLogicalPlan(d, s, l@LogicalRelation(t: StreamPlan, _, _), _) => - WindowPhysicalPlan(d, s, PhysicalDStreamPlan(l.output, t.rowStream)) :: Nil + case WindowLogicalPlan(d, s, l: LogicalRelation, _) if l.relation.isInstanceOf[StreamPlan] => + WindowPhysicalPlan(d, s, PhysicalDStreamPlan(l.output, + l.relation.asInstanceOf[StreamPlan].rowStream)) :: Nil case WindowLogicalPlan(_, _, child, _) => throw new AnalysisException( s"Unexpected child $child for WindowLogicalPlan") case _ => Nil } } - object HashJoinStrategies extends Strategy with JoinQueryPlanning { + object HashJoinStrategies extends Strategy with JoinQueryPlanning with SparkSupport { + + private def getStats(plan: LogicalPlan): Statistics = internals.getStatistics(plan) /** Try to apply a given join hint. Returns Nil if apply failed else the resulting plan. */ - private def applyJoinHint(joinHint: String, joinType: JoinType, leftKeys: Seq[Expression], - rightKeys: Seq[Expression], condition: Option[Expression], + private def applyJoinHint(joinHint: HintName.Type, joinType: JoinType, + leftKeys: Seq[Expression], rightKeys: Seq[Expression], condition: Option[Expression], left: LogicalPlan, right: LogicalPlan, buildSide: joins.BuildSide, canBuild: JoinType => Boolean): Seq[SparkPlan] = joinHint match { - case Constant.JOIN_TYPE_HASH => + case HintName.JoinType_Hash => if (canBuild(joinType)) { makeLocalHashJoin(leftKeys, rightKeys, left, right, condition, joinType, buildSide, replicatedTableJoin = allowsReplicatedJoin( if (buildSide eq joins.BuildLeft) left else right)) } else Nil - case Constant.JOIN_TYPE_BROADCAST => + case HintName.JoinType_Broadcast => if (canBuild(joinType)) { joins.BroadcastHashJoinExec(leftKeys, rightKeys, joinType, buildSide, condition, planLater(left), planLater(right)) :: Nil } else Nil - case Constant.JOIN_TYPE_SORT => + case HintName.JoinType_Sort => if (RowOrdering.isOrderable(leftKeys)) { new joins.SnappySortMergeJoinExec(leftKeys, rightKeys, joinType, condition, planLater(left), planLater(right), left.statistics.sizeInBytes, right.statistics.sizeInBytes) :: Nil } else Nil case _ => throw new ParseException(s"Unknown joinType hint '$joinHint'. " + - s"Expected one of ${Constant.ALLOWED_JOIN_TYPE_HINTS}") + s"Expected one of ${QueryHint.JoinType.values}") } def apply(plan: LogicalPlan): Seq[SparkPlan] = if (isDisabled || session.disableHashJoin) { @@ -146,7 +149,7 @@ private[sql] trait SnappyStrategies { // check for collocated joins before going for broadcast else if (isCollocatedJoin(joinType, left, leftKeys, right, rightKeys)) { val buildLeft = canBuildLeft(joinType) && canBuildLocalHashMap(left, conf) - if (buildLeft && left.statistics.sizeInBytes < right.statistics.sizeInBytes) { + if (buildLeft && getStats(left).sizeInBytes < getStats(right).sizeInBytes) { makeLocalHashJoin(leftKeys, rightKeys, left, right, condition, joinType, joins.BuildLeft, replicatedTableJoin = false) } else if (canBuildRight(joinType) && canBuildLocalHashMap(right, conf)) { @@ -178,7 +181,7 @@ private[sql] trait SnappyStrategies { else if (canBuildRight(joinType) && canBuildLocalHashMap(right, conf) || !RowOrdering.isOrderable(leftKeys)) { if (canBuildLeft(joinType) && canBuildLocalHashMap(left, conf) && - left.statistics.sizeInBytes < right.statistics.sizeInBytes) { + getStats(left).sizeInBytes < getStats(right).sizeInBytes) { makeLocalHashJoin(leftKeys, rightKeys, left, right, condition, joinType, joins.BuildLeft, replicatedTableJoin = false) } else { @@ -207,7 +210,8 @@ private[sql] trait SnappyStrategies { def getCompatiblePartitioning(plan: LogicalPlan, joinKeys: Seq[Expression]): (Seq[NamedExpression], Seq[Int], Int) = plan match { case PhysicalScan(_, _, child) => child match { - case r@LogicalRelation(scan: PartitionedDataSourceScan, _, _) => + case r: LogicalRelation if r.relation.isInstanceOf[PartitionedDataSourceScan] => + val scan = r.relation.asInstanceOf[PartitionedDataSourceScan] // send back numPartitions=1 for replicated table since collocated if (!scan.isPartitioned) return (Nil, Nil, 1) @@ -295,7 +299,7 @@ private[sql] trait SnappyStrategies { replicatedTableJoin: Boolean): Seq[SparkPlan] = { joins.HashJoinExec(leftKeys, rightKeys, side, condition, joinType, planLater(left), planLater(right), - left.statistics.sizeInBytes, right.statistics.sizeInBytes, + getStats(left).sizeInBytes, getStats(right).sizeInBytes, replicatedTableJoin) :: Nil } } @@ -309,31 +313,29 @@ private[sql] trait SnappyStrategies { } } -private[sql] object JoinStrategy { +private[sql] object JoinStrategy extends SparkSupport { + + def hasBroadcastHint(hints: Map[QueryHint.Type, HintName.Type]): Boolean = { + hints.get(QueryHint.JoinType) match { + case Some(h) => HintName.JoinType_Broadcast == h + case None => false + } + } + + private def getStats(plan: LogicalPlan): Statistics = internals.getStatistics(plan) def skipBroadcastRight(joinType: JoinType, left: LogicalPlan, right: LogicalPlan, conf: SQLConf): Boolean = { canBuildLeft(joinType) && canBroadcast(left, conf) && - left.statistics.sizeInBytes < right.statistics.sizeInBytes + getStats(left).sizeInBytes < getStats(right).sizeInBytes } /** * Check for joinType query hint. A return value of Some(hint) indicates the query hint * for the join operation, if any, else this returns None. */ - private[sql] def getJoinHint(plan: LogicalPlan): Option[String] = plan match { - case l: LogicalPlanWithHints => l.hints.get(QueryHint.JoinType.toString) match { - case Some(v) => - val specifiedJoinHint = v.toLowerCase() - if (Constant.ALLOWED_JOIN_TYPE_HINTS.contains(specifiedJoinHint)) { - Some(specifiedJoinHint) - } else { - throw new ParseException(s"Unknown joinType hint '$v'. " + - s"Expected one of ${Constant.ALLOWED_JOIN_TYPE_HINTS}") - } - case None => None - } - case _: BroadcastHint => Some(Constant.JOIN_TYPE_BROADCAST) + private[sql] def getJoinHint(plan: LogicalPlan): Option[HintName.Type] = plan match { + case p if internals.isHintPlan(p) => internals.getHints(p).get(QueryHint.JoinType) case _: Filter | _: Project | _: LocalLimit => getJoinHint(plan.asInstanceOf[UnaryNode].child) case _ => None @@ -343,15 +345,16 @@ private[sql] object JoinStrategy { * Matches a plan whose output should be small enough to be used in broadcast join. */ def canBroadcast(plan: LogicalPlan, conf: SQLConf): Boolean = { - plan.statistics.isBroadcastable || - plan.statistics.sizeInBytes <= conf.autoBroadcastJoinThreshold + val stats = getStats(plan) + internals.isBroadcastable(plan) || + stats.sizeInBytes <= conf.autoBroadcastJoinThreshold } /** * Matches a plan whose size is small enough to build a hash table. */ def canBuildLocalHashMap(plan: LogicalPlan, conf: SQLConf): Boolean = { - plan.statistics.sizeInBytes <= ExternalStoreUtils.sizeAsBytes( + getStats(plan).sizeInBytes <= ExternalStoreUtils.sizeAsBytes( Property.HashJoinSize.get(conf), Property.HashJoinSize.name, -1, Long.MaxValue) } @@ -365,7 +368,8 @@ private[sql] object JoinStrategy { def allowsReplicatedJoin(plan: LogicalPlan): Boolean = { plan match { case PhysicalScan(_, _, child) => child match { - case LogicalRelation(t: PartitionedDataSourceScan, _, _) => !t.isPartitioned + case lr: LogicalRelation if lr.relation.isInstanceOf[PartitionedDataSourceScan] => + !lr.relation.asInstanceOf[PartitionedDataSourceScan].isPartitioned case _: Filter | _: Project | _: LocalLimit => allowsReplicatedJoin(child.children.head) case ExtractEquiJoinKeys(joinType, _, _, _, left, right) => allowsReplicatedJoin(left) && allowsReplicatedJoin(right) && @@ -395,7 +399,7 @@ private[sql] object JoinStrategy { * Adapted from Spark's Aggregation strategy. */ class SnappyAggregationStrategy(planner: DefaultPlanner) - extends Strategy { + extends Strategy with SparkSupport { private val maxAggregateInputSize = { // if below throws exception then clear the property from conf @@ -417,7 +421,7 @@ class SnappyAggregationStrategy(planner: DefaultPlanner) isRootPlan: Boolean): Seq[SparkPlan] = plan match { case PhysicalAggregation(groupingExpressions, aggregateExpressions, resultExpressions, child) if maxAggregateInputSize == 0 || - child.statistics.sizeInBytes <= maxAggregateInputSize => + internals.getStatistics(child).sizeInBytes <= maxAggregateInputSize => val (functionsWithDistinct, functionsWithoutDistinct) = aggregateExpressions.partition(_.isDistinct) @@ -432,17 +436,17 @@ class SnappyAggregationStrategy(planner: DefaultPlanner) val aggregateOperator = if (aggregateExpressions.map(_.aggregateFunction) - .exists(!_.supportsPartial)) { + .exists(!internals.supportsPartial(_))) { if (functionsWithDistinct.nonEmpty) { sys.error("Distinct columns cannot exist in Aggregate " + "operator containing aggregate functions which don't " + "support partial aggregation.") } else { - aggregate.AggUtils.planAggregateWithoutPartial( + internals.planAggregateWithoutPartial( groupingExpressions, aggregateExpressions, resultExpressions, - planLater(child)) + () => planLater(child)) } } else if (functionsWithDistinct.isEmpty) { planAggregateWithoutDistinct( @@ -703,7 +707,9 @@ object OptimizeSortPlans extends Rule[SparkPlan] { * match or are superset of the child distribution. Also introduces exchange * when inserting into a partitioned table if number of partitions don't match. */ -case class CollapseCollocatedPlans(session: SparkSession) extends Rule[SparkPlan] { +case class CollapseCollocatedPlans(session: SparkSession) + extends Rule[SparkPlan] with SparkSupport { + override def apply(plan: SparkPlan): SparkPlan = plan.transformUp { // collapse aggregates including removal of exchange completely if possible case agg@SnappyHashAggregateExec(Some(groupingAttributes), _, @@ -755,7 +761,7 @@ case class CollapseCollocatedPlans(session: SparkSession) extends Rule[SparkPlan t.child.outputPartitioning.numPartitions != t.outputPartitioning.numPartitions } else false if (addShuffle) { - t.withNewChildren(Seq(ShuffleExchange(HashPartitioning( + t.withNewChildren(Seq(internals.newShuffleExchange(HashPartitioning( t.requiredChildDistribution.head.asInstanceOf[ClusteredDistribution] .clustering, t.numBuckets), t.child))) } else t @@ -789,16 +795,20 @@ case class InsertCachedPlanFallback(session: SnappySession, topLevel: Boolean) * ScalarSubquery to insert a tokenized literal instead of literal value embedded * in code to allow generated code re-use and improve performance substantially. */ -case class TokenizeSubqueries(sparkSession: SparkSession) extends Rule[SparkPlan] { +case class TokenizeSubqueries(sparkSession: SparkSession) + extends Rule[SparkPlan] with SparkSupport { + def apply(plan: SparkPlan): SparkPlan = { plan.transformAllExpressions { case subquery: catalyst.expressions.ScalarSubquery => val executedPlan = new QueryExecution(sparkSession, subquery.plan).executedPlan new TokenizedScalarSubquery(SubqueryExec(s"subquery${subquery.exprId.id}", executedPlan), subquery.exprId) - case catalyst.expressions.PredicateSubquery(query, Seq(e: Expression), _, exprId) => - val executedPlan = new QueryExecution(sparkSession, query).executedPlan - InSubquery(e, SubqueryExec(s"subquery${exprId.id}", executedPlan), exprId) + case expr if internals.isPredicateSubquery(expr) && expr.children.size == 1 => + val subquery = expr.asInstanceOf[SubqueryExpression] + val executedPlan = new QueryExecution(sparkSession, subquery.plan).executedPlan + InSubquery(subquery.children.head, SubqueryExec(s"subquery${subquery.exprId.id}", + executedPlan), subquery.exprId) } } } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala new file mode 100644 index 0000000000..eb7f2a3bd1 --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql + +import io.snappydata.{HintName, QueryHint} + +import org.apache.spark.sql.catalyst.analysis.UnresolvedTableValuedFunction +import org.apache.spark.sql.catalyst.catalog.{CatalogTable, FunctionResource} +import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame} +import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, RepartitionByExpression, Statistics, SubqueryAlias} +import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} +import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} +import org.apache.spark.sql.execution.exchange.Exchange +import org.apache.spark.sql.execution.{SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.internal.{LogicalPlanWithHints, SharedState, SnappySessionState} +import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.types.{DataType, Metadata} +import org.apache.spark.{Logging, SparkContext} + +/** + * Common interface for Spark internal API used by the core module. + * + * Note that this interface only intends to achieve source-level + * compatibility meaning that entire core module with the specific + * implementation of this interface has to be re-compiled in entirety + * for separate Spark versions and one cannot just combine core module + * compiled for a Spark version with an implementation of this + * interface for another Spark version. + */ +trait SparkInternals extends Logging { + + final val emptyFunc: String => String = _ => "" + + if (version != SparkSupport.DEFAULT_VERSION) { + logInfo(s"SnappyData: loading support for Spark $version") + } + + /** + * Version of this implementation. This should always match + * the result of SparkContext.version for current SparkContext. + */ + def version: String + + /** + * Remove any cached data of Dataset.persist for given plan. + */ + def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit + + /** + * Apply a mapping function on all expressions in the given logical plan + * and return the updated plan. + */ + def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan + + /** + * Register an inbuilt function in the session function registry. + */ + def registerFunction(session: SparkSession, name: FunctionIdentifier, + info: ExpressionInfo, function: Seq[Expression] => Expression): Unit + + /** + * Add a mutable state variable to given [[CodegenContext]] and return the variable name. + */ + def addClassField(ctx: CodegenContext, javaType: String, + varName: String, initFunc: String => String = emptyFunc, + forceInline: Boolean = false, useFreshName: Boolean = true): String + + /** + * Split the generated code for given expressions into multiple methods assuming + * [[CodegenContext.INPUT_ROW]] has been used (else return inline expression code). + */ + def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String + + /** + * Reset CodegenContext's copyResult to false if required (skipped in newer Spark versions). + */ + def resetCopyResult(ctx: CodegenContext): Unit + + /** + * Check if the current expression is a predicate sub-query. + */ + def isPredicateSubquery(expr: Expression): Boolean + + /** + * Make a copy of given predicate sub-query with new plan and [[ExprId]]. + */ + def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, newExprId: ExprId): Expression + + /** + * Compile the given [[SparkPlan]] using whole-stage code generation and return + * the generated code along with the [[CodegenContext]] use for code generation. + */ + def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec + + /** + * Create a new immutable map whose keys are case-insensitive from a given map. + */ + def createCaseInsensitiveMap(map: Map[String, String]): Map[String, String] + + /** + * Create a new SQL listener with SnappyData extensions and attach to the SparkUI. + * The extension provides handling of: + *

+ * a) combining the two part execution with CachedDataFrame where first execution + * does the caching ("prepare" phase) along with the actual execution while subsequent + * executions only do the latter + *

+ * b) shortens the SQL string to display properly in the UI (CachedDataFrame already + * takes care of posting the SQL string rather than method name unlike Spark). + *

+ * This variant is invoked before initialization of SharedState for Spark versions + * where listener is attached independently of SharedState before latter is created. + */ + def createAndAttachSQLListener(sparkContext: SparkContext): Unit + + /** + * Create a new SQL listener with SnappyData extensions and attach to the SparkUI. + * The extension provides handling of: + *

+ * a) combining the two part execution with CachedDataFrame where first execution + * does the caching ("prepare" phase) along with the actual execution while subsequent + * executions only do the latter + *

+ * b) shortens the SQL string to display properly in the UI (CachedDataFrame already + * takes care of posting the SQL string rather than method name unlike Spark). + *

+ * This variant is invoked after initialization of SharedState for Spark versions + * where listener is attached as part of SharedState creation. + */ + def createAndAttachSQLListener(state: SharedState): Unit + + /** + * Clear any global SQL listener. + */ + def clearSQLListener(): Unit + + /** + * Create a SQL string appropriate for a persisted VIEW plan and storage in catalog + * from a given [[LogicalPlan]] for the VIEW. + */ + def createViewSQL(session: SparkSession, plan: LogicalPlan, + originalText: Option[String]): String + + /** + * Create a [[LogicalPlan]] for CREATE VIEW. + */ + def createView(desc: CatalogTable, output: Seq[Attribute], child: LogicalPlan): LogicalPlan + + /** + * Create a [[LogicalPlan]] for CREATE FUNCTION. + */ + def newCreateFunctionCommand(schemaName: Option[String], functionName: String, + className: String, resources: Seq[FunctionResource], isTemp: Boolean, + ignoreIfExists: Boolean, replace: Boolean): LogicalPlan + + /** + * Create a [[LogicalPlan]] for DESCRIBE TABLE. + */ + def newDescribeTableCommand(table: TableIdentifier, partitionSpec: Map[String, String], + isExtended: Boolean): LogicalPlan + + /** + * Create a [[LogicalPlan]] for CLEAR CACHE. + */ + def newClearCacheCommand(): LogicalPlan + + /** + * Resolve Maven coordinates for a package, cache the jars and return the required CLASSPATH. + */ + def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], + ivyPath: Option[String], exclusions: Seq[String]): String + + /** + * Create a copy of [[AttributeReference]] with given new arguments. + */ + def copyAttribute(attr: AttributeReference)(name: String = attr.name, + dataType: DataType = attr.dataType, nullable: Boolean = attr.nullable, + metadata: Metadata = attr.metadata): AttributeReference + + /** + * Create a new INSERT plan that has a LONG count of rows as its output. + */ + def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], + child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): LogicalPlan + + /** + * Create an expression for GROUPING SETS. + */ + def newGroupingSet(groupingSets: Seq[Seq[Expression]], groupByExprs: Seq[Expression], + child: LogicalPlan, aggregations: Seq[NamedExpression]): LogicalPlan + + /** + * Create a new unresolved relation (Table/View/Alias). + */ + def newUnresolvedRelation(tableIdentifier: TableIdentifier, alias: Option[String]): LogicalPlan + + /** + * Create an alias for a sub-query. + */ + def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias + + /** + * Create a plan for column aliases in a table/sub-query/... + * Not supported by older Spark versions. + */ + def newUnresolvedColumnAliases(outputColumnNames: Seq[String], + child: LogicalPlan): LogicalPlan + + /** + * Create a [[SortOrder]]. + */ + def newSortOrder(child: Expression, direction: SortDirection, + nullOrdering: NullOrdering): SortOrder + + /** + * Create a new [[LogicalPlan]] for REPARTITION. + */ + def newRepartitionByExpression(partitionExpressions: Seq[Expression], + numPartitions: Int, child: LogicalPlan): RepartitionByExpression + + /** + * Create a new unresolved table value function. + */ + def newUnresolvedTableValuedFunction(functionName: String, functionArgs: Seq[Expression], + outputNames: Seq[String]): UnresolvedTableValuedFunction + + /** + * Create a new frame boundary. This is a FrameBoundary is older Spark versions + * while newer ones use an Expression instead. + */ + def newFrameBoundary(boundaryType: FrameBoundaryType.Type, + num: Option[Expression] = None): Any + + /** + * Create a new [[SpecifiedWindowFrame]] given the [[FrameType]] and start/end frame + * boundaries as returned by [[newFrameBoundary]]. + */ + def newSpecifiedWindowFrame(frameType: FrameType, + frameStart: Any, frameEnd: Any): SpecifiedWindowFrame + + /** + * Create a new wrapper [[LogicalPlan]] that encapsulates an arbitrary set of hints. + */ + def newLogicalPlanWithHints(child: LogicalPlan, + hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints + + /** + * Return true if the given LogicalPlan encapsulates a child plan with query hint(s). + */ + def isHintPlan(plan: LogicalPlan): Boolean + + /** + * If the given plan encapsulates query hints, then return the hint type and name pairs. + */ + def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] + + /** + * Return true if current plan has been explicitly marked for broadcast and false otherwise. + */ + def isBroadcastable(plan: LogicalPlan): Boolean + + /** + * Create a new OneRowRelation. + */ + def newOneRowRelation(): LogicalPlan + + /** + * Create a new [[LogicalPlan]] for GENERATE. + */ + def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], + generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan + + /** + * Write a DataFrame to a DataSource. + */ + def writeToDataSource(ds: DataSource, mode: SaveMode, data: Dataset[Row]): BaseRelation + + /** + * Create a new [[LogicalRelation]]. + */ + def newLogicalRelation(relation: BaseRelation, + expectedOutputAttributes: Option[Seq[AttributeReference]], + catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation + + /** + * Create a new shuffle exchange plan. + */ + def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange + + /** + * Get the [[Statistics]] for a given [[LogicalPlan]]. + */ + def getStatistics(plan: LogicalPlan): Statistics + + /** + * Return true if the given [[AggregateFunction]] support partial result aggregation. + */ + def supportsPartial(aggregate: AggregateFunction): Boolean + + /** + * Create a physical [[SparkPlan]] for an [[AggregateFunction]] that does not support + * partial result aggregation ([[supportsPartial]] is false). + */ + def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], + aggregateExpressions: Seq[AggregateExpression], + resultExpressions: Seq[NamedExpression], planChild: () => SparkPlan): Seq[SparkPlan] + + /** + * Compile given generated code assuming it results in an implemenation of [[GeneratedClass]]. + */ + def compile(code: CodeAndComment): GeneratedClass + + /** + * Create a new [[JSONOptions]] object given the parameters. + */ + def newJSONOptions(parameters: Map[String, String], + session: Option[SparkSession]): JSONOptions + + /** + * Create a new optimizer with extended rules for SnappyData. + */ + def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer + + /** + * Return the Spark plan for check pre-conditions before a write operation. + */ + def newPreWriteCheck(sessionState: SnappySessionState): (LogicalPlan => Unit) +} + +/** + * Enumeration for frame boundary type to provie a common way of expressing it due to + * major change in frame boundary handling across Spark versions. + */ +object FrameBoundaryType extends Enumeration { + type Type = Value + + val CurrentRow, UnboundedPreceding, UnboundedFollowing, ValuePreceding, ValueFollowing = Value +} diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala new file mode 100644 index 0000000000..475077b6c2 --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql + +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl + +import org.apache.spark.util.Utils +import org.apache.spark.{SparkContext, SparkException} + +/** + * Helper trait for easy access to [[SparkInternals]] using the "internals" method. + */ +trait SparkSupport { + protected final def internals: SparkInternals = SparkSupport.internals() +} + +/** + * Load appropriate Spark version support as per the current Spark version. + */ +object SparkSupport { + + /** + * The default Spark version for which core will be built and must exactly match + * the version of the embedded SnappyData Spark since this will be used on executors. + */ + final val DEFAULT_VERSION = "2.1.1" + + @volatile private[this] var internalImpl: SparkInternals = _ + + private val INTERNAL_PACKAGE = "org.apache.spark.sql.internal" + + /** + * Get the appropriate [[SparkInternals]] for current SparkContext version. + */ + def internals(context: SparkContext = null): SparkInternals = { + val impl = internalImpl + if (impl ne null) internalImpl + else synchronized { + val impl = internalImpl + if (impl ne null) internalImpl + else { + val sparkVersion = + if (context eq null) { + // check for embedded product + if (GemFireCacheImpl.getInstance() ne null) DEFAULT_VERSION + else SnappyContext.globalSparkContext match { + case null => throw new SparkException("No SparkContext") + case ctx => ctx.version + } + } else context.version + val implClass = sparkVersion match { + // list all the supported versions below; all implementations are required to + // have a public constructor having current SparkContext as the one argument + case "2.1.0" => Utils.classForName(s"$INTERNAL_PACKAGE.Spark210Internals") + case "2.1.1" => Utils.classForName(s"$INTERNAL_PACKAGE.Spark211Internals") + case "2.3.2" => Utils.classForName(s"$INTERNAL_PACKAGE.Spark232Internals") + case v => throw new SparkException(s"Unsupported Spark version $v") + } + internalImpl = implClass.newInstance().asInstanceOf[SparkInternals] + internalImpl + } + } + } + + private[sql] def clear(context: SparkContext): Unit = { + if (context ne null) internals(context).clearSQLListener() + internalImpl = null + } +} diff --git a/core/src/main/scala/org/apache/spark/sql/aqp/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/aqp/SnappyContextFunctions.scala index d0b507f4c3..759ea259dc 100644 --- a/core/src/main/scala/org/apache/spark/sql/aqp/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/aqp/SnappyContextFunctions.scala @@ -17,12 +17,12 @@ package org.apache.spark.sql.aqp -import io.snappydata.SnappyDataFunctions.usageStr +import io.snappydata.DSID import org.apache.spark.rdd.RDD import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.InternalRow -import org.apache.spark.sql.catalyst.expressions.ExpressionInfo +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow} +import org.apache.spark.sql.catalyst.expressions.{Expression, ExpressionInfo} import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.hive.{ExternalTableType, QualifiedTableName} import org.apache.spark.sql.policy.CurrentUser @@ -30,7 +30,7 @@ import org.apache.spark.sql.sources.BaseRelation import org.apache.spark.sql.streaming.StreamBaseRelation import org.apache.spark.sql.types.StructType -class SnappyContextFunctions { +class SnappyContextFunctions extends SparkSupport { def clear(): Unit = {} @@ -38,20 +38,29 @@ class SnappyContextFunctions { def postRelationCreation(relation: Option[BaseRelation], session: SnappySession): Unit = {} + protected def registerNArgFunction(session: SnappySession, numArgs: Int, name: String, + fnClass: Class[_], usage: String, function: Seq[Expression] => Expression): Unit = { + val info = new ExpressionInfo(fnClass.getCanonicalName, null, name, usage, "") + internals.registerFunction(session, FunctionIdentifier(name, None), info, exprs => { + if (exprs.length != numArgs) { + throw new AnalysisException(s"Incorrect number of argument(s) = ${exprs.length} " + + s"passed to function $name expecting $numArgs argument(s)") + } + function(exprs) + }) + } + def registerSnappyFunctions(session: SnappySession): Unit = { - val registry = session.sessionState.functionRegistry - val usageStr = "_FUNC_() - Returns the User's UserName who is executing the " + + var usageStr: String = null + + usageStr = "_FUNC_() - Returns the unique distributed member" + + " ID of the server from which the current row was fetched." + registerNArgFunction(session, 0, "DSID", classOf[DSID], usageStr, _ => DSID()) + + usageStr = "_FUNC_() - Returns the authenticated UserName of the user executing the " + "current SQL statement." - val info = new ExpressionInfo(CurrentUser.getClass.getCanonicalName, null, - "CURRENT_USER", usageStr, "") - registry.registerFunction("CURRENT_USER", info, - e => { - if (! e.isEmpty) { - throw new AnalysisException("Argument(s) passed for zero arg function " + - s"CURRENT_USER") - } - CurrentUser() - }) + registerNArgFunction(session, 0, "CURRENT_USER", classOf[CurrentUser], + usageStr, _ => CurrentUser()) } def createTopK(session: SnappySession, tableName: String, diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala index 47c1e91226..7c63c5d756 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala @@ -29,6 +29,7 @@ import org.json4s.JsonAST.JField import org.apache.spark.memory.{MemoryConsumer, MemoryMode, TaskMemoryManager} import org.apache.spark.serializer.StructTypeSerializer +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.catalyst.CatalystTypeConverters._ import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.analysis.TypeCheckResult @@ -41,7 +42,7 @@ import org.apache.spark.unsafe.types.UTF8String case class TermValues(literalValueRef : String, isNull : String, valueTerm : String) // A marker interface to extend usage of Literal case matching. // A literal that can change across multiple query execution. -trait DynamicReplacableConstant extends Expression { +trait DynamicReplacableConstant extends Expression with SparkSupport { @transient private lazy val termMap = new mutable.HashMap[CodegenContext, TermValues] @@ -124,7 +125,7 @@ trait DynamicReplacableConstant extends Expression { val memoryManagerClass = classOf[TaskMemoryManager].getName val memoryModeClass = classOf[MemoryMode].getName val consumerClass = classOf[DirectStringConsumer].getName - ctx.addMutableState(javaType, valueTerm, + internals.addClassField(ctx, javaType, valueTerm, _ => s""" |if (($isNull = $valueRef.value() == null)) { | $valueTerm = ${ctx.defaultValue(dataType)}; @@ -140,18 +141,18 @@ trait DynamicReplacableConstant extends Expression { | } | } |} - """.stripMargin) + """.stripMargin, forceInline = true, useFreshName = false) // indicate that code for valueTerm has already been generated null.asInstanceOf[String] case _ => "" } - ctx.addMutableState("boolean", isNull, "") + internals.addClassField(ctx, "boolean", isNull, forceInline = true, useFreshName = false) if (unbox ne null) { - ctx.addMutableState(javaType, valueTerm, + internals.addClassField(ctx, javaType, valueTerm, _ => s""" |$isNull = $valueRef.value() == null; |$valueTerm = $isNull ? ${ctx.defaultValue(dataType)} : (($box)$valueRef.value())$unbox; - """.stripMargin) + """.stripMargin, forceInline = true, useFreshName = false) } ev.copy(initCode, isNullLocal, valueLocal) } @@ -449,7 +450,7 @@ case class DynamicFoldableExpression(var expr: Expression) extends UnaryExpressi override def toString: String = { def removeCast(expr: Expression): Expression = expr match { - case Cast(child, _) => removeCast(child) + case c: Cast => removeCast(c.child) case _ => expr } "DynExpr(" + removeCast(expr) + ")" @@ -484,7 +485,7 @@ case class DynamicFoldableExpression(var expr: Expression) extends UnaryExpressi * change dynamically in executions. */ case class DynamicInSet(child: Expression, hset: IndexedSeq[Expression]) - extends UnaryExpression with Predicate { + extends UnaryExpression with Predicate with SparkSupport { require((hset ne null) && hset.nonEmpty, "hset cannot be null or empty") // all expressions must be constant types @@ -525,12 +526,10 @@ case class DynamicInSet(child: Expression, hset: IndexedSeq[Expression]) val exprClass = classOf[Expression].getName val elements = new Array[AnyRef](hset.length) val childGen = child.genCode(ctx) - val hsetTerm = ctx.freshName("hset") val elementsTerm = ctx.freshName("elements") val idxTerm = ctx.freshName("idx") val idx = ctx.references.length ctx.references += elements - val hasNullTerm = ctx.freshName("hasNull") for (i <- hset.indices) { val e = hset(i) @@ -541,16 +540,16 @@ case class DynamicInSet(child: Expression, hset: IndexedSeq[Expression]) elements(i) = v } - ctx.addMutableState("boolean", hasNullTerm, "") - ctx.addMutableState(setName, hsetTerm, + val hasNullTerm = internals.addClassField(ctx, "boolean", "hasNull") + val hsetTerm = internals.addClassField(ctx, setName, "hset", hsetVar => s""" |Object[] $elementsTerm = (Object[])references[$idx]; - |$hsetTerm = new $setName($elementsTerm.length, 0.7f, 1); + |$hsetVar = new $setName($elementsTerm.length, 0.7f, 1); |for (int $idxTerm = 0; $idxTerm < $elementsTerm.length; $idxTerm++) { | Object e = $elementsTerm[$idxTerm]; | if (e instanceof $exprClass) e = (($exprClass)e).eval(null); | if (e != null) { - | $hsetTerm.put(e, e); + | $hsetVar.put(e, e); | } else if (!$hasNullTerm) { | $hasNullTerm = true; | } diff --git a/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala b/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala index 915b1d5cac..c748483f52 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala @@ -22,13 +22,13 @@ import scala.collection.mutable.ArrayBuffer import scala.collection.{IterableLike, mutable} import scala.util.hashing.MurmurHash3 -import org.apache.spark.sql.Row import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions._ -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, GeneratedClass} import org.apache.spark.sql.collection.MultiColumnOpenHashSet.ColumnHandler import org.apache.spark.sql.execution.BufferedRowIterator import org.apache.spark.sql.types._ +import org.apache.spark.sql.{Row, SparkSupport} import org.apache.spark.util.collection.BitSet /** @@ -1178,24 +1178,27 @@ object QCSSQLColumnHandler { def newSqlHandler(qcsPlan: (CodeAndComment, ArrayBuffer[Any], Array[DataType], Array[DataType]), hashColHandler: ColumnHandler): ColumnHandler = { - new QCSSQLColumnHandler( (CodeGenerator.compile(qcsPlan._1), qcsPlan._2, qcsPlan._3, qcsPlan._4), hashColHandler) + new QCSSQLColumnHandler((SparkSupport.internals().compile(qcsPlan._1), + qcsPlan._2, qcsPlan._3, qcsPlan._4), hashColHandler) } - val func: (Int, Iterator[InternalRow], GeneratedClass, ArrayBuffer[Any]) => Iterator[InternalRow] = { + val func: (Int, Iterator[InternalRow], + GeneratedClass, ArrayBuffer[Any]) => Iterator[InternalRow] = { (index, iter, clazz, bufferArr) => val buffer = clazz.generate(bufferArr.toArray).asInstanceOf[BufferedRowIterator] buffer.init(index, Array(iter)) new Iterator[InternalRow] { - override def hasNext(): Boolean = buffer.hasNext + override def hasNext(): Boolean = buffer.hasNext - override def next: InternalRow =buffer.next + override def next: InternalRow = buffer.next } } val iter = new Iterator[InternalRow]() { - def next: InternalRow = RowToInternalRow - def hasNext = RowToInternalRow.rowHolder.get() != null + def hasNext: Boolean = RowToInternalRow.rowHolder.get() != null + + def next(): InternalRow = RowToInternalRow } } diff --git a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala index 90a6d8e1a6..a7d62c79f5 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala @@ -46,7 +46,7 @@ import org.apache.spark.scheduler.local.LocalSchedulerBackend import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, GenericRow, UnsafeRow} -import org.apache.spark.sql.catalyst.json.{JSONOptions, JacksonGenerator, JacksonUtils} +import org.apache.spark.sql.catalyst.json.{JacksonGenerator, JacksonUtils} import org.apache.spark.sql.catalyst.plans.logical.{LocalRelation, LogicalPlan} import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, PartitioningCollection} import org.apache.spark.sql.catalyst.util.DateTimeUtils @@ -57,13 +57,12 @@ import org.apache.spark.sql.hive.SnappyStoreHiveCatalog import org.apache.spark.sql.sources.{CastLongTime, JdbcExtendedUtils} import org.apache.spark.sql.types._ import org.apache.spark.storage.{BlockId, BlockManager, BlockManagerId} -import org.apache.spark.ui.exec.ExecutorsListener import org.apache.spark.unsafe.Platform import org.apache.spark.util.AccumulatorV2 import org.apache.spark.util.collection.BitSet import org.apache.spark.util.io.ChunkedByteBuffer -object Utils { +object Utils extends SparkSupport { final val WEIGHTAGE_COLUMN_NAME = "SNAPPY_SAMPLER_WEIGHTAGE" final val SKIP_ANALYSIS_PREFIX = "SAMPLE_" @@ -600,14 +599,6 @@ object Utils { driver } - /** - * Wrap a DataFrame action to track all Spark jobs in the body so that - * we can connect them with an execution. - */ - def withNewExecutionId[T](df: DataFrame, body: => T): T = { - df.withNewExecutionId(body) - } - def immutableMap[A, B](m: mutable.Map[A, B]): Map[A, B] = new Map[A, B] { private[this] val map = m @@ -744,7 +735,7 @@ object Utils { writer: java.io.Writer): AnyRef = { val schema = StructType(Seq(StructField(columnName, dataType))) JacksonUtils.verifySchema(schema) - new JacksonGenerator(schema, writer, new JSONOptions(Map.empty[String, String])) + new JacksonGenerator(schema, writer, internals.newJSONOptions(Map.empty, None)) } def generateJson(gen: AnyRef, row: InternalRow, columnIndex: Int, @@ -791,9 +782,8 @@ object Utils { def genTaskContextFunction(ctx: CodegenContext): String = { // use common taskContext variable so it is obtained only once for a plan if (!ctx.addedFunctions.contains(TASKCONTEXT_FUNCTION)) { - val taskContextVar = ctx.freshName("taskContext") val contextClass = classOf[TaskContext].getName - ctx.addMutableState(contextClass, taskContextVar, "") + val taskContextVar = internals.addClassField(ctx, contextClass, "taskContext") ctx.addNewFunction(TASKCONTEXT_FUNCTION, s""" |private $contextClass $TASKCONTEXT_FUNCTION() { @@ -806,11 +796,6 @@ object Utils { TASKCONTEXT_FUNCTION } - def executorsListener(sc: SparkContext): Option[ExecutorsListener] = sc.ui match { - case Some(ui) => Some(ui.executorsListener) - case _ => None - } - def getActiveSession: Option[SparkSession] = SparkSession.getActiveSession } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala index 9d97f7957b..7b86b42685 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala @@ -17,7 +17,6 @@ package org.apache.spark.sql.execution import org.apache.spark.rdd.RDD -import org.apache.spark.sql.SparkSession import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} @@ -26,6 +25,7 @@ import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, BindReferenc import org.apache.spark.sql.catalyst.util.DateTimeUtils import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.types.DateType +import org.apache.spark.sql.{SparkSession, SparkSupport} /** * Efficient SparkPlan with code generation support to consume an RDD @@ -33,7 +33,7 @@ import org.apache.spark.sql.types.DateType */ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], isFlat: Boolean, output: Seq[Attribute]) - extends LeafExecNode with CodegenSupport { + extends LeafExecNode with CodegenSupport with SparkSupport { override protected def doExecute(): RDD[InternalRow] = { rdd.mapPartitionsInternal(_.map(encoder.toRow)) @@ -45,9 +45,8 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], override protected def doProduce(ctx: CodegenContext): String = { val dateTimeClass = DateTimeUtils.getClass.getName.replace("$", "") - val iterator = ctx.freshName("iterator") - ctx.addMutableState("scala.collection.Iterator", iterator, - s"$iterator = inputs[0];") + val iterator = internals.addClassField(ctx, "scala.collection.Iterator", "iterator", + v => s"$v = inputs[0];") val javaTypeName = encoder.clsTag.runtimeClass.getName val objVar = ctx.freshName("object") @@ -71,14 +70,14 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], val declarations = new StringBuilder def optimizeDate(expr: Expression): ExprCode = expr match { - case s@StaticInvoke(_, _, "fromJavaDate", inputValue :: Nil, _) => + case s: StaticInvoke if s.functionName == "fromJavaDate" && s.arguments.length == 1 => // optimization to re-use previous date since it may remain // same for a while in many cases val prevJavaDate = ctx.freshName("prevJavaDate") val prevDate = ctx.freshName("prevDate") declarations.append(s"java.sql.Date $prevJavaDate = null;\n") declarations.append(s"int $prevDate = 0;\n") - val inputDate = inputValue.genCode(ctx) + val inputDate = s.arguments.head.genCode(ctx) val javaDate = inputDate.value val ev = s.genCode(ctx) val code = if (ev.isNull == "false") { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index d499157659..440cb2fc9d 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -36,7 +36,7 @@ import org.apache.spark.sql.execution.metric.{SQLMetric, SQLMetricInfo, SQLMetri import org.apache.spark.sql.execution.row.{RowFormatRelation, RowFormatScanRDD, RowTableScan} import org.apache.spark.sql.sources.{BaseRelation, PrunedUnsafeFilteredScan, SamplingRelation} import org.apache.spark.sql.types._ -import org.apache.spark.sql.{AnalysisException, CachedDataFrame, SnappySession} +import org.apache.spark.sql.{AnalysisException, CachedDataFrame, SnappySession, SparkSupport} import org.apache.spark.unsafe.types.{CalendarInterval, UTF8String} @@ -56,7 +56,7 @@ private[sql] abstract class PartitionedPhysicalScan( @transient override val relation: BaseRelation, // not used currently (if need to use then get from relation.table) override val metastoreTableIdentifier: Option[TableIdentifier] = None) - extends DataSourceScanExec with CodegenSupportOnExecutor { + extends DataSourceScanExec with CodegenSupportOnExecutor with SparkSupport { def getMetrics: Map[String, SQLMetric] = { if (sqlContext eq null) Map.empty @@ -92,7 +92,7 @@ private[sql] abstract class PartitionedPhysicalScan( } protected override def doExecute(): RDD[InternalRow] = { - WholeStageCodegenExec(this).execute() + internals.newWholeStagePlan(this).execute() } /** Specifies how data is partitioned across different nodes in the cluster. */ @@ -338,7 +338,7 @@ trait PartitionedDataSourceScan extends PrunedUnsafeFilteredScan { private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, basePartKeys: Seq[Expression], otherPlan: SparkPlan, - otherPartKeys: Seq[Expression]) extends SparkPlan with CodegenSupport { + otherPartKeys: Seq[Expression]) extends SparkPlan with CodegenSupport with SparkSupport { private var consumedCode: String = _ private val consumedVars: ArrayBuffer[ExprCode] = ArrayBuffer.empty @@ -358,8 +358,8 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, override protected def doProduce(ctx: CodegenContext): String = { val child1Produce = inputCode.produce(ctx, this) - val input = ctx.freshName("input") - ctx.addMutableState("scala.collection.Iterator", input, s" $input = inputs[1]; ") + val input = internals.addClassField(ctx, "scala.collection.Iterator", "input", + v => s"$v = inputs[1];") val row = ctx.freshName("row") val columnsInputEval = otherPlan.output.zipWithIndex.map { case (ref, ordinal) => @@ -399,7 +399,7 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, } override protected def doExecute(): RDD[InternalRow] = attachTree(this, "execute") { - WholeStageCodegenExec(this).execute() + internals.newWholeStagePlan(this).execute() } override def output: Seq[Attribute] = basePlan.output diff --git a/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala index 53cbe94915..f178d652b6 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala @@ -17,6 +17,7 @@ package org.apache.spark.sql.execution import org.apache.spark.rdd.RDD +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.internal.CodeGenerationException @@ -25,7 +26,7 @@ import org.apache.spark.sql.internal.CodeGenerationException * version and use the same for non-codegenerated case. For that case this * prevents recursive calls into code generation in case it fails for some reason. */ -abstract class NonRecursivePlans extends SparkPlan { +abstract class NonRecursivePlans extends SparkPlan with SparkSupport { /** * Variable to disallow recursive generation so will mark the case of @@ -38,7 +39,7 @@ abstract class NonRecursivePlans extends SparkPlan { throw new CodeGenerationException("Code generation failed for some of the child plans") } nonCodeGeneratedPlanCalls += 1 - WholeStageCodegenExec(this).execute() + internals.newWholeStagePlan(this).execute() } override def makeCopy(newArgs: Array[AnyRef]): NonRecursivePlans = { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index 267ad90db7..6b0e520da9 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.shared.ClientResolverUtils import io.snappydata.collection.ObjectHashSet import org.apache.spark.rdd.RDD -import org.apache.spark.sql.SnappySession import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, BindReferences, Expression, NamedExpression} @@ -31,6 +30,7 @@ import org.apache.spark.sql.execution.columnar.encoding.StringDictionary import org.apache.spark.sql.execution.joins.{BuildLeft, BuildRight, BuildSide, HashJoinExec} import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.types._ +import org.apache.spark.sql.{SnappySession, SparkSupport} import org.apache.spark.unsafe.array.ByteArrayMethods /** @@ -85,7 +85,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, hashMapTerm: String, dataTerm: String, maskTerm: String, multiMap: Boolean, @transient consumer: CodegenSupport, @transient cParent: CodegenSupport, override val child: SparkPlan) - extends UnaryExecNode with CodegenSupport { + extends UnaryExecNode with CodegenSupport with SparkSupport { override def output: Seq[Attribute] = child.output @@ -694,7 +694,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // initialize or reuse the array at batch level for join // null key will be placed at the last index of dictionary // and dictionary index will be initialized to that by ColumnTableScan - ctx.addMutableState(classOf[StringDictionary].getName, dictionary.value, "") + internals.addClassField(ctx, classOf[StringDictionary].getName, + dictionary.value, forceInline = true, useFreshName = false) ctx.addNewFunction(dictionaryArrayInit, s""" |public $className[] $dictionaryArrayInit() { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala index 2d85d056ea..0216978872 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala @@ -16,13 +16,14 @@ */ package org.apache.spark.sql.execution +import scala.collection.AbstractIterator + import org.apache.spark.TaskContext import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeSet, SortOrder, UnsafeRow} import org.apache.spark.sql.catalyst.plans.physical.{Distribution, Partitioning} -import org.apache.spark.sql.catalyst.util.AbstractScalaRowIterator import org.apache.spark.sql.execution.metric.SQLMetric /** @@ -55,9 +56,9 @@ case class SnappySortExec(sortPlan: SortExec, child: SparkPlan) child.execute().mapPartitionsPreserveInternal(itr => - new AbstractScalaRowIterator[UnsafeRow] { + new AbstractIterator[UnsafeRow] { - private lazy val sortedIterator: AbstractScalaRowIterator[UnsafeRow] = { + private lazy val sortedIterator: Iterator[UnsafeRow] = { val sorter = sortPlan.createSorter() val metrics = TaskContext.get().taskMetrics() // Remember spill data size of this task before execute this operator so that we can @@ -68,7 +69,7 @@ case class SnappySortExec(sortPlan: SortExec, child: SparkPlan) peakMemory += sorter.getPeakMemoryUsage spillSize += metrics.memoryBytesSpilled - spillSizeBefore metrics.incPeakExecutionMemory(sorter.getPeakMemoryUsage) - sortedIterator.asInstanceOf[AbstractScalaRowIterator[UnsafeRow]] + sortedIterator } override def hasNext: Boolean = sortedIterator.hasNext diff --git a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala index e55914469e..59767f3f81 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala @@ -29,12 +29,12 @@ import org.apache.spark.sql.hive.ConnectorCatalog import org.apache.spark.sql.sources.DestroyRelation import org.apache.spark.sql.store.StoreUtils import org.apache.spark.sql.types.{LongType, StructType} -import org.apache.spark.sql.{DelegateRDD, SnappyContext, SnappySession, ThinClientConnectorMode} +import org.apache.spark.sql.{DelegateRDD, SnappyContext, SnappySession, SparkSupport, ThinClientConnectorMode} /** * Base class for bulk insert/mutation operations for column and row tables. */ -trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor { +trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor with SparkSupport { def partitionColumns: Seq[String] @@ -99,7 +99,7 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor { override protected def doExecute(): RDD[InternalRow] = { // don't expect code generation to fail - WholeStageCodegenExec(this).execute() + internals.newWholeStagePlan(this).execute() } override def inputRDDs(): Seq[RDD[InternalRow]] = { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala index e398150770..da6350a143 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala @@ -19,13 +19,13 @@ package org.apache.spark.sql.execution.aggregate import scala.collection.mutable.ArrayBuffer import org.apache.spark.rdd.RDD -import org.apache.spark.sql.CachedDataFrame import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.Attribute import org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator import org.apache.spark.sql.catalyst.plans.physical.{Distribution, UnspecifiedDistribution} -import org.apache.spark.sql.execution.{BufferedRowIterator, InputAdapter, PlanLater, SparkPlan, UnaryExecNode, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{BufferedRowIterator, InputAdapter, PlanLater, SparkPlan, UnaryExecNode} import org.apache.spark.sql.internal.SnappySessionState +import org.apache.spark.sql.{CachedDataFrame, SparkSupport} /** * Special plan to collect top-level aggregation on driver itself and avoid @@ -34,7 +34,7 @@ import org.apache.spark.sql.internal.SnappySessionState case class CollectAggregateExec( @transient basePlan: SnappyHashAggregateExec, child: SparkPlan, - override val output: Seq[Attribute]) extends UnaryExecNode { + override val output: Seq[Attribute]) extends UnaryExecNode with SparkSupport { override def nodeName: String = "CollectAggregate" @@ -47,7 +47,7 @@ case class CollectAggregateExec( // temporarily switch producer to an InputAdapter for rows as normal // Iterator[UnsafeRow] which will be set explicitly in executeCollect() basePlan.childProducer = InputAdapter(child) - val (ctx, cleanedSource) = WholeStageCodegenExec(basePlan).doCodeGen() + val (ctx, cleanedSource) = internals.newWholeStagePlan(basePlan).doCodeGen() basePlan.childProducer = child (cleanedSource, ctx.references.toArray) } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index ac6ba80fd7..857ddbd194 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -46,7 +46,7 @@ import org.apache.spark.sql.catalyst.expressions.codegen._ import org.apache.spark.sql.catalyst.plans.physical._ import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.metric.SQLMetrics -import org.apache.spark.sql.{SnappySession, collection} +import org.apache.spark.sql.{SnappySession, SparkInternals, SparkSupport, collection} import org.apache.spark.util.Utils /** @@ -114,15 +114,6 @@ case class SnappyHashAggregateExec( .map(_.toAttribute)) ++ AttributeSet(aggregateBufferAttributes) - private def getAliases(expressions: Seq[Expression], - existing: Seq[Seq[Attribute]]): Seq[Seq[Attribute]] = { - expressions.zipWithIndex.map { case (e, i) => - resultExpressions.collect { - case a@Alias(c, _) if c.semanticEquals(e) => a.toAttribute - } ++ (if (existing.isEmpty) Nil else existing(i)) - } - } - override def outputPartitioning: Partitioning = { child.outputPartitioning } @@ -145,29 +136,23 @@ case class SnappyHashAggregateExec( case g: GroupAggregate => g.aggBufferAttributesForGroup case sum: Sum if !sum.child.nullable => val sumAttr = sum.aggBufferAttributes.head - sumAttr.copy(nullable = false)(sumAttr.exprId, sumAttr.qualifier, - sumAttr.isGenerated) :: Nil + internals.copyAttribute(sumAttr)(nullable = false) :: Nil case avg: Average if !avg.child.nullable => val sumAttr = avg.aggBufferAttributes.head - sumAttr.copy(nullable = false)(sumAttr.exprId, sumAttr.qualifier, - sumAttr.isGenerated) :: avg.aggBufferAttributes(1) :: Nil + internals.copyAttribute(sumAttr)(nullable = false) :: avg.aggBufferAttributes(1) :: Nil case max: Max if !max.child.nullable => val maxAttr = max.aggBufferAttributes.head - maxAttr.copy(nullable = false)(maxAttr.exprId, maxAttr.qualifier, - maxAttr.isGenerated) :: Nil + internals.copyAttribute(maxAttr)(nullable = false) :: Nil case min: Min if !min.child.nullable => val minAttr = min.aggBufferAttributes.head - minAttr.copy(nullable = false)(minAttr.exprId, minAttr.qualifier, - minAttr.isGenerated) :: Nil + internals.copyAttribute(minAttr)(nullable = false) :: Nil case last: Last if !last.child.nullable => val lastAttr = last.aggBufferAttributes.head val tail = if (last.aggBufferAttributes.length == 2) { val valueSetAttr = last.aggBufferAttributes(1) - valueSetAttr.copy(nullable = false)(valueSetAttr.exprId, - valueSetAttr.qualifier, valueSetAttr.isGenerated) :: Nil + internals.copyAttribute(valueSetAttr)(nullable = false) :: Nil } else Nil - lastAttr.copy(nullable = false)(lastAttr.exprId, lastAttr.qualifier, - lastAttr.isGenerated) :: tail + internals.copyAttribute(lastAttr)(nullable = false) :: tail case _ => aggregate.aggBufferAttributes } @@ -275,18 +260,15 @@ case class SnappyHashAggregateExec( @transient private var bufVarUpdates: String = _ private def doProduceWithoutKeys(ctx: CodegenContext): String = { - val initAgg = ctx.freshName("initAgg") - ctx.addMutableState("boolean", initAgg, s"$initAgg = false;") + val initAgg = internals.addClassField(ctx, "boolean", "initAgg", v => s"$v = false;") // generate variables for aggregation buffer val functions = aggregateExpressions.map(_.aggregateFunction .asInstanceOf[DeclarativeAggregate]) val initExpr = functions.flatMap(f => f.initialValues) bufVars = initExpr.map { e => - val isNull = ctx.freshName("bufIsNull") - val value = ctx.freshName("bufValue") - ctx.addMutableState("boolean", isNull, "") - ctx.addMutableState(ctx.javaType(e.dataType), value, "") + val isNull = internals.addClassField(ctx, "boolean", "bufIsNull") + val value = internals.addClassField(ctx, ctx.javaType(e.dataType), "bufValue") // The initial expression should not access any column val ev = e.genCode(ctx) val initVars = @@ -478,22 +460,19 @@ case class SnappyHashAggregateExec( } private def doProduceWithKeys(ctx: CodegenContext): String = { - val initAgg = ctx.freshName("initAgg") - ctx.addMutableState("boolean", initAgg, s"$initAgg = false;") + val initAgg = internals.addClassField(ctx, "boolean", "initAgg", v => s"$v = false;") // Create a name for iterator from HashMap - val iterTerm = ctx.freshName("mapIter") val iter = ctx.freshName("mapIter") val iterObj = ctx.freshName("iterObj") val iterClass = "java.util.Iterator" - ctx.addMutableState(iterClass, iterTerm, "") + val iterTerm = internals.addClassField(ctx, iterClass, "mapIter") val doAgg = ctx.freshName("doAggregateWithKeys") // generate variable name for hash map for use here and in consume - hashMapTerm = ctx.freshName("hashMap") val hashSetClassName = classOf[ObjectHashSet[_]].getName - ctx.addMutableState(hashSetClassName, hashMapTerm, "") + hashMapTerm = internals.addClassField(ctx, hashSetClassName, "hashMap") // generate variables for HashMap data array and mask mapDataTerm = ctx.freshName("mapData") @@ -535,7 +514,7 @@ case class SnappyHashAggregateExec( // The child could change `copyResult` to true, but we had already // consumed all the rows, so `copyResult` should be reset to `false`. - ctx.copyResult = false + internals.resetCopyResult(ctx) val aggTime = metricTerm(ctx, "aggTime") val beforeAgg = ctx.freshName("beforeAgg") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala index 25687c386f..92758a62e1 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala @@ -26,12 +26,13 @@ import io.snappydata.collection.OpenHashSet import org.apache.spark.Logging import org.apache.spark.rdd.RDD +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext import org.apache.spark.sql.catalyst.expressions.{Attribute, BoundReference} import org.apache.spark.sql.execution.columnar.impl.ColumnFormatRelation import org.apache.spark.sql.execution.row.RowTableScan -import org.apache.spark.sql.execution.{BufferedRowIterator, CodegenSupportOnExecutor, LeafExecNode, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{BufferedRowIterator, CodegenSupportOnExecutor, LeafExecNode} import org.apache.spark.sql.store.CodeGeneration import org.apache.spark.sql.types._ @@ -40,7 +41,7 @@ final class ColumnBatchCreator( val tableName: String, // internal column table name val schema: StructType, val externalStore: ExternalStore, - val compressionCodec: String) extends Logging { + val compressionCodec: String) extends Logging with SparkSupport { def createAndStoreBatch(sc: ScanController, row: AbstractCompactExecRow, batchID: Long, bucketID: Int, @@ -92,7 +93,7 @@ final class ColumnBatchCreator( // this is only used for local code generation while its RDD semantics // and related methods are all ignored val (ctx, code) = ExternalStoreUtils.codeGenOnExecutor( - WholeStageCodegenExec(insertPlan), insertPlan) + internals.newWholeStagePlan(insertPlan), insertPlan) val references = ctx.references // also push the index of batchId reference at the end which can be // used by caller to update the reference objects before execution @@ -144,7 +145,7 @@ final class ColumnBatchCreator( // this is only used for local code generation while its RDD semantics // and related methods are all ignored val (ctx, code) = ExternalStoreUtils.codeGenOnExecutor( - WholeStageCodegenExec(insertPlan), insertPlan) + internals.newWholeStagePlan(insertPlan), insertPlan) val references = ctx.references.toArray (code, references) }) @@ -171,7 +172,7 @@ trait ColumnBatchRowsBuffer { * code to closure callbacks model as required by StratifiedSampler.append */ case class CallbackColumnInsert(_schema: StructType) - extends LeafExecNode with CodegenSupportOnExecutor { + extends LeafExecNode with CodegenSupportOnExecutor with SparkSupport { override def output: Seq[Attribute] = _schema.toAttributes @@ -187,13 +188,11 @@ case class CallbackColumnInsert(_schema: StructType) val row = ctx.freshName("row") val hasResults = ctx.freshName("hasResults") val clearResults = ctx.freshName("clearResults") - val rowsBuffer = ctx.freshName("rowsBuffer") val rowsBufferClass = classOf[ColumnBatchRowsBuffer].getName - ctx.addMutableState(rowsBufferClass, rowsBuffer, "") + val rowsBuffer = internals.addClassField(ctx, rowsBufferClass, "rowsBuffer") // add bucketId variable set to -1 by default - bucketIdTerm = ctx.freshName("bucketId") + bucketIdTerm = internals.addClassField(ctx, "int", "bucketId", v => s"$v = -1;") resetInsertions = ctx.freshName("resetInsertionsCount") - ctx.addMutableState("int", bucketIdTerm, s"$bucketIdTerm = -1;") val columnsExpr = output.zipWithIndex.map { case (a, i) => BoundReference(i, a.dataType, a.nullable) } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala index 4dfd417203..7efc0bcdcc 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala @@ -97,29 +97,23 @@ case class ColumnDeleteExec(child: SparkPlan, columnTable: String, override def doConsume(ctx: CodegenContext, input: Seq[ExprCode], row: ExprCode): String = { - val position = ctx.freshName("position") - val lastColumnBatchId = ctx.freshName("lastColumnBatchId") - val lastBucketId = ctx.freshName("lastBucketId") - val lastNumRows = ctx.freshName("lastNumRows") - val deleteEncoder = ctx.freshName("deleteEncoder") - batchOrdinal = ctx.freshName("batchOrdinal") finishDelete = ctx.freshName("finishDelete") deleteMetric = if (onExecutor) null else metricTerm(ctx, "numDeleteColumnBatchRows") val deleteEncoderClass = classOf[ColumnDeleteEncoder].getName - val initializeEncoder = + val deleteEncoder = internals.addClassField(ctx, deleteEncoderClass, "deleteEncoder") + val initializeEncoder: String => String = position => s""" |$deleteEncoder = new $deleteEncoderClass(); |$position = $deleteEncoder.initialize(8); // start with a default size """.stripMargin - - ctx.addMutableState(deleteEncoderClass, deleteEncoder, "") - ctx.addMutableState("int", position, initializeEncoder) - ctx.addMutableState("int", batchOrdinal, "") - ctx.addMutableState("long", lastColumnBatchId, s"$lastColumnBatchId = $invalidUUID;") - ctx.addMutableState("int", lastBucketId, "") - ctx.addMutableState("int", lastNumRows, "") + val position = internals.addClassField(ctx, "int", "position", initializeEncoder) + batchOrdinal = internals.addClassField(ctx, "int", "batchOrdinal") + val lastColumnBatchId = internals.addClassField(ctx, "long", "lastColumnBatchId", + v => s"$v = $invalidUUID;") + val lastBucketId = internals.addClassField(ctx, "int", "lastBucketId") + val lastNumRows = internals.addClassField(ctx, "int", "lastNumRows") val tableName = ctx.addReferenceObj("columnTable", columnTable, "java.lang.String") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala index f8e0f3dc75..8f7c7fb04f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala @@ -42,12 +42,10 @@ trait ColumnExec extends RowExec { val externalStoreTerm = ctx.addReferenceObj("externalStore", externalStore) val listenerClass = classOf[SnapshotConnectionListener].getName val storeClass = classOf[JDBCSourceAsColumnarStore].getName - taskListener = ctx.freshName("taskListener") - connTerm = ctx.freshName("connection") val getContext = Utils.genTaskContextFunction(ctx) - ctx.addMutableState(listenerClass, taskListener, "") - ctx.addMutableState(connectionClass, connTerm, "") + taskListener = internals.addClassField(ctx, listenerClass, "taskListener") + connTerm = internals.addClassField(ctx, connectionClass, "connection") val initCode = s""" diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index 360c3d44e0..7869f9bdea 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -52,7 +52,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], onExecutor = false, relation.schema, relation.externalStore, useMemberVariables = false) } - @transient private var encoderCursorTerms: Seq[(String, String)] = _ + @transient private var encoderCursorTerms: Array[(String, String)] = _ @transient private var maxDeltaRowsTerm: String = _ @transient private var batchSizeTerm: String = _ @transient private var defaultBatchSizeTerm: String = _ @@ -126,7 +126,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val listenerClass = classOf[TaskCompletionListener].getName val getContext = Utils.genTaskContextFunction(ctx) - ctx.addMutableState("int", defaultBatchSizeTerm, + defaultBatchSizeTerm = internals.addClassField(ctx, "int", "defaultBatchSize", _ => s""" |if ($getContext() != null) { | $getContext().addTaskCompletionListener(new $listenerClass() { @@ -158,22 +158,12 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], classOf[StructType].getName) val schemaLength = tableSchema.length - encoderArrayTerm = ctx.freshName("encoderArray") - cursorArrayTerm = ctx.freshName("cursorArray") - numInsertions = ctx.freshName("numInsertions") - ctx.addMutableState("long", numInsertions, s"$numInsertions = -1L;") + numInsertions = internals.addClassField(ctx, "long", "numInsertions", v => s"$v = -1L;") maxDeltaRowsTerm = ctx.freshName("maxDeltaRows") - batchSizeTerm = ctx.freshName("currentBatchSize") txIdConnArray = ctx.freshName("txIdConnArray") txId = ctx.freshName("txId") conn = ctx.freshName("conn") - val batchSizeDeclaration = if (true) { - ctx.addMutableState("int", batchSizeTerm, s"$batchSizeTerm = 0;") - "" - } else { - s"int $batchSizeTerm = 0;" - } - defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") + batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") val defaultRowSize = ctx.freshName("defaultRowSize") val childProduce = doChildProduce(ctx) @@ -190,26 +180,19 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], case _ => } - val initEncoderCode = + val initEncoderCode: String => String = encoderArray => s""" - |this.$encoderArrayTerm[i] = $encodingClass.getColumnEncoder( + |this.$encoderArray[i] = $encodingClass.getColumnEncoder( | $schemaTerm.fields()[i]); """.stripMargin - - val initEncoderArray = loop(initEncoderCode, schemaLength) - - ctx.addMutableState(s"$encoderClass[]", - encoderArrayTerm, + encoderArrayTerm = internals.addClassField(ctx, s"$encoderClass[]", "encoderArray", enc => s""" - |this.$encoderArrayTerm = - | new $encoderClass[$schemaLength]; - |$initEncoderArray + |this.$enc = new $encoderClass[$schemaLength]; + |${loop(initEncoderCode(enc), schemaLength)} """.stripMargin) - ctx.addMutableState("long[]", cursorArrayTerm, - s""" - |this.$cursorArrayTerm = new long[$schemaLength]; - """.stripMargin) + cursorArrayTerm = internals.addClassField(ctx, "long[]", "cursorArray", + cur => s"this.$cur = new long[$schemaLength];") val encoderLoopCode = s"$defaultRowSize += " + s"$encoderArrayTerm[i].defaultSize($schemaTerm.fields()[i].dataType());" @@ -241,7 +224,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], | |boolean success = false; |try { - |$batchSizeDeclaration |if ($numInsertions < 0) { | $numInsertions = 0; | int $defaultRowSize = 0; @@ -293,51 +275,37 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], else metricTerm(ctx, "numInsertedRows") schemaTerm = ctx.addReferenceObj("schema", tableSchema, classOf[StructType].getName) - encoderCursorTerms = tableSchema.map { _ => - (ctx.freshName("encoder"), ctx.freshName("cursor")) - } - numInsertions = ctx.freshName("numInsertions") - ctx.addMutableState("long", numInsertions, s"$numInsertions = -1L;") + encoderCursorTerms = new Array[(String, String)](tableSchema.length) + numInsertions = internals.addClassField(ctx, "long", "numInsertions", v => s"$v = -1L;") maxDeltaRowsTerm = ctx.freshName("maxDeltaRows") - batchSizeTerm = ctx.freshName("currentBatchSize") txIdConnArray = ctx.freshName("txIdConnArray") txId = ctx.freshName("txId") conn = ctx.freshName("conn") val batchSizeDeclaration = if (useMemberVariables) { - ctx.addMutableState("int", batchSizeTerm, s"$batchSizeTerm = 0;") + batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") "" } else { + batchSizeTerm = ctx.freshName("currentBatchSize") s"int $batchSizeTerm = 0;" } - defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") val defaultRowSize = ctx.freshName("defaultRowSize") - val childProduce = doChildProduce(ctx) - child match { - case c: CallbackColumnInsert => - ctx.addNewFunction(c.resetInsertions, - s""" - |public final void ${c.resetInsertions}() { - | $batchSizeTerm = 0; - | $numInsertions = -1; - |} - """.stripMargin) - batchBucketIdTerm = Some(c.bucketIdTerm) - case _ => - } - val closeEncoders = new StringBuilder - val (declarations, cursorDeclarations) = encoderCursorTerms.indices.map { i => - val (encoder, cursor) = encoderCursorTerms(i) - ctx.addMutableState(encoderClass, encoder, + val (declarations, cursorDeclarations) = tableSchema.indices.map { i => + val encoder = internals.addClassField(ctx, encoderClass, "encoder", encoder => s""" |this.$encoder = $encodingClass.getColumnEncoder( | $schemaTerm.fields()[$i]); """.stripMargin) + var cursor: String = null val cursorDeclaration = if (useMemberVariables) { - ctx.addMutableState("long", cursor, s"$cursor = 0L;") + cursor = internals.addClassField(ctx, "long", "cursor", v => s"$v = 0L;") "" - } else s"long $cursor = 0L;" + } else { + cursor = ctx.freshName("cursor") + s"long $cursor = 0L;" + } + encoderCursorTerms(i) = (encoder, cursor) val declaration = s""" |final $encoderClass $encoder = this.$encoder; @@ -346,6 +314,21 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], closeEncoders.append(s"if ($encoder != null) $encoder.close();\n") (declaration, cursorDeclaration) }.unzip + + val childProduce = doChildProduce(ctx) + child match { + case c: CallbackColumnInsert => + ctx.addNewFunction(c.resetInsertions, + s""" + |public final void ${c.resetInsertions}() { + | $batchSizeTerm = 0; + | $numInsertions = -1; + |} + """.stripMargin) + batchBucketIdTerm = Some(c.bucketIdTerm) + case _ => + } + val checkEnd = if (useMemberVariables) { "if (!currentRows.isEmpty()) return" } else { @@ -487,10 +470,8 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val sizeExceededTerm = ctx.freshName("sizeExceeded") cursorsArrayTerm = ctx.freshName("cursors") - val mutableRow = ctx.freshName("mutableRow") - - ctx.addMutableState("SpecificInternalRow", mutableRow, - s"$mutableRow = new SpecificInternalRow($schemaTerm);") + val mutableRow = internals.addClassField(ctx, "SpecificInternalRow", "mutableRow", + v => s"$v = new SpecificInternalRow($schemaTerm);") val rowWriteExprs = schema.indices.map { i => val field = schema(i) @@ -505,7 +486,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], } """ } - val allRowWriteExprs = ctx.splitExpressions(ctx.INPUT_ROW, rowWriteExprs) + val allRowWriteExprs = internals.splitExpressions(ctx, rowWriteExprs) ctx.INPUT_ROW = mutableRow val rowReadExprs = schema.zipWithIndex.map { case (field, ordinal) => diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index ddc1ce326d..3fbdf383a8 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -153,8 +153,7 @@ private[sql] final case class ColumnTableScan( def convertExprToMethodCall(ctx: CodegenContext, expr: ExprCode, attr: Attribute, index: Int, batchOrdinal: String): ExprCode = { val retValName = ctx.freshName(s"col$index") - val nullVarForCol = ctx.freshName(s"nullVarForCol$index") - ctx.addMutableState("boolean", nullVarForCol, "") + val nullVarForCol = internals.addClassField(ctx, "boolean", s"nullVarForCol$index") val sqlType = Utils.getSQLDataType(attr.dataType) val jt = ctx.javaType(sqlType) val name = s"readValue_$index" @@ -185,16 +184,16 @@ private[sql] final case class ColumnTableScan( // It returns an iterator of iterators (row + column) // except when doing union with multiple RDDs where other // RDDs return iterator of UnsafeRows. - val rowInput = ctx.freshName("rowInput") - val colInput = ctx.freshName("colInput") - val rowInputSRR = ctx.freshName("rowInputSRR") - val input = ctx.freshName("input") - val inputIsRow = s"${input}IsRow" - val inputIsRowSRR = s"${input}IsRowSRR" - val inputIsOtherRDD = s"${input}IsOtherRDD" - val rs = ctx.freshName("resultSet") + var rowInput: String = null + var colInput: String = null + var rowInputSRR: String = null + var input: String = null + var inputIsRow: String = null + var inputIsRowSRR: String = null + var inputIsOtherRDD: String = null + var rs: String = null val rsIterClass = classOf[ResultSetTraversal].getName - val unsafeHolder = if (otherRDDs.isEmpty && !isForSampleReservoirAsRegion) null + var unsafeHolder = if (otherRDDs.isEmpty && !isForSampleReservoirAsRegion) null else ctx.freshName("unsafeHolder") val updatedColumnCount = metricTerm(ctx, "updatedColumnCount") val deletedBatchCount = metricTerm(ctx, "deletedBatchCount") @@ -208,8 +207,7 @@ private[sql] final case class ColumnTableScan( else null val (weightVarName, weightAssignCode) = if (output.exists(_.name == Utils.WEIGHTAGE_COLUMN_NAME)) { - val varName = ctx.freshName("weightage") - ctx.addMutableState("long", varName, s"$varName = 0;") + val varName = internals.addClassField(ctx, "long", "weightage", v => s"$v = 0;") (varName, s"$varName = $wrappedRow.weight();") } else ("", "") @@ -218,35 +216,35 @@ private[sql] final case class ColumnTableScan( else classOf[ColumnBatchIteratorOnRS].getName if (otherRDDs.isEmpty) { if (isForSampleReservoirAsRegion) { - ctx.addMutableState(iteratorClass, rowInputSRR, - s"$rowInputSRR = ($iteratorClass)inputs[0].next();") - ctx.addMutableState(unsafeHolderClass, unsafeHolder, - s"$unsafeHolder = new $unsafeHolderClass();") - ctx.addMutableState("boolean", inputIsRowSRR, s"$inputIsRowSRR = true;") + rowInputSRR = internals.addClassField(ctx, iteratorClass, "rowInputSRR", + v => s"$v = ($iteratorClass)inputs[0].next();") + unsafeHolder = internals.addClassField(ctx, unsafeHolderClass, "unsafeHolder", + v => s"$v = new $unsafeHolderClass();") + inputIsRowSRR = internals.addClassField(ctx, "boolean", "inputIsRowSRR", + v => s"$v = true;") } - ctx.addMutableState(iteratorClass, rowInput, - s"$rowInput = ($iteratorClass)inputs[0].next();") - ctx.addMutableState(colIteratorClass, colInput, - s"$colInput = ($colIteratorClass)inputs[0].next();") - ctx.addMutableState("java.sql.ResultSet", rs, - s"$rs = (($rsIterClass)$rowInput).rs();") + rowInput = internals.addClassField(ctx, iteratorClass, "rowInput", + v => s"$v = ($iteratorClass)inputs[0].next();") + colInput = internals.addClassField(ctx, colIteratorClass, "colInput", + v => s"$v = ($colIteratorClass)inputs[0].next();") + rs = internals.addClassField(ctx, "java.sql.ResultSet", "resultSet", + v => s"$v = (($rsIterClass)$rowInput).rs();") } else { - ctx.addMutableState("boolean", inputIsOtherRDD, - s"$inputIsOtherRDD = (partitionIndex >= $otherRDDsPartitionIndex);") - ctx.addMutableState(iteratorClass, rowInput, - s"$rowInput = $inputIsOtherRDD ? inputs[0] " + + inputIsOtherRDD = internals.addClassField(ctx, "boolean", "inputIsOtherRDD", + v => s"$v = (partitionIndex >= $otherRDDsPartitionIndex);") + rowInput = internals.addClassField(ctx, iteratorClass, "rowInput", + v => s"$v = $inputIsOtherRDD ? inputs[0] " + s": ($iteratorClass)inputs[0].next();") - ctx.addMutableState(colIteratorClass, colInput, - s"$colInput = $inputIsOtherRDD ? null : ($colIteratorClass)inputs[0].next();") - ctx.addMutableState("java.sql.ResultSet", rs, - s"$rs = $inputIsOtherRDD ? null : (($rsIterClass)$rowInput).rs();") - ctx.addMutableState(unsafeHolderClass, unsafeHolder, - s"$unsafeHolder = new $unsafeHolderClass();") + colInput = internals.addClassField(ctx, colIteratorClass, "colInput", + v => s"$v = $inputIsOtherRDD ? null : ($colIteratorClass)inputs[0].next();") + rs = internals.addClassField(ctx, "java.sql.ResultSet", "resultSet", + v => s"$v = $inputIsOtherRDD ? null : (($rsIterClass)$rowInput).rs();") + unsafeHolder = internals.addClassField(ctx, unsafeHolderClass, "unsafeHolder", + v => s"$v = new $unsafeHolderClass();") } - ctx.addMutableState(iteratorClass, input, - if (isForSampleReservoirAsRegion) s"$input = $rowInputSRR;" - else s"$input = $rowInput;") - ctx.addMutableState("boolean", inputIsRow, s"$inputIsRow = true;") + input = internals.addClassField(ctx, iteratorClass, "input", + v => if (isForSampleReservoirAsRegion) s"$v = $rowInputSRR;" else s"$v = $rowInput;") + inputIsRow = internals.addClassField(ctx, "boolean", "inputIsRow", v => s"$v = true;") ctx.currentVars = null val encodingClass = ColumnEncoding.encodingClassName @@ -257,25 +255,20 @@ private[sql] final case class ColumnTableScan( val rowDecoderClass = classOf[UnsafeRowDecoder].getName val deletedDecoderClass = classOf[ColumnDeleteDecoder].getName val batch = ctx.freshName("batch") - val numBatchRows = s"${batch}NumRows" val numFullRows = s"${batch}NumFullRows" val numDeltaRows = s"${batch}NumDeltaRows" - val batchIndex = s"${batch}Index" - val buffers = s"${batch}Buffers" val numRows = ctx.freshName("numRows") val batchOrdinal = ctx.freshName("batchOrdinal") - val deletedDecoder = s"${batch}Deleted" - val deletedDecoderLocal = s"${deletedDecoder}Local" + val deletedDecoderLocal = ctx.freshName("deletedDecoderLocal") var deletedDeclaration = "" var deletedCheck = "" - val deletedCount = ctx.freshName("deletedCount") var deletedCountCheck = "" - ctx.addMutableState("java.nio.ByteBuffer", buffers, "") - ctx.addMutableState("int", numBatchRows, "") - ctx.addMutableState("int", batchIndex, "") - ctx.addMutableState(deletedDecoderClass, deletedDecoder, "") - ctx.addMutableState("int", deletedCount, "") + val buffers = internals.addClassField(ctx, "java.nio.ByteBuffer", "buffers") + val numBatchRows = internals.addClassField(ctx, "int", "numBatchRows") + val batchIndex = internals.addClassField(ctx, "int", "batchIndex") + val deletedDecoder = internals.addClassField(ctx, deletedDecoderClass, "deletedDecoder") + val deletedCount = internals.addClassField(ctx, "int", "deletedCount") // need DataType and nullable to get decoder in generated code // shipping as StructType for efficient serialization @@ -336,48 +329,43 @@ private[sql] final case class ColumnTableScan( // this mapper is for the physical columns in the table val columnsInputMapper = (attr: Attribute, index: Int, rsIndex: Int) => { - val decoder = ctx.freshName("decoder") - val decoderLocal = s"${decoder}Local" - val updatedDecoder = s"${decoder}Updated" - val updatedDecoderLocal = s"${decoder}UpdatedLocal" - val numNullsVar = s"${decoder}NumNulls" - val buffer = ctx.freshName("buffer") - val bufferVar = s"${buffer}Object" + val decoderLocal = ctx.freshName("decoderLocal") + val updatedDecoderLocal = ctx.freshName("decoderUpdatedLocal") + val buffer = internals.addClassField(ctx, "java.nio.ByteBuffer", "buffer") + val numNullsVar = internals.addClassField(ctx, "int", "numNulls") val initBufferFunction = s"${buffer}Init" - if (isWideSchema) { - ctx.addMutableState("Object", bufferVar, "") - } + val bufferVar = if (isWideSchema) { + internals.addClassField(ctx, "Object", "bufferObject") + } else "" // projections are not pushed in embedded mode for optimized access val baseIndex = Utils.fieldIndex(schemaAttributes, attr.name, caseSensitive) val rsPosition = if (embedded) baseIndex + 1 else rsIndex + 1 val incrementUpdatedColumnCount = if (updatedColumnCount eq null) "" else s"\n$updatedColumnCount.${metricAdd("1")};" - ctx.addMutableState("java.nio.ByteBuffer", buffer, "") - ctx.addMutableState("int", numNullsVar, "") - - val rowDecoderCode = + val rowDecoderCode: String => String = decoder => s"$decoder = new $rsDecoderClass(($rsWithNullClass)$rs, $rsPosition);" - if (otherRDDs.isEmpty) { + val decoder = if (otherRDDs.isEmpty) { if (isForSampleReservoirAsRegion) { - ctx.addMutableState(decoderClass, decoder, - s"$decoder = new $rowDecoderClass($unsafeHolder, $baseIndex);") - initRowTableDecoders.append(rowDecoderCode).append('\n') + val decoderVar = internals.addClassField(ctx, decoderClass, "decoder", + v => s"$v = new $rowDecoderClass($unsafeHolder, $baseIndex);") + initRowTableDecoders.append(rowDecoderCode(decoderVar)).append('\n') + decoderVar } else { - ctx.addMutableState(decoderClass, decoder, rowDecoderCode) + internals.addClassField(ctx, decoderClass, "decoder", rowDecoderCode) } } else { - ctx.addMutableState(decoderClass, decoder, + internals.addClassField(ctx, decoderClass, "decoder", decoder => s""" if ($inputIsOtherRDD) { $decoder = new $rowDecoderClass($unsafeHolder, $baseIndex); } else { - $rowDecoderCode + ${rowDecoderCode(decoder)} } """ ) } - ctx.addMutableState(updatedDecoderClass, updatedDecoder, "") + val updatedDecoder = internals.addClassField(ctx, updatedDecoderClass, "updatedDecoder") ctx.addNewFunction(initBufferFunction, s""" diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala index 7f131c023b..dcadf0284a 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala @@ -138,13 +138,7 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, override def doConsume(ctx: CodegenContext, input: Seq[ExprCode], row: ExprCode): String = { // use an array of delta encoders and cursors - val deltaEncoders = ctx.freshName("deltaEncoders") - val cursors = ctx.freshName("cursors") val index = ctx.freshName("index") - batchOrdinal = ctx.freshName("batchOrdinal") - val lastColumnBatchId = ctx.freshName("lastColumnBatchId") - val lastBucketId = ctx.freshName("lastBucketId") - val lastNumRows = ctx.freshName("lastNumRows") finishUpdate = ctx.freshName("finishUpdate") val initializeEncoders = ctx.freshName("initializeEncoders") @@ -161,17 +155,18 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, val encoderClass = classOf[ColumnEncoder].getName val columnBatchClass = classOf[ColumnBatch].getName - ctx.addMutableState(s"$deltaEncoderClass[]", deltaEncoders, "") - ctx.addMutableState("long[]", cursors, + val deltaEncoders = internals.addClassField(ctx, s"$deltaEncoderClass[]", "deltaEncoders") + val cursors = internals.addClassField(ctx, "long[]", "cursors", v => s""" |$deltaEncoders = new $deltaEncoderClass[$numColumns]; - |$cursors = new long[$numColumns]; + |$v = new long[$numColumns]; |$initializeEncoders(); """.stripMargin) - ctx.addMutableState("int", batchOrdinal, "") - ctx.addMutableState("long", lastColumnBatchId, s"$lastColumnBatchId = $invalidUUID;") - ctx.addMutableState("int", lastBucketId, "") - ctx.addMutableState("int", lastNumRows, "") + batchOrdinal = internals.addClassField(ctx, "int", "batchOrdinal") + val lastColumnBatchId = internals.addClassField(ctx, "long", "lastColumnBatchId", + v => s"$v = $invalidUUID;") + val lastBucketId = internals.addClassField(ctx, "int", "lastBucketId") + val lastNumRows = internals.addClassField(ctx, "int", "lastNumRows") // last three columns in keyColumns should be internal ones val keyCols = keyColumns.takeRight(4) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala index cf0d0278ec..d3d1b2e13f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala @@ -664,7 +664,7 @@ object ExternalStoreUtils { throw new SparkException("Cannot recognize hive type string: " + hc.getType, e) } - val metadata = new MetadataBuilder().putString(HIVE_TYPE_STRING, hc.getType).build() + val metadata = new MetadataBuilder().putString(Constant.HIVE_TYPE_STRING, hc.getType).build() val field = StructField( name = hc.getName, dataType = columnType, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala index de3518986c..4f71f0c980 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala @@ -29,7 +29,6 @@ import org.apache.spark.Logging import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.expressions.{Expression, SortDirection} -import org.apache.spark.sql.catalyst.plans.logical.OverwriteOptions import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.SparkPlan import org.apache.spark.sql.execution.datasources.LogicalRelation @@ -60,6 +59,7 @@ abstract case class JDBCAppendableRelation( with IndexableRelation with Logging with NativeTableRowLevelSecurityRelation + with SparkSupport with Serializable { self => @@ -140,11 +140,11 @@ abstract case class JDBCAppendableRelation( // use the Insert plan for best performance // that will use the getInsertPlan above (in StoreStrategy) sqlContext.sessionState.executePlan( - new Insert( + internals.newInsertPlanWithCountOutput( table = LogicalRelation(this), partition = Map.empty[String, Option[String]], child = data.logicalPlan, - OverwriteOptions(overwrite), + overwrite, ifNotExists = false)).toRdd } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala index 4f79806b17..f9a8ecc515 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala @@ -62,7 +62,7 @@ import org.apache.spark.sql.types._ import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.{Logging, SparkContext} -object StoreCallbacksImpl extends StoreCallbacks with Logging with Serializable { +object StoreCallbacksImpl extends StoreCallbacks with SparkSupport with Logging with Serializable { private val partitioner = new StoreHashFunction @@ -216,8 +216,7 @@ object StoreCallbacksImpl extends StoreCallbacks with Logging with Serializable val ctx = new CodegenContext val rowClass = classOf[UnsafeRow].getName // create the code snippet for applying the filters - val numRows = ctx.freshName("numRows") - ctx.addMutableState("int", numRows, "") + val numRows = internals.addClassField(ctx, "int", "numRows") val filterFunction = ColumnTableScan.generateStatPredicate(ctx, isColumnTable = true, schemaAttrs, batchFilterExprs, numRows, metricTerm = null, metricAdd = null) val filterPredicate = if (filterFunction.isEmpty) null @@ -632,7 +631,7 @@ object StoreCallbacksImpl extends StoreCallbacks with Logging with Serializable } override def refreshPolicies(ldapGroup: String): Unit = { - val session = new SnappySession(SparkContext.getActive.get) + val session = new SnappySession(SnappyContext.globalSparkContext) session.sessionCatalog.refreshPolicies(ldapGroup) } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index 0fdd5d2db1..1d9d0a12c6 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -283,8 +283,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], } override def doProduce(ctx: CodegenContext): String = { - initMap = ctx.freshName("initMap") - ctx.addMutableState("boolean", initMap, s"$initMap = false;") + initMap = internals.addClassField(ctx, "boolean", "initMap", v => s"$v = false;") val createMap = ctx.freshName("createMap") val createMapClass = ctx.freshName("CreateMap") @@ -295,9 +294,8 @@ case class HashJoinExec(leftKeys: Seq[Expression], val numOutputRows = metricTerm(ctx, "numOutputRows") // generate variable name for hash map for use here and in consume - hashMapTerm = ctx.freshName("hashMap") val hashSetClassName = classOf[ObjectHashSet[_]].getName - ctx.addMutableState(hashSetClassName, hashMapTerm, "") + hashMapTerm = internals.addClassField(ctx, hashSetClassName, "hashMap") // using the expression IDs is enough to ensure uniqueness val buildCodeGen = buildPlan.asInstanceOf[CodegenSupport] @@ -314,9 +312,9 @@ case class HashJoinExec(leftKeys: Seq[Expression], // generate local variables for HashMap data array and mask mapDataTerm = ctx.freshName("mapData") - maskTerm = ctx.freshName("hashMapMask") - mapSize = ctx.freshName("mapSize") - keyIsUniqueTerm = ctx.freshName("keyIsUnique") + maskTerm = internals.addClassField(ctx, "int", "hashMapMask") + mapSize = internals.addClassField(ctx, "int", "mapSize", v => s"$v = -1;") + keyIsUniqueTerm = internals.addClassField(ctx, "boolean", "keyIsUnique", v => s"$v = true;") numRowsTerm = ctx.freshName("numRows") // generate the map accessor to generate key/value class @@ -327,10 +325,8 @@ case class HashJoinExec(leftKeys: Seq[Expression], multiMap = true, this, this.parent, buildPlan) val entryClass = mapAccessor.getClassName - ctx.addMutableState(s"$entryClass[]", mapDataTerm, "") - ctx.addMutableState("int", maskTerm, "") - ctx.addMutableState("int", mapSize, s"$mapSize = -1;") - ctx.addMutableState("boolean", keyIsUniqueTerm, s"$keyIsUniqueTerm = true;") + internals.addClassField(ctx, s"$entryClass[]", mapDataTerm, + forceInline = true, useFreshName = false) val buildRDDs = ctx.addReferenceObj("buildRDDs", rdds.toArray, s"${classOf[RDD[_]].getName}[]") @@ -338,19 +334,17 @@ case class HashJoinExec(leftKeys: Seq[Expression], val partitionClass = classOf[Partition].getName val buildPartsVar = ctx.addReferenceObj("buildParts", buildParts.toArray, s"$partitionClass[][]") - val allIterators = ctx.freshName("allIterators") val indexVar = ctx.freshName("index") - val contextName = ctx.freshName("context") val taskContextClass = classOf[TaskContext].getName - ctx.addMutableState(taskContextClass, contextName, - s"this.$contextName = $taskContextClass.get();") - + val contextName = internals.addClassField(ctx, taskContextClass, "context", + v => s"this.$v = $taskContextClass.get();") // switch inputs to use the buildPlan RDD iterators - ctx.addMutableState("scala.collection.Iterator[]", allIterators, + val scalaIterorClass = "scala.collection.Iterator" + val allIterators = internals.addClassField(ctx, scalaIterorClass + "[]", "allIterators", v => s""" - |$allIterators = inputs; - |inputs = new scala.collection.Iterator[$buildRDDs.length]; + |$v = inputs; + |inputs = new $scalaIterorClass[$buildRDDs.length]; |$taskContextClass $contextName = $taskContextClass.get(); |for (int $indexVar = 0; $indexVar < $buildRDDs.length; $indexVar++) { | $partitionClass[] parts = $buildPartsVar[$indexVar]; @@ -366,9 +360,8 @@ case class HashJoinExec(leftKeys: Seq[Expression], """.stripMargin) val buildProduce = buildCodeGen.produce(ctx, mapAccessor) - // switch inputs back to streamPlan iterators - val numIterators = ctx.freshName("numIterators") - ctx.addMutableState("int", numIterators, s"inputs = $allIterators;") + // switch inputs back to streamPlan iterators (variable added is a dummy) + internals.addClassField(ctx, "int", "numIterators", _ => s"inputs = $allIterators;") val numKeyColumns = buildSideKeys.length val longLived = replicatedTableJoin @@ -424,8 +417,8 @@ case class HashJoinExec(leftKeys: Seq[Expression], case (indexKey, index) => val minVar = mapAccessor.integralKeysMinVars(index) val maxVar = mapAccessor.integralKeysMaxVars(index) - ctx.addMutableState("long", minVar, "") - ctx.addMutableState("long", maxVar, "") + internals.addClassField(ctx, "long", minVar, forceInline = true, useFreshName = false) + internals.addClassField(ctx, "long", maxVar, forceInline = true, useFreshName = false) s""" $minVar = $hashMapTerm.getMinValue($indexKey); $maxVar = $hashMapTerm.getMaxValue($indexKey); diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index da00308c6f..3a930607ba 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -47,17 +47,17 @@ trait RowExec extends TableExec { protected def connectionCodes(ctx: CodegenContext): (String, String, String) = { val connectionClass = classOf[Connection].getName - connTerm = ctx.freshName("connection") // onExecutor will never be true in case of ColumnDelete/Update if (onExecutor) { // actual connection will be filled into references before execution connRef = ctx.references.length // connObj position in the array is connRef val connObj = ctx.addReferenceObj("conn", null, connectionClass) + connTerm = ctx.freshName("connection") (s"final $connectionClass $connTerm = $connObj;", "", "") } else { val utilsClass = ExternalStoreUtils.getClass.getName - ctx.addMutableState(connectionClass, connTerm, "") + connTerm = internals.addClassField(ctx, connectionClass, "connection") val props = ctx.addReferenceObj("connectionProperties", connProps) val initCode = s""" @@ -90,18 +90,15 @@ trait RowExec extends TableExec { protected def doProduce(ctx: CodegenContext, pstmtStr: String, produceAddonCode: () => String = () => ""): String = { val (initCode, commitCode, endCode) = connectionCodes(ctx) - result = ctx.freshName("result") - stmt = ctx.freshName("statement") - rowCount = ctx.freshName("rowCount") val numOpRowsMetric = if (onExecutor) null else metricTerm(ctx, s"num${opType}Rows") val numOperations = ctx.freshName("numOperations") val childProduce = doChildProduce(ctx) val mutateTable = ctx.freshName("mutateTable") - ctx.addMutableState("java.sql.PreparedStatement", stmt, "") - ctx.addMutableState("long", result, s"$result = -1L;") - ctx.addMutableState("long", rowCount, "") + stmt = internals.addClassField(ctx, "java.sql.PreparedStatement", "statement") + result = internals.addClassField(ctx, "long", "result", v => s"$v = -1L;") + rowCount = internals.addClassField(ctx, "long", "rowCount") ctx.addNewFunction(mutateTable, s""" |private void $mutateTable() throws java.io.IOException, java.sql.SQLException { @@ -143,10 +140,9 @@ trait RowExec extends TableExec { protected def doConsume(ctx: CodegenContext, input: Seq[ExprCode], schema: StructType): String = { val schemaTerm = ctx.addReferenceObj("schema", schema) - val schemaFields = ctx.freshName("schemaFields") val structFieldClass = classOf[StructField].getName - ctx.addMutableState(s"$structFieldClass[]", schemaFields, - s"$schemaFields = $schemaTerm.fields();") + val schemaFields = internals.addClassField(ctx, s"$structFieldClass[]", "schemaFields", + v => s"$v = $schemaTerm.fields();") val batchSize = connProps.executorConnProps .getProperty("batchsize", "1000").toInt val numOpRowsMetric = if (onExecutor) null diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 18a4ffcc51..0f4dc5865e 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -58,9 +58,8 @@ private[sql] final case class RowTableScan( // a parent plan may set a custom input (e.g. HashJoinExec) // for that case no need to add the "shouldStop()" calls // PartitionedPhysicalRDD always has one input - val input = ctx.freshName("input") - ctx.addMutableState("scala.collection.Iterator", - input, s"$input = inputs[0];") + val input = internals.addClassField(ctx, "scala.collection.Iterator", "input", + v => s"$v = inputs[0];") val numOutputRows = if (sqlContext eq null) null else metricTerm(ctx, "numOutputRows") ctx.currentVars = null diff --git a/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala b/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala index 7d10ea93a1..4dddfac952 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala @@ -39,13 +39,13 @@ import scala.collection.mutable import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, AttributeSet, EmptyRow, Expression, NamedExpression, ParamLiteral, PredicateHelper, TokenLiteral} -import org.apache.spark.sql.catalyst.plans.logical.{BroadcastHint, LogicalPlan, Project, Filter => LFilter} +import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, UnaryNode, Filter => LFilter} import org.apache.spark.sql.catalyst.plans.physical.UnknownPartitioning import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow, analysis, expressions} import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.execution.{PartitionedDataSourceScan, RowDataSourceScanExec} -import org.apache.spark.sql.sources.{Filter, IsNotNull, PrunedUnsafeFilteredScan} -import org.apache.spark.sql.{AnalysisException, SnappySession, SparkSession, Strategy, execution, sources} +import org.apache.spark.sql.sources.{Filter, PrunedUnsafeFilteredScan} +import org.apache.spark.sql.{AnalysisException, SnappySession, SparkSession, SparkSupport, Strategy, execution, sources} /** * This strategy makes a PartitionedPhysicalRDD out of a PrunedFilterScan based datasource. @@ -56,7 +56,8 @@ private[sql] object StoreDataSourceStrategy extends Strategy { def apply(plan: LogicalPlan): Seq[execution.SparkPlan] = plan match { case PhysicalScan(projects, filters, scan) => scan match { - case l@LogicalRelation(t: PartitionedDataSourceScan, _, _) => + case l: LogicalRelation if l.relation.isInstanceOf[PartitionedDataSourceScan] => + val t = l.relation.asInstanceOf[PartitionedDataSourceScan] pruneFilterProject( l, projects, @@ -64,7 +65,8 @@ private[sql] object StoreDataSourceStrategy extends Strategy { t.numBuckets, t.partitionColumns, (a, f) => t.buildUnsafeScan(a.map(_.name).toArray, f.toArray)) :: Nil - case l@LogicalRelation(t: PrunedUnsafeFilteredScan, _, _) => + case l: LogicalRelation if l.relation.isInstanceOf[PrunedUnsafeFilteredScan] => + val t = l.relation.asInstanceOf[PrunedUnsafeFilteredScan] pruneFilterProject( l, projects, @@ -72,7 +74,7 @@ private[sql] object StoreDataSourceStrategy extends Strategy { 0, Nil, (a, f) => t.buildUnsafeScan(a.map(_.name).toArray, f.toArray)) :: Nil - case LogicalRelation(_, _, _) => { + case _: LogicalRelation => var foundParamLiteral = false val tp = plan.transformAllExpressions { case pl: ParamLiteral => @@ -86,7 +88,6 @@ private[sql] object StoreDataSourceStrategy extends Strategy { } else { Nil } - } case _ => Nil } case _ => Nil @@ -338,7 +339,8 @@ private[sql] object StoreDataSourceStrategy extends Strategy { * [[org.apache.spark.sql.catalyst.expressions.Alias Aliases]] are in-lined/substituted if * necessary. */ -object PhysicalScan extends PredicateHelper { +object PhysicalScan extends PredicateHelper with SparkSupport { + type ReturnType = (Seq[NamedExpression], Seq[Expression], LogicalPlan) def unapply(plan: LogicalPlan): Option[ReturnType] = { @@ -373,7 +375,8 @@ object PhysicalScan extends PredicateHelper { val substitutedCondition = substitute(aliases)(condition) (fields, filters ++ splitConjunctivePredicates(substitutedCondition), other, aliases) - case BroadcastHint(child) => collectProjectsAndFilters(child) + case _ if internals.isHintPlan(plan) => + collectProjectsAndFilters(plan.asInstanceOf[UnaryNode].child) case other => (None, Nil, other, Map.empty) } diff --git a/core/src/main/scala/org/apache/spark/sql/hive/ConnectorCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/ConnectorCatalog.scala index 1763d9354d..9fa6f70991 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/ConnectorCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/ConnectorCatalog.scala @@ -23,6 +23,7 @@ import scala.collection.mutable.ArrayBuffer import com.google.common.cache.{CacheBuilder, CacheLoader, LoadingCache} import com.google.common.util.concurrent.UncheckedExecutionException +import io.snappydata.Constant import org.apache.hadoop.hive.metastore.api.FieldSchema import org.apache.hadoop.hive.ql.metadata.Table @@ -205,7 +206,7 @@ trait ConnectorCatalog extends SnappyStoreHiveCatalog { } // the key below should match the key used by HiveClientImpl in MetadataBuilder - val metadata = new MetadataBuilder().putString("HIVE_TYPE_STRING", hc.getType).build() + val metadata = new MetadataBuilder().putString(Constant.HIVE_TYPE_STRING, hc.getType).build() val field = StructField( name = hc.getName, dataType = columnType, diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyExternalCatalog.scala index 1efae9b7f8..255dedf00a 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyExternalCatalog.scala @@ -387,10 +387,10 @@ private[spark] class SnappyExternalCatalog(var client: HiveClient, hadoopConf: C val TABLE_PARTITION_PROVIDER_FILESYSTEM: String = "filesystem" /** - * Returns the fully qualified name used in table properties for a particular column stat. - * For example, for column "mycol", and "min" stat, this should return - * "spark.sql.statistics.colStats.mycol.min". - */ + * Returns the fully qualified name used in table properties for a particular column stat. + * For example, for column "mycol", and "min" stat, this should return + * "spark.sql.statistics.colStats.mycol.min". + */ private def columnStatKeyPropName(columnName: String, statKey: String): String = { STATISTICS_COL_STATS_PREFIX + columnName + "." + statKey } @@ -424,12 +424,12 @@ private[spark] class SnappyExternalCatalog(var client: HiveClient, hadoopConf: C } /** - * Restores table metadata from the table properties if it's a datasouce table. This method is - * kind of a opposite version of [[createTable]]. - * - * It reads table schema, provider, partition column names and bucket specification from table - * properties, and filter out these special entries from table properties. - */ + * Restores table metadata from the table properties if it's a datasouce table. This method is + * kind of a opposite version of [[createTable]]. + * + * It reads table schema, provider, partition column names and bucket specification from table + * properties, and filter out these special entries from table properties. + */ private def restoreTableMetadata(inputTable: CatalogTable): CatalogTable = { var table = inputTable // construct Spark's statistics from information in Hive metastore diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala index d99f1f9093..220d6ceba7 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala @@ -735,7 +735,7 @@ class SnappyStoreHiveCatalog(externalCatalog: SnappyExternalCatalog, alias: Option[String]): LogicalPlan = { // If an alias was specified by the lookup, wrap the plan in a // sub-query so that attributes are properly qualified with this alias - SubqueryAlias(alias.getOrElse(tableIdent.table), + SubqueryAlias(alias.getOrElse(formatTableName(tableIdent.table)), lookupRelation(newQualifiedTableName(tableIdent)), None) } diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index 2975b1ba92..2c0de855c0 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -21,21 +21,21 @@ import io.snappydata.Property import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation import org.apache.spark.sql.catalyst.encoders.RowEncoder import org.apache.spark.sql.catalyst.expressions.{And, Attribute, AttributeReference, EqualTo, Expression} -import org.apache.spark.sql.catalyst.plans.logical.{BinaryNode, Join, LogicalPlan, OverwriteOptions, Project} +import org.apache.spark.sql.catalyst.plans.logical.{BinaryNode, Join, LogicalPlan, Project} import org.apache.spark.sql.catalyst.plans.{Inner, LeftAnti} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.sources._ import org.apache.spark.sql.types.{DataType, LongType, StructType} -import org.apache.spark.sql.{AnalysisException, Dataset, Row, SnappySession, SparkSession} +import org.apache.spark.sql.{AnalysisException, Dataset, Row, SnappySession, SparkSession, SparkSupport} /** * Helper object for PutInto operations for column tables. * This class takes the logical plans from SnappyParser * and converts it into another plan. */ -object ColumnTableBulkOps { +object ColumnTableBulkOps extends SparkSupport { def transformPutPlan(sparkSession: SparkSession, originalPlan: PutIntoTable): LogicalPlan = { validateOp(originalPlan) @@ -44,8 +44,8 @@ object ColumnTableBulkOps { var transFormedPlan: LogicalPlan = originalPlan table.collectFirst { - case LogicalRelation(mutable: BulkPutRelation, _, _) => - val putKeys = mutable.getPutKeys + case lr: LogicalRelation if lr.relation.isInstanceOf[BulkPutRelation] => + val putKeys = lr.relation.asInstanceOf[BulkPutRelation].getPutKeys if (putKeys.isEmpty) { throw new AnalysisException( s"PutInto in a column table requires key column(s) but got empty string") @@ -88,10 +88,9 @@ object ColumnTableBulkOps { val insertChild = if (doInsertJoin) { Join(subQuery, updateSubQuery, LeftAnti, condition) } else subQuery - val insertPlan = new Insert(table, Map.empty[String, + val insertPlan = internals.newInsertPlanWithCountOutput(table, Map.empty[String, Option[String]], Project(subQuery.output, insertChild), - OverwriteOptions(enabled = false), ifNotExists = false) - + overwrite = false, ifNotExists = false) transFormedPlan = PutIntoColumnTable(table, insertPlan, analyzedUpdate) case _ => // Do nothing, original putInto plan is enough } @@ -100,11 +99,11 @@ object ColumnTableBulkOps { def validateOp(originalPlan: PutIntoTable) { originalPlan match { - case PutIntoTable(LogicalRelation(t: BulkPutRelation, _, _), query) => + case PutIntoTable(lr: LogicalRelation, query) if lr.relation.isInstanceOf[BulkPutRelation] => val srcRelations = query.collect { - case LogicalRelation(src: BaseRelation, _, _) => src + case r: LogicalRelation => r.relation } - if (srcRelations.contains(t)) { + if (srcRelations.contains(lr.relation)) { throw Utils.analysisException( "Cannot put into table that is also being read from.") } else { @@ -144,7 +143,8 @@ object ColumnTableBulkOps { def getKeyColumns(table: LogicalPlan): Seq[String] = { table.collectFirst { - case LogicalRelation(mutable: MutableRelation, _, _) => mutable.getKeyColumns + case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] => + lr.relation.asInstanceOf[MutableRelation].getKeyColumns }.getOrElse(throw new AnalysisException( s"Update/Delete requires a MutableRelation but got $table")) @@ -157,8 +157,8 @@ object ColumnTableBulkOps { var transFormedPlan: LogicalPlan = originalPlan table.collectFirst { - case LogicalRelation(mutable: BulkPutRelation, _, _) => - val putKeys = mutable.getPutKeys + case lr: LogicalRelation if lr.relation.isInstanceOf[BulkPutRelation] => + val putKeys = lr.relation.asInstanceOf[BulkPutRelation].getPutKeys if (putKeys.isEmpty) { throw new AnalysisException( s"DeleteFrom in a column table requires key column(s) but got empty string") @@ -168,8 +168,8 @@ object ColumnTableBulkOps { val deletePlan = Delete(table, exists, Nil) val deleteDs = new Dataset(sparkSession, deletePlan, RowEncoder(deletePlan.schema)) transFormedPlan = deleteDs.queryExecution.analyzed.asInstanceOf[Delete] - case lr@LogicalRelation(mutable: MutableRelation, _, _) => - val ks = mutable.getKeyColumns + case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] => + val ks = lr.relation.asInstanceOf[MutableRelation].getKeyColumns if (ks.isEmpty) { throw new AnalysisException( s"DeleteFrom in a table requires key column(s) but got empty string") @@ -196,11 +196,11 @@ object ColumnTableBulkOps { table = UnresolvedRelation(tableIdent), child = ds.logicalPlan) } else { - new Insert( + internals.newInsertPlanWithCountOutput( table = UnresolvedRelation(tableIdent), partition = Map.empty[String, Option[String]], child = ds.logicalPlan, - overwrite = OverwriteOptions(enabled = false), + overwrite = false, ifNotExists = false) } session.sessionState.executePlan(plan).executedPlan.executeCollect() @@ -210,7 +210,7 @@ object ColumnTableBulkOps { } case class PutIntoColumnTable(table: LogicalPlan, - insert: Insert, update: Update) extends BinaryNode { + insert: LogicalPlan, update: Update) extends BinaryNode { override lazy val output: Seq[Attribute] = AttributeReference( "count", LongType)() :: Nil diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index 88b6fcbefe..6ddb8b2331 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -24,17 +24,17 @@ import scala.collection.mutable.ArrayBuffer import scala.reflect.{ClassTag, classTag} import com.gemstone.gemfire.internal.cache.{CacheDistributionAdvisee, ColocationHelper, PartitionedRegion} -import io.snappydata.Property +import io.snappydata.{HintName, Property, QueryHint} import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} import org.apache.spark.sql._ import org.apache.spark.sql.aqp.SnappyContextFunctions import org.apache.spark.sql.catalyst.analysis import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings -import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, NoSuchTableException, Star, UnresolvedRelation} +import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, Star, UnresolvedRelation} import org.apache.spark.sql.catalyst.catalog.CatalogRelation import org.apache.spark.sql.catalyst.expressions.aggregate._ -import org.apache.spark.sql.catalyst.expressions.{And, EqualTo, In, ScalarSubquery, _} +import org.apache.spark.sql.catalyst.expressions.{And, EqualTo, In, _} import org.apache.spark.sql.catalyst.optimizer.{Optimizer, ReorderJoin} import org.apache.spark.sql.catalyst.planning.ExtractEquiJoinKeys import org.apache.spark.sql.catalyst.plans.JoinType @@ -42,7 +42,6 @@ import org.apache.spark.sql.catalyst.plans.logical.{Filter => LogicalFilter, _} import org.apache.spark.sql.catalyst.rules.{Rule, RuleExecutor} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution._ -import org.apache.spark.sql.execution.columnar.impl.IndexColumnFormatRelation import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{EnsureRequirements, ReuseExchange} @@ -59,8 +58,8 @@ import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.{Partition, SparkConf} -class SnappySessionState(snappySession: SnappySession) - extends SessionState(snappySession) { +class SnappySessionState(val snappySession: SnappySession) + extends SessionState(snappySession) with SparkSupport { self => @@ -108,7 +107,7 @@ class SnappySessionState(snappySession: SnappySession) new PreprocessTableInsertOrPut(conf) :: new FindDataSourceTable(snappySession) :: DataSourceAnalysis(conf) :: - ResolveRelationsExtended :: + // ResolveRelationsExtended :: AnalyzeMutableOperations(snappySession, analyzer) :: ResolveQueryHints(snappySession) :: RowLevelSecurity :: @@ -118,7 +117,7 @@ class SnappySessionState(snappySession: SnappySession) def getExtendedCheckRules: Seq[LogicalPlan => Unit] = { - Seq(ConditionalPreWriteCheck(datasources.PreWriteCheck(conf, catalog)), PrePutCheck) + Seq(ConditionalPreWriteCheck(internals.newPreWriteCheck(self)), PrePutCheck) } override lazy val analyzer: Analyzer = new Analyzer(catalog, conf) { @@ -140,30 +139,7 @@ class SnappySessionState(snappySession: SnappySession) ResolveAggregationExpressions :: Nil: _*) :: Nil } - override lazy val optimizer: Optimizer = new SparkOptimizer(catalog, conf, experimentalMethods) { - override def batches: Seq[Batch] = { - implicit val ss = snappySession - var insertedSnappyOpts = 0 - val modified = super.batches.map { - case batch if batch.name.equalsIgnoreCase("Operator Optimizations") => - insertedSnappyOpts += 1 - val (left, right) = batch.rules.splitAt(batch.rules.indexOf(ReorderJoin)) - Batch(batch.name, batch.strategy, (left :+ ResolveIndex()) ++ right: _*) - case b => b - } - - if (insertedSnappyOpts != 1) { - throw new AnalysisException("Snappy Optimizations not applied") - } - - modified :+ - Batch("Streaming SQL Optimizers", Once, PushDownWindowLogicalPlan) :+ - Batch("Link buckets to RDD partitions", Once, new LinkPartitionsToBuckets) :+ - Batch("TokenizedLiteral Folding Optimization", Once, TokenizedLiteralFolding) :+ - Batch("Order join conditions ", Once, OrderJoinConditions) - } - } - + override lazy val optimizer: Optimizer = internals.newSparkOptimizer(this) // copy of ConstantFolding that will turn a constant up/down cast into // a static value. @@ -191,7 +167,7 @@ class SnappySessionState(snappySession: SnappySession) } p // also mark linking for scalar/predicate subqueries and disable plan caching - case s@(_: ScalarSubquery | _: PredicateSubquery) if foldable => + case s: SubqueryExpression if foldable => snappySession.linkPartitionsToBuckets(flag = true) snappySession.planCaching = false s @@ -220,7 +196,8 @@ class SnappySessionState(snappySession: SnappySession) // transformDown for expression so that top-most node which is foldable gets // selected for wrapping by DynamicFoldableExpression and further sub-expressions // do not since foldExpression will reset inner ParamLiterals as non-foldable - case q: LogicalPlan => q.mapExpressions(expr => unmarkAll(mark(expr).transformDown { + case q: LogicalPlan => internals.mapExpressions(q, expr => + unmarkAll(mark(expr).transformDown { // ignore leaf literals case l@(_: Literal | _: DynamicReplacableConstant) => l // Wrap expressions that are foldable. @@ -264,15 +241,13 @@ class SnappySessionState(snappySession: SnappySession) plan transformDown { case win@WindowLogicalPlan(d, s, child, false) => child match { - case LogicalRelation(_, _, _) | - LogicalDStreamPlan(_, _) => win + case _: LogicalRelation | _: LogicalDStreamPlan => win case _ => duration = d slide = s transformed = true win.child } - case c@(LogicalRelation(_, _, _) | - LogicalDStreamPlan(_, _)) => + case c@(_: LogicalRelation | _: LogicalDStreamPlan) => if (transformed) { transformed = false WindowLogicalPlan(duration, slide, c, transformed = true) @@ -286,7 +261,7 @@ class SnappySessionState(snappySession: SnappySession) * be created for tables to be the same as number of buckets. This will avoid * exchange on one side of a non-collocated join in many cases. */ - final class LinkPartitionsToBuckets extends Rule[LogicalPlan] { + object LinkPartitionsToBuckets extends Rule[LogicalPlan] { def apply(plan: LogicalPlan): LogicalPlan = { plan.foreach { case _ if Property.ForceLinkPartitionsToBuckets.get(conf) => @@ -295,10 +270,12 @@ class SnappySessionState(snappySession: SnappySession) case j: Join if !JoinStrategy.isReplicatedJoin(j) => // disable for the entire query for consistency snappySession.linkPartitionsToBuckets(flag = true) - case _: InsertIntoTable | _: TableMutationPlan | - LogicalRelation(_: IndexColumnFormatRelation, _, _) => + case _: InsertIntoTable | _: TableMutationPlan => // disable for inserts/puts to avoid exchanges and indexes to work correctly snappySession.linkPartitionsToBuckets(flag = true) + case l: LogicalRelation if l.relation.isInstanceOf[IndexableRelation] => + // disable for indexes + snappySession.linkPartitionsToBuckets(flag = true) case _ => // nothing for others } plan @@ -317,6 +294,7 @@ class SnappySessionState(snappySession: SnappySession) /** * Replaces [[UnresolvedRelation]]s with concrete relations from the catalog. */ + /* SW: remove object ResolveRelationsExtended extends Rule[LogicalPlan] with PredicateHelper { def getTable(u: UnresolvedRelation): LogicalPlan = { try { @@ -334,6 +312,7 @@ class SnappySessionState(snappySession: SnappySession) d.copy(query = EliminateSubqueryAliases(getTable(u))) } } + */ /** * Orders the join keys as per the underlying partitioning keys ordering of the table. @@ -347,8 +326,9 @@ class SnappySessionState(snappySession: SnappySession) def getPartCols(plan: LogicalPlan): Seq[NamedExpression] = { plan match { case PhysicalScan(_, _, child) => child match { - case r@LogicalRelation(scan: PartitionedDataSourceScan, _, _) => + case r: LogicalRelation if r.relation.isInstanceOf[PartitionedDataSourceScan] => // send back numPartitions=1 for replicated table since collocated + val scan = r.relation.asInstanceOf[PartitionedDataSourceScan] if (!scan.isPartitioned) return Nil val partCols = scan.partitionColumns.map(colName => r.resolveQuoted(colName, analysis.caseInsensitiveResolution) @@ -431,16 +411,18 @@ class SnappySessionState(snappySession: SnappySession) // is happening via this command we need to handle it case _: RunnableCommand => plan case _ if !alreadyPolicyApplied(plan) => plan.transformUp { - case lr@LogicalRelation(rlsRelation: RowLevelSecurityRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[RowLevelSecurityRelation] => val policyFilter = snappySession.sessionState.catalog. - getCombinedPolicyFilterForNativeTable(rlsRelation, Some(lr)) + getCombinedPolicyFilterForNativeTable( + lr.relation.asInstanceOf[RowLevelSecurityRelation], Some(lr)) policyFilter match { case Some(filter) => filter.copy(child = lr) case None => lr } - case SubqueryAlias(name, LogicalFilter(condition, child), ti) => LogicalFilter(condition, - SubqueryAlias(name, child, ti)) + case a: SubqueryAlias if a.child.isInstanceOf[LogicalFilter] => + LogicalFilter(a.child.asInstanceOf[LogicalFilter].condition, + internals.newSubqueryAlias(a.alias, a.child)) case LogicalFilter(condition1, LogicalFilter(condition2, child)) => if (rlsConditionChecker(conditionEvaluator)(condition1)) { @@ -490,9 +472,9 @@ class SnappySessionState(snappySession: SnappySession) var externalRelation: ApplyLimitOnExternalRelation = null plan.foreachUp { { - case LogicalRelation(baseRelation: ApplyLimitOnExternalRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[ApplyLimitOnExternalRelation] => boolsArray(extRelation_bool) = true - externalRelation = baseRelation + externalRelation = lr.relation.asInstanceOf[ApplyLimitOnExternalRelation] case _: MarkerForCreateTableAsSelect => boolsArray(create_tv_bool) = true case _: Aggregate => boolsArray(agg_func_bool) = true @@ -530,7 +512,8 @@ class SnappySessionState(snappySession: SnappySession) plan: LogicalPlan): (Seq[NamedExpression], LogicalPlan, LogicalRelation) = { var tableName = "" val keyColumns = table.collectFirst { - case lr@LogicalRelation(mutable: MutableRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] => + val mutable = lr.relation.asInstanceOf[MutableRelation] val ks = mutable.getKeyColumns if (ks.isEmpty) { val currentKey = snappySession.currentKey @@ -551,8 +534,9 @@ class SnappySessionState(snappySession: SnappySession) // resolve key columns right away var mutablePlan: Option[LogicalRelation] = None val newChild = child.transformDown { - case lr@LogicalRelation(mutable: MutableRelation, _, _) - if mutable.table.equalsIgnoreCase(tableName) => + case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] && + lr.relation.asInstanceOf[MutableRelation].table.equalsIgnoreCase(tableName) => + val mutable = lr.relation.asInstanceOf[MutableRelation] mutablePlan = Some(mutable.withKeyColumns(lr, keyColumns)) mutablePlan.get } @@ -675,7 +659,8 @@ class SnappySessionState(snappySession: SnappySession) override def planner: DefaultPlanner = new DefaultPlanner(snappySession, conf, experimentalMethods.extraStrategies) - protected[sql] def queryPreparations(topLevel: Boolean): Seq[Rule[SparkPlan]] = Seq( + protected[sql] def queryPreparations( + topLevel: Boolean): Seq[Rule[SparkPlan]] = Seq[Rule[SparkPlan]]( python.ExtractPythonUDFs, TokenizeSubqueries(snappySession), EnsureRequirements(snappySession.sessionState.conf), @@ -1108,17 +1093,47 @@ class DefaultPlanner(val session: SnappySession, conf: SQLConf, super.strategies } +trait DefaultOptimizer extends SparkOptimizer { + + def state: SnappySessionState + + override def batches: Seq[Batch] = { + implicit val ss = state.snappySession + var insertedSnappyOpts = 0 + val modified = super.batches.map { + case batch if batch.name.equalsIgnoreCase("Operator Optimizations") || + batch.name.startsWith("Operator Optimization after") => + insertedSnappyOpts += 1 + val (left, right) = batch.rules.splitAt(batch.rules.indexOf(ReorderJoin)) + Batch(batch.name, batch.strategy, (left :+ ResolveIndex()) ++ right: _*) + case b => b + } + + if (insertedSnappyOpts != 1) { + throw new AnalysisException("Snappy Optimizations not applied") + } + + modified :+ + Batch("Streaming SQL Optimizers", Once, state.PushDownWindowLogicalPlan) :+ + Batch("Link buckets to RDD partitions", Once, state.LinkPartitionsToBuckets) :+ + Batch("TokenizedLiteral Folding Optimization", Once, state.TokenizedLiteralFolding) :+ + Batch("Order join conditions ", Once, state.OrderJoinConditions) + } +} + private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) - extends Rule[LogicalPlan] { + extends Rule[LogicalPlan] with SparkSupport { def apply(plan: LogicalPlan): LogicalPlan = plan transform { // Check for SchemaInsertableRelation first - case i@InsertIntoTable(l@LogicalRelation(r: SchemaInsertableRelation, - _, _), _, child, _, _) if l.resolved && child.resolved => + case i@InsertIntoTable(l: LogicalRelation, _, child, _, _) + if l.relation.isInstanceOf[SchemaInsertableRelation] && l.resolved && child.resolved => + val r = l.relation.asInstanceOf[SchemaInsertableRelation] r.insertableRelation(child.output) match { case Some(ir) => val br = ir.asInstanceOf[BaseRelation] - val relation = LogicalRelation(br, - l.expectedOutputAttributes, l.catalogTable) + val relation = internals.newLogicalRelation(br, + l.expectedOutputAttributes.asInstanceOf[Option[Seq[AttributeReference]]], + l.catalogTable, isStreaming = false) castAndRenameChildOutputForPut(i.copy(table = relation), relation.output, br, null, child) case None => @@ -1133,7 +1148,7 @@ private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) // ResolveRelations, no such special rule has been added for PUT case p@PutIntoTable(table, child) if table.resolved && child.resolved => EliminateSubqueryAliases(table) match { - case l@LogicalRelation(ir: RowInsertableRelation, _, _) => + case l: LogicalRelation if l.relation.isInstanceOf[RowInsertableRelation] => // First, make sure the data to be inserted have the same number of // fields with the schema of the relation. val expectedOutput = l.output @@ -1142,7 +1157,7 @@ private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) "SELECT clause of the PUT INTO statement " + "generates the same number of columns as its schema.") } - castAndRenameChildOutputForPut(p, expectedOutput, ir, l, child) + castAndRenameChildOutputForPut(p, expectedOutput, l.relation, l, child) case _ => p } @@ -1153,7 +1168,7 @@ private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) // ResolveRelations, no such special rule has been added for PUT case d@DeleteFromTable(table, child) if table.resolved && child.resolved => EliminateSubqueryAliases(table) match { - case l@LogicalRelation(dr: DeletableRelation, _, _) => + case l: LogicalRelation if l.relation.isInstanceOf[DeletableRelation] => def comp(a: Attribute, targetCol: String): Boolean = a match { case ref: AttributeReference => targetCol.equals(ref.name.toUpperCase) } @@ -1175,9 +1190,9 @@ private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) } case _ => } - castAndRenameChildOutputForPut(d, expectedOutput, dr, l, child) + castAndRenameChildOutputForPut(d, expectedOutput, l.relation, l, child) - case l@LogicalRelation(dr: MutableRelation, _, _) => + case l: LogicalRelation if l.relation.isInstanceOf[MutableRelation] => val expectedOutput = l.output if (child.output.length != expectedOutput.length) { throw new AnalysisException(s"$l requires that the query in the " + @@ -1185,7 +1200,7 @@ private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) "generates the same number of column(s) as in its schema but found " + s"${child.output.mkString(",")} instead.") } - castAndRenameChildOutputForPut(d, expectedOutput, dr, l, child) + castAndRenameChildOutputForPut(d, expectedOutput, l.relation, l, child) case _ => d } @@ -1196,12 +1211,15 @@ private[sql] final class PreprocessTableInsertOrPut(conf: SQLConf) val metadata = relation.catalogTable preProcess(i, relation = null, metadata.identifier.quotedString, metadata.partitionColumnNames) - case LogicalRelation(h: HadoopFsRelation, _, identifier) => + case l: LogicalRelation if l.relation.isInstanceOf[HadoopFsRelation] => + val h = l.relation.asInstanceOf[HadoopFsRelation] + val identifier = l.catalogTable val tblName = identifier.map(_.identifier.quotedString).getOrElse("unknown") preProcess(i, h, tblName, h.partitionSchema.map(_.name)) - case LogicalRelation(ir: InsertableRelation, _, identifier) => + case l: LogicalRelation if l.relation.isInstanceOf[InsertableRelation] => + val identifier = l.catalogTable val tblName = identifier.map(_.identifier.quotedString).getOrElse("unknown") - preProcess(i, ir, tblName, Nil) + preProcess(i, l.relation, tblName, Nil) case _ => i } } @@ -1333,12 +1351,12 @@ private[sql] case object PrePutCheck extends (LogicalPlan => Unit) { def apply(plan: LogicalPlan): Unit = { plan.foreach { - case PutIntoTable(LogicalRelation(t: RowPutRelation, _, _), query) => + case PutIntoTable(l: LogicalRelation, query) if l.relation.isInstanceOf[RowPutRelation] => // Get all input data source relations of the query. val srcRelations = query.collect { - case LogicalRelation(src: BaseRelation, _, _) => src + case l: LogicalRelation => l.relation } - if (srcRelations.contains(t)) { + if (srcRelations.contains(l.relation)) { throw Utils.analysisException( "Cannot put into table that is also being read from.") } else { @@ -1351,7 +1369,7 @@ private[sql] case object PrePutCheck extends (LogicalPlan => Unit) { } } -private[sql] case class ConditionalPreWriteCheck(sparkPreWriteCheck: datasources.PreWriteCheck) +private[sql] case class ConditionalPreWriteCheck(sparkPreWriteCheck: LogicalPlan => Unit) extends (LogicalPlan => Unit) { def apply(plan: LogicalPlan): Unit = { plan match { @@ -1527,16 +1545,9 @@ case class BypassRowLevelSecurity(child: LogicalFilter) extends UnaryNode { * Wrap plan-specific query hints (like joinType). This extends Spark's BroadcastHint * so that filters/projections etc can be pushed below this by optimizer. */ -class LogicalPlanWithHints(_child: LogicalPlan, val hints: Map[String, String]) - extends BroadcastHint(_child) { - - override def productArity: Int = 2 - - override def productElement(n: Int): Any = n match { - case 0 => child - case 1 => hints - } +trait LogicalPlanWithHints extends UnaryNode { + def allHints: Map[QueryHint.Type, HintName.Type] override def simpleString: String = - s"LogicalPlanWithHints[hints = $hints; child = ${child.simpleString}]" + s"LogicalPlanWithHints[hints = $allHints; child = ${child.simpleString}]" } diff --git a/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala b/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala index ce0a0eb485..1dc8747b4b 100644 --- a/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala @@ -21,31 +21,42 @@ import com.pivotal.gemfirexd.Attribute import com.pivotal.gemfirexd.internal.iapi.util.IdUtil import io.snappydata.Constant -import org.apache.spark.sql.{SnappyContext, SnappySession, SparkSession} import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.LeafExpression -import org.apache.spark.sql.catalyst.expressions.codegen.CodegenFallback -import org.apache.spark.sql.sources.JdbcExtendedUtils +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.types.{DataType, StringType} +import org.apache.spark.sql.{SnappySession, SparkSession, SparkSupport} import org.apache.spark.unsafe.types.UTF8String -case class CurrentUser() extends LeafExpression with CodegenFallback { +case class CurrentUser() extends LeafExpression with SparkSupport { + override def foldable: Boolean = true + override def nullable: Boolean = false override def dataType: DataType = StringType - override def eval(input: InternalRow): Any = { - val snappySession = SparkSession.getActiveSession.getOrElse( - throw new IllegalStateException("SnappySession unavailable")).asInstanceOf[SnappySession] + override def prettyName: String = "CURRENT_USER" + + private val userName: UTF8String = { + val snappySession = SparkSession.getActiveSession.getOrElse( + throw new IllegalStateException("SnappySession unavailable")).asInstanceOf[SnappySession] var owner = snappySession.conf.get(Attribute.USERNAME_ATTR, "") owner = IdUtil.getUserAuthorizationId( - if (owner.isEmpty) Constant.DEFAULT_SCHEMA + if (owner.isEmpty) Constant.DEFAULT_SCHEMA else snappySession.sessionState.catalog.formatDatabaseName(owner)) UTF8String.fromString(owner) } - override def prettyName: String = "current_user" + override def eval(input: InternalRow): Any = userName + + override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { + val userVar = internals.addClassField(ctx, "UTF8String", "currentUser", + varName => s"$varName = UTF8String.fromString($userName);") + ev.copy(code = "", isNull = "false", value = userVar) + } } + +case class IsLDAPGroupMember() diff --git a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala index 507981f858..0dde063912 100644 --- a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala @@ -26,7 +26,6 @@ import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, SortDirection} -import org.apache.spark.sql.catalyst.plans.logical.OverwriteOptions import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.datasources.LogicalRelation @@ -67,6 +66,7 @@ case class JDBCMutableRelation( with IndexableRelation with AlterableRelation with NativeTableRowLevelSecurityRelation + with SparkSupport with Logging { override val needConversion: Boolean = false @@ -288,11 +288,11 @@ case class JDBCMutableRelation( // use the Insert plan for best performance // that will use the getInsertPlan above (in StoreStrategy) sqlContext.sessionState.executePlan( - new Insert( + internals.newInsertPlanWithCountOutput( table = LogicalRelation(this), partition = Map.empty[String, Option[String]], child = data.logicalPlan, - OverwriteOptions(overwrite), + overwrite, ifNotExists = false)).toRdd } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index a60b164168..3da1694500 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -18,7 +18,7 @@ package org.apache.spark.sql.sources import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} -import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan, OverwriteOptions} +import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan} import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.command.{ExecutedCommandExec, RunnableCommand} import org.apache.spark.sql.execution.datasources.{CreateTable, LogicalRelation} @@ -183,30 +183,6 @@ case class PutIntoTable(table: LogicalPlan, child: LogicalPlan) } } -/** - * Unlike Spark's InsertIntoTable this plan provides the count of rows - * inserted as the output. - */ -final class Insert( - table: LogicalPlan, - partition: Map[String, Option[String]], - child: LogicalPlan, - overwrite: OverwriteOptions, - ifNotExists: Boolean) - extends InsertIntoTable(table, partition, child, overwrite, ifNotExists) { - - override def output: Seq[Attribute] = AttributeReference( - "count", LongType)() :: Nil - - override def copy(table: LogicalPlan = table, - partition: Map[String, Option[String]] = partition, - child: LogicalPlan = child, - overwrite: OverwriteOptions = overwrite, - ifNotExists: Boolean = ifNotExists): Insert = { - new Insert(table, partition, child, overwrite, ifNotExists) - } -} - case class Update(table: LogicalPlan, child: LogicalPlan, keyColumns: Seq[Attribute], updateColumns: Seq[Attribute], updateExpressions: Seq[Expression]) extends LogicalPlan with TableMutationPlan { diff --git a/core/src/main/scala/org/apache/spark/sql/sources/subrules.scala b/core/src/main/scala/org/apache/spark/sql/sources/subrules.scala index d83878950f..3ec0c3a834 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/subrules.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/subrules.scala @@ -220,12 +220,12 @@ case object ApplyRest extends JoinOrderStrategy { * This doesn't require any alteration to joinOrder as such. */ case object ContinueOptimizations extends JoinOrderStrategy { - override def shortName: String = ""// JOS.ContinueOptimizations + override def shortName: String = ""// HintNames.JoinOrder_ContinueOptimizations } /** * This hint too doesn't require any implementation as such. */ case object IncludeGeneratedPaths extends JoinOrderStrategy { - override def shortName: String = ""// JOS.IncludeGeneratedPaths + override def shortName: String = ""// HintNames.JoinOrder_IncludeGeneratedPaths } diff --git a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala index c44c1df41e..7453b48b6f 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala @@ -28,7 +28,6 @@ import com.pivotal.gemfirexd.internal.engine.distributed.GfxdHeapDataOutputStrea import org.codehaus.janino.CompilerFactory import org.apache.spark.metrics.source.CodegenMetrics -import org.apache.spark.sql.Row import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.encoders.RowEncoder import org.apache.spark.sql.catalyst.expressions.codegen._ @@ -40,6 +39,7 @@ import org.apache.spark.sql.jdbc.JdbcDialect import org.apache.spark.sql.row.SnappyStoreDialect import org.apache.spark.sql.sources.JdbcExtendedUtils import org.apache.spark.sql.types._ +import org.apache.spark.sql.{Row, SparkSupport} import org.apache.spark.unsafe.Platform import org.apache.spark.unsafe.types.{CalendarInterval, UTF8String} import org.apache.spark.{Logging, SparkEnv} @@ -52,7 +52,7 @@ import org.apache.spark.{Logging, SparkEnv} * generation of code string itself only if not found in cache * (and using some other lookup key than the code string) */ -object CodeGeneration extends Logging { +object CodeGeneration extends Logging with SparkSupport { override def logInfo(msg: => String): Unit = super.logInfo(msg) @@ -162,12 +162,11 @@ object CodeGeneration extends Logging { case _: DecimalType => s"$stmt.setBigDecimal(${col + 1}, ${ev.value}.toJavaBigDecimal());" case a: ArrayType => - val encoderVar = ctx.freshName("encoderObj") val arr = ctx.freshName("arr") val encoder = ctx.freshName("encoder") val cursor = ctx.freshName("cursor") - ctx.addMutableState(encoderClass, encoderVar, - s"$encoderVar = new $encoderClass();") + val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", + v => s"$v = new $encoderClass();") s""" |final ArrayData $arr = ${ev.value}; |if ($arr instanceof $serArrayClass) { @@ -182,12 +181,11 @@ object CodeGeneration extends Logging { |} """.stripMargin case m: MapType => - val encoderVar = ctx.freshName("encoderObj") val map = ctx.freshName("mapValue") val encoder = ctx.freshName("encoder") val cursor = ctx.freshName("cursor") - ctx.addMutableState(encoderClass, encoderVar, - s"$encoderVar = new $encoderClass();") + val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", + v => s"$v = new $encoderClass();") s""" |final MapData $map = ${ev.value}; |if ($map instanceof $serMapClass) { @@ -201,12 +199,11 @@ object CodeGeneration extends Logging { |} """.stripMargin case s: StructType => - val encoderVar = ctx.freshName("encoderObj") val struct = ctx.freshName("structValue") val encoder = ctx.freshName("encoder") val cursor = ctx.freshName("cursor") - ctx.addMutableState(encoderClass, encoderVar, - s"$encoderVar = new $encoderClass();") + val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", + v => s"$v = new $encoderClass();") s""" |final InternalRow $struct = ${ev.value}; |if ($struct instanceof $serRowClass) { diff --git a/jdbc/src/main/scala/io/snappydata/Constant.scala b/jdbc/src/main/scala/io/snappydata/Constant.scala index 5e90f5b2f3..48ee6ef14c 100644 --- a/jdbc/src/main/scala/io/snappydata/Constant.scala +++ b/jdbc/src/main/scala/io/snappydata/Constant.scala @@ -22,7 +22,7 @@ import com.gemstone.gemfire.internal.shared.SystemProperties * Constant names suggested per naming convention * http://docs.scala-lang.org/style/naming-conventions.html * - * we decided to use upper case with underscore word separator. + * SnappyData uses upper case with underscore word separator. */ object Constant { @@ -32,8 +32,6 @@ object Constant { val POOLED_THIN_CLIENT_URL = "jdbc:snappydata:pool://" - val SNAPPY_URL_PREFIX = "snappydata://" - val JDBC_URL_PREFIX = "snappydata://" val JDBC_EMBEDDED_DRIVER = "io.snappydata.jdbc.EmbeddedDriver" @@ -44,7 +42,7 @@ object Constant { val PROPERTY_PREFIX = "snappydata." - val STORE_PROPERTY_PREFIX = SystemProperties.SNAPPY_PREFIX + val STORE_PROPERTY_PREFIX: String = SystemProperties.SNAPPY_PREFIX val SPARK_PREFIX = "spark." @@ -55,6 +53,8 @@ object Constant { val SPLIT_VIEW_TEXT_PROPERTY = "snappydata.view.text" val SPLIT_VIEW_ORIGINAL_TEXT_PROPERTY = "snappydata.view.originalText" + val HIVE_TYPE_STRING = "HIVE_TYPE_STRING" + val JOBSERVER_PROPERTY_PREFIX = "jobserver." val CONNECTION_PROPERTY: String = s"${PROPERTY_PREFIX}connection" @@ -116,13 +116,6 @@ object Constant { val MAX_CHAR_SIZE = 254 - // allowed values for QueryHint.JoinType - val JOIN_TYPE_BROADCAST = "broadcast" - val JOIN_TYPE_HASH = "hash" - val JOIN_TYPE_SORT = "sort" - val ALLOWED_JOIN_TYPE_HINTS: List[String] = - List(JOIN_TYPE_BROADCAST, JOIN_TYPE_HASH, JOIN_TYPE_SORT) - /** * Limit the maximum number of rows in a column batch (applied before * ColumnBatchSize property). @@ -135,7 +128,7 @@ object Constant { // speed and compression ratio having higher compression ration than LZ4. // But the JNI version means no warmup time which helps for short jobs. // Also LZF has no direct ByteBuffer API so is quite a bit slower for off-heap. - val DEFAULT_CODEC = SystemProperties.SNAPPY_DEFAULT_COMPRESSION_CODEC + val DEFAULT_CODEC: String = SystemProperties.SNAPPY_DEFAULT_COMPRESSION_CODEC // System property to tell the system whether the String type columns // should be considered as clob or not in JDBC/ODBC SQL queries diff --git a/settings.gradle b/settings.gradle index dc2aee907d..23837e968d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -27,6 +27,11 @@ include 'dunit' include ':snappy-dtests_' + scalaBinaryVersion include ':snappy-compatibility-tests_' + scalaBinaryVersion +// compatibility modules for all supported Spark releases +include ":compatibility:spark2.1.0_$scalaBinaryVersion" +include ":compatibility:spark2.1.1_$scalaBinaryVersion" +include ":compatibility:spark2.3.2_$scalaBinaryVersion" + project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File project(':snappy-core_' + scalaBinaryVersion).projectDir = "$rootDir/core" as File project(':snappy-cluster_' + scalaBinaryVersion).projectDir = "$rootDir/cluster" as File @@ -35,6 +40,10 @@ project(':snappy-examples_' + scalaBinaryVersion).projectDir = "$rootDir/example project(':snappy-dtests_' + scalaBinaryVersion).projectDir = "$rootDir/dtests" as File project(':snappy-compatibility-tests_' + scalaBinaryVersion).projectDir = "$rootDir/compatibilityTests" as File +project(":compatibility:spark2.1.0_$scalaBinaryVersion").projectDir = "$rootDir/compatibility/spark-2.1.0" as File +project(":compatibility:spark2.1.1_$scalaBinaryVersion").projectDir = "$rootDir/compatibility/spark-2.1.1" as File +project(":compatibility:spark2.3.2_$scalaBinaryVersion").projectDir = "$rootDir/compatibility/spark-2.3.2" as File + if (new File(rootDir, 'spark/build.gradle').exists()) { include ':snappy-spark' // sub-projects of snappy-spark From 081f8b5e31c67cf882f17733aeb8758a54347403 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 6 Nov 2018 14:51:30 +0530 Subject: [PATCH 02/80] more fixes and additions --- build.gradle | 16 +++--- .../cluster/SplitSnappyClusterDUnitTest.scala | 6 +-- .../io/snappydata/ToolsCallbackImpl.scala | 7 ++- .../sql/internal/Spark210Internals.scala | 40 ++++++++++----- .../sql/internal/Spark232Internals.scala | 31 ++++++++++-- core/build.gradle | 2 +- .../SplitClusterDUnitSecurityTest.scala | 12 ++--- .../cluster/SplitClusterDUnitTest.scala | 20 ++++---- .../cluster/SplitClusterDUnitTestBase.scala | 2 +- .../SnappySinkProviderDUnitTest.scala | 6 +-- .../spark/sql/hive/SnappySharedState.java | 1 - .../apache/spark/sql/SnappyBaseParser.scala | 8 +-- .../org/apache/spark/sql/SnappyContext.scala | 2 +- .../apache/spark/sql/SnappyDDLParser.scala | 20 ++------ .../org/apache/spark/sql/SnappyParser.scala | 20 ++++---- .../apache/spark/sql/SnappyStrategies.scala | 12 ++--- .../org/apache/spark/sql/SparkInternals.scala | 15 +++++- .../apache/spark/sql/collection/Utils.scala | 6 +-- .../spark/sql/execution/TableExec.scala | 6 +-- .../columnar/ExternalStoreUtils.scala | 13 ++--- .../sql/hive/SnappyStoreHiveCatalog.scala | 14 +++--- .../spark/sql/types/CharStringType.scala | 49 +++++++++++++++++++ 22 files changed, 197 insertions(+), 111 deletions(-) create mode 100644 core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala diff --git a/build.gradle b/build.gradle index 8c06ade842..caf51cf38d 100644 --- a/build.gradle +++ b/build.gradle @@ -108,9 +108,11 @@ allprojects { vendorName = 'SnappyData, Inc.' scalaBinaryVersion = '2.11' scalaVersion = scalaBinaryVersion + '.8' - sparkVersion = '2.1.1' + sparkVersion = '2.1.0' snappySparkVersion = '2.1.1.4' - sparkDistName = "spark-${sparkVersion}-bin-hadoop2.7" + + sparkOldVersion = '2.1.1' + sparkOldDistName = "spark-${sparkOldVersion}-bin-hadoop2.7" sparkCurrentVersion = '2.3.2' sparkCurrentDistName = "spark-${sparkCurrentVersion}-bin-hadoop2.7" log4jVersion = '1.2.17' @@ -148,7 +150,7 @@ allprojects { buildIdPrefix = System.env.USER + ' ' sparkDistDir = "${project.gradle.gradleUserHomeDir}/sparkDist" - sparkProductDir = "${sparkDistDir}/${sparkDistName}" + sparkOldProductDir = "${sparkDistDir}/${sparkOldDistName}" sparkCurrentProductDir = "${sparkDistDir}/${sparkCurrentDistName}" } @@ -163,7 +165,7 @@ allprojects { } if (rootProject.hasProperty('sparkDistDir')) { sparkDistDir = rootProject.property('sparkDistDir') - sparkProductDir = "${sparkDistDir}/${sparkDistName}" + sparkOldProductDir = "${sparkDistDir}/${sparkOldDistName}" sparkCurrentProductDir = "${sparkDistDir}/${sparkCurrentDistName}" } @@ -255,7 +257,7 @@ task cleanDUnit { doLast { file(workingDir).mkdirs() // clean spark cluster directories delete "${snappyProductDir}/work", "${snappyProductDir}/logs" - delete "${sparkProductDir}/work", "${sparkProductDir}/logs" + delete "${sparkOldProductDir}/work", "${sparkOldProductDir}/logs" delete "${sparkCurrentProductDir}/work", "${sparkCurrentProductDir}/logs" } } task cleanSecurityDUnit { doLast { @@ -264,7 +266,7 @@ task cleanSecurityDUnit { doLast { file(workingDir).mkdirs() // clean spark cluster directories delete "${snappyProductDir}/work", "${snappyProductDir}/logs" - delete "${sparkProductDir}/work", "${sparkProductDir}/logs" + delete "${sparkOldProductDir}/work", "${sparkOldProductDir}/logs" delete "${sparkCurrentProductDir}/work", "${sparkCurrentProductDir}/logs" } } task cleanAllReports { doLast { @@ -549,7 +551,7 @@ subprojects { } environment 'SNAPPY_HOME': snappyProductDir, - 'APACHE_SPARK_HOME': sparkProductDir, + 'APACHE_SPARK_OLD_HOME': sparkOldProductDir, 'APACHE_SPARK_CURRENT_HOME': sparkCurrentProductDir, 'SNAPPY_DIST_CLASSPATH': "${sourceSets.test.runtimeClasspath.asPath}" diff --git a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala index 2eda7a2385..4e28f74c7b 100644 --- a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala +++ b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala @@ -55,7 +55,7 @@ class SplitSnappyClusterDUnitTest(s: String) bootProps.setProperty("hive.server2.thrift.bind.host", "localhost") bootProps.setProperty("hive.server2.thrift.port", testObject.thriftPort.toString) - override protected val sparkProductDir: String = + override protected val sparkOldProductDir: String = testObject.getEnvironmentVariable("SNAPPY_HOME") override def beforeClass(): Unit = { @@ -66,13 +66,13 @@ class SplitSnappyClusterDUnitTest(s: String) } super.beforeClass() startNetworkServers() - vm3.invoke(classOf[ClusterManagerTestBase], "startSparkCluster", sparkProductDir) + vm3.invoke(classOf[ClusterManagerTestBase], "startSparkCluster", sparkOldProductDir) } override def afterClass(): Unit = { Array(vm2, vm1, vm0).foreach(_.invoke(getClass, "stopNetworkServers")) ClusterManagerTestBase.stopNetworkServers() - vm3.invoke(classOf[ClusterManagerTestBase], "stopSparkCluster", sparkProductDir) + vm3.invoke(classOf[ClusterManagerTestBase], "stopSparkCluster", sparkOldProductDir) super.afterClass() } diff --git a/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala b/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala index 5a5bfcc908..285741f5e9 100644 --- a/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala +++ b/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala @@ -30,8 +30,7 @@ import io.snappydata.cluster.ExecutorInitiator import io.snappydata.impl.LeadImpl import org.apache.spark.executor.SnappyExecutor -import org.apache.spark.sql.execution.columnar.ExternalStoreUtils -import org.apache.spark.sql.execution.ui.SQLTab +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.hive.thriftserver.SnappyHiveThriftServer2 import org.apache.spark.ui.{JettyUtils, SnappyDashboardTab} import org.apache.spark.util.SnappyUtils @@ -51,7 +50,7 @@ object ToolsCallbackImpl extends ToolsCallback with Logging { JettyUtils.skipHandlerStart.set(true) // Creating SQL and Dashboard UI tabs if (!sc.isLocal) { - new SQLTab(ExternalStoreUtils.getSQLListener.get(), ui) + SparkSupport.internals(sc).createAndAttachSQLListener(sc) } SnappyHiveThriftServer2.attachUI() new SnappyDashboardTab(ui) @@ -67,7 +66,7 @@ object ToolsCallbackImpl extends ToolsCallback with Logging { case None => logDebug("Not setting auth handler") // Creating SQL and Dashboard UI tabs if (!sc.isLocal) { - new SQLTab(ExternalStoreUtils.getSQLListener.get(), ui) + SparkSupport.internals(sc).createAndAttachSQLListener(sc) } SnappyHiveThriftServer2.attachUI() new SnappyDashboardTab(ui) diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index b5e1495014..1f6eb67340 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -26,7 +26,7 @@ import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.{CatalogTable, FunctionResource} -import org.apache.spark.sql.catalyst.encoders.RowEncoder +import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} @@ -35,7 +35,6 @@ import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, SQLBuilder, TableIdentifier} -import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} @@ -52,7 +51,7 @@ class Spark210Internals extends SparkInternals { override def version: String = "2.1.0" override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { - implicit val encoder = RowEncoder(plan.schema) + implicit val encoder: ExpressionEncoder[Row] = RowEncoder(plan.schema) spark.sharedState.cacheManager.uncacheQuery(Dataset(spark, plan), blocking) } @@ -105,7 +104,7 @@ class Spark210Internals extends SparkInternals { } override def registerFunction(session: SparkSession, name: FunctionIdentifier, - info: ExpressionInfo, function: (Seq[Expression]) => Expression): Unit = { + info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { session.sessionState.functionRegistry.registerFunction(name.unquotedString, info, function) } @@ -117,6 +116,16 @@ class Spark210Internals extends SparkInternals { variableName } + override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, + inlineToOuterClass: Boolean = false): String = { + ctx.addNewFunction(funcName, funcCode) + funcName + } + + override def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean = { + ctx.addedFunctions.contains(funcName) + } + override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { ctx.splitExpressions(ctx.INPUT_ROW, expressions) } @@ -137,23 +146,28 @@ class Spark210Internals extends SparkInternals { WholeStageCodegenExec(plan) } - override def createCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { new CaseInsensitiveMap(map) } def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { - SparkSession.sqlListener.get() match { - case _: SnappySQLListener => // already set + // if the call is done the second time, then attach in embedded mode + // too since this is coming from ToolsCallbackImpl + val (forceAttachUI, listener) = SparkSession.sqlListener.get() match { + case l: SnappySQLListener => true -> l // already set case _ => val listener = new SnappySQLListener(sparkContext.conf) if (SparkSession.sqlListener.compareAndSet(null, listener)) { sparkContext.addSparkListener(listener) - sparkContext.ui match { - case Some(ui) if !SnappyContext.getClusterMode(sparkContext) - .isInstanceOf[SnappyEmbeddedMode] => new SQLTab(listener, ui) - case _ => - } } + false -> listener + } + // embedded mode attaches SQLTab later via ToolsCallbackImpl that also + // takes care of injecting any authentication module if configured + sparkContext.ui match { + case Some(ui) if forceAttachUI || !SnappyContext.getClusterMode(sparkContext) + .isInstanceOf[SnappyEmbeddedMode] => new SQLTab(listener, ui) + case _ => } } @@ -366,7 +380,7 @@ class Spark210Internals extends SparkInternals { } } - override def newPreWriteCheck(sessionState: SnappySessionState): (LogicalPlan => Unit) = { + override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { PreWriteCheck(sessionState.conf, sessionState.catalog) } } diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index f912164492..461adef53e 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -16,6 +16,10 @@ */ package org.apache.spark.sql.internal +import java.lang.reflect.Field + +import scala.collection.mutable + import io.snappydata.{HintName, QueryHint} import org.apache.spark.SparkContext @@ -44,6 +48,12 @@ import org.apache.spark.sql.types.{DataType, Metadata} */ class Spark232Internals extends SparkInternals { + private val codegenContextClassFunctions: Field = { + val f = classOf[CodegenContext].getDeclaredField("classFunctions") + f.setAccessible(true) + f + } + override def version: String = "2.3.2" override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { @@ -55,7 +65,7 @@ class Spark232Internals extends SparkInternals { } override def registerFunction(session: SparkSession, name: FunctionIdentifier, - info: ExpressionInfo, function: (Seq[Expression]) => Expression): Unit = { + info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { session.sessionState.functionRegistry.registerFunction(name, info, function) } @@ -65,6 +75,19 @@ class Spark232Internals extends SparkInternals { ctx.addMutableState(javaType, varName, initFunc, forceInline, useFreshName) } + override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, + inlineToOuterClass: Boolean = false): String = { + ctx.addNewFunction(funcName, funcCode, inlineToOuterClass) + } + + override def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean = { + codegenContextClassFunctions.get(ctx).asInstanceOf[ + mutable.Map[String, mutable.Map[String, String]]].get(ctx.outerClassName) match { + case Some(m) => m.contains(funcName) + case None => false + } + } + override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { ctx.splitExpressionsWithCurrentInputs(expressions) } @@ -83,10 +106,12 @@ class Spark232Internals extends SparkInternals { WholeStageCodegenExec(plan)(codegenStageId = 0) } - override def createCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { new CaseInsensitiveMap[String](map) } + // TODO: SW: inhibit SQLTab attach in SharedState.statusStore and instead do it + // here for embedded mode in the second call so that security policies are applied to the tab def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { // SQLAppStatusListener is created in the constructor of SharedState that needs to be overridden } @@ -287,7 +312,7 @@ class Spark232Internals extends SparkInternals { } } - override def newPreWriteCheck(sessionState: SnappySessionState): (LogicalPlan => Unit) = { + override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { PreWriteCheck } } diff --git a/core/build.gradle b/core/build.gradle index cc52abcc2e..8b2355b318 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -185,7 +185,7 @@ def taskGetApacheSparkDist(String ver, String distName, String prodDir) { } task getApacheSparkDist { - dependsOn taskGetApacheSparkDist(sparkVersion, sparkDistName, sparkProductDir) + dependsOn taskGetApacheSparkDist(sparkOldVersion, sparkOldDistName, sparkOldProductDir) dependsOn taskGetApacheSparkDist(sparkCurrentVersion, sparkCurrentDistName, sparkCurrentProductDir) } diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala index 67098d0da5..f3fbc0c104 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala @@ -120,8 +120,8 @@ class SplitClusterDUnitSecurityTest(s: String) private val jobConfigFile = s"$snappyProductDir/conf/job.config" - override protected val sparkProductDir: String = - testObject.getEnvironmentVariable("APACHE_SPARK_HOME") + override protected val sparkOldProductDir: String = + testObject.getEnvironmentVariable("APACHE_SPARK_OLD_HOME") protected val currentProductDir: String = testObject.getEnvironmentVariable("APACHE_SPARK_CURRENT_HOME") @@ -159,7 +159,7 @@ class SplitClusterDUnitSecurityTest(s: String) |""".stripMargin, s"$confDir/servers") logInfo((snappyProductDir + "/sbin/snappy-start-all.sh").!!) - SplitClusterDUnitSecurityTest.startSparkCluster(sparkProductDir) + SplitClusterDUnitSecurityTest.startSparkCluster(sparkOldProductDir) } def getLdapConf: String = { @@ -175,7 +175,7 @@ class SplitClusterDUnitSecurityTest(s: String) override def afterClass(): Unit = { super.afterClass() - SplitClusterDUnitSecurityTest.stopSparkCluster(sparkProductDir) + SplitClusterDUnitSecurityTest.stopSparkCluster(sparkOldProductDir) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") logInfo((snappyProductDir + "/sbin/snappy-stop-all.sh").!!) @@ -212,7 +212,7 @@ class SplitClusterDUnitSecurityTest(s: String) val props = new Properties() props.setProperty(Attribute.USERNAME_ATTR, jdbcUser1) props.setProperty(Attribute.PASSWORD_ATTR, jdbcUser1) - SplitClusterDUnitTest.invokeSparkShell(snappyProductDir, sparkProductDir, + SplitClusterDUnitTest.invokeSparkShell(snappyProductDir, sparkOldProductDir, locatorClientPort, props) } @@ -221,7 +221,7 @@ class SplitClusterDUnitSecurityTest(s: String) val props = new Properties() props.setProperty(Attribute.USERNAME_ATTR, jdbcUser1) props.setProperty(Attribute.PASSWORD_ATTR, jdbcUser1) - SplitClusterDUnitTest.invokeSparkShellCurrent(snappyProductDir, sparkProductDir, + SplitClusterDUnitTest.invokeSparkShellCurrent(snappyProductDir, sparkOldProductDir, currentProductDir, locatorClientPort, props, vm = null /* SparkContext in current VM */) } diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala index c021e8db3f..f5147bb90e 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala @@ -74,8 +74,8 @@ class SplitClusterDUnitTest(s: String) private val snappyProductDir = testObject.getEnvironmentVariable("SNAPPY_HOME") - override protected val sparkProductDir: String = - testObject.getEnvironmentVariable("APACHE_SPARK_HOME") + override protected val sparkOldProductDir: String = + testObject.getEnvironmentVariable("APACHE_SPARK_OLD_HOME") protected val currentProductDir: String = testObject.getEnvironmentVariable("APACHE_SPARK_CURRENT_HOME") @@ -106,12 +106,12 @@ class SplitClusterDUnitTest(s: String) |""".stripMargin, s"$confDir/servers") (snappyProductDir + "/sbin/snappy-start-all.sh").!! - vm3.invoke(getClass, "startSparkCluster", sparkProductDir) + vm3.invoke(getClass, "startSparkCluster", sparkOldProductDir) } override def afterClass(): Unit = { super.afterClass() - vm3.invoke(getClass, "stopSparkCluster", sparkProductDir) + vm3.invoke(getClass, "stopSparkCluster", sparkOldProductDir) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") (snappyProductDir + "/sbin/snappy-stop-all.sh").!! @@ -128,12 +128,12 @@ class SplitClusterDUnitTest(s: String) // test to make sure that stock spark-shell works with SnappyData core jar def testSparkShell(): Unit = { - testObject.invokeSparkShell(snappyProductDir, sparkProductDir, locatorClientPort, vm = vm3) + testObject.invokeSparkShell(snappyProductDir, sparkOldProductDir, locatorClientPort, vm = vm3) } // test to make sure that stock spark-shell for latest Spark release works with JDBC pool jar def testSparkShellCurrent(): Unit = { - testObject.invokeSparkShellCurrent(snappyProductDir, sparkProductDir, currentProductDir, + testObject.invokeSparkShellCurrent(snappyProductDir, sparkOldProductDir, currentProductDir, locatorClientPort, new Properties(), vm3) } } @@ -728,12 +728,12 @@ object SplitClusterDUnitTest extends SplitClusterDUnitTestObject { conn.close() } - def invokeSparkShellCurrent(productDir: String, sparkProductDir: String, + def invokeSparkShellCurrent(productDir: String, sparkOldProductDir: String, sparkCurrentProductDir: String, locatorClientPort: Int, props: Properties, vm: VM): Unit = { // stop existing spark cluster and start with current Spark version; stop on vm3 to also close // any existing SparkContext (subsequent tests will need to recreate the SparkContext) - if (vm eq null) stopSparkCluster(sparkProductDir) - else vm.invoke(classOf[SplitClusterDUnitTest], "stopSparkCluster", sparkProductDir) + if (vm eq null) stopSparkCluster(sparkOldProductDir) + else vm.invoke(classOf[SplitClusterDUnitTest], "stopSparkCluster", sparkOldProductDir) startSparkCluster(sparkCurrentProductDir) try { // perform some operations through spark-shell using JDBC pool driver API on current Spark @@ -763,7 +763,7 @@ object SplitClusterDUnitTest extends SplitClusterDUnitTestObject { conn.close() } finally { stopSparkCluster(sparkCurrentProductDir) - startSparkCluster(sparkProductDir) + startSparkCluster(sparkOldProductDir) } } } diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala index e33a72d3bc..6b79905e78 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala @@ -68,7 +68,7 @@ trait SplitClusterDUnitTestBase extends Logging { protected def props: Map[String, String] = testObject.props - protected def sparkProductDir: String + protected def sparkOldProductDir: String protected def locatorClientPort: Int diff --git a/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala b/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala index 61e0d03cbd..2f66a49880 100644 --- a/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala +++ b/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala @@ -83,13 +83,13 @@ class SnappySinkProviderDUnitTest(s: String) (snappyProductDir + "/sbin/snappy-start-all.sh").!! - vm.invoke(getClass, "startSparkCluster", sparkProductDir) + vm.invoke(getClass, "startSparkCluster", sparkOldProductDir) } override def afterClass(): Unit = { super.afterClass() - vm.invoke(getClass, "stopSparkCluster", sparkProductDir) + vm.invoke(getClass, "stopSparkCluster", sparkOldProductDir) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") (snappyProductDir + "/sbin/snappy-stop-all.sh").!! @@ -100,7 +100,7 @@ class SnappySinkProviderDUnitTest(s: String) private val snappyProductDir = getEnvironmentVariable("SNAPPY_HOME") - private val sparkProductDir = getEnvironmentVariable("APACHE_SPARK_HOME") + private val sparkOldProductDir = getEnvironmentVariable("APACHE_SPARK_OLD_HOME") def testStructuredStreaming(): Unit = { vm.invoke(getClass, "doTestStructuredStreaming", diff --git a/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java b/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java index 8c40e76286..37445e66b4 100644 --- a/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java +++ b/core/src/main/java/org/apache/spark/sql/hive/SnappySharedState.java @@ -21,7 +21,6 @@ import org.apache.spark.SparkException; import org.apache.spark.sql.ClusterMode; import org.apache.spark.sql.SnappyContext; -import org.apache.spark.sql.SnappyEmbeddedMode; import org.apache.spark.sql.SparkSession; import org.apache.spark.sql.SparkSupport$; import org.apache.spark.sql.ThinClientConnectorMode; diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala index 5dfdb58b8d..7b4734156f 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala @@ -289,10 +289,12 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def columnCharType: Rule1[DataType] = rule { - VARCHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => VarcharType(d.toInt)) | - CHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => CharType(d.toInt)) | + VARCHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => + CharStringType(d.toInt, baseType = "VARCHAR")) | + CHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => + CharStringType(d.toInt, baseType = "CHAR")) | STRING ~> (() => StringType) | - CLOB ~> (() => VarcharType(Int.MaxValue)) + CLOB ~> (() => CharStringType(Int.MaxValue, baseType = "CLOB")) } final def columnDataType: Rule1[DataType] = rule { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 919ad15b9a..662c2a978a 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -844,7 +844,7 @@ object SnappyContext extends Logging { classOf[execution.row.DefaultSource].getCanonicalName, "org.apache.spark.sql.sampling.DefaultSource" ) - private lazy val builtinSources = SparkSupport.internals().createCaseInsensitiveMap(Map( + private lazy val builtinSources = SparkSupport.internals().newCaseInsensitiveMap(Map( ParserConsts.COLUMN_SOURCE -> classOf[execution.columnar.impl.DefaultSource].getCanonicalName, ParserConsts.ROW_SOURCE -> classOf[execution.row.DefaultSource].getCanonicalName, SAMPLE_SOURCE -> SAMPLE_SOURCE_CLASS, diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index 1b89873368..ae85442122 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -22,7 +22,6 @@ import java.io.File import java.lang import java.nio.file.{Files, Paths} import java.sql.SQLException -import java.util.Locale import java.util.Map.Entry import java.util.function.Consumer @@ -549,7 +548,7 @@ abstract class SnappyDDLParser(session: SparkSession) protected final def resourceType: Rule1[FunctionResource] = rule { identifier ~ stringLiteral ~> { (rType: String, path: String) => - val resourceType = rType.toLowerCase(Locale.ROOT) + val resourceType = Utils.toLowerCase(rType) resourceType match { case "jar" => FunctionResource(FunctionResourceType.fromString(resourceType), path) @@ -585,11 +584,7 @@ abstract class SnappyDDLParser(session: SparkSession) val isTemp = te.asInstanceOf[Option[Boolean]].isDefined val funcResources = resources.asInstanceOf[Seq[FunctionResource]] funcResources.foreach(checkExists) - val catalogString = t match { - case VarcharType(Int.MaxValue) => "string" - case _ => t.catalogString - } - val classNameWithType = className + "__" + catalogString + val classNameWithType = className + "__" + t.catalogString internals.newCreateFunctionCommand(functionIdent.database, functionIdent.funcName, classNameWithType, funcResources, isTemp, ignoreIfExists, replace != None) @@ -770,16 +765,9 @@ abstract class SnappyDDLParser(session: SparkSession) t: DataType, notNull: Any, cm: Any) => val builder = new MetadataBuilder() val (dataType, empty) = t match { - case CharType(size) => - builder.putLong(Constant.CHAR_TYPE_SIZE_PROP, size) - .putString(Constant.CHAR_TYPE_BASE_PROP, "CHAR") - (StringType, false) - case VarcharType(Int.MaxValue) => // indicates CLOB type - builder.putString(Constant.CHAR_TYPE_BASE_PROP, "CLOB") - (StringType, false) - case VarcharType(size) => + case CharStringType(size, baseType) => builder.putLong(Constant.CHAR_TYPE_SIZE_PROP, size) - .putString(Constant.CHAR_TYPE_BASE_PROP, "VARCHAR") + .putString(Constant.CHAR_TYPE_BASE_PROP, baseType) (StringType, false) case StringType => builder.putString(Constant.CHAR_TYPE_BASE_PROP, "STRING") diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 676e90661b..d3dd74478e 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -34,6 +34,7 @@ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, import org.apache.spark.sql.catalyst.plans._ import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, _} import org.apache.spark.sql.catalyst.{CatalystTypeConverters, FunctionIdentifier, TableIdentifier} +import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.ShowTablesHiveCommand import org.apache.spark.sql.execution.command._ import org.apache.spark.sql.internal.LikeEscapeSimplification @@ -342,15 +343,15 @@ class SnappyParser(session: SnappySession) } final def alias: Rule1[Seq[String]] = rule { - AS ~ (identifier ~> (id: String => id :: Nil) | identifierList) | identifierList | - strictIdentifier ~> (id: String => id :: Nil) + AS ~ (identifier ~> ((id: String) => id :: Nil) | identifierList) | identifierList | + strictIdentifier ~> ((id: String) => id :: Nil) } final def namedExpression: Rule1[Expression] = rule { expression ~ alias.? ~> ((e: Expression, a: Any) => { a.asInstanceOf[Option[Seq[String]]] match { case None => e - case Some(ids) => if (ids.length == 1) Alias(e, ids)() else MultiAlias(e, ids) + case Some(ids) => if (ids.length == 1) Alias(e, ids.head)() else MultiAlias(e, ids) } }) } @@ -612,13 +613,14 @@ class SnappyParser(session: SnappySession) '(' ~ ws ~ (expression * commaSep) ~ ')' ~ ws ~ tableAlias.? ~> ((ident: TableIdentifier, e: Any, a: Any) => a match { case None => internals.newUnresolvedTableValuedFunction( - ident, e.asInstanceOf[Seq[Expression]], Nil) + Utils.toLowerCase(ident.unquotedString), e.asInstanceOf[Seq[Expression]], Nil) case Some((alias: String, columnAliases: Seq[_])) => - internals.newSubqueryAlias(alias, internals.newUnresolvedTableValuedFunction( - name, e.asInstanceOf[Seq[Expression]], columnAliases.asInstanceOf[Seq[String]])) + internals.newSubqueryAlias(alias, internals.newUnresolvedTableValuedFunction( + Utils.toLowerCase(ident.unquotedString), e.asInstanceOf[Seq[Expression]], + columnAliases.asInstanceOf[Seq[String]])) }) | streamWindowOptions.? ~ tableAlias.? ~> ((tableIdent: TableIdentifier, - window: Any, alias: Any) => { + w: Any, a: Any) => { val optAlias = a.asInstanceOf[Option[(String, Seq[String])]] updatePerTableQueryHint(tableIdent, optAlias) val window = w.asInstanceOf[Option[(Duration, Option[Duration])]] @@ -966,7 +968,7 @@ class SnappyParser(session: SnappySession) keyWhenThenElse ~> (s => CaseWhen(s._1, s._2)) ) | EXISTS ~ '(' ~ ws ~ query ~ ')' ~ ws ~> (Exists(_)) | - CURRENT_DATE ~ ('(' ~ ws ~ ')' ~ ws).? ~> CurrentDate | + CURRENT_DATE ~ ('(' ~ ws ~ ')' ~ ws).? ~> (() => CurrentDate()) | CURRENT_TIMESTAMP ~ ('(' ~ ws ~ ')' ~ ws).? ~> CurrentTimestamp | '(' ~ ws ~ ( (expression + commaSep) ~ ')' ~ ws ~> ((exprs: Seq[Expression]) => @@ -1207,7 +1209,7 @@ class SnappyParser(session: SnappySession) protected final def explain: Rule1[LogicalPlan] = rule { EXPLAIN ~ (EXTENDED ~ push(true) | CODEGEN ~ push(false)).? ~ start ~> ((flagVal: Any, plan: LogicalPlan) => plan match { - case _: DescribeTableCommand => ExplainCommand(OneRowRelation) + case _: DescribeTableCommand => ExplainCommand(OneRowRelation.asInstanceOf[LogicalPlan]) case _ => val flag = flagVal.asInstanceOf[Option[Boolean]] // ensure plan is sent back as CLOB for large plans especially with CODEGEN diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 36fd159379..b22a829baa 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -120,8 +120,8 @@ private[sql] trait SnappyStrategies { case HintName.JoinType_Sort => if (RowOrdering.isOrderable(leftKeys)) { new joins.SnappySortMergeJoinExec(leftKeys, rightKeys, joinType, condition, - planLater(left), planLater(right), left.statistics.sizeInBytes, - right.statistics.sizeInBytes) :: Nil + planLater(left), planLater(right), getStats(left).sizeInBytes, + getStats(right).sizeInBytes) :: Nil } else Nil case _ => throw new ParseException(s"Unknown joinType hint '$joinHint'. " + s"Expected one of ${QueryHint.JoinType.values}") @@ -180,8 +180,8 @@ private[sql] trait SnappyStrategies { joinType, joins.BuildLeft, replicatedTableJoin = false) } else if (RowOrdering.isOrderable(leftKeys)) { new joins.SnappySortMergeJoinExec(leftKeys, rightKeys, joinType, condition, - planLater(left), planLater(right), left.statistics.sizeInBytes, - right.statistics.sizeInBytes) :: Nil + planLater(left), planLater(right), getStats(left).sizeInBytes, + getStats(right).sizeInBytes) :: Nil } else Nil } // broadcast joins preferred over exchange+local hash join or SMJ @@ -214,8 +214,8 @@ private[sql] trait SnappyStrategies { joinType, joins.BuildLeft, replicatedTableJoin = false) } else if (RowOrdering.isOrderable(leftKeys)) { new joins.SnappySortMergeJoinExec(leftKeys, rightKeys, joinType, condition, - planLater(left), planLater(right), left.statistics.sizeInBytes, - right.statistics.sizeInBytes) :: Nil + planLater(left), planLater(right), getStats(left).sizeInBytes, + getStats(right).sizeInBytes) :: Nil } else Nil case _ => Nil diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index eb7f2a3bd1..ccdcc57f00 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -83,6 +83,19 @@ trait SparkInternals extends Logging { varName: String, initFunc: String => String = emptyFunc, forceInline: Boolean = false, useFreshName: Boolean = true): String + /** + * Adds a function to the generated class. In newer Spark versions, if the code for outer class + * grows too large, the function will be inlined into a new private, inner class, + * and a class-qualified name for the function will be returned. + */ + def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, + inlineToOuterClass: Boolean = false): String + + /** + * Returns true if a given function has already been added to the outer class. + */ + def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean + /** * Split the generated code for given expressions into multiple methods assuming * [[CodegenContext.INPUT_ROW]] has been used (else return inline expression code). @@ -113,7 +126,7 @@ trait SparkInternals extends Logging { /** * Create a new immutable map whose keys are case-insensitive from a given map. */ - def createCaseInsensitiveMap(map: Map[String, String]): Map[String, String] + def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] /** * Create a new SQL listener with SnappyData extensions and attach to the SparkUI. diff --git a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala index 008962d777..c5dc882a85 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala @@ -788,17 +788,17 @@ object Utils extends SparkSupport { def genTaskContextFunction(ctx: CodegenContext): String = { // use common taskContext variable so it is obtained only once for a plan - if (!ctx.addedFunctions.contains(TASKCONTEXT_FUNCTION)) { + if (!internals.isFunctionAddedToOuterClass(ctx, TASKCONTEXT_FUNCTION)) { val contextClass = classOf[TaskContext].getName val taskContextVar = internals.addClassField(ctx, contextClass, "taskContext") - ctx.addNewFunction(TASKCONTEXT_FUNCTION, + internals.addFunction(ctx, TASKCONTEXT_FUNCTION, s""" |private $contextClass $TASKCONTEXT_FUNCTION() { | final $contextClass context = $taskContextVar; | if (context != null) return context; | return ($taskContextVar = $contextClass.get()); |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) } TASKCONTEXT_FUNCTION } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala index 8b7073689c..a927546a84 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala @@ -159,15 +159,15 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor with SparkSu case _ => throw new UnsupportedOperationException( s"Expected a child supporting code generation. Got: $child") } - if (!ctx.addedFunctions.contains("shouldStop")) { + if (!internals.isFunctionAddedToOuterClass(ctx, "shouldStop")) { // no need to stop in iteration at any point - ctx.addNewFunction("shouldStop", + internals.addFunction(ctx, "shouldStop", s""" |@Override |protected final boolean shouldStop() { | return false; |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) } childProduce } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala index 2197665be5..ad59ce35ff 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala @@ -18,7 +18,6 @@ package org.apache.spark.sql.execution.columnar import java.sql.{Connection, PreparedStatement, Types} import java.util.Properties -import java.util.concurrent.atomic.AtomicReference import scala.collection.JavaConverters._ import scala.collection.mutable @@ -41,12 +40,10 @@ import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeFo import org.apache.spark.sql.catalyst.expressions.{Attribute, BinaryExpression, Expression, TokenLiteral} import org.apache.spark.sql.catalyst.parser.{CatalystSqlParser, ParseException} import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.impl.JDBCSourceAsColumnarStore import org.apache.spark.sql.execution.datasources.DataSource import org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry -import org.apache.spark.sql.execution.ui.SQLListener import org.apache.spark.sql.execution.{BufferedRowIterator, CodegenSupport, CodegenSupportOnExecutor, ConnectionPool, RefreshMetadata} import org.apache.spark.sql.hive.SnappyStoreHiveCatalog import org.apache.spark.sql.jdbc.{JdbcDialect, JdbcDialects} @@ -60,7 +57,7 @@ import org.apache.spark.{SparkContext, SparkException} /** * Utility methods used by external storage layers. */ -object ExternalStoreUtils { +object ExternalStoreUtils extends SparkSupport { private[spark] final lazy val (defaultTableBuckets, defaultSampleTableBuckets) = { val sc = Option(SnappyContext.globalSparkContext) @@ -209,7 +206,7 @@ object ExternalStoreUtils { case None => // Do nothing } }) - new CaseInsensitiveMap(optMap.toMap) + internals.newCaseInsensitiveMap(optMap.toMap) } def getExpandedGranteesIterator(grantees: Seq[String]): Iterator[String] = { @@ -414,7 +411,7 @@ object ExternalStoreUtils { case dataSource: ExternalSchemaRelationProvider => // add schemaString as separate property for Hive persistence dataSource.createRelation(snappySession.snappyContext, mode, - new CaseInsensitiveMap(JdbcExtendedUtils.addSplitProperty( + internals.newCaseInsensitiveMap(JdbcExtendedUtils.addSplitProperty( schemaString, JdbcExtendedUtils.SCHEMADDL_PROPERTY, options).toMap), schemaString, data) @@ -747,10 +744,6 @@ object ExternalStoreUtils { checkPositiveNum(Property.ColumnMaxDeltaRows.get(session.sessionState.conf), Property.ColumnMaxDeltaRows.name) } - - def getSQLListener: AtomicReference[SQLListener] = { - SparkSession.sqlListener - } } object ConnectionType extends Enumeration { diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala index 2686f23c20..2169ce6310 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyStoreHiveCatalog.scala @@ -50,7 +50,7 @@ import org.apache.spark.sql.catalyst.catalog.SessionCatalog._ import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.{AttributeReference, Expression, ExpressionInfo} import org.apache.spark.sql.catalyst.plans.logical.{Filter, LogicalPlan, SubqueryAlias} -import org.apache.spark.sql.catalyst.util.{CaseInsensitiveMap, StringUtils} +import org.apache.spark.sql.catalyst.util.StringUtils import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.RefreshMetadata @@ -87,7 +87,7 @@ class SnappyStoreHiveCatalog(externalCatalog: SnappyExternalCatalog, functionResourceLoader, functionRegistry, sqlConf, - hadoopConf) { + hadoopConf) with SparkSupport { val sparkConf: SparkConf = snappySession.sparkContext.getConf @@ -198,8 +198,8 @@ class SnappyStoreHiveCatalog(externalCatalog: SnappyExternalCatalog, try { val relation: LogicalRelation = getCachedHiveTable(tableIdent) val keyColumns = relation match { - case LogicalRelation(mutable: MutableRelation, _, _) => - val keyCols = mutable.getPrimaryKeyColumns + case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] => + val keyCols = lr.relation.asInstanceOf[MutableRelation].getPrimaryKeyColumns if (keyCols.isEmpty) { Nil } else { @@ -243,7 +243,7 @@ class SnappyStoreHiveCatalog(externalCatalog: SnappyExternalCatalog, val table = withHiveExceptionHandling(in.getTable(client)) val partitionColumns = table.partitionSchema.map(_.name) val provider = table.properties(HIVE_PROVIDER) - var options: Map[String, String] = new CaseInsensitiveMap(table.storage.properties) + var options = internals.newCaseInsensitiveMap(table.storage.properties) // add dbtable property if not present val dbtableProp = JdbcExtendedUtils.DBTABLE_PROPERTY if (!options.contains(dbtableProp)) { @@ -279,8 +279,8 @@ class SnappyStoreHiveCatalog(externalCatalog: SnappyExternalCatalog, case _ => // Do nothing } - (LogicalRelation(relation, catalogTable = Some(table)), table, RelationInfo( - 0, isPartitioned = false, Nil, Array.empty, Array.empty, Array.empty, -1)) + (internals.newLogicalRelation(relation, None, Some(table), isStreaming = false), table, + RelationInfo(0, isPartitioned = false, Nil, Array.empty, Array.empty, Array.empty, -1)) } } diff --git a/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala b/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala new file mode 100644 index 0000000000..1ed8cbc9db --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.types + +import scala.math.Ordering +import scala.reflect.runtime.universe.typeTag + +import org.apache.spark.sql.catalyst.ScalaReflectionLock +import org.apache.spark.unsafe.types.UTF8String + +/** + * An internal type to represent VARCHAR() and CHAR() types in + * column definitions of "CREATE TABLE". + */ +case class CharStringType(override val defaultSize: Int, + baseType: String) extends AtomicType { + + override private[sql] type InternalType = UTF8String + + @transient override private[sql] lazy val tag = ScalaReflectionLock.synchronized { + typeTag[InternalType] + } + + override private[sql] val ordering = implicitly[Ordering[InternalType]] + + override def typeName: String = baseType match { + case "VARCHAR" => s"varchar($defaultSize)" + case "CHAR" => s"char($defaultSize)" + case _ => "string" + } + + override def sql: String = typeName + + override private[spark] def asNullable: CharStringType = this +} From d8172d4e7d7f90cdd030d57bc40d6f1d8e6b206e Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 20 Feb 2019 23:31:49 +0530 Subject: [PATCH 03/80] more fixes for Spark 2.3.x support --- build.gradle | 2 +- cluster/build.gradle | 2 +- .../sql/internal/Spark210Internals.scala | 96 +++++++++++++- .../sql/internal/Spark232Internals.scala | 122 +++++++++++++++++- .../spark/sql/internal/SnappySharedState.java | 4 +- .../catalog/ConnectorExternalCatalog.scala | 74 ++++++----- .../sql/catalog/SnappyExternalCatalog.scala | 26 +++- .../impl/SmartConnectorExternalCatalog.scala | 76 +++++++---- .../sql/catalog/impl/StoreHiveCatalog.scala | 35 ++++- .../apache/spark/sql/SnappyDDLParser.scala | 6 +- .../org/apache/spark/sql/SnappySession.scala | 7 +- .../apache/spark/sql/SnappyStrategies.scala | 12 +- .../org/apache/spark/sql/SparkInternals.scala | 59 ++++++++- .../catalyst/expressions/ParamLiteral.scala | 8 +- .../spark/sql/execution/ExistingPlans.scala | 19 ++- .../aggregate/CollectAggregateExec.scala | 3 +- .../columnar/ExternalStoreUtils.scala | 5 +- .../columnar/impl/ColumnFormatRelation.scala | 13 +- .../columnar/impl/DefaultSource.scala | 7 +- .../impl/JDBCSourceAsColumnarStore.scala | 8 +- .../columnar/impl/StoreCallbacksImpl.scala | 4 +- .../sql/hive/SnappyHiveExternalCatalog.scala | 14 +- gradle/wrapper/gradle-wrapper.properties | 2 +- jdbc/build.gradle | 1 + store | 2 +- 25 files changed, 466 insertions(+), 141 deletions(-) diff --git a/build.gradle b/build.gradle index e20cdcd566..6252278b50 100644 --- a/build.gradle +++ b/build.gradle @@ -101,7 +101,7 @@ allprojects { vendorName = 'SnappyData, Inc.' scalaBinaryVersion = '2.11' scalaVersion = scalaBinaryVersion + '.8' - sparkVersion = '2.1.0' + sparkVersion = '2.3.2' snappySparkVersion = '2.1.1.4' sparkOldVersion = '2.1.1' diff --git a/cluster/build.gradle b/cluster/build.gradle index 1fa19479f4..5a362d6389 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -46,7 +46,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(":compatibility:spark${sparkVersion}_${scalaBinaryVersion}")) { + compile (project(":compatibility:spark${sparkOldVersion}_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 82e437f5ba..f66dedb545 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -19,12 +19,14 @@ package org.apache.spark.sql.internal import scala.reflect.ClassTag import scala.util.control.NonFatal +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, FunctionResource} +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec +import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} @@ -33,7 +35,7 @@ import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.catalyst.{FunctionIdentifier, SQLBuilder, TableIdentifier} +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} @@ -351,6 +353,13 @@ class Spark210Internals extends SparkInternals { LogicalRelation(relation, expectedOutputAttributes, catalogTable) } + override def newCatalogDatabase(name: String, description: String, + locationUri: String, properties: Map[String, String]): CatalogDatabase = { + CatalogDatabase(name, description, locationUri, properties) + } + + override def catalogDatabaseLocationURI(database: CatalogDatabase): String = database.locationUri + // scalastyle:off override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, @@ -392,6 +401,41 @@ class Spark210Internals extends SparkInternals { catalogTable.copy(viewOriginalText = viewOriginalText) } + override def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], + outputFormat: Option[String], serde: Option[String], compressed: Boolean, + properties: Map[String, String]): CatalogStorageFormat = { + CatalogStorageFormat(locationUri, inputFormat, outputFormat, serde, compressed, properties) + } + + override def catalogStorageFormatLocationUri( + storageFormat: CatalogStorageFormat): Option[String] = storageFormat.locationUri + + override def catalogTablePartitionToRow(partition: CatalogTablePartition, + partitionSchema: StructType, defaultTimeZoneId: String): InternalRow = { + partition.toRow(partitionSchema) + } + + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, + stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { + throw new ParseException(s"ALTER TABLE STATS not supported in Spark $version") + } + + override def alterFunction(externalCatalog: ExternalCatalog, schema: String, + function: CatalogFunction): Unit = { + throw new ParseException(s"ALTER FUNCTION not supported in Spark $version") + } + + override def columnStatToMap(stat: ColumnStat, colName: String, + dataType: DataType): Map[String, String] = stat.toMap + + override def newSmartConnectorExternalCatalog( + session: SparkSession): SmartConnectorExternalCatalog = { + new SmartConnectorExternalCatalogImpl(session) + } + + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = + DataSource.lookupDataSource(provider) + override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { ShuffleExchange(newPartitioning, child) } @@ -461,3 +505,51 @@ final class SnappyCacheManager extends CacheManager { session.asInstanceOf[SnappySession].clearPlanCache() } } + +final class SmartConnectorExternalCatalogImpl(override val session: SparkSession) + extends SmartConnectorExternalCatalog { + + override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = + createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = + dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = { + dropTableImpl(schema, table, ignoreIfNotExists, purge) + } + + override def renameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = + alterTableSchemaImpl(schemaName, table, newSchema) + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) + } + + override def listPartitionsByFilter(schema: String, table: String, + predicates: Seq[Expression]): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId = "") + } + + override def createFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override def dropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override def renameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index e72cd4dbff..e571a36971 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -17,16 +17,20 @@ package org.apache.spark.sql.internal import java.lang.reflect.Field +import java.net.URI +import java.nio.file.Paths import scala.collection.mutable +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.spark.SparkContext import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStatistics, CatalogStorageFormat, CatalogTable, CatalogTableType, FunctionResource} +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec +import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} @@ -34,7 +38,7 @@ import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} @@ -278,6 +282,18 @@ class Spark232Internals extends SparkInternals { LogicalRelation(relation, output, catalogTable, isStreaming) } + private def toURI(uri: String): URI = { + if (uri.contains("://")) new URI(uri) else new URI("file://" + Paths.get(uri).toAbsolutePath) + } + + override def newCatalogDatabase(name: String, description: String, + locationUri: String, properties: Map[String, String]): CatalogDatabase = { + CatalogDatabase(name, description, toURI(locationUri), properties) + } + + override def catalogDatabaseLocationURI(database: CatalogDatabase): String = + database.locationUri.toString + // scalastyle:off override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, @@ -312,6 +328,51 @@ class Spark232Internals extends SparkInternals { override def newCatalogTableWithViewOriginalText(catalogTable: CatalogTable, viewOriginalText: Option[String]): CatalogTable = catalogTable + override def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], + outputFormat: Option[String], serde: Option[String], compressed: Boolean, + properties: Map[String, String]): CatalogStorageFormat = { + locationUri match { + case None => CatalogStorageFormat(None, inputFormat, outputFormat, + serde, compressed, properties) + case Some(uri) => CatalogStorageFormat(Some(toURI(uri)), inputFormat, outputFormat, + serde, compressed, properties) + } + } + + override def catalogStorageFormatLocationUri( + storageFormat: CatalogStorageFormat): Option[String] = storageFormat.locationUri match { + case None => None + case Some(uri) => Some(uri.toString) + } + + override def catalogTablePartitionToRow(partition: CatalogTablePartition, + partitionSchema: StructType, defaultTimeZoneId: String): InternalRow = { + partition.toRow(partitionSchema, defaultTimeZoneId) + } + + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, + stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { + val catalogStats = stats match { + case None => None + case Some(s) => Some(CatalogStatistics(s._1, s._2, s._3)) + } + externalCatalog.alterTableStats(schema, table, catalogStats) + } + + override def alterFunction(externalCatalog: ExternalCatalog, schema: String, + function: CatalogFunction): Unit = externalCatalog.alterFunction(schema, function) + + override def columnStatToMap(stat: ColumnStat, colName: String, + dataType: DataType): Map[String, String] = stat.toMap(colName, dataType) + + override def newSmartConnectorExternalCatalog( + session: SparkSession): SmartConnectorExternalCatalog = { + new SmartConnectorExternalCatalogImpl(session) + } + + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = + DataSource.lookupDataSource(provider, conf) + override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { ShuffleExchangeExec(newPartitioning, child) } @@ -382,3 +443,60 @@ final class SnappyCacheManager extends CacheManager { session.asInstanceOf[SnappySession].clearPlanCache() } } + +final class SmartConnectorExternalCatalogImpl(override val session: SparkSession) + extends SmartConnectorExternalCatalog { + + override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override protected def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override protected def doDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) + + override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override protected def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override protected def doAlterTableDataSchema(schemaName: String, table: String, + newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) + + override protected def doAlterTableStats(schema: String, table: String, + stats: Option[CatalogStatistics]): Unit = stats match { + case None => alterTableStatsImpl(schema, table, None) + case Some(s) => alterTableStatsImpl(schema, table, + Some((s.sizeInBytes, s.rowCount, s.colStats))) + } + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, + holdDDLTime = false) + } + + override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], + defaultTimeZoneId: String): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId) + } + + override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override protected def doDropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = + alterFunctionImpl(schema, function) + + override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} diff --git a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java index 7999cfa317..dda9da3b9d 100644 --- a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java +++ b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java @@ -17,7 +17,6 @@ package org.apache.spark.sql.internal; import io.snappydata.sql.catalog.SnappyExternalCatalog; -import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog; import org.apache.spark.SparkContext; import org.apache.spark.sql.ClusterMode; import org.apache.spark.sql.SnappyContext; @@ -141,7 +140,8 @@ public SnappyExternalCatalog getExternalCatalogInstance(SnappySession session) { } else { // create a new connector catalog instance for connector mode // each instance has its own set of credentials for authentication - return new SmartConnectorExternalCatalog(session); + return SparkSupport$.MODULE$.internals(session.sparkContext()) + .newSmartConnectorExternalCatalog(session); } } diff --git a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala index 3602881154..bb803512b0 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala @@ -33,6 +33,7 @@ import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.collection.Utils.EMPTY_STRING_ARRAY import org.apache.spark.sql.execution.columnar.ExternalStoreUtils +import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{SparkSession, SparkSupport, TableNotFoundException} import org.apache.spark.{Logging, Partition, SparkEnv} @@ -103,8 +104,24 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { private def convertToCatalogStorage(storage: CatalogStorage, storageProps: Map[String, String]): CatalogStorageFormat = { - CatalogStorageFormat(Option(storage.getLocationUri), Option(storage.getInputFormat), - Option(storage.getOutputFormat), Option(storage.getSerde), storage.compressed, storageProps) + internals.newCatalogStorageFormat(Option(storage.getLocationUri), + Option(storage.getInputFormat), Option(storage.getOutputFormat), + Option(storage.getSerde), storage.compressed, storageProps) + } + + private[snappydata] def convertToCatalogStatistics(schema: StructType, fullTableName: String, + catalogStats: CatalogStats): (BigInt, Option[BigInt], Map[String, ColumnStat]) = { + val colStats = schema.indices.flatMap { i => + val f = schema(i) + val colStatsMap = catalogStats.colStats.get(i) + if (colStatsMap.isEmpty) None + else ColumnStat.fromMap(fullTableName, f, colStatsMap.asScala.toMap) match { + case None => None + case Some(s) => Some(f.name -> s) + } + }.toMap + (BigInt(catalogStats.sizeInBytes), + if (catalogStats.isSetRowCount) Some(BigInt(catalogStats.getRowCount)) else None, colStats) } private[snappydata] def convertToCatalogTable(request: CatalogMetadataDetails, @@ -127,19 +144,8 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { Some(BucketSpec(tableObj.getNumBuckets, tableObj.getBucketColumns.asScala, tableObj.getSortColumns.asScala)) } - val stats = if (tableObj.isSetSizeInBytes) { - val colStatMaps = tableObj.getColStats.asScala - val colStats = schema.indices.flatMap { i => - val f = schema(i) - val colStatsMap = colStatMaps(i) - if (colStatsMap.isEmpty) None - else ColumnStat.fromMap(identifier.unquotedString, f, colStatsMap.asScala.toMap) match { - case None => None - case Some(s) => Some(f.name -> s) - } - }.toMap - Some(BigInt(tableObj.getSizeInBytes), - if (tableObj.isSetRowCount) Some(BigInt(tableObj.getRowCount)) else None, colStats) + val stats = if (tableObj.isSetStats) { + Some(convertToCatalogStatistics(schema, identifier.unquotedString, tableObj.getStats)) } else None val bucketOwners = tableObj.getBucketOwners // remove partitioning columns from CatalogTable for row/column tables @@ -215,7 +221,8 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { private def convertFromCatalogStorage(storage: CatalogStorageFormat): CatalogStorage = { val storageObj = new CatalogStorage(storage.properties.asJava, storage.compressed) - if (storage.locationUri.isDefined) storageObj.setLocationUri(storage.locationUri.get) + val locationUri = internals.catalogStorageFormatLocationUri(storage) + if (locationUri.isDefined) storageObj.setLocationUri(locationUri.get) if (storage.inputFormat.isDefined) storageObj.setInputFormat(storage.inputFormat.get) if (storage.outputFormat.isDefined) storageObj.setOutputFormat(storage.outputFormat.get) if (storage.serde.isDefined) storageObj.setSerde(storage.serde.get) @@ -227,6 +234,21 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { case Some(v) => v } + private[snappydata] def convertFromCatalogStatistics(schema: StructType, sizeInBytes: BigInt, + rowCount: Option[BigInt], stats: Map[String, ColumnStat]): CatalogStats = { + val colStats = schema.map { f => + stats.get(f.name) match { + case None => Collections.emptyMap[String, String]() + case Some(stat) => internals.columnStatToMap(stat, f.name, f.dataType).asJava + } + }.asJava + val catalogStats = new CatalogStats(sizeInBytes.longValue(), colStats) + rowCount match { + case None => catalogStats + case Some(c) => catalogStats.setRowCount(c.longValue()) + } + } + private[snappydata] def convertFromCatalogTable(table: CatalogTable): CatalogTableObject = { val storageObj = convertFromCatalogStorage(table.storage) // non CatalogTable attributes like indexColumns, buckets will be set by caller @@ -236,23 +258,11 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { case Some(spec) => (spec.numBuckets, spec.bucketColumnNames.asJava, spec.sortColumnNames.asJava) } - val (sizeInBytes, rowCount, colStats) = table.stats match { - case None => - (Long.MinValue, None, Collections.emptyList[java.util.Map[String, String]]()) - case Some(stats) => - val colStats = table.schema.map { f => - stats.colStats.get(f.name) match { - case None => Collections.emptyMap[String, String]() - case Some(stat) => stat.toMap.asJava - } - }.asJava - (stats.sizeInBytes.toLong, stats.rowCount, colStats) - } val tableObj = new CatalogTableObject(table.identifier.table, table.tableType.name, storageObj, table.schema.json, table.partitionColumnNames.asJava, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), bucketColumns, sortColumns, table.owner, table.createTime, table.lastAccessTime, table.properties.asJava, - colStats, table.unsupportedFeatures.asJava, table.tracksPartitionsInCatalog, + table.unsupportedFeatures.asJava, table.tracksPartitionsInCatalog, internals.catalogTableSchemaPreservesCase(table)) tableObj.setSchemaName(getOrNull(table.identifier.database)) .setProvider(getOrNull(table.provider)) @@ -262,10 +272,10 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { val ignoredProps = internals.catalogTableIgnoredProperties(table) if (ignoredProps.nonEmpty) tableObj.setIgnoredProperties(ignoredProps.asJava) if (numBuckets != -1) tableObj.setNumBuckets(numBuckets) - if (sizeInBytes != Long.MinValue) tableObj.setSizeInBytes(sizeInBytes) - rowCount match { + table.stats match { case None => tableObj - case Some(c) => tableObj.setRowCount(c.toLong) + case Some(stats) => tableObj.setStats(convertFromCatalogStatistics(table.schema, + stats.sizeInBytes, stats.rowCount, stats.colStats)) } } diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index aace322b1d..4c2052f6f3 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -32,8 +32,8 @@ import io.snappydata.Constant import io.snappydata.sql.catalog.SnappyExternalCatalog._ import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} +import org.apache.spark.sql.catalyst.analysis.NoSuchTableException import org.apache.spark.sql.catalyst.catalog.{CatalogDatabase, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.columnar.ExternalStoreUtils @@ -42,9 +42,9 @@ import org.apache.spark.sql.internal.SnappySharedState import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources.JdbcExtendedUtils import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{AnalysisException, RuntimeConfig, SnappyContext, SnappyParserConsts, TableNotFoundException} +import org.apache.spark.sql.{AnalysisException, RuntimeConfig, SnappyContext, SnappyParserConsts, SparkSupport, TableNotFoundException} -trait SnappyExternalCatalog extends ExternalCatalog { +trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { // Overrides for better exceptions that say "schema" instead of "database" @@ -74,7 +74,7 @@ trait SnappyExternalCatalog extends ExternalCatalog { } } - override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = { + protected def alterDatabaseImpl(schemaDefinition: CatalogDatabase): Unit = { throw new UnsupportedOperationException("Schema definitions cannot be altered") } @@ -112,10 +112,18 @@ trait SnappyExternalCatalog extends ExternalCatalog { } } + def getTableOption(schema: String, table: String): Option[CatalogTable] = { + try { + Some(getTable(schema, table)) + } catch { + case _: TableNotFoundException | _: NoSuchTableException => None + } + } + protected def getCachedCatalogTable(schema: String, table: String): CatalogTable def systemSchemaDefinition: CatalogDatabase = - CatalogDatabase(SYS_SCHEMA, "System schema", SYS_SCHEMA, Map.empty) // path is dummy + internals.newCatalogDatabase(SYS_SCHEMA, "System schema", SYS_SCHEMA, Map.empty) // dummy path /** * Get RelationInfo for given table with underlying region in embedded mode. @@ -206,6 +214,12 @@ trait SnappyExternalCatalog extends ExternalCatalog { } } + protected def alterTableSchemaImpl(schemaName: String, table: String, + newSchema: StructType): Unit = { + val catalogTable = getTable(schemaName, table) + alterTable(catalogTable.copy(schema = newSchema)) + } + /** * Get all the tables in the catalog skipping given schema names. By default * the inbuilt SYS schema is skipped. @@ -222,7 +236,7 @@ trait SnappyExternalCatalog extends ExternalCatalog { def getBaseTable(tableDefinition: CatalogTable): Option[String] = { (tableDefinition.properties.get(BASETABLE_PROPERTY) match { case None => - val params = new CaseInsensitiveMap(tableDefinition.storage.properties) + val params = internals.newCaseInsensitiveMap(tableDefinition.storage.properties) params.get(BASETABLE_PROPERTY) match { // older releases didn't have base table entry for indexes case None => params.get(INDEXED_TABLE) diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala index dde01cef86..931d61f764 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala @@ -29,9 +29,10 @@ import org.apache.spark.sql.catalyst.analysis.{NoSuchPartitionException, NoSuchP import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog.{CatalogDatabase, CatalogFunction, CatalogTable, CatalogTablePartition} import org.apache.spark.sql.catalyst.expressions.{And, AttributeReference, BoundReference, Expression} +import org.apache.spark.sql.catalyst.plans.logical.ColumnStat import org.apache.spark.sql.collection.{SmartExecutorBucketPartition, Utils} import org.apache.spark.sql.execution.RefreshMetadata -import org.apache.spark.sql.{SnappyContext, SparkSession, TableNotFoundException, ThinClientConnectorMode} +import org.apache.spark.sql.{SnappyContext, TableNotFoundException, ThinClientConnectorMode} /** * An ExternalCatalog implementation for the smart connector mode. @@ -44,8 +45,7 @@ import org.apache.spark.sql.{SnappyContext, SparkSession, TableNotFoundException * be added later that switches the user authentication using thread-locals or similar, but as * of now it is used only by some hive insert paths which are not used in SnappySessionState. */ -class SmartConnectorExternalCatalog(override val session: SparkSession) - extends SnappyExternalCatalog with ConnectorExternalCatalog { +trait SmartConnectorExternalCatalog extends SnappyExternalCatalog with ConnectorExternalCatalog { override def jdbcUrl: String = SnappyContext.getClusterMode(session.sparkContext) .asInstanceOf[ThinClientConnectorMode].url @@ -67,16 +67,18 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) // Using a common procedure to update catalog meta-data for create/drop/alter methods // and likewise a common procedure to get catalog meta-data for get/exists/list methods - override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = { + protected def createDatabaseImpl(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = { val request = new CatalogMetadataDetails() request.setCatalogSchema(new CatalogSchemaObject(schemaDefinition.name, - schemaDefinition.description, schemaDefinition.locationUri, + schemaDefinition.description, internals.catalogDatabaseLocationURI(schemaDefinition), schemaDefinition.properties.asJava)) withExceptionHandling(connectorHelper.updateCatalogMetadata( snappydataConstants.CATALOG_CREATE_SCHEMA, request)) } - override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = { + protected def dropDatabaseImpl(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = { val request = new CatalogMetadataDetails() request.setNames(Collections.singletonList(schema)).setExists(ignoreIfNotExists) .setOtherFlags(Collections.singletonList(flag(cascade))) @@ -92,8 +94,8 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) snappydataConstants.CATALOG_GET_SCHEMA, request)) if (result.isSetCatalogSchema) { val schemaObj = result.getCatalogSchema - CatalogDatabase(name = schemaObj.getName, description = schemaObj.getDescription, - locationUri = schemaObj.getLocationUri, properties = schemaObj.getProperties.asScala.toMap) + internals.newCatalogDatabase(schemaObj.getName, schemaObj.getDescription, + schemaObj.getLocationUri, schemaObj.getProperties.asScala.toMap) } else throw schemaNotFoundException(schema) } @@ -127,7 +129,7 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) connectorHelper.setCurrentSchema(schema) } - override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { + protected def createTableImpl(table: CatalogTable, ignoreIfExists: Boolean): Unit = { val request = new CatalogMetadataDetails() request.setCatalogTable(ConnectorExternalCatalog.convertFromCatalogTable(table)) .setExists(ignoreIfExists) @@ -138,7 +140,7 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) invalidateCaches(Nil) } - override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + protected def dropTableImpl(schema: String, table: String, ignoreIfNotExists: Boolean, purge: Boolean): Unit = { val request = new CatalogMetadataDetails() request.setNames((schema :: table :: Nil).asJava).setExists(ignoreIfNotExists) @@ -150,7 +152,7 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) invalidateCaches(Nil) } - override def alterTable(table: CatalogTable): Unit = { + protected def alterTableImpl(table: CatalogTable): Unit = { val request = new CatalogMetadataDetails() request.setCatalogTable(ConnectorExternalCatalog.convertFromCatalogTable(table)) withExceptionHandling(connectorHelper.updateCatalogMetadata( @@ -160,9 +162,26 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) invalidateCaches(Nil) } - override def renameTable(schemaName: String, oldName: String, newName: String): Unit = { + protected def alterTableStatsImpl(schema: String, table: String, + stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { + val request = new CatalogMetadataDetails() + request.setNames((schema :: table :: Nil).asJava) + stats match { + case None => + case Some(s) => + val catalogTable = getTable(schema, table) + request.setCatalogStats(ConnectorExternalCatalog.convertFromCatalogStatistics( + catalogTable.schema, s._1, s._2, s._3)) + } + withExceptionHandling(connectorHelper.updateCatalogMetadata( + snappydataConstants.CATALOG_ALTER_TABLE_STATS, request)) + + invalidate(schema -> table) + } + + protected def renameTableImpl(schema: String, oldName: String, newName: String): Unit = { val request = new CatalogMetadataDetails() - request.setNames((schemaName :: oldName :: newName :: Nil).asJava) + request.setNames((schema :: oldName :: newName :: Nil).asJava) withExceptionHandling(connectorHelper.updateCatalogMetadata( snappydataConstants.CATALOG_RENAME_TABLE, request)) @@ -181,14 +200,6 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) ConnectorExternalCatalog.getCatalogTable(schema -> table, catalog = this) } - override def getTableOption(schema: String, table: String): Option[CatalogTable] = { - try { - Some(getTable(schema, table)) - } catch { - case _: TableNotFoundException => None - } - } - override def getRelationInfo(schema: String, table: String, rowTable: Boolean): (RelationInfo, Option[LocalRegion]) = { if (schema == SnappyExternalCatalog.SYS_SCHEMA) { @@ -300,7 +311,7 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) invalidateCaches(schema -> table :: Nil) } - override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + protected def loadDynamicPartitionsImpl(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { val request = new CatalogMetadataDetails() request.setNames((schema :: table :: loadPath :: Nil).asJava) @@ -353,8 +364,8 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) } else Nil } - override def listPartitionsByFilter(schema: String, table: String, - predicates: Seq[Expression]): Seq[CatalogTablePartition] = { + protected def listPartitionsByFilterImpl(schema: String, table: String, + predicates: Seq[Expression], defaultTimeZoneId: String): Seq[CatalogTablePartition] = { // taken from HiveExternalCatalog.listPartitionsByFilter val catalogTable = getTable(schema, table) val partitionColumnNames = catalogTable.partitionColumnNames.toSet @@ -374,11 +385,12 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) val index = partitionSchema.indexWhere(_.name == attr.name) BoundReference(index, partitionSchema(index).dataType, nullable = true) } - partitions.filter(p => boundPredicate.eval(p.toRow(partitionSchema)).asInstanceOf[Boolean]) + partitions.filter(p => boundPredicate.eval(internals.catalogTablePartitionToRow( + p, partitionSchema, defaultTimeZoneId)).asInstanceOf[Boolean]) } else partitions } - override def createFunction(schema: String, function: CatalogFunction): Unit = { + protected def createFunctionImpl(schema: String, function: CatalogFunction): Unit = { val request = new CatalogMetadataDetails() request.setCatalogFunction(ConnectorExternalCatalog.convertFromCatalogFunction(function)) .setNames(Collections.singletonList(schema)) @@ -386,13 +398,21 @@ class SmartConnectorExternalCatalog(override val session: SparkSession) snappydataConstants.CATALOG_CREATE_FUNCTION, request)) } - override def dropFunction(schema: String, funcName: String): Unit = { + protected def dropFunctionImpl(schema: String, funcName: String): Unit = { val request = new CatalogMetadataDetails().setNames((schema :: funcName :: Nil).asJava) withExceptionHandling(connectorHelper.updateCatalogMetadata( snappydataConstants.CATALOG_DROP_FUNCTION, request)) } - override def renameFunction(schema: String, oldName: String, newName: String): Unit = { + protected def alterFunctionImpl(schema: String, function: CatalogFunction): Unit = { + val request = new CatalogMetadataDetails() + request.setCatalogFunction(ConnectorExternalCatalog.convertFromCatalogFunction(function)) + .setNames(Collections.singletonList(schema)) + withExceptionHandling(connectorHelper.updateCatalogMetadata( + snappydataConstants.CATALOG_ALTER_FUNCTION, request)) + } + + protected def renameFunctionImpl(schema: String, oldName: String, newName: String): Unit = { val request = new CatalogMetadataDetails() .setNames((schema :: oldName :: newName :: Nil).asJava) withExceptionHandling(connectorHelper.updateCatalogMetadata( diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala index 937fdd3194..7a1a51b222 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala @@ -40,15 +40,15 @@ import io.snappydata.sql.catalog.{CatalogObjectType, ConnectorExternalCatalog, S import io.snappydata.thrift._ import org.apache.log4j.{Level, LogManager} -import org.apache.spark.sql.{AnalysisException, SparkSupport} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec -import org.apache.spark.sql.catalyst.catalog.{CatalogDatabase, CatalogStorageFormat, CatalogTable} +import org.apache.spark.sql.catalyst.catalog.{CatalogStorageFormat, CatalogTable} import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap -import org.apache.spark.sql.execution.datasources.DataSource import org.apache.spark.sql.hive.{HiveClientUtil, SnappyHiveExternalCatalog} +import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources.{DataSourceRegister, JdbcExtendedUtils} +import org.apache.spark.sql.{AnalysisException, SparkSupport} import org.apache.spark.{Logging, SparkConf} class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { @@ -274,7 +274,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { } metaData.shortProvider = metaData.provider try { - val c = DataSource.lookupDataSource(metaData.provider) + val c = internals.lookupDataSource(metaData.provider, new SQLConf) if (classOf[DataSourceRegister].isAssignableFrom(c)) { metaData.shortProvider = c.newInstance.asInstanceOf[DataSourceRegister].shortName() } @@ -449,7 +449,8 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { case Some(d) if !d.isEmpty => s"$url; ${SnappyExternalCatalog.DBTABLE_PROPERTY}=$d" case _ => url } - case _ => storage.locationUri match { // fallback to locationUri + // fallback to locationUri + case _ => internals.catalogStorageFormatLocationUri(storage) match { case None => "" case Some(l) => l } @@ -482,7 +483,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { try { val catalogSchema = externalCatalog.getDatabase(request.getSchemaName) val schemaObj = new CatalogSchemaObject(catalogSchema.name, catalogSchema.description, - catalogSchema.locationUri, catalogSchema.properties.asJava) + internals.catalogDatabaseLocationURI(catalogSchema), catalogSchema.properties.asJava) metadata(result.setCatalogSchema(schemaObj)) } catch { case _: AnalysisException => metadata(result) @@ -581,7 +582,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { case snappydataConstants.CATALOG_CREATE_SCHEMA => assert(request.isSetCatalogSchema, "CREATE SCHEMA: expected catalogSchema to be set") val schemaObj = request.getCatalogSchema - val catalogSchema = CatalogDatabase(schemaObj.getName, schemaObj.getDescription, + val catalogSchema = internals.newCatalogDatabase(schemaObj.getName, schemaObj.getDescription, schemaObj.getLocationUri, schemaObj.getProperties.asScala.toMap) externalCatalog.createDatabase(catalogSchema, request.exists) @@ -606,6 +607,18 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { assert(request.isSetCatalogTable, "ALTER TABLE: expected catalogTable to be set") externalCatalog.alterTable(getCatalogTableForWrite(request, user)) + case snappydataConstants.CATALOG_ALTER_TABLE_STATS => + assert(request.isSetCatalogStats, "ALTER TABLE STATS: expected catalogStats to be set") + val schema = request.getNames.get(0) + val table = request.getNames.get(1) + checkSchemaPermission(schema, table, user) + val catalogTable = externalCatalog.getTable(schema, table) + val catalogStats = if (request.isSetCatalogStats) { + Some(ConnectorExternalCatalog.convertToCatalogStatistics(catalogTable.schema, + schema + '.' + table, request.getCatalogStats)) + } else None + internals.alterTableStats(externalCatalog, schema, table, catalogStats) + case snappydataConstants.CATALOG_RENAME_TABLE => assert(request.getNamesSize == 3, "RENAME TABLE: unexpected names = " + request.getNames) val schema = request.getNames.get(0) @@ -638,6 +651,14 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { checkSchemaPermission(schema, function, user) externalCatalog.dropFunction(schema, function) + case snappydataConstants.CATALOG_ALTER_FUNCTION => + assert(request.isSetCatalogFunction, "ALTER FUNCTION: expected catalogFunction to be set") + val functionObj = request.getCatalogFunction + val schema = functionObj.getSchemaName + checkSchemaPermission(schema, functionObj.getFunctionName, user) + internals.alterFunction(externalCatalog, schema, + ConnectorExternalCatalog.convertToCatalogFunction(functionObj)) + case snappydataConstants.CATALOG_RENAME_FUNCTION => assert(request.getNamesSize == 3, "RENAME FUNCTION: unexpected names = " + request.getNames) val schema = request.getNames.get(0) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index 69ff7eeb0f..a0930337e4 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -40,7 +40,7 @@ import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.command._ -import org.apache.spark.sql.execution.datasources.{CreateTempViewUsing, DataSource, LogicalRelation, RefreshTable} +import org.apache.spark.sql.execution.datasources.{CreateTempViewUsing, LogicalRelation, RefreshTable} import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources.JdbcExtendedUtils import org.apache.spark.sql.streaming.StreamPlanProvider @@ -265,7 +265,7 @@ abstract class SnappyDDLParser(session: SparkSession) // check if a relation supporting free-form schema has been used that supports // syntax beyond Spark support val (userSpecifiedSchema, schemaDDL) = if (schemaString.length > 0) { - if (ExternalStoreUtils.isExternalSchemaRelationProvider(provider)) { + if (ExternalStoreUtils.isExternalSchemaRelationProvider(provider, session)) { None -> Some(schemaString) } else synchronized { // parse the schema string expecting Spark SQL format @@ -521,7 +521,7 @@ abstract class SnappyDDLParser(session: SparkSession) val specifiedSchema = schema.asInstanceOf[Option[Seq[StructField]]] .map(fields => StructType(fields)) // check that the provider is a stream relation - val clazz = DataSource.lookupDataSource(provider) + val clazz = internals.lookupDataSource(provider, session.sessionState.conf) if (!classOf[StreamPlanProvider].isAssignableFrom(clazz)) { throw Utils.analysisException(s"CREATE STREAM provider $provider" + " does not implement StreamPlanProvider") diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index b95b200702..abf06f12bb 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -1179,7 +1179,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo case None => options case Some(ddl) => // check that the DataSource should implement ExternalSchemaRelationProvider - if (!ExternalStoreUtils.isExternalSchemaRelationProvider(provider)) { + if (!ExternalStoreUtils.isExternalSchemaRelationProvider(provider, this)) { throw new AnalysisException(s"Provider '$provider' should implement " + s"ExternalSchemaRelationProvider to use a custom schema string in CREATE TABLE") } @@ -1289,10 +1289,11 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo throw new AnalysisException("ALTER TABLE not supported for temporary tables") } sessionCatalog.resolveRelation(tableIdent) match { - case LogicalRelation(ar: AlterableRelation, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[AlterableRelation] => + val ar = lr.asInstanceOf[AlterableRelation] ar.alterTable(tableIdent, isAddColumn, column, defaultValue) val metadata = sessionCatalog.getTableMetadata(tableIdent) - sessionCatalog.alterTable(metadata.copy(schema = ar.schema)) + sessionCatalog.alterTable(metadata.copy(schema = lr.relation.schema)) case _ => throw new AnalysisException(s"ALTER TABLE not supported for ${tableIdent.unquotedString}") } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 80a7888f96..23337fb664 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -87,7 +87,7 @@ private[sql] trait SnappyStrategies { case HintName.JoinType_Hash => if (canBuild(joinType)) { // don't hash join beyond 10GB estimated size because that is likely a mistake - val buildSize = buildPlan.statistics.sizeInBytes + val buildSize = getStats(buildPlan).sizeInBytes if (buildSize > math.max(JoinStrategy.getMaxHashJoinSize(conf), 10L * 1024L * 1024L * 1024L)) { snappySession.addWarning(new SQLWarning(s"Plan hint ${QueryHint.JoinType}=" + @@ -103,7 +103,7 @@ private[sql] trait SnappyStrategies { case HintName.JoinType_Broadcast => if (canBuild(joinType)) { // don't broadcast beyond 1GB estimated size because that is likely a mistake - val buildSize = buildPlan.statistics.sizeInBytes + val buildSize = getStats(buildPlan).sizeInBytes if (buildSize > math.max(conf.autoBroadcastJoinThreshold, 1L * 1024L * 1024L * 1024L)) { snappySession.addWarning(new SQLWarning(s"Plan hint ${QueryHint.JoinType}=" + s"$joinHint for ${right.simpleString} skipped for ${joinType.sql} " + @@ -170,7 +170,7 @@ private[sql] trait SnappyStrategies { // check for collocated joins before going for broadcast else if (isCollocatedJoin(joinType, left, leftKeys, right, rightKeys)) { val buildLeft = canBuildLeft(joinType) && canBuildLocalHashMap(left, conf) - if (buildLeft && left.statistics.sizeInBytes < right.statistics.sizeInBytes) { + if (buildLeft && getStats(left).sizeInBytes < getStats(right).sizeInBytes) { makeLocalHashJoin(leftKeys, rightKeys, left, right, condition, joinType, joins.BuildLeft, replicatedTableJoin = false) } else if (canBuildRight(joinType) && canBuildLocalHashMap(right, conf)) { @@ -181,8 +181,8 @@ private[sql] trait SnappyStrategies { joinType, joins.BuildLeft, replicatedTableJoin = false) } else if (RowOrdering.isOrderable(leftKeys)) { new joins.SnappySortMergeJoinExec(leftKeys, rightKeys, joinType, condition, - planLater(left), planLater(right), left.statistics.sizeInBytes, - right.statistics.sizeInBytes) :: Nil + planLater(left), planLater(right), getStats(left).sizeInBytes, + getStats(right).sizeInBytes) :: Nil } else Nil } // broadcast joins preferred over exchange+local hash join or SMJ @@ -202,7 +202,7 @@ private[sql] trait SnappyStrategies { else if (canBuildRight(joinType) && canBuildLocalHashMap(right, conf) || !RowOrdering.isOrderable(leftKeys)) { if (canBuildLeft(joinType) && canBuildLocalHashMap(left, conf) && - left.statistics.sizeInBytes < right.statistics.sizeInBytes) { + getStats(left).sizeInBytes < getStats(right).sizeInBytes) { makeLocalHashJoin(leftKeys, rightKeys, left, right, condition, joinType, joins.BuildLeft, replicatedTableJoin = false) } else { diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 7553d2cded..bdcb1f71f7 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -16,21 +16,22 @@ */ package org.apache.spark.sql +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.spark.sql.catalyst.analysis.UnresolvedTableValuedFunction -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, FunctionResource} +import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, RepartitionByExpression, Statistics, SubqueryAlias} import org.apache.spark.sql.catalyst.plans.physical.Partitioning -import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan, WholeStageCodegenExec} -import org.apache.spark.sql.internal.{LogicalPlanWithHints, SharedState, SnappySessionState} +import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionState} import org.apache.spark.sql.sources.BaseRelation import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.{Logging, SparkContext} @@ -313,8 +314,22 @@ trait SparkInternals extends Logging { expectedOutputAttributes: Option[Seq[AttributeReference]], catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation + /** + * Create a new CatalogDatabase given the parameters. Newer Spark releases require a URI + * for locationUri so the given string will be converted to URI for those Spark versions. + */ + def newCatalogDatabase(name: String, description: String, + locationUri: String, properties: Map[String, String]): CatalogDatabase + + /** Get the locationURI for CatalogDatabase in String format. */ + def catalogDatabaseLocationURI(database: CatalogDatabase): String + // scalastyle:off + /** + * Create a new CatalogTable given the parameters. The primary constructor + * of the class has seen major changes across Spark versions. + */ def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, storage: CatalogStorageFormat, schema: StructType, provider: Option[String], partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], @@ -327,15 +342,53 @@ trait SparkInternals extends Logging { // scalastyle:on + /** Get the viewOriginalText of CataLogTable or None if not present. */ def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] + /** Get the schemaPreservesCase field of CataLogTable or true if not present. */ def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean + /** Get the ignoredProperties map of CataLogTable or empty map if not present. */ def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] + /** Return a new CatalogTable with updated viewOriginalText if possible. */ def newCatalogTableWithViewOriginalText(catalogTable: CatalogTable, viewOriginalText: Option[String]): CatalogTable + /** + * Create a new CatalogStorageFormat given the parameters. + */ + def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], + outputFormat: Option[String], serde: Option[String], compressed: Boolean, + properties: Map[String, String]): CatalogStorageFormat + + /** Get the string representation of locationUri field of CatalogStorageFormat. */ + def catalogStorageFormatLocationUri(storageFormat: CatalogStorageFormat): Option[String] + + /** Serialize a CatalogTablePartition to InternalRow */ + def catalogTablePartitionToRow(partition: CatalogTablePartition, + partitionSchema: StructType, defaultTimeZoneId: String): InternalRow + + /** Alter table statistics in the ExternalCatalog if possible else throw an exception */ + def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, + stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit + + /** Alter function definition in the ExternalCatalog if possible else throw an exception */ + def alterFunction(externalCatalog: ExternalCatalog, schema: String, + function: CatalogFunction): Unit + + /** Convert a ColumnStat to a map. */ + def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] + + /** + * Create a new instance of SmartConnectorExternalCatalog. The method overrides have changed + * across Spark versions. + */ + def newSmartConnectorExternalCatalog(session: SparkSession): SmartConnectorExternalCatalog + + /** Lookup the data source for a given provider. */ + def lookupDataSource(provider: String, conf: => SQLConf): Class[_] + /** * Create a new shuffle exchange plan. */ diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala index 58c54a290c..37b7ef42fd 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala @@ -59,7 +59,7 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { value } - override final def deterministic: Boolean = true + override final lazy val deterministic: Boolean = true private def checkValueType(value: Any, expectedClass: Class[_]): Unit = { val valueClass = if (value != null) value.getClass else null @@ -404,12 +404,12 @@ object TokenLiteral { def isConstant(expression: Expression): Boolean = expression match { case _: DynamicReplacableConstant | _: Literal => true - case Cast(child, dataType) => - val isConstant = child match { + case c: Cast => + val isConstant = c.child match { case _: DynamicReplacableConstant | _: Literal => true case _ => false } - isConstant & dataType.isInstanceOf[AtomicType] + isConstant & c.dataType.isInstanceOf[AtomicType] case _ => false } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index 432cc4a891..0247b21b27 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -31,7 +31,7 @@ import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow, Table import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.impl.{BaseColumnFormatRelation, ColumnarStorePartitionedRDD, IndexColumnFormatRelation, SmartConnectorColumnRDD} import org.apache.spark.sql.execution.columnar.{ColumnTableScan, ConnectionType} -import org.apache.spark.sql.execution.exchange.{ReusedExchangeExec, ShuffleExchange} +import org.apache.spark.sql.execution.exchange.ReusedExchangeExec import org.apache.spark.sql.execution.metric.{SQLMetric, SQLMetricInfo, SQLMetrics} import org.apache.spark.sql.execution.row.{RowFormatRelation, RowFormatScanRDD, RowTableScan} import org.apache.spark.sql.sources.{BaseRelation, PrunedUnsafeFilteredScan, SamplingRelation} @@ -53,11 +53,11 @@ private[sql] abstract class PartitionedPhysicalScan( numBuckets: Int, partitionColumns: Seq[Expression], partitionColumnAliases: Seq[Seq[Attribute]], - @transient override val relation: BaseRelation, - // not used currently (if need to use then get from relation.table) - override val metastoreTableIdentifier: Option[TableIdentifier] = None) + @transient override val relation: BaseRelation) extends DataSourceScanExec with CodegenSupportOnExecutor with SparkSupport { + val metastoreTableIdentifier: Option[TableIdentifier] = None + def getMetrics: Map[String, SQLMetric] = { if (sqlContext eq null) Map.empty else Map("numOutputRows" -> SQLMetrics.createMetric(sparkContext, @@ -225,8 +225,13 @@ private[sql] object PartitionedPhysicalScan { val simpleString = SnappySession.replaceParamLiterals( plan.simpleString, paramLiterals, paramsId) + val metadata = plan match { + case s: FileSourceScanExec => s.metadata + case s: RowDataSourceScanExec => s.metadata + case _ => Map.empty[String, String] + } new SparkPlanInfo(plan.nodeName, simpleString, - children.map(getSparkPlanInfo(_, paramLiterals, paramsId)), plan.metadata, metrics) + children.map(getSparkPlanInfo(_, paramLiterals, paramsId)), metadata, metrics) } private[sql] def updatePlanInfo(planInfo: SparkPlanInfo, @@ -344,7 +349,7 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, private val consumedVars: ArrayBuffer[ExprCode] = ArrayBuffer.empty private val inputCode = basePlan.asInstanceOf[CodegenSupport] - private val withShuffle = ShuffleExchange(HashPartitioning( + private val withShuffle = internals.newShuffleExchange(HashPartitioning( ClusteredDistribution(otherPartKeys) .clustering, inputCode.inputRDDs().head.getNumPartitions), otherPlan) @@ -433,7 +438,7 @@ class StratumInternalRow(val weight: Long) extends InternalRow { def copy(): InternalRow = throw new UnsupportedOperationException("not implemented") - def anyNull: Boolean = throw new UnsupportedOperationException("not implemented") + override def anyNull: Boolean = throw new UnsupportedOperationException("not implemented") def isNullAt(ordinal: Int): Boolean = throw new UnsupportedOperationException("not implemented") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala index c270a12777..c5e0e53982 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala @@ -21,7 +21,6 @@ import scala.collection.mutable.ArrayBuffer import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.Attribute -import org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator import org.apache.spark.sql.catalyst.plans.physical.{Distribution, UnspecifiedDistribution} import org.apache.spark.sql.execution.{BufferedRowIterator, InputAdapter, PlanLater, SparkPlan, UnaryExecNode} import org.apache.spark.sql.internal.SnappySessionState @@ -53,7 +52,7 @@ case class CollectAggregateExec( } @transient private[sql] lazy val generatedClass = { - CodeGenerator.compile(generatedSource) + internals.compile(generatedSource) } /** diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala index 40916b8027..1b93374afb 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala @@ -41,7 +41,6 @@ import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeFo import org.apache.spark.sql.catalyst.expressions.{Attribute, BinaryExpression, Expression, TokenLiteral} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.impl.JDBCSourceAsColumnarStore -import org.apache.spark.sql.execution.datasources.DataSource import org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry import org.apache.spark.sql.execution.{BufferedRowIterator, CodegenSupport, CodegenSupportOnExecutor, ConnectionPool, RefreshMetadata} import org.apache.spark.sql.jdbc.{JdbcDialect, JdbcDialects} @@ -389,10 +388,10 @@ object ExternalStoreUtils extends SparkSupport { } /** check if the DataSource implements ExternalSchemaRelationProvider */ - def isExternalSchemaRelationProvider(provider: String): Boolean = { + def isExternalSchemaRelationProvider(provider: String, session: SparkSession): Boolean = { try { classOf[ExternalSchemaRelationProvider].isAssignableFrom( - DataSource.lookupDataSource(provider)) + internals.lookupDataSource(provider, session.sessionState.conf)) } catch { case NonFatal(_) => false } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala index b730edec6d..16a2e0d181 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala @@ -23,8 +23,8 @@ import scala.util.control.NonFatal import com.gemstone.gemfire.internal.cache.{ExternalTableMetaData, LocalRegion} import com.pivotal.gemfirexd.internal.engine.Misc import com.pivotal.gemfirexd.internal.engine.store.GemFireContainer -import io.snappydata.{Constant, Property} import io.snappydata.sql.catalog.{RelationInfo, SnappyExternalCatalog} +import io.snappydata.{Constant, Property} import org.apache.spark.rdd.RDD import org.apache.spark.sql._ @@ -494,8 +494,8 @@ class ColumnFormatRelation( cr.origOptions, cr.externalStore, cr.partitioningColumns, cr.sqlContext, _relationInfoAndRegion) newRelation.delayRollover = true - relation.copy(relation = newRelation, - expectedOutputAttributes = Some(relation.output ++ ColumnDelta.mutableKeyAttributes)) + internals.newLogicalRelation(newRelation, Some(relation.output ++ + ColumnDelta.mutableKeyAttributes), relation.catalogTable, isStreaming = false) } override def dropIndex(indexIdent: TableIdentifier, @@ -655,15 +655,16 @@ class IndexColumnFormatRelation( cr.externalStore, cr.partitioningColumns, cr.sqlContext, baseTableName, _relationInfoAndRegion) newRelation.delayRollover = true - relation.copy(relation = newRelation, - expectedOutputAttributes = Some(relation.output ++ ColumnDelta.mutableKeyAttributes)) + internals.newLogicalRelation(newRelation, Some(relation.output ++ + ColumnDelta.mutableKeyAttributes), relation.catalogTable, isStreaming = false) } def getBaseTableRelation: ColumnFormatRelation = { val session = sqlContext.sparkSession.asInstanceOf[SnappySession] val catalog = session.sessionState.catalog catalog.resolveRelation(session.tableIdentifier(baseTableName)) match { - case LogicalRelation(cr: ColumnFormatRelation, _, _) => cr + case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] => + lr.relation.asInstanceOf[ColumnFormatRelation] case _ => throw new UnsupportedOperationException("Index scan other than Column table unsupported") } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala index 401753f10b..7264e6404a 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala @@ -20,14 +20,13 @@ import io.snappydata.Constant import io.snappydata.sql.catalog.SnappyExternalCatalog import org.apache.spark.Logging -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap import org.apache.spark.sql.sources.{CreatableRelationProvider, DataSourceRegister, ExternalSchemaRelationProvider, JdbcExtendedUtils, SchemaRelationProvider} import org.apache.spark.sql.store.StoreUtils import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{AnalysisException, DataFrame, SQLContext, SaveMode, SnappyParserConsts, SnappySession} +import org.apache.spark.sql.{AnalysisException, DataFrame, SQLContext, SaveMode, SnappyParserConsts, SnappySession, SparkSupport} /** * Column tables don't support any extensions over regular Spark schema syntax, @@ -39,7 +38,7 @@ import org.apache.spark.sql.{AnalysisException, DataFrame, SQLContext, SaveMode, * which is parsed locally in the CreatableRelationProvider implementation. */ final class DefaultSource extends ExternalSchemaRelationProvider with SchemaRelationProvider - with CreatableRelationProvider with DataSourceRegister with Logging { + with CreatableRelationProvider with DataSourceRegister with Logging with SparkSupport { override def shortName(): String = SnappyParserConsts.COLUMN_SOURCE @@ -134,7 +133,7 @@ final class DefaultSource extends ExternalSchemaRelationProvider with SchemaRela } val partitioningColumns = StoreUtils.getAndSetPartitioningAndKeyColumns(session, schema, parameters) - val tableOptions = new CaseInsensitiveMap(parameters.toMap) + val tableOptions = internals.newCaseInsensitiveMap(parameters.toMap) val ddlExtension = StoreUtils.ddlExtensionString(parameters, isRowTable = false, isShadowTable = false) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala index 9d7508d3cf..8826ff3bf8 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala @@ -48,12 +48,12 @@ import org.apache.spark.sql.execution.columnar._ import org.apache.spark.sql.execution.columnar.encoding.ColumnDeleteDelta import org.apache.spark.sql.execution.row.{ResultSetTraversal, RowFormatScanRDD, RowInsertExec} import org.apache.spark.sql.execution.sources.StoreDataSourceStrategy.translateToFilter -import org.apache.spark.sql.execution.{BufferedRowIterator, ConnectionPool, RDDKryo, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{BufferedRowIterator, ConnectionPool, RDDKryo} import org.apache.spark.sql.sources.JdbcExtendedUtils.quotedName import org.apache.spark.sql.sources.{ConnectionProperties, JdbcExtendedUtils} import org.apache.spark.sql.store.{CodeGeneration, StoreUtils} import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{SnappyContext, SnappySession, SparkSession} +import org.apache.spark.sql.{SnappyContext, SnappySession, SparkSession, SparkSupport} import org.apache.spark.util.TaskCompletionListener import org.apache.spark.{Partition, TaskContext, TaskKilledException} @@ -62,7 +62,7 @@ import org.apache.spark.{Partition, TaskContext, TaskKilledException} */ class JDBCSourceAsColumnarStore(private var _connProperties: ConnectionProperties, var numPartitions: Int, private var _tableName: String, var schema: StructType) - extends ExternalStore with KryoSerializable { + extends ExternalStore with KryoSerializable with SparkSupport { self => @@ -570,7 +570,7 @@ class JDBCSourceAsColumnarStore(private var _connProperties: ConnectionPropertie // this is only used for local code generation while its RDD // semantics and related methods are all ignored val (ctx, code) = ExternalStoreUtils.codeGenOnExecutor( - WholeStageCodegenExec(insertPlan), insertPlan) + internals.newWholeStagePlan(insertPlan), insertPlan) val references = ctx.references // also push the index of connection reference at the end which // will be used below to update connection before execution diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala index a63861a6de..c99d1d9a31 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/StoreCallbacksImpl.scala @@ -49,7 +49,7 @@ import org.apache.spark.Logging import org.apache.spark.memory.{MemoryManagerCallback, MemoryMode} import org.apache.spark.serializer.KryoSerializerPool import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeFormatter, CodeGenerator, CodegenContext} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeFormatter, CodegenContext} import org.apache.spark.sql.catalyst.expressions.{AttributeReference, Expression, Literal, TokenLiteral, UnsafeRow} import org.apache.spark.sql.catalyst.{CatalystTypeConverters, expressions} import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} @@ -267,7 +267,7 @@ object StoreCallbacksImpl extends StoreCallbacks with SparkSupport with Logging CodeGeneration.logDebug(s"\n${CodeFormatter.format(cleanedSource)}") - val clazz = CodeGenerator.compile(cleanedSource) + val clazz = internals.compile(cleanedSource) clazz.generate(ctx.references.toArray).asInstanceOf[StatsPredicate] } val batchIterator = ColumnBatchIterator(region, bucketIds, projection, diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 878fb4ac73..71d87715a9 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -18,6 +18,7 @@ package org.apache.spark.sql.hive import java.lang.reflect.InvocationTargetException +import javax.annotation.concurrent.GuardedBy import scala.collection.JavaConverters._ import scala.collection.mutable @@ -39,7 +40,6 @@ import io.snappydata.sql.catalog.{CatalogObjectType, ConnectorExternalCatalog, R import org.apache.commons.io.FileUtils import org.apache.hadoop.conf.Configuration import org.apache.hadoop.hive.ql.metadata.Hive -import org.apache.http.annotation.GuardedBy import org.apache.log4j.{Level, LogManager} import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} @@ -64,7 +64,7 @@ import org.apache.spark.{SparkConf, SparkException} class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, val hadoopConf: Configuration, val createTime: Long) - extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyExternalCatalog with SparkSupport { + extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyExternalCatalog { { // fire dummy queries to initialize more components of hive meta-store @@ -83,7 +83,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, } // create the default database as in Spark - val defaultSchemaDefinition = CatalogDatabase(SPARK_DEFAULT_SCHEMA, + val defaultSchemaDefinition = internals.newCatalogDatabase(SPARK_DEFAULT_SCHEMA, s"$SPARK_DEFAULT_SCHEMA database", conf.get(WAREHOUSE_PATH), Map.empty) // Initialize default database if it doesn't exist if (!databaseExists(SPARK_DEFAULT_SCHEMA)) { @@ -495,14 +495,6 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, else withHiveExceptionHandling(cachedCatalogTables.get(name)) } - override def getTableOption(schema: String, table: String): Option[CatalogTable] = { - try { - Some(getTable(schema, table)) - } catch { - case _: TableNotFoundException | _: NoSuchTableException => None - } - } - override def getRelationInfo(schema: String, table: String, rowTable: Boolean): (RelationInfo, Option[LocalRegion]) = { if (schema == SYS_SCHEMA) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ee671127ff..1b2b07cfb0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/jdbc/build.gradle b/jdbc/build.gradle index e281a6d63d..35bacc2bc3 100644 --- a/jdbc/build.gradle +++ b/jdbc/build.gradle @@ -80,6 +80,7 @@ shadowJar { // avoid conflict with the 0.9.2 version in stock Spark relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' + // avoid conflict with spark-unsafe in Spark >= 2.4.0 relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' mergeServiceFiles() diff --git a/store b/store index 95867fccd0..5fb2755678 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 95867fccd0659226ef5f3948ca122e8e6a6f4332 +Subproject commit 5fb2755678b729d97799de7b9f3f2b35aecf8367 From 7dba6ad974f0e9f7e5c04b45e249130559332900 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 22 Feb 2019 10:25:33 +0530 Subject: [PATCH 04/80] many other fixes for Spark 2.3.x support remaining build failures = 34 with Spark 2.3.x (was > 200 originally) --- .../sql/internal/Spark210Internals.scala | 49 ++++++- .../spark/sql/catalyst/AccessUtils.scala | 25 ++++ .../sql/internal/Spark232Internals.scala | 49 +++++-- .../org/apache/spark/sql/internal/plans.scala | 6 +- ...nappyThinConnectorTableStatsProvider.scala | 21 +-- .../apache/spark/sql/SnappyDDLParser.scala | 4 +- .../org/apache/spark/sql/SparkInternals.scala | 56 +++++++- .../apache/spark/sql/collection/Utils.scala | 14 +- .../org/apache/spark/sql/execution/ddl.scala | 9 +- .../sql/execution/joins/HashJoinExec.scala | 2 +- .../sql/execution/row/DefaultSource.scala | 5 +- .../sql/execution/row/RowFormatRelation.scala | 3 +- .../sources/StoreDataSourceStrategy.scala | 44 ++++--- .../spark/sql/hive/HiveClientUtil.scala | 29 ++--- .../sql/internal/ColumnTableBulkOps.scala | 3 +- .../sql/internal/SnappySessionState.scala | 13 +- .../apache/spark/sql/sources/RuleUtils.scala | 122 ++++++++++-------- .../sql/sources/SnappyOptimizations.scala | 43 +++--- .../spark/sql/sources/StoreStrategy.scala | 43 +++--- .../spark/sql/store/CodeGeneration.scala | 33 +++-- .../spark/sql/streaming/SchemaDStream.scala | 9 +- .../sql/streaming/StreamBaseRelation.scala | 9 +- .../spark/sql/streaming/StreamSqlHelper.scala | 5 +- .../spark/sql/types/CharStringType.scala | 11 +- 24 files changed, 391 insertions(+), 216 deletions(-) create mode 100644 compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index f66dedb545..73e107fa1d 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -23,6 +23,8 @@ import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.spark.deploy.SparkSubmitUtils +import org.apache.spark.internal.config.ConfigBuilder +import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec @@ -30,18 +32,19 @@ import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical._ -import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartitioning} import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} -import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} -import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} +import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder +import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel import org.apache.spark.{SparkContext, SparkException} @@ -119,6 +122,10 @@ class Spark210Internals extends SparkInternals { variableName } + override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = { + ctx.mutableStates.map(t => t._1 -> t._2) -> ctx.mutableStates.map(_._3) + } + override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, inlineToOuterClass: Boolean = false): String = { ctx.addNewFunction(funcName, funcCode) @@ -217,7 +224,7 @@ class Spark210Internals extends SparkInternals { } override def newDescribeTableCommand(table: TableIdentifier, - partitionSpec: Map[String, String], isExtended: Boolean): LogicalPlan = { + partitionSpec: Map[String, String], isExtended: Boolean): RunnableCommand = { DescribeTableCommand(table, partitionSpec, isExtended, isFormatted = false) } @@ -236,10 +243,14 @@ class Spark210Internals extends SparkInternals { override def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, - overwrite: Boolean, ifNotExists: Boolean): LogicalPlan = { + overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { new Insert(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) } + override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite.enabled + + override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifNotExists + override def newGroupingSet(groupingSets: Seq[Seq[Expression]], groupByExprs: Seq[Expression], child: LogicalPlan, aggregations: Seq[NamedExpression]): LogicalPlan = { @@ -264,6 +275,16 @@ class Spark210Internals extends SparkInternals { SubqueryAlias(alias, child, view = None) } + override def newAlias(child: Expression, name: String, + copyAlias: Option[NamedExpression]): Alias = { + copyAlias match { + case None => Alias(child, name)() + case Some(a: Alias) => + Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata, a.isGenerated) + case Some(a) => Alias(child, name)(a.exprId, a.qualifier, isGenerated = a.isGenerated) + } + } + override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], child: LogicalPlan): LogicalPlan = { if (outputColumnNames.isEmpty) child @@ -353,6 +374,14 @@ class Spark210Internals extends SparkInternals { LogicalRelation(relation, expectedOutputAttributes, catalogTable) } + override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], + filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], + metadata: Map[String, String], relation: BaseRelation, + tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec = { + RowDataSourceScanExec(requiredColumnsIndex.map(fullOutput), rdd, relation, + UnknownPartitioning(0), metadata, tableIdentifier) + } + override def newCatalogDatabase(name: String, description: String, locationUri: String, properties: Map[String, String]): CatalogDatabase = { CatalogDatabase(name, description, locationUri, properties) @@ -440,6 +469,10 @@ class Spark210Internals extends SparkInternals { ShuffleExchange(newPartitioning, child) } + override def isShuffleExchange(plan: SparkPlan): Boolean = plan.isInstanceOf[ShuffleExchange] + + override def classOfShuffleExchange(): Class[_] = classOf[ShuffleExchange] + override def getStatistics(plan: LogicalPlan): Statistics = plan.statistics override def supportsPartial(aggregate: AggregateFunction): Boolean = aggregate.supportsPartial @@ -471,6 +504,8 @@ class Spark210Internals extends SparkInternals { } override def newCacheManager(): CacheManager = new SnappyCacheManager + + override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) } /** diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala new file mode 100644 index 0000000000..03390097e8 --- /dev/null +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.catalyst + +import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext + +object AccessUtils { + + def getInlinedMutableStates(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = + ctx.inlinedMutableStates -> ctx.mutableStateInitCode +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index e571a36971..6d3d57d0a1 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -27,24 +27,26 @@ import io.snappydata.{HintName, QueryHint} import org.apache.spark.SparkContext import org.apache.spark.deploy.SparkSubmitUtils +import org.apache.spark.internal.config.ConfigBuilder +import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand} +import org.apache.spark.sql.catalyst.{AccessUtils, FunctionIdentifier, InternalRow, TableIdentifier} +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} -import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan, WholeStageCodegenExec} -import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel @@ -80,6 +82,9 @@ class Spark232Internals extends SparkInternals { ctx.addMutableState(javaType, varName, initFunc, forceInline, useFreshName) } + override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = + AccessUtils.getInlinedMutableStates(ctx) + override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, inlineToOuterClass: Boolean = false): String = { ctx.addNewFunction(funcName, funcCode, inlineToOuterClass) @@ -161,7 +166,7 @@ class Spark232Internals extends SparkInternals { } override def newDescribeTableCommand(table: TableIdentifier, - partitionSpec: Map[String, String], isExtended: Boolean): LogicalPlan = { + partitionSpec: Map[String, String], isExtended: Boolean): RunnableCommand = { DescribeTableCommand(table, partitionSpec, isExtended) } @@ -181,10 +186,14 @@ class Spark232Internals extends SparkInternals { override def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, - overwrite: Boolean, ifNotExists: Boolean): LogicalPlan = { - new Insert23(table, partition, child, overwrite, ifNotExists) + overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { + new Insert(table, partition, child, overwrite, ifNotExists) } + override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite + + override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifPartitionNotExists + override def newGroupingSet(groupingSets: Seq[Seq[Expression]], groupByExprs: Seq[Expression], child: LogicalPlan, aggregations: Seq[NamedExpression]): LogicalPlan = { @@ -201,6 +210,15 @@ class Spark232Internals extends SparkInternals { SubqueryAlias(alias, child) } + override def newAlias(child: Expression, name: String, + copyAlias: Option[NamedExpression]): Alias = { + copyAlias match { + case None => Alias(child, name)() + case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) + case Some(a) => Alias(child, name)(a.exprId, a.qualifier) + } + } + override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], child: LogicalPlan): LogicalPlan = { if (outputColumnNames.isEmpty) child @@ -282,6 +300,14 @@ class Spark232Internals extends SparkInternals { LogicalRelation(relation, output, catalogTable, isStreaming) } + override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], + filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], + metadata: Map[String, String], relation: BaseRelation, + tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec = { + RowDataSourceScanExec(fullOutput, requiredColumnsIndex, filters.toSet, handledFilters.toSet, + rdd, relation, tableIdentifier) + } + private def toURI(uri: String): URI = { if (uri.contains("://")) new URI(uri) else new URI("file://" + Paths.get(uri).toAbsolutePath) } @@ -377,6 +403,10 @@ class Spark232Internals extends SparkInternals { ShuffleExchangeExec(newPartitioning, child) } + override def isShuffleExchange(plan: SparkPlan): Boolean = plan.isInstanceOf[ShuffleExchangeExec] + + override def classOfShuffleExchange(): Class[_] = classOf[ShuffleExchangeExec] + override def getStatistics(plan: LogicalPlan): Statistics = plan.stats override def supportsPartial(aggregate: AggregateFunction): Boolean = true @@ -414,8 +444,11 @@ class Spark232Internals extends SparkInternals { } override def newCacheManager(): CacheManager = new SnappyCacheManager + + override def buildConf(key: String): ConfigBuilder = SQLConf.buildConf(key) } + /** * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. */ diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala index 9682f63e9b..75aa6e0c87 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -27,7 +27,7 @@ import org.apache.spark.sql.types.LongType * Unlike Spark's InsertIntoTable this plan provides the count of rows * inserted as the output. */ -final class Insert23( +final class Insert( table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, @@ -42,8 +42,8 @@ final class Insert23( partition: Map[String, Option[String]] = partition, child: LogicalPlan = child, overwrite: Boolean = overwrite, - ifNotExists: Boolean = ifNotExists): Insert23 = { - new Insert23(table, partition, child, overwrite, ifNotExists) + ifNotExists: Boolean = ifNotExists): Insert = { + new Insert(table, partition, child, overwrite, ifNotExists) } } diff --git a/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala b/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala index f38a6b72c7..209fc47d00 100644 --- a/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala +++ b/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala @@ -26,11 +26,12 @@ import scala.collection.mutable.ArrayBuffer import scala.util.control.NonFatal import com.gemstone.gemfire.CancelException -import com.pivotal.gemfirexd.Attribute import com.pivotal.gemfirexd.internal.engine.ui.{SnappyExternalTableStats, SnappyIndexStats, SnappyRegionStats} import io.snappydata.Constant._ import org.apache.spark.SparkContext +import org.apache.spark.sql.SnappyContext +import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JdbcUtils} object SnappyThinConnectorTableStatsProvider extends TableStatsProviderService { @@ -39,16 +40,18 @@ object SnappyThinConnectorTableStatsProvider extends TableStatsProviderService { private var getStatsStmt: PreparedStatement = _ private var _url: String = _ - def initializeConnection(context: Option[SparkContext] = None): Unit = { - var securePart = "" - context match { + def initializeConnection(sparkContext: Option[SparkContext] = None): Unit = { + val context = sparkContext match { + case None => Option(SnappyContext.globalSparkContext) + case _ => sparkContext + } + val securePart = context match { case Some(sc) => - val user = sc.getConf.get(Constant.SPARK_STORE_PREFIX + Attribute.USERNAME_ATTR, "") - if (!user.isEmpty) { - val pass = sc.getConf.get(Constant.SPARK_STORE_PREFIX + Attribute.PASSWORD_ATTR, "") - securePart = s";user=$user;password=$pass" + Utils.getUserPassword(Utils.getInternalSparkConf(sc)) match { + case None => "" + case Some((user, password)) => s";user=$user;password=$password" } - case None => + case None => "" } val jdbcOptions = new JDBCOptions(_url + securePart + ";route-query=false;", "", Map("driver" -> Constant.JDBC_CLIENT_DRIVER)) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index a0930337e4..af0950a302 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -662,8 +662,8 @@ abstract class SnappyDDLParser(session: SparkSession) ((extended: Any, tableIdent: TableIdentifier) => { // ensure columns are sent back as CLOB for large results with EXTENDED queryHints.put(QueryHint.ColumnsAsClob.toString, "data_type,comment") - new DescribeSnappyTableCommand(tableIdent, Map.empty[String, String], extended - .asInstanceOf[Option[Boolean]].isDefined, isFormatted = false) + DescribeSnappyTableCommand(tableIdent, Map.empty[String, String], extended + .asInstanceOf[Option[Boolean]].isDefined) }) ) } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index bdcb1f71f7..9d5ac07296 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -19,20 +19,23 @@ package org.apache.spark.sql import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} +import org.apache.spark.internal.config.ConfigBuilder +import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.analysis.UnresolvedTableValuedFunction import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame} import org.apache.spark.sql.catalyst.json.JSONOptions -import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, RepartitionByExpression, Statistics, SubqueryAlias} +import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, InsertIntoTable, LogicalPlan, RepartitionByExpression, Statistics, SubqueryAlias} import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} +import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange -import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionState} -import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.{Logging, SparkContext} @@ -84,6 +87,11 @@ trait SparkInternals extends Logging { varName: String, initFunc: String => String = emptyFunc, forceInline: Boolean = false, useFreshName: Boolean = true): String + /** + * Get all the inline class fields in the given CodegenContext. + */ + def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) + /** * Adds a function to the generated class. In newer Spark versions, if the code for outer class * grows too large, the function will be inlined into a new private, inner class, @@ -189,7 +197,7 @@ trait SparkInternals extends Logging { * Create a [[LogicalPlan]] for DESCRIBE TABLE. */ def newDescribeTableCommand(table: TableIdentifier, partitionSpec: Map[String, String], - isExtended: Boolean): LogicalPlan + isExtended: Boolean): RunnableCommand /** * Create a [[LogicalPlan]] for CLEAR CACHE. @@ -213,7 +221,17 @@ trait SparkInternals extends Logging { * Create a new INSERT plan that has a LONG count of rows as its output. */ def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], - child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): LogicalPlan + child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable + + /** + * Return true if overwrite is enabled in the insert plan else false. + */ + def getOverwriteOption(insert: InsertIntoTable): Boolean + + /** + * Return true if "ifNotExists" is enabled in the insert plan else false. + */ + def getIfNotExistsOption(insert: InsertIntoTable): Boolean /** * Create an expression for GROUPING SETS. @@ -231,6 +249,9 @@ trait SparkInternals extends Logging { */ def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias + /** Create an alias. */ + def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression]): Alias + /** * Create a plan for column aliases in a table/sub-query/... * Not supported by older Spark versions. @@ -314,6 +335,14 @@ trait SparkInternals extends Logging { expectedOutputAttributes: Option[Seq[AttributeReference]], catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation + /** + * Create a new [[RowDataSourceScanExec]] with the given parameters. + */ + def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], + filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], + metadata: Map[String, String], relation: BaseRelation, + tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec + /** * Create a new CatalogDatabase given the parameters. Newer Spark releases require a URI * for locationUri so the given string will be converted to URI for those Spark versions. @@ -394,6 +423,16 @@ trait SparkInternals extends Logging { */ def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange + /** + * Return true if the given plan is a ShuffleExchange. + */ + def isShuffleExchange(plan: SparkPlan): Boolean + + /** + * Get the classOf ShuffleExchange operator. + */ + def classOfShuffleExchange(): Class[_] + /** * Get the [[Statistics]] for a given [[LogicalPlan]]. */ @@ -437,6 +476,11 @@ trait SparkInternals extends Logging { * Create a new SnappyData extended CacheManager to clear cached plans on cached data changes. */ def newCacheManager(): CacheManager + + /** + * Create a new SQLConf entry with registration actions for the given key. + */ + def buildConf(key: String): ConfigBuilder } /** diff --git a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala index 7126b11a65..96d6ea509c 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala @@ -34,8 +34,10 @@ import com.esotericsoftware.kryo.io.{Input, Output} import com.esotericsoftware.kryo.{Kryo, KryoSerializable} import com.gemstone.gemfire.internal.shared.BufferAllocator import com.gemstone.gemfire.internal.shared.unsafe.UnsafeHolder +import com.pivotal.gemfirexd.Attribute.{PASSWORD_ATTR, USERNAME_ATTR} import com.pivotal.gemfirexd.internal.engine.Misc import com.pivotal.gemfirexd.internal.engine.jdbc.GemFireXDRuntimeException +import io.snappydata.Constant.{SPARK_STORE_PREFIX, STORE_PROPERTY_PREFIX} import io.snappydata.{Constant, ToolsCallback} import org.apache.commons.math3.distribution.NormalDistribution import org.eclipse.collections.impl.map.mutable.UnifiedMap @@ -64,9 +66,9 @@ import org.apache.spark.sql.sources.{CastLongTime, JdbcExtendedUtils} import org.apache.spark.sql.types._ import org.apache.spark.storage.{BlockId, BlockManager, BlockManagerId} import org.apache.spark.unsafe.Platform +import org.apache.spark.util.AccumulatorV2 import org.apache.spark.util.collection.BitSet import org.apache.spark.util.io.ChunkedByteBuffer -import org.apache.spark.util.{AccumulatorV2, MutableURLClassLoader} object Utils extends SparkSupport { @@ -671,6 +673,16 @@ object Utils extends SparkSupport { def getInternalSparkConf(sc: SparkContext): SparkConf = sc.conf + def getUserPassword(sparkConf: SparkConf): Option[(String, String)] = { + sparkConf.getOption(SPARK_STORE_PREFIX + USERNAME_ATTR) match { + case None => sparkConf.getOption(STORE_PROPERTY_PREFIX + USERNAME_ATTR) match { + case None => None + case Some(user) => Some(user -> sparkConf.get(STORE_PROPERTY_PREFIX + PASSWORD_ATTR, "")) + } + case Some(user) => Some(user -> sparkConf.get(SPARK_STORE_PREFIX + PASSWORD_ATTR, "")) + } + } + def newClusterSparkConf(): SparkConf = newClusterSparkConf(Misc.getMemStoreBooting.getBootProperties) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 1af3db168d..c3f5a7ff44 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -45,7 +45,7 @@ import org.apache.spark.sql.catalyst.plans.QueryPlan import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.columnar.InMemoryTableScanExec -import org.apache.spark.sql.execution.command.{DescribeTableCommand, DropTableCommand, RunnableCommand, ShowTablesCommand} +import org.apache.spark.sql.execution.command.{DropTableCommand, RunnableCommand, ShowTablesCommand} import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.internal.BypassRowLevelSecurity import org.apache.spark.sql.sources.DestroyRelation @@ -473,9 +473,8 @@ case class ShowViewsCommand(session: SnappySession, schemaOpt: Option[String], /** * This extends Spark's describe to add support for CHAR and VARCHAR types. */ -class DescribeSnappyTableCommand(table: TableIdentifier, - partitionSpec: TablePartitionSpec, isExtended: Boolean, isFormatted: Boolean) - extends DescribeTableCommand(table, partitionSpec, isExtended, isFormatted) { +case class DescribeSnappyTableCommand(table: TableIdentifier, partitionSpec: TablePartitionSpec, + isExtended: Boolean) extends RunnableCommand with SparkSupport { override def run(sparkSession: SparkSession): Seq[Row] = { val catalog = sparkSession.asInstanceOf[SnappySession].sessionCatalog @@ -483,7 +482,7 @@ class DescribeSnappyTableCommand(table: TableIdentifier, // set the flag to return CharStringType if present catalog.convertCharTypesInMetadata = true try { - super.run(sparkSession) + internals.newDescribeTableCommand(table, partitionSpec, isExtended).run(sparkSession) } finally { catalog.convertCharTypesInMetadata = false } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index ec368e6bae..5fff82c7bf 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -410,7 +410,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], // The child could change `copyResult` to true, but we had already // consumed all the rows, so `copyResult` should be reset to `false`. - ctx.copyResult = false + internals.resetCopyResult(ctx) // initialization of min/max for integral keys val initMinMaxVars = mapAccessor.integralKeys.zipWithIndex.map { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala index 863240fe12..2afbac31c7 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala @@ -17,7 +17,6 @@ package org.apache.spark.sql.execution.row import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap import org.apache.spark.sql.execution.datasources.jdbc.JDBCPartition @@ -28,7 +27,7 @@ import org.apache.spark.sql.types.StructType import org.apache.spark.{Logging, Partition, SparkContext} final class DefaultSource extends ExternalSchemaRelationProvider with SchemaRelationProvider - with CreatableRelationProvider with DataSourceRegister with Logging { + with CreatableRelationProvider with DataSourceRegister with Logging with SparkSupport { override def shortName(): String = SnappyParserConsts.ROW_SOURCE @@ -98,7 +97,7 @@ final class DefaultSource extends ExternalSchemaRelationProvider with SchemaRela ExternalStoreUtils.getAndSetTotalPartitions(session, parameters, forManagedTable = true, forColumnTable = false) StoreUtils.getAndSetPartitioningAndKeyColumns(session, schema = null, parameters) - val tableOptions = new CaseInsensitiveMap(parameters.toMap) + val tableOptions = internals.newCaseInsensitiveMap(parameters.toMap) val ddlExtension = StoreUtils.ddlExtensionString(parameters, isRowTable = true, isShadowTable = false) val schemaExtension = s"$schemaString $ddlExtension" diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatRelation.scala index 03209d5c5a..36a6876c7e 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatRelation.scala @@ -26,7 +26,6 @@ import org.apache.spark.Partition import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.expressions.{And, Ascending, Attribute, Descending, EqualTo, Expression, In, SortDirection} -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{InternalRow, analysis} import org.apache.spark.sql.execution.columnar.impl.SmartConnectorRowRDD import org.apache.spark.sql.execution.columnar.{ConnectionType, ExternalStoreUtils} @@ -215,7 +214,7 @@ class RowFormatRelation( indexColumns: Map[String, Option[SortDirection]], options: Map[String, String]): String = { - val parameters = new CaseInsensitiveMap(options) + val parameters = internals.newCaseInsensitiveMap(options) val columns = indexColumns.tail.foldLeft[String]( getColumnStr(indexColumns.head))((cumulative, colsWithDirection) => cumulative + "," + getColumnStr(colsWithDirection)) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala b/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala index 4b87d2aa90..7120f0ae20 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/sources/StoreDataSourceStrategy.scala @@ -40,10 +40,9 @@ import scala.collection.mutable import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, AttributeSet, EmptyRow, Expression, NamedExpression, ParamLiteral, PredicateHelper, TokenLiteral} import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, UnaryNode, Filter => LFilter} -import org.apache.spark.sql.catalyst.plans.physical.UnknownPartitioning import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow, analysis, expressions} +import org.apache.spark.sql.execution.PartitionedDataSourceScan import org.apache.spark.sql.execution.datasources.LogicalRelation -import org.apache.spark.sql.execution.{PartitionedDataSourceScan, RowDataSourceScanExec} import org.apache.spark.sql.sources.{Filter, PrunedUnsafeFilteredScan} import org.apache.spark.sql.{AnalysisException, SnappySession, SparkSession, SparkSupport, Strategy, execution, sources} @@ -52,7 +51,7 @@ import org.apache.spark.sql.{AnalysisException, SnappySession, SparkSession, Spa * Mostly this is a copy of DataSourceStrategy of Spark. But it takes care of the underlying * partitions of the datasource. */ -private[sql] object StoreDataSourceStrategy extends Strategy { +private[sql] object StoreDataSourceStrategy extends Strategy with SparkSupport { def apply(plan: LogicalPlan): Seq[execution.SparkPlan] = plan match { case PhysicalScan(projects, filters, scan) => scan match { @@ -158,10 +157,15 @@ private[sql] object StoreDataSourceStrategy extends Strategy { }) } else Nil + var pushedFilters: Seq[Filter] = Nil + var handledFilters: Seq[Filter] = Nil + def getMetadata: Map[String, String] = if (numBuckets > 0) { Map.empty[String, String] } else { - val pushedFilters = candidatePredicates.flatMap(translateToFilter) + pushedFilters = candidatePredicates.flatMap(translateToFilter) + handledFilters = (candidatePredicates.toSet -- unhandledPredicates.toSet) + .flatMap(translateToFilter).toSeq val pairs = mutable.ArrayBuffer.empty[(String, String)] if (pushedFilters.nonEmpty) { pairs += ("PushedFilters" -> @@ -200,11 +204,11 @@ private[sql] object StoreDataSourceStrategy extends Strategy { (requestedColumns, candidatePredicates) ) case baseRelation => - RowDataSourceScanExec( - mappedProjects, + val metadata = getMetadata + internals.newRowDataSourceScanExec( + mappedProjects, mappedProjects.indices, pushedFilters, handledFilters, scanBuilder(requestedColumns, candidatePredicates)._1.asInstanceOf[RDD[InternalRow]], - baseRelation, UnknownPartitioning(0), getMetadata, - relation.catalogTable.map(_.identifier)) + metadata, baseRelation, relation.catalogTable.map(_.identifier)) } filterCondition.map(execution.FilterExec(_, scan)).getOrElse(scan) } else { @@ -228,11 +232,11 @@ private[sql] object StoreDataSourceStrategy extends Strategy { (requestedColumns, candidatePredicates) ) case baseRelation => - RowDataSourceScanExec( - mappedProjects, + val metadata = getMetadata + internals.newRowDataSourceScanExec( + mappedProjects, mappedProjects.indices, pushedFilters, handledFilters, scanBuilder(requestedColumns, candidatePredicates)._1.asInstanceOf[RDD[InternalRow]], - baseRelation, UnknownPartitioning(0), getMetadata, - relation.catalogTable.map(_.identifier)) + metadata, baseRelation, relation.catalogTable.map(_.identifier)) } if (projectOnlyAttributes || allDeterministic || filterCondition.isEmpty) { execution.ProjectExec(projects, @@ -387,14 +391,14 @@ object PhysicalScan extends PredicateHelper with SparkSupport { private def substitute(aliases: Map[Attribute, Expression])(expr: Expression): Expression = { expr.transform { - case a@Alias(ref: AttributeReference, name) => - aliases.get(ref) - .map(Alias(_, name)(a.exprId, a.qualifier, isGenerated = a.isGenerated)) - .getOrElse(a) - - case a: AttributeReference => - aliases.get(a) - .map(Alias(_, a.name)(a.exprId, a.qualifier, isGenerated = a.isGenerated)).getOrElse(a) + case a@Alias(ref: AttributeReference, name) => aliases.get(ref) match { + case None => a + case Some(e) => internals.newAlias(e, name, Some(a)) + } + case a: AttributeReference => aliases.get(a) match { + case None => a + case Some(e) => internals.newAlias(e, a.name, Some(a)) + } } } } diff --git a/core/src/main/scala/org/apache/spark/sql/hive/HiveClientUtil.scala b/core/src/main/scala/org/apache/spark/sql/hive/HiveClientUtil.scala index ed7f241328..db088f9663 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/HiveClientUtil.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/HiveClientUtil.scala @@ -21,10 +21,10 @@ import com.pivotal.gemfirexd.Attribute.{PASSWORD_ATTR, USERNAME_ATTR} import com.pivotal.gemfirexd.internal.engine.Misc import com.pivotal.gemfirexd.internal.impl.sql.catalog.GfxdDataDictionary import io.snappydata.Constant -import io.snappydata.Constant.{SPARK_STORE_PREFIX, STORE_PROPERTY_PREFIX} import io.snappydata.impl.SnappyHiveConf import org.apache.hadoop.hive.conf.HiveConf.ConfVars +import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.SparkPlan import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.hive.execution.HiveTableScanExec @@ -52,21 +52,18 @@ object HiveClientUtil extends Logging { val metadataConf = new SnappyHiveConf // make a copy of SparkConf since it is to be updated later val sparkConf = conf.clone() - var user = sparkConf.getOption(SPARK_STORE_PREFIX + USERNAME_ATTR) - var password = sparkConf.getOption(SPARK_STORE_PREFIX + PASSWORD_ATTR) - if (user.isEmpty) { - user = sparkConf.getOption(STORE_PROPERTY_PREFIX + USERNAME_ATTR) - password = sparkConf.getOption(STORE_PROPERTY_PREFIX + PASSWORD_ATTR) - } - // check store boot properties - if (user.isEmpty) { - val bootProperties = Misc.getMemStore.getBootProperties - bootProperties.get(USERNAME_ATTR).asInstanceOf[String] match { - case null => - case u => - user = Some(u) - password = Option(bootProperties.get(PASSWORD_ATTR).asInstanceOf[String]) - } + val (user, password) = Utils.getUserPassword(sparkConf) match { + case None => + // check store boot properties + val bootProperties = Misc.getMemStore.getBootProperties + bootProperties.get(USERNAME_ATTR) match { + case null => None -> None + case u => bootProperties.get(PASSWORD_ATTR) match { + case null => Some(u) -> Some("") + case p => Some(u) -> Some(p) + } + } + case Some((u, p)) => Some(u) -> Some(p) } var logURL = dbURL val secureDbURL = if (user.isDefined && password.isDefined) { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index a9b653000d..42a48be2d2 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -82,7 +82,8 @@ object ColumnTableBulkOps extends SparkSupport { putKeys.exists(k => analyzer.resolver(a.name, k))), updateSubQuery) val insertChild = sparkSession.asInstanceOf[SnappySession].cachePutInto( - subQuery.statistics.sizeInBytes <= cacheSize, updateSubQuery, mutable.table) match { + internals.getStatistics(subQuery).sizeInBytes <= cacheSize, + updateSubQuery, mutable.table) match { case None => subQuery case Some(newUpdateSubQuery) => if (updateSubQuery ne newUpdateSubQuery) { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index 1e659d6d4e..ae272083eb 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -50,7 +50,6 @@ import org.apache.spark.sql.execution.command.{DDLUtils, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{EnsureRequirements, ReuseExchange} import org.apache.spark.sql.execution.sources.{PhysicalScan, StoreDataSourceStrategy} -import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources._ import org.apache.spark.sql.store.StoreUtils @@ -933,7 +932,7 @@ class SQLConfigEntry private(private[sql] val entry: ConfigEntry[_]) { override def toString: String = entry.toString } -object SQLConfigEntry { +object SQLConfigEntry extends SparkSupport { private def handleDefault[T](entry: TypedConfigBuilder[T], defaultValue: Option[T]): SQLConfigEntry = defaultValue match { @@ -963,16 +962,16 @@ object SQLConfigEntry { def apply[T: ClassTag](key: String, doc: String, defaultValue: Option[T], isPublic: Boolean = true): SQLConfigEntry = { classTag[T] match { - case ClassTag.Int => handleDefault[Int](SQLConfigBuilder(key) + case ClassTag.Int => handleDefault[Int](internals.buildConf(key) .doc(doc).intConf, defaultValue.asInstanceOf[Option[Int]]) - case ClassTag.Long => handleDefault[Long](SQLConfigBuilder(key) + case ClassTag.Long => handleDefault[Long](internals.buildConf(key) .doc(doc).longConf, defaultValue.asInstanceOf[Option[Long]]) - case ClassTag.Double => handleDefault[Double](SQLConfigBuilder(key) + case ClassTag.Double => handleDefault[Double](internals.buildConf(key) .doc(doc).doubleConf, defaultValue.asInstanceOf[Option[Double]]) - case ClassTag.Boolean => handleDefault[Boolean](SQLConfigBuilder(key) + case ClassTag.Boolean => handleDefault[Boolean](internals.buildConf(key) .doc(doc).booleanConf, defaultValue.asInstanceOf[Option[Boolean]]) case c if c.runtimeClass == classOf[String] => - handleDefault[String](SQLConfigBuilder(key).doc(doc).stringConf, + handleDefault[String](internals.buildConf(key).doc(doc).stringConf, defaultValue.asInstanceOf[Option[String]]) case c => throw new IllegalArgumentException( s"Unknown type of configuration key: $c") diff --git a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala index f2742332ff..324c52c3a7 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala @@ -37,14 +37,15 @@ import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.execution.row.RowFormatRelation import org.apache.spark.sql.internal.SnappySessionCatalog import org.apache.spark.sql.sources.Entity.{INDEX, INDEX_RELATION, TABLE} -import org.apache.spark.sql.{AnalysisException, SnappySession} +import org.apache.spark.sql.{AnalysisException, SnappySession, SparkSupport} -object RuleUtils extends PredicateHelper { +object RuleUtils extends PredicateHelper with SparkSupport { private def getIndex(catalog: SnappySessionCatalog, table: CatalogTable): Option[INDEX] = { val relation = catalog.resolveRelation(table.identifier) relation match { - case LogicalRelation(_: IndexColumnFormatRelation, _, _) => Some(relation) + case lr: LogicalRelation if lr.relation.isInstanceOf[IndexColumnFormatRelation] => + Some(relation) case _ => None } } @@ -53,10 +54,10 @@ object RuleUtils extends PredicateHelper { table: LogicalPlan): Seq[(LogicalPlan, Seq[LogicalPlan])] = { val catalog = snappySession.sessionCatalog table.collect { - case l@LogicalRelation(p: PartitionedDataSourceScan, _, _) => + case lr: LogicalRelation if lr.relation.isInstanceOf[PartitionedDataSourceScan] => val (schemaName, table) = JdbcExtendedUtils.getTableWithSchema( - p.table, null, Some(snappySession)) - (l.asInstanceOf[LogicalPlan], catalog.externalCatalog.getDependentsFromProperties( + lr.relation.asInstanceOf[PartitionedDataSourceScan].table, null, Some(snappySession)) + (lr.asInstanceOf[LogicalPlan], catalog.externalCatalog.getDependentsFromProperties( schemaName, table, includeTypes = CatalogObjectType.Index :: Nil) .flatMap(getIndex(catalog, _))) } @@ -87,7 +88,7 @@ object RuleUtils extends PredicateHelper { case expressions.EqualNullSafe(l, r) if canEvaluate(l, right) && canEvaluate(r, left) => Some((Coalesce(Seq(r, Literal.default(r.dataType))), Coalesce(Seq(l, Literal.default(l.dataType))))) - case other => None + case _ => None } } @@ -96,8 +97,8 @@ object RuleUtils extends PredicateHelper { replicatedReachablePaths: Seq[List[LogicalPlan]]): Boolean = { if (source.isEmpty) { - return false - } else if (source.exists(_ == target)) { + false + } else if (source.contains(target)) { true } else if (replicatedReachablePaths.isEmpty) { false @@ -109,10 +110,10 @@ object RuleUtils extends PredicateHelper { case ((otherKey, current), plan) => plan match { case l :: r :: o if o.isEmpty & (l == rep1) => - ((otherKey ++ Some(r)), current.filterNot(_ == plan)) + (otherKey ++ Some(r), current.filterNot(_ == plan)) case l :: r :: o if o.isEmpty & (r == rep1) => - ((otherKey ++ Some(l)), current.filterNot(_ == plan)) - case _ => ((otherKey, current)) + (otherKey ++ Some(l), current.filterNot(_ == plan)) + case _ => (otherKey, current) } } @@ -124,7 +125,7 @@ object RuleUtils extends PredicateHelper { } } - protected[sql] def applyDefaultAction[A](entity: (PartialPlan, A), withFilters: Boolean) + private[sql] def applyDefaultAction[A](entity: (PartialPlan, A), withFilters: Boolean) (implicit snappySession: SnappySession, addToDefault: (PartialPlan, A) => PartialPlan): PartialPlan = entity match { // handles replicated & non-colocated logical plan @@ -177,7 +178,7 @@ object RuleUtils extends PredicateHelper { addToDefault(newPlan, replacement.asInstanceOf[A]) } - protected[sql] def createJoin(curPlan: LogicalPlan, + private[sql] def createJoin(curPlan: LogicalPlan, planToAdd: LogicalPlan, toJoinWith: Seq[Expression]) = if (curPlan == null) { planToAdd } else { @@ -186,18 +187,18 @@ object RuleUtils extends PredicateHelper { Join(curPlan, planToAdd, Inner, toJoinWith.reduceLeftOption(expressions.And)) } - protected[sql] def partitionBy(allColumns: AttributeSet, expressions: Seq[Expression]): + private[sql] def partitionBy(allColumns: AttributeSet, expressions: Seq[Expression]): (Seq[Expression], Seq[Expression]) = expressions.partition(e => e.references.subsetOf(allColumns) && !SubqueryExpression.hasCorrelatedSubquery(e)) - protected[sql] def returnPlan(partial: PartialPlan) = { + private[sql] def returnPlan(partial: PartialPlan) = { val input = if (partial.curPlan == null) partial.input else Seq(partial.curPlan) ++ partial.input CompletePlan(ReorderJoin.createOrderedJoin(input.map((_, Inner)), partial.conditions), partial.replaced ++ partial.input.map(t => Replacement(t, t))) } - protected[sql] def chooseIndexForFilter(child: LogicalPlan, conditions: Seq[Expression]) + private[sql] def chooseIndexForFilter(child: LogicalPlan, conditions: Seq[Expression]) (implicit snappySession: SnappySession) = { val columnGroups = conditions.collect { @@ -214,24 +215,27 @@ object RuleUtils extends PredicateHelper { cols.collect { case a if a.nonEmpty => a.get }) } + var ir: IndexColumnFormatRelation = null val satisfyingPartitionColumns = for { (table, indexes) <- RuleUtils.fetchIndexes(snappySession, child) filterCols <- columnGroups.collectFirst { case (t, predicates) if predicates.nonEmpty => table match { - case LogicalRelation(b: ColumnFormatRelation, _, _) if b.table.indexOf(t) > 0 => + case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] && + lr.relation.asInstanceOf[ColumnFormatRelation].table.indexOf(t) > 0 => predicates - case SubqueryAlias(alias, _, _) if alias.equals(t) => + case s: SubqueryAlias if s.alias.equals(t) => predicates case _ => Nil } } if filterCols.nonEmpty matchedIndexes = indexes.collect { - case idx@LogicalRelation(ir: IndexColumnFormatRelation, _, _) - if ir.partitionColumns.length <= filterCols.length & - ir.partitionColumns.forall(p => filterCols.exists(f => - f.name.equalsIgnoreCase(p))) => + case idx: LogicalRelation if idx.relation.isInstanceOf[IndexColumnFormatRelation] && + (ir = idx.relation.asInstanceOf[IndexColumnFormatRelation]).isInstanceOf[Unit] && + ir.partitionColumns.length <= filterCols.length & + ir.partitionColumns.forall(p => filterCols.exists(f => + f.name.equalsIgnoreCase(p))) => (ir.partitionColumns.length, idx.asInstanceOf[LogicalPlan]) } if matchedIndexes.nonEmpty @@ -243,7 +247,7 @@ object RuleUtils extends PredicateHelper { None } else { Some(satisfyingPartitionColumns.maxBy { - r => r.index.statistics.sizeInBytes + r => internals.getStatistics(r.index).sizeInBytes }) } } @@ -274,10 +278,11 @@ object Entity { def unwrapBaseColumnRelation( plan: LogicalPlan): Option[BaseColumnFormatRelation] = plan collectFirst { - case LogicalRelation(relation: BaseColumnFormatRelation, _, _) => - relation - case SubqueryAlias(alias, LogicalRelation(relation: BaseColumnFormatRelation, _, _), _) => - relation + case lr: LogicalRelation if lr.relation.isInstanceOf[BaseColumnFormatRelation] => + lr.relation.asInstanceOf[BaseColumnFormatRelation] + case s: SubqueryAlias if s.child.isInstanceOf[LogicalRelation] && + s.child.asInstanceOf[LogicalRelation].relation.isInstanceOf[BaseColumnFormatRelation] => + s.child.asInstanceOf[LogicalRelation].relation.asInstanceOf[BaseColumnFormatRelation] } private def findR(p: Any) = p match { @@ -309,7 +314,7 @@ object Entity { } } -object HasColocatedEntities { +object HasColocatedEntities extends SparkSupport { type ReturnType = ( Seq[(INDEX_RELATION, INDEX_RELATION)], Seq[ReplacementSet] @@ -354,7 +359,7 @@ object HasColocatedEntities { // assert(leftRightEntityMapping.size <= 1) val mappings = leftRightEntityMapping.flatMap { mappedElements => - val (leftTable, rightTable) = mappedElements(0) // first pairing is always (table, table) + val (leftTable, rightTable) = mappedElements.head // first pairing is always (table, table) for { (leftPlan, rightPlan) <- mappedElements leftRelation = Entity.unwrapBaseColumnRelation(leftPlan) if leftRelation.nonEmpty @@ -363,13 +368,13 @@ object HasColocatedEntities { } yield { val leftReplacement = leftTable match { case _: LogicalRelation => Replacement(leftTable, leftPlan) - case subquery@SubqueryAlias(alias, _, v) => - Replacement(subquery, SubqueryAlias(alias, leftPlan, None)) + case subquery: SubqueryAlias => + Replacement(subquery, internals.newSubqueryAlias(subquery.alias, leftPlan)) } val rightReplacement = rightTable match { case _: LogicalRelation => Replacement(rightTable, rightPlan) - case subquery@SubqueryAlias(alias, _, _) => - Replacement(subquery, SubqueryAlias(alias, rightPlan, None)) + case subquery: SubqueryAlias => + Replacement(subquery, internals.newSubqueryAlias(subquery.alias, rightPlan)) } ((leftRelation.get, rightRelation.get), ReplacementSet(ArrayBuffer(leftReplacement, rightReplacement), Nil)) @@ -389,38 +394,42 @@ object HasColocatedEntities { * Table to table or Table to index replacement. */ case class Replacement(table: TABLE, index: INDEX, isPartitioned: Boolean = true) - extends PredicateHelper { + extends PredicateHelper with SparkSupport { def isReplacable: Boolean = table != index - val indexAttributes = index.output.collect { case ar: AttributeReference => ar } + private[sql] val indexAttributes = index.output.collect { case ar: AttributeReference => ar } - val tableToIndexAttributeMap = AttributeMap(table.output.map { + private[sql] val tableToIndexAttributeMap = AttributeMap(table.output.map { case f: AttributeReference => val newA = indexAttributes.find(_.name.equalsIgnoreCase(f.name)). getOrElse(throw new IllegalStateException( - s"Field $f not found in ${indexAttributes}")) + s"Field $f not found in $indexAttributes")) (f, newA) - case a => throw new AssertionError(s"UnHandled Attribute ${a} in table" + + case a => throw new IllegalStateException(s"Unhandled Attribute $a in table" + s" ${table.output.mkString(",")}") }) - private var _replacedEntity: LogicalPlan = null + private var _replacedEntity: LogicalPlan = _ def numPartitioningCols: Int = index match { - case LogicalRelation(b: BaseColumnFormatRelation, _, _) => b.partitionColumns.length + case lr: LogicalRelation if lr.relation.isInstanceOf[BaseColumnFormatRelation] => + lr.relation.asInstanceOf[BaseColumnFormatRelation].partitionColumns.length case _ => 0 } override def toString: String = { "" + (table match { - case LogicalRelation(b: BaseColumnFormatRelation, _, _) => b.table + case lr: LogicalRelation if lr.relation.isInstanceOf[BaseColumnFormatRelation] => + lr.relation.asInstanceOf[BaseColumnFormatRelation].table case _ => table.toString() }) + " ----> " + (index match { - case LogicalRelation(b: BaseColumnFormatRelation, _, _) => b.table - case LogicalRelation(r: RowFormatRelation, _, _) => r.table + case lr: LogicalRelation if lr.relation.isInstanceOf[BaseColumnFormatRelation] => + lr.relation.asInstanceOf[BaseColumnFormatRelation].table + case lr: LogicalRelation if lr.relation.isInstanceOf[RowFormatRelation] => + lr.relation.asInstanceOf[RowFormatRelation].table case _ => index.toString() }) } @@ -428,7 +437,7 @@ case class Replacement(table: TABLE, index: INDEX, isPartitioned: Boolean = true def mappedConditions(conditions: Seq[Expression]): Seq[Expression] = conditions.map(Entity.replaceAttribute(_, tableToIndexAttributeMap)) - protected[sources] def replacedPlan(conditions: Seq[Expression]): LogicalPlan = { + private[sources] def replacedPlan(conditions: Seq[Expression]): LogicalPlan = { if (_replacedEntity == null) { val tableConditions = conditions.filter(canEvaluate(_, table)) _replacedEntity = if (tableConditions.isEmpty) { @@ -441,8 +450,7 @@ case class Replacement(table: TABLE, index: INDEX, isPartitioned: Boolean = true } def estimatedSize(conditions: Seq[Expression]): BigInt = - replacedPlan(conditions).statistics.sizeInBytes - + internals.getStatistics(replacedPlan(conditions)).sizeInBytes } /** @@ -456,16 +464,16 @@ case class Replacement(table: TABLE, index: INDEX, isPartitioned: Boolean = true */ case class ReplacementSet(chain: ArrayBuffer[Replacement], conditions: Seq[Expression]) - extends Ordered[ReplacementSet] with PredicateHelper { + extends Ordered[ReplacementSet] with PredicateHelper with SparkSupport { lazy val bestJoinOrder: Seq[Replacement] = { val (part, rep) = chain.partition(_.isPartitioned) // pick minimum number of replicated tables required to fulfill colocated join order. val feasibleJoinPlan = Seq.range(0, chain.length - part.length + 1).flatMap(elem => rep.combinations(elem).map(part ++ _). - flatMap(_.permutations).filter(hasJoinConditions)).filter(_.nonEmpty) + flatMap(_.permutations).filter(hasJoinConditions)).filter(_.nonEmpty) - if(feasibleJoinPlan.isEmpty) { + if (feasibleJoinPlan.isEmpty) { Nil } else { val all = feasibleJoinPlan.sortBy { jo => @@ -476,9 +484,9 @@ case class ReplacementSet(chain: ArrayBuffer[Replacement], } } - lazy val bestPlanEstimatedSize = estimateSize(bestJoinOrder) + private[sql] lazy val bestPlanEstimatedSize = estimateSize(bestJoinOrder) - lazy val bestJoinOrderConditions = joinConditions(bestJoinOrder) + private[sql] lazy val bestJoinOrderConditions = joinConditions(bestJoinOrder) private def joinConditions(joinOrder: Seq[Replacement]) = { val refs = joinOrder.map(_.table.outputSet).reduce(_ ++ _) @@ -495,8 +503,8 @@ case class ReplacementSet(chain: ArrayBuffer[Replacement], } val sz = joinOrder.map(_.replacedPlan(conditions)).zipWithIndex.foldLeft(BigInt(0)) { - case (tot, (table, depth)) if depth == 2 => tot + table.statistics.sizeInBytes - case (tot, (table, depth)) => tot + (table.statistics.sizeInBytes * depth) + case (tot, (table, depth)) if depth == 2 => tot + internals.getStatistics(table).sizeInBytes + case (tot, (table, depth)) => tot + (internals.getStatistics(table).sizeInBytes * depth) } sz @@ -558,7 +566,7 @@ object ExtractFiltersAndInnerJoins extends PredicateHelper { val (plans, conditions) = flattenJoin(left) (plans ++ Seq(right), conditions ++ cond.toSeq) - case plans.logical.Filter(filterCondition, j@Join(left, right, Inner, joinCondition)) => + case plans.logical.Filter(filterCondition, j@Join(_, _, Inner, _)) => val (plans, conditions) = flattenJoin(j) (plans, conditions ++ splitConjunctivePredicates(filterCondition)) @@ -568,11 +576,11 @@ object ExtractFiltersAndInnerJoins extends PredicateHelper { def unapply(plan: LogicalPlan): // tables, joinConditions, filterConditions Option[(Seq[LogicalPlan], Seq[Expression])] = plan match { - case f@plans.logical.Filter(filterCondition, j@Join(_, _, Inner, _)) => + case f@plans.logical.Filter(_, Join(_, _, Inner, _)) => Some(flattenJoin(f)) case j@Join(_, _, Inner, _) => Some(flattenJoin(j)) - case f@plans.logical.Filter(filterCondition, child) => + case plans.logical.Filter(filterCondition, child) => Some(Seq(child), splitConjunctivePredicates(filterCondition)) case _ => None } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala index 4b2200b870..bb0aafcc31 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala @@ -18,10 +18,11 @@ package org.apache.spark.sql.sources import scala.collection.JavaConverters._ +import scala.collection.mutable +import scala.collection.mutable.ArrayBuffer import io.snappydata.QueryHint._ -import org.apache.spark.sql.SnappySession import org.apache.spark.sql.catalyst.expressions.{AttributeReference, Expression, PredicateHelper} import org.apache.spark.sql.catalyst.optimizer.ReorderJoin import org.apache.spark.sql.catalyst.plans.Inner @@ -32,14 +33,14 @@ import org.apache.spark.sql.execution.PartitionedDataSourceScan import org.apache.spark.sql.execution.columnar.impl.{BaseColumnFormatRelation, ColumnFormatRelation, IndexColumnFormatRelation} import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.sources.Entity.{INDEX_RELATION, TABLE} -import scala.collection.mutable -import scala.collection.mutable.ArrayBuffer +import org.apache.spark.sql.{SnappySession, SparkSupport} /** * Replace table with index hint */ -case class ResolveQueryHints(snappySession: SnappySession) extends Rule[LogicalPlan] { +case class ResolveQueryHints(snappySession: SnappySession) + extends Rule[LogicalPlan] with SparkSupport { private def catalog = snappySession.sessionState.catalog @@ -54,13 +55,14 @@ case class ResolveQueryHints(snappySession: SnappySession) extends Rule[LogicalP } plan transformUp { - case table@LogicalRelation(colRelation: ColumnFormatRelation, _, _) => - explicitIndexHint.getOrElse(colRelation.table, Some(table)).get - case subQuery@SubqueryAlias(alias, lr: LogicalRelation, _) - if !lr.relation.isInstanceOf[IndexColumnFormatRelation] => - explicitIndexHint.get(alias) match { - case Some(Some(index)) => SubqueryAlias(alias, index, None) - case _ => subQuery + case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] => + explicitIndexHint.getOrElse(lr.relation.asInstanceOf[ColumnFormatRelation].table, + Some(lr)).get + case s: SubqueryAlias if s.child.isInstanceOf[LogicalRelation] && + s.child.asInstanceOf[LogicalRelation].relation.isInstanceOf[IndexColumnFormatRelation] => + explicitIndexHint.get(s.alias) match { + case Some(Some(index)) => internals.newSubqueryAlias(s.alias, index) + case _ => s } } transformUp { case q: LogicalPlan => @@ -110,10 +112,6 @@ case class ResolveQueryHints(snappySession: SnappySession) extends Rule[LogicalP case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[LogicalPlan] with PredicateHelper { - lazy val catalog = snappySession.sessionState.catalog - - lazy val analyzer = snappySession.sessionState.analyzer - private def createColocatedJoins(input: Seq[LogicalPlan], conditions: Seq[Expression], visited: mutable.HashSet[LogicalPlan]): CompletePlan = { @@ -137,8 +135,8 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ val (partitioned, replicates, others) = ((new TableList, new TableList, new TableList) /: input) { case (splitted@(part, rep, _), - l@LogicalRelation(b: PartitionedDataSourceScan, _, _)) => - if (b.partitionColumns.nonEmpty) { + l: LogicalRelation) if l.relation.isInstanceOf[PartitionedDataSourceScan] => + if (l.relation.asInstanceOf[PartitionedDataSourceScan].partitionColumns.nonEmpty) { part += l } else { rep += l @@ -189,7 +187,8 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ val nonColocatedWithFilters = ncf.map(r => RuleUtils.chooseIndexForFilter(r, conditions) .getOrElse(Replacement(r, r))) - val replicatesWithColocated = ReplacementSet(replicates.map(r => Replacement(r, r, false)) ++ + val replicatesWithColocated = ReplacementSet(replicates.map( + r => Replacement(r, r, isPartitioned = false)) ++ (if (colocationGroups.nonEmpty) colocationGroups.head.chain else Nil), conditions) val replicatesWithNonColocatedHavingFilters = nonColocatedWithFilters.map(nc => @@ -223,7 +222,7 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ finalJoinOrder ++= nonColocated.map(r => Replacement(r, r)) } else { - for (i <- 0 to smallerNC) { + for (_ <- 0 to smallerNC) { // pack NC tables first. } } @@ -317,7 +316,7 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ case l :: r :: o if o.isEmpty & RuleUtils.getJoinKeys(l, r, joinConditions).nonEmpty => List(replicates.toList) - case l :: o if o.isEmpty => + case _ :: o if o.isEmpty => List(replicates.toList) case _ => List(List.empty[Entity.TABLE]) } @@ -508,7 +507,7 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ case f: AttributeReference => val newA = newAttributes.find(_.name.equalsIgnoreCase(f.name)). getOrElse(throw new IllegalStateException( - s"Field $f not found in ${newAttributes}")) + s"Field $f not found in $newAttributes")) newAttributesMap ++= Some((f, newA)) } case _ => @@ -521,7 +520,7 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ case q: LogicalPlan => q transformExpressionsUp { case a: AttributeReference => newAttributesMap.find({ - case (tableA, indexA) => tableA.exprId == a.exprId + case (tableA, _) => tableA.exprId == a.exprId }).map({ case (t, i) => i.withQualifier(t.qualifier) }).getOrElse(a) } } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index 9be7cdceeb..b57f0f0eb7 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -29,38 +29,45 @@ import org.apache.spark.sql.{Strategy, _} /** * Support for DML and other operations on external tables. */ -object StoreStrategy extends Strategy { - def apply(plan: LogicalPlan): Seq[SparkPlan] = plan match { +object StoreStrategy extends Strategy with SparkSupport { + def apply(plan: LogicalPlan): Seq[SparkPlan] = plan match { case p: EncoderPlan[_] => val plan = p.asInstanceOf[EncoderPlan[Any]] EncoderScanExec(plan.rdd.asInstanceOf[RDD[Any]], plan.encoder, plan.isFlat, plan.output) :: Nil - case InsertIntoTable(l@LogicalRelation(p: PlanInsertableRelation, - _, _), part, query, overwrite, false) if part.isEmpty => - val preAction = if (overwrite.enabled) () => p.truncate() else () => () - ExecutePlan(p.getInsertPlan(l, planLater(query)), preAction) :: Nil + case insert: InsertIntoTable if insert.partition.isEmpty && + !internals.getIfNotExistsOption(insert) && insert.table.isInstanceOf[LogicalRelation] && + insert.table.asInstanceOf[LogicalRelation].relation.isInstanceOf[PlanInsertableRelation] => + val l = insert.table.asInstanceOf[LogicalRelation] + val p = l.relation.asInstanceOf[PlanInsertableRelation] + val preAction = if (internals.getOverwriteOption(insert)) () => p.truncate() else () => () + ExecutePlan(p.getInsertPlan(l, planLater(insert.query)), preAction) :: Nil case d@DMLExternalTable(_, storeRelation: LogicalRelation, insertCommand) => ExecutedCommandExec(ExternalTableDMLCmd(storeRelation, insertCommand, d.output)) :: Nil - case PutIntoTable(l@LogicalRelation(p: RowPutRelation, _, _), query) => - ExecutePlan(p.getPutPlan(l, planLater(query))) :: Nil + case PutIntoTable(l: LogicalRelation, query) if l.relation.isInstanceOf[RowPutRelation] => + ExecutePlan(l.relation.asInstanceOf[RowPutRelation].getPutPlan(l, planLater(query))) :: Nil - case PutIntoColumnTable(LogicalRelation(p: BulkPutRelation, _, _), left, right) => - ExecutePlan(p.getPutPlan(planLater(left), planLater(right))) :: Nil + case PutIntoColumnTable(l: LogicalRelation, left, right) + if l.relation.isInstanceOf[BulkPutRelation] => + ExecutePlan(l.relation.asInstanceOf[BulkPutRelation].getPutPlan(planLater(left), + planLater(right))) :: Nil - case Update(l@LogicalRelation(u: MutableRelation, _, _), child, - keyColumns, updateColumns, updateExpressions) => - ExecutePlan(u.getUpdatePlan(l, planLater(child), updateColumns, - updateExpressions, keyColumns)) :: Nil + case Update(l: LogicalRelation, child, keyColumns, updateColumns, updateExpressions) + if l.relation.isInstanceOf[MutableRelation] => + ExecutePlan(l.relation.asInstanceOf[MutableRelation].getUpdatePlan(l, planLater(child), + updateColumns, updateExpressions, keyColumns)) :: Nil - case Delete(l@LogicalRelation(d: MutableRelation, _, _), child, keyColumns) => - ExecutePlan(d.getDeletePlan(l, planLater(child), keyColumns)) :: Nil + case Delete(l: LogicalRelation, child, keyCols) if l.relation.isInstanceOf[MutableRelation] => + ExecutePlan(l.relation.asInstanceOf[MutableRelation].getDeletePlan(l, planLater(child), + keyCols)) :: Nil - case DeleteFromTable(l@LogicalRelation(d: DeletableRelation, _, _), query) => - ExecutePlan(d.getDeletePlan(l, planLater(query), query.output)) :: Nil + case DeleteFromTable(l: LogicalRelation, q) if l.relation.isInstanceOf[DeletableRelation] => + ExecutePlan(l.relation.asInstanceOf[DeletableRelation].getDeletePlan(l, planLater(q), + q.output)) :: Nil case r: RunnableCommand => ExecutedCommandExec(r) :: Nil diff --git a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala index 328406c0bf..c93af5c11a 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala @@ -166,7 +166,7 @@ object CodeGeneration extends Logging with SparkSupport { val encoder = ctx.freshName("encoder") val cursor = ctx.freshName("cursor") val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", - v => s"$v = new $encoderClass();") + v => s"$v = new $encoderClass();", forceInline = true) s""" |final ArrayData $arr = ${ev.value}; |if ($arr instanceof $serArrayClass) { @@ -185,7 +185,7 @@ object CodeGeneration extends Logging with SparkSupport { val encoder = ctx.freshName("encoder") val cursor = ctx.freshName("cursor") val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", - v => s"$v = new $encoderClass();") + v => s"$v = new $encoderClass();", forceInline = true) s""" |final MapData $map = ${ev.value}; |if ($map instanceof $serMapClass) { @@ -203,7 +203,7 @@ object CodeGeneration extends Logging with SparkSupport { val encoder = ctx.freshName("encoder") val cursor = ctx.freshName("cursor") val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", - v => s"$v = new $encoderClass();") + v => s"$v = new $encoderClass();", forceInline = true) s""" |final InternalRow $struct = ${ev.value}; |if ($struct instanceof $serRowClass) { @@ -280,11 +280,16 @@ object CodeGeneration extends Logging with SparkSupport { evaluator.setParentClassLoader(getClass.getClassLoader) evaluator.setDefaultImports(defaultImports) val separator = "\n " - val varDeclarations = ctx.mutableStates.map { case (javaType, name, init) => - s"$javaType $name;$separator${init.replace("this.", "")}" + val mutableStates = internals.getInlinedClassFields(ctx) + val varDeclarations = mutableStates._1.map { case (javaType, name) => + s"$javaType $name;" + } + val initVars = mutableStates._2.map { init => + init.replace("this.", "") } val expression = s""" ${varDeclarations.mkString(separator)} + ${initVars.mkString(separator)} int $rowCount = 0; int $result = 0; while ($rows.hasNext()) { @@ -328,11 +333,16 @@ object CodeGeneration extends Logging with SparkSupport { evaluator.setParentClassLoader(getClass.getClassLoader) evaluator.setDefaultImports(defaultImports) val separator = "\n " - val varDeclarations = ctx.mutableStates.map { case (javaType, name, init) => - s"$javaType $name;$separator${init.replace("this.", "")}" + val mutableStates = internals.getInlinedClassFields(ctx) + val varDeclarations = mutableStates._1.map { case (javaType, name) => + s"$javaType $name;" + } + val initVars = mutableStates._2.map { init => + init.replace("this.", "") } val expression = s""" ${varDeclarations.mkString(separator)} + ${initVars.mkString(separator)} $code stmt.addBatch(); return 1;""" @@ -427,11 +437,16 @@ object CodeGeneration extends Logging with SparkSupport { classOf[MapData].getName, classOf[InternalDataSerializer].getName)) val separator = "\n " - val varDeclarations = ctx.mutableStates.map { case (javaType, name, init) => - s"$javaType $name;$separator${init.replace("this.", "")}" + val mutableStates = internals.getInlinedClassFields(ctx) + val varDeclarations = mutableStates._1.map { case (javaType, name) => + s"$javaType $name;" + } + val initVars = mutableStates._2.map { init => + init.replace("this.", "") } val expression = s""" ${varDeclarations.mkString(separator)} + ${initVars.mkString(separator)} $typeConversion""" logDebug(s"DEBUG: For complex type=$dataType, generated code=$expression") diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/SchemaDStream.scala b/core/src/main/scala/org/apache/spark/sql/streaming/SchemaDStream.scala index 7ff315d958..cadbd1bef7 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/SchemaDStream.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/SchemaDStream.scala @@ -24,9 +24,8 @@ import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.collection.WrappedInternalRow import org.apache.spark.sql.execution._ -import org.apache.spark.sql.execution.exchange.ShuffleExchange import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{DataFrame, Row, SnappySession} +import org.apache.spark.sql.{DataFrame, Row, SnappySession, SparkSupport} import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.dstream.DStream import org.apache.spark.streaming.{Duration, SnappyStreamingContext, Time} @@ -46,7 +45,7 @@ import org.apache.spark.streaming.{Duration, SnappyStreamingContext, Time} */ class SchemaDStream(@transient val snsc: SnappyStreamingContext, @transient val queryExecution: QueryExecution) - extends DStream[Row](snsc) { + extends DStream[Row](snsc) with SparkSupport { @transient private val snappySession: SnappySession = snsc.snappySession @@ -290,7 +289,7 @@ class SchemaDStream(@transient val snsc: SnappyStreamingContext, } private val _cachedField = { - val f = classOf[ShuffleExchange].getDeclaredFields.find( + val f = internals.classOfShuffleExchange().getDeclaredFields.find( _.getName.contains("cachedShuffleRDD")).get f.setAccessible(true) f @@ -298,7 +297,7 @@ class SchemaDStream(@transient val snsc: SnappyStreamingContext, private def executionPlan: SparkPlan = { queryExecution.executedPlan.foreach { - case s: ShuffleExchange => _cachedField.set(s, null) + case s if internals.isShuffleExchange(s) => _cachedField.set(s, null) case _ => } queryExecution.executedPlan diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/StreamBaseRelation.scala b/core/src/main/scala/org/apache/spark/sql/streaming/StreamBaseRelation.scala index 9d975189ba..9deefcc2e1 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/StreamBaseRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/StreamBaseRelation.scala @@ -21,24 +21,23 @@ import scala.collection.mutable import io.snappydata.sql.catalog.SnappyExternalCatalog import org.apache.spark.rdd.{EmptyRDD, RDD} -import org.apache.spark.sql.Row import org.apache.spark.sql.catalyst.InternalRow -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.sources._ +import org.apache.spark.sql.{Row, SparkSupport} import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.dstream.{DStream, InputDStream, ReceiverInputDStream} import org.apache.spark.streaming.{SnappyStreamingContext, StreamUtils, StreamingContextState, Time} import org.apache.spark.{Logging, util} -abstract class StreamBaseRelation(opts: Map[String, String]) - extends DestroyRelation with StreamPlan with TableScan with Serializable with Logging { +abstract class StreamBaseRelation(opts: Map[String, String]) extends DestroyRelation + with StreamPlan with TableScan with Serializable with Logging with SparkSupport { final def context: SnappyStreamingContext = SnappyStreamingContext.getInstance().getOrElse( throw new IllegalStateException("No initialized streaming context")) - protected val options = new CaseInsensitiveMap(opts) + protected val options: Map[String, String] = internals.newCaseInsensitiveMap(opts) @transient val tableName = options(SnappyExternalCatalog.DBTABLE_PROPERTY) diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala b/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala index 51a637a8c4..f2d864211e 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala @@ -48,8 +48,9 @@ object StreamSqlHelper { def getSchemaDStream(ssc: SnappyStreamingContext, tableName: String): SchemaDStream = { val catalog = ssc.snappySession.sessionState.catalog catalog.resolveRelation(ssc.snappySession.tableIdentifier(tableName)) match { - case LogicalRelation(sr: StreamPlan, _, _) => new SchemaDStream(ssc, - LogicalDStreamPlan(sr.schema.toAttributes, sr.rowStream)(ssc)) + case lr: LogicalRelation if lr.relation.isInstanceOf[StreamPlan] => + val sr = lr.relation.asInstanceOf[StreamPlan] + new SchemaDStream(ssc, LogicalDStreamPlan(sr.schema.toAttributes, sr.rowStream)(ssc)) case _ => throw new AnalysisException(s"Table $tableName not a stream table") } diff --git a/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala b/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala index 1ed8cbc9db..7c78366f94 100644 --- a/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala +++ b/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala @@ -19,21 +19,18 @@ package org.apache.spark.sql.types import scala.math.Ordering import scala.reflect.runtime.universe.typeTag -import org.apache.spark.sql.catalyst.ScalaReflectionLock import org.apache.spark.unsafe.types.UTF8String /** - * An internal type to represent VARCHAR() and CHAR() types in - * column definitions of "CREATE TABLE". - */ + * An internal type to represent VARCHAR() and CHAR() types in + * column definitions of "CREATE TABLE". + */ case class CharStringType(override val defaultSize: Int, baseType: String) extends AtomicType { override private[sql] type InternalType = UTF8String - @transient override private[sql] lazy val tag = ScalaReflectionLock.synchronized { - typeTag[InternalType] - } + @transient override private[sql] lazy val tag = typeTag[InternalType] override private[sql] val ordering = implicitly[Ordering[InternalType]] From 81a34923c380cf889d008efaaf1b02911c806c12 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 1 Apr 2019 15:16:40 +0530 Subject: [PATCH 05/80] more additions for multiple version support --- build.gradle | 3 +- .../sql/internal/Spark210Internals.scala | 108 +++++++++++++- .../sql/internal/Spark211Internals.scala | 31 +++- .../sql/internal/Spark232Internals.scala | 141 +++++++++++++++++- .../spark/sql/hive/SnappyHiveCatalogBase.java | 2 +- .../sql/catalog/impl/StoreHiveCatalog.scala | 2 +- .../org/apache/spark/sql/SnappySession.scala | 2 +- .../org/apache/spark/sql/SparkInternals.scala | 38 ++++- .../columnar/impl/DefaultSource.scala | 2 +- .../sql/execution/row/DefaultSource.scala | 2 +- .../sql/hive/SnappyHiveExternalCatalog.scala | 46 +++--- .../sql/internal/SnappySessionCatalog.scala | 115 +++++++------- .../sql/internal/SnappySessionState.scala | 8 +- .../apache/spark/sql/sources/RuleUtils.scala | 2 +- .../spark/sql/sources/StoreStrategy.scala | 2 +- .../sql/store/CatalogConsistencyTest.scala | 10 +- spark | 2 +- 17 files changed, 396 insertions(+), 120 deletions(-) diff --git a/build.gradle b/build.gradle index 6252278b50..36fa104077 100644 --- a/build.gradle +++ b/build.gradle @@ -101,7 +101,8 @@ allprojects { vendorName = 'SnappyData, Inc.' scalaBinaryVersion = '2.11' scalaVersion = scalaBinaryVersion + '.8' - sparkVersion = '2.3.2' + sparkVersion = rootProject.hasProperty('spark.connector.version') + ? rootProject.property('spark.connector.version') : '2.3.2' snappySparkVersion = '2.1.1.4' sparkOldVersion = '2.1.1' diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 73e107fa1d..9b015456f8 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -19,14 +19,17 @@ package org.apache.spark.sql.internal import scala.reflect.ClassTag import scala.util.control.NonFatal +import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} +import org.apache.hadoop.conf.Configuration import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} @@ -43,11 +46,12 @@ import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} +import org.apache.spark.sql.hive.SnappyHiveExternalCatalog import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel -import org.apache.spark.{SparkContext, SparkException} +import org.apache.spark.{SparkConf, SparkContext, SparkException} /** * Implementation of [[SparkInternals]] for Spark 2.1.0. @@ -444,6 +448,13 @@ class Spark210Internals extends SparkInternals { partition.toRow(partitionSchema) } + override def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, + table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, + numDP: Int, holdDDLTime: Boolean): Unit = { + externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, + numDP, holdDDLTime) + } + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { throw new ParseException(s"ALTER TABLE STATS not supported in Spark $version") @@ -457,11 +468,25 @@ class Spark210Internals extends SparkInternals { override def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] = stat.toMap + override def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog = { + new SnappyHiveExternalCatalogImpl(conf, hadoopConf, createTime) + } + override def newSmartConnectorExternalCatalog( session: SparkSession): SmartConnectorExternalCatalog = { new SmartConnectorExternalCatalogImpl(session) } + override def newSnappySessionCatalog(sessionState: SnappySessionState, + externalCatalog: SnappyExternalCatalog, globalTempViewManager: GlobalTempViewManager, + functionRegistry: FunctionRegistry, conf: SQLConf, + hadoopConf: Configuration): SnappySessionCatalog = { + new SnappySessionCatalogImpl(sessionState.snappySession, externalCatalog, globalTempViewManager, + sessionState.functionResourceLoader, functionRegistry, sessionState.sqlParser, + conf, hadoopConf) + } + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = DataSource.lookupDataSource(provider) @@ -541,8 +566,9 @@ final class SnappyCacheManager extends CacheManager { } } -final class SmartConnectorExternalCatalogImpl(override val session: SparkSession) - extends SmartConnectorExternalCatalog { +class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, + override val hadoopConf: Configuration, override val createTime: Long) + extends SnappyHiveExternalCatalog { override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) @@ -566,8 +592,50 @@ final class SmartConnectorExternalCatalogImpl(override val session: SparkSession override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) - override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = - alterTableSchemaImpl(schemaName, table, newSchema) + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) + } + + override def listPartitionsByFilter(schema: String, table: String, + predicates: Seq[Expression]): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates) + } + + override def createFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override def dropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override def renameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +class SmartConnectorExternalCatalogImpl(override val session: SparkSession) + extends SmartConnectorExternalCatalog { + + override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = + createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = + dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = { + dropTableImpl(schema, table, ignoreIfNotExists, purge) + } + + override def renameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) override def loadDynamicPartitions(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { @@ -588,3 +656,31 @@ final class SmartConnectorExternalCatalogImpl(override val session: SparkSession override def renameFunction(schema: String, oldName: String, newName: String): Unit = renameFunctionImpl(schema, oldName, newName) } + +final class SnappySessionCatalogImpl(override val snappySession: SnappySession, + override val snappyExternalCatalog: SnappyExternalCatalog, + override val globalTempViewManager: GlobalTempViewManager, + override val functionResourceLoader: FunctionResourceLoader, + override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, + override val sqlConf: SQLConf, hadoopConf: Configuration) + extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionResourceLoader, + functionRegistry, sqlConf, hadoopConf) with SnappySessionCatalog { + + override def getTableMetadataOption(name: TableIdentifier): Option[CatalogTable] = { + super.getTableMetadataOption(name) match { + case None => None + case Some(table) => Some(convertCharTypes(table)) + } + } + + override protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = child + + override protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = + SimpleCatalogRelation(schemaName, table) + + override def lookupRelation(name: TableIdentifier, alias: Option[String]): LogicalPlan = + lookupRelationImpl(name, alias) + + override def makeFunctionBuilder(name: String, functionClassName: String): FunctionBuilder = + makeFunctionBuilderImpl(name, functionClassName) +} diff --git a/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index 41171d46f9..f27efe93ac 100644 --- a/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -16,15 +16,19 @@ */ package org.apache.spark.sql.internal -import org.apache.spark.SparkException +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog +import org.apache.hadoop.conf.Configuration + import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType} import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, Statistics} import org.apache.spark.sql.execution.CacheManager +import org.apache.spark.sql.hive.SnappyHiveExternalCatalog import org.apache.spark.sql.types.StructType import org.apache.spark.storage.StorageLevel +import org.apache.spark.{SparkConf, SparkException} /** * Implementation of [[SparkInternals]] for Spark 2.1.1. @@ -69,6 +73,16 @@ class Spark211Internals extends Spark210Internals { override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = catalogTable.schemaPreservesCase + override def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog = { + new SnappyHiveExternalCatalog211Impl(conf, hadoopConf, createTime) + } + + override def newSmartConnectorExternalCatalog( + session: SparkSession): SmartConnectorExternalCatalog = { + new SmartConnectorExternalCatalog211Impl(session) + } + override def newCacheManager(): CacheManager = new SnappyCacheManager } @@ -99,3 +113,18 @@ final class SnappyCacheManager extends CacheManager { session.asInstanceOf[SnappySession].clearPlanCache() } } + +final class SnappyHiveExternalCatalog211Impl(conf: SparkConf, + hadoopConf: Configuration, createTime: Long) + extends SnappyHiveExternalCatalogImpl(conf, hadoopConf, createTime) { + + override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = + alterTableSchemaImpl(schemaName, table, newSchema) +} + +final class SmartConnectorExternalCatalog211Impl(session: SparkSession) + extends SmartConnectorExternalCatalogImpl(session) { + + override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = + alterTableSchemaImpl(schemaName, table, newSchema) +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 6d3d57d0a1..f8cdae7349 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -22,15 +22,18 @@ import java.nio.file.Paths import scala.collection.mutable +import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} +import org.apache.hadoop.conf.Configuration -import org.apache.spark.SparkContext +import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} @@ -46,9 +49,11 @@ import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyHiveExternalCatalog} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel +import org.apache.spark.util.Utils /** * Implementation of [[SparkInternals]] for Spark 2.3.2. @@ -109,7 +114,7 @@ class Spark232Internals extends SparkInternals { override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, newExprId: ExprId): Expression = { throw new UnsupportedOperationException( - "unexpected copyPredicateSubquery call in Spark 2.3 module") + s"unexpected copyPredicateSubquery call in Spark $version module") } override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { @@ -144,15 +149,13 @@ class Spark232Internals extends SparkInternals { } def clearSQLListener(): Unit = { - // no global SQLListener in Spark 2.3 + // no global SQLListener in Spark 2.3.x } override def createViewSQL(session: SparkSession, plan: LogicalPlan, originalText: Option[String]): String = originalText match { case Some(viewSQL) => viewSQL - case None => - throw new AnalysisException( - "Cannot create a persisted VIEW from the Dataset API") + case None => throw new AnalysisException("Cannot create a persisted VIEW from the Dataset API") } override def createView(desc: CatalogTable, output: Seq[Attribute], @@ -376,6 +379,16 @@ class Spark232Internals extends SparkInternals { partition.toRow(partitionSchema, defaultTimeZoneId) } + override def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, + table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, + numDP: Int, holdDDLTime: Boolean): Unit = { + if (holdDDLTime) { + throw new UnsupportedOperationException( + s"unexpected loadDynamicPartitions with holdDDLTime=true in Spark $version module") + } + externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP) + } + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { val catalogStats = stats match { @@ -391,11 +404,29 @@ class Spark232Internals extends SparkInternals { override def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] = stat.toMap(colName, dataType) + override def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog = { + new SnappyHiveExternalCatalogImpl(conf, hadoopConf, createTime) + } + override def newSmartConnectorExternalCatalog( session: SparkSession): SmartConnectorExternalCatalog = { new SmartConnectorExternalCatalogImpl(session) } + override def newSnappySessionCatalog(sessionState: SnappySessionState, + externalCatalog: SnappyExternalCatalog, globalTempViewManager: GlobalTempViewManager, + functionRegistry: FunctionRegistry, conf: SQLConf, + hadoopConf: Configuration): SnappySessionCatalog = { + val session = sessionState.snappySession + val functionResourceLoader = externalCatalog match { + case c: SnappyHiveExternalCatalog => new HiveSessionResourceLoader(session, c.client()) + case _ => new SessionResourceLoader(session) + } + new SnappySessionCatalogImpl(session, externalCatalog, globalTempViewManager, + functionResourceLoader, functionRegistry, sessionState.sqlParser, conf, hadoopConf) + } + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = DataSource.lookupDataSource(provider, conf) @@ -415,7 +446,7 @@ class Spark232Internals extends SparkInternals { aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], planChild: () => SparkPlan): Seq[SparkPlan] = { throw new UnsupportedOperationException( - "unexpected planAggregateWithoutPartial call in Spark 2.3 module") + s"unexpected planAggregateWithoutPartial call in Spark $version module") } override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code)._1 @@ -477,6 +508,64 @@ final class SnappyCacheManager extends CacheManager { } } +final class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, + override val hadoopConf: Configuration, override val createTime: Long) + extends SnappyHiveExternalCatalog { + + override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override protected def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override protected def doDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) + + override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override protected def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override protected def doAlterTableDataSchema(schemaName: String, table: String, + newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) + + override protected def doAlterTableStats(schema: String, table: String, + stats: Option[CatalogStatistics]): Unit = stats match { + case None => alterTableStatsImpl(schema, table, None) + case Some(s) => alterTableStatsImpl(schema, table, + Some((s.sizeInBytes, s.rowCount, s.colStats))) + } + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, + holdDDLTime = false) + } + + override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], + defaultTimeZoneId: String): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId) + } + + override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override protected def doDropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = + alterFunctionImpl(schema, function) + + override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + final class SmartConnectorExternalCatalogImpl(override val session: SparkSession) extends SmartConnectorExternalCatalog { @@ -533,3 +622,39 @@ final class SmartConnectorExternalCatalogImpl(override val session: SparkSession override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = renameFunctionImpl(schema, oldName, newName) } + +final class SnappySessionCatalogImpl(override val snappySession: SnappySession, + override val snappyExternalCatalog: SnappyExternalCatalog, + override val globalTempViewManager: GlobalTempViewManager, + override val functionResourceLoader: FunctionResourceLoader, + override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, + override val sqlConf: SQLConf, hadoopConf: Configuration) + extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionRegistry, + sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog { + + override protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = + View(desc = table, output = table.schema.toAttributes, child) + + override protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = + UnresolvedCatalogRelation(table) + + override def lookupRelation(name: TableIdentifier): LogicalPlan = lookupRelationImpl(name, None) + + override def registerFunction(funcDefinition: CatalogFunction, + overrideIfExists: Boolean, functionBuilder: Option[FunctionBuilder]): Unit = { + val func = funcDefinition.identifier + if (functionRegistry.functionExists(func) && !overrideIfExists) { + throw new AnalysisException(s"Function $func already exists") + } + val info = new ExpressionInfo(funcDefinition.className, func.database.orNull, func.funcName) + val builder = functionBuilder.getOrElse { + val className = funcDefinition.className + if (!Utils.classIsLoadable(className)) { + throw new AnalysisException(s"Can not load class '$className' when registering " + + s"the function '$func', please make sure it is on the classpath") + } + makeFunctionBuilderImpl(func.unquotedString, className) + } + functionRegistry.registerFunction(func, info, builder) + } +} diff --git a/core/src/main/java/org/apache/spark/sql/hive/SnappyHiveCatalogBase.java b/core/src/main/java/org/apache/spark/sql/hive/SnappyHiveCatalogBase.java index 5eb62b0681..9c7e7a9a79 100644 --- a/core/src/main/java/org/apache/spark/sql/hive/SnappyHiveCatalogBase.java +++ b/core/src/main/java/org/apache/spark/sql/hive/SnappyHiveCatalogBase.java @@ -40,7 +40,7 @@ protected SnappyHiveCatalogBase(SparkConf conf, Configuration hadoopConf) { } @Override - public HiveClient client() { + public final HiveClient client() { return this.hiveClient; } } diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala index 7a1a51b222..19d82f89cd 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala @@ -719,7 +719,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { val table = request.getNames.get(1) val path = request.getNames.get(2) checkSchemaPermission(schema, table, user) - externalCatalog.loadDynamicPartitions(schema, table, path, + internals.loadDynamicPartitions(externalCatalog, schema, table, path, request.getProperties.get(0).asScala.toMap, request.otherFlags.get(0) != 0, request.otherFlags.get(1), request.otherFlags.get(2) != 0) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index abf06f12bb..de596f3083 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -119,7 +119,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo def sessionCatalog: SnappySessionCatalog = sessionState.catalog - def externalCatalog: SnappyExternalCatalog = sessionState.catalog.externalCatalog + def externalCatalog: SnappyExternalCatalog = sessionState.catalog.snappyExternalCatalog def snappyParser: SnappyParser = sessionState.sqlParser.sqlParser diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 9d5ac07296..c930e456c5 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -16,12 +16,15 @@ */ package org.apache.spark.sql +import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} +import org.apache.hadoop.conf.Configuration import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD -import org.apache.spark.sql.catalyst.analysis.UnresolvedTableValuedFunction +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, GeneratedClass} @@ -34,10 +37,11 @@ import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} -import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionState} +import org.apache.spark.sql.hive.SnappyHiveExternalCatalog +import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionCatalog, SnappySessionState} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} -import org.apache.spark.{Logging, SparkContext} +import org.apache.spark.{Logging, SparkConf, SparkContext} /** * Common interface for Spark internal API used by the core module. @@ -249,7 +253,9 @@ trait SparkInternals extends Logging { */ def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias - /** Create an alias. */ + /** + * Create an alias with given parameters and optionally copying other fields from existing Alias. + */ def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression]): Alias /** @@ -398,6 +404,11 @@ trait SparkInternals extends Logging { def catalogTablePartitionToRow(partition: CatalogTablePartition, partitionSchema: StructType, defaultTimeZoneId: String): InternalRow + /** Query catalog to load dynamic partitions defined in given Spark table. */ + def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, + table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, + numDP: Int, holdDDLTime: Boolean): Unit + /** Alter table statistics in the ExternalCatalog if possible else throw an exception */ def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit @@ -410,11 +421,26 @@ trait SparkInternals extends Logging { def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] /** - * Create a new instance of SmartConnectorExternalCatalog. The method overrides have changed - * across Spark versions. + * Create a new instance of SnappyHiveExternalCatalog. The method overrides in + * ExternalCatalog have changed across Spark versions. + */ + def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog + + /** + * Create a new instance of SmartConnectorExternalCatalog. The method overrides in + * ExternalCatalog have changed across Spark versions. */ def newSmartConnectorExternalCatalog(session: SparkSession): SmartConnectorExternalCatalog + /** + * Create a new implementation of SnappySession with given parameters. + */ + def newSnappySessionCatalog(sessionState: SnappySessionState, + externalCatalog: SnappyExternalCatalog, globalTempViewManager: GlobalTempViewManager, + functionRegistry: FunctionRegistry, conf: SQLConf, + hadoopConf: Configuration): SnappySessionCatalog + /** Lookup the data source for a given provider. */ def lookupDataSource(provider: String, conf: => SQLConf): Class[_] diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala index 7264e6404a..b462720dc3 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/DefaultSource.scala @@ -92,7 +92,7 @@ final class DefaultSource extends ExternalSchemaRelationProvider with SchemaRela } finally { if (!success && relation.tableCreated) { // remove the catalog entry - session.sessionCatalog.externalCatalog.dropTable(relation.schemaName, + session.sessionCatalog.snappyExternalCatalog.dropTable(relation.schemaName, relation.tableName, ignoreIfNotExists = true, purge = false) // destroy the relation relation.destroy(ifExists = true) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala index 2afbac31c7..4dc883b36c 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/DefaultSource.scala @@ -81,7 +81,7 @@ final class DefaultSource extends ExternalSchemaRelationProvider with SchemaRela } finally { if (!success && relation.tableCreated) { // remove the catalog entry - session.sessionCatalog.externalCatalog.dropTable(relation.schemaName, + session.sessionCatalog.snappyExternalCatalog.dropTable(relation.schemaName, relation.tableName, ignoreIfNotExists = true, purge = false) // destroy the relation relation.destroy(ifExists = true) diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 71d87715a9..96cceb2507 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -43,6 +43,7 @@ import org.apache.hadoop.hive.ql.metadata.Hive import org.apache.log4j.{Level, LogManager} import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} +import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.analysis.{NoSuchDatabaseException, NoSuchTableException, TableAlreadyExistsException} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec @@ -59,14 +60,19 @@ import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources.JdbcExtendedUtils import org.apache.spark.sql.sources.JdbcExtendedUtils.toUpperCase import org.apache.spark.sql.types.LongType -import org.apache.spark.sql.{AnalysisException, _} import org.apache.spark.{SparkConf, SparkException} -class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, - val hadoopConf: Configuration, val createTime: Long) - extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyExternalCatalog { +trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExternalCatalog { + + val conf: SparkConf + val hadoopConf: Configuration + val createTime: Long + + /** A cache of Spark SQL data source tables that have been accessed. */ + protected final val cachedCatalogTables: LoadingCache[(String, String), CatalogTable] = { + + // base initialization first - { // fire dummy queries to initialize more components of hive meta-store withHiveExceptionHandling { assert(!client.tableExists(SYS_SCHEMA, "DBS")) @@ -91,10 +97,9 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, // here we set `ignoreIfExists = true` to avoid `DatabaseAlreadyExists` exception. createDatabase(defaultSchemaDefinition, ignoreIfExists = true) } - } - /** A cache of Spark SQL data source tables that have been accessed. */ - protected val cachedCatalogTables: LoadingCache[(String, String), CatalogTable] = { + // initialize the CacheLoader + val cacheLoader = new CacheLoader[(String, String), CatalogTable]() { override def load(name: (String, String)): CatalogTable = { logDebug(s"Looking up data source for ${name._1}.${name._2}") @@ -111,7 +116,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, } /** A cache of SQL data source tables that are missing in catalog. */ - protected val nonExistentTables: Cache[(String, String), java.lang.Boolean] = { + protected final val nonExistentTables: Cache[(String, String), java.lang.Boolean] = { CacheBuilder.newBuilder().maximumSize(ConnectorExternalCatalog.cacheSize).build() } @@ -197,7 +202,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, // Databases // -------------------------------------------------------------------------- - override def createDatabase(schemaDefinition: CatalogDatabase, + protected def createDatabaseImpl(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = { // dot is used for schema, name separation and will cause many problems if present if (schemaDefinition.name.indexOf('.') != -1) { @@ -216,7 +221,8 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, withHiveExceptionHandling(super.createDatabase(schemaDefinition, ignoreIfExists)) } - override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = { + protected def dropDatabaseImpl(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = { if (schema == SYS_SCHEMA) throw new AnalysisException(s"$schema is a system reserved schema") withHiveExceptionHandling(super.dropDatabase(schema, ignoreIfNotExists, cascade)) } @@ -327,7 +333,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, } } - override def createTable(tableDefinition: CatalogTable, ignoreIfExists: Boolean): Unit = { + protected def createTableImpl(tableDefinition: CatalogTable, ignoreIfExists: Boolean): Unit = { val catalogTable = addViewProperties(tableDefinition) var ifExists = ignoreIfExists // Add dependency on base table if required. This is done before actual table @@ -374,7 +380,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, registerCatalogSchemaChange(refreshRelations) } - override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + protected def dropTableImpl(schema: String, table: String, ignoreIfNotExists: Boolean, purge: Boolean): Unit = { val tableDefinition = getTableOption(schema, table) match { case None => @@ -406,7 +412,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, registerCatalogSchemaChange(refreshRelations) } - override def alterTable(tableDefinition: CatalogTable): Unit = { + protected def alterTableImpl(tableDefinition: CatalogTable): Unit = { val catalogTable = addViewProperties(tableDefinition) val schemaName = catalogTable.database val tableName = catalogTable.identifier.table @@ -440,7 +446,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, registerCatalogSchemaChange(schemaName -> tableName :: Nil) } - override def renameTable(schema: String, oldName: String, newName: String): Unit = { + protected def renameTableImpl(schema: String, oldName: String, newName: String): Unit = { withHiveExceptionHandling(super.renameTable(schema, oldName, newName)) } @@ -644,7 +650,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, isOverwrite, holdDDLTime, inheritTableSpecs)) } - override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + protected def loadDynamicPartitionsImpl(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { withHiveExceptionHandling(super.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP, holdDDLTime)) @@ -670,7 +676,7 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, withHiveExceptionHandling(super.listPartitions(schema, table, partialSpec)) } - override def listPartitionsByFilter(schema: String, table: String, + protected def listPartitionsByFilterImpl(schema: String, table: String, predicates: Seq[Expression]): Seq[CatalogTablePartition] = { withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, predicates)) } @@ -679,17 +685,17 @@ class SnappyHiveExternalCatalog private[hive](val conf: SparkConf, // Functions // -------------------------------------------------------------------------- - override def createFunction(schema: String, funcDefinition: CatalogFunction): Unit = { + protected def createFunctionImpl(schema: String, funcDefinition: CatalogFunction): Unit = { withHiveExceptionHandling(super.createFunction(schema, funcDefinition)) SnappySession.clearAllCache() } - override def dropFunction(schema: String, name: String): Unit = { + protected def dropFunctionImpl(schema: String, name: String): Unit = { withHiveExceptionHandling(super.dropFunction(schema, name)) SnappySession.clearAllCache() } - override def renameFunction(schema: String, oldName: String, newName: String): Unit = { + protected def renameFunctionImpl(schema: String, oldName: String, newName: String): Unit = { withHiveExceptionHandling(super.renameFunction(schema, oldName, newName)) SnappySession.clearAllCache() } diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 391a60c8ad..1f192e34c7 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -27,14 +27,13 @@ import io.snappydata.Constant import io.snappydata.sql.catalog.CatalogObjectType.getTableType import io.snappydata.sql.catalog.SnappyExternalCatalog.{DBTABLE_PROPERTY, getTableWithSchema} import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} -import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.Path import org.apache.spark.annotation.DeveloperApi import org.apache.spark.sql._ import org.apache.spark.sql.catalog.Column import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, NoSuchPermanentFunctionException} +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, NoSuchFunctionException, NoSuchPermanentFunctionException} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.{AttributeReference, Expression} @@ -54,20 +53,15 @@ import org.apache.spark.util.MutableURLClassLoader * stream/topK tables and returning LogicalPlan to materialize these entities. */ @DeveloperApi -class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, - val snappySession: SnappySession, - globalTempViewManager: GlobalTempViewManager, - functionResourceLoader: FunctionResourceLoader, - functionRegistry: FunctionRegistry, - sqlConf: SQLConf, - hadoopConf: Configuration) - extends SessionCatalog( - externalCatalog, - globalTempViewManager, - functionResourceLoader, - functionRegistry, - sqlConf, - hadoopConf) { +trait SnappySessionCatalog extends SessionCatalog with SparkSupport { + + val snappyExternalCatalog: SnappyExternalCatalog + val globalTempViewManager: GlobalTempViewManager + val functionResourceLoader: FunctionResourceLoader + val functionRegistry: FunctionRegistry + val snappySession: SnappySession + val sqlConf: SQLConf + val parser: SnappySqlParser /** * Can be used to temporarily switch the metadata returned by catalog @@ -119,8 +113,8 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, val tableIdent = snappySession.tableIdentifier(table) val relation = resolveRelation(tableIdent) val keyColumns = relation match { - case LogicalRelation(mutable: MutableRelation, _, _) => - val keyCols = mutable.getPrimaryKeyColumns + case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] => + val keyCols = lr.relation.asInstanceOf[MutableRelation].getPrimaryKeyColumns if (keyCols.isEmpty) { Nil } else { @@ -202,7 +196,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, } else { val catalogTable = getTableMetadata(new TableIdentifier( rlsRelation.tableName, Some(rlsRelation.schemaName))) - val policyFilters = externalCatalog.getPolicies(rlsRelation.schemaName, + val policyFilters = snappyExternalCatalog.getPolicies(rlsRelation.schemaName, rlsRelation.tableName, catalogTable.properties).map { ct => resolveRelation(ct.identifier).asInstanceOf[BypassRowLevelSecurity].child } @@ -241,7 +235,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, filter.transformAllExpressions { case ar: AttributeReference if mappingInfo.contains(ar.exprId) => AttributeReference(ar.name, ar.dataType, ar.nullable, - ar.metadata)(mappingInfo(ar.exprId), ar.qualifier, ar.isGenerated) + ar.metadata)(mappingInfo(ar.exprId), ar.qualifier) } } } @@ -305,8 +299,8 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, } } - def isLocalTemporaryView(name: TableIdentifier): Boolean = synchronized { - name.database.isEmpty && tempTables.contains(formatTableName(name.table)) + def isLocalTemporaryView(name: TableIdentifier): Boolean = { + name.database.isEmpty && getTempView(name.table).isDefined } /** @@ -315,7 +309,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, */ private[sql] def createSchema(schemaName: String, ignoreIfExists: Boolean): Unit = { validateSchemaName(schemaName, checkForDefault = false) - if (externalCatalog.databaseExists(schemaName)) { + if (snappyExternalCatalog.databaseExists(schemaName)) { if (!ignoreIfExists) throw new AnalysisException(s"Schema '$schemaName' already exists") } else { createDatabase(CatalogDatabase(schemaName, s"User $schemaName schema", @@ -349,7 +343,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, throw new AnalysisException(s"$schemaName is a system reserved schema") } - if (!externalCatalog.databaseExists(schemaName)) { + if (!snappyExternalCatalog.databaseExists(schemaName)) { if (ignoreIfNotExists) return else throw new AnalysisException(s"Schema $schemaName not found") } @@ -357,11 +351,11 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, if (cascade) { // drop all the tables in order first, dependents followed by others - val allTables = externalCatalog.listTables(schemaName).flatMap( - table => externalCatalog.getTableOption(schemaName, table)) + val allTables = snappyExternalCatalog.listTables(schemaName).flatMap( + table => snappyExternalCatalog.getTableOption(schemaName, table)) if (allTables.nonEmpty) { val (dependents, others) = allTables.partition(t => t.tableType == - CatalogTableType.VIEW || externalCatalog.getBaseTable(t).isDefined) + CatalogTableType.VIEW || snappyExternalCatalog.getBaseTable(t).isDefined) dependents.foreach(d => snappySession.dropTable(d.identifier, ifExists = true, d.tableType == CatalogTableType.VIEW)) // drop streams at last @@ -398,7 +392,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, val schemaName = formatDatabaseName(schema) validateSchemaName(schemaName, checkForDefault = false) super.setCurrentDatabase(schemaName) - externalCatalog.setCurrentDatabase(schemaName) + snappyExternalCatalog.setCurrentDatabase(schemaName) } override def listDatabases(): Seq[String] = synchronized { @@ -437,7 +431,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, createTable(catalogTable, ignoreIfExists) } - private def convertCharTypes(table: CatalogTable): CatalogTable = { + protected def convertCharTypes(table: CatalogTable): CatalogTable = { if (convertCharTypesInMetadata) table.copy(schema = StructType(table.schema.map { field => field.dataType match { case StringType if field.metadata.contains(Constant.CHAR_TYPE_BASE_PROP) => @@ -458,13 +452,6 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, convertCharTypes(super.getTableMetadata(name)) } - override def getTableMetadataOption(name: TableIdentifier): Option[CatalogTable] = { - super.getTableMetadataOption(name) match { - case None => None - case Some(table) => Some(convertCharTypes(table)) - } - } - override def dropTable(tableIdent: TableIdentifier, ignoreIfNotExists: Boolean, purge: Boolean): Unit = synchronized { val name = addMissingGlobalTempSchema(tableIdent) @@ -476,13 +463,13 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, val table = formatTableName(name.table) checkSchemaPermission(schema, table, defaultUser = null) // resolve the table and destroy underlying storage if possible - externalCatalog.getTableOption(schema, table) match { + snappyExternalCatalog.getTableOption(schema, table) match { case None => if (ignoreIfNotExists) return else throw new TableNotFoundException(schema, table) case Some(metadata) => // fail if there are any existing dependents except policies - val dependents = externalCatalog.getDependents(schema, table, - externalCatalog.getTable(schema, table), Nil, CatalogObjectType.Policy :: Nil) + val dependents = snappyExternalCatalog.getDependents(schema, table, + snappyExternalCatalog.getTable(schema, table), Nil, CatalogObjectType.Policy :: Nil) if (dependents.nonEmpty) { throw new AnalysisException(s"Object $schema.$table cannot be dropped because of " + s"dependent objects: ${dependents.map(_.identifier.unquotedString).mkString(",")}") @@ -538,8 +525,8 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, checkSchemaPermission(newSchemaName, newName.table, defaultUser = null) // in-built tables don't support rename yet - super.getTableMetadataOption(oldName) match { - case Some(table) if DDLUtils.isDatasourceTable(table) && + super.getTableMetadata(oldName) match { + case table if DDLUtils.isDatasourceTable(table) && SnappyContext.isBuiltInProvider(table.provider.get) => throw new UnsupportedOperationException( s"Table $oldName having provider '${table.provider.get}' does not support rename") @@ -580,12 +567,11 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, } createSchema(schemaName, ignoreIfExists = true) - externalCatalog.createPolicy(schemaName, policyName, targetIdent.unquotedString, + snappyExternalCatalog.createPolicy(schemaName, policyName, targetIdent.unquotedString, policyFor, policyApplyTo, expandedPolicyApplyTo, owner, filterString) } private def getPolicyPlan(table: CatalogTable): LogicalPlan = { - val parser = snappySession.sessionState.sqlParser val filterExpression = table.properties.get(PolicyProperties.filterString) match { case Some(e) => parser.parseExpression(e) case None => throw new IllegalStateException("Filter for the policy not found") @@ -606,12 +592,16 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, toSeq.filterNot(_.isEmpty)) } - override def lookupRelation(name: TableIdentifier, alias: Option[String]): LogicalPlan = { + protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan + + protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan + + protected final def lookupRelationImpl(name: TableIdentifier, + alias: Option[String]): LogicalPlan = { synchronized { val tableName = formatTableName(name.table) - var view: Option[TableIdentifier] = Some(name) val relationPlan = (if (name.database.isEmpty) { - tempTables.get(tableName) match { + getTempView(tableName) match { case None => globalTempViewManager.get(tableName) case s => s } @@ -625,20 +615,19 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, case Some(p) => p } } else { - val table = externalCatalog.getTable(schemaName, tableName) + val table = snappyExternalCatalog.getTable(schemaName, tableName) if (table.tableType == CatalogTableType.VIEW) { if (table.viewText.isEmpty) sys.error("Invalid view without text.") - snappySession.sessionState.sqlParser.parsePlan(table.viewText.get) + newView(table, parser.parsePlan(table.viewText.get)) } else if (CatalogObjectType.isPolicy(table)) { getPolicyPlan(table) } else { - view = None - SimpleCatalogRelation(schemaName, table) + newCatalogRelation(schemaName, table) } } case Some(p) => p } - SubqueryAlias(if (alias.isEmpty) tableName else alias.get, relationPlan, view) + internals.newSubqueryAlias(if (alias.isEmpty) tableName else alias.get, relationPlan) } } @@ -646,7 +635,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, if (name.database.isEmpty) synchronized { // check both local and global temporary tables val tableName = formatTableName(name.table) - tempTables.contains(tableName) || globalTempViewManager.get(tableName).isDefined + getTempView(tableName).isDefined || globalTempViewManager.get(tableName).isDefined } else if (formatDatabaseName(name.database.get) == globalTempViewManager.database) { globalTempViewManager.get(formatTableName(name.table)).isDefined } else false @@ -658,12 +647,12 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, super.refreshTable(table) } else { val resolved = resolveTableIdentifier(table) - externalCatalog.invalidate(resolved.database.get -> resolved.table) + snappyExternalCatalog.invalidate(resolved.database.get -> resolved.table) } } def getDataSourceRelations[T](tableType: CatalogObjectType.Type): Seq[T] = { - externalCatalog.getAllTables().collect { + snappyExternalCatalog.getAllTables().collect { case table if tableType == CatalogObjectType.getTableType(table) => resolveRelation(table.identifier).asInstanceOf[LogicalRelation].relation.asInstanceOf[T] } @@ -728,6 +717,14 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, // TODO: SW: clean up function creation to be like Spark with backward compatibility + protected def functionLookupFailure(name: FunctionIdentifier): Nothing = { + val schema = name.database match { + case None => getCurrentSchema + case Some(s) => s + } + throw new NoSuchFunctionException(schema, name.funcName) + } + override def loadFunctionResources(resources: Seq[FunctionResource]): Unit = { val qualifiedName = SnappyExternalCatalog.currentFunctionIdentifier.get() val functionQualifiedName = qualifiedName.unquotedString @@ -779,10 +776,10 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, ContextJarUtils.getDriverJar(qualifiedName.unquotedString) match { case Some(_) => val catalogFunction = try { - externalCatalog.getFunction(schemaName, qualifiedName.funcName) + snappyExternalCatalog.getFunction(schemaName, qualifiedName.funcName) } catch { - case _: AnalysisException => failFunctionLookup(qualifiedName.funcName) - case _: NoSuchPermanentFunctionException => failFunctionLookup(qualifiedName.funcName) + case _: AnalysisException => functionLookupFailure(qualifiedName) + case _: NoSuchPermanentFunctionException => functionLookupFailure(qualifiedName) } removeFromFuncJars(catalogFunction, qualifiedName) case _ => @@ -799,7 +796,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, super.createFunction(funcDefinition, ignoreIfExists) } - override def makeFunctionBuilder(funcName: String, className: String): FunctionBuilder = { + protected def makeFunctionBuilderImpl(funcName: String, className: String): FunctionBuilder = { val uRLClassLoader = ContextJarUtils.getDriverJar(funcName) match { case None => org.apache.spark.util.Utils.getContextOrSparkClassLoader case Some(c) => c @@ -807,7 +804,7 @@ class SnappySessionCatalog(val externalCatalog: SnappyExternalCatalog, val (actualClassName, typeName) = className.splitAt(className.lastIndexOf("__")) UDFFunction.makeFunctionBuilder(funcName, uRLClassLoader.loadClass(actualClassName), - snappySession.sessionState.sqlParser.parseDataType(typeName.stripPrefix("__"))) + parser.parseDataType(typeName.stripPrefix("__"))) } /** diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index ae272083eb..144bb069aa 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -663,14 +663,10 @@ class SnappySessionState(val snappySession: SnappySession) * Internal catalog for managing table and database states. */ override lazy val catalog: SnappySessionCatalog = { - new SnappySessionCatalog( + internals.newSnappySessionCatalog(this, snappySharedState.getExternalCatalogInstance(snappySession), - snappySession, snappySession.sharedState.globalTempViewManager, - functionResourceLoader, - functionRegistry, - conf, - newHadoopConf()) + functionRegistry, conf, newHadoopConf()) } protected[sql] def queryPreparations( diff --git a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala index 324c52c3a7..5d21cb7645 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala @@ -57,7 +57,7 @@ object RuleUtils extends PredicateHelper with SparkSupport { case lr: LogicalRelation if lr.relation.isInstanceOf[PartitionedDataSourceScan] => val (schemaName, table) = JdbcExtendedUtils.getTableWithSchema( lr.relation.asInstanceOf[PartitionedDataSourceScan].table, null, Some(snappySession)) - (lr.asInstanceOf[LogicalPlan], catalog.externalCatalog.getDependentsFromProperties( + (lr.asInstanceOf[LogicalPlan], catalog.snappyExternalCatalog.getDependentsFromProperties( schemaName, table, includeTypes = CatalogObjectType.Index :: Nil) .flatMap(getIndex(catalog, _))) } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index b57f0f0eb7..caba9b6f06 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -43,7 +43,7 @@ object StoreStrategy extends Strategy with SparkSupport { val l = insert.table.asInstanceOf[LogicalRelation] val p = l.relation.asInstanceOf[PlanInsertableRelation] val preAction = if (internals.getOverwriteOption(insert)) () => p.truncate() else () => () - ExecutePlan(p.getInsertPlan(l, planLater(insert.query)), preAction) :: Nil + ExecutePlan(p.getInsertPlan(l, planLater(insert.children.head)), preAction) :: Nil case d@DMLExternalTable(_, storeRelation: LogicalRelation, insertCommand) => ExecutedCommandExec(ExternalTableDMLCmd(storeRelation, insertCommand, d.output)) :: Nil diff --git a/core/src/test/scala/org/apache/spark/sql/store/CatalogConsistencyTest.scala b/core/src/test/scala/org/apache/spark/sql/store/CatalogConsistencyTest.scala index 638f7d9585..af9901a903 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/CatalogConsistencyTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/CatalogConsistencyTest.scala @@ -87,7 +87,7 @@ class CatalogConsistencyTest snc.createTable("column_table1", "column", dataDF.schema, props) // remove the table entry from Hive store but not from store DD - snc.snappySession.sessionCatalog.externalCatalog.dropTable("APP", "COLUMN_TABLE1", + snc.snappySession.sessionCatalog.snappyExternalCatalog.dropTable("APP", "COLUMN_TABLE1", ignoreIfNotExists = false, purge = false) // should throw an exception since the table has been removed from Hive store @@ -113,7 +113,7 @@ class CatalogConsistencyTest dataDF.write.format("column").mode(SaveMode.Append).options(props).saveAsTable("column_table2") // remove the table entry from Hive store but not from store DD - snc.snappySession.sessionCatalog.externalCatalog.dropTable("APP", "COLUMN_TABLE1", + snc.snappySession.sessionCatalog.snappyExternalCatalog.dropTable("APP", "COLUMN_TABLE1", ignoreIfNotExists = false, purge = false) // repair the catalog @@ -153,7 +153,7 @@ class CatalogConsistencyTest routeQueryDisabledConn.createStatement().execute("drop table " + ColumnFormatRelation.columnBatchTableName("app.column_table1")) // remove the table entry from Hive store - snc.snappySession.sessionCatalog.externalCatalog.dropTable("APP", "COLUMN_TABLE1", + snc.snappySession.sessionCatalog.snappyExternalCatalog.dropTable("APP", "COLUMN_TABLE1", ignoreIfNotExists = false, purge = false) // make sure that the table does not exist in Hive metastore @@ -255,7 +255,7 @@ class CatalogConsistencyTest snc.createTable("row_table1", "row", dataDF.schema, props) // remove the table entry from Hive store but not from store DD - snc.snappySession.sessionCatalog.externalCatalog.dropTable("APP", "ROW_TABLE1", + snc.snappySession.sessionCatalog.snappyExternalCatalog.dropTable("APP", "ROW_TABLE1", ignoreIfNotExists = false, purge = false) // should throw an exception since the table has been removed from Hive store @@ -276,7 +276,7 @@ class CatalogConsistencyTest dataDF.write.format("row").mode(SaveMode.Append).options(props).saveAsTable("row_table2") // remove the table entry from Hive store but not from store DD - snc.snappySession.sessionCatalog.externalCatalog.dropTable("APP", "ROW_TABLE1", + snc.snappySession.sessionCatalog.snappyExternalCatalog.dropTable("APP", "ROW_TABLE1", ignoreIfNotExists = false, purge = false) // repair the catalog diff --git a/spark b/spark index 31340de5e6..8a32974919 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 31340de5e6553c12b9d8693adfbcb1aa33d45dcf +Subproject commit 8a3297491952a916154d5bf1d1d7cc32743110e2 From 2f31c8831825ba14243bd64b67180d3f575bfd97 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 1 Apr 2019 15:47:46 +0530 Subject: [PATCH 06/80] fixes --- .../org/apache/spark/sql/internal/Spark210Internals.scala | 4 ++-- .../org/apache/spark/sql/internal/Spark232Internals.scala | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 9b015456f8..a5a20dc905 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -46,7 +46,7 @@ import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} -import org.apache.spark.sql.hive.SnappyHiveExternalCatalog +import org.apache.spark.sql.hive.{SnappyHiveCatalogBase, SnappyHiveExternalCatalog} import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} @@ -568,7 +568,7 @@ final class SnappyCacheManager extends CacheManager { class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) - extends SnappyHiveExternalCatalog { + extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index f8cdae7349..fb1be922a3 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -49,7 +49,7 @@ import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} -import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyHiveExternalCatalog} +import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyHiveCatalogBase, SnappyHiveExternalCatalog} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel @@ -510,7 +510,7 @@ final class SnappyCacheManager extends CacheManager { final class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) - extends SnappyHiveExternalCatalog { + extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) From dbe390ea5fa3eecc26cb6cb5073a5fc010e941aa Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 2 Apr 2019 10:28:41 +0530 Subject: [PATCH 07/80] more compatibility fixes --- .../sql/internal/Spark210Internals.scala | 39 +++++++++-- .../sql/internal/Spark211Internals.scala | 8 +-- .../sql/internal/Spark232Internals.scala | 60 +++++++++++++---- .../sql/catalog/SnappyExternalCatalog.scala | 4 +- .../org/apache/spark/sql/SparkInternals.scala | 7 +- .../sql/hive/SnappyHiveExternalCatalog.scala | 64 +++++++++++++------ .../sql/internal/SnappySessionState.scala | 6 +- 7 files changed, 143 insertions(+), 45 deletions(-) diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index a5a20dc905..a1f86b70f8 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -245,6 +245,10 @@ class Spark210Internals extends SparkInternals { exprId = attr.exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) } + override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { + insert.copy(child = newChild) + } + override def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { @@ -468,9 +472,9 @@ class Spark210Internals extends SparkInternals { override def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] = stat.toMap - override def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog = { - new SnappyHiveExternalCatalogImpl(conf, hadoopConf, createTime) + new SnappyEmbeddedHiveCatalogImpl(conf, hadoopConf, createTime) } override def newSmartConnectorExternalCatalog( @@ -566,10 +570,37 @@ final class SnappyCacheManager extends CacheManager { } } -class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, +class SnappyEmbeddedHiveCatalogImpl(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = super.createDatabase(schemaDefinition, ignoreIfExists) + + override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = super.dropDatabase(schema, ignoreIfNotExists, cascade) + + override protected def baseCreateTable(tableDefinition: CatalogTable, + ignoreIfExists: Boolean): Unit = super.createTable(tableDefinition, ignoreIfExists) + + override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = super.dropTable(schema, table, ignoreIfNotExists, purge) + + override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = + super.alterTable(tableDefinition) + + override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = + super.renameTable(schema, oldName, newName) + + override protected def baseCreateFunction(schema: String, + funcDefinition: CatalogFunction): Unit = super.createFunction(schema, funcDefinition) + + override protected def baseDropFunction(schema: String, name: String): Unit = + super.dropFunction(schema, name) + + override protected def baseRenameFunction(schema: String, oldName: String, + newName: String): Unit = super.renameFunction(schema, oldName, newName) + override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) @@ -599,7 +630,7 @@ class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression]): Seq[CatalogTablePartition] = { - listPartitionsByFilterImpl(schema, table, predicates) + withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, predicates)) } override def createFunction(schema: String, function: CatalogFunction): Unit = diff --git a/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index f27efe93ac..b0ad5e986a 100644 --- a/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -73,9 +73,9 @@ class Spark211Internals extends Spark210Internals { override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = catalogTable.schemaPreservesCase - override def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog = { - new SnappyHiveExternalCatalog211Impl(conf, hadoopConf, createTime) + new SnappyEmbeddedHiveCatalog211Impl(conf, hadoopConf, createTime) } override def newSmartConnectorExternalCatalog( @@ -114,9 +114,9 @@ final class SnappyCacheManager extends CacheManager { } } -final class SnappyHiveExternalCatalog211Impl(conf: SparkConf, +final class SnappyEmbeddedHiveCatalog211Impl(conf: SparkConf, hadoopConf: Configuration, createTime: Long) - extends SnappyHiveExternalCatalogImpl(conf, hadoopConf, createTime) { + extends SnappyEmbeddedHiveCatalogImpl(conf, hadoopConf, createTime) { override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index fb1be922a3..9e1930409d 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -27,7 +27,6 @@ import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.hadoop.conf.Configuration -import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD @@ -54,6 +53,7 @@ import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel import org.apache.spark.util.Utils +import org.apache.spark.{SparkConf, SparkContext} /** * Implementation of [[SparkInternals]] for Spark 2.3.2. @@ -187,6 +187,10 @@ class Spark232Internals extends SparkInternals { exprId = attr.exprId, qualifier = attr.qualifier) } + override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { + insert.copy(query = newChild) + } + override def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { @@ -404,9 +408,9 @@ class Spark232Internals extends SparkInternals { override def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] = stat.toMap(colName, dataType) - override def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog = { - new SnappyHiveExternalCatalogImpl(conf, hadoopConf, createTime) + new SnappyEmbeddedHiveCatalogImpl(conf, hadoopConf, createTime) } override def newSmartConnectorExternalCatalog( @@ -508,10 +512,43 @@ final class SnappyCacheManager extends CacheManager { } } -final class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, +final class SnappyEmbeddedHiveCatalogImpl(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = super.doCreateDatabase(schemaDefinition, ignoreIfExists) + + override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = super.doDropDatabase(schema, ignoreIfNotExists, cascade) + + override protected def baseCreateTable(tableDefinition: CatalogTable, + ignoreIfExists: Boolean): Unit = super.doCreateTable(tableDefinition, ignoreIfExists) + + override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = super.doDropTable(schema, table, ignoreIfNotExists, purge) + + override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = + super.doAlterTable(tableDefinition) + + override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = + super.doRenameTable(schema, oldName, newName) + + override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + SparkSupport.internals().loadDynamicPartitions(this, schema, table, loadPath, partition, + replace, numDP, holdDDLTime) + } + + override protected def baseCreateFunction(schema: String, + funcDefinition: CatalogFunction): Unit = super.doCreateFunction(schema, funcDefinition) + + override protected def baseDropFunction(schema: String, name: String): Unit = + super.doDropFunction(schema, name) + + override protected def baseRenameFunction(schema: String, oldName: String, + newName: String): Unit = super.doRenameFunction(schema, oldName, newName) + override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) @@ -536,10 +573,8 @@ final class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) override protected def doAlterTableStats(schema: String, table: String, - stats: Option[CatalogStatistics]): Unit = stats match { - case None => alterTableStatsImpl(schema, table, None) - case Some(s) => alterTableStatsImpl(schema, table, - Some((s.sizeInBytes, s.rowCount, s.colStats))) + stats: Option[CatalogStatistics]): Unit = { + withHiveExceptionHandling(super.doAlterTableStats(schema, table, stats)) } override def loadDynamicPartitions(schema: String, table: String, loadPath: String, @@ -550,7 +585,8 @@ final class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], defaultTimeZoneId: String): Seq[CatalogTablePartition] = { - listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId) + withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, + predicates, defaultTimeZoneId)) } override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = @@ -559,8 +595,10 @@ final class SnappyHiveExternalCatalogImpl(override val conf: SparkConf, override protected def doDropFunction(schema: String, funcName: String): Unit = dropFunctionImpl(schema, funcName) - override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = - alterFunctionImpl(schema, function) + override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = { + withHiveExceptionHandling(super.doAlterFunction(schema, function)) + SnappySession.clearAllCache() + } override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = renameFunctionImpl(schema, oldName, newName) diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 4c2052f6f3..4bb4a1aeed 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -217,9 +217,11 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { protected def alterTableSchemaImpl(schemaName: String, table: String, newSchema: StructType): Unit = { val catalogTable = getTable(schemaName, table) - alterTable(catalogTable.copy(schema = newSchema)) + alterTableImpl(catalogTable.copy(schema = newSchema)) } + protected def alterTableImpl(table: CatalogTable): Unit + /** * Get all the tables in the catalog skipping given schema names. By default * the inbuilt SYS schema is skipped. diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index c930e456c5..8aceaf24c9 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -221,6 +221,11 @@ trait SparkInternals extends Logging { dataType: DataType = attr.dataType, nullable: Boolean = attr.nullable, metadata: Metadata = attr.metadata): AttributeReference + /** + * Create a copy of [[InsertIntoTable]] plan with a new child. + */ + def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable + /** * Create a new INSERT plan that has a LONG count of rows as its output. */ @@ -424,7 +429,7 @@ trait SparkInternals extends Logging { * Create a new instance of SnappyHiveExternalCatalog. The method overrides in * ExternalCatalog have changed across Spark versions. */ - def newHiveExternalCatalog(conf: SparkConf, hadoopConf: Configuration, + def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog /** diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 96cceb2507..7ed52245b7 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -48,7 +48,6 @@ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.analysis.{NoSuchDatabaseException, NoSuchTableException, TableAlreadyExistsException} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ -import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.util.StringUtils import org.apache.spark.sql.collection.Utils.EMPTY_STRING_ARRAY import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} @@ -135,7 +134,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna /** * Retries on transient disconnect exceptions. */ - private[sql] def withHiveExceptionHandling[T](function: => T, + protected[sql] def withHiveExceptionHandling[T](function: => T, handleDisconnects: Boolean = true): T = synchronized { val skipFlags = GfxdDataDictionary.SKIP_CATALOG_OPS.get() val oldSkipCatalogCalls = skipFlags.skipHiveCatalogCalls @@ -198,6 +197,34 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna } } + // -------------------------------------------------------------------------- + // Base HiveExternalCatalog calls + // -------------------------------------------------------------------------- + + protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit + + protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit + + protected def baseCreateTable(tableDefinition: CatalogTable, ignoreIfExists: Boolean): Unit + + protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit + + protected def baseAlterTable(table: CatalogTable): Unit + + protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit + + protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit + + protected def baseCreateFunction(schema: String, funcDefinition: CatalogFunction): Unit + + protected def baseDropFunction(schema: String, name: String): Unit + + protected def baseRenameFunction(schema: String, oldName: String, newName: String): Unit + // -------------------------------------------------------------------------- // Databases // -------------------------------------------------------------------------- @@ -218,13 +245,13 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna if (ignoreIfExists) return else throw new AnalysisException(s"Schema ${schemaDefinition.name} already exists") } - withHiveExceptionHandling(super.createDatabase(schemaDefinition, ignoreIfExists)) + withHiveExceptionHandling(baseCreateDatabase(schemaDefinition, ignoreIfExists)) } protected def dropDatabaseImpl(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = { if (schema == SYS_SCHEMA) throw new AnalysisException(s"$schema is a system reserved schema") - withHiveExceptionHandling(super.dropDatabase(schema, ignoreIfNotExists, cascade)) + withHiveExceptionHandling(baseDropDatabase(schema, ignoreIfNotExists, cascade)) } // Special in-built SYS schema does not have hive catalog entry so the methods below @@ -368,7 +395,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna } try { - withHiveExceptionHandling(super.createTable(catalogTable, ifExists)) + withHiveExceptionHandling(baseCreateTable(catalogTable, ifExists)) } catch { case _: TableAlreadyExistsException => val objectType = CatalogObjectType.getTableType(tableDefinition) @@ -387,7 +414,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna if (ignoreIfNotExists) return else throw new TableNotFoundException(schema, table) case Some(t) => t } - withHiveExceptionHandling(super.dropTable(schema, table, ignoreIfNotExists = false, purge)) + withHiveExceptionHandling(baseDropTable(schema, table, ignoreIfNotExists = false, purge)) // drop all policies for the table if (Misc.getMemStoreBooting.isRLSEnabled) { @@ -395,7 +422,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna if (policies.nonEmpty) for (policy <- policies) { val schemaName = policy.database val policyName = policy.identifier.table - withHiveExceptionHandling(super.dropTable(schemaName, policyName, + withHiveExceptionHandling(baseDropTable(schemaName, policyName, ignoreIfNotExists = true, purge = false)) invalidate(schemaName -> policyName) } @@ -441,13 +468,13 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna } } - withHiveExceptionHandling(super.alterTable(catalogTable)) + withHiveExceptionHandling(baseAlterTable(catalogTable)) registerCatalogSchemaChange(schemaName -> tableName :: Nil) } protected def renameTableImpl(schema: String, oldName: String, newName: String): Unit = { - withHiveExceptionHandling(super.renameTable(schema, oldName, newName)) + withHiveExceptionHandling(baseRenameTable(schema, oldName, newName)) } /** @@ -566,7 +593,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna val expandedApplyTo = ExternalStoreUtils.getExpandedGranteesIterator(applyTo).toSeq val newProperties = table.properties + (PolicyProperties.expandedPolicyApplyTo -> expandedApplyTo.mkString(",")) - withHiveExceptionHandling(super.alterTable(table.copy(properties = newProperties))) + withHiveExceptionHandling(baseAlterTable(table.copy(properties = newProperties))) } } } @@ -652,7 +679,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna protected def loadDynamicPartitionsImpl(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { - withHiveExceptionHandling(super.loadDynamicPartitions(schema, table, loadPath, partition, + withHiveExceptionHandling(baseLoadDynamicPartitions(schema, table, loadPath, partition, replace, numDP, holdDDLTime)) } @@ -676,27 +703,22 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna withHiveExceptionHandling(super.listPartitions(schema, table, partialSpec)) } - protected def listPartitionsByFilterImpl(schema: String, table: String, - predicates: Seq[Expression]): Seq[CatalogTablePartition] = { - withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, predicates)) - } - // -------------------------------------------------------------------------- // Functions // -------------------------------------------------------------------------- protected def createFunctionImpl(schema: String, funcDefinition: CatalogFunction): Unit = { - withHiveExceptionHandling(super.createFunction(schema, funcDefinition)) + withHiveExceptionHandling(baseCreateFunction(schema, funcDefinition)) SnappySession.clearAllCache() } protected def dropFunctionImpl(schema: String, name: String): Unit = { - withHiveExceptionHandling(super.dropFunction(schema, name)) + withHiveExceptionHandling(baseDropFunction(schema, name)) SnappySession.clearAllCache() } protected def renameFunctionImpl(schema: String, oldName: String, newName: String): Unit = { - withHiveExceptionHandling(super.renameFunction(schema, oldName, newName)) + withHiveExceptionHandling(baseRenameFunction(schema, oldName, newName)) SnappySession.clearAllCache() } @@ -755,7 +777,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna } } -object SnappyHiveExternalCatalog { +object SnappyHiveExternalCatalog extends SparkSupport { @GuardedBy("this") private[this] var instance: SnappyHiveExternalCatalog = _ @@ -789,7 +811,7 @@ object SnappyHiveExternalCatalog { try { // delete the hive scratch directory if it exists FileUtils.deleteDirectory(new java.io.File("./hive")) - instance = new SnappyHiveExternalCatalog(sparkConf, hadoopConf, createTime) + instance = internals.newEmbeddedHiveCatalog(sparkConf, hadoopConf, createTime) } finally { logger.setLevel(previousLevel) log4jLogger.setLevel(log4jLevel) diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index 144bb069aa..e7b56877dc 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -316,7 +316,7 @@ class SnappySessionState(val snappySession: SnappySession) } } - def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { + def apply(plan: LogicalPlan): LogicalPlan = plan.transformUp { case i@PutIntoTable(u: UnresolvedRelation, _) => i.copy(table = EliminateSubqueryAliases(getTable(u))) case d@DMLExternalTable(_, u: UnresolvedRelation, _) => @@ -396,7 +396,7 @@ class SnappySessionState(val snappySession: SnappySession) } object ResolveAliasInGroupBy extends Rule[LogicalPlan] { - def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { + def apply(plan: LogicalPlan): LogicalPlan = plan.transformUp { case p if !p.childrenResolved => p case Aggregate(groups, aggs, child) if aggs.forall(_.resolved) && groups.exists(_.isInstanceOf[UnresolvedAttribute]) => @@ -1286,7 +1286,7 @@ private[sql] final class PreprocessTable(state: SnappySessionState) child = Project(newChildOutput, child)).asInstanceOf[T] case d: DeleteFromTable => d.copy(table = newRelation, child = Project(newChildOutput, child)).asInstanceOf[T] - case i: InsertIntoTable => i.copy(child = Project(newChildOutput, + case i: InsertIntoTable => internals.withNewChild(i, Project(newChildOutput, child)).asInstanceOf[T] } } From d425f8f7a05e89e658946e165de5be7313600de4 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 2 Apr 2019 14:33:59 +0530 Subject: [PATCH 08/80] more fixes --- .../sql/internal/Spark210Internals.scala | 118 +++++++++++++++++- .../sql/internal/Spark232Internals.scala | 5 + .../apache/spark/sql/CachedDataFrame.scala | 6 +- .../apache/spark/sql/SnappyDDLParser.scala | 4 +- .../org/apache/spark/sql/SnappySession.scala | 11 +- .../org/apache/spark/sql/SparkInternals.scala | 11 ++ .../collection/MultiColumnOpenHashSet.scala | 3 +- .../spark/sql/execution/TableExec.scala | 2 +- .../sql/internal/ColumnTableBulkOps.scala | 2 +- .../sql/internal/SnappySessionState.scala | 89 +++---------- .../sql/streaming/SnappySinkCallback.scala | 10 +- .../scala/io/snappydata/SnappyFunSuite.scala | 8 +- 12 files changed, 166 insertions(+), 103 deletions(-) diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index a1f86b70f8..dc606c43bf 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -19,6 +19,7 @@ package org.apache.spark.sql.internal import scala.reflect.ClassTag import scala.util.control.NonFatal +import io.snappydata.Property.HashAggregateSize import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} @@ -29,26 +30,29 @@ import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings +import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, FunctionRegistry, NoSuchTableException, UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateHelper, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartitioning} +import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} -import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} +import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} import org.apache.spark.sql.hive.{SnappyHiveCatalogBase, SnappyHiveExternalCatalog} import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder -import org.apache.spark.sql.sources.{BaseRelation, Filter} +import org.apache.spark.sql.sources.{BaseRelation, Filter, PutIntoTable, ResolveQueryHints} +import org.apache.spark.sql.streaming.StreamingQueryManager import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel import org.apache.spark.{SparkConf, SparkContext, SparkException} @@ -382,6 +386,14 @@ class Spark210Internals extends SparkInternals { LogicalRelation(relation, expectedOutputAttributes, catalogTable) } + override def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], + schema: StructType, isStreaming: Boolean): Dataset[Row] = { + if (isStreaming) { + throw new SparkException(s"Streaming datasets not supported in Spark $version") + } + session.internalCreateDataFrame(catalystRows, schema) + } + override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], metadata: Map[String, String], relation: BaseRelation, @@ -521,6 +533,10 @@ class Spark210Internals extends SparkInternals { override def newJSONOptions(parameters: Map[String, String], session: Option[SparkSession]): JSONOptions = new JSONOptions(parameters) + override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { + new SnappySessionStateImpl(snappySession) + } + override def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { new SparkOptimizer(sessionState.catalog, sessionState.conf, sessionState.experimentalMethods) with DefaultOptimizer { @@ -715,3 +731,97 @@ final class SnappySessionCatalogImpl(override val snappySession: SnappySession, override def makeFunctionBuilder(name: String, functionClassName: String): FunctionBuilder = makeFunctionBuilderImpl(name, functionClassName) } + +class SnappySessionStateImpl(override val snappySession: SnappySession) + extends SessionState(snappySession) with SnappySessionState { + + self => + + protected def getExtendedResolutionRules(analyzer: Analyzer): Seq[Rule[LogicalPlan]] = + AnalyzeCreateTable(snappySession) :: + new PreprocessTable(this) :: + // ResolveRelationsExtended :: + ResolveAliasInGroupBy :: + new FindDataSourceTable(snappySession) :: + DataSourceAnalysis(conf) :: + AnalyzeMutableOperations(snappySession, analyzer) :: + ResolveQueryHints(snappySession) :: + RowLevelSecurity :: + ExternalRelationLimitFetch :: + (if (conf.runSQLonFile) new ResolveDataSource(snappySession) :: + Nil else Nil) + + protected def getExtendedCheckRules: Seq[LogicalPlan => Unit] = { + Seq(ConditionalPreWriteCheck(internals.newPreWriteCheck(self)), PrePutCheck) + } + + override val analyzerPrepareBuilder: () => Analyzer = () => new Analyzer(catalog, conf) { + + def getStrategy(strategy: analyzer.Strategy): Strategy = strategy match { + case analyzer.FixedPoint(_) => fixedPoint + case _ => Once + } + + override lazy val batches: Seq[Batch] = analyzer.batches.map { + case batch if batch.name.equalsIgnoreCase("Resolution") => + Batch(batch.name, getStrategy(batch.strategy), batch.rules.filter(_ match { + case PromoteStrings => if (sqlParser.sqlParser.questionMarkCounter > 0) { + false + } else { + true + } + case _ => true + }): _*) + case batch => Batch(batch.name, getStrategy(batch.strategy), batch.rules: _*) + } + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = + getExtendedResolutionRules(this) + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules + } + + override val analyzerBuilder: () => Analyzer = () => new Analyzer(catalog, conf) { + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = + getExtendedResolutionRules(this) + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules + } + + override val conf: SnappyConf = new SnappyConf(snappySession) + + override val sqlParser: SnappySqlParser = contextFunctions.newSQLParser(snappySession) + + override val streamingQueryManager: StreamingQueryManager = { + // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with + // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This + // implies that Snappydata aggregation optimisation will be turned off for any usage of + // this session including non-streaming queries. + + HashAggregateSize.set(snappySession.sessionState.conf, "-1") + new StreamingQueryManager(snappySession) + } + + /** + * Replaces [[UnresolvedRelation]]s with concrete relations from the catalog. + */ + object ResolveRelationsExtended extends Rule[LogicalPlan] with PredicateHelper { + def getTable(u: UnresolvedRelation): LogicalPlan = { + try { + catalog.lookupRelation(u.tableIdentifier, u.alias) + } catch { + case _: NoSuchTableException => + u.failAnalysis(s"Table not found: ${u.tableIdentifier.unquotedString}") + } + } + + def apply(plan: LogicalPlan): LogicalPlan = plan.transformUp { + case i@PutIntoTable(u: UnresolvedRelation, _) => + i.copy(table = EliminateSubqueryAliases(getTable(u))) + case d@DMLExternalTable(_, u: UnresolvedRelation, _) => + d.copy(query = EliminateSubqueryAliases(getTable(u))) + } + } + +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 9e1930409d..31aa6bdbf9 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -307,6 +307,11 @@ class Spark232Internals extends SparkInternals { LogicalRelation(relation, output, catalogTable, isStreaming) } + override def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], + schema: StructType, isStreaming: Boolean): Dataset[Row] = { + session.internalCreateDataFrame(catalystRows, schema, isStreaming) + } + override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], metadata: Map[String, String], relation: BaseRelation, diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index f70d898e80..3d4169ba3b 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -213,7 +213,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti } private def setPoolForExecution(): Unit = { - var pool = snappySession.sessionState.conf.activeSchedulerPool + var pool = snappySession.sessionState.snappyConf.activeSchedulerPool // Check if it is pruned query, execute it automatically on the low latency pool if (isLowLatencyQuery && pool == "default") { if (snappySession.sparkContext.getPoolForName(Constant.LOW_LATENCY_POOL).isDefined) { @@ -258,7 +258,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti prepared = false // reset the pool if (isLowLatencyQuery) { - val pool = snappySession.sessionState.conf.activeSchedulerPool + val pool = snappySession.sessionState.snappyConf.activeSchedulerPool snappySession.sparkContext.setLocalProperty("spark.scheduler.pool", pool) } // clear the shuffle dependencies asynchronously after the execution. @@ -284,8 +284,6 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti collectInternal().map(boundEnc.fromRow).toArray } - override def withNewExecutionId[T](body: => T): T = withNewExecutionIdTiming(body)._1 - private def withNewExecutionIdTiming[T](body: => T): (T, Long) = if (noSideEffects) { var didPrepare = false try { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index af0950a302..7ed02dc002 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -812,7 +812,9 @@ case class DMLExternalTable( tableName: TableIdentifier, query: LogicalPlan, command: String) - extends LeafNode with Command { + extends Command { + + override def producedAttributes: AttributeSet = outputSet override def innerChildren: Seq[QueryPlan[_]] = Seq(query) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index de596f3083..ac3881b7a2 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -113,7 +113,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo SnappySession.aqpSessionStateClass match { case Some(aqpClass) => aqpClass.getConstructor(classOf[SnappySession]). newInstance(self).asInstanceOf[SnappySessionState] - case None => new SnappySessionState(self) + case None => internals.newSnappySessionState(self) } } @@ -121,7 +121,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo def externalCatalog: SnappyExternalCatalog = sessionState.catalog.snappyExternalCatalog - def snappyParser: SnappyParser = sessionState.sqlParser.sqlParser + def snappyParser: SnappyParser = sessionState.snappySqlParser.sqlParser private[spark] def snappyContextFunctions = sessionState.contextFunctions @@ -202,7 +202,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } final def prepareSQL(sqlText: String): LogicalPlan = { - val logical = sessionState.sqlParser.parsePlan(sqlText, clearExecutionData = true) + val logical = sessionState.snappySqlParser.parsePlan(sqlText, clearExecutionData = true) SparkSession.setActiveSession(this) sessionState.analyzerPrepare.execute(logical) } @@ -622,9 +622,6 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo Dataset.ofRows(self, logicalPlan) } - override def internalCreateDataFrame(catalystRows: RDD[InternalRow], - schema: StructType): DataFrame = super.internalCreateDataFrame(catalystRows, schema) - /** * Create a stratified sample table. * @@ -2016,7 +2013,7 @@ object SnappySession extends Logging { def getPlanCache: Cache[CachedKey, CachedDataFrame] = planCache def sqlPlan(session: SnappySession, sqlText: String): CachedDataFrame = { - val parser = session.sessionState.sqlParser + val parser = session.sessionState.snappySqlParser val sqlShortText = CachedDataFrame.queryStringShortForm(sqlText) val plan = parser.parsePlan(sqlText, clearExecutionData = true) val planCaching = session.planCaching diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 8aceaf24c9..73d9e56bb1 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -346,6 +346,12 @@ trait SparkInternals extends Logging { expectedOutputAttributes: Option[Seq[AttributeReference]], catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation + /** + * Create a DataFrame out of an RDD of InternalRows. + */ + def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], + schema: StructType, isStreaming: Boolean = false): Dataset[Row] + /** * Create a new [[RowDataSourceScanExec]] with the given parameters. */ @@ -493,6 +499,11 @@ trait SparkInternals extends Logging { def newJSONOptions(parameters: Map[String, String], session: Option[SparkSession]): JSONOptions + /** + * Create a new instance of [[SnappySessionState]] appropriate for the current Spark version. + */ + def newSnappySessionState(snappySession: SnappySession): SnappySessionState + /** * Create a new optimizer with extended rules for SnappyData. */ diff --git a/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala b/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala index e1570935a3..c20971ea0e 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala @@ -1214,7 +1214,8 @@ object RowToInternalRow extends BaseGenericInternalRow { converters(ordinal)(row.getAs(ordinal)) } - override def copy(): InternalRow = throw new UnsupportedOperationException("Not implemented") + override def copy(): GenericInternalRow = + throw new UnsupportedOperationException("Not implemented") override def setNullAt(i: Int): Unit = {} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala index f221a354b1..e9bedf3da1 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala @@ -64,7 +64,7 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor with SparkSu // Only one insert plan possible in the plan tree, so no clashes. if (partitioned) { val session = sqlContext.sparkSession.asInstanceOf[SnappySession] - session.sessionState.conf.setExecutionShufflePartitions(numBuckets) + session.sessionState.snappyConf.setExecutionShufflePartitions(numBuckets) } /** Specifies how data is partitioned for the table. */ diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index 42a48be2d2..6723ecde71 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -182,7 +182,7 @@ object ColumnTableBulkOps extends SparkSupport { val session = sparkSession.asInstanceOf[SnappySession] val tableIdent = session.tableIdentifier(resolvedName) val encoder = RowEncoder(schema) - val ds = session.internalCreateDataFrame(session.sparkContext.parallelize( + val ds = internals.internalCreateDataFrame(session, session.sparkContext.parallelize( rows.map(encoder.toRow)), schema) val plan = if (putInto) { PutIntoTable( diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index e7b56877dc..e261ca2a15 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -28,17 +28,16 @@ import com.pivotal.gemfirexd.internal.engine.Misc import com.pivotal.gemfirexd.internal.engine.store.GemFireStore import com.pivotal.gemfirexd.internal.impl.jdbc.Util import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState -import io.snappydata.Property.HashAggregateSize import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} import io.snappydata.{Constant, HintName, Property, QueryHint} import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis -import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, Star, UnresolvedAttribute, UnresolvedRelation} import org.apache.spark.sql.catalyst.expressions.{And, EqualTo, In, _} import org.apache.spark.sql.catalyst.optimizer.{Optimizer, ReorderJoin} +import org.apache.spark.sql.catalyst.parser.ParserInterface import org.apache.spark.sql.catalyst.planning.ExtractEquiJoinKeys import org.apache.spark.sql.catalyst.plans.JoinType import org.apache.spark.sql.catalyst.plans.logical.{Filter => LogicalFilter, _} @@ -59,11 +58,18 @@ import org.apache.spark.streaming.Duration import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.{Partition, SparkConf} +trait SnappySessionState extends SessionState with SnappyStrategies with SparkSupport { -class SnappySessionState(val snappySession: SnappySession) - extends SessionState(snappySession) with SnappyStrategies with SparkSupport { + val snappySession: SnappySession + val analyzerBuilder: () => Analyzer + val analyzerPrepareBuilder: () => Analyzer + val conf: SQLConf + val sqlParser: ParserInterface + val streamingQueryManager: StreamingQueryManager - self => + final def snappyConf: SnappyConf = conf.asInstanceOf[SnappyConf] + + final def snappySqlParser: SnappySqlParser = sqlParser.asInstanceOf[SnappySqlParser] @transient val contextFunctions: SnappyContextFunctions = new SnappyContextFunctions @@ -76,75 +82,13 @@ class SnappySessionState(val snappySession: SnappySession) protected lazy val snappySharedState: SnappySharedState = snappySession.sharedState - override lazy val streamingQueryManager: StreamingQueryManager = { - // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with - // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This - // implies that Snappydata aggregation optimisation will be turned off for any usage of - // this session including non-streaming queries. - - HashAggregateSize.set(snappySession.sessionState.conf, "-1") - new StreamingQueryManager(snappySession) - } - - override lazy val sqlParser: SnappySqlParser = - contextFunctions.newSQLParser(this.snappySession) - private[sql] var disableStoreOptimizations: Boolean = false // Only Avoid rule PromoteStrings that remove ParamLiteral for its type being NullType // Rest all rules, even if redundant, are same as analyzer for maintainability reason - lazy val analyzerPrepare: Analyzer = new Analyzer(catalog, conf) { - - def getStrategy(strategy: analyzer.Strategy): Strategy = strategy match { - case analyzer.FixedPoint(_) => fixedPoint - case _ => Once - } - - override lazy val batches: Seq[Batch] = analyzer.batches.map { - case batch if batch.name.equalsIgnoreCase("Resolution") => - Batch(batch.name, getStrategy(batch.strategy), batch.rules.filter(_ match { - case PromoteStrings => if (sqlParser.sqlParser.questionMarkCounter > 0) { - false - } else { - true - } - case _ => true - }): _*) - case batch => Batch(batch.name, getStrategy(batch.strategy), batch.rules: _*) - } - - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = - getExtendedResolutionRules(this) - - override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules - } - - def getExtendedResolutionRules(analyzer: Analyzer): Seq[Rule[LogicalPlan]] = - AnalyzeCreateTable(snappySession) :: - new PreprocessTable(this) :: - // ResolveRelationsExtended :: - ResolveAliasInGroupBy :: - new FindDataSourceTable(snappySession) :: - DataSourceAnalysis(conf) :: - AnalyzeMutableOperations(snappySession, analyzer) :: - ResolveQueryHints(snappySession) :: - RowLevelSecurity :: - ExternalRelationLimitFetch :: - (if (conf.runSQLonFile) new ResolveDataSource(snappySession) :: - Nil else Nil) - - - def getExtendedCheckRules: Seq[LogicalPlan => Unit] = { - Seq(ConditionalPreWriteCheck(internals.newPreWriteCheck(self)), PrePutCheck) - } - - override lazy val analyzer: Analyzer = new Analyzer(catalog, conf) { + lazy val analyzerPrepare: Analyzer = analyzerPrepareBuilder() - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = - getExtendedResolutionRules(this) - - override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules - } + override lazy val analyzer: Analyzer = analyzerBuilder() override lazy val optimizer: Optimizer = internals.newSparkOptimizer(this) @@ -289,8 +233,6 @@ class SnappySessionState(val snappySession: SnappySession) } } - override lazy val conf: SnappyConf = new SnappyConf(snappySession) - /** * The partition mapping selected for the lead partitioned region in * a collocated chain for current execution @@ -722,7 +664,7 @@ class SnappySessionState(val snappySession: SnappySession) } private[spark] def clearExecutionData(): Unit = { - conf.refreshNumShufflePartitions() + snappyConf.refreshNumShufflePartitions() leaderPartitions.clear() snappySession.clearContext() } @@ -737,8 +679,7 @@ class SnappySessionState(val snappySession: SnappySession) if (linkPartitionsToBuckets || preferPrimaries) { // also set the default shuffle partitions for this execution // to minimize exchange - snappySession.sessionState.conf.setExecutionShufflePartitions( - region.getTotalNumberOfBuckets) + snappyConf.setExecutionShufflePartitions(region.getTotalNumberOfBuckets) } StoreUtils.getPartitionsPartitionedTable(snappySession, pr, linkPartitionsToBuckets, preferPrimaries) diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala b/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala index bfdcb63c3d..0024cf22dd 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala @@ -21,6 +21,7 @@ import java.sql.SQLException import java.util.NoSuchElementException import io.snappydata.Property._ +import io.snappydata.StreamingConstants.EventType._ import io.snappydata.StreamingConstants._ import io.snappydata.util.ServiceUtils import org.apache.log4j.Logger @@ -32,9 +33,6 @@ import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{DataFrame, Dataset, Row, SnappySession, _} import org.apache.spark.storage.StorageLevel import org.apache.spark.util.Utils -import io.snappydata.StreamingConstants.EventType._ -import io.snappydata.util.ServiceUtils -import org.apache.spark.storage.StorageLevel /** * Should be implemented by clients who wants to override default behavior provided by @@ -90,8 +88,8 @@ class SnappyStoreSinkProvider extends StreamSinkProvider with DataSourceRegister } -case class SnappyStoreSink(snappySession: SnappySession, - parameters: Map[String, String], sinkCallback: SnappySinkCallback) extends Sink { +case class SnappyStoreSink(snappySession: SnappySession, parameters: Map[String, String], + sinkCallback: SnappySinkCallback) extends Sink with SparkSupport { override def addBatch(batchId: Long, data: Dataset[Row]): Unit = { val streamQueryId = snappySession.sessionCatalog.formatName(parameters(STREAM_QUERY_ID)) @@ -137,7 +135,7 @@ case class SnappyStoreSink(snappySession: SnappySession, * for a detailed discussion. */ def convert(ds: DataFrame): DataFrame = { - snappySession.internalCreateDataFrame( + internals.internalCreateDataFrame(snappySession, ds.queryExecution.toRdd, StructType(ds.schema.fields)) } diff --git a/core/src/test/scala/io/snappydata/SnappyFunSuite.scala b/core/src/test/scala/io/snappydata/SnappyFunSuite.scala index 442fc68669..347ef0417c 100644 --- a/core/src/test/scala/io/snappydata/SnappyFunSuite.scala +++ b/core/src/test/scala/io/snappydata/SnappyFunSuite.scala @@ -29,14 +29,14 @@ import io.snappydata.util.TestUtils import org.scalatest.Assertions import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} -import org.apache.spark.sql.catalyst.expressions.{Alias, And, AttributeReference, EqualNullSafe, EqualTo, Exists, ExprId, Expression, ListQuery, PredicateHelper, PredicateSubquery, ScalarSubquery} +import org.apache.spark.sql.catalyst.expressions.{Alias, And, AttributeReference, EqualNullSafe, EqualTo, Exists, ExprId, Expression, ListQuery, PredicateHelper, ScalarSubquery} import org.apache.spark.sql.catalyst.plans.logical.{Filter, Join, LogicalPlan, OneRowRelation, Sample} import org.apache.spark.sql.catalyst.util.{sideBySide, stackTraceToString} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils import org.apache.spark.sql.row.SnappyStoreDialect import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{AnalysisException, DataFrame, Dataset, QueryTest, Row, SnappySession} +import org.apache.spark.sql.{AnalysisException, DataFrame, Dataset, QueryTest, Row, SnappySession, SparkSupport} // scalastyle:off import org.scalatest.{BeforeAndAfterAll, FunSuite, Outcome, Retries} // scalastyle:on @@ -206,7 +206,7 @@ abstract class SnappyFunSuite SnappyFunSuite.checkAnswer(df, expectedAnswer) } -object SnappyFunSuite extends Assertions { +object SnappyFunSuite extends Assertions with SparkSupport { def checkAnswer(df: => DataFrame, expectedAnswer: Seq[Row]): Unit = { val analyzedDF = try df catch { case ae: AnalysisException => @@ -252,7 +252,7 @@ object SnappyFunSuite extends Assertions { val rs = stmt.getResultSet val schema = JdbcUtils.getSchema(rs, SnappyStoreDialect) val rows = Utils.resultSetToSparkInternalRows(rs, schema).map(_.copy()).toSeq - session.internalCreateDataFrame(session.sparkContext.makeRDD(rows), schema) + internals.internalCreateDataFrame(session, session.sparkContext.makeRDD(rows), schema) } else { implicit val encoder: ExpressionEncoder[Row] = RowEncoder(StructType(Nil)) session.createDataset[Row](Nil) From 69e896934f582d270d0eea58ace22d22e403370c Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 2 Apr 2019 15:40:04 +0530 Subject: [PATCH 09/80] more fixes --- .../spark/sql/execution/ExistingPlans.scala | 2 ++ .../execution/columnar/ColumnTableScan.scala | 19 ++++++++++++++----- .../sql/execution/row/RowTableScan.scala | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index 0247b21b27..b853c4c3b2 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -66,6 +66,8 @@ private[sql] abstract class PartitionedPhysicalScan( override lazy val metrics: Map[String, SQLMetric] = getMetrics + def metadata: Map[String, String] = Map.empty + private lazy val extraInformation = if (relation != null) { relation.toString } else { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index ccbacc1834..c23cbd2791 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -42,7 +42,7 @@ import io.snappydata.ResultSetWithNull import org.apache.spark.rdd.{RDD, UnionPartition} import org.apache.spark.sql.SnappySession -import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} import org.apache.spark.sql.catalyst.dsl.expressions._ import org.apache.spark.sql.catalyst.expressions._ import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode, ExpressionCanonicalizer} @@ -83,7 +83,15 @@ private[sql] final case class ColumnTableScan( override val nodeName: String = "ColumnTableScan" - override def sameResult(plan: SparkPlan): Boolean = plan match { + lazy val tableIdentifier: Option[TableIdentifier] = baseRelation match { + case null => None + case r => sqlContext match { + case null => None + case c => Some(c.sparkSession.asInstanceOf[SnappySession].tableIdentifier(r.table)) + } + } + + override def equals(obj: Any): Boolean = obj match { case r: ColumnTableScan => r.baseRelation.table == baseRelation.table && r.numBuckets == numBuckets && r.schema == schema case _ => false @@ -132,9 +140,10 @@ private[sql] final case class ColumnTableScan( private lazy val otherRDDsPartitionIndex = rdd.getNumPartitions - - @transient private val session = - Option(sqlContext).map(_.sparkSession.asInstanceOf[SnappySession]) + private def session = sqlContext match { + case null => None + case c => Some(c.sparkSession.asInstanceOf[SnappySession]) + } override def inputRDDs(): Seq[RDD[InternalRow]] = { allRDDs.asInstanceOf[RDD[InternalRow]] :: Nil diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 01f8bef7a5..7e67031c19 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -22,11 +22,13 @@ import com.gemstone.gemfire.internal.shared.ClientSharedData import com.pivotal.gemfirexd.internal.engine.store.{AbstractCompactExecRow, ResultWasNull} import org.apache.spark.rdd.RDD +import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression} import org.apache.spark.sql.catalyst.util.{SerializedArray, SerializedMap, SerializedRow} import org.apache.spark.sql.collection.Utils -import org.apache.spark.sql.execution.{PartitionedDataSourceScan, PartitionedPhysicalScan, SparkPlan} +import org.apache.spark.sql.execution.{PartitionedDataSourceScan, PartitionedPhysicalScan} import org.apache.spark.sql.sources.BaseRelation import org.apache.spark.sql.types._ @@ -55,7 +57,15 @@ private[sql] final case class RowTableScan( override val nodeName: String = "RowTableScan" - override def sameResult(plan: SparkPlan): Boolean = plan match { + lazy val tableIdentifier: Option[TableIdentifier] = baseRelation match { + case null => None + case r => sqlContext match { + case null => None + case c => Some(c.sparkSession.asInstanceOf[SnappySession].tableIdentifier(r.table)) + } + } + + override def equals(obj: Any): Boolean = obj match { case r: RowTableScan => r.table == table && r.numBuckets == numBuckets && r.schema == schema case _ => false } From 35147057d89372aa4f2d2bb1f09335dee7f65c7f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 3 Apr 2019 15:15:02 +0530 Subject: [PATCH 10/80] fixing remaining failures --- build.gradle | 2 +- .../sql/internal/Spark210Internals.scala | 47 ++++++++++++++++--- .../sql/internal/Spark232Internals.scala | 33 ++++++++++++- .../spark/sql/internal/SnappySharedState.java | 3 +- .../apache/spark/sql/SnappyStrategies.scala | 4 +- .../org/apache/spark/sql/SparkInternals.scala | 18 ++++++- .../sql/execution/CodegenSparkFallback.scala | 6 +-- .../sql/streaming/LogicalDStreamPlan.scala | 16 +++---- .../spark/sql/streaming/StreamSqlHelper.scala | 19 ++++---- 9 files changed, 111 insertions(+), 37 deletions(-) diff --git a/build.gradle b/build.gradle index 36fa104077..2c2552ab1e 100644 --- a/build.gradle +++ b/build.gradle @@ -107,7 +107,7 @@ allprojects { sparkOldVersion = '2.1.1' sparkOldDistName = "spark-${sparkOldVersion}-bin-hadoop2.7" - sparkCurrentVersion = '2.3.2' + sparkCurrentVersion = '2.4.0' sparkCurrentDistName = "spark-${sparkCurrentVersion}-bin-hadoop2.7" log4jVersion = '1.2.17' slf4jVersion = '1.7.25' diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index dc606c43bf..d99da70e0c 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -44,17 +44,19 @@ import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartit import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} +import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} -import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec, aggregate} import org.apache.spark.sql.hive.{SnappyHiveCatalogBase, SnappyHiveExternalCatalog} import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter, PutIntoTable, ResolveQueryHints} -import org.apache.spark.sql.streaming.StreamingQueryManager +import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel +import org.apache.spark.streaming.SnappyStreamingContext +import org.apache.spark.streaming.dstream.DStream import org.apache.spark.{SparkConf, SparkContext, SparkException} /** @@ -402,6 +404,16 @@ class Spark210Internals extends SparkInternals { UnknownPartitioning(0), metadata, tableIdentifier) } + override def newCodegenSparkFallback(child: SparkPlan, + session: SnappySession): CodegenSparkFallback = { + new CodegenSparkFallbackImpl(child, session) + } + + override def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], + streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan = { + new LogicalDStreamPlanImpl(output, stream)(streamingSnappy) + } + override def newCatalogDatabase(name: String, description: String, locationUri: String, properties: Map[String, String]): CatalogDatabase = { CatalogDatabase(name, description, locationUri, properties) @@ -499,7 +511,7 @@ class Spark210Internals extends SparkInternals { functionRegistry: FunctionRegistry, conf: SQLConf, hadoopConf: Configuration): SnappySessionCatalog = { new SnappySessionCatalogImpl(sessionState.snappySession, externalCatalog, globalTempViewManager, - sessionState.functionResourceLoader, functionRegistry, sessionState.sqlParser, + sessionState.functionResourceLoader, functionRegistry, sessionState.snappySqlParser, conf, hadoopConf) } @@ -608,6 +620,11 @@ class SnappyEmbeddedHiveCatalogImpl(override val conf: SparkConf, override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = super.renameTable(schema, oldName, newName) + override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + super.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP, holdDDLTime) + } + override protected def baseCreateFunction(schema: String, funcDefinition: CatalogFunction): Unit = super.createFunction(schema, funcDefinition) @@ -789,11 +806,11 @@ class SnappySessionStateImpl(override val snappySession: SnappySession) override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules } - override val conf: SnappyConf = new SnappyConf(snappySession) + override lazy val conf: SnappyConf = new SnappyConf(snappySession) - override val sqlParser: SnappySqlParser = contextFunctions.newSQLParser(snappySession) + override lazy val sqlParser: SnappySqlParser = contextFunctions.newSQLParser(snappySession) - override val streamingQueryManager: StreamingQueryManager = { + override lazy val streamingQueryManager: StreamingQueryManager = { // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This // implies that Snappydata aggregation optimisation will be turned off for any usage of @@ -825,3 +842,21 @@ class SnappySessionStateImpl(override val snappySession: SnappySession) } } + +final class CodegenSparkFallbackImpl(child: SparkPlan, + session: SnappySession) extends CodegenSparkFallback(child, session) { + + override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, + verbose: Boolean, prefix: String): StringBuilder = { + child.generateTreeString(depth, lastChildren, builder, verbose, prefix) + } +} + +final class LogicalDStreamPlanImpl(output: Seq[Attribute], + stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) + extends LogicalDStreamPlan(output, stream)(streamingSnappy) { + + @transient override lazy val statistics: Statistics = Statistics( + sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) + ) +} diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 31aa6bdbf9..de9727ad5d 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -47,11 +47,14 @@ import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunction import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} -import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyHiveCatalogBase, SnappyHiveExternalCatalog} import org.apache.spark.sql.sources.{BaseRelation, Filter} +import org.apache.spark.sql.streaming.LogicalDStreamPlan import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel +import org.apache.spark.streaming.SnappyStreamingContext +import org.apache.spark.streaming.dstream.DStream import org.apache.spark.util.Utils import org.apache.spark.{SparkConf, SparkContext} @@ -324,6 +327,16 @@ class Spark232Internals extends SparkInternals { if (uri.contains("://")) new URI(uri) else new URI("file://" + Paths.get(uri).toAbsolutePath) } + override def newCodegenSparkFallback(child: SparkPlan, + session: SnappySession): CodegenSparkFallback = { + new CodegenSparkFallbackImpl(child, session) + } + + override def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], + streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan = { + new LogicalDStreamPlanImpl(output, stream)(streamingSnappy) + } + override def newCatalogDatabase(name: String, description: String, locationUri: String, properties: Map[String, String]): CatalogDatabase = { CatalogDatabase(name, description, toURI(locationUri), properties) @@ -701,3 +714,21 @@ final class SnappySessionCatalogImpl(override val snappySession: SnappySession, functionRegistry.registerFunction(func, info, builder) } } + +final class CodegenSparkFallbackImpl(child: SparkPlan, + session: SnappySession) extends CodegenSparkFallback(child, session) { + + override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, + verbose: Boolean, prefix: String, addSuffix: Boolean): StringBuilder = { + child.generateTreeString(depth, lastChildren, builder, verbose, prefix, addSuffix) + } +} + +final class LogicalDStreamPlanImpl(output: Seq[Attribute], + stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) + extends LogicalDStreamPlan(output, stream)(streamingSnappy) { + + override def stats: Statistics = Statistics( + sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) + ) +} diff --git a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java index dda9da3b9d..a114eaab4e 100644 --- a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java +++ b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java @@ -158,7 +158,8 @@ public CacheManager cacheManager() { @Override public ExternalCatalog externalCatalog() { if (this.initialized) { - return this.embedCatalog; + // noinspection RedundantCast + return (ExternalCatalog)this.embedCatalog; } else { // in super constructor, no harm in returning super's value at this point return super.externalCatalog(); diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 23337fb664..7b75c0e3e0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -798,7 +798,7 @@ case class CollapseCollocatedPlans(session: SparkSession) * like parameterized literals. */ case class InsertCachedPlanFallback(session: SnappySession, topLevel: Boolean) - extends Rule[SparkPlan] { + extends Rule[SparkPlan] with SparkSupport { private def addFallback(plan: SparkPlan): SparkPlan = { // skip fallback plan when optimizations are already disabled, // or if the plan is not a top-level one e.g. a subquery or inside @@ -808,7 +808,7 @@ case class InsertCachedPlanFallback(session: SnappySession, topLevel: Boolean) else plan match { // TODO: disabled for StreamPlans due to issues but can it require fallback? case _: StreamPlan => plan - case _ => CodegenSparkFallback(plan, session) + case _ => internals.newCodegenSparkFallback(plan, session) } } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 73d9e56bb1..2079ff19c5 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -36,11 +36,14 @@ import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIden import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange -import org.apache.spark.sql.execution.{CacheManager, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.SnappyHiveExternalCatalog import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionCatalog, SnappySessionState} import org.apache.spark.sql.sources.{BaseRelation, Filter} +import org.apache.spark.sql.streaming.LogicalDStreamPlan import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.streaming.SnappyStreamingContext +import org.apache.spark.streaming.dstream.DStream import org.apache.spark.{Logging, SparkConf, SparkContext} /** @@ -350,7 +353,7 @@ trait SparkInternals extends Logging { * Create a DataFrame out of an RDD of InternalRows. */ def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], - schema: StructType, isStreaming: Boolean = false): Dataset[Row] + schema: StructType, isStreaming: Boolean = false): Dataset[Row] /** * Create a new [[RowDataSourceScanExec]] with the given parameters. @@ -360,6 +363,17 @@ trait SparkInternals extends Logging { metadata: Map[String, String], relation: BaseRelation, tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec + /** + * Create a new [[CodegenSparkFallback]] with the given child. + */ + def newCodegenSparkFallback(child: SparkPlan, session: SnappySession): CodegenSparkFallback + + /** + * Create a new [[LogicalDStreamPlan]] with the given parameters. + */ + def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], + streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan + /** * Create a new CatalogDatabase given the parameters. Newer Spark releases require a URI * for locationUri so the given string will be converted to URI for those Spark versions. diff --git a/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala b/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala index 71cfaf0e7b..7e30f79391 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala @@ -35,7 +35,7 @@ import org.apache.spark.sql.{SnappyContext, SnappySession, ThinClientConnectorMo * Catch exceptions in code generation of SnappyData plans and fallback * to Spark plans as last resort (including non-code generated paths). */ -case class CodegenSparkFallback(var child: SparkPlan, +abstract case class CodegenSparkFallback(var child: SparkPlan, @transient session: SnappySession) extends UnaryExecNode { override def output: Seq[Attribute] = child.output @@ -186,10 +186,6 @@ case class CodegenSparkFallback(var child: SparkPlan, def execute(plan: SparkPlan): RDD[InternalRow] = executeWithFallback(_.execute(), plan) - override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], - builder: StringBuilder, verbose: Boolean, prefix: String): StringBuilder = - child.generateTreeString(depth, lastChildren, builder, verbose, prefix) - // override def children: Seq[SparkPlan] = child.children // override private[sql] def metrics = child.metrics diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala b/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala index 740415cc71..01d3763f64 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala @@ -18,26 +18,22 @@ package org.apache.spark.sql.streaming import scala.collection.immutable +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.analysis.MultiInstanceRelation import org.apache.spark.sql.catalyst.expressions.Attribute -import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Statistics} +import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream - -case class LogicalDStreamPlan(output: Seq[Attribute], +abstract case class LogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow]) (val streamingSnappy: SnappyStreamingContext) - extends LogicalPlan with MultiInstanceRelation { + extends LogicalPlan with MultiInstanceRelation with SparkSupport { def newInstance(): LogicalDStreamPlan = - LogicalDStreamPlan(output.map(_.newInstance()), - stream)(streamingSnappy).asInstanceOf[this.type] - - @transient override lazy val statistics = Statistics( - sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) - ) + internals.newLogicalDStreamPlan(output.map(_.newInstance()), + stream, streamingSnappy).asInstanceOf[this.type] def children: immutable.Nil.type = Nil } diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala b/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala index f2d864211e..78b8c5bbce 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala @@ -24,12 +24,12 @@ import org.apache.spark.sql.catalyst.{InternalRow, JavaTypeInference} import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.sources.SchemaRelationProvider import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{AnalysisException, Row} +import org.apache.spark.sql.{AnalysisException, Row, SparkSupport} import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.api.java.JavaDStream import org.apache.spark.streaming.dstream.DStream -object StreamSqlHelper { +object StreamSqlHelper extends SparkSupport { def clearStreams(): Unit = { StreamBaseRelation.clearStreams() @@ -50,7 +50,8 @@ object StreamSqlHelper { catalog.resolveRelation(ssc.snappySession.tableIdentifier(tableName)) match { case lr: LogicalRelation if lr.relation.isInstanceOf[StreamPlan] => val sr = lr.relation.asInstanceOf[StreamPlan] - new SchemaDStream(ssc, LogicalDStreamPlan(sr.schema.toAttributes, sr.rowStream)(ssc)) + new SchemaDStream(ssc, internals.newLogicalDStreamPlan( + sr.schema.toAttributes, sr.rowStream, ssc)) case _ => throw new AnalysisException(s"Table $tableName not a stream table") } @@ -63,16 +64,16 @@ object StreamSqlHelper { stream: DStream[A]): SchemaDStream = { val encoder = ExpressionEncoder[A]() val schema = encoder.schema - val logicalPlan = LogicalDStreamPlan(schema.toAttributes, - stream.map(encoder.toRow(_).copy()))(ssc) + val logicalPlan = internals.newLogicalDStreamPlan(schema.toAttributes, + stream.map(encoder.toRow(_).copy()), ssc) new SchemaDStream(ssc, logicalPlan) } def createSchemaDStream(ssc: SnappyStreamingContext, rowStream: DStream[Row], schema: StructType): SchemaDStream = { val encoder = RowEncoder(schema) - val logicalPlan = LogicalDStreamPlan(schema.toAttributes, - rowStream.map(encoder.toRow(_).copy()))(ssc) + val logicalPlan = internals.newLogicalDStreamPlan(schema.toAttributes, + rowStream.map(encoder.toRow(_).copy()), ssc) new SchemaDStream(ssc, logicalPlan) } @@ -80,8 +81,8 @@ object StreamSqlHelper { rowStream: JavaDStream[_], beanClass: Class[_]): SchemaDStream = { val encoder = ExpressionEncoder.javaBean(beanClass.asInstanceOf[Class[Any]]) val schema = encoder.schema - val logicalPlan = LogicalDStreamPlan(schema.toAttributes, - rowStream.dstream.map(encoder.toRow(_).copy()))(ssc) + val logicalPlan = internals.newLogicalDStreamPlan(schema.toAttributes, + rowStream.dstream.map(encoder.toRow(_).copy()), ssc) new SchemaDStream(ssc, logicalPlan) } } From 4a21c0daee51847dae56c26769ad09edd213a922 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 5 Apr 2019 14:22:37 +0530 Subject: [PATCH 11/80] splitting build for product vs connector - product will always use compatible Spark version but connector can use a different one - added couple of sub-projects (core-product and aqp-product) that will always use the compatible version while connector build can use a different one - cluster will depend on normal build if connector version is same else it will use core-product --- aqp-product/build.gradle | 14 ++ build.gradle | 73 ++++++++-- cluster/build.gradle | 7 +- .../cluster/SplitSnappyClusterDUnitTest.scala | 6 +- compatibility/spark-2.1.0/build.gradle | 28 ++-- compatibility/spark-2.1.1/build.gradle | 28 ++-- compatibility/spark-2.3.2/build.gradle | 28 ++-- core-product/build.gradle | 49 +++++++ core/build.gradle | 131 ++---------------- .../SplitClusterDUnitSecurityTest.scala | 12 +- .../cluster/SplitClusterDUnitTest.scala | 20 +-- .../cluster/SplitClusterDUnitTestBase.scala | 2 +- .../SnappySinkProviderDUnitTest.scala | 6 +- .../sql/catalog/SnappyExternalCatalog.scala | 2 +- .../spark/sql/execution/ExistingPlans.scala | 2 +- settings.gradle | 4 + spark | 2 +- 17 files changed, 207 insertions(+), 207 deletions(-) create mode 100644 aqp-product/build.gradle create mode 100644 core-product/build.gradle diff --git a/aqp-product/build.gradle b/aqp-product/build.gradle new file mode 100644 index 0000000000..b8a48ec743 --- /dev/null +++ b/aqp-product/build.gradle @@ -0,0 +1,14 @@ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' +// fix scala+java mix to all use compileScala which uses correct dependency order +sourceSets.main.scala.srcDirs = [ '../aqp/gemfire-core/src/main/java', '../aqp/src/main/scala' ] +sourceSets.main.java.srcDirs = [] + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compile project(':snappy-core-product_' + scalaBinaryVersion) +} diff --git a/build.gradle b/build.gradle index 2c2552ab1e..00f9c83351 100644 --- a/build.gradle +++ b/build.gradle @@ -101,12 +101,12 @@ allprojects { vendorName = 'SnappyData, Inc.' scalaBinaryVersion = '2.11' scalaVersion = scalaBinaryVersion + '.8' - sparkVersion = rootProject.hasProperty('spark.connector.version') - ? rootProject.property('spark.connector.version') : '2.3.2' + sparkVersion = '2.1.1' + sparkConnectorVersion = rootProject.hasProperty('spark.connector.version') + ? rootProject.property('spark.connector.version') : sparkVersion snappySparkVersion = '2.1.1.4' - sparkOldVersion = '2.1.1' - sparkOldDistName = "spark-${sparkOldVersion}-bin-hadoop2.7" + sparkConnectorDistName = "spark-${sparkConnectorVersion}-bin-hadoop2.7" sparkCurrentVersion = '2.4.0' sparkCurrentDistName = "spark-${sparkCurrentVersion}-bin-hadoop2.7" log4jVersion = '1.2.17' @@ -172,7 +172,7 @@ allprojects { buildIdPrefix = System.env.USER + ' ' sparkDistDir = "${project.gradle.gradleUserHomeDir}/sparkDist" - sparkOldProductDir = "${sparkDistDir}/${sparkOldDistName}" + sparkConnectorProductDir = "${sparkDistDir}/${sparkConnectorDistName}" sparkCurrentProductDir = "${sparkDistDir}/${sparkCurrentDistName}" } @@ -187,13 +187,54 @@ allprojects { } if (rootProject.hasProperty('sparkDistDir')) { sparkDistDir = rootProject.property('sparkDistDir') - sparkOldProductDir = "${sparkDistDir}/${sparkOldDistName}" + sparkConnectorProductDir = "${sparkDistDir}/${sparkConnectorDistName}" sparkCurrentProductDir = "${sparkDistDir}/${sparkCurrentDistName}" } ext { testResultsBase = "${rootProject.buildDir}/tests/snappy" snappyProductDir = "${rootProject.buildDir}/snappy" + + // common libraries used in core and core-product modules + coreLibraries = [ + common: [ + "org.slf4j:slf4j-api:${slf4jVersion}", + "org.slf4j:slf4j-log4j12:${slf4jVersion}", + "org.slf4j:jcl-over-slf4j:${slf4jVersion}", + "org.slf4j:jul-to-slf4j:${slf4jVersion}", + "org.codehaus.janino:janino:${janinoVersion}", + "org.apache.tomcat:tomcat-juli:${tomcatJdbcVersion}", + "org.apache.tomcat:tomcat-jdbc:${tomcatJdbcVersion}", + "com.zaxxer:HikariCP:${hikariCPVersion}", + "org.twitter4j:twitter4j-stream:${twitter4jVersion}", + "org.objenesis:objenesis:${objenesisVersion}", + "com.esotericsoftware:kryo-shaded:${kryoVersion}", + "org.eclipse.collections:eclipse-collections-api:${eclipseCollectionsVersion}", + "org.eclipse.collections:eclipse-collections:${eclipseCollectionsVersion}" + ], + spark: [ + "org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.apache.spark:spark-mllib_${scalaBinaryVersion}:${sparkConnectorVersion}", + "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + ], + sparkProduct: [ + "org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}", + "org.apache.spark:spark-mllib_${scalaBinaryVersion}:${sparkVersion}", + "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + ] + ] } // force same output directory for IDEA and gradle @@ -285,7 +326,7 @@ task cleanDUnit { doLast { file(workingDir).mkdirs() // clean spark cluster directories delete "${snappyProductDir}/work", "${snappyProductDir}/logs" - delete "${sparkOldProductDir}/work", "${sparkOldProductDir}/logs" + delete "${sparkConnectorProductDir}/work", "${sparkConnectorProductDir}/logs" delete "${sparkCurrentProductDir}/work", "${sparkCurrentProductDir}/logs" } } task cleanSecurityDUnit { doLast { @@ -294,7 +335,7 @@ task cleanSecurityDUnit { doLast { file(workingDir).mkdirs() // clean spark cluster directories delete "${snappyProductDir}/work", "${snappyProductDir}/logs" - delete "${sparkOldProductDir}/work", "${sparkOldProductDir}/logs" + delete "${sparkConnectorProductDir}/work", "${sparkConnectorProductDir}/logs" delete "${sparkCurrentProductDir}/work", "${sparkCurrentProductDir}/logs" } } task cleanAllReports { doLast { @@ -738,7 +779,7 @@ gradle.taskGraph.whenReady { graph -> } environment 'SNAPPY_HOME': snappyProductDir, - 'APACHE_SPARK_OLD_HOME': sparkOldProductDir, + 'APACHE_SPARK_HOME': sparkConnectorProductDir, 'APACHE_SPARK_CURRENT_HOME': sparkCurrentProductDir, 'SNAPPY_DIST_CLASSPATH': test.classpath.asPath @@ -1165,18 +1206,20 @@ task jdbcJar { } } +String connectorProjectName = ":compatibility:spark${sparkConnectorVersion}_${scalaBinaryVersion}" + task copyShadowJars { dependsOn jdbcJar - dependsOn ":snappy-core_${scalaBinaryVersion}:shadowJar" + dependsOn connectorProjectName + ':shadowJar' doLast { - def coreProject = project(":snappy-core_${scalaBinaryVersion}") - String coreName = "snappydata-core_${scalaBinaryVersion}-${version}.jar" + def connectorProject = project(connectorProjectName) + String connectorName = "snappydata-spark${sparkConnectorVersion}_${scalaBinaryVersion}-${version}.jar" copy { - from coreProject.shadowJar.destinationDir + from connectorProject.shadowJar.destinationDir into "${rootProject.buildDir}/distributions" - include coreProject.shadowJar.archiveName - rename { filename -> coreName } + include connectorProject.shadowJar.archiveName + rename { filename -> connectorName } } } } diff --git a/cluster/build.gradle b/cluster/build.gradle index 5a362d6389..3b21d90dd0 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -25,6 +25,9 @@ sourceSets.test.scala.srcDirs = [ 'src/test/java', 'src/test/scala', 'src/dunit/ sourceSets.main.java.srcDirs = [] sourceSets.test.java.srcDirs = [ ] +String coreProjectName = sparkVersion == sparkConnectorVersion + ? ':snappy-core_' + scalaBinaryVersion : ':snappy-core-product_' + scalaBinaryVersion + dependencies { compile 'org.scala-lang:scala-library:' + scalaVersion compile 'org.scala-lang:scala-reflect:' + scalaVersion @@ -34,7 +37,7 @@ dependencies { compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compile (project(':snappy-core_' + scalaBinaryVersion)) { + compile (project(coreProjectName)) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -46,7 +49,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(":compatibility:spark${sparkOldVersion}_${scalaBinaryVersion}")) { + compile (project(":compatibility:spark${sparkVersion}_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) diff --git a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala index 214b0fd6d1..c1b4096812 100644 --- a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala +++ b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala @@ -47,7 +47,7 @@ class SplitSnappyClusterDUnitTest(s: String) val currentLocatorPort: Int = ClusterManagerTestBase.locPort - override protected val sparkOldProductDir: String = + override protected val sparkProductDir: String = testObject.getEnvironmentVariable("SNAPPY_HOME") override def beforeClass(): Unit = { @@ -58,13 +58,13 @@ class SplitSnappyClusterDUnitTest(s: String) } super.beforeClass() startNetworkServers() - vm3.invoke(classOf[ClusterManagerTestBase], "startSparkCluster", sparkOldProductDir) + vm3.invoke(classOf[ClusterManagerTestBase], "startSparkCluster", sparkProductDir) } override def afterClass(): Unit = { Array(vm2, vm1, vm0).foreach(_.invoke(getClass, "stopNetworkServers")) ClusterManagerTestBase.stopNetworkServers() - vm3.invoke(classOf[ClusterManagerTestBase], "stopSparkCluster", sparkOldProductDir) + vm3.invoke(classOf[ClusterManagerTestBase], "stopSparkCluster", sparkProductDir) super.afterClass() } diff --git a/compatibility/spark-2.1.0/build.gradle b/compatibility/spark-2.1.0/build.gradle index 701297c8c8..2fe28fde2e 100644 --- a/compatibility/spark-2.1.0/build.gradle +++ b/compatibility/spark-2.1.0/build.gradle @@ -20,23 +20,23 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' ext { - sparkVersion = '2.1.0' + spark210Version = '2.1.0' } dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - compile 'org.slf4j:slf4j-api:' + slf4jVersion - compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark210Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark210Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark210Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark210Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark210Version}") compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" @@ -51,10 +51,6 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - - compile project(':snappy-store:snappydata-store-client') - compile project(':snappy-store:snappydata-store-core') - compile project(':snappy-store:snappydata-store-tools') } task packageScalaDocs(type: Jar, dependsOn: scaladoc) { @@ -68,7 +64,7 @@ if (rootProject.hasProperty('enablePublish')) { } -archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" +archivesBaseName = "snappydata-spark${spark210Version}_${scalaBinaryVersion}" shadowJar { zip64 = true // avoid conflict with the 0.9.2 version in stock Spark @@ -98,7 +94,7 @@ shadowJar { } // write the POM for spark-package -String sparkPackageName = "snappydata-${version}_${sparkVersion}-s_${scalaBinaryVersion}" +String sparkPackageName = "snappydata-${version}_${spark210Version}-s_${scalaBinaryVersion}" task sparkPackagePom(dependsOn: shadowJar) { doLast { file("${rootProject.buildDir}/distributions").mkdirs() diff --git a/compatibility/spark-2.1.1/build.gradle b/compatibility/spark-2.1.1/build.gradle index d6064c0b2a..c007884cec 100644 --- a/compatibility/spark-2.1.1/build.gradle +++ b/compatibility/spark-2.1.1/build.gradle @@ -20,23 +20,23 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' ext { - sparkVersion = '2.1.1' + spark211Version = '2.1.1' } dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - compile 'org.slf4j:slf4j-api:' + slf4jVersion - compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark211Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark211Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark211Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark211Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark211Version}") compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" @@ -59,10 +59,6 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) } - - compile project(':snappy-store:snappydata-store-client') - compile project(':snappy-store:snappydata-store-core') - compile project(':snappy-store:snappydata-store-tools') } task packageScalaDocs(type: Jar, dependsOn: scaladoc) { @@ -76,7 +72,7 @@ if (rootProject.hasProperty('enablePublish')) { } -archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" +archivesBaseName = "snappydata-spark${spark211Version}_${scalaBinaryVersion}" shadowJar { zip64 = true // avoid conflict with the 0.9.2 version in stock Spark @@ -106,7 +102,7 @@ shadowJar { } // write the POM for spark-package -String sparkPackageName = "snappydata-${version}_${sparkVersion}-s_${scalaBinaryVersion}" +String sparkPackageName = "snappydata-${version}_${spark211Version}-s_${scalaBinaryVersion}" task sparkPackagePom(dependsOn: shadowJar) { doLast { file("${rootProject.buildDir}/distributions").mkdirs() diff --git a/compatibility/spark-2.3.2/build.gradle b/compatibility/spark-2.3.2/build.gradle index 9c27eff750..2978b10c52 100644 --- a/compatibility/spark-2.3.2/build.gradle +++ b/compatibility/spark-2.3.2/build.gradle @@ -20,23 +20,23 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' ext { - sparkVersion = '2.3.2' + spark232Version = '2.3.2' } dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - compile 'org.slf4j:slf4j-api:' + slf4jVersion - compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark232Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark232Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark232Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark232Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark232Version}") compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" @@ -51,10 +51,6 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - - compile project(':snappy-store:snappydata-store-client') - compile project(':snappy-store:snappydata-store-core') - compile project(':snappy-store:snappydata-store-tools') } task packageScalaDocs(type: Jar, dependsOn: scaladoc) { @@ -68,7 +64,7 @@ if (rootProject.hasProperty('enablePublish')) { } -archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" +archivesBaseName = "snappydata-spark${spark232Version}_${scalaBinaryVersion}" shadowJar { zip64 = true // avoid conflict with the 0.9.2 version in stock Spark @@ -98,7 +94,7 @@ shadowJar { } // write the POM for spark-package -String sparkPackageName = "snappydata-${version}_${sparkVersion}-s_${scalaBinaryVersion}" +String sparkPackageName = "snappydata-${version}_${spark232Version}-s_${scalaBinaryVersion}" task sparkPackagePom(dependsOn: shadowJar) { doLast { file("${rootProject.buildDir}/distributions").mkdirs() diff --git a/core-product/build.gradle b/core-product/build.gradle new file mode 100644 index 0000000000..b61e1b9d61 --- /dev/null +++ b/core-product/build.gradle @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' +// fix scala+java mix to all use compileScala which uses correct dependency order +sourceSets.main.scala.srcDirs = [ '../core/src/main/java', '../core/src/main/scala' ] +sourceSets.main.java.srcDirs = [] + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compile coreLibraries.common + compile("org.apache.thrift:libthrift:${thriftVersion}") { + exclude(group: 'org.slf4j', module: 'slf4j-api') + } + compile("org.parboiled:parboiled_${scalaBinaryVersion}:${parboiledVersion}") { + exclude(group: 'org.scala-lang', module: 'scala-library') + exclude(group: 'org.scala-lang', module: 'scala-reflect') + exclude(group: 'org.scala-lang', module: 'scala-compiler') + } + compileOnly "com.rabbitmq:amqp-client:${rabbitMqVersion}" + + // always use stock spark so that snappy extensions don't get accidently + // included here in snappy-core code. + compileOnly coreLibraries.sparkProduct + + compile project(':snappy-store:snappydata-store-client') + compile project(':snappy-store:snappydata-store-core') + compile project(':snappy-store:snappydata-store-tools') + compile project(":snappy-jdbc_${scalaBinaryVersion}") + compile project(":snappy-encoders_${scalaBinaryVersion}") +} diff --git a/core/build.gradle b/core/build.gradle index 3bbd176298..59ce0c1f6d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,14 +32,16 @@ dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - compile 'org.slf4j:slf4j-api:' + slf4jVersion - compile 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compile 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compile 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compile group: 'org.codehaus.janino', name: 'janino', version: janinoVersion + compile coreLibraries.common compile("org.apache.thrift:libthrift:${thriftVersion}") { exclude(group: 'org.slf4j', module: 'slf4j-api') } + compile("org.parboiled:parboiled_${scalaBinaryVersion}:${parboiledVersion}") { + exclude(group: 'org.scala-lang', module: 'scala-library') + exclude(group: 'org.scala-lang', module: 'scala-reflect') + exclude(group: 'org.scala-lang', module: 'scala-compiler') + } + compileOnly "com.rabbitmq:amqp-client:${rabbitMqVersion}" // always use stock spark so that snappy extensions don't get accidently // included here in snappy-core code. @@ -54,27 +56,8 @@ dependencies { compile project(':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" } else { - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-mllib_${scalaBinaryVersion}:${sparkVersion}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - testCompile("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}") - testCompile("org.apache.spark:spark-mllib_${scalaBinaryVersion}:${sparkVersion}") - - testCompile "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + compileOnly coreLibraries.spark + testCompile coreLibraries.spark } if (new File(rootDir, 'store/build.gradle').exists()) { @@ -91,31 +74,15 @@ dependencies { compile project(":snappy-jdbc_${scalaBinaryVersion}") compile project(":snappy-encoders_${scalaBinaryVersion}") - compile("org.parboiled:parboiled_${scalaBinaryVersion}:${parboiledVersion}") { - exclude(group: 'org.scala-lang', module: 'scala-library') - exclude(group: 'org.scala-lang', module: 'scala-reflect') - exclude(group: 'org.scala-lang', module: 'scala-compiler') - } - compile "org.apache.tomcat:tomcat-juli:${tomcatJdbcVersion}" - compile "org.apache.tomcat:tomcat-jdbc:${tomcatJdbcVersion}" - compile "com.zaxxer:HikariCP:${hikariCPVersion}" - compile "org.twitter4j:twitter4j-stream:${twitter4jVersion}" - compile "org.objenesis:objenesis:${objenesisVersion}" - compile "com.esotericsoftware:kryo-shaded:${kryoVersion}" - compile "org.eclipse.collections:eclipse-collections-api:${eclipseCollectionsVersion}" - compile "org.eclipse.collections:eclipse-collections:${eclipseCollectionsVersion}" - - compileOnly "com.rabbitmq:amqp-client:${rabbitMqVersion}" - testCompile project(':dunit') testCompile 'org.scala-lang:scala-actors:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" - testCompile("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}:tests") - testCompile("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}:tests") - testCompile("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}:tests") - testCompile("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}:tests") - testCompile("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}:tests") + testCompile("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") + testCompile("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") + testCompile("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") + testCompile("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") + testCompile("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") testRuntime files("${projectDir}/../tests/common/src/main/resources") testRuntime "org.pegdown:pegdown:${pegdownVersion}" @@ -182,7 +149,7 @@ def taskGetApacheSparkDist(String ver, String distName, String prodDir) { } task getApacheSparkDist { - dependsOn taskGetApacheSparkDist(sparkOldVersion, sparkOldDistName, sparkOldProductDir) + dependsOn taskGetApacheSparkDist(sparkConnectorVersion, sparkConnectorDistName, sparkConnectorProductDir) dependsOn taskGetApacheSparkDist(sparkCurrentVersion, sparkCurrentDistName, sparkCurrentProductDir) } @@ -195,71 +162,3 @@ check.dependsOn test, scalaTest, dunitTest if (rootProject.hasProperty('snappydata.enterprise')) { check.dependsOn dunitSecurityTest } - - -archivesBaseName = 'snappydata-core_' + scalaBinaryVersion -shadowJar { - zip64 = true - // avoid conflict with the 0.9.2 version in stock Spark - relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // relocate eclipse collections for possible conflicts with user dependencies - relocate 'org.eclipse.collections', 'io.snappydata.org.eclipse.collections' - // relocate the guava's com.google packages - relocate 'com.google.common', 'io.snappydata.com.google.common' - - mergeServiceFiles() - exclude 'log4j.properties' - - if (rootProject.hasProperty('enablePublish')) { - createdBy = 'SnappyData Build Team' - } else { - createdBy = System.getProperty('user.name') - } - manifest { - attributes( - 'Manifest-Version' : '1.0', - 'Created-By' : createdBy, - 'Title' : "snappydata-core_${scalaBinaryVersion}", - 'Version' : version, - 'Vendor' : vendorName - ) - } -} - -// write the POM for spark-package -String sparkPackageName = "snappydata-${version}-s_${scalaBinaryVersion}" - -task sparkPackagePom(dependsOn: shadowJar) { doLast { - file("${rootProject.buildDir}/distributions").mkdirs() - pom { - project { - groupId 'SnappyDataInc' - artifactId 'snappydata' - version "${version}-s_${scalaBinaryVersion}" - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - } - whenConfigured { p -> p.dependencies.clear() } - }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") - copy { - from "${buildDir}/libs" - into "${rootProject.buildDir}/distributions" - include "${shadowJar.archiveName}" - rename { filename -> "${sparkPackageName}.jar" } - } -} } -task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { - archiveName "${sparkPackageName}.zip" - destinationDir = file("${rootProject.buildDir}/distributions") - outputs.upToDateWhen { false } - - from ("${rootProject.buildDir}/distributions") { - include "${sparkPackageName}.jar" - include "${sparkPackageName}.pom" - } -} diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala index 80cccef173..08d5e55888 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala @@ -120,8 +120,8 @@ class SplitClusterDUnitSecurityTest(s: String) private val jobConfigFile = s"$snappyProductDir/conf/job.config" - override protected val sparkOldProductDir: String = - testObject.getEnvironmentVariable("APACHE_SPARK_OLD_HOME") + override protected val sparkProductDir: String = + testObject.getEnvironmentVariable("APACHE_SPARK_HOME") protected val currentProductDir: String = testObject.getEnvironmentVariable("APACHE_SPARK_CURRENT_HOME") @@ -159,7 +159,7 @@ class SplitClusterDUnitSecurityTest(s: String) |""".stripMargin, s"$confDir/servers") logInfo((snappyProductDir + "/sbin/snappy-start-all.sh").!!) - SplitClusterDUnitSecurityTest.startSparkCluster(sparkOldProductDir) + SplitClusterDUnitSecurityTest.startSparkCluster(sparkProductDir) } def getLdapConf: String = { @@ -175,7 +175,7 @@ class SplitClusterDUnitSecurityTest(s: String) override def afterClass(): Unit = { super.afterClass() - SplitClusterDUnitSecurityTest.stopSparkCluster(sparkOldProductDir) + SplitClusterDUnitSecurityTest.stopSparkCluster(sparkProductDir) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") logInfo((snappyProductDir + "/sbin/snappy-stop-all.sh").!!) @@ -212,7 +212,7 @@ class SplitClusterDUnitSecurityTest(s: String) val props = new Properties() props.setProperty(Attribute.USERNAME_ATTR, jdbcUser1) props.setProperty(Attribute.PASSWORD_ATTR, jdbcUser1) - SplitClusterDUnitTest.invokeSparkShell(snappyProductDir, sparkOldProductDir, + SplitClusterDUnitTest.invokeSparkShell(snappyProductDir, sparkProductDir, locatorClientPort, props) } @@ -221,7 +221,7 @@ class SplitClusterDUnitSecurityTest(s: String) val props = new Properties() props.setProperty(Attribute.USERNAME_ATTR, jdbcUser1) props.setProperty(Attribute.PASSWORD_ATTR, jdbcUser1) - SplitClusterDUnitTest.invokeSparkShellCurrent(snappyProductDir, sparkOldProductDir, + SplitClusterDUnitTest.invokeSparkShellCurrent(snappyProductDir, sparkProductDir, currentProductDir, locatorClientPort, props, vm = null /* SparkContext in current VM */) } diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala index c344d11d3d..e1b6c370d6 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala @@ -74,8 +74,8 @@ class SplitClusterDUnitTest(s: String) private val snappyProductDir = testObject.getEnvironmentVariable("SNAPPY_HOME") - override protected val sparkOldProductDir: String = - testObject.getEnvironmentVariable("APACHE_SPARK_OLD_HOME") + override protected val sparkProductDir: String = + testObject.getEnvironmentVariable("APACHE_SPARK_HOME") protected val currentProductDir: String = testObject.getEnvironmentVariable("APACHE_SPARK_CURRENT_HOME") @@ -106,12 +106,12 @@ class SplitClusterDUnitTest(s: String) |""".stripMargin, s"$confDir/servers") (snappyProductDir + "/sbin/snappy-start-all.sh").!! - vm3.invoke(getClass, "startSparkCluster", sparkOldProductDir) + vm3.invoke(getClass, "startSparkCluster", sparkProductDir) } override def afterClass(): Unit = { super.afterClass() - vm3.invoke(getClass, "stopSparkCluster", sparkOldProductDir) + vm3.invoke(getClass, "stopSparkCluster", sparkProductDir) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") (snappyProductDir + "/sbin/snappy-stop-all.sh").!! @@ -128,12 +128,12 @@ class SplitClusterDUnitTest(s: String) // test to make sure that stock spark-shell works with SnappyData core jar def testSparkShell(): Unit = { - testObject.invokeSparkShell(snappyProductDir, sparkOldProductDir, locatorClientPort, vm = vm3) + testObject.invokeSparkShell(snappyProductDir, sparkProductDir, locatorClientPort, vm = vm3) } // test to make sure that stock spark-shell for latest Spark release works with JDBC pool jar def testSparkShellCurrent(): Unit = { - testObject.invokeSparkShellCurrent(snappyProductDir, sparkOldProductDir, currentProductDir, + testObject.invokeSparkShellCurrent(snappyProductDir, sparkProductDir, currentProductDir, locatorClientPort, new Properties(), vm3) } } @@ -729,12 +729,12 @@ object SplitClusterDUnitTest extends SplitClusterDUnitTestObject { conn.close() } - def invokeSparkShellCurrent(productDir: String, sparkOldProductDir: String, + def invokeSparkShellCurrent(productDir: String, sparkProductDir: String, sparkCurrentProductDir: String, locatorClientPort: Int, props: Properties, vm: VM): Unit = { // stop existing spark cluster and start with current Spark version; stop on vm3 to also close // any existing SparkContext (subsequent tests will need to recreate the SparkContext) - if (vm eq null) stopSparkCluster(sparkOldProductDir) - else vm.invoke(classOf[SplitClusterDUnitTest], "stopSparkCluster", sparkOldProductDir) + if (vm eq null) stopSparkCluster(sparkProductDir) + else vm.invoke(classOf[SplitClusterDUnitTest], "stopSparkCluster", sparkProductDir) startSparkCluster(sparkCurrentProductDir) try { // perform some operations through spark-shell using JDBC pool driver API on current Spark @@ -764,7 +764,7 @@ object SplitClusterDUnitTest extends SplitClusterDUnitTestObject { conn.close() } finally { stopSparkCluster(sparkCurrentProductDir) - startSparkCluster(sparkOldProductDir) + startSparkCluster(sparkProductDir) } } } diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala index 9a9e20e615..c9d9fbf296 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala @@ -69,7 +69,7 @@ trait SplitClusterDUnitTestBase extends Logging { protected def props: Map[String, String] = testObject.props - protected def sparkOldProductDir: String + protected def sparkProductDir: String protected def locatorClientPort: Int diff --git a/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala b/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala index 2f66a49880..61e0d03cbd 100644 --- a/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala +++ b/core/src/dunit/scala/org/apache/spark/sql/streaming/SnappySinkProviderDUnitTest.scala @@ -83,13 +83,13 @@ class SnappySinkProviderDUnitTest(s: String) (snappyProductDir + "/sbin/snappy-start-all.sh").!! - vm.invoke(getClass, "startSparkCluster", sparkOldProductDir) + vm.invoke(getClass, "startSparkCluster", sparkProductDir) } override def afterClass(): Unit = { super.afterClass() - vm.invoke(getClass, "stopSparkCluster", sparkOldProductDir) + vm.invoke(getClass, "stopSparkCluster", sparkProductDir) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") (snappyProductDir + "/sbin/snappy-stop-all.sh").!! @@ -100,7 +100,7 @@ class SnappySinkProviderDUnitTest(s: String) private val snappyProductDir = getEnvironmentVariable("SNAPPY_HOME") - private val sparkOldProductDir = getEnvironmentVariable("APACHE_SPARK_OLD_HOME") + private val sparkProductDir = getEnvironmentVariable("APACHE_SPARK_HOME") def testStructuredStreaming(): Unit = { vm.invoke(getClass, "doTestStructuredStreaming", diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 4bb4a1aeed..6a237b00a5 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -112,7 +112,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } - def getTableOption(schema: String, table: String): Option[CatalogTable] = { + override def getTableOption(schema: String, table: String): Option[CatalogTable] = { try { Some(getTable(schema, table)) } catch { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index b853c4c3b2..5b1a9e575e 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -66,7 +66,7 @@ private[sql] abstract class PartitionedPhysicalScan( override lazy val metrics: Map[String, SQLMetric] = getMetrics - def metadata: Map[String, String] = Map.empty + override def metadata: Map[String, String] = Map.empty private lazy val extraInformation = if (relation != null) { relation.toString diff --git a/settings.gradle b/settings.gradle index 2d8764240b..af1de9addd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -20,6 +20,7 @@ rootProject.name = 'snappydata_' + scalaBinaryVersion include ':snappy-jdbc_' + scalaBinaryVersion include ':snappy-core_' + scalaBinaryVersion +include ':snappy-core-product_' + scalaBinaryVersion include ':snappy-cluster_' + scalaBinaryVersion include ':snappy-launcher' include ':snappy-examples_' + scalaBinaryVersion @@ -35,6 +36,7 @@ include ":compatibility:spark2.3.2_$scalaBinaryVersion" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File project(':snappy-core_' + scalaBinaryVersion).projectDir = "$rootDir/core" as File +project(':snappy-core-product_' + scalaBinaryVersion).projectDir = "$rootDir/core-product" as File project(':snappy-cluster_' + scalaBinaryVersion).projectDir = "$rootDir/cluster" as File project(':snappy-launcher').projectDir = "$rootDir/launcher" as File project(':snappy-examples_' + scalaBinaryVersion).projectDir = "$rootDir/examples" as File @@ -170,7 +172,9 @@ if (new File(rootDir, 'spark-jobserver/build.gradle').exists()) { if (new File(rootDir, 'aqp/build.gradle').exists()) { include ':snappy-aqp_' + scalaBinaryVersion + include ':snappy-aqp-product_' + scalaBinaryVersion project(':snappy-aqp_' + scalaBinaryVersion).projectDir = "$rootDir/aqp" as File + project(':snappy-aqp-product_' + scalaBinaryVersion).projectDir = "$rootDir/aqp-product" as File } if (new File(rootDir, 'snappy-connectors/jdbc-stream-connector/build.gradle').exists()) { diff --git a/spark b/spark index 8a32974919..5209bc244b 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 8a3297491952a916154d5bf1d1d7cc32743110e2 +Subproject commit 5209bc244b94ba6adbda8ab5abb89edc538d0f43 From 55440b3bcb1bdcdbb30ba31c1057fb27edc9f90f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sun, 5 May 2019 13:55:42 +0530 Subject: [PATCH 12/80] update submodule links --- spark | 2 +- store | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spark b/spark index 5209bc244b..e7cfa3cd72 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 5209bc244b94ba6adbda8ab5abb89edc538d0f43 +Subproject commit e7cfa3cd7296ebe2bb996016c484b1e797e4bd14 diff --git a/store b/store index 5fb2755678..309153541d 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 5fb2755678b729d97799de7b9f3f2b35aecf8367 +Subproject commit 309153541de9c0da3fe10342fc6c4649aea43b7d From 4b06b66e8197c1b453db08feab88f928c6720675 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sat, 8 Jun 2019 01:38:38 +0530 Subject: [PATCH 13/80] fixing compilation issues after merge --- .../gemxd/SparkSQLPrepareImpl.scala | 2 +- .../sql/internal/Spark210Internals.scala | 15 ++++++- .../sql/internal/Spark232Internals.scala | 7 ++- .../sql/catalog/SnappyExternalCatalog.scala | 6 +-- .../sql/catalog/impl/StoreHiveCatalog.scala | 9 ++-- .../apache/spark/sql/SnappyDDLParser.scala | 44 ++++++++++++------- .../org/apache/spark/sql/SnappyParser.scala | 15 +++++-- .../org/apache/spark/sql/SnappySession.scala | 24 +++++----- .../org/apache/spark/sql/SparkInternals.scala | 8 +++- .../aggregate/CollectAggregateExec.scala | 2 +- .../org/apache/spark/sql/execution/ddl.scala | 42 ++++++++++++++++-- .../sql/hive/SnappyHiveExternalCatalog.scala | 12 +---- .../sql/internal/SnappySessionCatalog.scala | 5 +-- .../apache/spark/sql/sources/interfaces.scala | 2 +- 14 files changed, 132 insertions(+), 61 deletions(-) diff --git a/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala b/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala index c326505401..03adcaf667 100644 --- a/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala +++ b/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala @@ -68,7 +68,7 @@ class SparkSQLPrepareImpl(val sql: String, val paramLiterals = new mutable.HashSet[ParamLiteral]() SparkSQLPrepareImpl.allParamLiterals(aplan, paramLiterals) if (paramLiterals.size != questionMarkCounter) { - aplan = session.prepareSQL(sql, true) + aplan = session.prepareSQL(sql, skipPromote = true) } aplan } diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 7d9e8c7ced..10d4f5d8d5 100644 --- a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -357,6 +357,11 @@ class Spark210Internals extends SparkInternals { new PlanWithHints(child, hints) } + override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, + seed: Long, child: LogicalPlan): Sample = { + Sample(lowerBound, upperBound, withReplacement, seed, child)(isTableSample = true) + } + override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[BroadcastHint] override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { @@ -603,6 +608,10 @@ class SnappyEmbeddedHiveCatalog21(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { + override def getTableOption(schema: String, table: String): Option[CatalogTable] = { + getTableOptionImpl(schema, table) + } + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = super.createDatabase(schemaDefinition, ignoreIfExists) @@ -680,6 +689,10 @@ class SnappyEmbeddedHiveCatalog21(override val conf: SparkConf, class SmartConnectorExternalCatalog21(override val session: SparkSession) extends SmartConnectorExternalCatalog { + override def getTableOption(schema: String, table: String): Option[CatalogTable] = { + getTableOptionImpl(schema, table) + } + override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) @@ -727,7 +740,7 @@ final class SnappySessionCatalog21(override val snappySession: SnappySession, override val globalTempViewManager: GlobalTempViewManager, override val functionResourceLoader: FunctionResourceLoader, override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, - override val sqlConf: SQLConf, override val hadoopConf: Configuration) + override val sqlConf: SQLConf, hadoopConf: Configuration) extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionResourceLoader, functionRegistry, sqlConf, hadoopConf) with SnappySessionCatalog { diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 473c2a8dbd..ccdcccdf40 100644 --- a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -276,6 +276,11 @@ class Spark232Internals extends SparkInternals { new ResolvedPlanWithHints23(child, hints) } + override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, + seed: Long, child: LogicalPlan): Sample = { + Sample(lowerBound, upperBound, withReplacement, seed, child) + } + override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[ResolvedHint] override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { @@ -688,7 +693,7 @@ final class SnappySessionCatalog23(override val snappySession: SnappySession, override val globalTempViewManager: GlobalTempViewManager, override val functionResourceLoader: FunctionResourceLoader, override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, - override val sqlConf: SQLConf, override val hadoopConf: Configuration) + override val sqlConf: SQLConf, hadoopConf: Configuration) extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionRegistry, sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog { diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index e8bb50f0a2..8926590579 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -111,7 +111,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } - override def getTableOption(schema: String, table: String): Option[CatalogTable] = { + def getTableOptionImpl(schema: String, table: String): Option[CatalogTable] = { try { Some(getTable(schema, table)) } catch { @@ -176,7 +176,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { val dependents = new mutable.ArrayBuffer[CatalogTable] for (dep <- allDependents) { val (depSchema, depTable) = getTableWithSchema(dep, schema) - getTableOption(depSchema, depTable) match { + getTableOptionImpl(depSchema, depTable) match { case None => // skip tables no longer present case Some(t) => val tableType = CatalogObjectType.getTableType(t) @@ -228,7 +228,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { def getAllTables(skipSchemas: Seq[String] = SYS_SCHEMA :: Nil): Seq[CatalogTable] = { listDatabases().flatMap(schema => if (skipSchemas.nonEmpty && skipSchemas.contains(schema)) Nil - else listTables(schema).flatMap(table => getTableOption(schema, table))) + else listTables(schema).flatMap(table => getTableOptionImpl(schema, table))) } /** diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala index 34712f1c5f..777d57a59f 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala @@ -239,13 +239,13 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { } } - case COLUMN_TABLE_SCHEMA => externalCatalog.getTableOption( + case COLUMN_TABLE_SCHEMA => externalCatalog.getTableOptionImpl( formattedSchema, formattedTable) match { case None => null.asInstanceOf[R] case Some(t) => t.schema.json.asInstanceOf[R] } - case GET_TABLE => externalCatalog.getTableOption(formattedSchema, formattedTable) match { + case GET_TABLE => externalCatalog.getTableOptionImpl(formattedSchema, formattedTable) match { case None => null.asInstanceOf[R] case Some(t) => t.asInstanceOf[R] } @@ -318,7 +318,8 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { case REMOVE_TABLE => externalCatalog.dropTable(formattedSchema, formattedTable, ignoreIfNotExists = true, purge = false).asInstanceOf[R] - case GET_COL_TABLE => externalCatalog.getTableOption(formattedSchema, formattedTable) match { + case GET_COL_TABLE => externalCatalog.getTableOptionImpl( + formattedSchema, formattedTable) match { case None => null.asInstanceOf[R] case Some(table) => val qualifiedName = table.identifier.unquotedString @@ -496,7 +497,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { metadata(result.setNames(externalCatalog.listDatabases(pattern(request)).asJava)) case snappydataConstants.CATALOG_GET_TABLE => - externalCatalog.getTableOption(request.getSchemaName, request.getNameOrPattern) match { + externalCatalog.getTableOptionImpl(request.getSchemaName, request.getNameOrPattern) match { case None => metadata(result) case Some(table) => val tableObj = ConnectorExternalCatalog.convertFromCatalogTable(table) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index e399829992..23884ae1d0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -255,7 +255,7 @@ abstract class SnappyDDLParser(session: SparkSession) // DDLs, SET etc final type TableEnd = (Option[String], Option[Map[String, String]], - Array[String], Option[BucketSpec], Option[LogicalPlan]) + Seq[String], Option[BucketSpec], Option[LogicalPlan]) protected final def ifNotExists: Rule1[Boolean] = rule { (IF ~ NOT ~ EXISTS ~ push(true)).? ~> ((o: Any) => o != None) @@ -296,14 +296,16 @@ abstract class SnappyDDLParser(session: SparkSession) // the save mode will be ignore. val mode = if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists CreateTableUsingCommand(tableIdent, None, userSpecifiedSchema, schemaDDL, - provider, mode, options, remaining._3, remaining._4, remaining._5, external == None) + provider, mode, options, remaining._3, remaining._4, remaining._5, external != None) } } protected def createTableLike: Rule1[LogicalPlan] = rule { - CREATE ~ TABLE ~ ifNotExists ~ tableIdentifier ~ LIKE ~ tableIdentifier ~> - ((allowExisting: Boolean, targetIdent: TableIdentifier, sourceIdent: TableIdentifier) => - CreateTableLikeCommand(targetIdent, sourceIdent, allowExisting)) + CREATE ~ TABLE ~ ifNotExists ~ tableIdentifier ~ dataSourceClause ~ LIKE ~ tableIdentifier ~> + ((allowExisting: Boolean, targetIdent: TableIdentifier, ds: (Option[String], + Option[Map[String, String]], Seq[String], Option[BucketSpec]), + sourceIdent: TableIdentifier) => CreateTableUsingLikeCommand( + targetIdent, sourceIdent, allowExisting, ds._1, ds._2, ds._3, ds._4)) } protected final def booleanLiteral: Rule1[Boolean] = rule { @@ -403,17 +405,25 @@ abstract class SnappyDDLParser(session: SparkSession) }) } - protected final def ddlEnd: Rule1[TableEnd] = rule { - ws ~ (USING ~ qualifiedName).? ~ (OPTIONS ~ options).? ~ + protected final def dataSourceClause: Rule1[(Option[String], Option[Map[String, String]], + Seq[String], Option[BucketSpec])] = rule { + (USING ~ qualifiedName).? ~ (OPTIONS ~ options).? ~ (PARTITIONED ~ BY ~ '(' ~ ws ~ (identifier + commaSep) ~ ')' ~ ws).? ~ - bucketSpec.? ~ (AS ~ query).? ~ ws ~ &((';' ~ ws).* ~ EOI) ~> - ((provider: Any, options: Any, parts: Any, buckets: Any, asQuery: Any) => { - val partitions = parts match { - case None => Utils.EMPTY_STRING_ARRAY - case Some(p) => p.asInstanceOf[Seq[String]].toArray - } - (provider, options, partitions, buckets, asQuery).asInstanceOf[TableEnd] - }) + bucketSpec.? ~> ((provider: Any, opts: Any, parts: Any, buckets: Any) => { + val partitions = parts match { + case None => Nil + case Some(p) => p.asInstanceOf[Seq[String]] + } + (provider.asInstanceOf[Option[String]], opts.asInstanceOf[Option[Map[String, String]]], + partitions, buckets.asInstanceOf[Option[BucketSpec]]) + }) + } + + protected final def ddlEnd: Rule1[TableEnd] = rule { + ws ~ dataSourceClause ~ (AS ~ query).? ~ ws ~ &((';' ~ ws).* ~ EOI) ~> + ((ds: (Option[String], Option[Map[String, String]], + Seq[String], Option[BucketSpec]), asQuery: Any) => + (ds._1, ds._2, ds._3, ds._4, asQuery.asInstanceOf[Option[LogicalPlan]])) } protected final def tableEnd1: Rule[StringBuilder :: HNil, @@ -631,8 +641,8 @@ abstract class SnappyDDLParser(session: SparkSession) // for both builtin as well as external implementations val mode = if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists CreateTableUsingCommand(streamIdent, None, specifiedSchema, None, - provider, mode, opts, partitionColumns = Utils.EMPTY_STRING_ARRAY, - bucketSpec = None, query = None, isBuiltIn = true) + provider, mode, opts, partitionColumns = Nil, bucketSpec = None, + query = None, isExternal = false) } } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 610aa0ab28..42b96695a0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -595,7 +595,8 @@ class SnappyParser(session: SnappySession) if (!(fraction >= 0.0 - eps && fraction <= 1.0 + eps)) { throw new ParseException(s"Sampling fraction ($fraction) must be on interval [0, 1]") } - Sample(0.0, fraction, withReplacement = false, (math.random * 1000).toInt, child)(true) + internals.newTableSample(0.0, fraction, withReplacement = false, + (math.random * 1000).toInt, child) } protected final def toDouble(s: String): Double = @@ -637,6 +638,14 @@ class SnappyParser(session: SnappySession) internals.newUnresolvedColumnAliases(optAlias.get._2, internals.newUnresolvedRelation(tableIdent, Some(optAlias.get._1))) } + case u: UnresolvedTableValuedFunction => + assertNoQueryHint(rel, optAlias) + if (optAlias.isEmpty) u + else { + internals.newSubqueryAlias(optAlias.get._1, + internals.newUnresolvedTableValuedFunction(u.functionName, + u.functionArgs, optAlias.get._2)) + } case w@WindowLogicalPlan(_, _, u: UnresolvedRelation, _) => val tableIdent = u.tableIdentifier updatePerTableQueryHint(tableIdent, optAlias) @@ -663,8 +672,8 @@ class SnappyParser(session: SnappySession) protected final def relationLeaf: Rule1[LogicalPlan] = rule { tableIdentifier ~ ( '(' ~ ws ~ (expression * commaSep) ~ ')' ~ ws ~> - ((ident: TableIdentifier, e: Any) => UnresolvedTableValuedFunction( - ident.unquotedString, e.asInstanceOf[Seq[Expression]])) | + ((ident: TableIdentifier, e: Any) => internals.newUnresolvedTableValuedFunction( + ident.unquotedString, e.asInstanceOf[Seq[Expression]], Nil)) | streamWindowOptions.? ~> ((tableIdent: TableIdentifier, window: Any) => window.asInstanceOf[Option[(Duration, Option[Duration])]] match { case None => internals.newUnresolvedRelation(tableIdent, None) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 0906b3a9ae..25f07be16d 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -700,7 +700,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo createTableInternal(tableIdentifier(tableName), SnappyContext.SAMPLE_SOURCE, userSpecifiedSchema = None, schemaDDL = None, if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, - addBaseTableOption(baseTable, samplingOptions), isBuiltIn = true) + addBaseTableOption(baseTable, samplingOptions), isExternal = false) } /** @@ -742,7 +742,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo createTableInternal(tableIdentifier(tableName), SnappyContext.SAMPLE_SOURCE, Some(JdbcExtendedUtils.normalizeSchema(schema)), schemaDDL = None, if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, - addBaseTableOption(baseTable, samplingOptions), isBuiltIn = true) + addBaseTableOption(baseTable, samplingOptions), isExternal = false) } /** @@ -787,7 +787,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo Some(JdbcExtendedUtils.normalizeSchema(inputDataSchema)), schemaDDL = None, if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, addBaseTableOption(baseTable, topkOptions) + - ("key" -> keyColumnName), isBuiltIn = true) + ("key" -> keyColumnName), isExternal = false) } /** @@ -831,7 +831,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo userSpecifiedSchema = None, schemaDDL = None, if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, addBaseTableOption(baseTable, topkOptions) + - ("key" -> keyColumnName), isBuiltIn = true) + ("key" -> keyColumnName), isExternal = false) } /** @@ -883,7 +883,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo allowExisting: Boolean): DataFrame = { createTableInternal(tableIdentifier(tableName), provider, userSpecifiedSchema = None, schemaDDL = None, if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, - options, isBuiltIn = true) + options, isExternal = false) } /** @@ -904,7 +904,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo allowExisting: Boolean): DataFrame = { createTableInternal(tableIdentifier(tableName), provider, userSpecifiedSchema = None, schemaDDL = None, if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, - options, isBuiltIn = false) + options, isExternal = false) } /** @@ -993,7 +993,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo allowExisting: Boolean = false): DataFrame = { createTableInternal(tableIdentifier(tableName), provider, Some(JdbcExtendedUtils.normalizeSchema(schema)), schemaDDL = None, - if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, options, isBuiltIn = true) + if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, options, isExternal = false) } /** @@ -1017,7 +1017,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo options: Map[String, String], allowExisting: Boolean = false): DataFrame = { createTableInternal(tableIdentifier(tableName), provider, Some(schema), schemaDDL = None, - if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, options, isBuiltIn = false) + if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, options, isExternal = true) } /** @@ -1139,7 +1139,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } createTableInternal(tableIdentifier(tableName), provider, userSpecifiedSchema = None, Some(schemaStr), if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists, - options, isBuiltIn = true) + options, isExternal = false) } /** @@ -1209,13 +1209,13 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo schemaDDL: Option[String], mode: SaveMode, options: Map[String, String], - isBuiltIn: Boolean, - partitionColumns: Array[String] = Utils.EMPTY_STRING_ARRAY, + isExternal: Boolean, + partitionColumns: Seq[String] = Nil, bucketSpec: Option[BucketSpec] = None, query: Option[LogicalPlan] = None): DataFrame = { val providerIsBuiltIn = SnappyContext.isBuiltInProvider(provider) if (providerIsBuiltIn) { - if (!isBuiltIn) { + if (isExternal) { throw new AnalysisException(s"CREATE EXTERNAL TABLE or createExternalTable API " + s"used for inbuilt provider '$provider'") } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 0ec09bc53a..c95645feb2 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -30,7 +30,7 @@ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame} import org.apache.spark.sql.catalyst.json.JSONOptions -import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, InsertIntoTable, LogicalPlan, RepartitionByExpression, Statistics, SubqueryAlias} +import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, InsertIntoTable, LogicalPlan, RepartitionByExpression, Sample, Statistics, SubqueryAlias} import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} import org.apache.spark.sql.execution.command.RunnableCommand @@ -311,6 +311,12 @@ trait SparkInternals extends Logging { def newLogicalPlanWithHints(child: LogicalPlan, hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints + /** + * Create a new TABLESAMPLE operator. + */ + def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, + seed: Long, child: LogicalPlan): Sample + /** * Return true if the given LogicalPlan encapsulates a child plan with query hint(s). */ diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala index ec96709d00..d3d5a01af0 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/CollectAggregateExec.scala @@ -31,7 +31,7 @@ import org.apache.spark.sql.{CachedDataFrame, SparkSupport} * an exchange for simple aggregates. */ case class CollectAggregateExec(child: SparkPlan)( - @transient basePlan: SnappyHashAggregateExec) extends UnaryExecNode with SparkSupport { + @transient val basePlan: SnappyHashAggregateExec) extends UnaryExecNode with SparkSupport { override val output: Seq[Attribute] = basePlan.output diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 09cd7fa7b6..c279617002 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -61,16 +61,52 @@ case class CreateTableUsingCommand( provider: String, mode: SaveMode, options: Map[String, String], - partitionColumns: Array[String], + partitionColumns: Seq[String], bucketSpec: Option[BucketSpec], query: Option[LogicalPlan], - isBuiltIn: Boolean) extends RunnableCommand { + isExternal: Boolean) extends RunnableCommand { override def run(sparkSession: SparkSession): Seq[Row] = { val session = sparkSession.asInstanceOf[SnappySession] val allOptions = session.addBaseTableOption(baseTable, options) session.createTableInternal(tableIdent, provider, userSpecifiedSchema, - schemaDDL, mode, allOptions, isBuiltIn, partitionColumns, bucketSpec, query) + schemaDDL, mode, allOptions, isExternal, partitionColumns, bucketSpec, query) + Nil + } +} + +case class CreateTableUsingLikeCommand( + targetTable: TableIdentifier, + sourceTable: TableIdentifier, + allowExisting: Boolean, + provider: Option[String], + options: Option[Map[String, String]], + partitionColumns: Seq[String], + bucketSpec: Option[BucketSpec]) extends RunnableCommand { + + override def run(sparkSession: SparkSession): Seq[Row] = { + val session = sparkSession.asInstanceOf[SnappySession] + val catalog = session.sessionState.catalog + val sourceTableDesc = catalog.getTempViewOrPermanentTableMetadata(sourceTable) + val newProvider = provider match { + case None => + if (sourceTableDesc.tableType == CatalogTableType.VIEW || + sourceTableDesc.provider.isEmpty) { + SnappyParserConsts.DEFAULT_SOURCE + } else { + sourceTableDesc.provider.get + } + case Some(p) => p + } + val newOptions = if (options.isEmpty) sourceTableDesc.storage.properties else options.get + val newPartitionColumns = + if (partitionColumns.isEmpty) sourceTableDesc.partitionColumnNames else partitionColumns + val newBucketSpec = if (bucketSpec.isEmpty) sourceTableDesc.bucketSpec else bucketSpec + + val mode = if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists + session.createTableInternal(targetTable, newProvider, Some(sourceTableDesc.schema), + schemaDDL = None, mode, newOptions, isExternal = false, newPartitionColumns, + newBucketSpec, query = None) Nil } } diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 8c22705dcd..fd62233306 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -82,7 +82,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna val cacheLoader = new CacheLoader[(String, String), CatalogTable]() { override def load(name: (String, String)): CatalogTable = { logDebug(s"Looking up data source for ${name._1}.${name._2}") - withHiveExceptionHandling(SnappyHiveExternalCatalog.super.getTableOption( + withHiveExceptionHandling(SnappyHiveExternalCatalog.super.getTableOptionImpl( name._1, name._2)) match { case None => nonExistentTables.put(name, java.lang.Boolean.TRUE) @@ -398,7 +398,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna protected def dropTableImpl(schema: String, table: String, ignoreIfNotExists: Boolean, purge: Boolean): Unit = { - val tableDefinition = getTableOption(schema, table) match { + val tableDefinition = getTableOptionImpl(schema, table) match { case None => if (ignoreIfNotExists) return else throw new TableNotFoundException(schema, table) case Some(t) => t @@ -518,14 +518,6 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna else withHiveExceptionHandling(cachedCatalogTables.get(name)) } - override def getTableOption(schema: String, table: String): Option[CatalogTable] = { - try { - Some(getTable(schema, table)) - } catch { - case _: TableNotFoundException | _: NoSuchTableException => None - } - } - private def toLowerCase(s: Array[String]): Array[String] = { val r = new Array[String](s.length) for (i <- s.indices) { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index e26909b168..a5077ea924 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -62,7 +62,6 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val functionRegistry: FunctionRegistry val snappySession: SnappySession val sqlConf: SQLConf - val hadoopConf: Configuration val parser: SnappySqlParser /** @@ -332,7 +331,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { if (cascade) { // drop all the tables in order first, dependents followed by others val allTables = snappyExternalCatalog.listTables(schemaName).flatMap( - table => snappyExternalCatalog.getTableOption(schemaName, formatTableName(table))) + table => snappyExternalCatalog.getTableOptionImpl(schemaName, formatTableName(table))) // keep dropping leaves until empty if (allTables.nonEmpty) { // drop streams at the end @@ -450,7 +449,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val table = formatTableName(name.table) checkSchemaPermission(schema, table, defaultUser = null) // resolve the table and destroy underlying storage if possible - snappyExternalCatalog.getTableOption(schema, table) match { + snappyExternalCatalog.getTableOptionImpl(schema, table) match { case None => if (ignoreIfNotExists) return else throw new TableNotFoundException(schema, table) case Some(metadata) => diff --git a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala index f340130078..836638d686 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala @@ -382,7 +382,7 @@ trait NativeTableRowLevelSecurityRelation extends DestroyRelation with RowLevelS _schema = JdbcExtendedUtils.normalizeSchema(JDBCRDD.resolveTable(new JDBCOptions( connProperties.url, table, connProperties.connProps.asScala.toMap))) } else { - session.externalCatalog.getTableOption(schemaName, tableName) match { + session.externalCatalog.getTableOptionImpl(schemaName, tableName) match { case None => _schema = JdbcExtendedUtils.EMPTY_SCHEMA case Some(t) => _schema = t.schema; assert(relationInfoAndRegion ne null) } From b0da14f6dff7ad1e2ddf242419b4c4c9cac2dd7f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 10 Jun 2019 08:10:45 +0530 Subject: [PATCH 14/80] minor changes to names --- .../io/snappydata/sql/catalog/SnappyExternalCatalog.scala | 6 +++--- .../io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala | 8 ++++---- .../apache/spark/sql/hive/SnappyHiveExternalCatalog.scala | 4 ++-- .../apache/spark/sql/internal/SnappySessionCatalog.scala | 4 ++-- .../scala/org/apache/spark/sql/sources/interfaces.scala | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 8926590579..7b74a2a290 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -111,7 +111,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } - def getTableOptionImpl(schema: String, table: String): Option[CatalogTable] = { + def getTableIfExists(schema: String, table: String): Option[CatalogTable] = { try { Some(getTable(schema, table)) } catch { @@ -176,7 +176,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { val dependents = new mutable.ArrayBuffer[CatalogTable] for (dep <- allDependents) { val (depSchema, depTable) = getTableWithSchema(dep, schema) - getTableOptionImpl(depSchema, depTable) match { + getTableIfExists(depSchema, depTable) match { case None => // skip tables no longer present case Some(t) => val tableType = CatalogObjectType.getTableType(t) @@ -228,7 +228,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { def getAllTables(skipSchemas: Seq[String] = SYS_SCHEMA :: Nil): Seq[CatalogTable] = { listDatabases().flatMap(schema => if (skipSchemas.nonEmpty && skipSchemas.contains(schema)) Nil - else listTables(schema).flatMap(table => getTableOptionImpl(schema, table))) + else listTables(schema).flatMap(table => getTableIfExists(schema, table))) } /** diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala index 777d57a59f..d6d9489438 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala @@ -239,13 +239,13 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { } } - case COLUMN_TABLE_SCHEMA => externalCatalog.getTableOptionImpl( + case COLUMN_TABLE_SCHEMA => externalCatalog.getTableIfExists( formattedSchema, formattedTable) match { case None => null.asInstanceOf[R] case Some(t) => t.schema.json.asInstanceOf[R] } - case GET_TABLE => externalCatalog.getTableOptionImpl(formattedSchema, formattedTable) match { + case GET_TABLE => externalCatalog.getTableIfExists(formattedSchema, formattedTable) match { case None => null.asInstanceOf[R] case Some(t) => t.asInstanceOf[R] } @@ -318,7 +318,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { case REMOVE_TABLE => externalCatalog.dropTable(formattedSchema, formattedTable, ignoreIfNotExists = true, purge = false).asInstanceOf[R] - case GET_COL_TABLE => externalCatalog.getTableOptionImpl( + case GET_COL_TABLE => externalCatalog.getTableIfExists( formattedSchema, formattedTable) match { case None => null.asInstanceOf[R] case Some(table) => @@ -497,7 +497,7 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { metadata(result.setNames(externalCatalog.listDatabases(pattern(request)).asJava)) case snappydataConstants.CATALOG_GET_TABLE => - externalCatalog.getTableOptionImpl(request.getSchemaName, request.getNameOrPattern) match { + externalCatalog.getTableIfExists(request.getSchemaName, request.getNameOrPattern) match { case None => metadata(result) case Some(table) => val tableObj = ConnectorExternalCatalog.convertFromCatalogTable(table) diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index fd62233306..6c727a7ad6 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -82,7 +82,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna val cacheLoader = new CacheLoader[(String, String), CatalogTable]() { override def load(name: (String, String)): CatalogTable = { logDebug(s"Looking up data source for ${name._1}.${name._2}") - withHiveExceptionHandling(SnappyHiveExternalCatalog.super.getTableOptionImpl( + withHiveExceptionHandling(SnappyHiveExternalCatalog.super.getTableIfExists( name._1, name._2)) match { case None => nonExistentTables.put(name, java.lang.Boolean.TRUE) @@ -398,7 +398,7 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna protected def dropTableImpl(schema: String, table: String, ignoreIfNotExists: Boolean, purge: Boolean): Unit = { - val tableDefinition = getTableOptionImpl(schema, table) match { + val tableDefinition = getTableIfExists(schema, table) match { case None => if (ignoreIfNotExists) return else throw new TableNotFoundException(schema, table) case Some(t) => t diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index a5077ea924..aa852efc9e 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -331,7 +331,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { if (cascade) { // drop all the tables in order first, dependents followed by others val allTables = snappyExternalCatalog.listTables(schemaName).flatMap( - table => snappyExternalCatalog.getTableOptionImpl(schemaName, formatTableName(table))) + table => snappyExternalCatalog.getTableIfExists(schemaName, formatTableName(table))) // keep dropping leaves until empty if (allTables.nonEmpty) { // drop streams at the end @@ -449,7 +449,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val table = formatTableName(name.table) checkSchemaPermission(schema, table, defaultUser = null) // resolve the table and destroy underlying storage if possible - snappyExternalCatalog.getTableOptionImpl(schema, table) match { + snappyExternalCatalog.getTableIfExists(schema, table) match { case None => if (ignoreIfNotExists) return else throw new TableNotFoundException(schema, table) case Some(metadata) => diff --git a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala index 836638d686..15ecf6fdd0 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala @@ -382,7 +382,7 @@ trait NativeTableRowLevelSecurityRelation extends DestroyRelation with RowLevelS _schema = JdbcExtendedUtils.normalizeSchema(JDBCRDD.resolveTable(new JDBCOptions( connProperties.url, table, connProperties.connProps.asScala.toMap))) } else { - session.externalCatalog.getTableOptionImpl(schemaName, tableName) match { + session.externalCatalog.getTableIfExists(schemaName, tableName) match { case None => _schema = JdbcExtendedUtils.EMPTY_SCHEMA case Some(t) => _schema = t.schema; assert(relationInfoAndRegion ne null) } From 803a902f835f6083b74bc17fdfac9bbd4ca3d09d Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 24 Jun 2019 16:06:16 +0530 Subject: [PATCH 15/80] some build changes --- aqp-product/build.gradle | 18 ++- build.gradle | 124 +++++++++++++++++- cluster/build.gradle | 11 +- compatibility/spark-2.1.0/build.gradle | 76 +---------- compatibility/spark-2.1.1/build.gradle | 88 +------------ compatibility/spark-2.3.2/build.gradle | 76 +---------- core-product/build.gradle | 4 +- core/build.gradle | 5 +- .../apache/spark/sql/CachedDataFrame.scala | 1 - .../apache/spark/sql/store/StoreUtils.scala | 4 +- settings.gradle | 22 +++- store | 2 +- 12 files changed, 178 insertions(+), 253 deletions(-) diff --git a/aqp-product/build.gradle b/aqp-product/build.gradle index b8a48ec743..8648a288fe 100644 --- a/aqp-product/build.gradle +++ b/aqp-product/build.gradle @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + */ apply plugin: 'scala' @@ -10,5 +13,18 @@ dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - compile project(':snappy-core-product_' + scalaBinaryVersion) + compile project(coreProjectName) + compile coreLibraries.sparkProduct } + + +String gitCmd = "git --git-dir=${project.projectDir}/../aqp/.git --work-tree=${project.projectDir}/../aqp" +String gitBranch = "${gitCmd} rev-parse --abbrev-ref HEAD".execute().text.trim() +String commitId = "${gitCmd} rev-parse HEAD".execute().text.trim() +String sourceDate = "${gitCmd} log -n 1 --format=%ai".execute().text.trim() + +createAQPMiscTasks(sourceDate, commitId, gitBranch) + +compileJava.dependsOn createVersionPropertiesFile + +archivesBaseName = "snappydata-aqp-spark${sparkVersion}_${scalaBinaryVersion}" diff --git a/build.gradle b/build.gradle index a932fe0284..862dbd5b54 100644 --- a/build.gradle +++ b/build.gradle @@ -104,13 +104,23 @@ allprojects { } else { productName = 'SnappyData' } + aqpProductName = 'TIBCO ComputeDB AQP' vendorName = 'TIBCO Software Inc.' scalaBinaryVersion = '2.11' scalaVersion = scalaBinaryVersion + '.8' sparkVersion = '2.1.1' + + spark210Version = '2.1.0' + spark211Version = '2.1.1' + spark232Version = '2.3.2' + sparkConnectorVersion = rootProject.hasProperty('spark.connector.version') ? rootProject.property('spark.connector.version') : sparkVersion snappySparkVersion = '2.1.1.6' + coreProjectName = sparkVersion == sparkConnectorVersion + ? ":snappy-core_${scalaBinaryVersion}" : ":snappy-core-product_${scalaBinaryVersion}" + aqpProjectName = sparkVersion == sparkConnectorVersion + ? ":snappy-aqp_${scalaBinaryVersion}" : ":snappy-aqp-product_${scalaBinaryVersion}" sparkConnectorDistName = "spark-${sparkConnectorVersion}-bin-hadoop2.7" sparkCurrentVersion = '2.4.3' @@ -169,6 +179,8 @@ allprojects { buildDate = new Date().format('yyyy-MM-dd HH:mm:ss Z') buildNumber = new Date().format('MMddyy') jdkVersion = System.getProperty('java.version') + clusterType = '' + sparkJobServerVersion = '0.6.2.9' eclipseCollectionsVersion = '9.2.0' fastutilVersion = '8.2.2' @@ -198,6 +210,9 @@ allprojects { sparkConnectorProductDir = "${sparkDistDir}/${sparkConnectorDistName}" sparkCurrentProductDir = "${sparkDistDir}/${sparkCurrentDistName}" } + if (rootProject.hasProperty('clusterType')) { + clusterType = rootProject.property('clusterType') + } ext { testResultsBase = "${rootProject.buildDir}/tests/snappy" @@ -262,7 +277,7 @@ allprojects { def hasAqpProject = new File(rootDir, 'aqp/build.gradle').exists() -def aqpProject = isEnterpriseProduct ? project(":snappy-aqp_${scalaBinaryVersion}") : null +def aqpProject = isEnterpriseProduct ? project(aqpProjectName) : null def hasJdbcConnectorProject = new File(rootDir, 'snappy-connectors/jdbc-stream-connector/build.gradle').exists() def hasGemFireConnectorProject = new File(rootDir, 'snappy-connectors/gemfire-connector/build.gradle').exists() @@ -882,7 +897,7 @@ task product(type: Zip) { if (isEnterpriseProduct) { if (hasAqpProject) { - dependsOn ":snappy-aqp_${scalaBinaryVersion}:jar" + dependsOn "${aqpProjectName}:jar" targetProject = aqpProject } @@ -1264,7 +1279,7 @@ task jdbcJar { } } -String connectorProjectName = ":compatibility:spark${sparkConnectorVersion}_${scalaBinaryVersion}" +String connectorProjectName = ":snappy-core_${scalaBinaryVersion}:spark${sparkConnectorVersion}" task copyShadowJars { dependsOn jdbcJar @@ -1274,7 +1289,7 @@ task copyShadowJars { def connectorProject = project(connectorProjectName) String connectorName = "snappydata-spark${sparkConnectorVersion}_${scalaBinaryVersion}-${version}.jar" if (isEnterpriseProduct) { - connectorName = "TIB_compute-spark-${sparkConnectorVersion}_${scalaBinaryVersion}-${version}.jar" + connectorName = "TIB_compute-spark${sparkConnectorVersion}_${scalaBinaryVersion}-${version}.jar" } copy { from connectorProject.shadowJar.destinationDir @@ -1476,8 +1491,107 @@ task packageVSD { doLast { } } } +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar + +void createCoreJarTasks(String sparkCompatVersion, + String archiveName, String sparkPackageName) { + task shadowJarTask(type: ShadowJar) { + zip64 = true + // avoid conflict with the 0.9.2 version in stock Spark + relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' + // relocate koloboke for possible conflicts with user dependencies + relocate 'com.koloboke', 'io.snappydata.com.koloboke' + // relocate the guava's com.google packages + relocate 'com.google.common', 'io.snappydata.com.google.common' + + mergeServiceFiles() + exclude 'log4j.properties' + + if (rootProject.hasProperty('enablePublish')) { + createdBy = 'SnappyData Build Team' + } else { + createdBy = System.getProperty('user.name') + } + manifest { + attributes( + 'Manifest-Version' : '1.0', + 'Created-By' : createdBy, + 'Title' : archiveName, + 'Version' : version, + 'Vendor' : vendorName + ) + } + } + + // write the POM for spark-package + task sparkPackagePom { doLast { + file("${rootProject.buildDir}/distributions").mkdirs() + pom { + project { + groupId 'SnappyDataInc' + artifactId 'snappydata' + version "${version}-s_${scalaBinaryVersion}" + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + distribution 'repo' + } + } + } + whenConfigured { p -> p.dependencies.clear() } + }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") + copy { + from "${buildDir}/libs" + into "${rootProject.buildDir}/distributions" + include "${shadowJar.archiveName}" + rename { filename -> "${sparkPackageName}.jar" } + } + } } + + task sparkPackage(type: Zip) { + dependsOn shadowJarTask, sparkPackagePom + archiveName = "${sparkPackageName}.zip" + destinationDir = file("${rootProject.buildDir}/distributions") + outputs.upToDateWhen { false } + + from ("${rootProject.buildDir}/distributions") { + include "${sparkPackageName}.jar" + include "${sparkPackageName}.pom" + } + } +} + +void createAQPMiscTasks(String aqpSourceDate, String aqpCommitId, String aqpGitBranch) { + // Creates the version properties file and writes it to the resources dir + task createVersionPropertiesFile(dependsOn: 'processResources') { + def propertiesDir = file("${sourceSets.main.scala.outputDir}/io/snappydata") + outputs.file "${propertiesDir}/SnappyAQPVersion.properties" + inputs.file "${rootProject.projectDir}/build.gradle" + + doLast { + def props = [ + 'Product-Name' : aqpProductName, + 'Product-Version' : version, + 'Build-Id' : buildIdPrefix + buildNumber, + 'Build-Date' : buildDate, + 'Build-Platform' : osName.getName() + osVersion + osArch, + 'Build-Java-Version': jdkVersion, + 'Source-Date' : aqpSourceDate, + 'Source-Revision' : aqpCommitId, + 'Source-Repository' : aqpGitBranch, + 'Cluster-Type' : clusterType + ] + + writeProperties(propertiesDir, 'SnappyAQPVersion.properties', + "Properties that control what version ${aqpProductName} will think it is. " + + "Changing these values may cause ${aqpProductName} to no longer function.", props) + } + } +} + task sparkPackage { - dependsOn ":snappy-core_${scalaBinaryVersion}:sparkPackage" + dependsOn "${connectorProjectName}:sparkPackage" } packagePulse.mustRunAfter product diff --git a/cluster/build.gradle b/cluster/build.gradle index 3b21d90dd0..8a57bcafdc 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -25,9 +25,6 @@ sourceSets.test.scala.srcDirs = [ 'src/test/java', 'src/test/scala', 'src/dunit/ sourceSets.main.java.srcDirs = [] sourceSets.test.java.srcDirs = [ ] -String coreProjectName = sparkVersion == sparkConnectorVersion - ? ':snappy-core_' + scalaBinaryVersion : ':snappy-core-product_' + scalaBinaryVersion - dependencies { compile 'org.scala-lang:scala-library:' + scalaVersion compile 'org.scala-lang:scala-reflect:' + scalaVersion @@ -49,7 +46,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(":compatibility:spark${sparkVersion}_${scalaBinaryVersion}")) { + compile (project(":snappy-core_${scalaBinaryVersion}:spark${sparkVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -57,7 +54,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) } - testCompile (project(path: ':snappy-core_' + scalaBinaryVersion, configuration: 'testOutput')) { + testCompile (project(coreProjectName), configuration: 'testOutput') { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -147,7 +144,7 @@ dependencies { testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" if (new File(rootDir, 'aqp/build.gradle').exists() && rootProject.hasProperty('snappydata.enterprise')) { - testRuntime project(':snappy-aqp_' + scalaBinaryVersion) + testRuntime project(aqpProjectName) } testRuntime files("${projectDir}/../tests/common/src/main/resources") testRuntime "org.pegdown:pegdown:${pegdownVersion}" diff --git a/compatibility/spark-2.1.0/build.gradle b/compatibility/spark-2.1.0/build.gradle index 2fe28fde2e..dfd84ddd95 100644 --- a/compatibility/spark-2.1.0/build.gradle +++ b/compatibility/spark-2.1.0/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -19,10 +19,6 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -ext { - spark210Version = '2.1.0' -} - dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion @@ -40,7 +36,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compile (project(':snappy-core_' + scalaBinaryVersion)) { + compile (project(":snappy-core_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -63,71 +59,7 @@ if (rootProject.hasProperty('enablePublish')) { } } - -archivesBaseName = "snappydata-spark${spark210Version}_${scalaBinaryVersion}" -shadowJar { - zip64 = true - // avoid conflict with the 0.9.2 version in stock Spark - relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // relocate koloboke for possible conflicts with user dependencies - relocate 'com.koloboke', 'io.snappydata.com.koloboke' - // relocate the guava's com.google packages - relocate 'com.google.common', 'io.snappydata.com.google.common' - - mergeServiceFiles() - exclude 'log4j.properties' - - if (rootProject.hasProperty('enablePublish')) { - createdBy = 'SnappyData Build Team' - } else { - createdBy = System.getProperty('user.name') - } - manifest { - attributes( - 'Manifest-Version' : '1.0', - 'Created-By' : createdBy, - 'Title' : archivesBaseName, - 'Version' : version, - 'Vendor' : vendorName - ) - } -} - -// write the POM for spark-package +archivesBaseName = "snappydata-core-compat-spark${spark210Version}_${scalaBinaryVersion}" String sparkPackageName = "snappydata-${version}_${spark210Version}-s_${scalaBinaryVersion}" -task sparkPackagePom(dependsOn: shadowJar) { doLast { - file("${rootProject.buildDir}/distributions").mkdirs() - pom { - project { - groupId 'SnappyDataInc' - artifactId 'snappydata' - version "${version}-s_${scalaBinaryVersion}" - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - } - whenConfigured { p -> p.dependencies.clear() } - }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") - copy { - from "${buildDir}/libs" - into "${rootProject.buildDir}/distributions" - include "${shadowJar.archiveName}" - rename { filename -> "${sparkPackageName}.jar" } - } -} } - -task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { - archiveName "${sparkPackageName}.zip" - destinationDir = file("${rootProject.buildDir}/distributions") - outputs.upToDateWhen { false } - - from ("${rootProject.buildDir}/distributions") { - include "${sparkPackageName}.jar" - include "${sparkPackageName}.pom" - } -} +createCoreJarTasks(spark210Version, archivesBaseName, sparkPackageName) diff --git a/compatibility/spark-2.1.1/build.gradle b/compatibility/spark-2.1.1/build.gradle index c007884cec..74797035e6 100644 --- a/compatibility/spark-2.1.1/build.gradle +++ b/compatibility/spark-2.1.1/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -19,10 +19,6 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -ext { - spark211Version = '2.1.1' -} - dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion @@ -40,7 +36,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compile (project(':snappy-core_' + scalaBinaryVersion)) { + compile (project(":snappy-core_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -51,7 +47,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(':compatibility:spark2.1.0_' + scalaBinaryVersion)) { + compile (project(":snappy-core_${scalaBinaryVersion}:spark${spark210Version}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -61,81 +57,7 @@ dependencies { } } -task packageScalaDocs(type: Jar, dependsOn: scaladoc) { - classifier = 'javadoc' - from scaladoc -} -if (rootProject.hasProperty('enablePublish')) { - artifacts { - archives packageScalaDocs, packageSources - } -} - - -archivesBaseName = "snappydata-spark${spark211Version}_${scalaBinaryVersion}" -shadowJar { - zip64 = true - // avoid conflict with the 0.9.2 version in stock Spark - relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // relocate koloboke for possible conflicts with user dependencies - relocate 'com.koloboke', 'io.snappydata.com.koloboke' - // relocate the guava's com.google packages - relocate 'com.google.common', 'io.snappydata.com.google.common' - - mergeServiceFiles() - exclude 'log4j.properties' - - if (rootProject.hasProperty('enablePublish')) { - createdBy = 'SnappyData Build Team' - } else { - createdBy = System.getProperty('user.name') - } - manifest { - attributes( - 'Manifest-Version' : '1.0', - 'Created-By' : createdBy, - 'Title' : archivesBaseName, - 'Version' : version, - 'Vendor' : vendorName - ) - } -} - -// write the POM for spark-package +archivesBaseName = "snappydata-core-compat-spark${spark211Version}_${scalaBinaryVersion}" String sparkPackageName = "snappydata-${version}_${spark211Version}-s_${scalaBinaryVersion}" -task sparkPackagePom(dependsOn: shadowJar) { doLast { - file("${rootProject.buildDir}/distributions").mkdirs() - pom { - project { - groupId 'SnappyDataInc' - artifactId 'snappydata' - version "${version}-s_${scalaBinaryVersion}" - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - } - whenConfigured { p -> p.dependencies.clear() } - }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") - copy { - from "${buildDir}/libs" - into "${rootProject.buildDir}/distributions" - include "${shadowJar.archiveName}" - rename { filename -> "${sparkPackageName}.jar" } - } -} } - -task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { - archiveName "${sparkPackageName}.zip" - destinationDir = file("${rootProject.buildDir}/distributions") - outputs.upToDateWhen { false } - - from ("${rootProject.buildDir}/distributions") { - include "${sparkPackageName}.jar" - include "${sparkPackageName}.pom" - } -} +createCoreJarTasks(spark211Version, archivesBaseName, sparkPackageName) diff --git a/compatibility/spark-2.3.2/build.gradle b/compatibility/spark-2.3.2/build.gradle index 2978b10c52..a88e177494 100644 --- a/compatibility/spark-2.3.2/build.gradle +++ b/compatibility/spark-2.3.2/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -19,10 +19,6 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -ext { - spark232Version = '2.3.2' -} - dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion @@ -40,7 +36,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compile (project(':snappy-core_' + scalaBinaryVersion)) { + compile (project(":snappy-core_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -63,71 +59,7 @@ if (rootProject.hasProperty('enablePublish')) { } } - -archivesBaseName = "snappydata-spark${spark232Version}_${scalaBinaryVersion}" -shadowJar { - zip64 = true - // avoid conflict with the 0.9.2 version in stock Spark - relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // relocate koloboke for possible conflicts with user dependencies - relocate 'com.koloboke', 'io.snappydata.com.koloboke' - // relocate the guava's com.google packages - relocate 'com.google.common', 'io.snappydata.com.google.common' - - mergeServiceFiles() - exclude 'log4j.properties' - - if (rootProject.hasProperty('enablePublish')) { - createdBy = 'SnappyData Build Team' - } else { - createdBy = System.getProperty('user.name') - } - manifest { - attributes( - 'Manifest-Version' : '1.0', - 'Created-By' : createdBy, - 'Title' : archivesBaseName, - 'Version' : version, - 'Vendor' : vendorName - ) - } -} - -// write the POM for spark-package +archivesBaseName = "snappydata-core-compat-spark${spark232Version}_${scalaBinaryVersion}" String sparkPackageName = "snappydata-${version}_${spark232Version}-s_${scalaBinaryVersion}" -task sparkPackagePom(dependsOn: shadowJar) { doLast { - file("${rootProject.buildDir}/distributions").mkdirs() - pom { - project { - groupId 'SnappyDataInc' - artifactId 'snappydata' - version "${version}-s_${scalaBinaryVersion}" - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - } - whenConfigured { p -> p.dependencies.clear() } - }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") - copy { - from "${buildDir}/libs" - into "${rootProject.buildDir}/distributions" - include "${shadowJar.archiveName}" - rename { filename -> "${sparkPackageName}.jar" } - } -} } - -task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { - archiveName "${sparkPackageName}.zip" - destinationDir = file("${rootProject.buildDir}/distributions") - outputs.upToDateWhen { false } - - from ("${rootProject.buildDir}/distributions") { - include "${sparkPackageName}.jar" - include "${sparkPackageName}.pom" - } -} +createCoreJarTasks(spark232Version, archivesBaseName, sparkPackageName) diff --git a/core-product/build.gradle b/core-product/build.gradle index b61e1b9d61..710648c051 100644 --- a/core-product/build.gradle +++ b/core-product/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -47,3 +47,5 @@ dependencies { compile project(":snappy-jdbc_${scalaBinaryVersion}") compile project(":snappy-encoders_${scalaBinaryVersion}") } + +archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" diff --git a/core/build.gradle b/core/build.gradle index 59ce0c1f6d..5eb7625df9 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -84,6 +84,7 @@ dependencies { testCompile("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") testCompile("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") + testRuntime project(":snappy-core_${scalaBinaryVersion}:spark${sparkConnectorVersion}") testRuntime files("${projectDir}/../tests/common/src/main/resources") testRuntime "org.pegdown:pegdown:${pegdownVersion}" } @@ -162,3 +163,5 @@ check.dependsOn test, scalaTest, dunitTest if (rootProject.hasProperty('snappydata.enterprise')) { check.dependsOn dunitSecurityTest } + +archivesBaseName = "snappydata-core-spark${sparkConnectorVersion}_${scalaBinaryVersion}" diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index 5042123f1f..37712b7fef 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -223,7 +223,6 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti snappySession.sparkContext.setLocalProperty("spark.scheduler.pool", pool) } - private def prepareForCollect(): Boolean = { if (prepared) return false if (isCached) { diff --git a/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala b/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala index 6b43523e98..1bbec3e2db 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala @@ -69,8 +69,8 @@ object StoreUtils { val GEM_PERSISTENT = "PERSISTENT" val GEM_SERVER_GROUPS = "SERVER GROUPS" val GEM_EXPIRE = "EXPIRE" - val GEM_OVERFLOW = "EVICTACTION OVERFLOW " - val GEM_HEAPPERCENT = "EVICTION BY LRUHEAPPERCENT " + val GEM_OVERFLOW = "EVICTACTION OVERFLOW" + val GEM_HEAPPERCENT = "EVICTION BY LRUHEAPPERCENT" val PRIMARY_KEY = "PRIMARY KEY" val LRUCOUNT = "LRUCOUNT" diff --git a/settings.gradle b/settings.gradle index af1de9addd..b67a72f042 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -30,9 +30,9 @@ include ':snappy-compatibility-tests_' + scalaBinaryVersion include ':snappy-encoders_' + scalaBinaryVersion // compatibility modules for all supported Spark releases -include ":compatibility:spark2.1.0_$scalaBinaryVersion" -include ":compatibility:spark2.1.1_$scalaBinaryVersion" -include ":compatibility:spark2.3.2_$scalaBinaryVersion" +include ":snappy-core_${scalaBinaryVersion}:spark2.1.0" +include ":snappy-core_${scalaBinaryVersion}:spark2.1.1" +include ":snappy-core_${scalaBinaryVersion}:spark2.3.2" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File project(':snappy-core_' + scalaBinaryVersion).projectDir = "$rootDir/core" as File @@ -44,9 +44,9 @@ project(':snappy-dtests_' + scalaBinaryVersion).projectDir = "$rootDir/dtests" a project(':snappy-compatibility-tests_' + scalaBinaryVersion).projectDir = "$rootDir/compatibilityTests" as File project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoders" as File -project(":compatibility:spark2.1.0_$scalaBinaryVersion").projectDir = "$rootDir/compatibility/spark-2.1.0" as File -project(":compatibility:spark2.1.1_$scalaBinaryVersion").projectDir = "$rootDir/compatibility/spark-2.1.1" as File -project(":compatibility:spark2.3.2_$scalaBinaryVersion").projectDir = "$rootDir/compatibility/spark-2.3.2" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.1.0") = "$rootDir/compatibility/spark-2.1.0" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.1.1") = "$rootDir/compatibility/spark-2.1.1" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.3.2") = "$rootDir/compatibility/spark-2.3.2" as File if (new File(rootDir, 'spark/build.gradle').exists()) { include ':snappy-spark' @@ -175,6 +175,14 @@ if (new File(rootDir, 'aqp/build.gradle').exists()) { include ':snappy-aqp-product_' + scalaBinaryVersion project(':snappy-aqp_' + scalaBinaryVersion).projectDir = "$rootDir/aqp" as File project(':snappy-aqp-product_' + scalaBinaryVersion).projectDir = "$rootDir/aqp-product" as File + + // compatibility modules for all supported Spark releases + include ":snappy-aqp_${scalaBinaryVersion}:spark2.1.0" + include ":snappy-aqp_${scalaBinaryVersion}:spark2.1.1" + include ":snappy-aqp_${scalaBinaryVersion}:spark2.3.2" + project(":snappy-aqp_${scalaBinaryVersion}:spark2.1.0").projectDir = "$rootDir/aqp/compatibility/spark-2.1.0" as File + project(":snappy-aqp_${scalaBinaryVersion}:spark2.1.1").projectDir = "$rootDir/aqp/compatibility/spark-2.1.1" as File + project(":snappy-aqp_${scalaBinaryVersion}:spark2.3.2").projectDir = "$rootDir/aqp/compatibility/spark-2.3.2" as File } if (new File(rootDir, 'snappy-connectors/jdbc-stream-connector/build.gradle').exists()) { diff --git a/store b/store index 69807ff813..6137ab70f9 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 69807ff813eaf8e8e3da8f165352f9e1ea2c37d8 +Subproject commit 6137ab70f95c334fc1d0bca140dda47fda4160a7 From d3c5fa7324e7dae4d244231d1efaa95d264d9f8d Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 25 Jun 2019 13:36:13 +0530 Subject: [PATCH 16/80] more build cleanups --- aqp-product/build.gradle | 4 +- build.gradle | 97 +++--------------- cluster/build.gradle | 27 +---- compatibility/spark-2.1.0/build.gradle | 4 +- compatibility/spark-2.1.1/build.gradle | 4 +- compatibility/spark-2.3.2/build.gradle | 4 +- core/build.gradle | 67 ++++++++++++ .../org/apache/spark/sql/SnappySession.scala | 33 +----- .../org/apache/spark/sql/SparkSupport.scala | 37 +++++-- gradle/wrapper/gradle-wrapper.jar | Bin 55741 -> 55190 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 6 +- spark | 2 +- store | 2 +- 14 files changed, 129 insertions(+), 160 deletions(-) diff --git a/aqp-product/build.gradle b/aqp-product/build.gradle index 8648a288fe..bbfb538907 100644 --- a/aqp-product/build.gradle +++ b/aqp-product/build.gradle @@ -23,7 +23,9 @@ String gitBranch = "${gitCmd} rev-parse --abbrev-ref HEAD".execute().text.trim() String commitId = "${gitCmd} rev-parse HEAD".execute().text.trim() String sourceDate = "${gitCmd} log -n 1 --format=%ai".execute().text.trim() -createAQPMiscTasks(sourceDate, commitId, gitBranch) +// Creates the version properties file and writes it to the resources dir +createVersionPropertiesTask(project, 'SnappyAQPVersion.properties', aqpProductName, + sourceDate, commitId, gitBranch) compileJava.dependsOn createVersionPropertiesFile diff --git a/build.gradle b/build.gradle index 862dbd5b54..811e69007e 100644 --- a/build.gradle +++ b/build.gradle @@ -121,6 +121,7 @@ allprojects { ? ":snappy-core_${scalaBinaryVersion}" : ":snappy-core-product_${scalaBinaryVersion}" aqpProjectName = sparkVersion == sparkConnectorVersion ? ":snappy-aqp_${scalaBinaryVersion}" : ":snappy-aqp-product_${scalaBinaryVersion}" + sparkPackageName = "snappydata-${version}_${sparkConnectorVersion}-s_${scalaBinaryVersion}" sparkConnectorDistName = "spark-${sparkConnectorVersion}-bin-hadoop2.7" sparkCurrentVersion = '2.4.3' @@ -1491,101 +1492,33 @@ task packageVSD { doLast { } } } -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +// Creates a task to write the version properties file to the resources dir +void createVersionPropertiesTask(Project proj, String propertiesFile, String projProductName, + String projSourceDate, String projCommitId, String projGitBranch) { + proj.tasks.create('createVersionPropertiesFile') { + dependsOn 'processResources' -void createCoreJarTasks(String sparkCompatVersion, - String archiveName, String sparkPackageName) { - task shadowJarTask(type: ShadowJar) { - zip64 = true - // avoid conflict with the 0.9.2 version in stock Spark - relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // relocate koloboke for possible conflicts with user dependencies - relocate 'com.koloboke', 'io.snappydata.com.koloboke' - // relocate the guava's com.google packages - relocate 'com.google.common', 'io.snappydata.com.google.common' - - mergeServiceFiles() - exclude 'log4j.properties' - - if (rootProject.hasProperty('enablePublish')) { - createdBy = 'SnappyData Build Team' - } else { - createdBy = System.getProperty('user.name') - } - manifest { - attributes( - 'Manifest-Version' : '1.0', - 'Created-By' : createdBy, - 'Title' : archiveName, - 'Version' : version, - 'Vendor' : vendorName - ) - } - } - - // write the POM for spark-package - task sparkPackagePom { doLast { - file("${rootProject.buildDir}/distributions").mkdirs() - pom { - project { - groupId 'SnappyDataInc' - artifactId 'snappydata' - version "${version}-s_${scalaBinaryVersion}" - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - } - whenConfigured { p -> p.dependencies.clear() } - }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") - copy { - from "${buildDir}/libs" - into "${rootProject.buildDir}/distributions" - include "${shadowJar.archiveName}" - rename { filename -> "${sparkPackageName}.jar" } - } - } } - - task sparkPackage(type: Zip) { - dependsOn shadowJarTask, sparkPackagePom - archiveName = "${sparkPackageName}.zip" - destinationDir = file("${rootProject.buildDir}/distributions") - outputs.upToDateWhen { false } - - from ("${rootProject.buildDir}/distributions") { - include "${sparkPackageName}.jar" - include "${sparkPackageName}.pom" - } - } -} - -void createAQPMiscTasks(String aqpSourceDate, String aqpCommitId, String aqpGitBranch) { - // Creates the version properties file and writes it to the resources dir - task createVersionPropertiesFile(dependsOn: 'processResources') { - def propertiesDir = file("${sourceSets.main.scala.outputDir}/io/snappydata") - outputs.file "${propertiesDir}/SnappyAQPVersion.properties" + def propertiesDir = file("${proj.sourceSets.main.scala.outputDir}/io/snappydata") + outputs.file "${propertiesDir}/${propertiesFile}" inputs.file "${rootProject.projectDir}/build.gradle" doLast { def props = [ - 'Product-Name' : aqpProductName, + 'Product-Name' : projProductName, 'Product-Version' : version, 'Build-Id' : buildIdPrefix + buildNumber, 'Build-Date' : buildDate, 'Build-Platform' : osName.getName() + osVersion + osArch, 'Build-Java-Version': jdkVersion, - 'Source-Date' : aqpSourceDate, - 'Source-Revision' : aqpCommitId, - 'Source-Repository' : aqpGitBranch, + 'Source-Date' : projSourceDate, + 'Source-Revision' : projCommitId, + 'Source-Repository' : projGitBranch, 'Cluster-Type' : clusterType ] - writeProperties(propertiesDir, 'SnappyAQPVersion.properties', - "Properties that control what version ${aqpProductName} will think it is. " + - "Changing these values may cause ${aqpProductName} to no longer function.", props) + writeProperties(propertiesDir, propertiesFile, + "Properties that control what version ${projProductName} will think it is. " + + "Changing these values may cause ${projProductName} to no longer function.", props) } } } diff --git a/cluster/build.gradle b/cluster/build.gradle index 8a57bcafdc..ed1f38b979 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -54,7 +54,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) } - testCompile (project(coreProjectName), configuration: 'testOutput') { + testCompile (project(path: coreProjectName, configuration: 'testOutput')) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) @@ -151,29 +151,8 @@ dependencies { } // Creates the version properties file and writes it to the resources dir -task createVersionPropertiesFile(dependsOn: 'processResources') { - def propertiesDir = file("${sourceSets.main.scala.outputDir}/io/snappydata") - outputs.file "${propertiesDir}/SnappyDataVersion.properties" - inputs.file "${rootProject.projectDir}/build.gradle" - - doLast { - - def props = [ - 'Product-Name' : productName, - 'Product-Version' : version, - 'Build-Id' : buildIdPrefix + buildNumber, - 'Build-Date' : buildDate, - 'Build-Platform' : osName.getName() + osVersion + osArch, - 'Build-Java-Version': jdkVersion, - 'Source-Date' : sourceDate, - 'Source-Revision' : commitId, - 'Source-Repository' : gitBranch, - ] - - writeProperties(propertiesDir, 'SnappyDataVersion.properties', - "Properties that control what version ${productName} will think it is. Changing these values may cause ${productName} to no longer function.", props) - } -} +createVersionPropertiesTask(project, 'SnappyDataVersion.properties', productName, + sourceDate, commitId, gitBranch) compileJava.dependsOn createVersionPropertiesFile diff --git a/compatibility/spark-2.1.0/build.gradle b/compatibility/spark-2.1.0/build.gradle index dfd84ddd95..8b8b029e9a 100644 --- a/compatibility/spark-2.1.0/build.gradle +++ b/compatibility/spark-2.1.0/build.gradle @@ -60,6 +60,4 @@ if (rootProject.hasProperty('enablePublish')) { } archivesBaseName = "snappydata-core-compat-spark${spark210Version}_${scalaBinaryVersion}" -String sparkPackageName = "snappydata-${version}_${spark210Version}-s_${scalaBinaryVersion}" - -createCoreJarTasks(spark210Version, archivesBaseName, sparkPackageName) +sparkPackageName = "snappydata-${version}_${spark210Version}-s_${scalaBinaryVersion}" diff --git a/compatibility/spark-2.1.1/build.gradle b/compatibility/spark-2.1.1/build.gradle index 74797035e6..98c29ae396 100644 --- a/compatibility/spark-2.1.1/build.gradle +++ b/compatibility/spark-2.1.1/build.gradle @@ -58,6 +58,4 @@ dependencies { } archivesBaseName = "snappydata-core-compat-spark${spark211Version}_${scalaBinaryVersion}" -String sparkPackageName = "snappydata-${version}_${spark211Version}-s_${scalaBinaryVersion}" - -createCoreJarTasks(spark211Version, archivesBaseName, sparkPackageName) +sparkPackageName = "snappydata-${version}_${spark211Version}-s_${scalaBinaryVersion}" diff --git a/compatibility/spark-2.3.2/build.gradle b/compatibility/spark-2.3.2/build.gradle index a88e177494..436638865e 100644 --- a/compatibility/spark-2.3.2/build.gradle +++ b/compatibility/spark-2.3.2/build.gradle @@ -60,6 +60,4 @@ if (rootProject.hasProperty('enablePublish')) { } archivesBaseName = "snappydata-core-compat-spark${spark232Version}_${scalaBinaryVersion}" -String sparkPackageName = "snappydata-${version}_${spark232Version}-s_${scalaBinaryVersion}" - -createCoreJarTasks(spark232Version, archivesBaseName, sparkPackageName) +sparkPackageName = "snappydata-${version}_${spark232Version}-s_${scalaBinaryVersion}" diff --git a/core/build.gradle b/core/build.gradle index 5eb7625df9..3a8802a07a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -165,3 +165,70 @@ if (rootProject.hasProperty('snappydata.enterprise')) { } archivesBaseName = "snappydata-core-spark${sparkConnectorVersion}_${scalaBinaryVersion}" + +subprojects { + shadowJar { + zip64 = true + // avoid conflict with the 0.9.2 version in stock Spark + relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' + // relocate koloboke for possible conflicts with user dependencies + relocate 'com.koloboke', 'io.snappydata.com.koloboke' + // relocate the guava's com.google packages + relocate 'com.google.common', 'io.snappydata.com.google.common' + + mergeServiceFiles() + exclude 'log4j.properties' + + if (rootProject.hasProperty('enablePublish')) { + createdBy = 'SnappyData Build Team' + } else { + createdBy = System.getProperty('user.name') + } + manifest { + attributes( + 'Manifest-Version' : '1.0', + 'Created-By' : createdBy, + 'Title' : archivesBaseName, + 'Version' : version, + 'Vendor' : vendorName + ) + } + } + + // write the POM for spark-package + task sparkPackagePom(dependsOn: shadowJar) { doLast { + file("${rootProject.buildDir}/distributions").mkdirs() + pom { + project { + groupId 'SnappyDataInc' + artifactId 'snappydata' + version "${version}-s_${scalaBinaryVersion}" + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + distribution 'repo' + } + } + } + whenConfigured { p -> p.dependencies.clear() } + }.writeTo("${rootProject.buildDir}/distributions/${sparkPackageName}.pom") + copy { + from "${buildDir}/libs" + into "${rootProject.buildDir}/distributions" + include "${shadowJar.archiveName}" + rename { filename -> "${sparkPackageName}.jar" } + } + } } + + task sparkPackage(type: Zip, dependsOn: sparkPackagePom) { + archiveName = "${sparkPackageName}.zip" + destinationDir = file("${rootProject.buildDir}/distributions") + outputs.upToDateWhen { false } + + from ("${rootProject.buildDir}/distributions") { + include "${sparkPackageName}.jar" + include "${sparkPackageName}.pom" + } + } +} diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 25f07be16d..4144959e5f 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -25,16 +25,13 @@ import scala.collection.JavaConverters._ import scala.concurrent.Future import scala.language.implicitConversions import scala.reflect.runtime.universe.{TypeTag, typeOf} -import scala.util.control.NonFatal -import com.gemstone.gemfire.internal.GemFireVersion import com.gemstone.gemfire.internal.cache.{GemFireCacheImpl, PartitionedRegion} import com.gemstone.gemfire.internal.shared.{ClientResolverUtils, FinalizeHolder, FinalizeObject} import com.google.common.cache.{Cache, CacheBuilder} -import com.pivotal.gemfirexd.internal.GemFireXDVersion import com.pivotal.gemfirexd.internal.iapi.sql.ParameterValueSet import com.pivotal.gemfirexd.internal.iapi.{types => stypes} -import com.pivotal.gemfirexd.internal.shared.common.{SharedUtils, StoredFormatIds} +import com.pivotal.gemfirexd.internal.shared.common.StoredFormatIds import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} import io.snappydata.{Constant, Property, SnappyTableStatsProviderService} import org.eclipse.collections.impl.map.mutable.UnifiedMap @@ -108,13 +105,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo * functions, and everything else that accepts a [[org.apache.spark.sql.internal.SQLConf]]. */ @transient - lazy override val sessionState: SnappySessionState = { - SnappySession.aqpSessionStateClass match { - case Some(aqpClass) => aqpClass.getConstructor(classOf[SnappySession]). - newInstance(self).asInstanceOf[SnappySessionState] - case None => internals.newSnappySessionState(self) - } - } + lazy override val sessionState: SnappySessionState = internals.newSnappySessionState(self) def sessionCatalog: SnappySessionCatalog = sessionState.catalog @@ -1882,26 +1873,6 @@ object SnappySession extends Logging { private val unresolvedColRegex = """(cannot resolve '`)(\w+).(\w+).(\w+)(.*given input columns.*)""".r - lazy val isEnterpriseEdition: Boolean = { - GemFireCacheImpl.setGFXDSystem(true) - GemFireVersion.getInstance(classOf[GemFireXDVersion], SharedUtils.GFXD_VERSION_PROPERTIES) - GemFireVersion.isEnterpriseEdition - } - - private lazy val aqpSessionStateClass: Option[Class[_]] = { - if (isEnterpriseEdition) { - try { - Some(org.apache.spark.util.Utils.classForName( - "org.apache.spark.sql.internal.SnappyAQPSessionState")) - } catch { - case NonFatal(e) => - // Let the user know if it failed to load AQP classes. - logWarning(s"Failed to load AQP classes in Enterprise edition: $e") - None - } - } else None - } - private[sql] def findShuffleDependencies(rdd: RDD[_]): List[Int] = { rdd.dependencies.toList.flatMap { case s: ShuffleDependency[_, _, _] => if (s.rdd ne rdd) { diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index 475077b6c2..b21e9a76ec 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -16,10 +16,15 @@ */ package org.apache.spark.sql +import scala.util.control.NonFatal + +import com.gemstone.gemfire.internal.GemFireVersion import com.gemstone.gemfire.internal.cache.GemFireCacheImpl +import com.pivotal.gemfirexd.internal.GemFireXDVersion +import com.pivotal.gemfirexd.internal.shared.common.SharedUtils import org.apache.spark.util.Utils -import org.apache.spark.{SparkContext, SparkException} +import org.apache.spark.{Logging, SparkContext, SparkException} /** * Helper trait for easy access to [[SparkInternals]] using the "internals" method. @@ -31,7 +36,7 @@ trait SparkSupport { /** * Load appropriate Spark version support as per the current Spark version. */ -object SparkSupport { +object SparkSupport extends Logging { /** * The default Spark version for which core will be built and must exactly match @@ -43,6 +48,12 @@ object SparkSupport { private val INTERNAL_PACKAGE = "org.apache.spark.sql.internal" + lazy val isEnterpriseEdition: Boolean = { + GemFireCacheImpl.setGFXDSystem(true) + GemFireVersion.getInstance(classOf[GemFireXDVersion], SharedUtils.GFXD_VERSION_PROPERTIES) + GemFireVersion.isEnterpriseEdition + } + /** * Get the appropriate [[SparkInternals]] for current SparkContext version. */ @@ -51,7 +62,7 @@ object SparkSupport { if (impl ne null) internalImpl else synchronized { val impl = internalImpl - if (impl ne null) internalImpl + if (impl ne null) impl else { val sparkVersion = if (context eq null) { @@ -62,14 +73,26 @@ object SparkSupport { case ctx => ctx.version } } else context.version - val implClass = sparkVersion match { + val implClassName = sparkVersion match { // list all the supported versions below; all implementations are required to // have a public constructor having current SparkContext as the one argument - case "2.1.0" => Utils.classForName(s"$INTERNAL_PACKAGE.Spark210Internals") - case "2.1.1" => Utils.classForName(s"$INTERNAL_PACKAGE.Spark211Internals") - case "2.3.2" => Utils.classForName(s"$INTERNAL_PACKAGE.Spark232Internals") + case "2.1.0" => s"$INTERNAL_PACKAGE.Spark210Internals" + case "2.1.1" => s"$INTERNAL_PACKAGE.Spark211Internals" + case "2.3.2" => s"$INTERNAL_PACKAGE.Spark232Internals" case v => throw new SparkException(s"Unsupported Spark version $v") } + // try to load AQP version first + val implClass = if (isEnterpriseEdition) { + try { + Utils.classForName(implClassName.replace("Internals", "AQPInternals")) + } catch { + case NonFatal(e) => + // Let the user know if it failed to load AQP classes. + logWarning(s"Failed to load AQP classes in Enterprise edition: $e") + Utils.classForName(implClassName) + } + } else Utils.classForName(implClassName) + internalImpl = implClass.newInstance().asInstanceOf[SparkInternals] internalImpl } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 457aad0d98108420a977756b7145c93c8910b076..87b738cbd051603d91cc39de6cb000dd98fe6b02 100644 GIT binary patch delta 19106 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 Q;k^UD+~FQ?)`rgh1-4RH;Q#;t diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1b2b07cfb0..ee69dd68d1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index b67a72f042..a52de4a9c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -44,9 +44,9 @@ project(':snappy-dtests_' + scalaBinaryVersion).projectDir = "$rootDir/dtests" a project(':snappy-compatibility-tests_' + scalaBinaryVersion).projectDir = "$rootDir/compatibilityTests" as File project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoders" as File -project(":snappy-core_${scalaBinaryVersion}:spark2.1.0") = "$rootDir/compatibility/spark-2.1.0" as File -project(":snappy-core_${scalaBinaryVersion}:spark2.1.1") = "$rootDir/compatibility/spark-2.1.1" as File -project(":snappy-core_${scalaBinaryVersion}:spark2.3.2") = "$rootDir/compatibility/spark-2.3.2" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.1.0").projectDir = "$rootDir/compatibility/spark-2.1.0" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.1.1").projectDir = "$rootDir/compatibility/spark-2.1.1" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.3.2").projectDir = "$rootDir/compatibility/spark-2.3.2" as File if (new File(rootDir, 'spark/build.gradle').exists()) { include ':snappy-spark' diff --git a/spark b/spark index dd1d708d18..58a8857b65 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit dd1d708d180d7b5da63254bdcbea7b97b10db13b +Subproject commit 58a8857b652d24b594bfab4a353ae246f740a7d6 diff --git a/store b/store index 6137ab70f9..4724f209da 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 6137ab70f95c334fc1d0bca140dda47fda4160a7 +Subproject commit 4724f209dad0d094c9fd07adf2d5df6ba2516bb0 From 2a5082e6bdc773477e6bd3e15ccbb3a031b77fef Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 25 Jun 2019 14:50:20 +0530 Subject: [PATCH 17/80] moved compatibility modules inside core some build and runtime fixes --- aqp-product/build.gradle | 3 +- .../cluster/ExecutorInitiator.scala | 6 +-- .../gemxd/SparkSQLExecuteImpl.scala | 2 +- .../scala/io/snappydata/impl/LeadImpl.scala | 6 +-- .../SnappyCoarseGrainedExecutorBackend.scala | 2 +- .../compatibility}/spark-2.1.0/build.gradle | 0 .../sql/execution/ui/SnappySQLListener.scala | 0 .../sql/internal/Spark210Internals.scala | 0 .../org/apache/spark/sql/internal/plans.scala | 0 .../compatibility}/spark-2.1.1/build.gradle | 0 .../sql/internal/Spark211Internals.scala | 0 .../compatibility}/spark-2.3.2/build.gradle | 0 .../spark/sql/catalyst/AccessUtils.scala | 0 .../execution/ui/SnappySQLAppListener.scala | 0 .../sql/internal/Spark232Internals.scala | 0 .../org/apache/spark/sql/internal/plans.scala | 0 .../sql/catalog/SnappyExternalCatalog.scala | 8 ++++ .../org/apache/spark/sql/SnappyContext.scala | 8 ++-- .../org/apache/spark/sql/SparkSupport.scala | 46 ++++++++++++------- .../collection/MultiColumnOpenHashSet.scala | 2 +- .../sql/internal/SnappySessionCatalog.scala | 1 - settings.gradle | 6 +-- store | 2 +- 23 files changed, 57 insertions(+), 35 deletions(-) rename {compatibility => core/compatibility}/spark-2.1.0/build.gradle (100%) rename {compatibility => core/compatibility}/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala (100%) rename {compatibility => core/compatibility}/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala (100%) rename {compatibility => core/compatibility}/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala (100%) rename {compatibility => core/compatibility}/spark-2.1.1/build.gradle (100%) rename {compatibility => core/compatibility}/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala (100%) rename {compatibility => core/compatibility}/spark-2.3.2/build.gradle (100%) rename {compatibility => core/compatibility}/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala (100%) rename {compatibility => core/compatibility}/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala (100%) rename {compatibility => core/compatibility}/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala (100%) rename {compatibility => core/compatibility}/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala (100%) diff --git a/aqp-product/build.gradle b/aqp-product/build.gradle index bbfb538907..864ec2d1a7 100644 --- a/aqp-product/build.gradle +++ b/aqp-product/build.gradle @@ -14,7 +14,8 @@ dependencies { compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion compile project(coreProjectName) - compile coreLibraries.sparkProduct + compileOnly coreLibraries.sparkProduct + runtime project(':snappy-cluster_' + scalaBinaryVersion) } diff --git a/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala b/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala index e434b45755..6e51339dbb 100644 --- a/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala +++ b/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala @@ -63,7 +63,7 @@ object ExecutorInitiator extends Logging { private[cluster] val testLock = new Object() @volatile private[cluster] var testStartDone = false - val membershipListener = new MembershipListener { + private val membershipListener = new MembershipListener { override def quorumLost(failures: util.Set[InternalDistributedMember], remaining: util.List[InternalDistributedMember]): Unit = {} @@ -100,7 +100,7 @@ object ExecutorInitiator extends Logging { dm: InternalDistributedMember): Unit = lock.synchronized { driverURL = url driverDM = dm - SnappyContext.clearStaticArtifacts(SnappyContext.globalSparkContext) + SnappyContext.clearStaticArtifacts() lock.notifyAll() } @@ -158,7 +158,7 @@ object ExecutorInitiator extends Logging { val port = executorConf.getInt("spark.executor.port", 0) val (ioEncryptionKey, props) = SparkCallbacks.fetchDriverProperty(memberId, executorHost, - executorConf, port, url) + executorConf, port, url) val driverConf = Utils.newClusterSparkConf() Utils.setDefaultSerializerAndCodec(driverConf) diff --git a/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLExecuteImpl.scala b/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLExecuteImpl.scala index 5ec0d8d49a..dd948d5319 100644 --- a/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLExecuteImpl.scala +++ b/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLExecuteImpl.scala @@ -139,7 +139,7 @@ class SparkSQLExecuteImpl(val sql: String, // prepare SnappyResultHolder with all data and create new one SparkSQLExecuteImpl.handleLocalExecution(srh, hdos) msg.sendResult(srh) - srh = new SnappyResultHolder(this, msg.isUpdateOrDelete) + srh = new SnappyResultHolder(this, msg.isUpdateOrDeleteOrPut) } else { // throttle sending if target node is CRITICAL_UP val targetMember = msg.getSender diff --git a/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala b/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala index a57bb109f3..c69f87da9e 100644 --- a/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala +++ b/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala @@ -53,7 +53,7 @@ import spray.routing.authentication.UserPass import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.SecurityUtils import org.apache.spark.sql.hive.thriftserver.SnappyHiveThriftServer2 -import org.apache.spark.sql.{SnappyContext, SnappySession} +import org.apache.spark.sql.{SnappyContext, SparkSupport} import org.apache.spark.{Logging, SparkCallbacks, SparkConf, SparkContext, SparkException} class LeadImpl extends ServerImpl with Lead @@ -160,7 +160,7 @@ class LeadImpl extends ServerImpl with Lead .iterator().asScala.map(k => k -> bootProperties.getProperty(k)).toSeq) val productName = { - if (SnappySession.isEnterpriseEdition) { + if (SparkSupport.isEnterpriseEdition) { "TIBCO ComputeDB" } else { "SnappyData" @@ -453,7 +453,7 @@ class LeadImpl extends ServerImpl with Lead throw new UnsupportedOperationException( "LDAP is the only supported auth-provider currently.") } - if (authP != null && !SnappySession.isEnterpriseEdition) { + if (authP != null && !SparkSupport.isEnterpriseEdition) { throw new UnsupportedOperationException("Security feature is available in SnappyData " + "Enterprise Edition.") } diff --git a/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala b/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala index e1cabf42c8..df6de7c1d7 100644 --- a/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala +++ b/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala @@ -40,7 +40,7 @@ class SnappyCoarseGrainedExecutorBackend( executorId, hostName, cores, userClassPath, env) { override def onStop() { - SnappyContext.clearStaticArtifacts(SnappyContext.globalSparkContext) + SnappyContext.clearStaticArtifacts() exitWithoutRestart() } diff --git a/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle similarity index 100% rename from compatibility/spark-2.1.0/build.gradle rename to core/compatibility/spark-2.1.0/build.gradle diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala similarity index 100% rename from compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala rename to core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala similarity index 100% rename from compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala rename to core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala diff --git a/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala similarity index 100% rename from compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala rename to core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala diff --git a/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle similarity index 100% rename from compatibility/spark-2.1.1/build.gradle rename to core/compatibility/spark-2.1.1/build.gradle diff --git a/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala similarity index 100% rename from compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala rename to core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala diff --git a/compatibility/spark-2.3.2/build.gradle b/core/compatibility/spark-2.3.2/build.gradle similarity index 100% rename from compatibility/spark-2.3.2/build.gradle rename to core/compatibility/spark-2.3.2/build.gradle diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala similarity index 100% rename from compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala rename to core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala similarity index 100% rename from compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala rename to core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala similarity index 100% rename from compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala rename to core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala diff --git a/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala similarity index 100% rename from compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala rename to core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 7b74a2a290..aa4431a1b0 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -111,6 +111,14 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } + protected def getTableOptionImpl(schema: String, table: String): Option[CatalogTable] = { + try { + Some(getTable(schema, table)) + } catch { + case _: TableNotFoundException | _: NoSuchTableException => None + } + } + def getTableIfExists(schema: String, table: String): Option[CatalogTable] = { try { Some(getTable(schema, table)) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 17aff8ac79..62f868b0b6 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -1186,7 +1186,7 @@ object SnappyContext extends Logging { } } // clear static objects on the driver - clearStaticArtifacts(sc) + clearStaticArtifacts() contextLock.synchronized { val sharedState = _sharedState @@ -1201,7 +1201,7 @@ object SnappyContext extends Logging { } MemoryManagerCallback.resetMemoryManager() } else { - SparkSupport.clear(sc) + SparkSupport.clear() } contextLock.synchronized { _clusterMode = null @@ -1211,12 +1211,12 @@ object SnappyContext extends Logging { } /** Cleanup static artifacts on this lead/executor. */ - def clearStaticArtifacts(context: SparkContext): Unit = { + def clearStaticArtifacts(): Unit = { CachedDataFrame.clear() ConnectionPool.clear() CodeGeneration.clearAllCache(skipTypeCache = false) HashedObjectCache.close() - SparkSupport.clear(context) + SparkSupport.clear() ServiceUtils.clearStaticArtifacts() } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index b21e9a76ec..2019b7f44e 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -30,7 +30,7 @@ import org.apache.spark.{Logging, SparkContext, SparkException} * Helper trait for easy access to [[SparkInternals]] using the "internals" method. */ trait SparkSupport { - protected final def internals: SparkInternals = SparkSupport.internals() + protected final def internals: SparkInternals = SparkSupport.internals } /** @@ -44,6 +44,8 @@ object SparkSupport extends Logging { */ final val DEFAULT_VERSION = "2.1.1" + private[this] val EXTENDED_VERSION_PATTERN = "([0-9]\\.[0-9]\\.[0-9])\\.[0-9]".r + @volatile private[this] var internalImpl: SparkInternals = _ private val INTERNAL_PACKAGE = "org.apache.spark.sql.internal" @@ -57,22 +59,17 @@ object SparkSupport extends Logging { /** * Get the appropriate [[SparkInternals]] for current SparkContext version. */ - def internals(context: SparkContext = null): SparkInternals = { + def internals: SparkInternals = { val impl = internalImpl - if (impl ne null) internalImpl + if (impl ne null) impl else synchronized { val impl = internalImpl if (impl ne null) impl else { - val sparkVersion = - if (context eq null) { - // check for embedded product - if (GemFireCacheImpl.getInstance() ne null) DEFAULT_VERSION - else SnappyContext.globalSparkContext match { - case null => throw new SparkException("No SparkContext") - case ctx => ctx.version - } - } else context.version + val sparkVersion = org.apache.spark.SPARK_VERSION match { + case EXTENDED_VERSION_PATTERN(v) => v + case v => v + } val implClassName = sparkVersion match { // list all the supported versions below; all implementations are required to // have a public constructor having current SparkContext as the one argument @@ -82,7 +79,7 @@ object SparkSupport extends Logging { case v => throw new SparkException(s"Unsupported Spark version $v") } // try to load AQP version first - val implClass = if (isEnterpriseEdition) { + val implClass: Class[_] = if (isEnterpriseEdition) { try { Utils.classForName(implClassName.replace("Internals", "AQPInternals")) } catch { @@ -99,8 +96,25 @@ object SparkSupport extends Logging { } } - private[sql] def clear(context: SparkContext): Unit = { - if (context ne null) internals(context).clearSQLListener() - internalImpl = null + def internals(context: SparkContext): SparkInternals = { + val impl = internals + val version = context.version match { + case EXTENDED_VERSION_PATTERN(v) => v + case v => v + } + if (impl.version != version) { + throw new IllegalStateException(s"SparkVersion mismatch: " + + s"runtime version = ${context.version}. " + + s"Compile version = ${impl.version}") + } + impl + } + + private[sql] def clear(): Unit = synchronized { + val impl = internalImpl + if (impl ne null) { + impl.clearSQLListener() + internalImpl = null + } } } diff --git a/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala b/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala index c20971ea0e..5e53fbc362 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/MultiColumnOpenHashSet.scala @@ -1178,7 +1178,7 @@ object QCSSQLColumnHandler { def newSqlHandler(qcsPlan: (CodeAndComment, ArrayBuffer[Any], Array[DataType], Array[DataType]), hashColHandler: ColumnHandler): ColumnHandler = { - new QCSSQLColumnHandler((SparkSupport.internals().compile(qcsPlan._1), + new QCSSQLColumnHandler((SparkSupport.internals.compile(qcsPlan._1), qcsPlan._2, qcsPlan._3, qcsPlan._4), hashColHandler) } diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index aa852efc9e..86f5bcb4db 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -27,7 +27,6 @@ import io.snappydata.Constant import io.snappydata.sql.catalog.CatalogObjectType.getTableType import io.snappydata.sql.catalog.SnappyExternalCatalog.{DBTABLE_PROPERTY, getTableWithSchema} import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} -import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.Path import org.apache.spark.annotation.DeveloperApi diff --git a/settings.gradle b/settings.gradle index a52de4a9c2..70001d7109 100644 --- a/settings.gradle +++ b/settings.gradle @@ -44,9 +44,9 @@ project(':snappy-dtests_' + scalaBinaryVersion).projectDir = "$rootDir/dtests" a project(':snappy-compatibility-tests_' + scalaBinaryVersion).projectDir = "$rootDir/compatibilityTests" as File project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoders" as File -project(":snappy-core_${scalaBinaryVersion}:spark2.1.0").projectDir = "$rootDir/compatibility/spark-2.1.0" as File -project(":snappy-core_${scalaBinaryVersion}:spark2.1.1").projectDir = "$rootDir/compatibility/spark-2.1.1" as File -project(":snappy-core_${scalaBinaryVersion}:spark2.3.2").projectDir = "$rootDir/compatibility/spark-2.3.2" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.1.0").projectDir = "$rootDir/core/compatibility/spark-2.1.0" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File +project(":snappy-core_${scalaBinaryVersion}:spark2.3.2").projectDir = "$rootDir/core/compatibility/spark-2.3.2" as File if (new File(rootDir, 'spark/build.gradle').exists()) { include ':snappy-spark' diff --git a/store b/store index 4724f209da..fe43df0670 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 4724f209dad0d094c9fd07adf2d5df6ba2516bb0 +Subproject commit fe43df067051c4fd324267eb29523a8d3a62bce4 From c193abdb1b318a2d4c97bf8b05fc07208f833ef4 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 26 Jun 2019 01:34:18 +0530 Subject: [PATCH 18/80] more build cleanups and fixes --- aqp-product/build.gradle | 3 +- build.gradle | 9 +- core/build.gradle | 2 +- core/compatibility/spark-2.1.0/build.gradle | 2 + .../sql/internal/SnappyCacheManager210.scala | 55 ++++++++++++ .../sql/internal/Spark210Internals.scala | 85 +++++++------------ .../org/apache/spark/sql/internal/plans.scala | 9 +- core/compatibility/spark-2.1.1/build.gradle | 11 +-- .../sql/internal/Spark211Internals.scala | 4 +- .../sql/internal/Spark232Internals.scala | 8 +- .../sql/catalog/SnappyExternalCatalog.scala | 10 +-- .../spark/sql/execution/ExistingPlans.scala | 15 +--- .../sql/execution/NonRecursivePlans.scala | 2 +- .../spark/sql/execution/TableExec.scala | 9 +- .../sql/hive/SnappyHiveExternalCatalog.scala | 14 +-- .../apache/spark/sql/store/StoreUtils.scala | 4 +- settings.gradle | 31 ++++--- store | 2 +- 18 files changed, 156 insertions(+), 119 deletions(-) create mode 100644 core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala diff --git a/aqp-product/build.gradle b/aqp-product/build.gradle index 864ec2d1a7..88353c5c06 100644 --- a/aqp-product/build.gradle +++ b/aqp-product/build.gradle @@ -15,7 +15,8 @@ dependencies { compile project(coreProjectName) compileOnly coreLibraries.sparkProduct - runtime project(':snappy-cluster_' + scalaBinaryVersion) + runtime project(":snappy-cluster_${scalaBinaryVersion}") + runtime project(":snappy-aqp_${scalaBinaryVersion}:aqp-spark${sparkVersion}") } diff --git a/build.gradle b/build.gradle index 811e69007e..36b2128556 100644 --- a/build.gradle +++ b/build.gradle @@ -887,6 +887,7 @@ task publishMaven { task product(type: Zip) { dependsOn ":snappy-cluster_${scalaBinaryVersion}:jar" + dependsOn ":snappy-core_${scalaBinaryVersion}:spark${sparkVersion}:jar" dependsOn ":snappy-examples_${scalaBinaryVersion}:jar" dependsOn ":snappy-spark:snappy-spark-assembly_${scalaBinaryVersion}:sparkProduct" dependsOn ':snappy-launcher:jar' @@ -894,12 +895,18 @@ task product(type: Zip) { def clusterProject = project(":snappy-cluster_${scalaBinaryVersion}") def launcherProject = project(':snappy-launcher') + def aqpCompatProjectName = ":snappy-aqp_${scalaBinaryVersion}:aqp-spark${sparkVersion}" def targetProject = clusterProject if (isEnterpriseProduct) { if (hasAqpProject) { dependsOn "${aqpProjectName}:jar" - targetProject = aqpProject + dependsOn "${aqpCompatProjectName}:jar" + if (sparkVersion == sparkConnectorVersion) { + targetProject = project(aqpCompatProjectName) + } else { + targetProject = aqpProject + } } if (hasJdbcConnectorProject){ diff --git a/core/build.gradle b/core/build.gradle index 3a8802a07a..53bc65e3e3 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -83,8 +83,8 @@ dependencies { testCompile("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") testCompile("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") testCompile("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkConnectorVersion}:tests") + testCompile project(":snappy-core_${scalaBinaryVersion}:spark${sparkConnectorVersion}") - testRuntime project(":snappy-core_${scalaBinaryVersion}:spark${sparkConnectorVersion}") testRuntime files("${projectDir}/../tests/common/src/main/resources") testRuntime "org.pegdown:pegdown:${pegdownVersion}" } diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index 8b8b029e9a..7cbc1cd589 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -19,6 +19,8 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' +sourceSets.main.scala.srcDir 'specific/scala' + dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion diff --git a/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala b/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala new file mode 100644 index 0000000000..d720bb8d96 --- /dev/null +++ b/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan +import org.apache.spark.sql.execution.CacheManager +import org.apache.spark.sql.{Dataset, SnappySession, SparkSession} +import org.apache.spark.storage.StorageLevel + +/** + * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. + */ +class SnappyCacheManager210 extends CacheManager { + + override def cacheQuery(query: Dataset[_], tableName: Option[String], + storageLevel: StorageLevel): Unit = { + super.cacheQuery(query, tableName, storageLevel) + // clear plan cache since cached representation can change existing plans + query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() + } + + override def uncacheQuery(query: Dataset[_], blocking: Boolean): Boolean = { + if (super.uncacheQuery(query, blocking)) { + query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() + true + } else false + } + + override def invalidateCache(plan: LogicalPlan): Unit = { + super.invalidateCache(plan) + SparkSession.getActiveSession match { + case None => + case Some(session) => session.asInstanceOf[SnappySession].clearPlanCache() + } + } + + override def invalidateCachedPath(session: SparkSession, resourcePath: String): Unit = { + super.invalidateCachedPath(session, resourcePath) + session.asInstanceOf[SnappySession].clearPlanCache() + } +} diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 10d4f5d8d5..a6e706c3b5 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -54,9 +54,9 @@ import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter, PutIntoTable, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} -import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream +import org.apache.spark.util.Utils import org.apache.spark.{SparkConf, SparkContext, SparkException} /** @@ -128,7 +128,7 @@ class Spark210Internals extends SparkInternals { varName: String, initFunc: String => String, forceInline: Boolean, useFreshName: Boolean): String = { val variableName = if (useFreshName) ctx.freshName(varName) else varName - ctx.addMutableState(javaType, varName, initFunc(variableName)) + ctx.addMutableState(javaType, variableName, initFunc(variableName)) variableName } @@ -259,7 +259,7 @@ class Spark210Internals extends SparkInternals { override def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { - new Insert(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) + new Insert21(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) } override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite.enabled @@ -354,7 +354,7 @@ class Spark210Internals extends SparkInternals { override def newLogicalPlanWithHints(child: LogicalPlan, hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints = { - new PlanWithHints(child, hints) + new PlanWithHints21(child, hints) } override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, @@ -365,7 +365,7 @@ class Spark210Internals extends SparkInternals { override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[BroadcastHint] override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { - case p: PlanWithHints => p.allHints + case p: PlanWithHints21 => p.allHints case _: BroadcastHint => Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) case _ => Map.empty } @@ -504,12 +504,12 @@ class Spark210Internals extends SparkInternals { override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog = { - new SnappyEmbeddedHiveCatalog21(conf, hadoopConf, createTime) + new SnappyEmbeddedHiveCatalog210(conf, hadoopConf, createTime) } override def newSmartConnectorExternalCatalog( session: SparkSession): SmartConnectorExternalCatalog = { - new SmartConnectorExternalCatalog21(session) + new SmartConnectorExternalCatalog210(session) } override def newSnappySessionCatalog(sessionState: SnappySessionState, @@ -566,51 +566,24 @@ class Spark210Internals extends SparkInternals { PreWriteCheck(sessionState.conf, sessionState.catalog) } - override def newCacheManager(): CacheManager = new SnappyCacheManager21 - - override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) -} - -/** - * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. - */ -final class SnappyCacheManager21 extends CacheManager { - - override def cacheQuery(query: Dataset[_], tableName: Option[String], - storageLevel: StorageLevel): Unit = { - super.cacheQuery(query, tableName, storageLevel) - // clear plan cache since cached representation can change existing plans - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() + override def newCacheManager(): CacheManager = { + // load by reflection since this class is not visible when compiling for 2.1.1 compatibility + Utils.classForName("org.apache.spark.sql.internal.SnappyCacheManager210") + .newInstance().asInstanceOf[CacheManager] } - override def uncacheQuery(query: Dataset[_], blocking: Boolean): Boolean = { - if (super.uncacheQuery(query, blocking)) { - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() - true - } else false - } - - override def invalidateCache(plan: LogicalPlan): Unit = { - super.invalidateCache(plan) - SparkSession.getActiveSession match { - case None => - case Some(session) => session.asInstanceOf[SnappySession].clearPlanCache() - } - } - - override def invalidateCachedPath(session: SparkSession, resourcePath: String): Unit = { - super.invalidateCachedPath(session, resourcePath) - session.asInstanceOf[SnappySession].clearPlanCache() - } + override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) } -class SnappyEmbeddedHiveCatalog21(override val conf: SparkConf, +class SnappyEmbeddedHiveCatalog210(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { - override def getTableOption(schema: String, table: String): Option[CatalogTable] = { - getTableOptionImpl(schema, table) - } + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override def getTableOption(schema: String, table: String): Option[CatalogTable] = + getTableIfExists(schema, table) override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = super.createDatabase(schemaDefinition, ignoreIfExists) @@ -686,12 +659,14 @@ class SnappyEmbeddedHiveCatalog21(override val conf: SparkConf, renameFunctionImpl(schema, oldName, newName) } -class SmartConnectorExternalCatalog21(override val session: SparkSession) - extends SmartConnectorExternalCatalog { +class SmartConnectorExternalCatalog210(override val session: SparkSession) + extends ExternalCatalog with SmartConnectorExternalCatalog { - override def getTableOption(schema: String, table: String): Option[CatalogTable] = { - getTableOptionImpl(schema, table) - } + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override def getTableOption(schema: String, table: String): Option[CatalogTable] = + getTableIfExists(schema, table) override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) @@ -715,6 +690,8 @@ class SmartConnectorExternalCatalog21(override val session: SparkSession) override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + def alterTableSchema(db: String, table: String, schema: StructType): Unit = {} + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) @@ -735,7 +712,7 @@ class SmartConnectorExternalCatalog21(override val session: SparkSession) renameFunctionImpl(schema, oldName, newName) } -final class SnappySessionCatalog21(override val snappySession: SnappySession, +class SnappySessionCatalog21(override val snappySession: SnappySession, override val snappyExternalCatalog: SnappyExternalCatalog, override val globalTempViewManager: GlobalTempViewManager, override val functionResourceLoader: FunctionResourceLoader, @@ -832,7 +809,7 @@ class SnappySessionState21(override val snappySession: SnappySession) override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules } - override lazy val conf: SnappyConf = new SnappyConf(snappySession) + override lazy val conf: SQLConf = new SnappyConf(snappySession) override lazy val sqlParser: SnappySqlParser = contextFunctions.newSQLParser(snappySession) @@ -869,7 +846,7 @@ class SnappySessionState21(override val snappySession: SnappySession) } -final class CodegenSparkFallback21(child: SparkPlan, +class CodegenSparkFallback21(child: SparkPlan, session: SnappySession) extends CodegenSparkFallback(child, session) { override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, @@ -878,7 +855,7 @@ final class CodegenSparkFallback21(child: SparkPlan, } } -final class LogicalDStreamPlan21(output: Seq[Attribute], +class LogicalDStreamPlan21(output: Seq[Attribute], stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) extends LogicalDStreamPlan(output, stream)(streamingSnappy) { diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala index 946d5866f7..e0ba6e9f60 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -27,7 +27,7 @@ import org.apache.spark.sql.types.LongType * Unlike Spark's InsertIntoTable this plan provides the count of rows * inserted as the output. */ -final class Insert( +final class Insert21( table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, @@ -42,8 +42,8 @@ final class Insert( partition: Map[String, Option[String]] = partition, child: LogicalPlan = child, overwrite: OverwriteOptions = overwrite, - ifNotExists: Boolean = ifNotExists): Insert = { - new Insert(table, partition, child, overwrite, ifNotExists) + ifNotExists: Boolean = ifNotExists): Insert21 = { + new Insert21(table, partition, child, overwrite, ifNotExists) } } @@ -51,7 +51,8 @@ final class Insert( * An extended version of [[BroadcastHint]] to encapsulate any kind of hint rather * than just broadcast. */ -class PlanWithHints(_child: LogicalPlan, override val allHints: Map[QueryHint.Type, HintName.Type]) +class PlanWithHints21(_child: LogicalPlan, + override val allHints: Map[QueryHint.Type, HintName.Type]) extends BroadcastHint(_child) with LogicalPlanWithHints { override def productArity: Int = 2 diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index 98c29ae396..54b7102cf6 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -19,6 +19,9 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' +// directly include the base classes to ensure everything is compiled with Spark 2.1.1 +sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/scala" + dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion @@ -47,14 +50,6 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(":snappy-core_${scalaBinaryVersion}:spark${spark210Version}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - } } archivesBaseName = "snappydata-core-compat-spark${spark211Version}_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index 19c4eb6912..a22c9c22b3 100644 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -116,14 +116,14 @@ final class SnappyCacheManager211 extends CacheManager { final class SnappyEmbeddedHiveCatalog211(conf: SparkConf, hadoopConf: Configuration, createTime: Long) - extends SnappyEmbeddedHiveCatalog21(conf, hadoopConf, createTime) { + extends SnappyEmbeddedHiveCatalog210(conf, hadoopConf, createTime) { override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) } final class SmartConnectorExternalCatalog211(session: SparkSession) - extends SmartConnectorExternalCatalog21(session) { + extends SmartConnectorExternalCatalog210(session) { override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index ccdcccdf40..5b831971f4 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -543,6 +543,9 @@ final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, override val hadoopConf: Configuration, override val createTime: Long) extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = super.doCreateDatabase(schemaDefinition, ignoreIfExists) @@ -632,7 +635,10 @@ final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, } final class SmartConnectorExternalCatalog23(override val session: SparkSession) - extends SmartConnectorExternalCatalog { + extends ExternalCatalog with SmartConnectorExternalCatalog { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index aa4431a1b0..3239d94560 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -77,7 +77,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { throw new UnsupportedOperationException("Schema definitions cannot be altered") } - override def getTable(schema: String, table: String): CatalogTable = { + protected def getTableImpl(schema: String, table: String): CatalogTable = { if (schema == SYS_SCHEMA) { // check for a system table/VTI in store val session = Utils.getActiveSession @@ -111,14 +111,6 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } - protected def getTableOptionImpl(schema: String, table: String): Option[CatalogTable] = { - try { - Some(getTable(schema, table)) - } catch { - case _: TableNotFoundException | _: NoSuchTableException => None - } - } - def getTableIfExists(schema: String, table: String): Option[CatalogTable] = { try { Some(getTable(schema, table)) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index 5b1a9e575e..ce3df40e78 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.cache.LocalRegion import org.apache.spark.SparkContext import org.apache.spark.rdd.{RDD, ZippedPartitionsBaseRDD} -import org.apache.spark.sql.catalyst.errors.attachTree import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, _} import org.apache.spark.sql.catalyst.plans.physical.{ClusteredDistribution, Distribution, HashPartitioning, Partitioning, SinglePartition} @@ -54,7 +53,8 @@ private[sql] abstract class PartitionedPhysicalScan( partitionColumns: Seq[Expression], partitionColumnAliases: Seq[Seq[Attribute]], @transient override val relation: BaseRelation) - extends DataSourceScanExec with CodegenSupportOnExecutor with SparkSupport { + extends DataSourceScanExec with CodegenSupportOnExecutor + with NonRecursivePlans with SparkSupport { val metastoreTableIdentifier: Option[TableIdentifier] = None @@ -93,10 +93,6 @@ private[sql] abstract class PartitionedPhysicalScan( rdd :: Nil } - protected override def doExecute(): RDD[InternalRow] = { - internals.newWholeStagePlan(this).execute() - } - /** Specifies how data is partitioned across different nodes in the cluster. */ override lazy val outputPartitioning: Partitioning = { // when buckets are linked to partitions then actual buckets needs to be considered. @@ -345,7 +341,8 @@ trait PartitionedDataSourceScan extends PrunedUnsafeFilteredScan { private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, basePartKeys: Seq[Expression], otherPlan: SparkPlan, - otherPartKeys: Seq[Expression]) extends SparkPlan with CodegenSupport with SparkSupport { + otherPartKeys: Seq[Expression]) extends SparkPlan with CodegenSupport + with NonRecursivePlans with SparkSupport { private var consumedCode: String = _ private val consumedVars: ArrayBuffer[ExprCode] = ArrayBuffer.empty @@ -405,10 +402,6 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, consumeInput + "\n" + consumedCode } - override protected def doExecute(): RDD[InternalRow] = attachTree(this, "execute") { - internals.newWholeStagePlan(this).execute() - } - override def output: Seq[Attribute] = basePlan.output } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala index 26a417babb..50b1a995cd 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala @@ -26,7 +26,7 @@ import org.apache.spark.sql.internal.CodeGenerationException * version and use the same for non-codegenerated case. For that case this * prevents recursive calls into code generation in case it fails for some reason. */ -abstract class NonRecursivePlans extends SparkPlan with SparkSupport { +trait NonRecursivePlans extends SparkPlan with SparkSupport { /** * Variable to disallow recursive generation so will mark the case of diff --git a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala index e9bedf3da1..e099dcde16 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala @@ -33,7 +33,8 @@ import org.apache.spark.sql.{DelegateRDD, SnappyContext, SnappySession, SparkSup /** * Base class for bulk insert/mutation operations for column and row tables. */ -trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor with SparkSupport { +trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor + with NonRecursivePlans with SparkSupport { def partitionColumns: Seq[String] @@ -96,11 +97,6 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor with SparkSu s"number of ${opType.toLowerCase} rows")) } - override protected def doExecute(): RDD[InternalRow] = { - // don't expect code generation to fail - internals.newWholeStagePlan(this).execute() - } - override def inputRDDs(): Seq[RDD[InternalRow]] = { val inputRDDs = child.asInstanceOf[CodegenSupport].inputRDDs() if (partitioned) { @@ -142,6 +138,7 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor with SparkSu }) locations } + inputRDDs.map { rdd => // if the two are different then its partition pruning case if (numBuckets == rdd.getNumPartitions) { diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 6c727a7ad6..919e287a20 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -82,12 +82,14 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna val cacheLoader = new CacheLoader[(String, String), CatalogTable]() { override def load(name: (String, String)): CatalogTable = { logDebug(s"Looking up data source for ${name._1}.${name._2}") - withHiveExceptionHandling(SnappyHiveExternalCatalog.super.getTableIfExists( - name._1, name._2)) match { - case None => - nonExistentTables.put(name, java.lang.Boolean.TRUE) - throw new TableNotFoundException(name._1, name._2) - case Some(catalogTable) => finalizeCatalogTable(catalogTable) + withHiveExceptionHandling { + try { + finalizeCatalogTable(SnappyHiveExternalCatalog.super.getTable(name._1, name._2)) + } catch { + case _: TableNotFoundException | _: NoSuchTableException => + nonExistentTables.put(name, java.lang.Boolean.TRUE) + throw new TableNotFoundException(name._1, name._2) + } } } } diff --git a/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala b/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala index 1bbec3e2db..6b43523e98 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/StoreUtils.scala @@ -69,8 +69,8 @@ object StoreUtils { val GEM_PERSISTENT = "PERSISTENT" val GEM_SERVER_GROUPS = "SERVER GROUPS" val GEM_EXPIRE = "EXPIRE" - val GEM_OVERFLOW = "EVICTACTION OVERFLOW" - val GEM_HEAPPERCENT = "EVICTION BY LRUHEAPPERCENT" + val GEM_OVERFLOW = "EVICTACTION OVERFLOW " + val GEM_HEAPPERCENT = "EVICTION BY LRUHEAPPERCENT " val PRIMARY_KEY = "PRIMARY KEY" val LRUCOUNT = "LRUCOUNT" diff --git a/settings.gradle b/settings.gradle index 70001d7109..1a9b55af5f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,12 +15,14 @@ * LICENSE file. */ -def scalaBinaryVersion = '2.11' +String scalaBinaryVersion = '2.11' +String sparkVersion = '2.1.1' +String sparkConnectorVersion = rootProject.hasProperty('spark.connector.version') + ? rootProject.property('spark.connector.version') : sparkVersion rootProject.name = 'snappydata_' + scalaBinaryVersion include ':snappy-jdbc_' + scalaBinaryVersion include ':snappy-core_' + scalaBinaryVersion -include ':snappy-core-product_' + scalaBinaryVersion include ':snappy-cluster_' + scalaBinaryVersion include ':snappy-launcher' include ':snappy-examples_' + scalaBinaryVersion @@ -36,7 +38,6 @@ include ":snappy-core_${scalaBinaryVersion}:spark2.3.2" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File project(':snappy-core_' + scalaBinaryVersion).projectDir = "$rootDir/core" as File -project(':snappy-core-product_' + scalaBinaryVersion).projectDir = "$rootDir/core-product" as File project(':snappy-cluster_' + scalaBinaryVersion).projectDir = "$rootDir/cluster" as File project(':snappy-launcher').projectDir = "$rootDir/launcher" as File project(':snappy-examples_' + scalaBinaryVersion).projectDir = "$rootDir/examples" as File @@ -48,6 +49,11 @@ project(":snappy-core_${scalaBinaryVersion}:spark2.1.0").projectDir = "$rootDir/ project(":snappy-core_${scalaBinaryVersion}:spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File project(":snappy-core_${scalaBinaryVersion}:spark2.3.2").projectDir = "$rootDir/core/compatibility/spark-2.3.2" as File +if (sparkConnectorVersion != sparkVersion) { + include ':snappy-core-product_' + scalaBinaryVersion + project(':snappy-core-product_' + scalaBinaryVersion).projectDir = "$rootDir/core-product" as File +} + if (new File(rootDir, 'spark/build.gradle').exists()) { include ':snappy-spark' // sub-projects of snappy-spark @@ -172,17 +178,20 @@ if (new File(rootDir, 'spark-jobserver/build.gradle').exists()) { if (new File(rootDir, 'aqp/build.gradle').exists()) { include ':snappy-aqp_' + scalaBinaryVersion - include ':snappy-aqp-product_' + scalaBinaryVersion project(':snappy-aqp_' + scalaBinaryVersion).projectDir = "$rootDir/aqp" as File - project(':snappy-aqp-product_' + scalaBinaryVersion).projectDir = "$rootDir/aqp-product" as File + + if (sparkConnectorVersion != sparkVersion) { + include ':snappy-aqp-product_' + scalaBinaryVersion + project(':snappy-aqp-product_' + scalaBinaryVersion).projectDir = "$rootDir/aqp-product" as File + } // compatibility modules for all supported Spark releases - include ":snappy-aqp_${scalaBinaryVersion}:spark2.1.0" - include ":snappy-aqp_${scalaBinaryVersion}:spark2.1.1" - include ":snappy-aqp_${scalaBinaryVersion}:spark2.3.2" - project(":snappy-aqp_${scalaBinaryVersion}:spark2.1.0").projectDir = "$rootDir/aqp/compatibility/spark-2.1.0" as File - project(":snappy-aqp_${scalaBinaryVersion}:spark2.1.1").projectDir = "$rootDir/aqp/compatibility/spark-2.1.1" as File - project(":snappy-aqp_${scalaBinaryVersion}:spark2.3.2").projectDir = "$rootDir/aqp/compatibility/spark-2.3.2" as File + include ":snappy-aqp_${scalaBinaryVersion}:aqp-spark2.1.0" + include ":snappy-aqp_${scalaBinaryVersion}:aqp-spark2.1.1" + include ":snappy-aqp_${scalaBinaryVersion}:aqp-spark2.3.2" + project(":snappy-aqp_${scalaBinaryVersion}:aqp-spark2.1.0").projectDir = "$rootDir/aqp/compatibility/spark-2.1.0" as File + project(":snappy-aqp_${scalaBinaryVersion}:aqp-spark2.1.1").projectDir = "$rootDir/aqp/compatibility/spark-2.1.1" as File + project(":snappy-aqp_${scalaBinaryVersion}:aqp-spark2.3.2").projectDir = "$rootDir/aqp/compatibility/spark-2.3.2" as File } if (new File(rootDir, 'snappy-connectors/jdbc-stream-connector/build.gradle').exists()) { diff --git a/store b/store index fe43df0670..5bd2f10442 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit fe43df067051c4fd324267eb29523a8d3a62bce4 +Subproject commit 5bd2f10442e72bb69f9c5799d04525ac9b9e8551 From 5080c86f8606727c6f7f240679f51a3e0b34d9cc Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 26 Jun 2019 02:01:42 +0530 Subject: [PATCH 19/80] build fixes --- .../sql/execution/benchmark/TAQTest.scala | 2 +- .../sql/store/ColumnUpdateDeleteTest.scala | 4 +- .../spark/sql/test/TestSnappySession.scala | 19 ++------- .../sql/internal/Spark232Internals.scala | 10 +++-- .../org/apache/spark/sql/SnappySession.scala | 2 + .../sql/internal/SnappySessionState.scala | 39 +++++++------------ 6 files changed, 30 insertions(+), 46 deletions(-) diff --git a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala index 6281c7520e..13b474d914 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala @@ -278,7 +278,7 @@ object TAQTest extends Logging with Assertions { .setIfMissing("spark.master", s"local[$cores]") .setAppName("microbenchmark") conf.set("snappydata.store.critical-heap-percentage", "95") - if (SnappySession.isEnterpriseEdition) { + if (SparkSupport.isEnterpriseEdition) { conf.set("snappydata.store.memory-size", "1200m") } conf.set("spark.memory.manager", classOf[SnappyUnifiedMemoryManager].getName) diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/ColumnUpdateDeleteTest.scala b/cluster/src/test/scala/org/apache/spark/sql/store/ColumnUpdateDeleteTest.scala index 27ec9a649f..ad8d2ee895 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/ColumnUpdateDeleteTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/ColumnUpdateDeleteTest.scala @@ -23,7 +23,7 @@ import io.snappydata.cluster.PreparedQueryRoutingSingleNodeSuite import org.apache.spark.SparkConf import org.apache.spark.memory.SnappyUnifiedMemoryManager -import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.SparkSupport /** * Tests for updates/deletes on column table. @@ -45,7 +45,7 @@ class ColumnUpdateDeleteTest extends ColumnTablesTestBase { conf.setIfMissing("spark.master", "local[*]") .setAppName(getClass.getName) conf.set("snappydata.store.critical-heap-percentage", "95") - if (SnappySession.isEnterpriseEdition) { + if (SparkSupport.isEnterpriseEdition) { conf.set("snappydata.store.memory-size", "1200m") } conf.set("spark.memory.manager", classOf[SnappyUnifiedMemoryManager].getName) diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/test/TestSnappySession.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/test/TestSnappySession.scala index e5006fcc08..10225da99b 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/test/TestSnappySession.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/test/TestSnappySession.scala @@ -16,7 +16,6 @@ */ package org.apache.spark.sql.test -import org.apache.spark.sql.internal.{SnappyConf, SnappySessionState} import org.apache.spark.sql.{SnappySession, SparkSession} import org.apache.spark.{SparkConf, SparkContext} @@ -25,8 +24,8 @@ import org.apache.spark.{SparkConf, SparkContext} */ private[sql] class TestSnappySession(sc: SparkContext) extends SnappySession(sc) { - self => + def this(snappyConf: SparkConf) { this( new SparkContext("local[2]", "test-sql-context", @@ -44,20 +43,8 @@ private[sql] class TestSnappySession(sc: SparkContext) extends SnappySession(sc) this(new SparkConf) } - @transient - override lazy val sessionState: SnappySessionState = new SnappySessionState(self) { - override lazy val conf: SnappyConf = { - new SnappyConf(self) { - clear() - - override def clear(): Unit = { - super.clear() - // Make sure we start with the default test configs even after clear - TestSQLContext.overrideConfs.foreach { case (key, value) => setConfString(key, value) } - } - } - } - } + // Make sure we start with the default test configs even after clear + override private[sql] def overrideConfs: Map[String, String] = TestSQLContext.overrideConfs // Needed for Java tests def loadTestData(): Unit = { diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 5b831971f4..2698616acc 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -455,7 +455,7 @@ class Spark232Internals extends SparkInternals { case _ => new SessionResourceLoader(session) } new SnappySessionCatalog23(session, externalCatalog, globalTempViewManager, - functionResourceLoader, functionRegistry, sessionState.sqlParser, conf, hadoopConf) + functionResourceLoader, functionRegistry, sessionState.snappySqlParser, conf, hadoopConf) } override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = @@ -494,6 +494,10 @@ class Spark232Internals extends SparkInternals { sparkSession.sessionState.conf.columnNameOfCorruptRecord) } + override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { + // TODO: SW: + } + override def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { new SparkOptimizer(sessionState.catalog, sessionState.experimentalMethods) with DefaultOptimizer { @@ -566,7 +570,7 @@ final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { - SparkSupport.internals().loadDynamicPartitions(this, schema, table, loadPath, partition, + SparkSupport.internals.loadDynamicPartitions(this, schema, table, loadPath, partition, replace, numDP, holdDDLTime) } @@ -694,7 +698,7 @@ final class SmartConnectorExternalCatalog23(override val session: SparkSession) renameFunctionImpl(schema, oldName, newName) } -final class SnappySessionCatalog23(override val snappySession: SnappySession, +class SnappySessionCatalog23(override val snappySession: SnappySession, override val snappyExternalCatalog: SnappyExternalCatalog, override val globalTempViewManager: GlobalTempViewManager, override val functionResourceLoader: FunctionResourceLoader, diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 4144959e5f..249f88cb6a 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -161,6 +161,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo Dataset.ofRows(self, LogicalRDD(attributeSeq, rowRDD)(self)) } + private[sql] def overrideConfs: Map[String, String] = Map.empty + override def sql(sqlText: String): DataFrame = { try { sqInternal(sqlText) diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index d19060d7d4..7228c3915e 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -34,7 +34,7 @@ import io.snappydata.{Constant, HintName, Property, QueryHint} import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis -import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, Star, UnresolvedAttribute, UnresolvedRelation} +import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, Star, UnresolvedAttribute} import org.apache.spark.sql.catalyst.expressions.{And, EqualTo, In, _} import org.apache.spark.sql.catalyst.optimizer.{Optimizer, ReorderJoin} import org.apache.spark.sql.catalyst.parser.ParserInterface @@ -248,29 +248,6 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu protected final lazy val executionCache = new ConcurrentHashMap[LogicalPlan, QueryExecution](4, 0.7f, 1) - /** - * Replaces [[UnresolvedRelation]]s with concrete relations from the catalog. - */ - /* TODO: SW: remove - object ResolveRelationsExtended extends Rule[LogicalPlan] with PredicateHelper { - def getTable(u: UnresolvedRelation): LogicalPlan = { - try { - catalog.lookupRelation(u.tableIdentifier, u.alias) - } catch { - case _: NoSuchTableException => - u.failAnalysis(s"Table not found: ${u.tableIdentifier.unquotedString}") - } - } - - def apply(plan: LogicalPlan): LogicalPlan = plan.transformUp { - case i@PutIntoTable(u: UnresolvedRelation, _) => - i.copy(table = EliminateSubqueryAliases(getTable(u))) - case d@DMLExternalTable(_, u: UnresolvedRelation, _) => - d.copy(query = EliminateSubqueryAliases(getTable(u))) - } - } - */ - /** * Orders the join keys as per the underlying partitioning keys ordering of the table. */ @@ -721,6 +698,15 @@ class SnappyConf(@transient val session: SnappySession) dynamicShufflePartitions = -1 } + resetOverrides() + + private def resetOverrides(): Unit = { + val overrideConfs = session.overrideConfs + if (overrideConfs.nonEmpty) { + overrideConfs.foreach(p => setConfString(p._1, p._2)) + } + } + private def coreCountForShuffle: Int = { val count = SnappyContext.totalCoreCount.get() if (count > 0 || (session eq null)) math.min(super.numShufflePartitions, count) @@ -875,6 +861,11 @@ class SnappyConf(@transient val session: SnappySession) keyUpdateActions(entry.key, None, doSet = false, search = false) super.unsetConf(entry) } + + override def clear(): Unit = { + super.clear() + resetOverrides() + } } class SQLConfigEntry private(private[sql] val entry: ConfigEntry[_]) { From c71fb90e2ab335550eef3c56b7defefe405ef10f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 27 Jun 2019 15:43:38 +0530 Subject: [PATCH 20/80] more fixes --- .../sql/internal/Spark210Internals.scala | 104 +++----------- .../sql/internal/Spark232Internals.scala | 132 +++++++++++++++--- .../spark/sql/SnappyContextFunctions.scala | 3 - .../org/apache/spark/sql/SnappySession.scala | 2 +- .../org/apache/spark/sql/SparkInternals.scala | 25 ++-- .../sql/internal/SnappySessionState.scala | 105 +++++++++++--- 6 files changed, 232 insertions(+), 139 deletions(-) diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index a6e706c3b5..894a1d66b8 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -30,15 +30,15 @@ import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings -import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, FunctionRegistry, NoSuchTableException, UnresolvedRelation, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateHelper, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.optimizer.Optimizer import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartitioning} import org.apache.spark.sql.catalyst.rules.Rule @@ -51,7 +51,7 @@ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} import org.apache.spark.sql.hive.{SnappyHiveCatalogBase, SnappyHiveExternalCatalog} import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder -import org.apache.spark.sql.sources.{BaseRelation, Filter, PutIntoTable, ResolveQueryHints} +import org.apache.spark.sql.sources.{BaseRelation, Filter, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.streaming.SnappyStreamingContext @@ -286,6 +286,8 @@ class Spark210Internals extends SparkInternals { UnresolvedRelation(tableIdentifier, alias) } + override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = u.alias + override def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias = { SubqueryAlias(alias, child, view = None) } @@ -512,15 +514,6 @@ class Spark210Internals extends SparkInternals { new SmartConnectorExternalCatalog210(session) } - override def newSnappySessionCatalog(sessionState: SnappySessionState, - externalCatalog: SnappyExternalCatalog, globalTempViewManager: GlobalTempViewManager, - functionRegistry: FunctionRegistry, conf: SQLConf, - hadoopConf: Configuration): SnappySessionCatalog = { - new SnappySessionCatalog21(sessionState.snappySession, externalCatalog, globalTempViewManager, - sessionState.functionResourceLoader, functionRegistry, sessionState.snappySqlParser, - conf, hadoopConf) - } - override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = DataSource.lookupDataSource(provider) @@ -555,13 +548,6 @@ class Spark210Internals extends SparkInternals { new SnappySessionState21(snappySession) } - override def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { - new SparkOptimizer(sessionState.catalog, sessionState.conf, sessionState.experimentalMethods) - with DefaultOptimizer { - override def state: SnappySessionState = sessionState - } - } - override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { PreWriteCheck(sessionState.conf, sessionState.catalog) } @@ -745,7 +731,15 @@ class SnappySessionState21(override val snappySession: SnappySession) self => - protected def getExtendedResolutionRules(analyzer: Analyzer): Seq[Rule[LogicalPlan]] = + override def catalogBuilder(): SnappySessionCatalog = { + new SnappySessionCatalog21(snappySession, + snappySharedState.getExternalCatalogInstance(snappySession), + snappySession.sharedState.globalTempViewManager, + functionResourceLoader, functionRegistry, sqlParser, conf, newHadoopConf()) + } + + override protected[sql] def getExtendedResolutionRules( + analyzer: Analyzer): Seq[Rule[LogicalPlan]] = { AnalyzeCreateTable(snappySession) :: new PreprocessTable(this) :: ResolveRelationsExtended :: @@ -758,28 +752,12 @@ class SnappySessionState21(override val snappySession: SnappySession) ExternalRelationLimitFetch :: (if (conf.runSQLonFile) new ResolveDataSource(snappySession) :: Nil else Nil) - - protected def getExtendedCheckRules: Seq[LogicalPlan => Unit] = { - Seq(ConditionalPreWriteCheck(internals.newPreWriteCheck(self)), PrePutCheck) } - override val analyzerBuilder: () => Analyzer = () => new Analyzer(catalog, conf) { - - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = - getExtendedResolutionRules(this) - - override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules - } - - override val analyzerPrepareBuilder: () => Analyzer = () => new Analyzer(catalog, conf) { - - def getStrategy(strategy: analyzer.Strategy): Strategy = strategy match { - case analyzer.FixedPoint(_) => fixedPoint - case _ => Once - } + override protected[sql] def getPostHocResolutionRules( + analyzer: Analyzer): Seq[Rule[LogicalPlan]] = Nil - override lazy val batches: Seq[Batch] = analyzer.batches.map(batch => - Batch(batch.name, getStrategy(batch.strategy), batch.rules: _*)) + override def analyzerBuilder(): Analyzer = new Analyzer(catalog, conf) { override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = getExtendedResolutionRules(this) @@ -787,31 +765,15 @@ class SnappySessionState21(override val snappySession: SnappySession) override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules } - override val analyzerWithoutPromoteBuilder: () => Analyzer = () => new Analyzer(catalog, conf) { - - def getStrategy(strategy: analyzer.Strategy): Strategy = strategy match { - case analyzer.FixedPoint(_) => fixedPoint - case _ => Once - } - - override lazy val batches: Seq[Batch] = analyzer.batches.map { - case batch if batch.name.equalsIgnoreCase("Resolution") => - Batch(batch.name, getStrategy(batch.strategy), batch.rules.filter(_ match { - case PromoteStrings => false - case _ => true - }): _*) - case batch => Batch(batch.name, getStrategy(batch.strategy), batch.rules: _*) + override def optimizerBuilder(): Optimizer = { + new SparkOptimizer(catalog, conf, experimentalMethods) with DefaultOptimizer { + override def state: SnappySessionState = self } - - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = - getExtendedResolutionRules(this) - - override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules } override lazy val conf: SQLConf = new SnappyConf(snappySession) - override lazy val sqlParser: SnappySqlParser = contextFunctions.newSQLParser(snappySession) + override lazy val sqlParser: SnappySqlParser = new SnappySqlParser(snappySession) override lazy val streamingQueryManager: StreamingQueryManager = { // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with @@ -822,28 +784,6 @@ class SnappySessionState21(override val snappySession: SnappySession) HashAggregateSize.set(snappySession.sessionState.conf, "-1") new StreamingQueryManager(snappySession) } - - /** - * Replaces [[UnresolvedRelation]]s with concrete relations from the catalog. - */ - object ResolveRelationsExtended extends Rule[LogicalPlan] with PredicateHelper { - def getTable(u: UnresolvedRelation): LogicalPlan = { - try { - catalog.lookupRelation(u.tableIdentifier, u.alias) - } catch { - case _: NoSuchTableException => - u.failAnalysis(s"Table not found: ${u.tableIdentifier.unquotedString}") - } - } - - def apply(plan: LogicalPlan): LogicalPlan = plan.transformUp { - case i@PutIntoTable(u: UnresolvedRelation, _) => - i.copy(table = EliminateSubqueryAliases(getTable(u))) - case d@DMLExternalTable(_, u: UnresolvedRelation, _) => - d.copy(query = EliminateSubqueryAliases(getTable(u))) - } - } - } class CodegenSparkFallback21(child: SparkPlan, diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 2698616acc..ed71ec16af 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -22,6 +22,7 @@ import java.nio.file.Paths import scala.collection.mutable +import io.snappydata.Property.HashAggregateSize import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} @@ -32,25 +33,27 @@ import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.optimizer.Optimizer import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{AccessUtils, FunctionIdentifier, InternalRow, TableIdentifier} import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} -import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation, PreWriteCheck} +import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyHiveCatalogBase, SnappyHiveExternalCatalog} -import org.apache.spark.sql.sources.{BaseRelation, Filter} -import org.apache.spark.sql.streaming.LogicalDStreamPlan +import org.apache.spark.sql.sources.{BaseRelation, Filter, ResolveQueryHints} +import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext @@ -220,6 +223,8 @@ class Spark232Internals extends SparkInternals { case Some(a) => SubqueryAlias(a, UnresolvedRelation(tableIdentifier)) } + override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = None + override def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias = { SubqueryAlias(alias, child) } @@ -445,19 +450,6 @@ class Spark232Internals extends SparkInternals { new SmartConnectorExternalCatalog23(session) } - override def newSnappySessionCatalog(sessionState: SnappySessionState, - externalCatalog: SnappyExternalCatalog, globalTempViewManager: GlobalTempViewManager, - functionRegistry: FunctionRegistry, conf: SQLConf, - hadoopConf: Configuration): SnappySessionCatalog = { - val session = sessionState.snappySession - val functionResourceLoader = externalCatalog match { - case c: SnappyHiveExternalCatalog => new HiveSessionResourceLoader(session, c.client()) - case _ => new SessionResourceLoader(session) - } - new SnappySessionCatalog23(session, externalCatalog, globalTempViewManager, - functionResourceLoader, functionRegistry, sessionState.snappySqlParser, conf, hadoopConf) - } - override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = DataSource.lookupDataSource(provider, conf) @@ -498,7 +490,8 @@ class Spark232Internals extends SparkInternals { // TODO: SW: } - override def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { + // TODO: SW: move to session state impl + private def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer = { new SparkOptimizer(sessionState.catalog, sessionState.experimentalMethods) with DefaultOptimizer { override def state: SnappySessionState = sessionState @@ -734,6 +727,109 @@ class SnappySessionCatalog23(override val snappySession: SnappySession, } } +class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[SessionState] = None) + extends BaseSessionStateBuilder(session, parentState) { + + override protected val conf: SQLConf = { + val conf = parentState.map(_.conf.clone()).getOrElse(new SnappyConf(session)) + mergeSparkConf(conf, session.sparkContext.conf) + conf + } + + override protected lazy val sqlParser: SnappySqlParser = new SnappySqlParser(session) + + protected val externalCatalog: SnappyExternalCatalog = + session.sharedState.getExternalCatalogInstance(session) + + override protected lazy val resourceLoader: SessionResourceLoader = externalCatalog match { + case c: SnappyHiveExternalCatalog => new HiveSessionResourceLoader(session, c.client()) + case _ => new SessionResourceLoader(session) + } + + override protected lazy val catalog: SnappySessionCatalog = { + val catalog = new SnappySessionCatalog23( + session, + externalCatalog, + session.sharedState.globalTempViewManager, + resourceLoader, + functionRegistry, + sqlParser, + conf, + SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf)) + parentState.foreach(_.catalog.copyStateTo(catalog)) + catalog + } + + override protected def analyzer: Analyzer = new Analyzer(catalog, conf) { + + private def state: SnappySessionState = session.sessionState + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = + state.getExtendedResolutionRules(this) + + override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = + state.getPostHocResolutionRules(this) + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = + state.getExtendedCheckRules ++ (PreReadCheck +: HiveOnlyCheck +: customCheckRules) + } + + override protected def optimizer: Optimizer = { + new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { + + override def state: SnappySessionState = session.sessionState + + override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = + super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules + } + } + + override protected def streamingQueryManager: StreamingQueryManager = { + // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with + // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This + // implies that Snappydata aggregation optimisation will be turned off for any usage of + // this session including non-streaming queries. + + HashAggregateSize.set(session.sessionState.conf, "-1") + new StreamingQueryManager(session) + } + + override def build(): SnappySessionState = { + new SessionState(session.sharedState, conf, experimentalMethods, + functionRegistry, udfRegistration, () => catalog, sqlParser, + () => analyzer, () => optimizer, planner, streamingQueryManager, + listenerManager, () => resourceLoader, createQueryExecution, + createClone) with SnappySessionState { + + override val snappySession: SnappySession = session + + override protected[sql] def getExtendedResolutionRules( + analyzer: Analyzer): Seq[Rule[LogicalPlan]] = { + (new PreprocessTable(this) :: + ResolveRelationsExtended :: + ResolveAliasInGroupBy :: + new FindDataSourceTable(session) :: + new ResolveSQLOnFile(session) :: + Nil) ++ customResolutionRules + } + + override protected[sql] def getPostHocResolutionRules( + analyzer: Analyzer): Seq[Rule[LogicalPlan]] = { + (PreprocessTableCreation(session) :: + PreprocessTableInsertion(conf) :: + DataSourceAnalysis(conf) :: + AnalyzeMutableOperations(session, analyzer) :: + ResolveQueryHints(session) :: + RowLevelSecurity :: + ExternalRelationLimitFetch :: + Nil) ++ customPostHocResolutionRules + } + } + } + + override protected def newBuilder: NewBuilder = new SnappySessionStateBuilder23(_, _) +} + final class CodegenSparkFallback23(child: SparkPlan, session: SnappySession) extends CodegenSparkFallback(child, session) { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 1d19d614fe..d3106175b4 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -109,9 +109,6 @@ class SnappyContextFunctions extends SparkSupport { confidence: Double, behavior: String): DataFrame = throw new UnsupportedOperationException("missing aqp jar") - def newSQLParser(snappySession: SnappySession): SnappySqlParser = - new SnappySqlParser(snappySession) - def aqpTablePopulator(session: SnappySession): Unit = { // register blank tasks for the stream tables so that the streams start session.sessionState.catalog.getDataSourceRelations[StreamBaseRelation]( diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 249f88cb6a..e54d10ed9c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -105,7 +105,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo * functions, and everything else that accepts a [[org.apache.spark.sql.internal.SQLConf]]. */ @transient - lazy override val sessionState: SnappySessionState = internals.newSnappySessionState(self) + override lazy val sessionState: SnappySessionState = internals.newSnappySessionState(self) def sessionCatalog: SnappySessionCatalog = sessionState.catalog diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index c95645feb2..4497079a10 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -16,14 +16,13 @@ */ package org.apache.spark.sql -import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.hadoop.conf.Configuration import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD -import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} @@ -36,9 +35,9 @@ import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIden import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange -import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.SnappyHiveExternalCatalog -import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionCatalog, SnappySessionState} +import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState, SnappySessionState} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.streaming.LogicalDStreamPlan import org.apache.spark.sql.types.{DataType, Metadata, StructType} @@ -256,6 +255,11 @@ trait SparkInternals extends Logging { */ def newUnresolvedRelation(tableIdentifier: TableIdentifier, alias: Option[String]): LogicalPlan + /** + * Get alias if specified in UnresolvedRelation else None. + */ + def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] + /** * Create an alias for a sub-query. */ @@ -464,14 +468,6 @@ trait SparkInternals extends Logging { */ def newSmartConnectorExternalCatalog(session: SparkSession): SmartConnectorExternalCatalog - /** - * Create a new implementation of SnappySession with given parameters. - */ - def newSnappySessionCatalog(sessionState: SnappySessionState, - externalCatalog: SnappyExternalCatalog, globalTempViewManager: GlobalTempViewManager, - functionRegistry: FunctionRegistry, conf: SQLConf, - hadoopConf: Configuration): SnappySessionCatalog - /** Lookup the data source for a given provider. */ def lookupDataSource(provider: String, conf: => SQLConf): Class[_] @@ -524,11 +520,6 @@ trait SparkInternals extends Logging { */ def newSnappySessionState(snappySession: SnappySession): SnappySessionState - /** - * Create a new optimizer with extended rules for SnappyData. - */ - def newSparkOptimizer(sessionState: SnappySessionState): SparkOptimizer - /** * Return the Spark plan for check pre-conditions before a write operation. */ diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala index 7228c3915e..2e1d4c0657 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionState.scala @@ -34,7 +34,9 @@ import io.snappydata.{Constant, HintName, Property, QueryHint} import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis -import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, Star, UnresolvedAttribute} +import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings +import org.apache.spark.sql.catalyst.analysis.{Analyzer, EliminateSubqueryAliases, NoSuchTableException, Star, UnresolvedAttribute, UnresolvedRelation} +import org.apache.spark.sql.catalyst.catalog.SessionCatalog import org.apache.spark.sql.catalyst.expressions.{And, EqualTo, In, _} import org.apache.spark.sql.catalyst.optimizer.{Optimizer, ReorderJoin} import org.apache.spark.sql.catalyst.parser.ParserInterface @@ -61,9 +63,9 @@ import org.apache.spark.{Partition, SparkConf} trait SnappySessionState extends SessionState with SnappyStrategies with SparkSupport { val snappySession: SnappySession - val analyzerBuilder: () => Analyzer - val analyzerPrepareBuilder: () => Analyzer - val analyzerWithoutPromoteBuilder: () => Analyzer + def catalogBuilder(): SessionCatalog + def analyzerBuilder(): Analyzer + def optimizerBuilder(): Optimizer val conf: SQLConf val sqlParser: ParserInterface val streamingQueryManager: StreamingQueryManager @@ -85,15 +87,63 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu private[sql] var disableStoreOptimizations: Boolean = false + /** + * Internal catalog for managing table and database states. + */ + override lazy val catalog: SnappySessionCatalog = + catalogBuilder().asInstanceOf[SnappySessionCatalog] + + override lazy val analyzer: Analyzer = analyzerBuilder() + // Only Avoid rule PromoteStrings that remove ParamLiteral for its type being NullType // Rest all rules, even if redundant, are same as analyzer for maintainability reason - lazy val analyzerPrepare: Analyzer = analyzerPrepareBuilder() + lazy val analyzerPrepare: Analyzer = new Analyzer(catalog, conf) { - lazy val analyzerWithoutPromote: Analyzer = analyzerWithoutPromoteBuilder() + def getStrategy(strategy: analyzer.Strategy): Strategy = strategy match { + case analyzer.FixedPoint(_) => fixedPoint + case _ => Once + } - override lazy val analyzer: Analyzer = analyzerBuilder() + override lazy val batches: Seq[Batch] = analyzer.batches.map(batch => + Batch(batch.name, getStrategy(batch.strategy), batch.rules: _*)) + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = + getExtendedResolutionRules(this) + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules + } + + lazy val analyzerWithoutPromote: Analyzer = new Analyzer(catalog, conf) { + + def getStrategy(strategy: analyzer.Strategy): Strategy = strategy match { + case analyzer.FixedPoint(_) => fixedPoint + case _ => Once + } + + override lazy val batches: Seq[Batch] = analyzer.batches.map { + case batch if batch.name.equalsIgnoreCase("Resolution") => + Batch(batch.name, getStrategy(batch.strategy), batch.rules.filter(_ match { + case PromoteStrings => false + case _ => true + }): _*) + case batch => Batch(batch.name, getStrategy(batch.strategy), batch.rules: _*) + } + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = + getExtendedResolutionRules(this) + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules + } - override lazy val optimizer: Optimizer = internals.newSparkOptimizer(this) + override lazy val optimizer: Optimizer = optimizerBuilder() + + protected[sql] def getExtendedResolutionRules(analyzer: Analyzer): Seq[Rule[LogicalPlan]] + + protected[sql] def getPostHocResolutionRules(analyzer: Analyzer): Seq[Rule[LogicalPlan]] + + protected[sql] def getExtendedCheckRules: Seq[LogicalPlan => Unit] = { + Seq(ConditionalPreWriteCheck(internals.newPreWriteCheck(this)), PrePutCheck) + } // copy of ConstantFolding that will turn a constant up/down cast into // a static value. @@ -248,6 +298,35 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu protected final lazy val executionCache = new ConcurrentHashMap[LogicalPlan, QueryExecution](4, 0.7f, 1) + /** + * Replaces [[UnresolvedRelation]]s with concrete relations from the catalog. + */ + object ResolveRelationsExtended extends Rule[LogicalPlan] with PredicateHelper { + def getTable(u: UnresolvedRelation, alias: Option[String] = None): LogicalPlan = { + try { + catalog.lookupRelation(u.tableIdentifier, + if (alias.isEmpty) internals.unresolvedRelationAlias(u) else alias) + } catch { + case _: TableNotFoundException | _: NoSuchTableException => + u.failAnalysis(s"Table not found: ${u.tableIdentifier.unquotedString}") + } + } + + def apply(plan: LogicalPlan): LogicalPlan = plan.transformUp { + case i@PutIntoTable(u: UnresolvedRelation, _) => + i.copy(table = EliminateSubqueryAliases(getTable(u))) + case i@PutIntoTable(s: SubqueryAlias, _) if s.child.isInstanceOf[UnresolvedRelation] => + i.copy(table = EliminateSubqueryAliases(getTable( + s.child.asInstanceOf[UnresolvedRelation], Option(s.alias)))) + case d@DMLExternalTable(_, u: UnresolvedRelation, _) => + d.copy(query = EliminateSubqueryAliases(getTable(u))) + case d@DMLExternalTable(_, s: SubqueryAlias, _) + if s.child.isInstanceOf[UnresolvedRelation] => + d.copy(query = EliminateSubqueryAliases(getTable( + s.child.asInstanceOf[UnresolvedRelation], Option(s.alias)))) + } + } + /** * Orders the join keys as per the underlying partitioning keys ordering of the table. */ @@ -582,16 +661,6 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } } - /** - * Internal catalog for managing table and database states. - */ - override lazy val catalog: SnappySessionCatalog = { - internals.newSnappySessionCatalog(this, - snappySharedState.getExternalCatalogInstance(snappySession), - snappySession.sharedState.globalTempViewManager, - functionRegistry, conf, newHadoopConf()) - } - protected[sql] def queryPreparations( topLevel: Boolean): Seq[Rule[SparkPlan]] = Seq[Rule[SparkPlan]]( python.ExtractPythonUDFs, From fc6d95ec324c2e48499b6b554b09592b81d75842 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 23 Sep 2019 13:45:50 +0530 Subject: [PATCH 21/80] update gradle-scalatest and fixes for failures --- build.gradle | 7 ++- .../sql/internal/Spark210Internals.scala | 25 +++++----- .../sql/internal/Spark232Internals.scala | 10 +++- .../apache/spark/sql/SnappyBaseParser.scala | 24 +++++----- .../spark/sql/SnappyContextFunctions.scala | 6 +-- .../apache/spark/sql/SnappyDDLParser.scala | 36 +++++++++------ .../org/apache/spark/sql/SnappySession.scala | 43 +++++++++-------- .../apache/spark/sql/SnappyStrategies.scala | 2 +- .../spark/sql/execution/ExistingPlans.scala | 6 +-- .../aggregate/SnappyHashAggregateExec.scala | 9 ++-- .../execution/columnar/ColumnDeleteExec.scala | 2 +- .../execution/columnar/ColumnInsertExec.scala | 19 +++----- .../execution/columnar/ColumnTableScan.scala | 22 ++++----- .../org/apache/spark/sql/execution/ddl.scala | 4 +- .../spark/sql/execution/row/RowExec.scala | 12 ++--- .../sql/execution/row/RowTableScan.scala | 5 +- .../spark/sql/hive/SnappySessionState.scala | 4 +- .../sql/internal/SnappySessionCatalog.scala | 10 ++-- .../spark/sql/types/CharStringType.scala | 46 ------------------- spark | 2 +- 20 files changed, 135 insertions(+), 159 deletions(-) delete mode 100644 core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala diff --git a/build.gradle b/build.gradle index 3d2c10a522..b8b4ac97cb 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'io.snappydata:gradle-scalatest:0.23' + classpath 'io.snappydata:gradle-scalatest:0.25' classpath 'org.github.ngbinh.scalastyle:gradle-scalastyle-plugin_2.11:0.9.0' classpath 'com.github.jengelman.gradle.plugins:shadow:5.1.0' classpath 'de.undercouch:gradle-download-task:3.4.3' @@ -123,7 +123,7 @@ allprojects { sparkPackageName = "snappydata-${version}_${sparkConnectorVersion}-s_${scalaBinaryVersion}" sparkConnectorDistName = "spark-${sparkConnectorVersion}-bin-hadoop2.7" - sparkCurrentVersion = '2.4.3' + sparkCurrentVersion = '2.4.4' sparkCurrentDistName = "spark-${sparkCurrentVersion}-bin-hadoop2.7" log4jVersion = '1.2.17' slf4jVersion = '1.7.25' @@ -387,8 +387,7 @@ subprojects { } task scalaTest(type: Test) { - def factory = new com.github.maiflai.BackwardsCompatibleJavaExecActionFactory(gradle.gradleVersion) - actions = [ new com.github.maiflai.ScalaTestAction(factory) ] + actions = [ new com.github.maiflai.ScalaTestAction() ] // top-level default is single process run since scalatest does not // spawn separate JVMs maxParallelForks = 1 diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 03441deafb..f53c57bf70 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -152,10 +152,8 @@ class Spark210Internals extends SparkInternals { override def resetCopyResult(ctx: CodegenContext): Unit = ctx.copyResult = false - override def isPredicateSubquery(expr: Expression): Boolean = expr match { - case _: PredicateSubquery => true - case _ => false - } + override def isPredicateSubquery(expr: Expression): Boolean = + expr.isInstanceOf[PredicateSubquery] override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, newExprId: ExprId): Expression = { @@ -743,29 +741,34 @@ class SnappySessionState21(override val snappySession: SnappySession) override def analyzerBuilder(): Analyzer = new Analyzer(catalog, conf) with SnappyAnalyzer { - override def session: SnappySession = snappySession + self => - private def state: SnappySessionState = snappySession.sessionState + override def session: SnappySession = snappySession - override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) + private def state: SnappySessionState = session.sessionState override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { val extensions = session.contextFunctions.getExtendedResolutionRules new HiveConditionalRule(_.catalog.ParquetConversions, state) :: new HiveConditionalRule(_.catalog.OrcConversions, state) :: - AnalyzeCreateTable(snappySession) :: + AnalyzeCreateTable(session) :: new PreprocessTable(state) :: ResolveAliasInGroupBy :: - new FindDataSourceTable(snappySession) :: + new FindDataSourceTable(session) :: DataSourceAnalysis(conf) :: - AnalyzeMutableOperations(snappySession, this) :: - ResolveQueryHints(snappySession) :: + AnalyzeMutableOperations(session, this) :: + ResolveQueryHints(session) :: RowLevelSecurity :: ExternalRelationLimitFetch :: (if (conf.runSQLonFile) new ResolveDataSource(session) :: extensions else extensions) } override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules + + override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = self.extendedResolutionRules + override val extendedCheckRules: Seq[LogicalPlan => Unit] = self.extendedCheckRules + } } override def optimizerBuilder(): Optimizer = { diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 627cf35e52..7350cc4846 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -760,12 +760,12 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se override protected def analyzer: Analyzer = new Analyzer(catalog, conf) with SnappyAnalyzer { + aSelf => + override def session: SnappySession = self.session private def state: SnappySessionState = session.sessionState - override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { val extensions = session.contextFunctions.getExtendedResolutionRules (new HiveConditionalRule(_.catalog.ParquetConversions, state) :: @@ -790,6 +790,12 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se override val extendedCheckRules: Seq[LogicalPlan => Unit] = state.getExtendedCheckRules ++ (PreReadCheck +: customCheckRules) + + override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.extendedResolutionRules + override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.postHocResolutionRules + override val extendedCheckRules: Seq[LogicalPlan => Unit] = aself.extendedCheckRules + } } override protected def optimizer: Optimizer = { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala index 6b2e22fbd1..c308e4ece8 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala @@ -177,7 +177,8 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def identifier: Rule1[String] = rule { - unquotedIdentifier ~> { s: String => + // noinspection ScalaUnnecessaryParentheses + unquotedIdentifier ~> { (s: String) => val lcase = lower(s) test(!Consts.reservedKeywords.contains(lcase)) ~ push(if (caseSensitive) s else lcase) @@ -185,11 +186,12 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { quotedIdentifier } + // noinspection ScalaUnnecessaryParentheses protected final def quotedIdentifier: Rule1[String] = rule { - atomic('`' ~ capture((noneOf("`") | "``"). +) ~ '`') ~ ws ~> { s: String => + atomic('`' ~ capture((noneOf("`") | "``"). +) ~ '`') ~ ws ~> { (s: String) => if (s.indexOf("``") >= 0) s.replace("``", "`") else s } | - atomic('"' ~ capture((noneOf("\"") | "\"\""). +) ~ '"') ~ ws ~> { s: String => + atomic('"' ~ capture((noneOf("\"") | "\"\""). +) ~ '"') ~ ws ~> { (s: String) => if (s.indexOf("\"\"") >= 0) s.replace("\"\"", "\"") else s } } @@ -200,7 +202,8 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { * interpreted as a strictIdentifier. */ protected final def strictIdentifier: Rule1[String] = rule { - unquotedIdentifier ~> { s: String => + // noinspection ScalaUnnecessaryParentheses + unquotedIdentifier ~> { (s: String) => val lcase = lower(s) test(!Consts.allKeywords.contains(lcase)) ~ push(if (caseSensitive) s else lcase) @@ -298,8 +301,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def structField: Rule1[StructField] = rule { - identifier ~ ':' ~ ws ~ dataType ~> ((name: String, t: DataType) => - StructField(name, t, nullable = true)) + identifier ~ ':' ~ ws ~ dataType ~> ((name: String, t: DataType) => StructField(name, t)) } protected final def structType: Rule1[DataType] = rule { @@ -308,12 +310,10 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def columnCharType: Rule1[DataType] = rule { - VARCHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => - CharStringType(d.toInt, baseType = "VARCHAR")) | - CHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => - CharStringType(d.toInt, baseType = "CHAR")) | + VARCHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => VarcharType(d.toInt)) | + CHAR ~ '(' ~ ws ~ digits ~ ')' ~ ws ~> ((d: String) => CharType(d.toInt)) | STRING ~> (() => StringType) | - CLOB ~> (() => CharStringType(Int.MaxValue, baseType = "CLOB")) + CLOB ~> (() => VarcharType(Int.MaxValue)) } final def columnDataType: Rule1[DataType] = rule { @@ -322,6 +322,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { /** allow for first character of unquoted identifier to be a numeric */ protected final def identifierExt: Rule1[String] = rule { + // noinspection ScalaUnnecessaryParentheses atomic(capture(Consts.identifier. +)) ~ delimiter ~> { (s: String) => val lcase = lower(s) test(!Consts.reservedKeywords.contains(lcase)) ~ @@ -331,6 +332,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { } protected final def packageIdentifierPart: Rule1[String] = rule { + // noinspection ScalaUnnecessaryParentheses atomic(capture((Consts.identifier | Consts.hyphen | Consts.dot). +)) ~ ws ~> { (s: String) => val lcase = lower(s) test(!Consts.reservedKeywords.contains(lcase)) ~ diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 61122c3230..8e7c1ccfe5 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -24,14 +24,13 @@ import io.snappydata.SnappyDataFunctions import io.snappydata.sql.catalog.CatalogObjectType import org.apache.spark.rdd.RDD -import org.apache.spark.sql.catalyst.analysis.Analyzer import org.apache.spark.sql.catalyst.catalog.CatalogTable import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} import org.apache.spark.sql.execution.exchange.{EnsureRequirements, ReuseExchange} import org.apache.spark.sql.execution.{CollapseCodegenStages, PlanLater, QueryExecution, SparkPlan, TopK, python} -import org.apache.spark.sql.hive.OptimizeSortAndFilePlans +import org.apache.spark.sql.hive.{OptimizeSortAndFilePlans, SnappyAnalyzer} import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect} import org.apache.spark.sql.sources.BaseRelation import org.apache.spark.sql.streaming.StreamBaseRelation @@ -159,7 +158,8 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def queryPreparations(topLevel: Boolean): Seq[Rule[SparkPlan]] = if (topLevel) queryPreparationsTopLevel else queryPreparationsNode - def executePlan(analyzer: Analyzer, plan: LogicalPlan): LogicalPlan = analyzer.execute(plan) + def executePlan(analyzer: SnappyAnalyzer, plan: LogicalPlan): LogicalPlan = + analyzer.baseExecute(plan) def sql[T](fn: => T): T = fn } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index ca37dd2a4a..ac43240ef2 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -268,7 +268,7 @@ abstract class SnappyDDLParser(session: SnappySession) final type ColumnDirectionMap = Seq[(String, Option[SortDirection])] final type TableEnd = (Option[String], Option[Map[String, String]], - Seq[String], Option[BucketSpec], Option[LogicalPlan]) + Array[String], Option[BucketSpec], Option[LogicalPlan]) protected final def ifNotExists: Rule1[Boolean] = rule { (IF ~ NOT ~ EXISTS ~ push(true)).? ~> ((o: Any) => o != None) @@ -374,14 +374,11 @@ abstract class SnappyDDLParser(session: SnappySession) case _ => IdUtil.getUserAuthorizationId(SnappyParserConsts.LDAPGROUP.lower) + ':' + IdUtil.getUserAuthorizationId(id) }) - ). + (commaSep) ~> { - policyTo: Any => policyTo.asInstanceOf[Seq[String]].map(_.trim) - }).? ~> { toOpt: Any => - toOpt match { - case Some(x) => x.asInstanceOf[Seq[String]] - case _ => SnappyParserConsts.CURRENT_USER.lower :: Nil - } - } + ). + (commaSep) ~> ((policyTo: Any) => policyTo.asInstanceOf[Seq[String]].map(_.trim)) + ).? ~> ((toOpt: Any) => toOpt match { + case Some(x) => x.asInstanceOf[Seq[String]] + case _ => SnappyParserConsts.CURRENT_USER.lower :: Nil + }) } protected def createPolicy: Rule1[LogicalPlan] = rule { @@ -682,8 +679,8 @@ abstract class SnappyDDLParser(session: SnappySession) // for both builtin as well as external implementations val mode = if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists CreateTableUsingCommand(streamIdent, None, specifiedSchema, None, - provider, mode, opts, partitionColumns = Nil, bucketSpec = None, - query = None, isExternal = false) + provider, mode, opts, partitionColumns = Utils.EMPTY_STRING_ARRAY, + bucketSpec = None, query = None, isExternal = false) } } @@ -725,7 +722,11 @@ abstract class SnappyDDLParser(session: SnappySession) val isTemp = te.asInstanceOf[Option[Boolean]].isDefined val funcResources = resources.asInstanceOf[Seq[FunctionResource]] funcResources.foreach(checkExists) - val classNameWithType = className + "__" + t.catalogString + val catalogString = t match { + case VarcharType(Int.MaxValue) => "string" + case _ => t.catalogString + } + val classNameWithType = className + "__" + catalogString internals.newCreateFunctionCommand(functionIdent.database, functionIdent.funcName, classNameWithType, funcResources, isTemp, ignoreIfExists, replace != None) @@ -923,9 +924,16 @@ abstract class SnappyDDLParser(session: SnappySession) t: DataType, notNull: Any, cm: Any) => val builder = new MetadataBuilder() val (dataType, empty) = t match { - case CharStringType(size, baseType) => + case CharType(size) => + builder.putLong(Constant.CHAR_TYPE_SIZE_PROP, size) + .putString(Constant.CHAR_TYPE_BASE_PROP, "CHAR") + (StringType, false) + case VarcharType(Int.MaxValue) => // indicates CLOB type + builder.putString(Constant.CHAR_TYPE_BASE_PROP, "CLOB") + (StringType, false) + case VarcharType(size) => builder.putLong(Constant.CHAR_TYPE_SIZE_PROP, size) - .putString(Constant.CHAR_TYPE_BASE_PROP, baseType) + .putString(Constant.CHAR_TYPE_BASE_PROP, "VARCHAR") (StringType, false) case StringType => builder.putString(Constant.CHAR_TYPE_BASE_PROP, "STRING") diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index d173f651d1..cceeee4887 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -107,12 +107,6 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo @transient override lazy val sessionState: SnappySessionState = internals.newSnappySessionState(self) - final def sessionCatalog: SnappySessionCatalog = sessionState.catalog - - final def externalCatalog: SnappyExternalCatalog = sessionState.catalog.snappyExternalCatalog - - final def snappyParser: SnappyParser = sessionState.snappySqlParser.sqlParser - @transient final val contextFunctions: SnappyContextFunctions = SparkSupport.aqpOverridesClass match { case None => new SnappyContextFunctions(self) @@ -120,6 +114,12 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo .asInstanceOf[SnappyContextFunctions] } + final def sessionCatalog: SnappySessionCatalog = sessionState.catalog + + final def externalCatalog: SnappyExternalCatalog = sessionState.catalog.snappyExternalCatalog + + final def snappyParser: SnappyParser = sessionState.snappySqlParser.sqlParser + SnappyContext.initGlobalSnappyContext(sparkContext, this) contextFunctions.registerSnappyFunctions() @@ -724,15 +724,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo }) } - def tableIdentifier(table: String): TableIdentifier = { - // hive meta-store is case-insensitive so always use upper case names for object names - val fullName = sessionCatalog.formatTableName(table) - val dotIndex = fullName.indexOf('.') - if (dotIndex > 0) { - new TableIdentifier(fullName.substring(dotIndex + 1), - Some(fullName.substring(0, dotIndex))) - } else new TableIdentifier(fullName, None) - } + def tableIdentifier(table: String, resolve: Boolean = false): TableIdentifier = + SnappySession.tableIdentifier(table, sessionCatalog, resolve) /** * Append dataframe to cache table in Spark. @@ -1335,7 +1328,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo mode: SaveMode, options: Map[String, String], isExternal: Boolean, - partitionColumns: Seq[String] = Nil, + partitionColumns: Array[String] = Utils.EMPTY_STRING_ARRAY, bucketSpec: Option[BucketSpec] = None, query: Option[LogicalPlan] = None): DataFrame = { val providerIsBuiltIn = SnappyContext.isBuiltInProvider(provider) @@ -1346,7 +1339,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } // for builtin tables, never use partitionSpec or bucketSpec since that has different // semantics and implies support for add/drop/recover partitions which is not possible - if (partitionColumns.nonEmpty) { + if (partitionColumns.length > 0) { throw new AnalysisException(s"CREATE TABLE ... USING '$provider' does not support " + "PARTITIONED BY clause.") } @@ -1404,7 +1397,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo storage = storage, schema = schema, provider = Some(provider), - partitionColumnNames = partitionColumns, + partitionColumnNames = partitionColumns.toSeq, bucketSpec = bucketSpec) val plan = CreateTable(tableDesc, mode, query.map(MarkerForCreateTableAsSelect)) sessionState.executePlan(plan).toRdd @@ -2065,6 +2058,20 @@ object SnappySession extends Logging { private val unresolvedColRegex = """(cannot resolve '`)(\w+).(\w+).(\w+)(.*given input columns.*)""".r + def tableIdentifier(table: String, catalog: SnappySessionCatalog, + resolve: Boolean): TableIdentifier = { + // hive meta-store is case-insensitive so use lower case names for object names consistently + val fullName = + if (catalog ne null) catalog.formatTableName(table) else JdbcExtendedUtils.toLowerCase(table) + val dotIndex = fullName.indexOf('.') + if (dotIndex > 0) { + new TableIdentifier(fullName.substring(dotIndex + 1), + Some(fullName.substring(0, dotIndex))) + } else if (resolve && (catalog ne null)) { + new TableIdentifier(fullName, Some(catalog.getCurrentSchema)) + } else new TableIdentifier(fullName, None) + } + private[sql] def findShuffleDependencies(rdd: RDD[_]): List[Int] = { rdd.dependencies.toList.flatMap { case s: ShuffleDependency[_, _, _] => if (s.rdd ne rdd) { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 38800651d4..e23977db2c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -56,7 +56,7 @@ private[sql] trait SnappyStrategies { object SnappyStrategies extends Strategy { def apply(plan: LogicalPlan): Seq[SparkPlan] = { - sampleSnappyCase(plan) + self.sampleSnappyCase(plan) } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index 4381e87c67..c1b4aa0aa5 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -52,12 +52,12 @@ private[sql] abstract class PartitionedPhysicalScan( numBuckets: Int, partitionColumns: Seq[Expression], partitionColumnAliases: Seq[Seq[Attribute]], - @transient override val relation: BaseRelation) + @transient override val relation: BaseRelation, + // not used currently (if need to use then get from relation.table) + override val metastoreTableIdentifier: Option[TableIdentifier] = None) extends DataSourceScanExec with CodegenSupportOnExecutor with NonRecursivePlans with SparkSupport { - val metastoreTableIdentifier: Option[TableIdentifier] = None - def getMetrics: Map[String, SQLMetric] = { if (sqlContext eq null) Map.empty else Map("numOutputRows" -> SQLMetrics.createMetric(sparkContext, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index 817b1591db..a0de3a777d 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -639,13 +639,13 @@ case class SnappyHashAggregateExec( numBytesForNullKeyBits)) { internals.addClassField(ctx, "byte[]", "nullKeysBitset", v => s"$v = new byte[$numBytesForNullKeyBits];") - } else "" + } else ctx.freshName("nullKeysBitset") val nullAggsBitsetTerm = if (SHAMapAccessor.isByteArrayNeededForNullBits( numBytesForNullAggsBits)) { - internals.addClassField(ctx, "byte[]", "nullAggsBitset", v => - s"$v = new byte[$numBytesForNullAggsBits];") - } else "" + internals.addClassField(ctx, "byte[]", "nullAggsBitset", + v => s"$v = new byte[$numBytesForNullAggsBits];") + } else ctx.freshName("nullAggsBitset") val probableSkipLen = this.groupingAttributes. lastIndexWhere(attr => !TypeUtilities.isFixedWidth(attr.dataType)) @@ -717,6 +717,7 @@ case class SnappyHashAggregateExec( val numBytesForNullBits = SHAMapAccessor. calculateNumberOfBytesForNullBits(structType.length) if (SHAMapAccessor.isByteArrayNeededForNullBits(numBytesForNullBits)) { + // TODO: variable not used in generated code apart from declaration?? internals.addClassField(ctx, "byte[]", "struct_nullKeysBitset", v => s"$v = new byte[$numBytesForNullBits];") } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala index 57f2d9fe3d..7086a49191 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala @@ -151,7 +151,7 @@ case class ColumnDeleteExec(child: SparkPlan, columnTable: String, | $lastColumnBatchId, ${compressionCodec.id}, new scala.Some($connTerm)); | $result += $batchOrdinal; | ${if (deleteMetric eq null) "" else s"$deleteMetric.${metricAdd(batchOrdinal)};"} - | $initializeEncoder + | ${initializeEncoder(position)} | $lastColumnBatchId = batchId; | $lastBucketId = bucketId; | $lastNumRows = numRows; diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index d747832f20..799366e10b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -74,8 +74,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], @transient private var initEncoders: String = _ @transient private val MAX_CURSOR_DECLARATIONS = 30 - @transient private var cursorsArrayTerm: String = _ - @transient private var cursorsArrayCreate: String = _ @transient private var encoderArrayTerm: String = _ @transient private var cursorArrayTerm: String = _ @transient private var catalogVersion: String = _ @@ -131,7 +129,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val listenerClass = classOf[TaskCompletionListener].getName val getContext = Utils.genTaskContextFunction(ctx) - defaultBatchSizeTerm = internals.addClassField(ctx, "int", "defaultBatchSize", _ => + internals.addClassField(ctx, "int", defaultBatchSizeTerm, _ => s""" |if ($getContext() != null) { | $getContext().addTaskCompletionListener(new $listenerClass() { @@ -141,7 +139,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], | } | }); |} - """.stripMargin) + """.stripMargin, useFreshName = false) s""" |if ($numInsertions >= 0 && $getContext() == null) { | $closeEncodersFunction(); @@ -168,6 +166,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], txIdConnArray = ctx.freshName("txIdConnArray") txId = ctx.freshName("txId") conn = ctx.freshName("conn") + defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") val defaultRowSize = ctx.freshName("defaultRowSize") val childProduce = doChildProduce(ctx) @@ -310,15 +309,13 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], batchSizeTerm = ctx.freshName("currentBatchSize") s"int $batchSizeTerm = 0;" } + defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") val defaultRowSize = ctx.freshName("defaultRowSize") val closeEncoders = new StringBuilder val (declarations, cursorDeclarations) = tableSchema.indices.map { i => - val encoder = internals.addClassField(ctx, encoderClass, "encoder", encoder => - s""" - |this.$encoder = $encodingClass.getColumnEncoder( - | $schemaTerm.fields()[$i]); - """.stripMargin) + val encoder = internals.addClassField(ctx, encoderClass, "encoder", + enc => s"this.$enc = $encodingClass.getColumnEncoder($schemaTerm.fields()[$i]);") var cursor: String = null val cursorDeclaration = if (useMemberVariables) { cursor = internals.addClassField(ctx, "long", "cursor", v => s"$v = 0L;") @@ -389,7 +386,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], | $childProduce |} |if ($batchSizeTerm > 0) { - | $cursorsArrayCreate | $storeColumnBatch($columnMaxDeltaRows, $storeColumnBatchArgs, | new scala.Some((java.sql.Connection)$txIdConnArray[0])); | $batchSizeTerm = 0; @@ -491,7 +487,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val columnBatch = ctx.freshName("columnBatch") val sizeTerm = ctx.freshName("size") val sizeExceededTerm = ctx.freshName("sizeExceeded") - cursorsArrayTerm = ctx.freshName("cursors") val mutableRow = internals.addClassField(ctx, "SpecificInternalRow", "mutableRow", v => s"$v = new SpecificInternalRow($schemaTerm);") @@ -697,7 +692,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], batchFunctionDeclarations.setLength( batchFunctionDeclarations.length - 2) batchFunctionCall.setLength(batchFunctionCall.length - 2) - cursorsArrayCreate = "" val columnBatchClass = classOf[ColumnBatch].getName val externalStoreTerm = ctx.addReferenceObj("externalStore", externalStore) @@ -770,7 +764,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], | $sizeExceededTerm = $sizeTerm >= $columnBatchSize; | } | if ($sizeExceededTerm) { - | $cursorsArrayCreate | $storeColumnBatch(-1, $storeColumnBatchArgs, | new scala.Some((java.sql.Connection)$txIdConnArray[0])); | $batchSizeTerm = 0; diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index bf02975172..8674c7dba4 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -86,16 +86,21 @@ private[sql] final case class ColumnTableScan( else "ColumnTableScan" } + @transient private lazy val session: Option[SnappySession] = sqlContext match { + case null => None + case c => Some(c.sparkSession.asInstanceOf[SnappySession]) + } + lazy val tableIdentifier: Option[TableIdentifier] = baseRelation match { case null => None - case r => sqlContext match { - case null => None - case c => Some(c.sparkSession.asInstanceOf[SnappySession].tableIdentifier(r.table)) + case r => session match { + case Some(s) => Some(s.tableIdentifier(r.table, resolve = true)) + case None => Some(SnappySession.tableIdentifier(r.table, catalog = null, resolve = false)) } } - override def equals(obj: Any): Boolean = obj match { - case r: ColumnTableScan => r.baseRelation.table == baseRelation.table && + override def sameResult(plan: SparkPlan): Boolean = plan match { + case r: ColumnTableScan => r.tableIdentifier == tableIdentifier && r.numBuckets == numBuckets && r.schema == schema case _ => false } @@ -143,11 +148,6 @@ private[sql] final case class ColumnTableScan( private lazy val otherRDDsPartitionIndex = rdd.getNumPartitions - private def session = sqlContext match { - case null => None - case c => Some(c.sparkSession.asInstanceOf[SnappySession]) - } - override def inputRDDs(): Seq[RDD[InternalRow]] = { allRDDs.asInstanceOf[RDD[InternalRow]] :: Nil } @@ -355,7 +355,7 @@ private[sql] final case class ColumnTableScan( val initBufferFunction = s"${buffer}Init" val bufferVar = if (isWideSchema) { internals.addClassField(ctx, "Object", "bufferObject") - } else "" + } else s"${buffer}Object" // projections are not pushed in embedded mode for optimized access val baseIndex = Utils.fieldIndex(schemaAttributes, attr.name, caseSensitive) val rsPosition = if (embedded) baseIndex + 1 else rsIndex + 1 diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 1a9ba8cc19..9f2147ebbf 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -62,7 +62,7 @@ case class CreateTableUsingCommand( provider: String, mode: SaveMode, options: Map[String, String], - partitionColumns: Seq[String], + partitionColumns: Array[String], bucketSpec: Option[BucketSpec], query: Option[LogicalPlan], isExternal: Boolean) extends RunnableCommand { @@ -455,7 +455,7 @@ case class DescribeSnappyTableCommand(table: TableIdentifier, partitionSpec: Tab override def run(sparkSession: SparkSession): Seq[Row] = { val catalog = sparkSession.asInstanceOf[SnappySession].sessionCatalog catalog.synchronized { - // set the flag to return CharStringType if present + // set the flag to return CharType/VarcharType if present catalog.convertCharTypesInMetadata = true try { internals.newDescribeTableCommand(table, partitionSpec, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index 0e58bc9274..9158cad3b4 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -39,7 +39,6 @@ trait RowExec extends TableExec { @transient protected var rowCount: String = _ @transient protected var result: String = _ - def resolvedName: String def connProps: ConnectionProperties @@ -123,16 +122,17 @@ trait RowExec extends TableExec { protected def doProduce(ctx: CodegenContext, pstmtStr: String, produceAddonCode: () => String = () => ""): String = { + + stmt = internals.addClassField(ctx, "java.sql.PreparedStatement", "statement") + result = internals.addClassField(ctx, "long", "result", v => s"$v = -1L;") + rowCount = internals.addClassField(ctx, "long", "rowCount") + val (initCode, commitCode, endCode) = connectionCodes(ctx) - val numOpRowsMetric = if (onExecutor) null - else metricTerm(ctx, s"num${opType}Rows") + val numOpRowsMetric = if (onExecutor) null else metricTerm(ctx, s"num${opType}Rows") val numOperations = ctx.freshName("numOperations") val childProduce = doChildProduce(ctx) val mutateTable = ctx.freshName("mutateTable") - stmt = internals.addClassField(ctx, "java.sql.PreparedStatement", "statement") - result = internals.addClassField(ctx, "long", "result", v => s"$v = -1L;") - rowCount = internals.addClassField(ctx, "long", "rowCount") ctx.addNewFunction(mutateTable, s""" |private void $mutateTable() throws java.io.IOException, java.sql.SQLException { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 4d57bfdde6..18196ced89 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -60,8 +60,9 @@ private[sql] final case class RowTableScan( lazy val tableIdentifier: Option[TableIdentifier] = baseRelation match { case null => None case r => sqlContext match { - case null => None - case c => Some(c.sparkSession.asInstanceOf[SnappySession].tableIdentifier(r.table)) + case null => Some(SnappySession.tableIdentifier(r.table, catalog = null, resolve = false)) + case c => + Some(c.sparkSession.asInstanceOf[SnappySession].tableIdentifier(r.table, resolve = true)) } } diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 506e75a717..01b398c98e 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -74,7 +74,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu final def snappySqlParser: SnappySqlParser = sqlParser.asInstanceOf[SnappySqlParser] - val sampleSnappyCase: PartialFunction[LogicalPlan, Seq[SparkPlan]] = + private[sql] lazy val sampleSnappyCase: PartialFunction[LogicalPlan, Seq[SparkPlan]] = snappySession.contextFunctions.createSampleSnappyCase() private[sql] lazy val hiveSession: SparkSession = { @@ -752,6 +752,8 @@ trait SnappyAnalyzer extends Analyzer { case batch => Batch(batch.name, batch.strategy.asInstanceOf[Strategy], batch.rules: _*) } + def baseExecute(plan: LogicalPlan): LogicalPlan = super.execute(plan) + override def execute(plan: LogicalPlan): LogicalPlan = session.contextFunctions.executePlan(this, plan) diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index c2bda14186..13c2ea8e4a 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -73,7 +73,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { /** * Can be used to temporarily switch the metadata returned by catalog - * to use CharStringType with baseType as CHAR/VARCHAR. Is to be used for only temporary + * to use CharType and VarcharTypes. Is to be used for only temporary * change by a caller that wishes the consume the result because rest * of Spark cannot deal with those types. */ @@ -613,10 +613,10 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { case StringType if field.metadata.contains(Constant.CHAR_TYPE_BASE_PROP) => val md = field.metadata md.getString(Constant.CHAR_TYPE_BASE_PROP) match { - case "CHAR" => field.copy(dataType = CharStringType( - md.getLong(Constant.CHAR_TYPE_SIZE_PROP).toInt, baseType = "CHAR")) - case "VARCHAR" => field.copy(dataType = CharStringType( - md.getLong(Constant.CHAR_TYPE_SIZE_PROP).toInt, baseType = "VARCHAR")) + case "CHAR" => + field.copy(dataType = CharType(md.getLong(Constant.CHAR_TYPE_SIZE_PROP).toInt)) + case "VARCHAR" => + field.copy(dataType = VarcharType(md.getLong(Constant.CHAR_TYPE_SIZE_PROP).toInt)) case _ => field } case _ => field diff --git a/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala b/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala deleted file mode 100644 index 7c78366f94..0000000000 --- a/core/src/main/scala/org/apache/spark/sql/types/CharStringType.scala +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.types - -import scala.math.Ordering -import scala.reflect.runtime.universe.typeTag - -import org.apache.spark.unsafe.types.UTF8String - -/** - * An internal type to represent VARCHAR() and CHAR() types in - * column definitions of "CREATE TABLE". - */ -case class CharStringType(override val defaultSize: Int, - baseType: String) extends AtomicType { - - override private[sql] type InternalType = UTF8String - - @transient override private[sql] lazy val tag = typeTag[InternalType] - - override private[sql] val ordering = implicitly[Ordering[InternalType]] - - override def typeName: String = baseType match { - case "VARCHAR" => s"varchar($defaultSize)" - case "CHAR" => s"char($defaultSize)" - case _ => "string" - } - - override def sql: String = typeName - - override private[spark] def asNullable: CharStringType = this -} diff --git a/spark b/spark index c4147c3a6a..8d29cc1302 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit c4147c3a6ac3ee9a082a9772472a2e621255dd78 +Subproject commit 8d29cc13029b19dad49d4a0b38d9d2f9f0122441 From aaad0bcd9434ee769ddbb5ba439b6a68fc2666ce Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 24 Sep 2019 00:33:13 +0530 Subject: [PATCH 22/80] more fixes --- .../org/apache/spark/sql/SnappySession.scala | 2 +- .../org/apache/spark/sql/execution/ddl.scala | 8 +++-- .../sql/execution/row/RowTableScan.scala | 7 ++-- .../sql/internal/SnappySessionCatalog.scala | 2 +- .../sql/sources/SnappyOptimizations.scala | 6 ++-- .../spark/sql/store/SnappyJoinSuite.scala | 35 +++++++++---------- 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index cceeee4887..c2b50814d8 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -1484,7 +1484,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } sessionCatalog.resolveRelation(tableIdent) match { case lr: LogicalRelation if lr.relation.isInstanceOf[AlterableRelation] => - val ar = lr.asInstanceOf[AlterableRelation] + val ar = lr.relation.asInstanceOf[AlterableRelation] ar.alterTable(tableIdent, isAddColumn, column, extensions) val metadata = sessionCatalog.getTableMetadata(tableIdent) sessionCatalog.alterTable(metadata.copy(schema = lr.relation.schema)) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 9f2147ebbf..42d230fcc7 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -452,14 +452,18 @@ case class ShowViewsCommand(session: SnappySession, schemaOpt: Option[String], case class DescribeSnappyTableCommand(table: TableIdentifier, partitionSpec: TablePartitionSpec, isExtended: Boolean, isFormatted: Boolean) extends RunnableCommand with SparkSupport { + private[this] val describeCmd = internals.newDescribeTableCommand( + table, partitionSpec, isExtended, isFormatted) + + override def output: Seq[Attribute] = describeCmd.output + override def run(sparkSession: SparkSession): Seq[Row] = { val catalog = sparkSession.asInstanceOf[SnappySession].sessionCatalog catalog.synchronized { // set the flag to return CharType/VarcharType if present catalog.convertCharTypesInMetadata = true try { - internals.newDescribeTableCommand(table, partitionSpec, - isExtended, isFormatted).run(sparkSession) + describeCmd.run(sparkSession) } finally { catalog.convertCharTypesInMetadata = false } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 18196ced89..5a5e4aad98 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -28,7 +28,7 @@ import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCo import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression} import org.apache.spark.sql.catalyst.util.{SerializedArray, SerializedMap, SerializedRow} import org.apache.spark.sql.collection.Utils -import org.apache.spark.sql.execution.{PartitionedDataSourceScan, PartitionedPhysicalScan} +import org.apache.spark.sql.execution.{PartitionedDataSourceScan, PartitionedPhysicalScan, SparkPlan} import org.apache.spark.sql.sources.BaseRelation import org.apache.spark.sql.types._ @@ -66,8 +66,9 @@ private[sql] final case class RowTableScan( } } - override def equals(obj: Any): Boolean = obj match { - case r: RowTableScan => r.table == table && r.numBuckets == numBuckets && r.schema == schema + override def sameResult(plan: SparkPlan): Boolean = plan match { + case r: RowTableScan => r.tableIdentifier == tableIdentifier && + r.numBuckets == numBuckets && r.schema == schema case _ => false } diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 13c2ea8e4a..fc2e0cf74f 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -735,7 +735,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { contextFunctions.registerTopK(topK, rdd, ifExists, overwrite) def unregisterTopK(topKName: String): Unit = contextFunctions.unregisterTopK(topKName) - + override def alterTable(table: CatalogTable): Unit = { // first check required permission to alter objects in a schema val schemaName = getSchemaName(table.identifier) diff --git a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala index ddca883e35..be57c07b35 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala @@ -59,7 +59,7 @@ case class ResolveQueryHints(snappySession: SnappySession) explicitIndexHint.getOrElse(lr.relation.asInstanceOf[ColumnFormatRelation].table, Some(lr)).get case s: SubqueryAlias if s.child.isInstanceOf[LogicalRelation] && - s.child.asInstanceOf[LogicalRelation].relation.isInstanceOf[IndexColumnFormatRelation] => + !s.child.asInstanceOf[LogicalRelation].relation.isInstanceOf[IndexColumnFormatRelation] => explicitIndexHint.get(s.alias) match { case Some(Some(index)) => internals.newSubqueryAlias(s.alias, index) case _ => s @@ -76,7 +76,7 @@ case class ResolveQueryHints(snappySession: SnappySession) } private def getIndexHints: mutable.Map[String, Option[LogicalPlan]] = { - val indexHint = Index + val indexHint = Index.toString val hints = snappySession.queryHints if (hints.isEmpty) mutable.Map.empty else hints.asScala.collect { @@ -481,7 +481,7 @@ case class ResolveIndex(implicit val snappySession: SnappySession) extends Rule[ } val hints = snappySession.queryHints if (!hints.isEmpty && hints.asScala.exists { - case (hint, _) => hint.startsWith(Index) && + case (hint, _) => hint.startsWith(Index.toString) && !joinOrderHints.contains(ContinueOptimizations) } || Entity.hasUnresolvedReferences(plan)) { return plan diff --git a/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala b/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala index 8e3512fec2..5c1b4cb730 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala @@ -183,7 +183,7 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { } - test("Check shuffle in operations with partition pruning"){ + test("Check shuffle in operations with partition pruning") { val t1 = "t1" val t2 = "t2" @@ -196,20 +196,19 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { "options( partition_by 'ol_1_int_id', buckets '16')") var df = snc.sql(s"select sum(ol_1_int2_id) from $t1 where ol_1_int_id=1") - checkForShuffle(df.logicalPlan, snc , shuffleExpected = false) + checkForShuffle(df.logicalPlan, snc, shuffleExpected = false) - // with limit + // with limit shuffle is expected to SinglePartition when there is no CollectAggregateExec df = snc.sql(s"select sum(ol_1_int2_id) from $t1 where ol_1_int_id=1 limit 1") - checkForShuffle(df.logicalPlan, snc , shuffleExpected = false) + checkForShuffle(df.logicalPlan, snc, shuffleExpected = true) df = snc.sql(s"update $t1 set ol_1_str_id = '3' where ol_1_int_id in (" + s"select ol_1_int_id from $t2 where $t2.ol_1_int_id=1)") - checkForShuffle(df.logicalPlan, snc , shuffleExpected = false) - - snc.dropTable("t1"); - snc.dropTable("t2"); + checkForShuffle(df.logicalPlan, snc, shuffleExpected = false) + snc.dropTable("t1") + snc.dropTable("t2") } /** @@ -219,7 +218,7 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { def checkForShuffle(plan: LogicalPlan, snc: SnappyContext, shuffleExpected: Boolean): Unit = { - val qe = new QueryExecution(snc.snappySession, plan) + val qe = snc.snappySession.executePlan(plan) // logInfo(qe.executedPlan) val lj = qe.executedPlan collect { case ex: Exchange => ex @@ -228,10 +227,10 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { if (lj.isEmpty) sys.error(s"Shuffle Expected , but was not found") } else { lj.foreach(a => a.child.collect { - // this means no Exhange should have child as PartitionedPhysicalRDD - case p: PartitionedPhysicalScan => sys.error( + // this means no Exchange should have child as PartitionedPhysicalRDD + case _: PartitionedPhysicalScan => sys.error( s"Did not expect exchange with partitioned scan with same partitions") - case p: RowDataSourceScanExec => sys.error( + case _: RowDataSourceScanExec => sys.error( s"Did not expect RowDataSourceScanExec with PartitionedDataSourceScan") case _ => // do nothing, may be some other Exchange and not with scan }) @@ -650,7 +649,7 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { s"where c.cid= f.cid and f.sid = so.sid and c.cid = so.cid" + s" and subTotal >13 and c.cid>3 and f.tid = 1") - assert(df.collect().size === 2) + assert(df.collect().length === 2) df = snc.sql(s" select f.cid, cust_name, f.sid, so.sid," + s" so.qty, subTotal, oid, order_time, ask from" + @@ -659,16 +658,16 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { s" trade.sellorders so" + s" where c.cid= f.cid and f.sid = so.sid and c.cid = so.cid" + s" and subTotal >13 and c.cid>1 and f.tid = 1") - assert(df.collect().size === 4) + assert(df.collect().length === 4) df = snc.sql(s"select n.cid, cust_name, n.securities, n.cash, n.tid, " + s"c.cid from trade.customers c, trade.networth n where n.cid = c.cid" + s" and n.tid = 1 and c.cid > 3") - assert(df.collect().size === 3) + assert(df.collect().length === 3) df = snc.sql(s"select n.cid, cust_name, n.securities, n.cash, n.tid, c.cid" + s" from trade.customers c, trade.networth n where n.cid = c.cid" + s" and n.tid = 1 and c.cid > 5") - assert(df.collect().size === 1) + assert(df.collect().length === 1) } private def dropTables(): Unit = { @@ -699,7 +698,7 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { s" trade.sellorders so" + s" where c.cid= f.cid and f.sid = so.sid and c.cid = so.cid" + s" and subTotal > 4 and c.cid = 1 and f.tid = 1") - assert(df.collect().size === 1) + assert(df.collect().length === 1) df = snc.sql(s" select f.cid, cust_name, f.sid, so.sid," + s" so.qty, subTotal, oid, order_time, ask from" + s" trade.customers c," + @@ -707,7 +706,7 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { s" trade.sellorders so" + s" where c.cid= f.cid and f.sid = so.sid and c.cid = so.cid" + s" and subTotal > 4 and c.cid = 2 and f.tid = 1") - assert(df.collect().size === 1) + assert(df.collect().length === 1) dropTables() loadTables("COLUMN", "", "partition_by 'cid'", ", colocate_with 'trade.customers'") From 966821e9bdaf573b7eddc60c9ddf73c6ed579c18 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 30 Sep 2019 01:11:21 +0530 Subject: [PATCH 23/80] more fixes --- .../scala/io/snappydata/impl/LeadImpl.scala | 3 +- .../sql/internal/Spark210Internals.scala | 33 +++++++++++++------ .../sql/internal/Spark232Internals.scala | 5 ++- .../sql/catalog/SnappyExternalCatalog.scala | 1 + .../spark/sql/SnappyContextFunctions.scala | 2 ++ .../execution/columnar/ColumnInsertExec.scala | 7 ++-- .../sql/internal/SnappySessionCatalog.scala | 10 +----- .../apache/spark/sql/internal/session.scala | 2 +- store | 2 +- 9 files changed, 35 insertions(+), 30 deletions(-) diff --git a/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala b/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala index 6da432a73f..e497ca288e 100644 --- a/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala +++ b/cluster/src/main/scala/io/snappydata/impl/LeadImpl.scala @@ -32,6 +32,7 @@ import com.gemstone.gemfire.CancelException import com.gemstone.gemfire.cache.CacheClosedException import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem import com.gemstone.gemfire.distributed.internal.locks.{DLockService, DistributedMemberLock} +import com.gemstone.gemfire.distributed.internal.membership.jgroup.JGroupMembershipManager.DEFAULT_LEADER_MEMBER_WEIGHT_NAME import com.gemstone.gemfire.internal.cache.{CacheServerLauncher, Status} import com.gemstone.gemfire.internal.shared.ClientSharedUtils import com.pivotal.gemfirexd.FabricService.State @@ -62,8 +63,6 @@ class LeadImpl extends ServerImpl with Lead self => - val DEFAULT_LEADER_MEMBER_WEIGHT_NAME = "gemfire.member-weight" - val DEFAULT_LEADER_MEMBER_WEIGHT = "17" private val LOCK_SERVICE_NAME = "__PRIMARY_LEADER_LS" diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index f53c57bf70..ee4445a802 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -171,20 +171,31 @@ class Spark210Internals extends SparkInternals { def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { // if the call is done the second time, then attach in embedded mode // too since this is coming from ToolsCallbackImpl - val (forceAttachUI, listener) = SparkSession.sqlListener.get() match { - case l: SnappySQLListener => true -> l // already set - case _ => + val (forceAttachUI, listener, old) = SparkSession.sqlListener.get() match { + case l: SnappySQLListener => (true, l, null) // already set + case l => val listener = new SnappySQLListener(sparkContext.conf) - if (SparkSession.sqlListener.compareAndSet(null, listener)) { - sparkContext.addSparkListener(listener) + if (SparkSession.sqlListener.compareAndSet(l, listener)) { + sparkContext.listenerBus.addListener(listener) + if (l ne null) sparkContext.listenerBus.removeListener(l) } - false -> listener + (false, listener, l) } // embedded mode attaches SQLTab later via ToolsCallbackImpl that also // takes care of injecting any authentication module if configured sparkContext.ui match { case Some(ui) if forceAttachUI || !SnappyContext.getClusterMode(sparkContext) - .isInstanceOf[SnappyEmbeddedMode] => new SQLTab(listener, ui) + .isInstanceOf[SnappyEmbeddedMode] => + // clear the previous SQLTab, if any + if (old ne null) { + ui.getTabs.foreach { + case tab: SQLTab => + ui.detachTab(tab) + ui.removeStaticHandler("/static/sql") + case _ => + } + } + new SQLTab(listener, ui) case _ => } } @@ -748,8 +759,9 @@ class SnappySessionState21(override val snappySession: SnappySession) private def state: SnappySessionState = session.sessionState override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { - val extensions = session.contextFunctions.getExtendedResolutionRules - new HiveConditionalRule(_.catalog.ParquetConversions, state) :: + val extensions1 = session.contextFunctions.getExtendedResolutionRules + val extensions2 = session.contextFunctions.getPostHocResolutionRules + val rules = new HiveConditionalRule(_.catalog.ParquetConversions, state) :: new HiveConditionalRule(_.catalog.OrcConversions, state) :: AnalyzeCreateTable(session) :: new PreprocessTable(state) :: @@ -760,7 +772,8 @@ class SnappySessionState21(override val snappySession: SnappySession) ResolveQueryHints(session) :: RowLevelSecurity :: ExternalRelationLimitFetch :: - (if (conf.runSQLonFile) new ResolveDataSource(session) :: extensions else extensions) + (if (conf.runSQLonFile) new ResolveDataSource(session) :: extensions2 else extensions2) + if (extensions1.isEmpty) rules else extensions1 ++ rules } override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 7350cc4846..37c38380a1 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -767,14 +767,13 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se private def state: SnappySessionState = session.sessionState override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { - val extensions = session.contextFunctions.getExtendedResolutionRules (new HiveConditionalRule(_.catalog.ParquetConversions, state) :: new HiveConditionalRule(_.catalog.OrcConversions, state) :: new PreprocessTable(state) :: state.ResolveAliasInGroupBy :: new FindDataSourceTable(session) :: new ResolveSQLOnFile(session) :: - extensions) ++ customResolutionRules + session.contextFunctions.getExtendedResolutionRules) ++ customResolutionRules } override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = { @@ -785,7 +784,7 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se ResolveQueryHints(session) :: state.RowLevelSecurity :: state.ExternalRelationLimitFetch :: - Nil) ++ customPostHocResolutionRules + session.contextFunctions.getPostHocResolutionRules) ++ customPostHocResolutionRules } override val extendedCheckRules: Seq[LogicalPlan => Unit] = diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 2bf856576a..9f1c7930c9 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -158,6 +158,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { includeTypes: Seq[CatalogObjectType.Type], excludeTypes: Seq[CatalogObjectType.Type]): Seq[CatalogTable] = { val allDependents = SnappyExternalCatalog.getDependents(properties) + if (allDependents.length == 0) return Nil // scan through dependents even if includes/excludes are empty to skip dependents // not present (e.g. intermediate cluster failure before dependent was recorded // in base table entry and actual table entry creation) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 8e7c1ccfe5..6ca743a077 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -144,6 +144,8 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def getExtendedResolutionRules: List[Rule[LogicalPlan]] = Nil + def getPostHocResolutionRules: List[Rule[LogicalPlan]] = Nil + protected def createQueryPreparations( topLevel: Boolean): Seq[Rule[SparkPlan]] = Seq[Rule[SparkPlan]]( python.ExtractPythonUDFs, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index 799366e10b..8d36213655 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -161,6 +161,8 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], classOf[StructType].getName) val schemaLength = tableSchema.length + cursorArrayTerm = internals.addClassField(ctx, "long[]", "cursorArray", + cur => s"this.$cur = new long[$schemaLength];") numInsertions = internals.addClassField(ctx, "long", "numInsertions", v => s"$v = -1L;") maxDeltaRowsTerm = ctx.freshName("maxDeltaRows") txIdConnArray = ctx.freshName("txIdConnArray") @@ -169,7 +171,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") val defaultRowSize = ctx.freshName("defaultRowSize") - val childProduce = doChildProduce(ctx) child match { case c: CallbackColumnInsert => @@ -195,9 +196,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], |${loop(initEncoderCode(enc), schemaLength)} """.stripMargin) - cursorArrayTerm = internals.addClassField(ctx, "long[]", "cursorArray", - cur => s"this.$cur = new long[$schemaLength];") - + val childProduce = doChildProduce(ctx) val encoderLoopCode = s"$defaultRowSize += " + s"$encoderArrayTerm[i].defaultSize($schemaTerm.fields()[i].dataType());" diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index fc2e0cf74f..346a135065 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -227,7 +227,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { filter.transformAllExpressions { case ar: AttributeReference if mappingInfo.contains(ar.exprId) => AttributeReference(ar.name, ar.dataType, ar.nullable, - ar.metadata)(mappingInfo(ar.exprId), ar.qualifier) + ar.metadata)(mappingInfo(ar.exprId), ar.qualifier, ar.isGenerated) } } } @@ -1074,14 +1074,6 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { // TODO: SW: clean up function creation to be like Spark with backward compatibility - protected def functionLookupFailure(name: FunctionIdentifier): Nothing = { - val schema = name.database match { - case None => getCurrentSchema - case Some(s) => s - } - throw new NoSuchFunctionException(schema, name.funcName) - } - override def loadFunctionResources(resources: Seq[FunctionResource]): Unit = { val qualifiedName = SnappyExternalCatalog.currentFunctionIdentifier.get() val functionQualifiedName = qualifiedName.unquotedString diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index 5777623dd0..01745ded26 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -602,7 +602,7 @@ private[sql] final class PreprocessTable(state: SnappySessionState) (tableDesc.bucketSpec.isEmpty && tableDesc.partitionColumnNames.isEmpty)) && state.catalog.tableExists(tableIdent)) { internals.newInsertPlanWithCountOutput( - table = internals.newUnresolvedRelation(tableDesc.identifier, None), + table = internals.newUnresolvedRelation(tableIdent, None), partition = Map.empty, child = queryOpt.get, overwrite = false, ifNotExists = false) } else if (isBuiltin) { val tableName = tableIdent.unquotedString diff --git a/store b/store index 5a266fb932..1e1420e66a 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 5a266fb93222ee45200668822eec5e0e10b0ba16 +Subproject commit 1e1420e66a84fd5690f9d600de94b7b118c4c3ce From 3ac0c9d3cd4ff7f3a9c93cfecaebd15d5e5ef4b0 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 30 Sep 2019 14:01:29 +0530 Subject: [PATCH 24/80] fixes --- .../apache/spark/sql/collection/Utils.scala | 64 ++++++++++--------- .../spark/sql/hive/SnappySessionState.scala | 7 +- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala index 025f6b4bbb..4c9c18c4bb 100644 --- a/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala +++ b/core/src/main/scala/org/apache/spark/sql/collection/Utils.scala @@ -250,10 +250,10 @@ object Utils extends Logging with SparkSupport { private final val timeIntervalSpec = "([0-9]+)(ms|s|m|h)".r /** - * Parse the given time interval value as long milliseconds. - * - * @see timeIntervalSpec for the allowed string specification - */ + * Parse the given time interval value as long milliseconds. + * + * @see timeIntervalSpec for the allowed string specification + */ def parseTimeInterval(optV: Any, module: String): Long = { optV match { case tii: Int => tii.toLong @@ -433,7 +433,7 @@ object Utils extends Logging with SparkSupport { * field is stored (and rendered) as VARCHAR by SnappyStore. * * @param size the size parameter of the VARCHAR() column type - * @param md optional Metadata object to be merged into the result + * @param md optional Metadata object to be merged into the result * @return the result Metadata object to use for StructField */ def varcharMetadata(size: Int, md: Metadata): Metadata = { @@ -471,7 +471,7 @@ object Utils extends Logging with SparkSupport { * field is stored (and rendered) as CHAR by SnappyStore. * * @param size the size parameter of the CHAR() column type - * @param md optional Metadata object to be merged into the result + * @param md optional Metadata object to be merged into the result * @return the result Metadata object to use for StructField */ def charMetadata(size: Int, md: Metadata): Metadata = { @@ -513,9 +513,9 @@ object Utils extends Logging with SparkSupport { } /** - * Get the result schema given an optional explicit schema and base table. - * In case both are specified, then check compatibility between the two. - */ + * Get the result schema given an optional explicit schema and base table. + * In case both are specified, then check compatibility between the two. + */ def getSchemaAndPlanFromBase(schemaOpt: Option[StructType], baseTableOpt: Option[String], catalog: SnappySessionCatalog, asSelect: Boolean, table: String, @@ -579,8 +579,8 @@ object Utils extends Logging with SparkSupport { } /** - * Register given driver class with Spark's loader. - */ + * Register given driver class with Spark's loader. + */ def registerDriver(driver: String): Unit = { try { DriverRegistry.register(driver) @@ -591,8 +591,8 @@ object Utils extends Logging with SparkSupport { } /** - * Register driver for given JDBC URL and return the driver class name. - */ + * Register driver for given JDBC URL and return the driver class name. + */ def registerDriverUrl(url: String): String = { val driver = getDriverClassName(url) registerDriver(driver) @@ -824,21 +824,21 @@ object Utils extends Logging with SparkSupport { } def getPrunedPartition(partitionColumns: Seq[String], - filters: Array[Expression], schema: StructType, - numBuckets: Int, partitionColumnCount: Int): Int = { + filters: Array[Expression], schema: StructType, + numBuckets: Int, partitionColumnCount: Int): Int = { // this will yield partitioning column ordered Array of Expression (Literals/ParamLiterals). // RDDs needn't have to care for orderless hashing scheme at invocation point. val (pruningExpressions, fields) = partitionColumns.map { pc => filters.collectFirst { case EqualTo(a: Attribute, v) if TokenLiteral.isConstant(v) && - pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) + pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) case EqualTo(v, a: Attribute) if TokenLiteral.isConstant(v) && - pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) + pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) case EqualNullSafe(a: Attribute, v) if TokenLiteral.isConstant(v) && - pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) + pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) case EqualNullSafe(v, a: Attribute) if TokenLiteral.isConstant(v) && - pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) + pc.equalsIgnoreCase(a.name) => (v, schema(a.name)) } }.filter(_.nonEmpty).map(_.get).unzip @@ -846,10 +846,10 @@ object Utils extends Logging with SparkSupport { val mutableRow = new SpecificInternalRow(pcFields.map(_.dataType)) val bucketIdGeneration = UnsafeProjection.create( HashPartitioning(pcFields, numBuckets) - .partitionIdExpression :: Nil, pcFields) + .partitionIdExpression :: Nil, pcFields) if (pruningExpressions.nonEmpty && - // verify all the partition columns are provided as filters - pruningExpressions.length == partitionColumnCount) { + // verify all the partition columns are provided as filters + pruningExpressions.length == partitionColumnCount) { pruningExpressions.zipWithIndex.foreach { case (e, i) => mutableRow(i) = e.eval(null) } @@ -988,11 +988,13 @@ final class MultiBucketExecutorPartition(private[this] var _index: Int, private[this] var bucket = bucketSet.nextSetBit(0) override def hasNext: Boolean = bucket >= 0 + override def next(): Integer = { val b = Int.box(bucket) bucket = bucketSet.nextSetBit(bucket + 1) b } + override def remove(): Unit = throw new UnsupportedOperationException } @@ -1067,15 +1069,15 @@ private[spark] case class NarrowExecutorLocalSplitDep( } /** - * Stores information about the narrow dependencies used by a StoreRDD. - * - * @param narrowDep maps to the dependencies variable in the parent RDD: - * for each one to one dependency in dependencies, - * narrowDeps has a NarrowExecutorLocalSplitDep (describing - * the partition for that dependency) at the corresponding - * index. The size of narrowDeps should always be equal to - * the number of parents. - */ + * Stores information about the narrow dependencies used by a StoreRDD. + * + * @param narrowDep maps to the dependencies variable in the parent RDD: + * for each one to one dependency in dependencies, + * narrowDeps has a NarrowExecutorLocalSplitDep (describing + * the partition for that dependency) at the corresponding + * index. The size of narrowDeps should always be equal to + * the number of parents. + */ private[spark] class CoGroupExecutorLocalPartition( idx: Int, val blockId: BlockManagerId, val narrowDep: Option[NarrowExecutorLocalSplitDep]) diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 01b398c98e..291555589a 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -39,6 +39,7 @@ import org.apache.spark.sql.catalyst.plans.logical.{Filter => LogicalFilter, _} import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution._ +import org.apache.spark.sql.execution.columnar.impl.IndexColumnFormatRelation import org.apache.spark.sql.execution.command.{ExecutedCommandExec, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.sources.{PhysicalScan, StoreDataSourceStrategy} @@ -251,7 +252,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu case _: InsertIntoTable | _: TableMutationPlan => // disable for inserts/puts to avoid exchanges and indexes to work correctly snappySession.linkPartitionsToBuckets(flag = true) - case l: LogicalRelation if l.relation.isInstanceOf[IndexableRelation] => + case l: LogicalRelation if l.relation.isInstanceOf[IndexColumnFormatRelation] => // disable for indexes snappySession.linkPartitionsToBuckets(flag = true) case _ => // nothing for others @@ -410,8 +411,8 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } case a: SubqueryAlias if a.child.isInstanceOf[LogicalFilter] => - LogicalFilter(a.child.asInstanceOf[LogicalFilter].condition, - internals.newSubqueryAlias(a.alias, a.child)) + val lf = a.child.asInstanceOf[LogicalFilter] + LogicalFilter(lf.condition, internals.newSubqueryAlias(a.alias, lf.child)) case LogicalFilter(condition1, LogicalFilter(condition2, child)) => if (rlsConditionChecker(conditionEvaluator)(condition1)) { From 7e77344b38d9ec859d6ca4b71bb9da4fdff7b661 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 4 Oct 2019 11:56:11 +0530 Subject: [PATCH 25/80] fixes --- .../spark/sql/SnappyContextFunctions.scala | 2 -- .../org/apache/spark/sql/SnappySession.scala | 6 ++--- .../execution/columnar/ColumnInsertExec.scala | 25 ++++++++++--------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 6ca743a077..235488a8d6 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -162,6 +162,4 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def executePlan(analyzer: SnappyAnalyzer, plan: LogicalPlan): LogicalPlan = analyzer.baseExecute(plan) - - def sql[T](fn: => T): T = fn } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index c2b50814d8..c2b8f1bb67 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -181,7 +181,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } private[sql] def sqInternal(sqlText: String): CachedDataFrame = { - contextFunctions.sql(SnappySession.sqlPlan(this, sqlText)) + SnappySession.sqlPlan(this, sqlText) } @DeveloperApi @@ -189,12 +189,12 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo if (planCaching) { planCaching = false try { - contextFunctions.sql(super.sql(sqlText)) + super.sql(sqlText) } finally { planCaching = Property.PlanCaching.get(sessionState.conf) } } else { - contextFunctions.sql(super.sql(sqlText)) + super.sql(sqlText) } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index 8d36213655..040698d8ba 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -172,6 +172,19 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") val defaultRowSize = ctx.freshName("defaultRowSize") + val initEncoderCode: String => String = encoderArray => + s""" + |this.$encoderArray[i] = $encodingClass.getColumnEncoder( + | $schemaTerm.fields()[i]); + """.stripMargin + encoderArrayTerm = internals.addClassField(ctx, s"$encoderClass[]", "encoderArray", enc => + s""" + |this.$enc = new $encoderClass[$schemaLength]; + |${loop(initEncoderCode(enc), schemaLength)} + """.stripMargin) + + val childProduce = doChildProduce(ctx) + child match { case c: CallbackColumnInsert => ctx.addNewFunction(c.resetInsertions, @@ -185,18 +198,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], case _ => } - val initEncoderCode: String => String = encoderArray => - s""" - |this.$encoderArray[i] = $encodingClass.getColumnEncoder( - | $schemaTerm.fields()[i]); - """.stripMargin - encoderArrayTerm = internals.addClassField(ctx, s"$encoderClass[]", "encoderArray", enc => - s""" - |this.$enc = new $encoderClass[$schemaLength]; - |${loop(initEncoderCode(enc), schemaLength)} - """.stripMargin) - - val childProduce = doChildProduce(ctx) val encoderLoopCode = s"$defaultRowSize += " + s"$encoderArrayTerm[i].defaultSize($schemaTerm.fields()[i].dataType());" From 54ff98a3c43d78ed9edea04ae224d3a54af8e76c Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sun, 13 Oct 2019 18:26:13 +0530 Subject: [PATCH 26/80] fix few AQP failures in precheckin --- .../scala/org/apache/spark/sql/internal/Spark210Internals.scala | 2 ++ .../scala/org/apache/spark/sql/internal/Spark232Internals.scala | 2 ++ .../scala/org/apache/spark/sql/hive/SnappySessionState.scala | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index ee4445a802..95777a3f20 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -781,6 +781,8 @@ class SnappySessionState21(override val snappySession: SnappySession) override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = self.extendedResolutionRules override val extendedCheckRules: Seq[LogicalPlan => Unit] = self.extendedCheckRules + + override def execute(plan: LogicalPlan): LogicalPlan = self.execute(plan) } } diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 37c38380a1..5d0510ed82 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -794,6 +794,8 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.extendedResolutionRules override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.postHocResolutionRules override val extendedCheckRules: Seq[LogicalPlan => Unit] = aself.extendedCheckRules + + override def execute(plan: LogicalPlan): LogicalPlan = aSelf.execute(plan) } } diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 291555589a..dd1b113015 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -26,6 +26,7 @@ import com.pivotal.gemfirexd.internal.engine.store.GemFireStore import io.snappydata.Property import org.apache.spark.Partition +import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis import org.apache.spark.sql.catalyst.analysis.TypeCoercion.{PromoteStrings, numericPrecedence} import org.apache.spark.sql.catalyst.analysis.{Analyzer, Star, UnresolvedAttribute} @@ -50,7 +51,6 @@ import org.apache.spark.sql.sources._ import org.apache.spark.sql.store.StoreUtils import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager, WindowLogicalPlan} import org.apache.spark.sql.types._ -import org.apache.spark.sql.{Strategy, _} import org.apache.spark.streaming.Duration From c20a3bed784a554aaa2cf5bd22acd1fe61f966f4 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sun, 13 Oct 2019 20:29:20 +0530 Subject: [PATCH 27/80] correct jar names to new ones in SplitClusterDUnitTest --- build.gradle | 1 + .../io/snappydata/cluster/SplitClusterDUnitTest.scala | 8 ++++++-- .../org/apache/spark/sql/store/SnappyJoinSuite.scala | 4 ++-- jdbc/build.gradle | 4 ++-- store | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index b8b4ac97cb..d1bafa399f 100644 --- a/build.gradle +++ b/build.gradle @@ -808,6 +808,7 @@ gradle.taskGraph.whenReady { graph -> 'APACHE_SPARK_HOME': sparkConnectorProductDir, 'APACHE_SPARK_CURRENT_HOME': sparkCurrentProductDir, 'SPARK_TESTING': '1', + 'SPARK_CONNECTOR_VERSION': sparkConnectorVersion, 'SNAPPY_DIST_CLASSPATH': test.classpath.asPath def failureCount = new java.util.concurrent.atomic.AtomicInteger(0) diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala index e96c9e5864..0aead28fc0 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTest.scala @@ -789,9 +789,13 @@ object SplitClusterDUnitTest extends SplitClusterDUnitTestObject { if (vm eq null) stopSpark() else vm.invoke(classOf[SplitClusterDUnitTest], "stopSpark") - // perform some operation thru spark-shell + // perform some operation through spark-shell + val sparkVersion = System.getenv("SPARK_CONNECTOR_VERSION") match { + case null => throw new IllegalStateException("SPARK_CONNECTOR_VERSION not set") + case v => v + } val jars = Files.newDirectoryStream(Paths.get(s"$productDir/../distributions/"), - "TIB_compute-core*.jar") + s"TIB_compute-spark${sparkVersion}_*.jar") var securityConf = "" if (props.containsKey(Attribute.USERNAME_ATTR)) { securityConf = s" --conf spark.snappydata.store.user=${props.getProperty(Attribute diff --git a/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala b/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala index 5c1b4cb730..9434b06f85 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/SnappyJoinSuite.scala @@ -198,9 +198,9 @@ class SnappyJoinSuite extends SnappyFunSuite with BeforeAndAfterAll { var df = snc.sql(s"select sum(ol_1_int2_id) from $t1 where ol_1_int_id=1") checkForShuffle(df.logicalPlan, snc, shuffleExpected = false) - // with limit shuffle is expected to SinglePartition when there is no CollectAggregateExec + // with limit df = snc.sql(s"select sum(ol_1_int2_id) from $t1 where ol_1_int_id=1 limit 1") - checkForShuffle(df.logicalPlan, snc, shuffleExpected = true) + checkForShuffle(df.logicalPlan, snc, shuffleExpected = false) df = snc.sql(s"update $t1 set ol_1_str_id = '3' where ol_1_int_id in (" + s"select ol_1_int_id from $t2 where $t2.ol_1_int_id=1)") diff --git a/jdbc/build.gradle b/jdbc/build.gradle index 92971d982a..b1e26b331a 100644 --- a/jdbc/build.gradle +++ b/jdbc/build.gradle @@ -47,9 +47,9 @@ dependencies { } if (new File(rootDir, 'store/build.gradle').exists()) { - compile project(':snappy-store:snappydata-store-client') + compile project(':snappy-store:snappydata-store-client') } else { - compile group: 'io.snappydata', name: 'snappydata-store-client', version: snappyStoreVersion + compile group: 'io.snappydata', name: 'snappydata-store-client', version: snappyStoreVersion } } diff --git a/store b/store index 1e1420e66a..008ada6867 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 1e1420e66a84fd5690f9d600de94b7b118c4c3ce +Subproject commit 008ada6867617da073f10fc9e2f020972f547315 From a725a23cd70ca91bf9bcea0520278db1a2d8e581 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sun, 13 Oct 2019 20:52:01 +0530 Subject: [PATCH 28/80] fix JDBC pushdown driver for Spark 2.4 --- .../org/apache/spark/sql/SnappyDataPoolDialect.scala | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataPoolDialect.scala b/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataPoolDialect.scala index 1e4234574d..798dfc9133 100644 --- a/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataPoolDialect.scala +++ b/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataPoolDialect.scala @@ -83,10 +83,12 @@ case object SnappyDataPoolDialect extends SnappyDataBaseDialect with Logging { // releases where LocalRelation class primary constructor has changed signature cons.newInstance(tableName, LocalRelation.apply(output: _*), None) } catch { - case _: Exception => // fallback to two argument constructor - val cons = classOf[SubqueryAlias].getConstructor(classOf[String], - classOf[LogicalPlan]) - cons.newInstance(tableName, LocalRelation.apply(output: _*)) + case _: Exception => // fallback to two argument apply that works for both 2.3/2.4 + // class of companion class which is SubqueryAlias$ in bytecode + val c = SubqueryAlias.getClass + val m = c.getMethod("apply", classOf[String], classOf[LogicalPlan]) + m.invoke(c.getField("MODULE$").get(null), + tableName, LocalRelation.apply(output: _*)).asInstanceOf[SubqueryAlias] } } } From 1143e9f3498d65b97e3d9579c9d4346d5f407d0d Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 14 Oct 2019 00:43:38 +0530 Subject: [PATCH 29/80] fix remaining failure in AQP --- .../apache/spark/sql/internal/Spark210Internals.scala | 7 ++++--- .../apache/spark/sql/internal/Spark232Internals.scala | 9 ++++++++- .../main/scala/org/apache/spark/sql/SparkInternals.scala | 8 +++++++- .../org/apache/spark/sql/hive/SnappySessionState.scala | 3 ++- .../apache/spark/sql/internal/SnappySessionCatalog.scala | 4 +++- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 95777a3f20..654dbfe98e 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -297,9 +297,10 @@ class Spark210Internals extends SparkInternals { override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = u.alias - override def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias = { - SubqueryAlias(alias, child, view = None) - } + override def newSubqueryAlias(alias: String, child: LogicalPlan, + view: Option[TableIdentifier]): SubqueryAlias = SubqueryAlias(alias, child, view) + + override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = q.view override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression]): Alias = { diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 5d0510ed82..528a706d57 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -225,10 +225,17 @@ class Spark232Internals extends SparkInternals { override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = None - override def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias = { + override def newSubqueryAlias(alias: String, child: LogicalPlan, + view: Option[TableIdentifier]): SubqueryAlias = { + if (view.isDefined) { + throw new AnalysisException(s"Spark $version does not support creating SubqueryAlias " + + s"with a VIEW: alias=$alias, view=${view.get}") + } SubqueryAlias(alias, child) } + override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = None + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression]): Alias = { copyAlias match { diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 182f790eba..4fa7cc24ad 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -263,7 +263,13 @@ trait SparkInternals extends Logging { /** * Create an alias for a sub-query. */ - def newSubqueryAlias(alias: String, child: LogicalPlan): SubqueryAlias + def newSubqueryAlias(alias: String, child: LogicalPlan, + view: Option[TableIdentifier] = None): SubqueryAlias + + /** + * Get view, if defined, or else alias name of a SubqueryAlias. + */ + def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] /** * Create an alias with given parameters and optionally copying other fields from existing Alias. diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index dd1b113015..15a7c17e76 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -412,7 +412,8 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu case a: SubqueryAlias if a.child.isInstanceOf[LogicalFilter] => val lf = a.child.asInstanceOf[LogicalFilter] - LogicalFilter(lf.condition, internals.newSubqueryAlias(a.alias, lf.child)) + LogicalFilter(lf.condition, internals.newSubqueryAlias(a.alias, lf.child, + internals.getViewFromAlias(a))) case LogicalFilter(condition1, LogicalFilter(condition2, child)) => if (rlsConditionChecker(conditionEvaluator)(condition1)) { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 346a135065..ed4ee61e7a 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -855,6 +855,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { alias: Option[String]): LogicalPlan = wrappedCatalog match { case None => synchronized { val tableName = formatTableName(name.table) + var view: Option[TableIdentifier] = Some(name) val relationPlan = (if (name.database.isEmpty) { getTempView(tableName) match { case None => globalTempViewManager.get(tableName) @@ -890,12 +891,13 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } else if (CatalogObjectType.isPolicy(table)) { getPolicyPlan(table) } else { + view = None newCatalogRelation(schemaName, table) } } case Some(p) => p } - internals.newSubqueryAlias(if (alias.isEmpty) tableName else alias.get, relationPlan) + internals.newSubqueryAlias(if (alias.isEmpty) tableName else alias.get, relationPlan, view) } case Some(c) => c.resolveRelationWithAlias(name, alias) From 0e299b79546cdd74c872f7f3260f44236df6ec68 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 15 Oct 2019 12:54:47 +0530 Subject: [PATCH 30/80] fixes for Spark 2.3/2.4 support --- build.gradle | 3 +- .../sql/hive/TestHiveSnappySession.scala | 7 +- core/build.gradle | 6 +- .../sql/internal/Spark210Internals.scala | 67 +++++++++++++-- .../org/apache/spark/sql/internal/plans.scala | 40 ++++++++- .../sql/internal/Spark232Internals.scala | 84 +++++++++++++++---- .../org/apache/spark/sql/internal/plans.scala | 40 ++++++++- .../main/scala/io/snappydata/functions.scala | 8 +- .../impl/SmartConnectorExternalCatalog.scala | 4 - .../spark/sql/SnappyContextFunctions.scala | 4 +- .../apache/spark/sql/SnappyDDLParser.scala | 7 +- .../org/apache/spark/sql/SnappyParser.scala | 15 +--- .../org/apache/spark/sql/SnappySession.scala | 7 +- .../org/apache/spark/sql/SparkInternals.scala | 50 ++++++++++- .../expressions/IntervalExpression.scala | 2 +- .../spark/sql/execution/ExistingPlans.scala | 33 ++++---- .../aggregate/SnappyHashAggregateExec.scala | 2 +- .../columnar/ColumnBatchCreator.scala | 3 +- .../sql/execution/columnar/ColumnExec.scala | 3 +- .../execution/columnar/ColumnInsertExec.scala | 4 +- .../execution/columnar/ColumnTableScan.scala | 18 +--- .../columnar/JDBCAppendableRelation.scala | 13 ++- .../impl/JDBCSourceAsColumnarStore.scala | 2 +- .../org/apache/spark/sql/execution/ddl.scala | 6 +- .../sql/execution/row/RowTableScan.scala | 10 +-- .../sql/hive/SnappyHiveExternalCatalog.scala | 9 -- .../spark/sql/hive/SnappySessionState.scala | 19 ++--- .../apache/spark/sql/internal/JarUtils.scala | 2 +- .../sql/internal/SnappySessionCatalog.scala | 23 +++-- .../spark/sql/row/JDBCMutableRelation.scala | 12 ++- settings.gradle | 3 +- 31 files changed, 338 insertions(+), 168 deletions(-) diff --git a/build.gradle b/build.gradle index d1bafa399f..d41e555790 100644 --- a/build.gradle +++ b/build.gradle @@ -114,8 +114,7 @@ allprojects { spark232Version = '2.3.2' sparkVersion = spark211Version - sparkConnectorVersion = rootProject.hasProperty('spark.connector.version') - ? rootProject.property('spark.connector.version') : sparkVersion + sparkConnectorVersion = System.getProperty('spark.connector.version', sparkVersion) snappySparkVersion = '2.1.1.7' coreProjectName = sparkVersion == sparkConnectorVersion ? ":snappy-core_${scalaBinaryVersion}" : ":snappy-core-product_${scalaBinaryVersion}" diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala index 2b30900ace..c7a1710abe 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala @@ -47,12 +47,13 @@ class TestHiveSnappySession(@transient protected val sc: SparkContext, override lazy val sharedState: SnappySharedState = SnappyContext.sharedState(sparkContext) override def hiveDefaultTableFilePath(name: TableIdentifier): String = - sessionState.hiveState.catalog.hiveDefaultTableFilePath(name) + sessionState.catalog.hiveSessionCatalog.hiveDefaultTableFilePath(name) override def getCachedDataSourceTable(table: TableIdentifier): LogicalPlan = - sessionState.hiveState.catalog.getCachedDataSourceTable(table) + sessionState.catalog.hiveSessionCatalog.getCachedDataSourceTable(table) - override def metadataHive: HiveClient = sessionState.hiveState.metadataHive + override def metadataHive: HiveClient = + sessionState.hiveState.asInstanceOf[HiveSessionState].metadataHive override def newSession(): SnappySession = new TestHiveSnappySession(sc, loadTestTables) diff --git a/core/build.gradle b/core/build.gradle index ee810c2089..260231b2e8 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -188,8 +188,10 @@ shadowJar { zip64 = true // avoid conflict with the 0.9.2 version in stock Spark relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // relocate koloboke for possible conflicts with user dependencies - relocate 'com.koloboke', 'io.snappydata.com.koloboke' + // avoid conflict with spark-unsafe in Spark >= 2.4.0 + relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' + // relocate eclipse collections for possible conflicts with user dependencies + relocate 'org.eclipse.collections', 'io.snappydata.org.eclipse.collections' // relocate the guava's com.google packages relocate 'com.google.common', 'io.snappydata.com.google.common' diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 654dbfe98e..a5667b13b3 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -45,13 +45,15 @@ import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} import org.apache.spark.sql.execution._ -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} +import org.apache.spark.sql.execution.columnar.ColumnTableScan +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} +import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} -import org.apache.spark.sql.hive.{HiveConditionalRule, SnappyAnalyzer, SnappyHiveCatalogBase, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.hive.{HiveConditionalRule, HiveConditionalStrategy, HiveSessionCatalog, SnappyAnalyzer, SnappyHiveCatalogBase, SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder -import org.apache.spark.sql.sources.{BaseRelation, Filter, ResolveQueryHints} +import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.streaming.SnappyStreamingContext @@ -160,6 +162,29 @@ class Spark210Internals extends SparkInternals { expr.asInstanceOf[PredicateSubquery].copy(plan = newPlan, exprId = newExprId) } + // scalastyle:off + + override def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, + relationSchema: StructType, allFilters: Seq[Expression], + schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, + isSampleReservoirAsRegion: Boolean): ColumnTableScan = { + new ColumnTableScan21(output, dataRDD, otherRDDs, numBuckets, partitionColumns, + partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, + caseSensitive, isSampleReservoirAsRegion) + } + + // scalastyle:on + + override def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], + numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], table: String, + baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan = { + new RowTableScan21(output, schema, dataRDD, numBuckets, partitionColumns, + partitionColumnAliases, JdbcExtendedUtils.toLowerCase(table), baseRelation, caseSensitive) + } + override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { WholeStageCodegenExec(plan) } @@ -248,6 +273,20 @@ class Spark210Internals extends SparkInternals { DescribeTableCommand(table, partitionSpec, isExtended, isFormatted) } + override def newCreateTableLikeCommand(targetIdent: TableIdentifier, + sourceIdent: TableIdentifier, location: Option[String], + allowExisting: Boolean): RunnableCommand = { + if (location.isDefined) { + throw new ParseException(s"CREATE TABLE LIKE does not support LOCATION in Spark $version") + } + CreateTableLikeCommand(targetIdent, sourceIdent, allowExisting) + } + + override def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, + alias: Option[String]): LogicalPlan = { + catalog.lookupRelation(name, alias) + } + override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], @@ -256,9 +295,10 @@ class Spark210Internals extends SparkInternals { } override def copyAttribute(attr: AttributeReference)(name: String, - dataType: DataType, nullable: Boolean, metadata: Metadata): AttributeReference = { + dataType: DataType, nullable: Boolean, metadata: Metadata, + exprId: ExprId): AttributeReference = { attr.copy(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( - exprId = attr.exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) + exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) } override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { @@ -564,6 +604,12 @@ class Spark210Internals extends SparkInternals { PreWriteCheck(sessionState.conf, sessionState.wrapperCatalog) } + override def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] = { + new HiveConditionalStrategy(_.HiveTableScans, sessionState) :: + new HiveConditionalStrategy(_.DataSinks, sessionState) :: + new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil + } + override def newCacheManager(): CacheManager = { // load by reflection since this class is not visible when compiling for 2.1.1 compatibility Utils.classForName("org.apache.spark.sql.internal.SnappyCacheManager210") @@ -720,6 +766,10 @@ class SnappySessionCatalog21(override val snappySession: SnappySession, extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionResourceLoader, functionRegistry, sqlConf, hadoopConf) with SnappySessionCatalog { + override def functionNotFound(name: String): Nothing = { + super.failFunctionLookup(name) + } + override def getTableMetadataOption(name: TableIdentifier): Option[CatalogTable] = { super.getTableMetadataOption(name) match { case None => None @@ -759,11 +809,14 @@ class SnappySessionState21(override val snappySession: SnappySession) private def state: SnappySessionState = session.sessionState + private def hiveCatalog(state: SessionState): HiveSessionCatalog = + state.catalog.asInstanceOf[HiveSessionCatalog] + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { val extensions1 = session.contextFunctions.getExtendedResolutionRules val extensions2 = session.contextFunctions.getPostHocResolutionRules - val rules = new HiveConditionalRule(_.catalog.ParquetConversions, state) :: - new HiveConditionalRule(_.catalog.OrcConversions, state) :: + val rules = new HiveConditionalRule(hiveCatalog(_).ParquetConversions, state) :: + new HiveConditionalRule(hiveCatalog(_).OrcConversions, state) :: AnalyzeCreateTable(session) :: new PreprocessTable(state) :: ResolveAliasInGroupBy :: diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala index e0ba6e9f60..33ac1d950b 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -18,9 +18,14 @@ package org.apache.spark.sql.internal import io.snappydata.{HintName, QueryHint} -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference} +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} import org.apache.spark.sql.catalyst.plans.logical.{BroadcastHint, InsertIntoTable, LogicalPlan, OverwriteOptions} -import org.apache.spark.sql.types.LongType +import org.apache.spark.sql.execution.columnar.ColumnTableScan +import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.{PartitionedDataSourceScan, SparkPlan} +import org.apache.spark.sql.types.{LongType, StructType} /** @@ -62,3 +67,34 @@ class PlanWithHints21(_child: LogicalPlan, case 1 => allHints } } + +final class ColumnTableScan21(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, + partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], + baseRelation: PartitionedDataSourceScan, relationSchema: StructType, + allFilters: Seq[Expression], schemaAttributes: Seq[AttributeReference], + caseSensitive: Boolean, isForSampleReservoirAsRegion: Boolean) + extends ColumnTableScan(output, dataRDD, otherRDDs, numBuckets, partitionColumns, + partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, + caseSensitive, isForSampleReservoirAsRegion) { + + override def sameResult(plan: SparkPlan): Boolean = plan match { + case r: ColumnTableScan => r.baseRelation.table == baseRelation.table && + r.numBuckets == numBuckets && r.schema == schema + case _ => false + } +} + +final class RowTableScan21(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], + numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], table: String, + baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean) + extends RowTableScan(output, schema, dataRDD, numBuckets, partitionColumns, + partitionColumnAliases, table, baseRelation, caseSensitive) { + + override def sameResult(plan: SparkPlan): Boolean = plan match { + case r: RowTableScan => r.table == table && r.numBuckets == numBuckets && r.schema == schema + case _ => false + } +} diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 528a706d57..14da30c077 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -46,13 +46,15 @@ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{AccessUtils, FunctionIdentifier, InternalRow, TableIdentifier} -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, DescribeTableCommand, RunnableCommand} +import org.apache.spark.sql.execution.columnar.ColumnTableScan +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} +import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} -import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} -import org.apache.spark.sql.hive.{HiveConditionalRule, HiveSessionResourceLoader, SnappyAnalyzer, SnappyHiveCatalogBase, SnappyHiveExternalCatalog, SnappySessionState} -import org.apache.spark.sql.sources.{BaseRelation, Filter, ResolveQueryHints} +import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.hive._ +import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.storage.StorageLevel @@ -123,6 +125,29 @@ class Spark232Internals extends SparkInternals { s"unexpected copyPredicateSubquery call in Spark $version module") } + // scalastyle:off + + override def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, + relationSchema: StructType, allFilters: Seq[Expression], + schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, + isForSampleReservoirAsRegion: Boolean): ColumnTableScan = { + new ColumnTableScan23(output, dataRDD, otherRDDs, numBuckets, partitionColumns, + partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, + caseSensitive, isForSampleReservoirAsRegion) + } + + // scalastyle:on + + override def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], + numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], table: String, + baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan = { + new RowTableScan23(output, schema, dataRDD, numBuckets, partitionColumns, + partitionColumnAliases, JdbcExtendedUtils.toLowerCase(table), baseRelation, caseSensitive) + } + override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { WholeStageCodegenExec(plan)(codegenStageId = 0) } @@ -183,6 +208,21 @@ class Spark232Internals extends SparkInternals { DescribeTableCommand(table, partitionSpec, isExtended) } + override def newCreateTableLikeCommand(targetIdent: TableIdentifier, + sourceIdent: TableIdentifier, location: Option[String], + allowExisting: Boolean): RunnableCommand = { + CreateTableLikeCommand(targetIdent, sourceIdent, location, allowExisting) + } + + override def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, + alias: Option[String]): LogicalPlan = { + if (alias.isDefined) { + throw new AnalysisException(s"Spark $version does not support lookupRelation " + + s"with an alias: alias=$alias, name=$name") + } + catalog.lookupRelation(name) + } + override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand() override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], @@ -192,9 +232,10 @@ class Spark232Internals extends SparkInternals { } override def copyAttribute(attr: AttributeReference)(name: String, - dataType: DataType, nullable: Boolean, metadata: Metadata): AttributeReference = { + dataType: DataType, nullable: Boolean, metadata: Metadata, + exprId: ExprId): AttributeReference = { attr.copy(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( - exprId = attr.exprId, qualifier = attr.qualifier) + exprId, qualifier = attr.qualifier) } override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { @@ -501,6 +542,12 @@ class Spark232Internals extends SparkInternals { PreWriteCheck } + override def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] = { + // DataSinks in older Spark releases is now taken care of by HiveAnalysis + new HiveConditionalStrategy(_.HiveTableScans, sessionState) :: + new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil + } + override def newCacheManager(): CacheManager = new SnappyCacheManager23 override def buildConf(key: String): ConfigBuilder = SQLConf.buildConf(key) @@ -581,7 +628,7 @@ final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) - override protected def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = + override def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = alterDatabaseImpl(schemaDefinition) override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = @@ -593,12 +640,12 @@ final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = renameTableImpl(schema, oldName, newName) - override protected def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) + override def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) - override protected def doAlterTableDataSchema(schemaName: String, table: String, + override def doAlterTableDataSchema(schemaName: String, table: String, newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) - override protected def doAlterTableStats(schema: String, table: String, + override def doAlterTableStats(schema: String, table: String, stats: Option[CatalogStatistics]): Unit = { withHiveExceptionHandling(super.doAlterTableStats(schema, table, stats)) } @@ -700,6 +747,10 @@ class SnappySessionCatalog23(override val snappySession: SnappySession, extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionRegistry, sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog { + override def functionNotFound(name: String): Nothing = { + super.failFunctionLookup(FunctionIdentifier(name, None)) + } + override protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = View(desc = table, output = table.schema.toAttributes, child) @@ -732,7 +783,7 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se self => - override protected val conf: SQLConf = { + override protected lazy val conf: SQLConf = { val conf = parentState.map(_.conf.clone()).getOrElse(new SnappyConf(session)) mergeSparkConf(conf, session.sparkContext.conf) conf @@ -774,8 +825,7 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se private def state: SnappySessionState = session.sessionState override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { - (new HiveConditionalRule(_.catalog.ParquetConversions, state) :: - new HiveConditionalRule(_.catalog.OrcConversions, state) :: + (new HiveConditionalRule(_ => new ResolveHiveSerdeTable(state.hiveSession), state) :: new PreprocessTable(state) :: state.ResolveAliasInGroupBy :: new FindDataSourceTable(session) :: @@ -784,9 +834,13 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se } override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = { - (PreprocessTableCreation(session) :: + (new HiveConditionalRule(_ => new DetermineTableStats(session), state) :: + new HiveConditionalRule(s => + RelationConversions(s.conf, s.catalog.asInstanceOf[HiveSessionCatalog]), state) :: + PreprocessTableCreation(session) :: PreprocessTableInsertion(conf) :: DataSourceAnalysis(conf) :: + new HiveConditionalRule(_ => HiveAnalysis, state) :: state.AnalyzeMutableOperations(session, analyzer) :: ResolveQueryHints(session) :: state.RowLevelSecurity :: @@ -800,7 +854,7 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.extendedResolutionRules override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.postHocResolutionRules - override val extendedCheckRules: Seq[LogicalPlan => Unit] = aself.extendedCheckRules + override val extendedCheckRules: Seq[LogicalPlan => Unit] = aSelf.extendedCheckRules override def execute(plan: LogicalPlan): LogicalPlan = aSelf.execute(plan) } diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala index ef52f44cba..c52c105aa3 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -18,10 +18,15 @@ package org.apache.spark.sql.internal import io.snappydata.{HintName, QueryHint} +import org.apache.spark.rdd.RDD import org.apache.spark.sql.JoinStrategy -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference} +import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} import org.apache.spark.sql.catalyst.plans.logical.{HintInfo, InsertIntoTable, LogicalPlan, ResolvedHint} -import org.apache.spark.sql.types.LongType +import org.apache.spark.sql.execution.columnar.ColumnTableScan +import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.{PartitionedDataSourceScan, SparkPlan} +import org.apache.spark.sql.types.{LongType, StructType} /** * Unlike Spark's InsertIntoTable this plan provides the count of rows @@ -64,3 +69,34 @@ class ResolvedPlanWithHints23(child: LogicalPlan, case 2 => allHints } } + +final class ColumnTableScan23(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, + partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], + baseRelation: PartitionedDataSourceScan, relationSchema: StructType, + allFilters: Seq[Expression], schemaAttributes: Seq[AttributeReference], + caseSensitive: Boolean, isSampleReservoirAsRegion: Boolean) + extends ColumnTableScan(output, dataRDD, otherRDDs, numBuckets, partitionColumns, + partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, + caseSensitive, isSampleReservoirAsRegion) { + + override protected def doCanonicalize(): SparkPlan = if (isCanonicalizedPlan) this else { + new ColumnTableScan23(output, dataRDD = null, otherRDDs = Nil, numBuckets, + partitionColumns = Nil, partitionColumnAliases = Nil, baseRelation, relationSchema, + allFilters = Nil, schemaAttributes = Nil, caseSensitive = false, isSampleReservoirAsRegion) + } +} + +final class RowTableScan23(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], + numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], table: String, + baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean) + extends RowTableScan(output, schema, dataRDD, numBuckets, partitionColumns, + partitionColumnAliases, table, baseRelation, caseSensitive) { + + override protected def doCanonicalize(): SparkPlan = if (isCanonicalizedPlan) this else { + new RowTableScan23(output, schema, dataRDD = null, numBuckets, partitionColumns = Nil, + partitionColumnAliases = Nil, table, baseRelation, caseSensitive = false) + } +} diff --git a/core/src/main/scala/io/snappydata/functions.scala b/core/src/main/scala/io/snappydata/functions.scala index b59cfb4efc..55840dadd1 100644 --- a/core/src/main/scala/io/snappydata/functions.scala +++ b/core/src/main/scala/io/snappydata/functions.scala @@ -21,7 +21,7 @@ import com.pivotal.gemfirexd.internal.engine.Misc import io.snappydata.sql.catalog.SnappyExternalCatalog import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} -import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow} import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{CurrentDatabase, Expression, ExpressionDescription, ExpressionInfo, LeafExpression, Nondeterministic} @@ -43,7 +43,7 @@ object SnappyDataFunctions { /** * List all the additional builtin functions here. */ - val builtin: Seq[(String, ExpressionInfo, FunctionBuilder)] = Seq( + val builtin: Seq[(FunctionIdentifier, ExpressionInfo, FunctionBuilder)] = Seq( buildZeroArgExpression("dsid", classOf[DSID], DSID), // add current_schema() as an alias for current_database() buildZeroArgExpression("current_schema", classOf[CurrentDatabase], CurrentDatabase), @@ -62,8 +62,8 @@ object SnappyDataFunctions { } def buildZeroArgExpression(name: String, fnClass: Class[_], - fn: () => Expression): (String, ExpressionInfo, FunctionBuilder) = { - (name, expressionInfo(name, fnClass), e => { + fn: () => Expression): (FunctionIdentifier, ExpressionInfo, FunctionBuilder) = { + (FunctionIdentifier(name, None), expressionInfo(name, fnClass), e => { if (e.nonEmpty) { throw Utils.analysisException(s"Argument(s) passed for zero argument function $name") } diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala index 16f2236a44..23e484d62e 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala @@ -129,10 +129,6 @@ trait SmartConnectorExternalCatalog extends SnappyExternalCatalog with Connector connectorHelper.setCurrentSchema(schema) } - override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = { - throw new UnsupportedOperationException("Schema/database definitions cannot be altered") - } - protected def createTableImpl(table: CatalogTable, ignoreIfExists: Boolean): Unit = { val request = new CatalogMetadataDetails() request.setCatalogTable(ConnectorExternalCatalog.convertFromCatalogTable(table)) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 235488a8d6..487136ec2e 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -58,8 +58,8 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def postRelationCreation(relation: Option[BaseRelation]): Unit = {} def registerSnappyFunctions(): Unit = { - val registry = session.sessionState.functionRegistry - SnappyDataFunctions.builtin.foreach(fn => registry.registerFunction(fn._1, fn._2, fn._3)) + SnappyDataFunctions.builtin.foreach( + fn => internals.registerFunction(session, fn._1, fn._2, fn._3)) } private def missingAQPException(): AnalysisException = diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index ac43240ef2..226ee70c87 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -342,9 +342,10 @@ abstract class SnappyDDLParser(session: SnappySession) } protected def createTableLike: Rule1[LogicalPlan] = rule { - CREATE ~ TABLE ~ ifNotExists ~ tableIdentifier ~ LIKE ~ tableIdentifier ~> - ((allowExisting: Boolean, targetIdent: TableIdentifier, sourceIdent: TableIdentifier) => - CreateTableLikeCommand(targetIdent, sourceIdent, allowExisting)) + CREATE ~ TABLE ~ ifNotExists ~ tableIdentifier ~ LIKE ~ tableIdentifier ~ + (LOCATION ~ stringLiteral).? ~> ((allowExisting: Boolean, targetIdent: TableIdentifier, + sourceIdent: TableIdentifier, location: Any) => internals.newCreateTableLikeCommand( + targetIdent, sourceIdent, location.asInstanceOf[Option[String]], allowExisting)) } protected final def booleanLiteral: Rule1[Boolean] = rule { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index a66e7759f5..c73f69c347 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -561,15 +561,8 @@ class SnappyParser(session: SnappySession) child: LogicalPlan, aggregations: Seq[NamedExpression], groupByExprs: Seq[Expression], - groupingSets: Seq[Seq[Expression]]): GroupingSets = { - val keyMap = groupByExprs.zipWithIndex.toMap - val numExpressions = keyMap.size - val mask = (1 << numExpressions) - 1 - val bitmasks: Seq[Int] = groupingSets.map(set => set.foldLeft(mask)((bitmap, col) => { - require(keyMap.contains(col), s"$col doesn't show up in the GROUP BY list") - bitmap & ~(1 << (numExpressions - 1 - keyMap(col))) - })) - GroupingSets(bitmasks, groupByExprs, child, aggregations) + groupingSets: Seq[Seq[Expression]]): LogicalPlan = { + internals.newGroupingSet(groupingSets, groupByExprs, child, aggregations) } protected final def groupingSetExpr: Rule1[Seq[Expression]] = rule { @@ -691,7 +684,7 @@ class SnappyParser(session: SnappySession) protected final def relationLeaf: Rule1[LogicalPlan] = rule { tableIdentifier ~ ( expressionList ~> ((ident: TableIdentifier, e: Seq[Expression]) => - UnresolvedTableValuedFunction(ident.unquotedString, e)) | + internals.newUnresolvedTableValuedFunction(ident.unquotedString, e, Nil)) | streamWindowOptions.? ~> ((tableIdent: TableIdentifier, window: Any) => window.asInstanceOf[Option[(Duration, Option[Duration])]] match { case None => internals.newUnresolvedRelation(tableIdent, None) @@ -1081,7 +1074,7 @@ class SnappyParser(session: SnappySession) g: Any, h: Any, q: LogicalPlan => LogicalPlan) => val base = f match { case Some(plan) => plan.asInstanceOf[LogicalPlan] - case _ => if (_fromRelations.isEmpty) OneRowRelation else _fromRelations.top + case _ => if (_fromRelations.isEmpty) internals.newOneRowRelation() else _fromRelations.top } val withFilter = (child: LogicalPlan) => w match { case Some(expr) => Filter(expr.asInstanceOf[Expression], child) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index c2b8f1bb67..678fe7e80a 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -1524,8 +1524,9 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo throw new AnalysisException("ALTER TABLE not supported for temporary tables") } sessionCatalog.resolveRelation(tableIdent) match { - case LogicalRelation(r: JDBCMutableRelation, _, _) => - r.executeUpdate(sql, JdbcExtendedUtils.toUpperCase(getCurrentSchema)) + case lr: LogicalRelation if lr.relation.isInstanceOf[JDBCMutableRelation] => + lr.relation.asInstanceOf[JDBCMutableRelation].executeUpdate(sql, + JdbcExtendedUtils.toUpperCase(getCurrentSchema)) case _ => throw new AnalysisException( s"ALTER TABLE ${tableIdent.unquotedString} variant only supported for row tables") } @@ -2260,7 +2261,7 @@ object SnappySession extends Logging { _: BroadcastExchangeExec | _: InMemoryTableScanExec | _: RangeExec | _: LocalTableScanExec | _: RDDScanExec => true case p if HiveClientUtil.isHiveExecPlan(p) => true - case dsc: DataSourceScanExec => !dsc.relation.isInstanceOf[PartitionedDataSourceScan] + case _: DataSourceScanExec => true case _ => false }.isEmpty diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 4fa7cc24ad..cc65c1216a 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -32,10 +32,12 @@ import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, InsertIntoTable, LogicalPlan, RepartitionByExpression, Sample, Statistics, SubqueryAlias} import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} +import org.apache.spark.sql.execution.columnar.ColumnTableScan import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange -import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.{SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState} import org.apache.spark.sql.sources.{BaseRelation, Filter} @@ -132,6 +134,33 @@ trait SparkInternals extends Logging { */ def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, newExprId: ExprId): Expression + // scalastyle:off + + /** + * Create an instance of [[ColumnTableScan]] for the current Spark version. + * + * The primary reason is the difference between "sameResult" implementation which is + * final in newer Spark versions and needs to override doCanonicalize instead. + */ + def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, + relationSchema: StructType, allFilters: Seq[Expression], + schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, + isSampleReservoirAsRegion: Boolean = false): ColumnTableScan + + // scalastyle:on + + /** + * Create an instance of [[RowTableScan]] for the current Spark version. + * + * The primary reason is the difference between "sameResult" implementation which is + * final in newer Spark versions and needs to override doCanonicalize instead. + */ + def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], numBuckets: Int, + partitionColumns: Seq[Expression], partitionColumnAliases: Seq[Seq[Attribute]], + table: String, baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan + /** * Compile the given [[SparkPlan]] using whole-stage code generation and return * the generated code along with the [[CodegenContext]] use for code generation. @@ -210,6 +239,18 @@ trait SparkInternals extends Logging { */ def newClearCacheCommand(): LogicalPlan + /** + * Create a [[LogicalPlan]] for CREATE TABLE ... LIKE + */ + def newCreateTableLikeCommand(targetIdent: TableIdentifier, sourceIdent: TableIdentifier, + location: Option[String], allowExisting: Boolean): RunnableCommand + + /** + * Lookup a relation in catalog. + */ + def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, + alias: Option[String]): LogicalPlan + /** * Resolve Maven coordinates for a package, cache the jars and return the required CLASSPATH. */ @@ -221,7 +262,7 @@ trait SparkInternals extends Logging { */ def copyAttribute(attr: AttributeReference)(name: String = attr.name, dataType: DataType = attr.dataType, nullable: Boolean = attr.nullable, - metadata: Metadata = attr.metadata): AttributeReference + metadata: Metadata = attr.metadata, exprId: ExprId = attr.exprId): AttributeReference /** * Create a copy of [[InsertIntoTable]] plan with a new child. @@ -531,6 +572,11 @@ trait SparkInternals extends Logging { */ def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit + /** + * Return list of HiveConditionalStrategies to be applied when hive external catalog is enabled. + */ + def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] + /** * Create a new SnappyData extended CacheManager to clear cached plans on cached data changes. */ diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala index d0674988e6..47c1eb2036 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala @@ -53,7 +53,7 @@ case class IntervalExpression(children: Seq[Expression], units: Seq[Long]) override def foldable: Boolean = if (children.length == 1) children.head.foldable else children.forall(_.foldable) - override def deterministic: Boolean = + override lazy val deterministic: Boolean = if (children.length == 1) children.head.deterministic else children.forall(_.deterministic) override def nullable: Boolean = diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index c1b4aa0aa5..af00449f8f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -19,19 +19,20 @@ package org.apache.spark.sql.execution import scala.collection.mutable.ArrayBuffer import com.gemstone.gemfire.internal.cache.LocalRegion + import org.apache.spark.SparkContext import org.apache.spark.rdd.{RDD, ZippedPartitionsBaseRDD} import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, _} import org.apache.spark.sql.catalyst.plans.physical._ import org.apache.spark.sql.catalyst.util.{ArrayData, MapData} -import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow, TableIdentifier} +import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow} import org.apache.spark.sql.collection.Utils +import org.apache.spark.sql.execution.columnar.ConnectionType import org.apache.spark.sql.execution.columnar.impl.{BaseColumnFormatRelation, ColumnarStorePartitionedRDD, IndexColumnFormatRelation, SmartConnectorColumnRDD} -import org.apache.spark.sql.execution.columnar.{ColumnTableScan, ConnectionType} import org.apache.spark.sql.execution.exchange.ReusedExchangeExec import org.apache.spark.sql.execution.metric.{SQLMetric, SQLMetricInfo, SQLMetrics} -import org.apache.spark.sql.execution.row.{RowFormatRelation, RowFormatScanRDD, RowTableScan} +import org.apache.spark.sql.execution.row.{RowFormatRelation, RowFormatScanRDD} import org.apache.spark.sql.sources.{BaseRelation, PrunedUnsafeFilteredScan, SamplingRelation} import org.apache.spark.sql.types._ import org.apache.spark.sql.{AnalysisException, CachedDataFrame, SnappySession, SparkSupport} @@ -52,10 +53,8 @@ private[sql] abstract class PartitionedPhysicalScan( numBuckets: Int, partitionColumns: Seq[Expression], partitionColumnAliases: Seq[Seq[Attribute]], - @transient override val relation: BaseRelation, - // not used currently (if need to use then get from relation.table) - override val metastoreTableIdentifier: Option[TableIdentifier] = None) - extends DataSourceScanExec with CodegenSupportOnExecutor + @transient val relation: BaseRelation) + extends LeafExecNode with CodegenSupportOnExecutor with NonRecursivePlans with SparkSupport { def getMetrics: Map[String, SQLMetric] = { @@ -66,8 +65,6 @@ private[sql] abstract class PartitionedPhysicalScan( override lazy val metrics: Map[String, SQLMetric] = getMetrics - override def metadata: Map[String, String] = Map.empty - private lazy val extraInformation = if (relation != null) { relation.toString } else { @@ -144,7 +141,7 @@ private[sql] abstract class PartitionedPhysicalScan( } } -private[sql] object PartitionedPhysicalScan { +private[sql] object PartitionedPhysicalScan extends SparkSupport { private[sql] val CT_BLOB_POSITION = 4 private val EMPTY_PARAMS = Array.empty[ParamLiteral] @@ -163,7 +160,7 @@ private[sql] object PartitionedPhysicalScan { relation match { case i: IndexColumnFormatRelation => val caseSensitive = i.sqlContext.conf.caseSensitiveAnalysis - val columnScan = ColumnTableScan(output, rdd, otherRDDs, numBuckets, + val columnScan = internals.columnTableScan(output, rdd, otherRDDs, numBuckets, partitionColumns, partitionColumnAliases, relation, relation.schema, allFilters, schemaAttributes, caseSensitive) val table = i.getBaseTableRelation @@ -174,7 +171,7 @@ private[sql] object PartitionedPhysicalScan { def resolveCol(left: Attribute, right: AttributeReference) = columnScan.sqlContext.sessionState.analyzer.resolver(left.name, right.name) - val rowBufferScan = RowTableScan(output, StructType.fromAttributes( + val rowBufferScan = internals.rowTableScan(output, StructType.fromAttributes( output), baseTableRDD, numBuckets, Nil, Nil, table.table, table, caseSensitive) val otherPartKeys = partitionColumns.map(_.transform { case a: AttributeReference => rowBufferScan.output.find(resolveCol(_, a)).getOrElse { @@ -187,22 +184,22 @@ private[sql] object PartitionedPhysicalScan { ZipPartitionScan(columnScan, columnScan.partitionColumns, rowBufferScan, otherPartKeys) case c: BaseColumnFormatRelation => - ColumnTableScan(output, rdd, otherRDDs, numBuckets, + internals.columnTableScan(output, rdd, otherRDDs, numBuckets, partitionColumns, partitionColumnAliases, relation, relation.schema, allFilters, schemaAttributes, c.sqlContext.conf.caseSensitiveAnalysis) case r: SamplingRelation => if (r.isReservoirAsRegion) { - ColumnTableScan(output, rdd, Nil, numBuckets, partitionColumns, + internals.columnTableScan(output, rdd, Nil, numBuckets, partitionColumns, partitionColumnAliases, relation, relation.schema, allFilters, schemaAttributes, r.sqlContext.conf.caseSensitiveAnalysis, - isForSampleReservoirAsRegion = true) + isSampleReservoirAsRegion = true) } else { - ColumnTableScan(output, rdd, otherRDDs, numBuckets, + internals.columnTableScan(output, rdd, otherRDDs, numBuckets, partitionColumns, partitionColumnAliases, relation, relation.schema, allFilters, schemaAttributes, r.sqlContext.conf.caseSensitiveAnalysis) } case r: RowFormatRelation => - RowTableScan(output, StructType.fromAttributes(output), rdd, numBuckets, + internals.rowTableScan(output, StructType.fromAttributes(output), rdd, numBuckets, partitionColumns, partitionColumnAliases, relation.table, relation, r.sqlContext.conf.caseSensitiveAnalysis) } @@ -495,7 +492,7 @@ trait BatchConsumer extends CodegenSupport { /** * Generate Java source code to do any processing before a batch is consumed - * by a [[DataSourceScanExec]] that does batch processing (e.g. per-batch + * by a [[PartitionedPhysicalScan]] that does batch processing (e.g. per-batch * optimizations, initializations etc). *

* Implementations should use this for additional optimizations that can be diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index a0de3a777d..7e0fc81a37 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -934,7 +934,7 @@ case class SnappyHashAggregateExec( val localNumRowsIterated = ctx.freshName("localNumRowsIterated") // The child could change `copyResult` to true, but we had already // consumed all the rows, so `copyResult` should be reset to `false`. - ctx.copyResult = false + internals.resetCopyResult(ctx) val aggTime = metricTerm(ctx, "aggTime") val beforeAgg = ctx.freshName("beforeAgg") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala index 14d94bde6a..5690f31a42 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala @@ -31,7 +31,6 @@ import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext import org.apache.spark.sql.catalyst.expressions.{Attribute, BoundReference} import org.apache.spark.sql.execution.columnar.impl.ColumnFormatRelation -import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{BufferedRowIterator, CodegenSupportOnExecutor, LeafExecNode} import org.apache.spark.sql.store.CodeGeneration import org.apache.spark.sql.types._ @@ -82,7 +81,7 @@ final class ColumnBatchCreator( // the lookup key does not depend on tableName since the generated // code does not (which is passed in the references separately) val gen = CodeGeneration.compileCode("columnTable.batch", schema.fields, () => { - val tableScan = RowTableScan(schema.toAttributes, schema, + val tableScan = internals.rowTableScan(schema.toAttributes, schema, dataRDD = null, numBuckets = -1, partitionColumns = Nil, partitionColumnAliases = Nil, tableName, baseRelation = null, caseSensitive = true) // sending negative values for batch size and delta rows will create diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala index a2df9dbb0b..d903cae937 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnExec.scala @@ -26,7 +26,6 @@ import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext import org.apache.spark.sql.catalyst.expressions.{Attribute, SortOrder} import org.apache.spark.sql.catalyst.plans.physical.{ClusteredDistribution, Distribution} import org.apache.spark.sql.collection.Utils -import org.apache.spark.sql.execution.WholeStageCodegenExec import org.apache.spark.sql.execution.columnar.impl.{JDBCSourceAsColumnarStore, SnapshotConnectionListener} import org.apache.spark.sql.execution.row.RowExec import org.apache.spark.sql.store.StoreUtils @@ -88,7 +87,7 @@ trait ColumnExec extends RowExec { override protected def doExecute(): RDD[InternalRow] = { // don't expect code generation to fail try { - WholeStageCodegenExec(this).execute() + internals.newWholeStagePlan(this).execute() } finally { sqlContext.sparkSession.asInstanceOf[SnappySession].clearWriteLockOnTable() diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index 040698d8ba..3ec1c2322b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -31,7 +31,7 @@ import org.apache.spark.sql.catalyst.util.{SerializedArray, SerializedMap, Seria import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.encoding.{BitSet, ColumnEncoder, ColumnEncoding, ColumnStatsSchema} import org.apache.spark.sql.execution.columnar.impl.BaseColumnFormatRelation -import org.apache.spark.sql.execution.{SparkPlan, TableExec, WholeStageCodegenExec} +import org.apache.spark.sql.execution.{SparkPlan, TableExec} import org.apache.spark.sql.sources.DestroyRelation import org.apache.spark.sql.store.CompressionCodecId import org.apache.spark.sql.types._ @@ -779,7 +779,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], override protected def doExecute(): RDD[InternalRow] = { // don't expect code generation to fail try { - WholeStageCodegenExec(this).execute() + internals.newWholeStagePlan(this).execute() } finally { sqlContext.sparkSession.asInstanceOf[SnappySession].clearWriteLockOnTable() diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index 8674c7dba4..26df6d540f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -42,10 +42,10 @@ import io.snappydata.ResultSetWithNull import org.apache.spark.rdd.{RDD, UnionPartition} import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.dsl.expressions._ import org.apache.spark.sql.catalyst.expressions._ import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode, ExpressionCanonicalizer} -import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} import org.apache.spark.sql.collection.{SharedUtils, Utils} import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.columnar.encoding._ @@ -64,7 +64,7 @@ import org.apache.spark.{Dependency, Logging, Partition, RangeDependency, SparkC * This plan overrides outputPartitioning and makes it inline with the * partitioning of the underlying DataSource. */ -private[sql] final case class ColumnTableScan( +abstract case class ColumnTableScan( output: Seq[Attribute], dataRDD: RDD[Any], otherRDDs: Seq[RDD[InternalRow]], @@ -91,20 +91,6 @@ private[sql] final case class ColumnTableScan( case c => Some(c.sparkSession.asInstanceOf[SnappySession]) } - lazy val tableIdentifier: Option[TableIdentifier] = baseRelation match { - case null => None - case r => session match { - case Some(s) => Some(s.tableIdentifier(r.table, resolve = true)) - case None => Some(SnappySession.tableIdentifier(r.table, catalog = null, resolve = false)) - } - } - - override def sameResult(plan: SparkPlan): Boolean = plan match { - case r: ColumnTableScan => r.tableIdentifier == tableIdentifier && - r.numBuckets == numBuckets && r.schema == schema - case _ => false - } - @transient private val MAX_SCHEMA_LENGTH = 40 override lazy val outputOrdering: Seq[SortOrder] = { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala index 4e1151ddbd..c8efe6d9ec 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala @@ -19,12 +19,13 @@ package org.apache.spark.sql.execution.columnar import java.sql.Connection import java.util.concurrent.locks.ReentrantReadWriteLock -import com.gemstone.gemfire.internal.shared.ClientResolverUtils - import scala.collection.JavaConverters._ + +import com.gemstone.gemfire.internal.shared.ClientResolverUtils import com.pivotal.gemfirexd.Attribute import io.snappydata.{Constant, SnappyTableStatsProviderService} import org.eclipse.collections.impl.map.mutable.primitive.ObjectLongHashMap + import org.apache.spark.Logging import org.apache.spark.rdd.RDD import org.apache.spark.sql._ @@ -198,12 +199,8 @@ abstract case class JDBCAppendableRelation( override def equals(that: Any): Boolean = { that match { - case r: JDBCAppendableRelation => { - (this eq r) || ( - hashCode() == r.hashCode() - && r.schemaName.equalsIgnoreCase(schemaName) - && r.tableName.equalsIgnoreCase(tableName)) - } + case r: JDBCAppendableRelation => (this eq r) || + (r.schemaName.equalsIgnoreCase(schemaName) && r.tableName.equalsIgnoreCase(tableName)) case _ => false } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala index d2edb3229f..34d07c6d34 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala @@ -597,7 +597,7 @@ class JDBCSourceAsColumnarStore(private var _connProperties: ConnectionPropertie val gen = CodeGeneration.compileCode( tableName + ".columnTable.decompress", schema.fields, () => { val schemaAttrs = schema.toAttributes - val tableScan = ColumnTableScan(schemaAttrs, dataRDD = null, + val tableScan = internals.columnTableScan(schemaAttrs, dataRDD = null, otherRDDs = Nil, numBuckets = -1, partitionColumns = Nil, partitionColumnAliases = Nil, baseRelation = null, schema, allFilters = Nil, schemaAttrs, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 42d230fcc7..2ca715262b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -34,7 +34,6 @@ import io.snappydata.Property import io.snappydata.util.ServiceUtils import org.apache.spark.SparkContext -import org.apache.spark.deploy.SparkSubmitUtils import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec @@ -595,7 +594,7 @@ case class ListPackageJarsCommand(isJar: Boolean) extends RunnableCommand { } } -case class UnDeployCommand(alias: String) extends RunnableCommand { +case class UnDeployCommand(alias: String) extends RunnableCommand with SparkSupport { override def run(sparkSession: SparkSession): Seq[Row] = { var value = "" @@ -616,8 +615,7 @@ case class UnDeployCommand(alias: String) extends RunnableCommand { val coordinates = value.substring(0, indexOf) val repos = Option(value.substring(indexOf + 1, lastIndexOf)) val jarCache = Option(value.substring(lastIndexOf + 1, value.length)) - val jarsstr = SparkSubmitUtils.resolveMavenCoordinates(coordinates, - repos, jarCache) + val jarsstr = internals.resolveMavenCoordinates(coordinates, repos, jarCache, Nil) if (jarsstr.nonEmpty) { val pkgs = jarsstr.split(",") RefreshMetadata.executeOnAll(sc, RefreshMetadata.REMOVE_URIS_FROM_CLASSLOADER, pkgs) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 5a5e4aad98..9c716873f9 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -28,7 +28,7 @@ import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCo import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression} import org.apache.spark.sql.catalyst.util.{SerializedArray, SerializedMap, SerializedRow} import org.apache.spark.sql.collection.Utils -import org.apache.spark.sql.execution.{PartitionedDataSourceScan, PartitionedPhysicalScan, SparkPlan} +import org.apache.spark.sql.execution.{PartitionedDataSourceScan, PartitionedPhysicalScan} import org.apache.spark.sql.sources.BaseRelation import org.apache.spark.sql.types._ @@ -39,7 +39,7 @@ import org.apache.spark.sql.types._ * and Broadcast joins. This plan overrides outputPartitioning and * makes it inline with the partitioning of the underlying DataSource. */ -private[sql] final case class RowTableScan( +abstract case class RowTableScan( output: Seq[Attribute], _schema: StructType, dataRDD: RDD[Any], @@ -66,12 +66,6 @@ private[sql] final case class RowTableScan( } } - override def sameResult(plan: SparkPlan): Boolean = plan match { - case r: RowTableScan => r.tableIdentifier == tableIdentifier && - r.numBuckets == numBuckets && r.schema == schema - case _ => false - } - override def doProduce(ctx: CodegenContext): String = { // a parent plan may set a custom input (e.g. HashJoinExec) // for that case no need to add the "shouldStop()" calls diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 88e940a790..6fc4a022a1 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -311,15 +311,6 @@ trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExterna } } - override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = { - try { - withHiveExceptionHandling(super.alterDatabase(schemaDefinition)) - } catch { - case _: NoSuchDatabaseException | _: NoSuchObjectException => - throw SnappyExternalCatalog.schemaNotFoundException(schemaDefinition.name) - } - } - // -------------------------------------------------------------------------- // Tables // -------------------------------------------------------------------------- diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 15a7c17e76..7e2c692dd6 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -44,7 +44,7 @@ import org.apache.spark.sql.execution.columnar.impl.IndexColumnFormatRelation import org.apache.spark.sql.execution.command.{ExecutedCommandExec, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.sources.{PhysicalScan, StoreDataSourceStrategy} -import org.apache.spark.sql.hive.execution.{CreateHiveTableAsSelectCommand, HiveTableScanExec, InsertIntoHiveTable} +import org.apache.spark.sql.hive.execution.{CreateHiveTableAsSelectCommand, HiveTableScanExec} import org.apache.spark.sql.internal._ import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources._ @@ -92,8 +92,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu session } - private[sql] lazy val hiveState: HiveSessionState = - hiveSession.sessionState.asInstanceOf[HiveSessionState] + private[sql] def hiveState: SessionState = hiveSession.sessionState /** * Execute a method switching the session and shared states in the session to external hive. @@ -665,10 +664,8 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu Seq(StoreDataSourceStrategy, SnappyAggregation, HashJoinStrategies) experimentalMethods.extraStrategies = experimentalMethods.extraStrategies ++ - Seq(new HiveConditionalStrategy(_.HiveTableScans, this), - new HiveConditionalStrategy(_.DataSinks, this), - new HiveConditionalStrategy(_.Scripts, this), - SnappyStrategies, StoreStrategy, StreamQueryStrategy) ++ storeOptimizedRules + internals.hiveConditionalStrategies(this) ++ + Seq(SnappyStrategies, StoreStrategy, StreamQueryStrategy) ++ storeOptimizedRules } protected def beforeExecutePlan(plan: LogicalPlan): Unit = { @@ -712,7 +709,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu StoreUtils.getPartitionsReplicatedTable(snappySession, region) } -class HiveConditionalRule(rule: HiveSessionState => Rule[LogicalPlan], state: SnappySessionState) +class HiveConditionalRule(rule: SessionState => Rule[LogicalPlan], state: SnappySessionState) extends Rule[LogicalPlan] { override def apply(plan: LogicalPlan): LogicalPlan = { // Parquet/Orc conversion rules will indirectly read the session state from the session @@ -727,7 +724,7 @@ class HiveConditionalStrategy(strategy: HiveStrategies => Strategy, state: Snapp extends Strategy { override def apply(plan: LogicalPlan): Seq[SparkPlan] = { // some strategies like DataSinks read the session state and expect it to be - // HiveSessionState so switch it before invoking the strategy and restore at the end + // hive-enabled SessionState so switch it before invoking the strategy and restore at the end if (state.snappySession.enableHiveSupport) state.withHiveSession { strategy(state.hiveState.planner.asInstanceOf[HiveStrategies])(plan) } else Nil @@ -790,7 +787,7 @@ trait SnappyAnalyzer extends Analyzer { */ object SnappyPromoteStrings extends Rule[LogicalPlan] { override def apply(plan: LogicalPlan): LogicalPlan = { - plan resolveExpressions { + plan transformAllExpressions { case e if !e.childrenResolved => e case p@BinaryComparison(left@StringType(), right@QuestionMark(_)) if right.dataType == NullType => @@ -815,7 +812,7 @@ case class OptimizeSortAndFilePlans(conf: SnappyConf) extends Rule[SparkPlan] { override def apply(plan: SparkPlan): SparkPlan = plan.transformUp { case join@joins.SortMergeJoinExec(_, _, _, _, _, sort@SortExec(_, _, child, _)) => join.copy(right = SnappySortExec(sort, child)) - case s@(_: FileSourceScanExec | _: HiveTableScanExec | _: InsertIntoHiveTable | + case s@(_: FileSourceScanExec | _: HiveTableScanExec | ExecutedCommandExec(_: InsertIntoHadoopFsRelationCommand | _: CreateHiveTableAsSelectCommand)) => conf.setDynamicCpusPerTask() diff --git a/core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala b/core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala index 0d24ef8c76..beacd2842a 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala @@ -126,7 +126,7 @@ object ContextJarUtils extends Logging { case e: AnalysisException => if (!ignoreIfNotExists) { sessionCatalog match { - case Some(ssc) => ssc.failFunctionLookup(functionName) + case Some(ssc) => ssc.functionNotFound(functionName) case None => throw new NoSuchFunctionException(schemaName, identifier.funcName) } } else { // Log, just in case. diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index ed4ee61e7a..572d8445a5 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -69,6 +69,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val parser: SnappySqlParser val wrappedCatalog: Option[SnappySessionCatalog] + def functionNotFound(name: String): Unit + final def contextFunctions: SnappyContextFunctions = snappySession.contextFunctions /** @@ -111,8 +113,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { * Fallback session state to lookup from external hive catalog in case * "snappydata.sql.hive.enabled" is set on the session. */ - protected final lazy val hiveSessionCatalog: HiveSessionCatalog = - snappySession.sessionState.hiveState.catalog + protected[sql] final lazy val hiveSessionCatalog: HiveSessionCatalog = + snappySession.sessionState.hiveState.catalog.asInstanceOf[HiveSessionCatalog] /** * Return true if the given table needs to be checked in the builtin catalog @@ -226,8 +228,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { queryLR.get.output.map(_.exprId)).toMap filter.transformAllExpressions { case ar: AttributeReference if mappingInfo.contains(ar.exprId) => - AttributeReference(ar.name, ar.dataType, ar.nullable, - ar.metadata)(mappingInfo(ar.exprId), ar.qualifier, ar.isGenerated) + internals.copyAttribute(ar)(exprId = mappingInfo(ar.exprId)) } } } @@ -266,7 +267,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { final def resolveRelationWithAlias(tableIdent: TableIdentifier, alias: Option[String] = None): LogicalPlan = { // resolve the relation right away with alias around - new FindDataSourceTable(snappySession)(lookupRelation(tableIdent, alias)) + new FindDataSourceTable(snappySession)(lookupRelationImpl(tableIdent, alias, wrapped = None)) } /** @@ -835,7 +836,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { case Some(t) => snappySession.tableIdentifier(t) case None => throw new IllegalStateException("Target Table for the policy not found") } - /* val targetRelation = snappySession.sessionState.catalog.lookupRelation(tableIdent) + /* val targetRelation = lookupRelationImpl(tableIdent, None) val isTargetExternalRelation = targetRelation.find(x => x match { case _: ExternalRelation => true case _ => false @@ -851,8 +852,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan - protected final def lookupRelationImpl(name: TableIdentifier, - alias: Option[String]): LogicalPlan = wrappedCatalog match { + protected final def lookupRelationImpl(name: TableIdentifier, alias: Option[String], + wrapped: Option[SnappySessionCatalog] = wrappedCatalog): LogicalPlan = wrapped match { case None => synchronized { val tableName = formatTableName(name.table) var view: Option[TableIdentifier] = Some(name) @@ -878,7 +879,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { // catalog from the session every time so use withHiveState to switch the catalog val state = snappySession.sessionState if (hiveSessionCatalog.databaseExists(schemaName)) state.withHiveSession { - return hiveSessionCatalog.lookupRelation( + return internals.lookupRelation(hiveSessionCatalog, TableIdentifier(tableName, Some(schemaName)), alias) } } @@ -1120,10 +1121,6 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { super.dropFunction(name, ignoreIfNotExists) } - override def failFunctionLookup(name: String): Nothing = { - super.failFunctionLookup(name) - } - override def createFunction(funcDefinition: CatalogFunction, ignoreIfExists: Boolean): Unit = { val schemaName = getSchemaName(funcDefinition.identifier) // first check required permission to create objects in a schema diff --git a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala index d4dc80be25..a711b68dff 100644 --- a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala @@ -18,11 +18,11 @@ package org.apache.spark.sql.row import java.sql.Connection -import com.gemstone.gemfire.internal.shared.ClientResolverUtils - import scala.collection.JavaConverters._ + +import com.gemstone.gemfire.internal.shared.ClientResolverUtils import io.snappydata.SnappyTableStatsProviderService -import kafka.client.ClientUtils + import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, SortDirection} @@ -411,12 +411,10 @@ abstract case class JDBCMutableRelation( override def equals(that: Any): Boolean = { that match { - case mutable: JDBCMutableRelation => { - (this eq mutable) || ( - hashCode() == mutable.hashCode() + case mutable: JDBCMutableRelation => + (this eq mutable) || (hashCode() == mutable.hashCode() && mutable.schemaName.equalsIgnoreCase(schemaName) && mutable.tableName.equalsIgnoreCase(tableName)) - } case _ => false } } diff --git a/settings.gradle b/settings.gradle index 31b80264b2..4a30be3abb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,8 +17,7 @@ String scalaBinaryVersion = '2.11' String sparkVersion = '2.1.1' -String sparkConnectorVersion = rootProject.hasProperty('spark.connector.version') - ? rootProject.property('spark.connector.version') : sparkVersion +String sparkConnectorVersion = System.getProperty('spark.connector.version', sparkVersion) rootProject.name = 'snappydata_' + scalaBinaryVersion include ':snappy-jdbc_' + scalaBinaryVersion From 96eb5d8c091b8c85b805fc7abf70db897841b695 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 18 Nov 2019 08:28:48 +0530 Subject: [PATCH 31/80] more fixes and update to scalatest 3 --- build.gradle | 2 +- compatibilityTests/build.gradle | 36 +++++++---- core-product/build.gradle | 59 ++++++++++++++++++- .../sql/internal/Spark210Internals.scala | 19 ++++-- core/compatibility/spark-2.1.1/build.gradle | 2 +- .../sql/internal/Spark232Internals.scala | 17 ++++-- .../main/scala/io/snappydata/functions.scala | 4 +- .../org/apache/spark/sql/SparkInternals.scala | 12 +++- .../spark/sql/execution/TableExec.scala | 4 +- .../aggregate/SnappyHashAggregateExec.scala | 3 +- .../columnar/JDBCAppendableRelation.scala | 4 +- .../sql/internal/SnappySessionCatalog.scala | 4 +- .../spark/sql/row/JDBCMutableRelation.scala | 4 +- .../apache/spark/sql/sources/interfaces.scala | 31 +++++----- .../scala/io/snappydata/SnappyFunSuite.scala | 30 ++++------ .../spark/sql/SnappyTempTableTest.scala | 4 +- .../store/ColumnTableBatchInsertTest.scala | 21 +++---- .../spark/sql/store/CreateIndexTest.scala | 9 ++- .../spark/sql/store/SnappyCatalogSuite.scala | 18 +++--- examples/build.gradle | 2 +- spark | 2 +- spark-jobserver | 2 +- 22 files changed, 188 insertions(+), 101 deletions(-) diff --git a/build.gradle b/build.gradle index d41e555790..d3e8505c59 100644 --- a/build.gradle +++ b/build.gradle @@ -129,7 +129,7 @@ allprojects { junitVersion = '4.12' mockitoVersion = '1.10.19' hadoopVersion = '2.7.7' - scalatestVersion = '2.2.6' + scalatestVersion = '3.0.8' jettyVersion = '9.2.26.v20180806' guavaVersion = '14.0.1' kryoVersion = '4.0.1' diff --git a/compatibilityTests/build.gradle b/compatibilityTests/build.gradle index a7d579c52d..bcb2def67f 100644 --- a/compatibilityTests/build.gradle +++ b/compatibilityTests/build.gradle @@ -45,6 +45,30 @@ dependencies { compileOnly project(':snappy-spark:snappy-spark-graphx_' + scalaBinaryVersion) compileOnly project(':snappy-spark:snappy-spark-hive-thriftserver_' + scalaBinaryVersion) + compile (project(coreProjectName)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + } + compile (project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkVersion}")) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + } + // some tests expect resource files as having file: URI and not jar:file: testRuntime files("${projectDir}/../spark/sql/core/src/test/resources") testRuntime files("${projectDir}/../spark/sql/hive/src/test/resources") @@ -57,18 +81,6 @@ dependencies { configuration: 'testOutput') testCompile project(':dunit') - compile (project(':snappy-core_' + scalaBinaryVersion)) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - } - testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" if (new File(rootDir, 'aqp/build.gradle').exists() && rootProject.hasProperty('snappydata.enterprise')) { diff --git a/core-product/build.gradle b/core-product/build.gradle index 710648c051..9a2f63c90f 100644 --- a/core-product/build.gradle +++ b/core-product/build.gradle @@ -20,11 +20,14 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' // fix scala+java mix to all use compileScala which uses correct dependency order sourceSets.main.scala.srcDirs = [ '../core/src/main/java', '../core/src/main/scala' ] +sourceSets.test.scala.srcDirs = [ '../core/src/test/java', '../core/src/test/scala', + '../core/src/dunit/java', '../core/src/dunit/scala' ] sourceSets.main.java.srcDirs = [] +sourceSets.test.java.srcDirs = [] dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + compile 'org.scala-lang:scala-library:' + scalaVersion + compile 'org.scala-lang:scala-reflect:' + scalaVersion compile coreLibraries.common compile("org.apache.thrift:libthrift:${thriftVersion}") { @@ -39,13 +42,63 @@ dependencies { // always use stock spark so that snappy extensions don't get accidently // included here in snappy-core code. - compileOnly coreLibraries.sparkProduct + if (System.properties.containsKey('ideaBuild') && new File(rootDir, 'spark/build.gradle').exists()) { + compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + testCompile "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + testCompile project(path: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion, configuration: 'testOutput') + testCompile project(path: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion, configuration: 'testOutput') + testCompile project(path: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion, configuration: 'testOutput') + } else { + compile coreLibraries.sparkProduct + + testCompile("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}:tests") + testCompile("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}:tests") + testCompile("org.apache.spark:spark-sql-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}:tests") + testCompile("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkVersion}:tests") + testCompile("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}:tests") + } compile project(':snappy-store:snappydata-store-client') compile project(':snappy-store:snappydata-store-core') compile project(':snappy-store:snappydata-store-tools') compile project(":snappy-jdbc_${scalaBinaryVersion}") compile project(":snappy-encoders_${scalaBinaryVersion}") + + testCompile project(':dunit') + testCompile 'org.scala-lang:scala-actors:' + scalaVersion + testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" + + testCompile (project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkVersion}")) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + } + testCompile project(path: ':snappy-store:snappydata-store-tools', configuration: 'testOutput') + + testRuntime files("${projectDir}/../tests/common/src/main/resources") + testRuntime "org.pegdown:pegdown:${pegdownVersion}" + testCompile(project(path: ':snappy-examples_' + scalaBinaryVersion, configuration: 'testOutput')) { + exclude(group: 'io.snappydata', module: 'snappy-cluster_' + scalaBinaryVersion) + exclude(group: 'io.snappydata', module: 'snappy-aqp_' + scalaBinaryVersion) + exclude(group: 'io.snappydata', module: 'gemfire-core') + } } archivesBaseName = "snappydata-core-spark${sparkVersion}_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index a5667b13b3..7ac533617b 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -56,6 +56,7 @@ import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream import org.apache.spark.util.Utils @@ -127,9 +128,9 @@ class Spark210Internals extends SparkInternals { } override def addClassField(ctx: CodegenContext, javaType: String, - varName: String, initFunc: String => String, + varPrefix: String, initFunc: String => String, forceInline: Boolean, useFreshName: Boolean): String = { - val variableName = if (useFreshName) ctx.freshName(varName) else varName + val variableName = if (useFreshName) ctx.freshName(varPrefix) else varPrefix ctx.addMutableState(javaType, variableName, initFunc(variableName)) variableName } @@ -294,10 +295,10 @@ class Spark210Internals extends SparkInternals { SparkSubmitUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath, exclusions) } - override def copyAttribute(attr: AttributeReference)(name: String, + override def copyAttribute(attr: Attribute)(name: String, dataType: DataType, nullable: Boolean, metadata: Metadata, exprId: ExprId): AttributeReference = { - attr.copy(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) } @@ -617,6 +618,12 @@ class Spark210Internals extends SparkInternals { } override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) + + override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { + context.ui.get.storageListener.rddInfoList.map(info => new RDDStorageInfo(info.id, info.name, + info.numPartitions, info.numCachedPartitions, info.storageLevel.description, + info.memSize, info.diskSize, dataDistribution = None, partitions = None)) + } } class SnappyEmbeddedHiveCatalog210(override val conf: SparkConf, @@ -777,9 +784,9 @@ class SnappySessionCatalog21(override val snappySession: SnappySession, } } - override protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = child + override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = child - override protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = + override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = SimpleCatalogRelation(schemaName, table) override def lookupRelation(name: TableIdentifier, alias: Option[String]): LogicalPlan = diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index ebc31216aa..9d39bc71b7 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -40,7 +40,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { + compileOnly (project(coreProjectName)) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 14da30c077..76741102fe 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -57,6 +57,7 @@ import org.apache.spark.sql.hive._ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream @@ -90,9 +91,9 @@ class Spark232Internals extends SparkInternals { } override def addClassField(ctx: CodegenContext, javaType: String, - varName: String, initFunc: String => String, + varPrefix: String, initFunc: String => String, forceInline: Boolean, useFreshName: Boolean): String = { - ctx.addMutableState(javaType, varName, initFunc, forceInline, useFreshName) + ctx.addMutableState(javaType, varPrefix, initFunc, forceInline, useFreshName) } override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = @@ -231,10 +232,10 @@ class Spark232Internals extends SparkInternals { SparkSubmitUtils.buildIvySettings(remoteRepos, ivyPath), exclusions) } - override def copyAttribute(attr: AttributeReference)(name: String, + override def copyAttribute(attr: Attribute)(name: String, dataType: DataType, nullable: Boolean, metadata: Metadata, exprId: ExprId): AttributeReference = { - attr.copy(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( exprId, qualifier = attr.qualifier) } @@ -551,6 +552,10 @@ class Spark232Internals extends SparkInternals { override def newCacheManager(): CacheManager = new SnappyCacheManager23 override def buildConf(key: String): ConfigBuilder = SQLConf.buildConf(key) + + override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { + context.ui.get.store.rddList() + } } @@ -751,10 +756,10 @@ class SnappySessionCatalog23(override val snappySession: SnappySession, super.failFunctionLookup(FunctionIdentifier(name, None)) } - override protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = + override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = View(desc = table, output = table.schema.toAttributes, child) - override protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = + override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = UnresolvedCatalogRelation(table) override def lookupRelation(name: TableIdentifier): LogicalPlan = lookupRelationImpl(name, None) diff --git a/core/src/main/scala/io/snappydata/functions.scala b/core/src/main/scala/io/snappydata/functions.scala index 55840dadd1..46e4679aa7 100644 --- a/core/src/main/scala/io/snappydata/functions.scala +++ b/core/src/main/scala/io/snappydata/functions.scala @@ -72,8 +72,8 @@ object SnappyDataFunctions { } def buildOneArgExpression(name: String, fnClass: Class[_], - fn: Expression => Expression): (String, ExpressionInfo, FunctionBuilder) = { - (name, expressionInfo(name, fnClass), e => { + fn: Expression => Expression): (FunctionIdentifier, ExpressionInfo, FunctionBuilder) = { + (FunctionIdentifier(name, None), expressionInfo(name, fnClass), e => { if (e.length == 1) { fn(e.head) } else { diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index cc65c1216a..682a334913 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -43,6 +43,7 @@ import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.streaming.LogicalDStreamPlan import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream import org.apache.spark.{Logging, SparkConf, SparkContext} @@ -92,7 +93,7 @@ trait SparkInternals extends Logging { * Add a mutable state variable to given [[CodegenContext]] and return the variable name. */ def addClassField(ctx: CodegenContext, javaType: String, - varName: String, initFunc: String => String = emptyFunc, + varPrefix: String, initFunc: String => String = emptyFunc, forceInline: Boolean = false, useFreshName: Boolean = true): String /** @@ -258,9 +259,9 @@ trait SparkInternals extends Logging { ivyPath: Option[String], exclusions: Seq[String]): String /** - * Create a copy of [[AttributeReference]] with given new arguments. + * Create a copy of [[Attribute]] as [[AttributeReference]] with given arguments. */ - def copyAttribute(attr: AttributeReference)(name: String = attr.name, + def copyAttribute(attr: Attribute)(name: String = attr.name, dataType: DataType = attr.dataType, nullable: Boolean = attr.nullable, metadata: Metadata = attr.metadata, exprId: ExprId = attr.exprId): AttributeReference @@ -586,6 +587,11 @@ trait SparkInternals extends Logging { * Create a new SQLConf entry with registration actions for the given key. */ def buildConf(key: String): ConfigBuilder + + /** + * Get the global list of cached RDDs (as list of [[RDDStorageInfo]]). + */ + def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] } /** diff --git a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala index 55b300d2ba..b82a933862 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala @@ -25,7 +25,7 @@ import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, import org.apache.spark.sql.catalyst.plans.physical._ import org.apache.spark.sql.collection.{SmartExecutorBucketPartition, Utils} import org.apache.spark.sql.execution.metric.{SQLMetric, SQLMetrics} -import org.apache.spark.sql.sources.{DestroyRelation, JdbcExtendedUtils, NativeTableRowLevelSecurityRelation} +import org.apache.spark.sql.sources.{DestroyRelation, JdbcExtendedUtils, SnappyTableRelation} import org.apache.spark.sql.store.StoreUtils import org.apache.spark.sql.types.{LongType, StructType} import org.apache.spark.sql.{DelegateRDD, SnappyContext, SnappySession, SparkSupport, ThinClientConnectorMode} @@ -60,7 +60,7 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor if (!onExecutor) { val catalogVersion: Option[Long] = Utils.executeIfSmartConnector(sqlContext.sparkContext) { relation match { - case Some(r: NativeTableRowLevelSecurityRelation) => r.relationInfo.catalogSchemaVersion + case Some(r: SnappyTableRelation) => r.relationInfo.catalogSchemaVersion case _ => -1 } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index 7e0fc81a37..578bdbbd27 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -165,7 +165,8 @@ case class SnappyHashAggregateExec( internals.copyAttribute(sumAttr)(nullable = false) :: Nil case avg: Average if !avg.child.nullable => val sumAttr = avg.aggBufferAttributes.head - internals.copyAttribute(sumAttr)(nullable = false) :: avg.aggBufferAttributes(1) :: Nil + internals.copyAttribute(sumAttr)(nullable = false) :: + avg.aggBufferAttributes(1) :: Nil case max: Max if !max.child.nullable => val maxAttr = max.aggBufferAttributes.head internals.copyAttribute(maxAttr)(nullable = false) :: Nil diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala index c8efe6d9ec..6970b1fc1f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala @@ -49,7 +49,7 @@ abstract case class JDBCAppendableRelation( provider: String, mode: SaveMode, userSchema: StructType, - origOptions: CaseInsensitiveMutableHashMap[String], + override val origOptions: CaseInsensitiveMutableHashMap[String], externalStore: ExternalStore, @transient override val sqlContext: SQLContext) extends BaseRelation with PrunedUnsafeFilteredScan @@ -58,7 +58,7 @@ abstract case class JDBCAppendableRelation( with DestroyRelation with IndexableRelation with Logging - with NativeTableRowLevelSecurityRelation + with SnappyTableRelation with SparkSupport with Serializable { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 572d8445a5..a43d0aae29 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -848,9 +848,9 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { toSeq.filterNot(_.isEmpty)) } - protected def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan + def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan - protected def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan + def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan protected final def lookupRelationImpl(name: TableIdentifier, alias: Option[String], wrapped: Option[SnappySessionCatalog] = wrappedCatalog): LogicalPlan = wrapped match { diff --git a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala index a711b68dff..f29c8bea86 100644 --- a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala @@ -53,7 +53,7 @@ abstract case class JDBCMutableRelation( mode: SaveMode, userSpecifiedString: String, parts: Array[Partition], - origOptions: CaseInsensitiveMutableHashMap[String], + override val origOptions: CaseInsensitiveMutableHashMap[String], @transient override val sqlContext: SQLContext) extends BaseRelation with PrunedUnsafeFilteredScan @@ -65,7 +65,7 @@ abstract case class JDBCMutableRelation( with DestroyRelation with IndexableRelation with AlterableRelation - with NativeTableRowLevelSecurityRelation + with SnappyTableRelation with SparkSupport with Logging { diff --git a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala index 6aa20991cb..53d7c92bf5 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala @@ -30,6 +30,7 @@ import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, SortDirection} import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} import org.apache.spark.sql.execution.SparkPlan +import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap import org.apache.spark.sql.execution.columnar.impl.BaseColumnFormatRelation import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JDBCRDD} @@ -305,8 +306,21 @@ trait RowLevelSecurityRelation { enableRowLevelSecurity: Boolean) } +/** + * ::DeveloperApi:: + * Marker interface for data sources that allow for extended schema specification + * in CREATE TABLE (like constraints in RDBMS databases). The schema string is passed + * as [[SnappyExternalCatalog.SCHEMADDL_PROPERTY]] in the relation provider parameters. + */ +@DeveloperApi +trait ExternalSchemaRelationProvider extends RelationProvider { + + def getSchemaString(options: Map[String, String]): Option[String] = + JdbcExtendedUtils.readSplitProperty(SnappyExternalCatalog.SCHEMADDL_PROPERTY, options) +} + @DeveloperApi -trait NativeTableRowLevelSecurityRelation extends DestroyRelation with RowLevelSecurityRelation { +trait SnappyTableRelation extends DestroyRelation with RowLevelSecurityRelation { protected val connFactory: () => Connection @@ -314,6 +328,8 @@ trait NativeTableRowLevelSecurityRelation extends DestroyRelation with RowLevelS def connProperties: ConnectionProperties + def origOptions: CaseInsensitiveMutableHashMap[String] + protected def isRowTable: Boolean val sqlContext: SQLContext @@ -460,19 +476,6 @@ trait NativeTableRowLevelSecurityRelation extends DestroyRelation with RowLevelS } } -/** - * ::DeveloperApi:: - * Marker interface for data sources that allow for extended schema specification - * in CREATE TABLE (like constraints in RDBMS databases). The schema string is passed - * as [[SnappyExternalCatalog.SCHEMADDL_PROPERTY]] in the relation provider parameters. - */ -@DeveloperApi -trait ExternalSchemaRelationProvider extends RelationProvider { - - def getSchemaString(options: Map[String, String]): Option[String] = - JdbcExtendedUtils.readSplitProperty(SnappyExternalCatalog.SCHEMADDL_PROPERTY, options) -} - /** * ::DeveloperApi:: * A BaseRelation that can eliminate unneeded columns and filter using selected diff --git a/core/src/test/scala/io/snappydata/SnappyFunSuite.scala b/core/src/test/scala/io/snappydata/SnappyFunSuite.scala index 960474c5c2..92051e45ad 100644 --- a/core/src/test/scala/io/snappydata/SnappyFunSuite.scala +++ b/core/src/test/scala/io/snappydata/SnappyFunSuite.scala @@ -29,8 +29,8 @@ import io.snappydata.util.TestUtils import org.scalatest.Assertions import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} -import org.apache.spark.sql.catalyst.expressions.{Alias, And, AttributeReference, EqualNullSafe, EqualTo, Exists, ExprId, Expression, ListQuery, PredicateHelper, PredicateSubquery, ScalarSubquery} -import org.apache.spark.sql.catalyst.plans.logical.{Filter, Join, LogicalPlan, OneRowRelation, Sample} +import org.apache.spark.sql.catalyst.expressions.{Alias, And, AttributeReference, EqualNullSafe, EqualTo, Exists, ExprId, Expression, ListQuery, PlanExpression, PredicateHelper, ScalarSubquery} +import org.apache.spark.sql.catalyst.plans.logical.{Filter, Join, LogicalPlan, Sample} import org.apache.spark.sql.catalyst.util.{sideBySide, stackTraceToString} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils @@ -63,17 +63,9 @@ abstract class SnappyFunSuite protected var testName: String = _ protected val dirList: ArrayBuffer[String] = ArrayBuffer[String]() - protected def sc: SparkContext = { - val ctx = SnappyContext.globalSparkContext - if (ctx != null && !ctx.isStopped) { - ctx - } else { - cachedContext = null - new SparkContext(newSparkConf()) - } - } + protected final def sc: SparkContext = sc(addOn = null) - protected def sc(addOn: SparkConf => SparkConf): SparkContext = { + protected final def sc(addOn: SparkConf => SparkConf): SparkContext = { val ctx = SnappyContext.globalSparkContext if (ctx != null && !ctx.isStopped) { ctx @@ -272,7 +264,8 @@ object SnappyFunSuite extends Assertions with SparkSupport { * itself but its an abstract class & parent to all spark tests. Later we can revisit how best * we can reuse the spark test code. */ -trait PlanTest extends SnappyFunSuite with PredicateHelper { +trait PlanTest extends SnappyFunSuite with PredicateHelper with SparkSupport { + /** * Since attribute references are given globally unique ids during analysis, * we must normalize them to check if two different queries are identical. @@ -285,8 +278,9 @@ trait PlanTest extends SnappyFunSuite with PredicateHelper { e.copy(exprId = ExprId(0)) case l: ListQuery => l.copy(exprId = ExprId(0)) - case p: PredicateSubquery => - p.copy(exprId = ExprId(0)) + case p if internals.isPredicateSubquery(p) => + internals.copyPredicateSubquery(p, + p.asInstanceOf[PlanExpression[LogicalPlan]].plan, ExprId(0)) case a: AttributeReference => AttributeReference(a.name, a.dataType, a.nullable)(exprId = ExprId(0)) case a: Alias => @@ -310,7 +304,8 @@ trait PlanTest extends SnappyFunSuite with PredicateHelper { Filter(splitConjunctivePredicates(condition).map(rewriteEqual).sortBy(_.hashCode()) .reduce(And), child) case sample: Sample => - sample.copy(seed = 0L)(true) + internals.newTableSample(sample.lowerBound, sample.upperBound, + sample.withReplacement, seed = 0L, sample.child) case Join(left, right, joinType, condition) if condition.isDefined => val newCondition = splitConjunctivePredicates(condition.get).map(rewriteEqual).sortBy(_.hashCode()) @@ -348,6 +343,7 @@ trait PlanTest extends SnappyFunSuite with PredicateHelper { /** Fails the test if the two expressions do not match */ protected def compareExpressions(e1: Expression, e2: Expression): Unit = { - comparePlans(Filter(e1, OneRowRelation), Filter(e2, OneRowRelation)) + comparePlans(Filter(e1, internals.newOneRowRelation()), + Filter(e2, internals.newOneRowRelation())) } } diff --git a/core/src/test/scala/org/apache/spark/sql/SnappyTempTableTest.scala b/core/src/test/scala/org/apache/spark/sql/SnappyTempTableTest.scala index 1576bcffb4..f4f3a60dad 100644 --- a/core/src/test/scala/org/apache/spark/sql/SnappyTempTableTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/SnappyTempTableTest.scala @@ -47,7 +47,7 @@ class SnappyTempTableTest extends SnappyFunSuite val qName = snc.snappySession.tableIdentifier(tableName) val plan = catalog.resolveRelation(qName) plan match { - case LogicalRelation(_, _, _) => fail(" A RDD based temp table " + + case _: LogicalRelation => fail(" A RDD based temp table " + "should have been matched with LogicalPlan") case _ => } @@ -74,7 +74,7 @@ class SnappyTempTableTest extends SnappyFunSuite val qName = snc.snappySession.tableIdentifier(tableName) val plan = catalog.resolveRelation(qName) plan match { - case LogicalRelation(_, _, _) => + case _: LogicalRelation => case _ => fail("A CSV relation temp table should have been " + "matched with LogicalRelation") } diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala index 0863e87fd3..be55d502c5 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala @@ -16,13 +16,14 @@ */ package org.apache.spark.sql.store +import scala.collection.mutable + import io.snappydata.core.{Data, TestData} import io.snappydata.{ConcurrentOpsTests, SnappyFunSuite} -import org.apache.spark.sql._ -import org.apache.spark.{Logging, SparkContext} import org.scalatest.{Assertions, BeforeAndAfter} -import scala.collection.mutable +import org.apache.spark.sql._ +import org.apache.spark.{Logging, SparkContext} class ColumnTableBatchInsertTest extends SnappyFunSuite with Logging @@ -457,25 +458,25 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite } } -object ColumnTableBatchInsertTest extends Assertions { +object ColumnTableBatchInsertTest extends Assertions with SparkSupport { def testSparkCachingUsingSQL(sc: SparkContext, executeSQL: String => Dataset[Row], isTableCached: String => Boolean, isCached: Dataset[Row] => Boolean): Unit = { executeSQL("cache table cachedTable1 as select id, rand() from range(1000000)") // check that table has been cached and materialized assert(isTableCached("cachedTable1")) - var rddInfos = sc.ui.get.storageListener.rddInfoList + var rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 1) assert(rddInfos.head.name.contains("Range (0, 1000000")) assert(executeSQL("select count(*) from cachedTable1").collect()(0).getLong(0) === 1000000) - rddInfos = sc.ui.get.storageListener.rddInfoList + rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 1) assert(rddInfos.head.name.contains("Range (0, 1000000")) executeSQL("uncache table cachedTable1") assert(!isTableCached("cachedTable1")) - rddInfos = sc.ui.get.storageListener.rddInfoList + rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 0) // temporary table should still exist @@ -484,10 +485,10 @@ object ColumnTableBatchInsertTest extends Assertions { executeSQL("cache lazy table cachedTable2 as select id, rand() from range(500000)") assert(isTableCached("cachedTable2")) // check that cache has not been materialized yet - rddInfos = sc.ui.get.storageListener.rddInfoList + rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 0) assert(executeSQL("select count(*) from cachedTable2").collect()(0).getLong(0) === 500000) - rddInfos = sc.ui.get.storageListener.rddInfoList + rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 1) assert(rddInfos.head.name.contains("Range (0, 500000")) @@ -495,7 +496,7 @@ object ColumnTableBatchInsertTest extends Assertions { val table = executeSQL("select * from cachedTable2") executeSQL("drop table cachedTable2") assert(!isCached(table)) - rddInfos = sc.ui.get.storageListener.rddInfoList + rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 0) executeSQL("drop table cachedTable1") diff --git a/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala b/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala index 34bbf52b0d..53db230e89 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala @@ -816,7 +816,8 @@ object CreateIndexTest extends SnappyFunSuite { def validateIndex(index: Seq[String], tables: String*)(df: DataFrame): Unit = { val (indexesMatched, indexesUnMatched) = df.queryExecution.optimizedPlan.collect { - case l@LogicalRelation(idx: IndexColumnFormatRelation, _, _) => idx + case l: LogicalRelation if l.relation.isInstanceOf[IndexColumnFormatRelation] => + l.relation.asInstanceOf[IndexColumnFormatRelation] }.partition(rel => index.exists(i => rel.table.indexOf(i.toUpperCase) > 0)) if (indexesMatched.size != index.size) { @@ -826,8 +827,10 @@ object CreateIndexTest extends SnappyFunSuite { } val tablesAppeared = df.queryExecution.optimizedPlan.collect { - case l@LogicalRelation(columnTable: ColumnFormatRelation, _, _) => columnTable.table - case l@LogicalRelation(rowTable: RowFormatRelation, _, _) => rowTable.table + case l: LogicalRelation if l.relation.isInstanceOf[ColumnFormatRelation] => + l.relation.asInstanceOf[ColumnFormatRelation].table + case l: LogicalRelation if l.relation.isInstanceOf[RowFormatRelation] => + l.relation.asInstanceOf[RowFormatRelation].table } val (tablesFound, tablesNotFound) = tables.partition(tab => diff --git a/core/src/test/scala/org/apache/spark/sql/store/SnappyCatalogSuite.scala b/core/src/test/scala/org/apache/spark/sql/store/SnappyCatalogSuite.scala index d1cc1818a5..a2afa6ed30 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/SnappyCatalogSuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/SnappyCatalogSuite.scala @@ -35,16 +35,16 @@ package org.apache.spark.sql.store import io.snappydata.SnappyFunSuite -import org.scalatest.{BeforeAndAfterAll, BeforeAndAfter} +import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll} -import org.apache.spark.sql.types.{StringType, StructField, StructType, IntegerType} -import org.apache.spark.sql.{SnappySession, AnalysisException} -import org.apache.spark.sql.catalog.{Column, Function, Table, Database} -import org.apache.spark.sql.catalyst.{ScalaReflection, FunctionIdentifier, TableIdentifier} +import org.apache.spark.sql.catalog.{Column, Database, Function, Table} import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.{Expression, ExpressionInfo} import org.apache.spark.sql.catalyst.plans.logical.Range +import org.apache.spark.sql.catalyst.{FunctionIdentifier, ScalaReflection, TableIdentifier} import org.apache.spark.sql.internal.CatalogImpl +import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType} +import org.apache.spark.sql.{AnalysisException, SnappySession, SparkSupport} import org.apache.spark.util.Utils /** @@ -53,7 +53,7 @@ import org.apache.spark.util.Utils class SnappyCatalogSuite extends SnappyFunSuite with BeforeAndAfter - with BeforeAndAfterAll { + with BeforeAndAfterAll with SparkSupport { var snappySession: SnappySession = _ @@ -105,7 +105,7 @@ class SnappyCatalogSuite extends SnappyFunSuite private def createTempFunction(name: String): Unit = { val info = new ExpressionInfo("className", name) val tempFunc = (e: Seq[Expression]) => e.head - sessionCatalog.createTempFunction(name, info, tempFunc, ignoreIfExists = false) + internals.registerFunction(snappySession, FunctionIdentifier(name, None), info, tempFunc) } private def dropFunction(name: String, db: Option[String] = None): Unit = { @@ -343,7 +343,7 @@ class SnappyCatalogSuite extends SnappyFunSuite /** * A collection of utility fields and methods for tests related to the [[ExternalCatalog]]. */ -abstract class CatalogTestUtils { +abstract class CatalogTestUtils extends SparkSupport { // Unimplemented methods val tableInputFormat: String @@ -400,7 +400,7 @@ abstract class CatalogTestUtils { def newUriForDatabase(): String = Utils.createTempDir().toURI.toString.stripSuffix("/") def newDb(name: String): CatalogDatabase = { - CatalogDatabase(name, name + " description", newUriForDatabase(), Map.empty) + internals.newCatalogDatabase(name, name + " description", newUriForDatabase(), Map.empty) } def newTable(name: String, db: String): CatalogTable = newTable(name, Some(db)) diff --git a/examples/build.gradle b/examples/build.gradle index bb1829f774..8e8b6d6aea 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -27,7 +27,7 @@ sourceSets.test.scala.srcDir 'src/test/scala' if (!(new File(rootDir, 'cluster/build.gradle').exists())) { ext { scalaBinaryVersion = '2.11' - scalatestVersion = '2.2.6' + scalatestVersion = '3.0.8' scalaVersion = scalaBinaryVersion + '.8' snappyVersion = '1.1.0' } diff --git a/spark b/spark index 8d29cc1302..09141981ea 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 8d29cc13029b19dad49d4a0b38d9d2f9f0122441 +Subproject commit 09141981eab45d69b8b8bb9021e5bed9b48ff29c diff --git a/spark-jobserver b/spark-jobserver index d6ca632810..9ee48b2162 160000 --- a/spark-jobserver +++ b/spark-jobserver @@ -1 +1 @@ -Subproject commit d6ca632810d8b032c1a6a6baa783e04ed8433bb5 +Subproject commit 9ee48b2162d12a1a565a1aedf7580b72e3181455 From 25af34cb8cfe9d99f24d0b5fe188c1e5b16abce9 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 18 Nov 2019 12:39:56 +0530 Subject: [PATCH 32/80] test build fixes --- build.gradle | 1 + .../org/apache/spark/sql/test/SnappySparkTestUtil.scala | 6 ++++-- core/build.gradle | 3 +++ spark | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index d3e8505c59..f37d2fab47 100644 --- a/build.gradle +++ b/build.gradle @@ -162,6 +162,7 @@ allprojects { typesafeConfigVersion = '1.3.3' mssqlVersion = '7.0.0.jre8' antlr2Version = '2.7.7' + kafka010Version = '0.10.0.1' pegdownVersion = '1.6.0' snappyStoreVersion = '1.6.4' diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/test/SnappySparkTestUtil.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/test/SnappySparkTestUtil.scala index 23cdea8de3..91e1486d22 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/test/SnappySparkTestUtil.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/test/SnappySparkTestUtil.scala @@ -19,7 +19,7 @@ package org.apache.spark.sql.test import java.io.File import io.snappydata.test.dunit.DistributedTestBase.InitializeRun -import org.scalatest.{Tag} +import org.scalatest.Tag import org.apache.spark.SparkFunSuite @@ -32,9 +32,11 @@ trait SnappySparkTestUtil extends SparkFunSuite { } def excluded: Seq[String] = Nil + def ignored: Seq[String] = Nil - override protected def test(testName: String, testTags: Tag*)(testFun: => Unit) = { + override protected def test(testName: String, testTags: Tag*)(testFun: => Any /* Assertion */) + (implicit pos: org.scalactic.source.Position): Unit = { if (!excluded.contains(testName)) { if (ignored.contains(testName)) { super.ignore(testName, testTags: _*)(testFun) diff --git a/core/build.gradle b/core/build.gradle index 260231b2e8..467c5ac275 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -95,6 +95,9 @@ dependencies { testCompile project(':dunit') testCompile 'org.scala-lang:scala-actors:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" + testCompile(group: 'org.apache.kafka', name: 'kafka_' + scalaBinaryVersion, version: kafka010Version) { + exclude(group: 'net.jpountz.lz4', module: 'lz4') + } testCompile project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkConnectorVersion}") diff --git a/spark b/spark index 09141981ea..e558b3cb74 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 09141981eab45d69b8b8bb9021e5bed9b48ff29c +Subproject commit e558b3cb74f88e675fca7f6ceb5adef0255d7d2c From e948fe6a87306ad1de5c4ba5eee9aa561257022d Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 26 Dec 2019 14:04:19 +0530 Subject: [PATCH 33/80] update gradle to 5.6.4 --- gradle/wrapper/gradle-wrapper.jar | Bin 55190 -> 55616 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 18 +++++++++++++++++- gradlew.bat | 18 +++++++++++++++++- spark | 2 +- store | 2 +- 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738cbd051603d91cc39de6cb000dd98fe6b02..5c2d1cf016b3885f6930543d57b744ea8c220a1a 100644 GIT binary patch delta 3320 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 Date: Thu, 30 Jan 2020 20:12:45 +0530 Subject: [PATCH 34/80] support for Spark 2.4.4 --- build.gradle | 1 + core-product/build.gradle | 2 +- core/build.gradle | 4 +- core/compatibility/spark-2.1.0/build.gradle | 2 +- .../sql/internal/SnappyCacheManager210.scala | 3 +- .../sql/execution/ui/SnappySQLListener.scala | 2 +- .../sql/internal/Spark210Internals.scala | 81 +++++++- .../org/apache/spark/sql/internal/plans.scala | 3 +- core/compatibility/spark-2.1.1/build.gradle | 2 +- .../sql/internal/Spark211Internals.scala | 23 +-- core/compatibility/spark-2.3.2/build.gradle | 5 +- .../spark/sql/catalyst/AccessUtils.scala | 3 +- .../execution/ui/SnappySQLAppListener.scala | 3 +- .../sql/internal/Spark232Internals.scala | 37 ++-- .../org/apache/spark/sql/internal/plans.scala | 3 +- core/compatibility/spark-2.4.4/build.gradle | 66 +++++++ .../sql/internal/Spark244Internals.scala | 105 ++++++++++ .../main/scala/io/snappydata/functions.scala | 5 +- .../catalog/ConnectorExternalCatalog.scala | 4 +- .../sql/catalog/SnappyExternalCatalog.scala | 6 - .../impl/SmartConnectorExternalCatalog.scala | 15 +- .../sql/catalog/impl/StoreHiveCatalog.scala | 10 + .../org/apache/spark/sql/SnappyContext.scala | 5 +- .../spark/sql/SnappyContextFunctions.scala | 20 +- .../apache/spark/sql/SnappyDDLParser.scala | 36 ++-- .../org/apache/spark/sql/SnappyParser.scala | 19 +- .../org/apache/spark/sql/SnappySession.scala | 22 ++- .../apache/spark/sql/SnappyStrategies.scala | 12 +- .../org/apache/spark/sql/SparkInternals.scala | 87 ++++++++- .../org/apache/spark/sql/SparkSupport.scala | 4 +- .../catalyst/expressions/DynamicInSet.scala | 22 +-- .../expressions/IntervalExpression.scala | 35 ++-- .../catalyst/expressions/ParamLiteral.scala | 19 +- .../DictionaryOptimizedMapAccessor.scala | 15 +- .../spark/sql/execution/EncoderScanExec.scala | 6 +- .../spark/sql/execution/ExistingPlans.scala | 23 +-- .../sql/execution/ObjectHashMapAccessor.scala | 180 +++++++++--------- .../spark/sql/execution/SHAMapAccessor.scala | 107 +++++------ .../aggregate/SnappyHashAggregateExec.scala | 50 ++--- .../execution/columnar/ColumnInsertExec.scala | 64 ++++--- .../execution/columnar/ColumnTableScan.scala | 92 ++++----- .../execution/columnar/ColumnUpdateExec.scala | 23 +-- .../org/apache/spark/sql/execution/ddl.scala | 8 +- .../sql/execution/joins/HashJoinExec.scala | 6 +- .../spark/sql/execution/row/RowExec.scala | 8 +- .../sql/execution/row/RowTableScan.scala | 14 +- release/filehdr-mod.txt | 2 +- release/filehdr.txt | 2 +- settings.gradle | 2 + store | 2 +- 50 files changed, 836 insertions(+), 434 deletions(-) create mode 100644 core/compatibility/spark-2.4.4/build.gradle create mode 100644 core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala diff --git a/build.gradle b/build.gradle index f37d2fab47..53ee85236c 100644 --- a/build.gradle +++ b/build.gradle @@ -112,6 +112,7 @@ allprojects { spark210Version = '2.1.0' spark211Version = '2.1.1' spark232Version = '2.3.2' + spark244Version = '2.4.4' sparkVersion = spark211Version sparkConnectorVersion = System.getProperty('spark.connector.version', sparkVersion) diff --git a/core-product/build.gradle b/core-product/build.gradle index 9a2f63c90f..754e8a0b0c 100644 --- a/core-product/build.gradle +++ b/core-product/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You diff --git a/core/build.gradle b/core/build.gradle index 467c5ac275..b308ce633f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -172,7 +172,9 @@ def taskGetApacheSparkDist(String ver, String distName, String prodDir) { task getApacheSparkDist { dependsOn taskGetApacheSparkDist(sparkConnectorVersion, sparkConnectorDistName, sparkConnectorProductDir) - dependsOn taskGetApacheSparkDist(sparkCurrentVersion, sparkCurrentDistName, sparkCurrentProductDir) + if (sparkConnectorVersion != sparkCurrentVersion) { + dependsOn taskGetApacheSparkDist(sparkCurrentVersion, sparkCurrentDistName, sparkCurrentProductDir) + } } test.dependsOn ':cleanJUnit' diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index 69404c437b..810153b256 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You diff --git a/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala b/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala index d720bb8d96..0f53221786 100644 --- a/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala +++ b/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.internal import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala index f16a5fb087..6f7cd3104b 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 7ac533617b..f0d2a84c4a 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.internal import scala.reflect.ClassTag @@ -35,7 +36,7 @@ import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.optimizer.Optimizer @@ -55,7 +56,7 @@ import org.apache.spark.sql.hive.{HiveConditionalRule, HiveConditionalStrategy, import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} -import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream @@ -542,6 +543,11 @@ class Spark210Internals extends SparkInternals { numDP, holdDDLTime) } + override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit = { + throw new ParseException(s"ALTER TABLE schema not supported in Spark $version") + } + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { throw new ParseException(s"ALTER TABLE STATS not supported in Spark $version") @@ -552,8 +558,15 @@ class Spark210Internals extends SparkInternals { throw new ParseException(s"ALTER FUNCTION not supported in Spark $version") } - override def columnStatToMap(stat: ColumnStat, colName: String, - dataType: DataType): Map[String, String] = stat.toMap + override def columnStatToMap(stat: Any, colName: String, + dataType: DataType): Map[String, String] = { + stat.asInstanceOf[ColumnStat].toMap + } + + override def columnStatFromMap(table: String, field: StructField, + map: Map[String, String]): Option[ColumnStat] = { + ColumnStat.fromMap(table, field, map) + } override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog = { @@ -624,6 +637,60 @@ class Spark210Internals extends SparkInternals { info.numPartitions, info.numCachedPartitions, info.storageLevel.description, info.memSize, info.diskSize, dataDistribution = None, partitions = None)) } + + override def newExprCode(code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + ExprCode(code = code, isNull = isNull, value = value) + } + + override def copyExprCode(ev: ExprCode, code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + ev.copy(code = if (code ne null) code else ev.code, + isNull = if (isNull ne null) isNull else ev.isNull, + value = if (value ne null) value else ev.value) + } + + override def resetCode(ev: ExprCode): Unit = { + ev.code = "" + } + + override def exprCodeIsNull(ev: ExprCode): String = ev.isNull + + override def exprCodeValue(ev: ExprCode): String = ev.value + + override def javaType(dt: DataType, ctx: CodegenContext): String = ctx.javaType(dt) + + override def boxedType(javaType: String, ctx: CodegenContext): String = { + ctx.boxedType(javaType) + } + + override def defaultValue(dt: DataType, ctx: CodegenContext): String = ctx.defaultValue(dt) + + override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { + ctx.isPrimitiveType(javaType) + } + + override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { + ctx.primitiveTypeName(javaType) + } + + override def getValue(input: String, dataType: DataType, ordinal: String, + ctx: CodegenContext): String = { + ctx.getValue(input, dataType, ordinal) + } + + override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = { + python.ExtractPythonUDFs :: Nil + } + + override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { + if (!pivotValues.forall(_.isInstanceOf[Literal])) { + throw new AnalysisException( + s"Literal expressions required for pivot values, found: ${pivotValues.mkString("; ")}") + } + Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) + } } class SnappyEmbeddedHiveCatalog210(override val conf: SparkConf, @@ -741,7 +808,9 @@ class SmartConnectorExternalCatalog210(override val session: SparkSession) override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) - def alterTableSchema(db: String, table: String, schema: StructType): Unit = {} + def alterTableSchema(db: String, table: String, schema: StructType): Unit = { + throw new UnsupportedOperationException("not expected to be invoked") + } override def loadDynamicPartitions(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala index 33ac1d950b..f3f9f9ae58 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.internal import io.snappydata.{HintName, QueryHint} diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index 9d39bc71b7..7c965e3138 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index a22c9c22b3..8916aaaf8c 100644 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,21 +14,20 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.internal import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog -import org.apache.hadoop.conf.Configuration +import org.apache.spark.SparkException import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.TableIdentifier -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType} +import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, Statistics} import org.apache.spark.sql.execution.CacheManager -import org.apache.spark.sql.hive.SnappyHiveExternalCatalog import org.apache.spark.sql.types.StructType import org.apache.spark.storage.StorageLevel -import org.apache.spark.{SparkConf, SparkException} /** * Implementation of [[SparkInternals]] for Spark 2.1.1. @@ -73,9 +72,9 @@ class Spark211Internals extends Spark210Internals { override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = catalogTable.schemaPreservesCase - override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, - createTime: Long): SnappyHiveExternalCatalog = { - new SnappyEmbeddedHiveCatalog211(conf, hadoopConf, createTime) + override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit = { + externalCatalog.alterTableSchema(schemaName, table, newSchema) } override def newSmartConnectorExternalCatalog( @@ -114,14 +113,6 @@ final class SnappyCacheManager211 extends CacheManager { } } -final class SnappyEmbeddedHiveCatalog211(conf: SparkConf, - hadoopConf: Configuration, createTime: Long) - extends SnappyEmbeddedHiveCatalog210(conf, hadoopConf, createTime) { - - override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = - alterTableSchemaImpl(schemaName, table, newSchema) -} - final class SmartConnectorExternalCatalog211(session: SparkSession) extends SmartConnectorExternalCatalog210(session) { diff --git a/core/compatibility/spark-2.3.2/build.gradle b/core/compatibility/spark-2.3.2/build.gradle index c9bdec9dfe..28e7d14df3 100644 --- a/core/compatibility/spark-2.3.2/build.gradle +++ b/core/compatibility/spark-2.3.2/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -19,6 +19,9 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' +// directly include the base classes to ensure everything is compiled with Spark 2.3.2 +sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/scala" +sourceSets.main.scala.srcDir "../spark-${spark211Version}/src/main/scala" sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala index 03390097e8..059c6c4358 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.catalyst import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala index 47730148eb..b110a4bbd9 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.execution.ui import org.apache.spark.SparkContext diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 76741102fe..51aa75cb22 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.internal import java.lang.reflect.Field @@ -37,7 +38,7 @@ import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, Unres import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.optimizer.Optimizer @@ -52,11 +53,11 @@ import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} -import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkOptimizer, SparkPlan, WholeStageCodegenExec} +import org.apache.spark.sql.execution._ import org.apache.spark.sql.hive._ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} -import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext @@ -67,7 +68,7 @@ import org.apache.spark.{SparkConf, SparkContext} /** * Implementation of [[SparkInternals]] for Spark 2.3.2. */ -class Spark232Internals extends SparkInternals { +class Spark232Internals extends Spark211Internals with SparkInternals { private val codegenContextClassFunctions: Field = { val f = classOf[CodegenContext].getDeclaredField("classFunctions") @@ -77,14 +78,6 @@ class Spark232Internals extends SparkInternals { override def version: String = "2.3.2" - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { - spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) - } - - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - plan.mapExpressions(f) - } - override def registerFunction(session: SparkSession, name: FunctionIdentifier, info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { session.sessionState.functionRegistry.registerFunction(name, info, function) @@ -433,9 +426,6 @@ class Spark232Internals extends SparkInternals { override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = None - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = - catalogTable.schemaPreservesCase - override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = catalogTable.ignoredProperties @@ -474,6 +464,11 @@ class Spark232Internals extends SparkInternals { externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP) } + override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit = { + externalCatalog.alterTableDataSchema(schemaName, table, newSchema) + } + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { val catalogStats = stats match { @@ -486,8 +481,10 @@ class Spark232Internals extends SparkInternals { override def alterFunction(externalCatalog: ExternalCatalog, schema: String, function: CatalogFunction): Unit = externalCatalog.alterFunction(schema, function) - override def columnStatToMap(stat: ColumnStat, colName: String, - dataType: DataType): Map[String, String] = stat.toMap(colName, dataType) + override def columnStatToMap(stat: Any, colName: String, + dataType: DataType): Map[String, String] = { + stat.asInstanceOf[ColumnStat].toMap(colName, dataType) + } override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, createTime: Long): SnappyHiveExternalCatalog = { @@ -558,7 +555,6 @@ class Spark232Internals extends SparkInternals { } } - /** * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. */ @@ -647,9 +643,6 @@ final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, override def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) - override def doAlterTableDataSchema(schemaName: String, table: String, - newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) - override def doAlterTableStats(schema: String, table: String, stats: Option[CatalogStatistics]): Unit = { withHiveExceptionHandling(super.doAlterTableStats(schema, table, stats)) diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala index c52c105aa3..d9b4c06cf8 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql.internal import io.snappydata.{HintName, QueryHint} diff --git a/core/compatibility/spark-2.4.4/build.gradle b/core/compatibility/spark-2.4.4/build.gradle new file mode 100644 index 0000000000..a6b047f157 --- /dev/null +++ b/core/compatibility/spark-2.4.4/build.gradle @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +// directly include the base classes to ensure everything is compiled with Spark 2.4.4 +sourceSets.main.scala.srcDir "../spark-${spark232Version}/src/main/scala" +sourceSets.main.java.srcDirs = [] + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark244Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark244Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark244Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark244Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark244Version}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly (project(coreProjectName)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + + exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) + } +} + +archivesBaseName = "snappydata-core-compat-spark${spark244Version}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${spark244Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala new file mode 100644 index 0000000000..ee5c22b8d7 --- /dev/null +++ b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql.{SparkInternals, SparkSession} +import org.apache.spark.sql.catalyst.catalog.CatalogColumnStat +import org.apache.spark.sql.catalyst.expressions.{Expression, Literal, NamedExpression} +import org.apache.spark.sql.catalyst.expressions.codegen._ +import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, Pivot} +import org.apache.spark.sql.catalyst.rules.Rule +import org.apache.spark.sql.execution.SparkPlan +import org.apache.spark.sql.types.{DataType, StructField} + +/** + * Implementation of [[SparkInternals]] for Spark 2.4.4. + */ +class Spark244Internals extends Spark232Internals { + + override def columnStatToMap(stat: Any, colName: String, + dataType: DataType): Map[String, String] = { + stat.asInstanceOf[CatalogColumnStat].toMap(colName) + } + + override def columnStatFromMap(table: String, field: StructField, + map: Map[String, String]): Option[ColumnStat] = { + CatalogColumnStat.fromMap(table, field.name, map).map(_.toPlanStat(field.name, field.dataType)) + } + + private def exprValue(v: String, javaClass: Class[_]): ExprValue = v match { + case "false" => FalseLiteral + case "true" => TrueLiteral + case _ => VariableValue(v, javaClass) + } + + override def newExprCode(code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + ExprCode(CodeBlock(code :: Nil, EmptyBlock :: Nil), + isNull = exprValue(isNull, java.lang.Boolean.TYPE), + value = exprValue(value, javaClass)) + } + + override def copyExprCode(ev: ExprCode, code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + val codeBlock = + if (code eq null) ev.code + else if (code.isEmpty) EmptyBlock + else CodeBlock(code :: Nil, EmptyBlock :: Nil) + ev.copy(codeBlock, + if (isNull ne null) VariableValue(isNull, java.lang.Boolean.TYPE) else ev.isNull, + if (value ne null) VariableValue(value, javaClass) else ev.value) + } + + override def resetCode(ev: ExprCode): Unit = { + ev.code = EmptyBlock + } + + override def exprCodeIsNull(ev: ExprCode): String = ev.isNull.code + + override def exprCodeValue(ev: ExprCode): String = ev.value.code + + override def javaType(dt: DataType, ctx: CodegenContext): String = CodeGenerator.javaType(dt) + + override def boxedType(javaType: String, ctx: CodegenContext): String = { + CodeGenerator.boxedType(javaType) + } + + override def defaultValue(dt: DataType, ctx: CodegenContext): String = { + CodeGenerator.defaultValue(dt) + } + + override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { + CodeGenerator.isPrimitiveType(javaType) + } + + override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { + CodeGenerator.primitiveTypeName(javaType) + } + + override def getValue(input: String, dataType: DataType, ordinal: String, + ctx: CodegenContext): String = { + CodeGenerator.getValue(input, dataType, ordinal) + } + + override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = Nil + + override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { + Pivot(if (groupByExprs.isEmpty) None else Some(groupByExprs), pivotColumn, pivotValues, + aggregates, child) + } +} diff --git a/core/src/main/scala/io/snappydata/functions.scala b/core/src/main/scala/io/snappydata/functions.scala index 46e4679aa7..f70653eb3a 100644 --- a/core/src/main/scala/io/snappydata/functions.scala +++ b/core/src/main/scala/io/snappydata/functions.scala @@ -21,10 +21,10 @@ import com.pivotal.gemfirexd.internal.engine.Misc import io.snappydata.sql.catalog.SnappyExternalCatalog import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} -import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow} import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{CurrentDatabase, Expression, ExpressionDescription, ExpressionInfo, LeafExpression, Nondeterministic} +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.policy.{CurrentUser, LdapGroupsOfCurrentUser} @@ -144,6 +144,7 @@ case class DSID() extends LeafExpression with Nondeterministic with SparkSupport val dsidVar = internals.addClassField(ctx, "UTF8String", "dsid", varName => s"$varName = UTF8String.fromString(" + s"io.snappydata.SnappyDataFunctions.getDSID($connPropsRef));") - ev.copy(code = "", isNull = "false", value = dsidVar) + internals.copyExprCode(ev, code = "", isNull = "false", value = dsidVar, + javaClass = classOf[UTF8String]) } } diff --git a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala index 11b90f50e1..8abbc2bcb6 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala @@ -115,7 +115,7 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { val f = schema(i) val colStatsMap = catalogStats.colStats.get(i) if (colStatsMap.isEmpty) None - else ColumnStat.fromMap(fullTableName, f, colStatsMap.asScala.toMap) match { + else internals.columnStatFromMap(fullTableName, f, colStatsMap.asScala.toMap) match { case None => None case Some(s) => Some(f.name -> s) } @@ -235,7 +235,7 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { } private[snappydata] def convertFromCatalogStatistics(schema: StructType, sizeInBytes: BigInt, - rowCount: Option[BigInt], stats: Map[String, ColumnStat]): CatalogStats = { + rowCount: Option[BigInt], stats: Map[String, Any]): CatalogStats = { val colStats = schema.map { f => stats.get(f.name) match { case None => Collections.emptyMap[String, String]() diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 9f1c7930c9..91144e7b2d 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -202,12 +202,6 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } - protected def alterTableSchemaImpl(schemaName: String, table: String, - newSchema: StructType): Unit = { - val catalogTable = getTable(schemaName, table) - alterTableImpl(catalogTable.copy(schema = newSchema)) - } - protected def alterTableImpl(table: CatalogTable): Unit /** diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala index 23e484d62e..dac909f101 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala @@ -29,9 +29,9 @@ import org.apache.spark.sql.catalyst.analysis.{NoSuchPartitionException, NoSuchP import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog.{CatalogDatabase, CatalogFunction, CatalogTable, CatalogTablePartition} import org.apache.spark.sql.catalyst.expressions.{And, AttributeReference, BoundReference, Expression} -import org.apache.spark.sql.catalyst.plans.logical.ColumnStat import org.apache.spark.sql.collection.{SmartExecutorBucketPartition, Utils} import org.apache.spark.sql.execution.RefreshMetadata +import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{SnappyContext, TableNotFoundException, ThinClientConnectorMode} /** @@ -162,8 +162,19 @@ trait SmartConnectorExternalCatalog extends SnappyExternalCatalog with Connector invalidateCaches(Nil) } + protected def alterTableSchemaImpl(schemaName: String, table: String, + newSchema: StructType): Unit = { + val request = new CatalogMetadataDetails() + request.setNames((schemaName :: table :: Nil).asJava).setNewSchema(newSchema.json) + withExceptionHandling(connectorHelper.updateCatalogMetadata( + snappydataConstants.CATALOG_ALTER_TABLE_SCHEMA, request)) + + // version stored in RelationInfo will be out-of-date now for all tables so clear everything + invalidateCaches(Nil) + } + protected def alterTableStatsImpl(schema: String, table: String, - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { + stats: Option[(BigInt, Option[BigInt], Map[String, Any])]): Unit = { val request = new CatalogMetadataDetails() request.setNames((schema :: table :: Nil).asJava) stats match { diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala index 318ccb8688..3e4cf92ebf 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/StoreHiveCatalog.scala @@ -667,6 +667,16 @@ class StoreHiveCatalog extends ExternalCatalog with Logging with SparkSupport { assert(request.isSetCatalogTable, "ALTER TABLE: expected catalogTable to be set") externalCatalog.alterTable(getCatalogTableForWrite(request, user)) + case snappydataConstants.CATALOG_ALTER_TABLE_SCHEMA => + assert(request.getNamesSize == 2, + "ALTER TABLE schema: unexpected names = " + request.getNames) + assert(request.isSetNewSchema, "ALTER TABLE schema: expected newSchema to be set") + val schemaName = request.getNames.get(0) + val table = request.getNames.get(1) + checkSchemaPermission(schemaName, table, user) + internals.alterTableSchema(externalCatalog, schemaName, table, + ExternalStoreUtils.getTableSchema(request.getNewSchema)) + case snappydataConstants.CATALOG_ALTER_TABLE_STATS => assert(request.isSetCatalogStats, "ALTER TABLE STATS: expected catalogStats to be set") val schema = request.getNames.get(0) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 8219f0b115..006f7f69d6 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -54,7 +54,7 @@ import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap import org.apache.spark.sql.execution.joins.HashedObjectCache import org.apache.spark.sql.execution.{ConnectionPool, DeployCommand, DeployJarCommand, RefreshMetadata} -import org.apache.spark.sql.hive.{HiveExternalCatalog, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.hive.{HiveSessionCatalog, SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.{ContextJarUtils, SharedState, SnappySharedState, StaticSQLConf} import org.apache.spark.sql.store.CodeGeneration import org.apache.spark.sql.streaming._ @@ -1179,8 +1179,7 @@ object SnappyContext extends Logging { if (this.hiveSession ne null) this.hiveSession.newSession() else { val session = SparkSession.builder().enableHiveSupport().getOrCreate() - if (session.sharedState.externalCatalog.isInstanceOf[HiveExternalCatalog] && - session.sessionState.getClass.getName.contains("HiveSessionState")) { + if (session.sessionState.catalog.isInstanceOf[HiveSessionCatalog]) { this.hiveSession = session // this session can be shared via Builder.getOrCreate() so create a new one session.newSession() diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 487136ec2e..7c75bd2047 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -29,7 +29,7 @@ import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} import org.apache.spark.sql.execution.exchange.{EnsureRequirements, ReuseExchange} -import org.apache.spark.sql.execution.{CollapseCodegenStages, PlanLater, QueryExecution, SparkPlan, TopK, python} +import org.apache.spark.sql.execution.{CollapseCodegenStages, PlanLater, QueryExecution, SparkPlan, TopK} import org.apache.spark.sql.hive.{OptimizeSortAndFilePlans, SnappyAnalyzer} import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect} import org.apache.spark.sql.sources.BaseRelation @@ -147,15 +147,15 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def getPostHocResolutionRules: List[Rule[LogicalPlan]] = Nil protected def createQueryPreparations( - topLevel: Boolean): Seq[Rule[SparkPlan]] = Seq[Rule[SparkPlan]]( - python.ExtractPythonUDFs, - TokenizeSubqueries(session), - EnsureRequirements(session.sessionState.conf), - OptimizeSortAndFilePlans(session.sessionState.snappyConf), - CollapseCollocatedPlans(session), - CollapseCodegenStages(session.sessionState.conf), - InsertCachedPlanFallback(session, topLevel), - ReuseExchange(session.sessionState.conf)) + topLevel: Boolean): Seq[Rule[SparkPlan]] = internals.optionalQueryPreparations(session) ++ + Seq[Rule[SparkPlan]]( + TokenizeSubqueries(session), + EnsureRequirements(session.sessionState.conf), + OptimizeSortAndFilePlans(session.sessionState.snappyConf), + CollapseCollocatedPlans(session), + CollapseCodegenStages(session.sessionState.conf), + InsertCachedPlanFallback(session, topLevel), + ReuseExchange(session.sessionState.conf)) def queryPreparations(topLevel: Boolean): Seq[Rule[SparkPlan]] = if (topLevel) queryPreparationsTopLevel else queryPreparationsNode diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index 226ee70c87..ebb374abc7 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -172,7 +172,7 @@ abstract class SnappyDDLParser(session: SnappySession) final def NULLS: Rule0 = rule { keyword(Consts.NULLS) } final def OF: Rule0 = rule { keyword(Consts.OF) } final def ONLY: Rule0 = rule { keyword(Consts.ONLY) } - final def OPTIONS: Rule0 = rule { keyword(Consts.OPTIONS) } + final def OPTIONS: Rule0 = rule { keyword(Consts.OPTIONS) | keyword(Consts.TBLPROPERTIES) } final def OUT: Rule0 = rule { keyword(Consts.OUT) } final def OVERWRITE: Rule0 = rule { keyword(Consts.OVERWRITE) } final def PACKAGE: Rule0 = rule { keyword(Consts.PACKAGE) } @@ -268,7 +268,7 @@ abstract class SnappyDDLParser(session: SnappySession) final type ColumnDirectionMap = Seq[(String, Option[SortDirection])] final type TableEnd = (Option[String], Option[Map[String, String]], - Array[String], Option[BucketSpec], Option[LogicalPlan]) + Option[String], Array[String], Option[BucketSpec], Option[String], Option[LogicalPlan]) protected final def ifNotExists: Rule1[Boolean] = rule { (IF ~ NOT ~ EXISTS ~ push(true)).? ~> ((o: Any) => o != None) @@ -285,10 +285,10 @@ abstract class SnappyDDLParser(session: SnappySession) protected def createHiveTable: Rule1[LogicalPlan] = rule { test(session.enableHiveSupport) ~ capture(CREATE ~ TABLE ~ ifNotExists ~ - tableIdentifier ~ tableSchema.?) ~ (COMMENT ~ stringLiteral).? ~ + tableIdentifier ~ tableSchema.? ~ (COMMENT ~ stringLiteral).?) ~ capture(USING ~ ignoreCase("hive") ~ ws | PARTITIONED ~ BY | CLUSTERED ~ BY | SKEWED ~ BY | ROW ~ FORMAT | STORED | LOCATION | TBLPROPERTIES) ~ capture(ANY.*) ~> - ((_: Boolean, _: TableIdentifier, _: Any, head: String, _: Any, k: String, tail: String) => + ((_: Boolean, _: TableIdentifier, _: Any, _: Any, head: String, k: String, tail: String) => if (Utils.toLowerCase(k).startsWith("using")) sparkParser.parsePlan(head + tail) else sparkParser.parsePlan(head + k + tail)) } @@ -336,7 +336,8 @@ abstract class SnappyDDLParser(session: SnappySession) // the save mode will be ignore. val mode = if (allowExisting) SaveMode.Ignore else SaveMode.ErrorIfExists CreateTableUsingCommand(tableIdent, None, userSpecifiedSchema, schemaDDL, - provider, mode, options, remaining._3, remaining._4, remaining._5, external != None) + provider, mode, options, remaining._4, remaining._5, remaining._7, external != None, + comment = remaining._3, location = remaining._6) } } } @@ -438,15 +439,22 @@ abstract class SnappyDDLParser(session: SnappySession) } protected final def ddlEnd: Rule1[TableEnd] = rule { - ws ~ (USING ~ qualifiedName).? ~ (OPTIONS ~ options).? ~ - (PARTITIONED ~ BY ~ identifierList).? ~ - bucketSpec.? ~ (AS ~ query).? ~ ws ~ &((';' ~ ws).* ~ EOI) ~> - ((provider: Any, options: Any, parts: Any, buckets: Any, asQuery: Any) => { - val partitions = parts match { - case None => Utils.EMPTY_STRING_ARRAY - case Some(p) => p.asInstanceOf[Seq[String]].toArray + ws ~ (USING ~ qualifiedName).? ~ (OPTIONS ~ options | + COMMENT ~ stringLiteral ~> ((s: String) => Some(s)) | + PARTITIONED ~ BY ~ identifierList | bucketSpec | LOCATION ~ stringLiteral).* ~ + (AS ~ query).? ~ ws ~ &((';' ~ ws).* ~ EOI) ~> + ((provider: Any, optionals: Any, asQuery: Any) => { + val tableOpts = new Array[Any](5) // options, comment, partitions, buckets, location + optionals.asInstanceOf[Seq[Any]].foreach { + case opts: Map[_, _] => tableOpts(0) = opts + case comment: Some[_] => tableOpts(1) = comment.get + case parts: Seq[_] => tableOpts(2) = parts + case buckets: BucketSpec => tableOpts(3) = buckets + case location: String => tableOpts(4) = location + case v => throw new ParseException(s"Unknown table option: $v") } - (provider, options, partitions, buckets, asQuery).asInstanceOf[TableEnd] + (provider, tableOpts(0), tableOpts(1), tableOpts(2), tableOpts(3), tableOpts(4), + asQuery).asInstanceOf[TableEnd] }) } @@ -493,7 +501,7 @@ abstract class SnappyDDLParser(session: SnappySession) CREATE ~ (OR ~ REPLACE ~ push(true)).? ~ (globalOrTemporary.? ~ VIEW | globalOrTemporary ~ TABLE) ~ ifNotExists ~ tableIdentifier ~ ('(' ~ ws ~ (identifierWithComment + commaSep) ~ ')' ~ ws).? ~ - (COMMENT ~ stringLiteral).? ~ (TBLPROPERTIES ~ options).? ~ + (COMMENT ~ stringLiteral).? ~ (OPTIONS ~ options).? ~ AS ~ capture(query) ~> { (replace: Any, gt: Any, allowExisting: Boolean, table: TableIdentifier, cols: Any, comment: Any, opts: Any, plan: LogicalPlan, queryStr: String) => diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index c73f69c347..02ca03cbcf 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -59,6 +59,9 @@ class SnappyParser(session: SnappySession) // type info for parameters of a prepared statement protected final var _preparedParamsTypesInfo: Option[Array[Int]] = None + protected final def legacySetOpsPrecedence: Boolean = session.sessionState.conf.getConfString( + "spark.sql.legacy.setopsPrecedence.enabled", "false").toBoolean + override final def input: ParserInput = _input final def questionMarkCounter: Int = _questionMarkCounter @@ -254,11 +257,13 @@ class SnappyParser(session: SnappySession) } protected final def newTokenizedLiteral(v: Any, dataType: DataType): Expression = { - if (tokenize) addTokenizedLiteral(v, dataType) else Literal(v, dataType) + if (tokenize) { + if (canTokenize) addTokenizedLiteral(v, dataType) else new TokenLiteral(v, dataType) + } else Literal(v, dataType) } protected final def newLiteral(v: Any, dataType: DataType): Expression = { - if (tokenize) new TokenLiteral(v, dataType).markFoldable(true) else Literal(v, dataType) + if (tokenize) new TokenLiteral(v, dataType) else Literal(v, dataType) } protected final def intervalType: Rule1[DataType] = rule { @@ -1179,16 +1184,16 @@ class SnappyParser(session: SnappySession) } protected final def pivot: Rule1[LogicalPlan => LogicalPlan] = rule { - PIVOT ~ '(' ~ ws ~ namedExpressionSeq ~ FOR ~ (identifierList | identifier) ~ IN ~ - '(' ~ ws ~ push(tokenize) ~ TOKENIZE_END ~ (literal + commaSep) ~ ')' ~ ws ~ ')' ~ ws ~> - ((aggregates: Seq[Expression], ids: Any, tokenized: Boolean, + PIVOT ~ '(' ~ ws ~ namedExpressionSeq ~ FOR ~ (identifierList | identifier) ~ IN ~ '(' ~ ws ~ + push(canTokenize) ~ DISABLE_TOKENIZE ~ namedExpressionSeq ~ ')' ~ ws ~ ')' ~ ws ~> + ((aggregates: Seq[Expression], ids: Any, hasTokenized: Boolean, values: Seq[Expression]) => (child: LogicalPlan) => { - tokenize = tokenized + canTokenize = hasTokenized val pivotColumn = ids match { case id: String => UnresolvedAttribute.quoted(id) case _ => CreateStruct(ids.asInstanceOf[Seq[String]].map(UnresolvedAttribute.quoted)) } - Pivot(Nil, pivotColumn, values.map(_.asInstanceOf[Literal]), aggregates, child) + internals.newPivot(Nil, pivotColumn, values, aggregates, child) }) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 678fe7e80a..49a7f17c1c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -1316,6 +1316,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo allowExisting) } + // scalastyle:off /** * Create a table with given name, provider, optional schema DDL string, optional schema. * and other options. @@ -1330,7 +1331,11 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo isExternal: Boolean, partitionColumns: Array[String] = Utils.EMPTY_STRING_ARRAY, bucketSpec: Option[BucketSpec] = None, - query: Option[LogicalPlan] = None): DataFrame = { + query: Option[LogicalPlan] = None, + comment: Option[String] = None, + location: Option[String] = None): DataFrame = { + // scalastyle:on + val providerIsBuiltIn = SnappyContext.isBuiltInProvider(provider) if (providerIsBuiltIn) { if (isExternal) { @@ -1386,7 +1391,17 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } } // if there is no path option for external DataSources, then mark as MANAGED except for JDBC - val storage = DataSource.buildStorageFormatFromOptions(fullOptions) + var storage = DataSource.buildStorageFormatFromOptions(fullOptions) + // check for both LOCATION and 'path' in OPTIONS + if (location.isDefined) { + if (storage.locationUri.isDefined) { + throw new ParseException( + "LOCATION and 'path' in OPTIONS are both used to indicate the custom table path, " + + "you can only specify one of them.") + } else { + storage = storage.copy(locationUri = location) + } + } val tableType = if (!providerIsBuiltIn && storage.locationUri.isEmpty && !Utils.toLowerCase(provider).contains("jdbc")) { CatalogTableType.MANAGED @@ -1398,7 +1413,8 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo schema = schema, provider = Some(provider), partitionColumnNames = partitionColumns.toSeq, - bucketSpec = bucketSpec) + bucketSpec = bucketSpec, + comment = comment) val plan = CreateTable(tableDesc, mode, query.map(MarkerForCreateTableAsSelect)) sessionState.executePlan(plan).toRdd val df = table(resolvedName) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index e23977db2c..1e6190c7e5 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -453,10 +453,14 @@ class SnappyAggregationStrategy(planner: SparkPlanner) def applyAggregation(plan: LogicalPlan, isRootPlan: Boolean): Seq[SparkPlan] = plan match { - case PhysicalAggregation(groupingExpressions, aggregateExpressions, - resultExpressions, child) if maxAggregateInputSize == 0 || - internals.getStatistics(child).sizeInBytes <= maxAggregateInputSize => - + case PhysicalAggregation(groupingExpressions, aggExpressions, + resultExpressions, child) if (maxAggregateInputSize == 0 || + internals.getStatistics(child).sizeInBytes <= maxAggregateInputSize) && + aggExpressions.forall(expr => expr.isInstanceOf[AggregateExpression]) => + + // noinspection ScalaRedundantCast + val aggregateExpressions = aggExpressions.map(expr => + expr.asInstanceOf[AggregateExpression]) val (functionsWithDistinct, functionsWithoutDistinct) = aggregateExpressions.partition(_.isDistinct) if (functionsWithDistinct.map(_.aggregateFunction.children) diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 682a334913..84011228c7 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -26,11 +26,12 @@ import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTab import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodegenContext, ExprCode, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame} import org.apache.spark.sql.catalyst.json.JSONOptions -import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, InsertIntoTable, LogicalPlan, RepartitionByExpression, Sample, Statistics, SubqueryAlias} +import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} import org.apache.spark.sql.execution.columnar.ColumnTableScan import org.apache.spark.sql.execution.command.RunnableCommand @@ -42,7 +43,7 @@ import org.apache.spark.sql.hive.{SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.streaming.LogicalDStreamPlan -import org.apache.spark.sql.types.{DataType, Metadata, StructType} +import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream @@ -492,6 +493,10 @@ trait SparkInternals extends Logging { table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit + /** Alter table schema in the ExternalCatalog if possible else throw an exception */ + def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit + /** Alter table statistics in the ExternalCatalog if possible else throw an exception */ def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit @@ -500,8 +505,12 @@ trait SparkInternals extends Logging { def alterFunction(externalCatalog: ExternalCatalog, schema: String, function: CatalogFunction): Unit - /** Convert a ColumnStat to a map. */ - def columnStatToMap(stat: ColumnStat, colName: String, dataType: DataType): Map[String, String] + /** Convert a ColumnStat (or CatalogColumnStat for Spark >= 2.4) to a map. */ + def columnStatToMap(stat: Any, colName: String, dataType: DataType): Map[String, String] + + /** Convert a map created by [[columnStatToMap]] to ColumnStat. */ + def columnStatFromMap(table: String, field: StructField, + map: Map[String, String]): Option[ColumnStat] /** * Create a new instance of SnappyHiveExternalCatalog. The method overrides in @@ -592,6 +601,74 @@ trait SparkInternals extends Logging { * Get the global list of cached RDDs (as list of [[RDDStorageInfo]]). */ def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] + + /** + * Create a new ExprCode with given arguments. + */ + def newExprCode(code: String, isNull: String, + value: String, javaClass: Class[_] = classOf[Object]): ExprCode + + /** + * Make a copy of ExprCode with given new arguments. + */ + def copyExprCode(ev: ExprCode, code: String = null, isNull: String = null, + value: String = null, javaClass: Class[_] = classOf[Object]): ExprCode + + /** + * Reset the code field of [[ExprCode]] to empty code block. + */ + def resetCode(ev: ExprCode): Unit + + /** + * Get the string for isNull field of [[ExprCode]]. + */ + def exprCodeIsNull(ev: ExprCode): String + + /** + * Get the string for value field of [[ExprCode]]. + */ + def exprCodeValue(ev: ExprCode): String + + /** + * Get the string for java type for given [[DataType]]. + */ + def javaType(dt: DataType, ctx: CodegenContext): String + + /** + * Get the java type of boxed type for given type. + */ + def boxedType(javaType: String, ctx: CodegenContext): String + + /** + * Get the string form of default value for given [[DataType]]. + */ + def defaultValue(dt: DataType, ctx: CodegenContext): String + + /** + * Returns true if the Java type has a special accessor and setter in [[InternalRow]]. + */ + def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean + + /** + * Returns the name used in accessor and setter for a Java primitive type. + */ + def primitiveTypeName(javaType: String, ctx: CodegenContext): String + + /** + * Returns the specialized code to access a value from `inputRow` at `ordinal`. + */ + def getValue(input: String, dataType: DataType, ordinal: String, ctx: CodegenContext): String + + /** + * List of any optional plans to be executed in the QueryExecution.preparations phase. + */ + def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] + + /** + * Create a new instance of [[Pivot]] plan. + */ + def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot } /** diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index 66b713db2c..5c7a2ecaa5 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 SnappyData, Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You @@ -14,6 +14,7 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ + package org.apache.spark.sql import scala.util.control.NonFatal @@ -89,6 +90,7 @@ object SparkSupport extends Logging { case "2.1.0" => s"$INTERNAL_PACKAGE.Spark210Internals" case "2.1.1" => s"$INTERNAL_PACKAGE.Spark211Internals" case "2.3.2" => s"$INTERNAL_PACKAGE.Spark232Internals" + case "2.4.4" => s"$INTERNAL_PACKAGE.Spark244Internals" case v => throw new SparkException(s"Unsupported Spark version $v") } val implClass: Class[_] = Utils.classForName(implClassName) diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala index ce7b23335f..5b906c5327 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala @@ -97,18 +97,18 @@ case class DynamicInSet(child: Expression, hset: IndexedSeq[Expression]) |} """.stripMargin) - ev.copy(code = + internals.copyExprCode(ev, code = s""" - ${childGen.code} - boolean ${ev.isNull} = ${childGen.isNull}; - boolean ${ev.value} = false; - if (!${ev.isNull}) { - ${ev.value} = $hsetTerm.containsKey(${childGen.value}); - if (!${ev.value} && $hasNullTerm) { - ${ev.isNull} = true; - } - } - """) + ${childGen.code} + boolean ${ev.isNull} = ${childGen.isNull}; + boolean ${ev.value} = false; + if (!${ev.isNull}) { + ${ev.value} = $hsetTerm.containsKey(${childGen.value}); + if (!${ev.value} && $hasNullTerm) { + ${ev.isNull} = true; + } + } + """) } override def sql: String = { diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala index 47c1eb2036..72daa24d20 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/IntervalExpression.scala @@ -17,6 +17,7 @@ package org.apache.spark.sql.catalyst.expressions +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.analysis.TypeCheckResult import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} @@ -24,7 +25,7 @@ import org.apache.spark.sql.types.{AbstractDataType, CalendarIntervalType, DataT import org.apache.spark.unsafe.types.CalendarInterval case class IntervalExpression(children: Seq[Expression], units: Seq[Long]) - extends Expression with ImplicitCastInputTypes { + extends Expression with ImplicitCastInputTypes with SparkSupport { override def inputTypes: Seq[AbstractDataType] = if (children.length == 1) LongType :: Nil else Seq.fill(children.length)(LongType) @@ -92,20 +93,22 @@ case class IntervalExpression(children: Seq[Expression], units: Seq[Long]) val micros = ctx.freshName("micros") val intervalClass = classOf[CalendarInterval].getName val nullable = this.nullable + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) if (children.length == 1) { val childGen = children.head.genCode(ctx) - val childIsNull = if (nullable) childGen.isNull else "false" + val childIsNull = if (nullable) internals.exprCodeIsNull(childGen) else "false" val code = s""" - |${childGen.code} - |$intervalClass ${ev.value}; - |${doGenCodeSingle(childGen.value, childIsNull, ev.value, + |${childGen.code.toString} + |$intervalClass $evValue; + |${doGenCodeSingle(internals.exprCodeValue(childGen), childIsNull, evValue, units.head.toString, months, micros, intervalClass)} """.stripMargin if (childIsNull == "false") { - ev.copy(code = code, isNull = "false") + internals.copyExprCode(ev, code = code, isNull = "false") } else { - ev.copy(code = code + s"boolean ${ev.isNull} = ${ev.value} == null;\n") + internals.copyExprCode(ev, code = code + s"boolean $evIsNull = $evValue == null;\n") } } else { val index = ctx.freshName("i") @@ -117,31 +120,33 @@ case class IntervalExpression(children: Seq[Expression], units: Seq[Long]) val size = childGens.length val initArr = childGens.indices.map { i => s""" - |$childValueArr[$i] = ${childGens(i).value}; - |${if (nullable) s"$childIsNullArr[$i] = ${childGens(i).isNull};" else ""} + |$childValueArr[$i] = ${internals.exprCodeValue(childGens(i))}; + |${if (nullable) s"$childIsNullArr[$i] = ${internals.exprCodeIsNull(childGens(i))};" + else ""} """.stripMargin }.mkString("") val childIsNull = if (nullable) s"$childIsNullArr[$index]" else "false" val code = s""" - |${childGens.map(_.code).mkString("\n")} + |${childGens.map(_.code.toString).mkString("\n")} |long[] $childValueArr = new long[$size]; |${if (nullable) s"boolean[] $childIsNullArr = new boolean[$size];" else ""} - |$intervalClass ${ev.value} = null; + |$intervalClass $evValue = null; |$initArr |for (int $index = 0; $index < $size; $index++) { | $intervalClass $result; | ${doGenCodeSingle(s"$childValueArr[$index]", childIsNull, result, s"$unitsArr[$index]", months, micros, intervalClass)} | if ($result == null) { - | ${ev.value} = null; + | $evValue = null; | break; | } - | ${ev.value} = ${ev.value} != null ? ${ev.value}.add($result) : $result; + | $evValue = $evValue != null ? $evValue.add($result) : $result; |} """.stripMargin - if (nullable) ev.copy(code = code + s"boolean ${ev.isNull} = ${ev.value} == null;\n") - else ev.copy(code = code, isNull = "false") + if (nullable) { + internals.copyExprCode(ev, code = code + s"boolean $evIsNull = $evValue == null;\n") + } else internals.copyExprCode(ev, code = code, isNull = "false") } } diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala index 2bb37d682b..3b259ffaae 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala @@ -87,10 +87,10 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { // temporary variable for storing value() result for cases where it can be // potentially expensive (e.g. for DynamicFoldableExpression) val valueResult = ctx.freshName("valueResult") - val isNullLocal = ev.isNull - val valueLocal = ev.value + val isNullLocal = internals.exprCodeIsNull(ev) + val valueLocal = internals.exprCodeValue(ev) val dataType = Utils.getSQLDataType(this.dataType) - val javaType = ctx.javaType(dataType) + val javaType = internals.javaType(dataType, ctx) // get values from map val isNull = termValues.isNull val valueTerm = termValues.valueTerm @@ -103,10 +103,11 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { if (!addMutableState) { // use the already added fields - return ev.copy(initCode, isNullLocal, valueLocal) + return internals.copyExprCode(ev, initCode, isNullLocal, valueLocal) } val valueRef = literalValueRef - val box = ctx.boxedType(javaType) + val box = internals.boxedType(javaType, ctx) + val defValue = internals.defaultValue(dataType, ctx) val unbox = dataType match { case BooleanType => @@ -142,7 +143,7 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { s""" |Object $valueResult = $valueRef.value(); |if (($isNull = ($valueResult == null))) { - | $valueTerm = ${ctx.defaultValue(dataType)}; + | $valueTerm = $defValue; |} else { | $valueTerm = ($box)$valueResult; | if (com.gemstone.gemfire.internal.cache.GemFireCacheImpl.hasNewOffHeap() && @@ -166,10 +167,10 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { s""" |Object $valueResult = $valueRef.value(); |$isNull = $valueResult == null; - |$valueTerm = $isNull ? ${ctx.defaultValue(dataType)} : (($box)$valueResult)$unbox; + |$valueTerm = $isNull ? $defValue : (($box)$valueResult)$unbox; """.stripMargin, forceInline = true, useFreshName = false) } - ev.copy(initCode, isNullLocal, valueLocal) + internals.copyExprCode(ev, initCode, isNullLocal, valueLocal) } } @@ -207,6 +208,8 @@ trait TokenizedLiteral extends LeafExpression with DynamicReplacableConstant { final class TokenLiteral(_value: Any, _dataType: DataType) extends Literal(_value, _dataType) with TokenizedLiteral with KryoSerializable { + _foldable = true + override def valueString: String = toString() override def jsonFields: List[JField] = super.jsonFields diff --git a/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala index 9c4768f761..4904ba0f55 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala @@ -18,11 +18,12 @@ package org.apache.spark.sql.execution import io.snappydata.collection.ObjectHashSet -import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.{SnappySession, SparkSupport} import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.execution.columnar.encoding.ColumnEncoding import org.apache.spark.sql.types.StringType +import org.apache.spark.unsafe.types.UTF8String /** * Makes use of dictionary indexes for strings if any. @@ -67,7 +68,7 @@ import org.apache.spark.sql.types.StringType * the effort (and could possibly even reduce overall performance in some * cases), hence this optimization is currently only for string type. */ -object DictionaryOptimizedMapAccessor { +object DictionaryOptimizedMapAccessor extends SparkSupport { def canHaveSingleKeyCase(keyExpressions: Seq[Expression]): Boolean = { keyExpressions.length == 1 && @@ -88,8 +89,10 @@ object DictionaryOptimizedMapAccessor { accessor: ObjectHashMapAccessor): String = { val key = ctx.freshName("dictionaryKey") val keyIndex = keyDictVar.dictionaryIndex.value - val keyNull = keyVar.isNull != "false" - val keyEv = ExprCode("", if (keyNull) s"($key == null)" else "false", key) + val keyNull = internals.exprCodeIsNull(keyVar) != "false" + val keyValue = internals.exprCodeValue(keyVar) + val keyEv = internals.copyExprCode(keyVar, code = "", + isNull = if (keyNull) s"($key == null)" else "false", key, classOf[UTF8String]) val className = accessor.getClassName // for the case when there is no entry in map (hash join), insert a token @@ -115,7 +118,7 @@ object DictionaryOptimizedMapAccessor { val hashExprCode = if (keyNull) s"$key != null ? $key.hashCode() : -1" else s"$key.hashCode()" // if hash has already been calculated then use it - val hashExpr = accessor.session.getHashVar(ctx, keyVar.value :: Nil) match { + val hashExpr = accessor.session.getHashVar(ctx, keyValue :: Nil) match { case Some(h) => hash = h s"if ($h == 0) $h = $hashExprCode;" @@ -123,7 +126,7 @@ object DictionaryOptimizedMapAccessor { } // if keyVar code has not been consumed, then use dictionary - val keyAssign = if (keyVar.code.isEmpty) s"final UTF8String $key = ${keyVar.value};" + val keyAssign = if (keyVar.code.isEmpty) s"final UTF8String $key = $keyValue;" else { val dictionaryVar = keyDictVar.dictionary.value val stringAssignCode = ColumnEncoding.stringFromDictionaryCode( diff --git a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala index 685d69277a..08a7efee9e 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala @@ -50,7 +50,7 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], val javaClass = encoder.clsTag.runtimeClass val javaTypeName = - if (javaClass.isPrimitive) ctx.boxedType(javaClass.getTypeName) + if (javaClass.isPrimitive) internals.boxedType(javaClass.getTypeName, ctx) else javaClass.getTypeName val objVar = ctx.freshName("object") @@ -70,7 +70,7 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], | throw new RuntimeException("top level null input object"); |}""") } - ctx.currentVars = Seq(ExprCode("", nullVar, objVar)) + ctx.currentVars = internals.newExprCode(code = "", nullVar, objVar, javaClass) :: Nil val declarations = new StringBuilder def optimizeDate(expr: Expression): ExprCode = expr match { @@ -116,7 +116,7 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], |} """.stripMargin } - ev.copy(code = code) + internals.copyExprCode(ev, code = code) case Alias(child, _) => optimizeDate(child) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index af00449f8f..d4a9829e52 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -38,8 +38,6 @@ import org.apache.spark.sql.types._ import org.apache.spark.sql.{AnalysisException, CachedDataFrame, SnappySession, SparkSupport} import org.apache.spark.unsafe.types.{CalendarInterval, UTF8String} - - /** * Physical plan node for scanning data from an DataSource scan RDD. * If user knows that the data is partitioned or replicated across @@ -373,16 +371,18 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, val columnsInputEval = otherPlan.output.zipWithIndex.map { case (ref, ordinal) => val baseIndex = ordinal val ev = consumedVars(ordinal) + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) val dataType = ref.dataType - val javaType = ctx.javaType(dataType) - val value = ctx.getValue(row, dataType, baseIndex.toString) + val javaType = internals.javaType(dataType, ctx) + val value = internals.getValue(row, dataType, baseIndex.toString, ctx) if (ref.nullable) { s""" - boolean ${ev.isNull} = $row.isNullAt($ordinal); - $javaType ${ev.value} = ${ev.isNull} ? ${ctx.defaultValue(dataType)} : ($value); + boolean $evIsNull = $row.isNullAt($ordinal); + $javaType $evValue = $evIsNull ? ${internals.defaultValue(dataType, ctx)} : ($value); """ } else { - s"""$javaType ${ev.value} = $value;""" + s"""$javaType $evValue = $value;""" } }.mkString("\n") @@ -514,13 +514,14 @@ trait BatchConsumer extends CodegenSupport { * Extended information for ExprCode variable to also hold the variable having * dictionary reference and its index when dictionary encoding is being used. */ -case class DictionaryCode(dictionary: ExprCode, bufferVar: String, dictionaryIndex: ExprCode) { +case class DictionaryCode(dictionary: ExprCode, bufferVar: String, + dictionaryIndex: ExprCode) extends SparkSupport { private def evaluate(ev: ExprCode): String = { - if (ev.code.isEmpty) "" + val code = ev.code.toString + if (code.isEmpty) "" else { - val code = ev.code - ev.code = "" + internals.resetCode(ev) code } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index a141b90908..1b10883451 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -171,7 +171,9 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // Generate equals code for key columns only. val keyVars = entryVars.take(valueIndex) val equalsCode = keyVars.map { - case (dataType, _, ExprCode(_, nullVar, varName), nullIndex) => + case (dataType, _, ev, nullIndex) => + val nullVar = internals.exprCodeIsNull(ev) + val varName = internals.exprCodeValue(ev) genEqualsCode("this", varName, nullVar, other, varName, nullVar, nullIndex, isPrimitiveType(dataType), dataType) }.mkString(" &&\n") @@ -180,7 +182,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, (s""" public static class $valueClass { $nullDecls - ${valClassVars.map(e => s"${e._2} ${e._3.value};").mkString("\n")} + ${valClassVars.map(e => s"${e._2} ${internals.exprCodeValue(e._3)};") + .mkString("\n")} $valueClass $nextValueVar; } """, s" extends $valueClass", "", "") @@ -191,7 +194,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, s""" public static final class $entryClass$extendsCode { $nulls - ${entryVars.map(e => s"${e._2} ${e._3.value};").mkString("\n")} + ${entryVars.map(e => s"${e._2} ${internals.exprCodeValue(e._3)};").mkString("\n")} $multiValues final int hash; @@ -245,7 +248,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val javaType = dataType match { // use raw byte arrays for strings to minimize overhead case StringType if !multiMap => "byte[]" - case _ => ctx.javaType(dataType) + case _ => internals.javaType(dataType, ctx) } val (nullVar, nullIndex) = if (nullable) { if (isPrimitiveType(dataType)) { @@ -261,10 +264,10 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } else ("", NULL_NON_PRIM) // field itself is nullable } else ("", -1) if (index < numEntryVars) { - entryVars += ((dataType, javaType, ExprCode("", nullVar, varName), + entryVars += ((dataType, javaType, internals.newExprCode(code = "", nullVar, varName), nullIndex)) } else { - valClassVars += ((dataType, javaType, ExprCode("", nullVar, varName), + valClassVars += ((dataType, javaType, internals.newExprCode(code = "", nullVar, varName), nullIndex)) } } @@ -307,7 +310,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // index mapping here for mix of integral and non-integral keys // rather using key index since overhead of blanks will be negligible. val updateMinMax = integralKeys.map { index => - s"$hashMapTerm.updateLimits(${keyVars(index).value}, $index);" + s"$hashMapTerm.updateLimits(${internals.exprCodeValue(keyVars(index))}, $index);" }.mkString("\n") val doCopy = !ObjectHashMapAccessor.providesImmutableObjects(child) @@ -332,7 +335,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // evaluate the key and value expressions ${evaluateVariables(keyVars)}${evaluateVariables(valueVars)} // skip if any key is null - if (${keyVars.map(_.isNull).mkString(" ||\n")}) continue; + if (${keyVars.map(internals.exprCodeIsNull).mkString(" ||\n")}) continue; // generate hash code ${generateHashCode(hashVar, keyVars, keyExpressions, register = false)} // lookup or insert the grouping key in map @@ -388,7 +391,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val hashDeclaration = if (skipDeclaration) "" else s"int $hash;\n" // check if hash has already been generated for keyExpressions var doRegister = register - val vars = keyVars.map(_.value) + val vars = keyVars.map(internals.exprCodeValue) val (prefix, suffix) = session.getHashVar(ctx, vars) match { case Some(h) => hashVar(0) = h @@ -404,9 +407,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } // optimize for first column to use fast hashing - val expr = keyVars.head - val colVar = expr.value - val nullVar = expr.isNull + val nullVar = internals.exprCodeIsNull(keyVars.head) + val colVar = internals.exprCodeValue(keyVars.head) val firstColumnHash = classVars(0)._1 match { case BooleanType => hashSingleInt(s"($colVar) ? 1 : 0", nullVar, hash) @@ -428,22 +430,23 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, hashSingleInt(s"$colVar.hashCode()", nullVar, hash) } if (keyVars.length > 1) { - classVars.tail.zip(keyVars.tail).map { - case ((BooleanType, _, _, _), ev) => - addHashInt(s"${ev.value} ? 1 : 0", ev.isNull, hash) - case ((ByteType | ShortType | IntegerType | DateType, _, _, _), ev) => - addHashInt(ev.value, ev.isNull, hash) - case ((LongType | TimestampType, _, _, _), ev) => - addHashLong(ev.value, ev.isNull, hash) - case ((FloatType, _, _, _), ev) => - addHashInt(s"Float.floatToIntBits(${ev.value})", ev.isNull, hash) - case ((DoubleType, _, _, _), ev) => - addHashLong(s"Double.doubleToLongBits(${ev.value})", ev.isNull, + classVars.tail.zip(keyVars.tail).map(p => (p._1._1, + internals.exprCodeIsNull(p._2), internals.exprCodeValue(p._2))).map { + case (BooleanType, evIsNull, evValue) => + addHashInt(s"$evValue ? 1 : 0", evIsNull, hash) + case (ByteType | ShortType | IntegerType | DateType, evIsNull, evValue) => + addHashInt(evValue, evIsNull, hash) + case (LongType | TimestampType, evIsNull, evValue) => + addHashLong(evValue, evIsNull, hash) + case (FloatType, evIsNull, evValue) => + addHashInt(s"Float.floatToIntBits($evValue)", evIsNull, hash) + case (DoubleType, evIsNull, evValue) => + addHashLong(s"Double.doubleToLongBits($evValue)", evIsNull, hash) - case ((_: DecimalType, _, _, _), ev) => - addHashInt(s"${ev.value}.fastHashCode()", ev.isNull, hash) - case (_, ev) => - addHashInt(s"${ev.value}.hashCode()", ev.isNull, hash) + case (_: DecimalType, evIsNull, evValue) => + addHashInt(s"$evValue.fastHashCode()", evIsNull, hash) + case (_, evIsNull, evValue) => + addHashInt(s"$evValue.hashCode()", evIsNull, hash) }.mkString(prefix + firstColumnHash, "", suffix) } else prefix + firstColumnHash + suffix } @@ -456,9 +459,10 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, */ def generateEquals(objVar: String, keyVars: Seq[ExprCode]): String = classVars.zip(keyVars).map { - case ((dataType, _, ExprCode(_, nullVar, varName), nullIndex), colVar) => - genEqualsCode("", colVar.value, colVar.isNull, objVar, varName, - nullVar, nullIndex, isPrimitiveType(dataType), dataType) + case ((dataType, _, ev, nullIndex), colVar) => + genEqualsCode("", internals.exprCodeValue(colVar), internals.exprCodeIsNull(colVar), + objVar, internals.exprCodeValue(ev), internals.exprCodeIsNull(ev), nullIndex, + isPrimitiveType(dataType), dataType) }.mkString(" &&\n") /** @@ -514,6 +518,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val (dataType, javaType, ev, nullIndex) = vars(index) val isKeyVar = index < valueIndex val objVar = if (isKeyVar) keyObjVar else valObjVar + val evValue = internals.exprCodeValue(ev) ev match { // nullIndex contains index of referenced key variable in this case case null if !onlyValueVars => columnVars += columnVars(nullIndex) @@ -526,29 +531,29 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, (lv, new StringBuilder().append(s"final UTF8String $lv = ").append( if (checkNullObj) { s"($objVar != null ? UTF8String.fromBytes(" + - s"$objVar.${ev.value}) : null);" + s"$objVar.$evValue) : null);" } else { - s"UTF8String.fromBytes($objVar.${ev.value});" + s"UTF8String.fromBytes($objVar.$evValue);" })) case _ => val lv = ctx.freshName("localField") (lv, new StringBuilder().append(s"final $javaType $lv = ").append( if (checkNullObj) { - s"($objVar != null ? $objVar.${ev.value} " + - s" : ${ctx.defaultValue(dataType)});" + s"($objVar != null ? $objVar.$evValue " + + s" : ${internals.defaultValue(dataType, ctx)});" } else { - s"$objVar.${ev.value};" + s"$objVar.$evValue;" })) } } - val nullExpr = nullMaskVarMap.get(ev.isNull) + val nullExpr = nullMaskVarMap.get(internals.exprCodeIsNull(ev)) .map(p => if (isKeyVar) genNullCode(p._1, nullIndex) else genNullCode(p._2, nullIndex)).getOrElse( if (nullIndex == NULL_NON_PRIM) s"($localVar == null)" else "false") val nullVar = ctx.freshName("isNull") localDeclaration.append(s"\nboolean $nullVar = $nullExpr;") - columnVars += ExprCode(localDeclaration.toString, nullVar, localVar) + columnVars += internals.newExprCode(localDeclaration.toString, nullVar, localVar) } } (declarations.toString(), columnVars, nullValMaskVars) @@ -564,23 +569,25 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // generate the variables for each of the key terms with proper types val (keyDecls, keyCalls, newKeyVars) = keyExpressions .zip(keyVars).map { case (expr, ev) => - val javaType = ctx.javaType(expr.dataType) + val javaType = internals.javaType(expr.dataType, ctx) val newKeyVar = ctx.freshName("keyCol") - if (ev.isNull == "false") { - (s"final $javaType $newKeyVar", ev.value, ev.copy(value = newKeyVar)) + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) + if (evIsNull == "false") { + (s"final $javaType $newKeyVar", evValue, internals.copyExprCode(ev, value = newKeyVar)) } else { // new variable for nullability since isNull can be an expression val newNullVar = ctx.freshName("keyIsNull") (s"final $javaType $newKeyVar, final boolean $newNullVar", - s"${ev.value}, ${ev.isNull}", - ev.copy(isNull = newNullVar, value = newKeyVar)) + s"$evValue, $evIsNull", + internals.copyExprCode(ev, isNull = newNullVar, value = newKeyVar)) } }.unzip3 val keyDeclarations = keyDecls.mkString(", ") val skipInit = valueInit eq null // check for existing function with matching null vars and skipInit - val fnKey = className -> keyVars.map(_.isNull == "false") + val fnKey = className -> keyVars.map(internals.exprCodeIsNull(_) == "false") val fn = session.getContextObject[(String, Boolean)](ctx, "F", fnKey) match { case Some((functionName, skip)) if skipInit || !skip => functionName case f => @@ -677,17 +684,18 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, output), ctx, session) dictionaryKey match { case Some(d@DictionaryCode(dictionary, _, _)) => + val dictValue = internals.exprCodeValue(dictionary) // initialize or reuse the array at batch level for join // null key will be placed at the last index of dictionary // and dictionary index will be initialized to that by ColumnTableScan internals.addClassField(ctx, classOf[StringDictionary].getName, - dictionary.value, forceInline = true, useFreshName = false) + dictValue, forceInline = true, useFreshName = false) ctx.addNewFunction(dictionaryArrayInit, s""" |public $className[] $dictionaryArrayInit() { | ${d.evaluateDictionaryCode()} - | if (${dictionary.value} != null) { - | return new $className[${dictionary.value}.size() + 1]; + | if ($dictValue != null) { + | return new $className[$dictValue.size() + 1]; | } else { | return null; | } @@ -792,8 +800,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // if previous hash variable is being used then skip declaration val hashInit = if (hashVar(0) eq hash) s"int $hash = 0;" else "" // if a stream-side key is null then skip (or null for outer join) - val nullStreamKey = streamKeyVars.filter(_.isNull != "false") - .map(v => s"!${v.isNull}") + val nullStreamKey = streamKeyVars.filter(internals.exprCodeIsNull(_) != "false") + .map(v => s"!${internals.exprCodeIsNull(v)}") // continue to next entry on no match val continueOnNull = joinType match { case Inner | LeftSemi => true @@ -803,7 +811,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // initialized by the caller outside the loop after creating the map val minMaxFilter = integralKeys.zipWithIndex.map { case (indexKey, index) => - val keyVar = streamKeyVars(indexKey).value + val keyVar = internals.exprCodeValue(streamKeyVars(indexKey)) val minVar = integralKeysMinVars(index) val maxVar = integralKeysMaxVars(index) s"$keyVar >= $minVar && $keyVar <= $maxVar" @@ -876,22 +884,23 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, var mapLookupCode = dictionaryKey match { case Some(dictKey) => val keyVar = streamKeyVars.head + val keyCode = keyVar.code.toString // don't call evaluateVariables for streamKeyVars for the else // part below because it is in else block and should be re-evaluated // if required outside the block val code = s""" ${DictionaryOptimizedMapAccessor.dictionaryArrayGetOrInsert(ctx, streamKeys, keyVar, dictKey, dictArrayVar, entryVar, - valueInit = null, continueOnNull, this)} else { + valueInit = null, continueOnNull, accessor = this)} else { // evaluate the key expressions - ${if (keyVar.code.isEmpty) "" else keyVar.code.trim} + ${if (keyCode.isEmpty) "" else keyCode.trim} // generate hash code from stream side key columns $streamHashCode $lookup } """ // copy back the updated code to input if present - if (keyVar.code.nonEmpty) input.find(_.value == keyVar.value) + if (keyCode.nonEmpty) input.find(_.value == keyVar.value) .foreach(_.code = keyVar.code) code case None => @@ -960,7 +969,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val existsVar = ctx.freshName("exists") genExistenceJoinCodes(entryVar, existsVar, mapKeyCodes, checkCondition, checkCode, numRows, getConsumeResultCode(numRows, - input :+ ExprCode("", "false", existsVar)), keyIsUnique, + input :+ internals.newExprCode("", "false", existsVar)), keyIsUnique, declareLocalVars, moveNextValue, inputCodes) case _ => throw new IllegalArgumentException( @@ -1001,10 +1010,10 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val nullLocalVars = if (columnVars.isEmpty) { // get nullability from object fields - fieldVars.map(e => genNullCode(s"$objVar.${e._3.isNull}", e._4)) + fieldVars.map(e => genNullCode(s"$objVar.${internals.exprCodeIsNull(e._3)}", e._4)) } else { // get nullability from already set local vars passed in columnVars - columnVars.map(_.isNull) + columnVars.map(internals.exprCodeIsNull) } fieldVars.zip(nullLocalVars).zip(resultVars).map { case (((dataType, _, @@ -1012,18 +1021,19 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, if (nullIdx == -1) { // if incoming variable is null, then default will get assigned // because the variable will be initialized with the default - genVarAssignCode(objVar, resultVar, fieldVar.value, dataType, doCopy) + genVarAssignCode(objVar, resultVar, internals.exprCodeValue(fieldVar), + dataType, doCopy) } else if (nullIdx == NULL_NON_PRIM) { - val varName = fieldVar.value + val varName = internals.exprCodeValue(fieldVar) s""" - if (${resultVar.isNull}) { + if (${internals.exprCodeIsNull(resultVar)}) { $objVar.$varName = null; } else { ${genVarAssignCode(objVar, resultVar, varName, dataType, doCopy)} } """ } else { - val nullVar = fieldVar.isNull + val nullVar = internals.exprCodeIsNull(fieldVar) // when initializing the object, no need to clear null mask val nullClear = if (forInit) "" else { @@ -1034,11 +1044,11 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, """ } s""" - if (${resultVar.isNull}) { + if (${internals.exprCodeIsNull(resultVar)}) { $objVar.$nullVar |= ${genNullBitMask(nullIdx)}; } else { $nullClear - ${genVarAssignCode(objVar, resultVar, fieldVar.value, + ${genVarAssignCode(objVar, resultVar, internals.exprCodeValue(fieldVar), dataType, doCopy)} } """ @@ -1054,8 +1064,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val consumeCode = checkCondition match { case None => consumeResult case Some(ev) => - s"""${ev.code} - if (!${ev.isNull} && ${ev.value}) { + s"""${ev.code.toString} + if (!${internals.exprCodeIsNull(ev)} && ${internals.exprCodeValue(ev)}) { $consumeResult }""" } @@ -1093,17 +1103,16 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, s"""$buildInitCode if ($entryVar == null) { // set null variables for outer join in failed match - ${buildVars.map(ev => s"${ev.isNull} = true;").mkString("\n")} + ${buildVars.map(ev => s"${internals.exprCodeIsNull(ev)} = true;").mkString("\n")} } $consumeResult""" case Some(ev) => // assign null to entryVar if checkCondition fails so that it is // treated like an empty outer join match by subsequent code - s""" - ${ev.code} - if (${ev.isNull} || !${ev.value}) { + ${ev.code.toString} + if (${internals.exprCodeIsNull(ev)} || !${internals.exprCodeValue(ev)}) { if ($localValueVar.$nextValueVar != null) { continue; } @@ -1117,7 +1126,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // the outer join needs to be converted to inner join if ($entryVar == null || $matchFailedCompletely) { // set null variables for outer join in failed match - ${buildVars.map(ev => s"${ev.isNull} = true;").mkString("\n")} + ${buildVars.map(ev => s"${internals.exprCodeIsNull(ev)} = true;").mkString("\n")} } $consumeResult""" } @@ -1163,9 +1172,9 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, $breakLoop: while (true) { $checkCode do { // single iteration loop meant for breaking out with "continue" - ${ev.code} + ${ev.code.toString} // consume only one result - if (!${ev.isNull} && ${ev.value}) { + if (!${internals.exprCodeIsNull(ev)} && ${internals.exprCodeValue(ev)}) { $consumeResult break $breakLoop; } @@ -1204,8 +1213,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, $checkCode do { // single iteration loop meant for breaking out with "continue" // fail if condition matches for any row - ${ev.code} - if (!${ev.isNull} && ${ev.value}) { + ${ev.code.toString} + if (!${internals.exprCodeIsNull(ev)} && ${internals.exprCodeValue(ev)}) { $matched = true; break $breakLoop; } @@ -1248,8 +1257,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, $breakLoop: while (true) { $checkCode do { // single iteration loop meant for breaking out with "continue" - ${ev.code} - if (!${ev.isNull} && ${ev.value}) { + ${ev.code.toString} + if (!${internals.exprCodeIsNull(ev)} && ${internals.exprCodeValue(ev)}) { // consume only one result $existsVar = true; break $breakLoop; @@ -1289,37 +1298,36 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // check for object field or local variable val colVar = if (varName.isEmpty) objVar else s"$objVar.$varName" - genVarAssignCode(colVar, resultVar, dataType, doCopy) + genVarAssignCode(colVar, internals.exprCodeValue(resultVar), dataType, doCopy) } - private def genVarAssignCode(colVar: String, resultVar: ExprCode, + private def genVarAssignCode(colVar: String, resultVar: String, dataType: DataType, doCopy: Boolean): String = dataType match { // if doCopy is true, then create a copy of some non-primitives that just // holds a reference to UnsafeRow bytes (and can change under the hood) case StringType if doCopy && !multiMap => - s"$colVar = ${resultVar.value}.getBytes();" + s"$colVar = $resultVar.getBytes();" case StringType if !multiMap => // copy just reference of the object if underlying byte[] is immutable - val stringVar = resultVar.value val bytes = ctx.freshName("stringBytes") s"""byte[] $bytes = null; - if ($stringVar == null || ($stringVar.getBaseOffset() == Platform.BYTE_ARRAY_OFFSET - && ($bytes = (byte[])$stringVar.getBaseObject()).length == $stringVar.numBytes())) { + if ($resultVar == null || ($resultVar.getBaseOffset() == Platform.BYTE_ARRAY_OFFSET + && ($bytes = (byte[])$resultVar.getBaseObject()).length == $resultVar.numBytes())) { $colVar = $bytes; } else { - $colVar = $stringVar.getBytes(); + $colVar = $resultVar.getBytes(); }""" // multimap holds a reference to UTF8String itself case StringType => // copy just reference of the object if underlying byte[] is immutable - ObjectHashMapAccessor.cloneStringIfRequired(resultVar.value, colVar, doCopy) + ObjectHashMapAccessor.cloneStringIfRequired(resultVar, colVar, doCopy) case _: ArrayType | _: MapType | _: StructType if doCopy => - val javaType = ctx.javaType(dataType) - s"$colVar = ($javaType)(${resultVar.value} != null ? ${resultVar.value}.copy() : null);" + val javaType = internals.javaType(dataType, ctx) + s"$colVar = ($javaType)($resultVar != null ? $resultVar.copy() : null);" case _: BinaryType if doCopy => - s"$colVar = (byte[])(${resultVar.value} != null ? ${resultVar.value}.clone() : null);" + s"$colVar = (byte[])($resultVar != null ? $resultVar.clone() : null);" case _ => - s"$colVar = ${resultVar.value};" + s"$colVar = $resultVar;" } private def genNullBitMask(nullIdx: Int): String = diff --git a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala index 84c1e987f6..cb845bca4a 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala @@ -25,7 +25,7 @@ import io.snappydata.Property import io.snappydata.collection.SHAMap import org.apache.spark.rdd.RDD -import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.{SnappySession, SparkSupport} import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, GenericInternalRow, UnsafeArrayData, UnsafeRow} @@ -50,7 +50,7 @@ case class SHAMapAccessor(@transient session: SnappySession, valueDataCapacityTerm: String, storedAggNullBitsTerm: Option[String], storedKeyNullBitsTerm: Option[String], aggregateBufferVars: Seq[String], keyHolderCapacityTerm: String) - extends CodegenSupport { + extends CodegenSupport with SparkSupport { private val alwaysExplode = Property.TestExplodeComplexDataTypeInSHA. get(session.sessionState.conf) @@ -231,12 +231,12 @@ case class SHAMapAccessor(@transient session: SnappySession, |int $remainder = $counter % 8; |int $indx = $counter / 8; |if ( ($varWidthNullBits[$indx] & (0x01 << $remainder)) == 0) { - |${readingCodeExprs.map(_.code).mkString("\n")} + |${readingCodeExprs.map(_.code.toString).mkString("\n")} |} |} |} else { |for (int $counter = 0; $counter < $arraySize; ++$counter ) { - |${readingCodeExprs.map(_.code).mkString("\n")} + |${readingCodeExprs.map(_.code.toString).mkString("\n")} |} |} @@ -293,7 +293,7 @@ case class SHAMapAccessor(@transient session: SnappySession, getBufferVars(st.map(_.dataType), keyVarNamesWithStructFlags.unzip._1, currentValueOffsetTerm, isKey = true, nullBitSetTermForStruct, numNullKeyBytesForStruct, skipNullBitsCode = false, nestingLevel + 1). - map(_.code).mkString("\n") + map(_.code.toString).mkString("\n") } //add child Internal Rows to parent struct's object array ${ @@ -338,7 +338,7 @@ case class SHAMapAccessor(@transient session: SnappySession, } }""".stripMargin } - ExprCode(exprCode, nullVar, varName) + internals.newExprCode(exprCode, nullVar, varName) } } @@ -369,7 +369,7 @@ case class SHAMapAccessor(@transient session: SnappySession, def initKeyOrBufferVal(dataTypes: Seq[DataType], varNames: Seq[String]): String = dataTypes.zip(varNames).map { case (dt, varName) => - s"${ctx.javaType(dt)} $varName = ${ctx.defaultValue(dt)};" + s"${internals.javaType(dt, ctx)} $varName = ${internals.defaultValue(dt, ctx)};" }.mkString("\n") def declareNullVarsForAggBuffer(varNames: Seq[String]): String = @@ -403,8 +403,8 @@ case class SHAMapAccessor(@transient session: SnappySession, case _: StructType => true case _ => false }).map { - case (exprCode, dt) => explodeStruct(exprCode.value, exprCode.isNull, - dt.asInstanceOf[StructType]) + case (exprCode, dt) => explodeStruct(internals.exprCodeValue(exprCode), + internals.exprCodeIsNull(exprCode), dt.asInstanceOf[StructType]) }.mkString("\n") } // evaluate hash code of the lookup key @@ -531,7 +531,7 @@ case class SHAMapAccessor(@transient session: SnappySession, s"""|boolean $nullVarName = $structNullVarName || | (!$alwaysExplode && $structVarName instanceof $unsafeRowClass) || | $structVarName.isNullAt($index); - | ${ctx.javaType(dt)} $varName = ${ctx.defaultValue(dt)}; + | ${internals.javaType(dt, ctx)} $varName = ${internals.defaultValue(dt, ctx)}; | if ($alwaysExplode|| !($structVarName instanceof $unsafeRowClass)) { |if (!$nullVarName) { |$varName = $valueExtractCode; @@ -606,7 +606,7 @@ case class SHAMapAccessor(@transient session: SnappySession, s"""$storeNullBitStartOffsetAndRepositionOffset |${dataTypes.zip(varsToWrite).zipWithIndex.map { case ((dt, expr), i) => - val variable = expr.value + val variable = internals.exprCodeValue(expr) val writingCode = (dt match { case x: AtomicType => val snippet = typeOf(x.tag) match { @@ -739,8 +739,9 @@ case class SHAMapAccessor(@transient session: SnappySession, val dataType = ctx.freshName("dataType") val dataTypeClass = classOf[DataType].getName val elementWitingCode = writeKeyOrValue(baseObjectTerm, offsetTerm, Seq(elementType), - Seq(ExprCode("", "false", arrElement)), "", -1, + Seq(internals.newExprCode("", "false", arrElement)), "", -1, isKey = true, skipNullEvalCode = true, nestingLevel) + val elType = internals.javaType(elementType, ctx) val explodeArraySnippet = s"""|$plaformClass.putBoolean($baseObjectTerm, $offsetTerm, true); |$offsetTerm += 1; @@ -770,8 +771,8 @@ case class SHAMapAccessor(@transient session: SnappySession, | throw new IllegalStateException("Not null Array element contains null"); |} |} else { - |${ctx.javaType(elementType)} $arrElement = - |(${ctx.boxedType(elementType)}) $variable.get($counter, $dataType); + |$elType $arrElement = + |(${internals.boxedType(elType, ctx)}) $variable.get($counter, $dataType); |$elementWitingCode |} |} @@ -907,29 +908,31 @@ case class SHAMapAccessor(@transient session: SnappySession, val unsafeArrayDataClass = classOf[UnsafeArrayData].getName keysDataType.zip(keyVars).zipWithIndex.map { case ((dt, expr), i) => - val nullVar = expr.isNull + val nullVar = internals.exprCodeIsNull(expr) val notNullSizeExpr = if (TypeUtilities.isFixedWidth(dt)) { dt.defaultSize.toString } else { + val exprValue = internals.exprCodeValue(expr) dt match { case StringType => - val strPart = s"${expr.value}.numBytes()" + val strPart = s"$exprValue.numBytes()" if (nestingLevel == 0 && i == skipLenForAttribIndex) { strPart } else { s"($strPart + 4)" } - case BinaryType => s"(${expr.value}.length + 4) " - case st: StructType => val (childKeysVars, childDataTypes) = - getExplodedExprCodeAndDataTypeForStruct(expr.value, st, nestingLevel) + case BinaryType => s"(${internals.exprCodeValue(expr)}}.length + 4) " + case st: StructType => + val (childKeysVars, childDataTypes) = + getExplodedExprCodeAndDataTypeForStruct(exprValue, st, nestingLevel) val explodedStructSizeCode = generateKeySizeCode(childKeysVars, childDataTypes, SHAMapAccessor.calculateNumberOfBytesForNullBits(st.length), nestingLevel + 1) - val unexplodedStructSizeCode = s"(($unsafeRowClass) ${expr.value}).getSizeInBytes() + 4" + val unexplodedStructSizeCode = s"(($unsafeRowClass) $exprValue).getSizeInBytes() + 4" "1 + " + (if (alwaysExplode) { explodedStructSizeCode } else { - s"""(${expr.value} instanceof $unsafeRowClass ? $unexplodedStructSizeCode + s"""($exprValue instanceof $unsafeRowClass ? $unexplodedStructSizeCode |: $explodedStructSizeCode) """.stripMargin } @@ -958,18 +961,18 @@ case class SHAMapAccessor(@transient session: SnappySession, (false, 0) } val snippetNullBitsSizeCode = - s"""${expr.value}.numElements()/8 + (${expr.value}.numElements() % 8 > 0 ? 1 : 0) + s"""$exprValue.numElements()/8 + ($exprValue.numElements() % 8 > 0 ? 1 : 0) """.stripMargin - val snippetNotNullFixedWidth = s"4 + ${expr.value}.numElements() * $unitSize" + val snippetNotNullFixedWidth = s"4 + $exprValue.numElements() * $unitSize" val snippetNotNullVarWidth = - s"""4 + (int)($sizeAndNumNotNullFuncForStringArr(${expr.value}, true) >>> 32L) + s"""4 + (int)($sizeAndNumNotNullFuncForStringArr($exprValue, true) >>> 32L) """.stripMargin val snippetNullVarWidth = s" $snippetNullBitsSizeCode + $snippetNotNullVarWidth" val snippetNullFixedWidth = s"""4 + $snippetNullBitsSizeCode + |$unitSize * (int)($sizeAndNumNotNullFuncForStringArr( - |${expr.value}, false) & 0xffffffffL) + |$exprValue, false) & 0xffffffffL) """.stripMargin "( 1 + " + (if (alwaysExplode) { @@ -987,8 +990,8 @@ case class SHAMapAccessor(@transient session: SnappySession, } } } else { - s"""(${expr.value} instanceof $unsafeArrayDataClass ? - |(($unsafeArrayDataClass) ${expr.value}).getSizeInBytes() + 4 + s"""($exprValue instanceof $unsafeArrayDataClass ? + |(($unsafeArrayDataClass) $exprValue).getSizeInBytes() + 4 |: ${ if (isFixedWidth) { s"""$containsNull ? ($snippetNullFixedWidth) |: ($snippetNotNullFixedWidth)) @@ -1016,12 +1019,9 @@ case class SHAMapAccessor(@transient session: SnappySession, nestingLevel: Int): (Seq[ExprCode], Seq[DataType]) = st.zipWithIndex.map { case (sf, index) => val (varName, nullVarName) = SHAMapAccessor.generateExplodedStructFieldVars(parentStructVarName, nestingLevel, index) - ExprCode("", nullVarName, varName) -> sf.dataType + internals.newExprCode("", nullVarName, varName) -> sf.dataType }.unzip - - - /** * Generate code to calculate the hash code for given column variables that * correspond to the key columns in this class. @@ -1033,7 +1033,7 @@ case class SHAMapAccessor(@transient session: SnappySession, val hashDeclaration = if (skipDeclaration) "" else s"int $hash = 0;\n" // check if hash has already been generated for keyExpressions var doRegister = register - val vars = keyVars.map(_.value) + val vars = keyVars.map(internals.exprCodeValue) val (prefix, suffix) = session.getHashVar(ctx, vars) match { case Some(h) => hashVar(0) = h @@ -1050,8 +1050,8 @@ case class SHAMapAccessor(@transient session: SnappySession, // optimize for first column to use fast hashing val expr = keyVars.head - val colVar = expr.value - val nullVar = expr.isNull + val nullVar = internals.exprCodeIsNull(expr) + val colVar = internals.exprCodeValue(expr) val firstColumnHash = keysDataType.head match { case BooleanType => hashSingleInt(s"($colVar) ? 1 : 0", nullVar, hash) @@ -1075,24 +1075,25 @@ case class SHAMapAccessor(@transient session: SnappySession, hashSingleInt(s"$colVar.hashCode()", nullVar, hash) } if (keyVars.length > 1) { - keysDataType.tail.zip(keyVars.tail).map { - case (BooleanType, ev) => - addHashInt(s"${ev.value} ? 1 : 0", ev.isNull, hash) - case (ByteType | ShortType | IntegerType | DateType, ev) => - addHashInt(ev.value, ev.isNull, hash) - case (BinaryType, ev) => - hashBinary(ev.value, ev.isNull, hash) - case (LongType | TimestampType, ev) => - addHashLong(ctx, ev.value, ev.isNull, hash) - case (FloatType, ev) => - addHashInt(s"Float.floatToIntBits(${ev.value})", ev.isNull, hash) - case (DoubleType, ev) => - addHashLong(ctx, s"Double.doubleToLongBits(${ev.value})", ev.isNull, + keysDataType.tail.zip(keyVars.tail).map(p => (p._1, internals.exprCodeIsNull(p._2), + internals.exprCodeValue(p._2))).map { + case (BooleanType, evIsNull, evValue) => + addHashInt(s"$evValue ? 1 : 0", evIsNull, hash) + case (ByteType | ShortType | IntegerType | DateType, evIsNull, evValue) => + addHashInt(evValue, evIsNull, hash) + case (BinaryType, evIsNull, evValue) => + hashBinary(evValue, evIsNull, hash) + case (LongType | TimestampType, evIsNull, evValue) => + addHashLong(ctx, evValue, evIsNull, hash) + case (FloatType, evIsNull, evValue) => + addHashInt(s"Float.floatToIntBits($evValue)", evIsNull, hash) + case (DoubleType, evIsNull, evValue) => + addHashLong(ctx, s"Double.doubleToLongBits($evValue)", evIsNull, hash) - case (_: DecimalType, ev) => - addHashInt(s"${ev.value}.fastHashCode()", ev.isNull, hash) - case (_, ev) => - addHashInt(s"${ev.value}.hashCode()", ev.isNull, hash) + case (_: DecimalType, evIsNull, evValue) => + addHashInt(s"$evValue.fastHashCode()", evIsNull, hash) + case (_, evIsNull, evValue) => + addHashInt(s"$evValue.hashCode()", evIsNull, hash) }.mkString(prefix + firstColumnHash, "", suffix) } else prefix + firstColumnHash + suffix } @@ -1166,7 +1167,7 @@ case class SHAMapAccessor(@transient session: SnappySession, } -object SHAMapAccessor { +object SHAMapAccessor extends SparkSupport { val nullVarSuffix = "_isNull" val supportedDataTypes: DataType => Boolean = { @@ -1279,7 +1280,7 @@ object SHAMapAccessor { i: Int, nullBitsTerm: String, offsetTerm: String, dt: DataType, isKey: Boolean, writingCodeToEmbed: String): String = { val castTerm = SHAMapAccessor.getNullBitsCastTerm(numBytesForNullBits) - val nullVar = expr.isNull + val nullVar = internals.exprCodeIsNull(expr) if (numBytesForNullBits > 8) { val remainder = i % 8 val index = i / 8 diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index 578bdbbd27..36ca41c3a9 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -55,7 +55,7 @@ import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.columnar.encoding.ColumnEncoding import org.apache.spark.sql.execution.metric.SQLMetrics import org.apache.spark.sql.types._ -import org.apache.spark.sql.{SnappySession, collection} +import org.apache.spark.sql.{SnappySession, SparkSupport, collection} import org.apache.spark.unsafe.Platform import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.util.Utils @@ -77,7 +77,7 @@ case class SnappyHashAggregateExec( __resultExpressions: Seq[NamedExpression], child: SparkPlan, hasDistinct: Boolean) - extends NonRecursivePlans with UnaryExecNode with BatchConsumer { + extends NonRecursivePlans with UnaryExecNode with BatchConsumer with SparkSupport { val useByteBufferMapBasedAggregation: Boolean = { val conf = sqlContext.sparkSession.sessionState.conf @@ -283,10 +283,12 @@ case class SnappyHashAggregateExec( else { bufVarUpdates = bufVars.indices.map { i => val ev = bufVars(i) + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) s""" |// update the member result variables from local variables - |this.${ev.isNull} = ${ev.isNull}; - |this.${ev.value} = ${ev.value}; + |this.$evIsNull = $evIsNull; + |this.$evValue = $evValue; """.stripMargin }.mkString("\n").trim bufVarUpdates @@ -309,15 +311,15 @@ case class SnappyHashAggregateExec( ctx.currentVars = null bufVars = initExpr.map { e => val isNull = internals.addClassField(ctx, "boolean", "bufIsNull") - val value = internals.addClassField(ctx, ctx.javaType(e.dataType), "bufValue") + val value = internals.addClassField(ctx, internals.javaType(e.dataType, ctx), "bufValue") // The initial expression should not access any column val ev = e.genCode(ctx) val initVars = s""" - | $isNull = ${ev.isNull}; - | $value = ${ev.value}; + | $isNull = ${internals.exprCodeIsNull(ev)}; + | $value = ${internals.exprCodeValue(ev)}; """.stripMargin - ExprCode(ev.code + initVars, isNull, value) + internals.newExprCode(ev.code.toString + initVars, isNull, value) } var initBufVar = evaluateVariables(bufVars) @@ -356,9 +358,11 @@ case class SnappyHashAggregateExec( // use local variables while member variables are updated at the end initBufVar = bufVars.indices.map { i => val ev = bufVars(i) + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) s""" - |boolean ${ev.isNull} = this.${ev.isNull}; - |${ctx.javaType(initExpr(i).dataType)} ${ev.value} = this.${ev.value}; + |boolean $evIsNull = this.$evIsNull; + |${internals.javaType(initExpr(i).dataType, ctx)} $evValue = this.$evValue; """.stripMargin }.mkString("", "\n", initBufVar).trim produceOutput = s"$produceOutput\n$bufVarUpdates" @@ -394,18 +398,20 @@ case class SnappyHashAggregateExec( protected def genAssignCodeForWithoutKeys(ctx: CodegenContext, ev: ExprCode, i: Int, doCopy: Boolean, inputAttrs: Seq[Attribute]): String = { + val evValue = internals.exprCodeValue(ev) + val bufValue = internals.exprCodeValue(bufVars(i)) if (doCopy) { inputAttrs(i).dataType match { case StringType => - ObjectHashMapAccessor.cloneStringIfRequired(ev.value, bufVars(i).value, doCopy = true) + ObjectHashMapAccessor.cloneStringIfRequired(evValue, bufValue, doCopy = true) case d@(_: ArrayType | _: MapType | _: StructType) => - val javaType = ctx.javaType(d) - s"${bufVars(i).value} = ($javaType)(${ev.value} != null ? ${ev.value}.copy() : null);" + val javaType = internals.javaType(d, ctx) + s"$bufValue = ($javaType)($evValue != null ? $evValue.copy() : null);" case _: BinaryType => - s"${bufVars(i).value} = (byte[])(${ev.value} != null ? ${ev.value}.clone() : null);" - case _ => s"${bufVars(i).value} = ${ev.value};" + s"$bufValue = (byte[])($evValue != null ? $evValue.clone() : null);" + case _ => s"$bufValue = $evValue;" } - } else s"${bufVars(i).value} = ${ev.value};" + } else s"$bufValue = $evValue;" } private def doConsumeWithoutKeys(ctx: CodegenContext, @@ -436,7 +442,7 @@ case class SnappyHashAggregateExec( val doCopy = !ObjectHashMapAccessor.providesImmutableObjects(child) val updates = aggVals.zipWithIndex.map { case (ev, i) => s""" - | ${bufVars(i).isNull} = ${ev.isNull}; + | ${internals.exprCodeIsNull(bufVars(i))} = ${internals.exprCodeIsNull(ev)}; | ${genAssignCodeForWithoutKeys(ctx, ev, i, doCopy, inputAttrs)} """.stripMargin } @@ -1161,11 +1167,11 @@ case class SnappyHashAggregateExec( skipNullBitsCode = false) val bufferEval = evaluateVariables(bufferVars) val bufferVarsFromInitVars = byteBufferAccessor.aggregateBufferVars.zip(initVars).map { - case (bufferVarName, initExpr) => ExprCode( - s""" - |$bufferVarName${SHAMapAccessor.nullVarSuffix} = ${initExpr.isNull}; - |$bufferVarName = ${initExpr.value};""".stripMargin, - s"$bufferVarName${SHAMapAccessor.nullVarSuffix}", bufferVarName) + case (bufferVarName, initEv) => internals.newExprCode(code = + s""" + |$bufferVarName${SHAMapAccessor.nullVarSuffix} = ${internals.exprCodeIsNull(initEv)}; + |$bufferVarName = ${internals.exprCodeValue(initEv)};""".stripMargin, + isNull = s"$bufferVarName${SHAMapAccessor.nullVarSuffix}", value = bufferVarName) } val bufferEvalFromInitVars = evaluateVariables(bufferVarsFromInitVars) ctx.currentVars = bufferVars ++ input diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index 3ec1c2322b..ec7aa18bdc 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -23,7 +23,7 @@ import org.eclipse.collections.impl.set.mutable.UnifiedSet import org.apache.spark.TaskContext import org.apache.spark.rdd.RDD -import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.{SnappySession, SparkSupport} import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode, GenerateUnsafeProjection} import org.apache.spark.sql.catalyst.expressions.{Attribute, BoundReference, Expression, Literal} @@ -250,7 +250,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], |$closeForNoContext |${if (numInsertedRowsMetric eq null) "" else s"$numInsertedRowsMetric.${metricAdd(numInsertions)};"} - |${consume(ctx, Seq(ExprCode("", "false", numInsertions)))} + |${consume(ctx, Seq(internals.newExprCode("", "false", numInsertions, classOf[Long])))} |success = true; |} |finally { @@ -393,7 +393,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], |$closeForNoContext |${if (numInsertedRowsMetric eq null) "" else s"$numInsertedRowsMetric.${metricAdd(numInsertions)};"} - |${consume(ctx, Seq(ExprCode("", "false", numInsertions)))} + |${consume(ctx, Seq(internals.newExprCode("", "false", numInsertions, classOf[Long])))} |success = true; |} |finally { @@ -470,10 +470,10 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], */ private def setColumn(ctx: CodegenContext, row: String, dataType: DataType, ordinal: Int, value: String): String = { - val jt = ctx.javaType(dataType) + val jt = internals.javaType(dataType, ctx) dataType match { - case _ if ctx.isPrimitiveType(jt) => - s"$row.set${ctx.primitiveTypeName(jt)}($ordinal, $value)" + case _ if internals.isPrimitiveType(jt, ctx) => + s"$row.set${internals.primitiveTypeName(jt, ctx)}($ordinal, $value)" case t: DecimalType => s"$row.setDecimal($ordinal, $value, ${t.precision})" case udt: UserDefinedType[_] => setColumn(ctx, row, udt.sqlType, ordinal, value) case _ => s"$row.update($ordinal, $value)" @@ -495,12 +495,12 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val field = schema(i) val dataType = field.dataType val evaluationCode = input(i) - evaluationCode.code + + evaluationCode.code.toString + s""" - if (${evaluationCode.isNull}) { + if (${internals.exprCodeIsNull(evaluationCode)}) { $mutableRow.setNullAt($i); } else { - ${setColumn(ctx, mutableRow, dataType, i, evaluationCode.value)}; + ${setColumn(ctx, mutableRow, dataType, i, internals.exprCodeValue(evaluationCode))}; } """ } @@ -508,8 +508,8 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], ctx.INPUT_ROW = mutableRow val rowReadExprs = schema.zipWithIndex.map { case (field, ordinal) => - ExprCode("", s"${ctx.INPUT_ROW}.isNullAt($ordinal)", - ctx.getValue(ctx.INPUT_ROW, field.dataType, ordinal.toString)) + internals.newExprCode("", s"${ctx.INPUT_ROW}.isNullAt($ordinal)", + internals.getValue(ctx.INPUT_ROW, field.dataType, ordinal.toString, ctx), classOf[Int]) } val columnWrite = schema.indices.map { i => @@ -555,7 +555,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val (statsSchema, stats) = columnStats.unzip val statsEv = ColumnWriter.genStatsRow(ctx, batchSizeTerm, stats, statsSchema) - val statsRow = statsEv.value + val statsRow = internals.exprCodeValue(statsEv) storeColumnBatch = ctx.freshName("storeColumnBatch") ctx.addNewFunction(storeColumnBatch, @@ -563,7 +563,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], |private final void $storeColumnBatch(int $maxDeltaRowsTerm, | int $batchSizeTerm, long[] $cursorArrayTerm, scala.Option $conn) { | // create statistics row - | ${statsEv.code.trim} + | ${statsEv.code.toString.trim} | // create ColumnBatch and insert | final java.nio.ByteBuffer[] $buffers = | new java.nio.ByteBuffer[${schema.length}]; @@ -709,7 +709,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], "java.lang.String") val (statsSchema, stats) = columnStats.unzip val statsEv = ColumnWriter.genStatsRow(ctx, batchSizeTerm, stats, statsSchema) - val statsRow = statsEv.value + val statsRow = internals.exprCodeValue(statsEv) storeColumnBatch = ctx.freshName("storeColumnBatch") ctx.addNewFunction(storeColumnBatch, s""" @@ -717,7 +717,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], | int $batchSizeTerm, ${batchFunctionDeclarations.toString()}, scala.Some $conn) { | $encoderCursorDeclarations | // create statistics row - | ${statsEv.code.trim} + | ${statsEv.code.toString.trim} | // create ColumnBatch and insert | final java.nio.ByteBuffer[] $buffers = | new java.nio.ByteBuffer[${schema.length}]; @@ -799,7 +799,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], s"batchSize=$columnBatchSize maxDeltaRows=$columnMaxDeltaRows compression=$compressionCodec" } -object ColumnWriter { +object ColumnWriter extends SparkSupport { /** * Supported types for which column statistics are maintained and can be used @@ -818,7 +818,7 @@ object ColumnWriter { var canBeNull = false val nullCount = ctx.freshName("nullCount") val sqlType = Utils.getSQLDataType(field.dataType) - val jt = ctx.javaType(sqlType) + val jt = internals.javaType(sqlType, ctx) val (lCode, uCode) = sqlType match { case BooleanType => (s"final boolean $lower = $encoder.lowerLong() > 0;", @@ -854,19 +854,21 @@ object ColumnWriter { } else (lCode, uCode) (ColumnStatsSchema(field.name, field.dataType, nullCountNullable).schema, Seq( - ExprCode(lowerCode, lowerIsNull, lower), - ExprCode(upperCode, upperIsNull, upper), - ExprCode(s"final int $nullCount = $encoder.nullCount();", "false", nullCount))) + internals.newExprCode(lowerCode, lowerIsNull, lower), + internals.newExprCode(upperCode, upperIsNull, upper), + internals.newExprCode(s"final int $nullCount = $encoder.nullCount();", "false", + nullCount, classOf[Int]))) } def genStatsRow(ctx: CodegenContext, batchSizeTerm: String, stats: Seq[Seq[ExprCode]], statsSchema: Seq[Seq[Attribute]]): ExprCode = { - val statsVars = ExprCode("", "false", batchSizeTerm) +: stats.flatten + val statsVars = internals.newExprCode(code = "", isNull = "false", batchSizeTerm, + classOf[Int]) +: stats.flatten val statsExprs = (ColumnStatsSchema.COUNT_ATTRIBUTE +: statsSchema.flatten) .zipWithIndex.map { case (a, i) => a.dataType match { // some types will always be null so avoid unnecessary generated code - case _ if statsVars(i).isNull == "true" => Literal(null, NullType) + case _ if internals.exprCodeIsNull(statsVars(i)) == "true" => Literal(null, NullType) case _ => BoundReference(i, a.dataType, a.nullable) } } @@ -880,12 +882,12 @@ object ColumnWriter { ev: ExprCode, batchSizeTerm: String, offsetTerm: String = null, baseOffsetTerm: String = null): String = { val sqlType = Utils.getSQLDataType(dataType) - val jt = ctx.javaType(sqlType) - var isNull = ev.isNull - val input = ev.value + val jt = internals.javaType(sqlType, ctx) + var isNull = internals.exprCodeIsNull(ev) + val input = internals.exprCodeValue(ev) val writeValue = sqlType match { - case _ if ctx.isPrimitiveType(jt) => - val typeName = ctx.primitiveTypeName(jt) + case _ if internals.isPrimitiveType(jt, ctx) => + val typeName = internals.primitiveTypeName(jt, ctx) if (offsetTerm eq null) { s"$cursorTerm = $encoder.write$typeName($cursorTerm, $input);" } else { @@ -1109,7 +1111,7 @@ object ColumnWriter { baseDataOffset: String, skipBytes: Int): String = { // scalastyle:on - val getter = ctx.getValue(input, dt, index) + val getter = internals.getValue(input, dt, index, ctx) val bitSetClass = BitSet.getClass.getName val fieldOffset = ctx.freshName("fieldOffset") val value = ctx.freshName("value") @@ -1118,7 +1120,7 @@ object ColumnWriter { s""" |final long $fieldOffset = $baseDataOffset + ($index << 3); |${genCodeColumnWrite(ctx, dt, nullable = false, encoder, encoder, - cursorTerm, ExprCode("", "false", value), batchSizeTerm, + cursorTerm, internals.newExprCode("", "false", value, classOf[Int]), batchSizeTerm, fieldOffset, baseOffset)} """.stripMargin val (checkNull, assignValue) = dt match { @@ -1133,14 +1135,14 @@ object ColumnWriter { } if (canBeNull) { s""" - |final ${ctx.javaType(dt)} $value; + |final ${internals.javaType(dt, ctx)} $value; |if ($checkNull) { | $bitSetClass.MODULE$$.set($encoder.buffer(), | $encoder.baseOffset() + $baseOffset, $index + ${skipBytes << 3}); |} else {$assignValue$serializeValue} """.stripMargin } else { - s"final ${ctx.javaType(dt)} $value = $getter;$serializeValue" + s"final ${internals.javaType(dt, ctx)} $value = $getter;$serializeValue" } } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index 26df6d540f..ff53833795 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -41,7 +41,7 @@ import scala.reflect.ClassTag import io.snappydata.ResultSetWithNull import org.apache.spark.rdd.{RDD, UnionPartition} -import org.apache.spark.sql.SnappySession +import org.apache.spark.sql.{SnappySession, SparkSupport} import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.dsl.expressions._ import org.apache.spark.sql.catalyst.expressions._ @@ -159,14 +159,14 @@ abstract case class ColumnTableScan( val retValName = ctx.freshName(s"col$index") val nullVarForCol = internals.addClassField(ctx, "boolean", s"nullVarForCol$index") val sqlType = Utils.getSQLDataType(attr.dataType) - val jt = ctx.javaType(sqlType) + val jt = internals.javaType(sqlType, ctx) val name = s"readValue_$index" val code = s""" |private $jt $name(int $batchOrdinal) { - | ${expr.code} - | $nullVarForCol = ${expr.isNull}; - | return ${expr.value}; + | ${expr.code.toString} + | $nullVarForCol = ${internals.exprCodeIsNull(expr)}; + | return ${internals.exprCodeValue(expr)}; |} """.stripMargin ctx.addNewFunction(name, code) @@ -174,7 +174,7 @@ abstract case class ColumnTableScan( s""" |$jt $retValName = $name($batchOrdinal); """.stripMargin - ExprCode(exprCode, s"$nullVarForCol", s"$retValName") + internals.newExprCode(exprCode, nullVarForCol, retValName) } override def doProduce(ctx: CodegenContext): String = { @@ -436,14 +436,14 @@ abstract case class ColumnTableScan( ColumnDelta.mutableKeyNames.indexOf(attr.name) match { case 0 => ordinalIdTerm = ctx.freshName("ordinalId") - ExprCode("", "false", ordinalIdTerm) + internals.newExprCode("", "false", ordinalIdTerm, classOf[Long]) case 1 => columnBatchIdTerm = ctx.freshName("columnBatchId") - ExprCode("", "false", columnBatchIdTerm) + internals.newExprCode("", "false", columnBatchIdTerm, classOf[Long]) case 2 => bucketIdTerm = ctx.freshName("bucketId") - ExprCode("", "false", bucketIdTerm) - case 3 => ExprCode("", "false", numBatchRows) + internals.newExprCode("", "false", bucketIdTerm, classOf[Int]) + case 3 => internals.newExprCode("", "false", numBatchRows, classOf[Int]) case _ => throw new IllegalStateException(s"Unexpected internal attribute $attr") } case (attr, index) => rsIndex += 1; columnsInputMapper(attr, index, rsIndex) @@ -676,24 +676,24 @@ abstract case class ColumnTableScan( val nonNullPosition = if (attr.nullable) s"$batchOrdinal - $numNullsVar" else batchOrdinal val col = ctx.freshName("col") val sqlType = Utils.getSQLDataType(attr.dataType) - val jt = ctx.javaType(sqlType) + val jt = internals.javaType(sqlType, ctx) var colAssign = "" var updatedAssign = "" val typeName = sqlType match { case DateType => "Date" case TimestampType => "Timestamp" - case _ if ctx.isPrimitiveType(jt) => ctx.primitiveTypeName(jt) + case _ if internals.isPrimitiveType(jt, ctx) => internals.primitiveTypeName(jt, ctx) case StringType => val dictionaryVar = ctx.freshName("dictionary") val dictionaryIndexVar = ctx.freshName("dictionaryIndex") - val dictionary = ExprCode( + val dictionary = internals.newExprCode( s""" |$dictionaryVar = $mutableDecoderGlobal == null | ? $decoderGlobal.getStringDictionary() | : $mutableDecoderGlobal.getStringDictionary(); - """.stripMargin, s"($dictionaryVar == null)", dictionaryVar) + """.stripMargin, s"($dictionaryVar == null)", dictionaryVar, classOf[StringDictionary]) val dictionaryIndex = if (attr.nullable) { - ExprCode( + internals.newExprCode( s""" |${genIfNonNullCode(ctx, decoder, buffer, batchOrdinal, numNullsVar)} { | $dictionaryIndexVar = $updateDecoder == null @@ -702,14 +702,14 @@ abstract case class ColumnTableScan( |} else { | $dictionaryIndexVar = $dictionaryVar.size(); |} - """.stripMargin, "false", dictionaryIndexVar) + """.stripMargin, "false", dictionaryIndexVar, classOf[Int]) } else { - ExprCode( + internals.newExprCode( s""" |$dictionaryIndexVar = $updateDecoder == null | ? $decoder.readDictionaryIndex($buffer, $nonNullPosition) | : $updateDecoder.readDictionaryIndex(); - """.stripMargin, "false", dictionaryIndexVar) + """.stripMargin, "false", dictionaryIndexVar, classOf[Int]) } session.foreach(_.addDictionaryCode(ctx, col, DictionaryCode(dictionary, buffer, dictionaryIndex))) @@ -746,7 +746,7 @@ abstract case class ColumnTableScan( val unchangedCode = s"$updateDecoder == null || $updateDecoder.unchanged($batchOrdinal)" if (attr.nullable) { val isNullVar = ctx.freshName("isNull") - val defaultValue = ctx.defaultValue(jt) + val defaultValue = internals.defaultValue(sqlType, ctx) val code = s""" |final $jt $col; @@ -765,7 +765,7 @@ abstract case class ColumnTableScan( | $isNullVar = true; |} """.stripMargin - ExprCode(code, isNullVar, col) + internals.newExprCode(code, isNullVar, col) } else { var code = s""" @@ -776,7 +776,7 @@ abstract case class ColumnTableScan( if (weightVar != null && attr.name.equalsIgnoreCase(Utils.WEIGHTAGE_COLUMN_NAME)) { code += s"if ($col == 1) $col = $weightVar;\n" } - ExprCode(code, "false", col) + internals.newExprCode(code, "false", col) } } @@ -804,7 +804,7 @@ abstract case class ColumnTableScan( } } -object ColumnTableScan extends Logging { +object ColumnTableScan extends Logging with SparkSupport { def generateStatPredicate(ctx: CodegenContext, isColumnTable: Boolean, schemaAttrs: Seq[AttributeReference], allFilters: Seq[Expression], numRowsTerm: String, @@ -923,9 +923,11 @@ object ColumnTableScan extends Logging { ctx.INPUT_ROW = statsRow ctx.currentVars = null val predicateEval = predicate.genCode(ctx) + val predicateIsNull = internals.exprCodeIsNull(predicateEval) + val predicateVal = internals.exprCodeValue(predicateEval) // skip filtering if nothing is to be applied - if (predicateEval.value == "true" && predicateEval.isNull == "false") { + if (predicateVal == "true" && predicateIsNull == "false") { return "" } val columnBatchesSkipped = if (metricTerm ne null) { @@ -940,10 +942,10 @@ object ColumnTableScan extends Logging { |private boolean $filterFunction(UnsafeRow $statsRow, int $numRowsTerm, | boolean isLastStatsRow, boolean isDelta) { | // Skip the column batches based on the predicate - | ${predicateEval.code} - | if (isDelta && (${predicateEval.isNull} || ${predicateEval.value})) { + | ${predicateEval.code.toString} + | if (isDelta && ($predicateIsNull|| $predicateVal)) { | return true; - | } else if (!${predicateEval.isNull} && ${predicateEval.value}) { + | } else if (!$predicateIsNull && $predicateVal) { | return true; | } else { | // add to skipped metric only if both stats say so @@ -1003,14 +1005,14 @@ private[sql] final class UnionScanRDD[T: ClassTag]( } } -case class NumBatchRows(varName: String) extends LeafExpression { +case class NumBatchRows(varName: String) extends LeafExpression with SparkSupport { override def nullable: Boolean = false override def dataType: DataType = IntegerType override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { - ExprCode("", "false", varName) + internals.newExprCode("", "false", varName) } override def eval(input: InternalRow): Any = @@ -1021,7 +1023,7 @@ case class NumBatchRows(varName: String) extends LeafExpression { } case class StartsWithForStats(upper: Expression, lower: Expression, - pattern: Expression) extends Expression { + pattern: Expression) extends Expression with SparkSupport { // pattern must be a string constant for stats row evaluation assert(TokenLiteral.isConstant(pattern)) @@ -1037,49 +1039,53 @@ case class StartsWithForStats(upper: Expression, lower: Expression, override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { val upperExpr = upper.genCode(ctx) + val upperIsNull = internals.exprCodeIsNull(upperExpr) + val upperVal = internals.exprCodeValue(upperExpr) val lowerExpr = lower.genCode(ctx) val patternExpr = pattern.genCode(ctx) + val patternIsNull = internals.exprCodeIsNull(patternExpr) + val patternVal = internals.exprCodeValue(patternExpr) val str = ctx.freshName("str") val len = str + "Len" val lastCharPos = str + "LastPos" val upperBytes = str + "Upper" val upperStr = str + "UpperUTF8" - val result = ev.value + val result = internals.exprCodeValue(ev) val code = s""" - |${patternExpr.code} + |${patternExpr.code.toString} |boolean $result = true; - |if (!${patternExpr.isNull}) { - | ${lowerExpr.code} - | ${upperExpr.code} + |if (!$patternIsNull) { + | ${lowerExpr.code.toString} + | ${upperExpr.code.toString} | // upper bound for column (i.e. LessThan) can be found by going to | // next value of the last character of literal - | int $len = ${patternExpr.value}.numBytes(); + | int $len = $patternVal.numBytes(); | byte[] $upperBytes = new byte[$len]; - | ${patternExpr.value}.writeToMemory($upperBytes, Platform.BYTE_ARRAY_OFFSET); + | $patternVal.writeToMemory($upperBytes, Platform.BYTE_ARRAY_OFFSET); | int $lastCharPos = $len - 1; | // check for maximum unsigned value 0xff | while ($lastCharPos >= 0 && $upperBytes[$lastCharPos] == (byte)-1) { | $lastCharPos--; | } - | if ($lastCharPos < 0 || (${lowerExpr.isNull})) { // all bytes are 0xff + | if ($lastCharPos < 0 || (${internals.exprCodeIsNull(lowerExpr)})) { // all bytes 0xff | // a >= startsWithPREFIX - | if (!${upperExpr.isNull}) { - | $result = ${patternExpr.value}.compareTo(${upperExpr.value}) <= 0; + | if (!$upperIsNull) { + | $result = $patternVal.compareTo($upperVal) <= 0; | } | } else { | $upperBytes[$lastCharPos] = (byte)($upperBytes[$lastCharPos] + 1); | UTF8String $upperStr = UTF8String.fromAddress($upperBytes, | Platform.BYTE_ARRAY_OFFSET, $len); | // a >= startsWithPREFIX && a < startsWithPREFIX+1 - | $result = ((${upperExpr.isNull}) || - | ${patternExpr.value}.compareTo(${upperExpr.value}) <= 0) && - | ${lowerExpr.value}.compareTo($upperStr) < 0; + | $result = (($upperIsNull) || + | $patternVal.compareTo($upperVal) <= 0) && + | ${internals.exprCodeValue(lowerExpr)}.compareTo($upperStr) < 0; | } |} | """.stripMargin - ev.copy(code, "false", result) + internals.copyExprCode(ev, code = code, isNull = "false", value = result, classOf[Boolean]) } override def eval(input: InternalRow): Any = diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala index d7d3371bb3..38986bca0b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala @@ -180,10 +180,10 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, ctx.currentVars = null val keyVars = updateInput.takeRight(4) - val ordinalIdVar = keyVars.head.value - val batchIdVar = keyVars(1).value - val bucketVar = keyVars(2).value - val numRowsVar = keyVars(3).value + val ordinalIdVar = internals.exprCodeValue(keyVars.head) + val batchIdVar = internals.exprCodeValue(keyVars(1)) + val bucketVar = internals.exprCodeValue(keyVars(2)) + val numRowsVar = internals.exprCodeValue(keyVars(3)) val updateVarsCode = evaluateVariables(updateInput) // row buffer needs to select the rowId and partitioning columns so drop last three @@ -216,16 +216,17 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, ctx.addNewFunction(function, s""" |private void $function(int $ordinal, int $ordinalIdVar, - | boolean $isNull, ${ctx.javaType(dataType)} $field) { + | boolean $isNull, ${internals.javaType(dataType, ctx)} $field) { | final $deltaEncoderClass $encoderTerm = $deltaEncoders[$i]; | final $encoderClass $realEncoderTerm = $encoderTerm.getRealEncoder(); | $encoderTerm.setUpdatePosition($ordinalIdVar); | ${ColumnWriter.genCodeColumnWrite(ctx, dataType, col.nullable, realEncoderTerm, - encoderTerm, cursorTerm, ev.copy(isNull = isNull, value = field), ordinal)} + encoderTerm, cursorTerm, internals.copyExprCode(ev, isNull, field), ordinal)} |} """.stripMargin) // code for invoking the function - s"$function($batchOrdinal, (int)$ordinalIdVar, ${ev.isNull}, ${ev.value});" + s"$function($batchOrdinal, (int)$ordinalIdVar, ${internals.exprCodeIsNull(ev)}, " + + s"${internals.exprCodeValue(ev)});" }.mkString("\n") // Old code(Keeping the comment for better understanding) // Write the delta stats row for all table columns at the end of a batch. @@ -248,8 +249,8 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, // equals to 1 i.e LZ4 compression codec id ). // Hence setting each 3rd bit( null count stats) with not null flag. This will never cause // the word to be read as negative number. - val allNullsExprs = Seq(ExprCode("", "true", ""), - ExprCode("", "true", ""), ExprCode("", "false", "-1")) + val allNullsExprs = Seq(internals.newExprCode("", "true", ""), + internals.newExprCode("", "true", ""), internals.newExprCode("", "false", "-1")) val (statsSchema, stats) = tableSchema.indices.map { i => val field = tableSchema(i) tableToUpdateIndex.get(i) match { @@ -284,8 +285,8 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, | // create delta statistics row | ${statsEv.code} | // store the delta column batch - | final $columnBatchClass columnBatch = $columnBatchClass.apply( - | $batchOrdinal, buffers, ${statsEv.value}.getBytes(), $deltaIndexes); + | final $columnBatchClass columnBatch = $columnBatchClass.apply($batchOrdinal, + | buffers, ${internals.exprCodeValue(statsEv)}.getBytes(), $deltaIndexes); | // maxDeltaRows is -1 so that insert into row buffer is never considered | $externalStoreTerm.storeColumnBatch($tableName, columnBatch, $lastBucketId, | $lastColumnBatchId, -1, ${compressionCodec.id}, new scala.Some($connTerm)); diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 2ca715262b..2f657fcf19 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -64,13 +64,15 @@ case class CreateTableUsingCommand( partitionColumns: Array[String], bucketSpec: Option[BucketSpec], query: Option[LogicalPlan], - isExternal: Boolean) extends RunnableCommand { + isExternal: Boolean, + comment: Option[String] = None, + location: Option[String] = None) extends RunnableCommand { override def run(sparkSession: SparkSession): Seq[Row] = { val session = sparkSession.asInstanceOf[SnappySession] val allOptions = session.addBaseTableOption(baseTable, options) - session.createTableInternal(tableIdent, provider, userSpecifiedSchema, - schemaDDL, mode, allOptions, isExternal, partitionColumns, bucketSpec, query) + session.createTableInternal(tableIdent, provider, userSpecifiedSchema, schemaDDL, mode, + allOptions, isExternal, partitionColumns, bucketSpec, query, comment, location) Nil } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index 02b0b7dff9..dce6c64081 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -40,7 +40,7 @@ import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.metric.SQLMetrics import org.apache.spark.sql.streaming.PhysicalDStreamPlan import org.apache.spark.sql.types.TypeUtilities -import org.apache.spark.sql.{DelegateRDD, SnappySession} +import org.apache.spark.sql.{DelegateRDD, SnappySession, SparkSupport} /** * :: DeveloperApi :: @@ -62,7 +62,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], rightSizeInBytes: BigInt, replicatedTableJoin: Boolean) extends NonRecursivePlans with BinaryExecNode with HashJoin - with SnappyJoinLike with BatchConsumer { + with SnappyJoinLike with BatchConsumer with SparkSupport { override def nodeName: String = "SnappyHashJoin" @@ -524,7 +524,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], val eval = evaluateRequiredVariables(buildPlan.output, buildVars, expr.references) // filter the output via condition - ctx.currentVars = input.map(_.copy(code = "")) ++ buildVars + ctx.currentVars = input.map(internals.copyExprCode(_, code = "")) ++ buildVars val ev = BindReferences.bindReference(expr, streamedPlan.output ++ buildPlan.output).genCode(ctx) (Some(ev), eval, condition) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index 9158cad3b4..ab4bf855f1 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -151,7 +151,7 @@ trait RowExec extends TableExec { | $stmt = $connTerm.prepareStatement("$pstmtStr"); | $result = 0L; | $mutateTable(); - | ${consume(ctx, Seq(ExprCode("", "false", result)))} + | ${consume(ctx, Seq(internals.newExprCode("", "false", result, classOf[Long])))} |} catch (java.sql.SQLException sqle) { | throw new java.io.IOException(sqle.toString(), sqle); |}$commitCode @@ -189,10 +189,10 @@ trait RowExec extends TableExec { val isNull = ctx.freshName("isNull") val field = ctx.freshName("field") val ev = input(col) - val dataType = ctx.javaType(f.dataType) + val dataType = internals.javaType(f.dataType, ctx) val columnSetterFunction = ctx.freshName("setColumnOfRow") val columnSetterCode = CodeGeneration.getColumnSetterFragment(col, f.dataType, - connProps.dialect, ev.copy(isNull = isNull, value = field), stmt, schemaFields, ctx) + connProps.dialect, internals.copyExprCode(ev, isNull, field), stmt, schemaFields, ctx) ctx.addNewFunction(columnSetterFunction, s""" |private void $columnSetterFunction(final boolean $isNull, @@ -200,7 +200,7 @@ trait RowExec extends TableExec { | $columnSetterCode |} """.stripMargin) - s"$columnSetterFunction(${ev.isNull}, ${ev.value});" + s"$columnSetterFunction(${internals.exprCodeIsNull(ev)}, ${internals.exprCodeValue(ev)});" }.mkString("\n") s""" |$inputCode diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 9c716873f9..b5da33711f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -158,7 +158,7 @@ abstract case class RowTableScan( private def genCodeCompactRowColumn(ctx: CodegenContext, rowVar: String, holder: String, ordinal: Int, dataType: DataType, nullable: Boolean): ExprCode = { - val javaType = ctx.javaType(dataType) + val javaType = internals.javaType(dataType, ctx) val col = ctx.freshName("col") val pos = ordinal + 1 var useHolder = true @@ -261,21 +261,21 @@ abstract case class RowTableScan( if (nullable) { val isNullVar = ctx.freshName("isNull") if (useHolder) { - ExprCode(s"$code\nfinal boolean $isNullVar = $holder.wasNullAndClear();", + internals.newExprCode(s"$code\nfinal boolean $isNullVar = $holder.wasNullAndClear();", isNullVar, col) } else { - ExprCode(s"$code\nfinal boolean $isNullVar = $col == null;", + internals.newExprCode(s"$code\nfinal boolean $isNullVar = $col == null;", isNullVar, col) } } else { - ExprCode(code, "false", col) + internals.newExprCode(code, "false", col) } } private def genCodeResultSetColumn(ctx: CodegenContext, rsVar: String, holder: String, ordinal: Int, dataType: DataType, nullable: Boolean): ExprCode = { - val javaType = ctx.javaType(dataType) + val javaType = internals.javaType(dataType, ctx) val col = ctx.freshName("col") val pos = ordinal + 1 val code = dataType match { @@ -380,10 +380,10 @@ abstract case class RowTableScan( } if (nullable) { val isNullVar = ctx.freshName("isNull") - ExprCode(code + s"\nfinal boolean $isNullVar = $rsVar.wasNull();", + internals.newExprCode(code + s"\nfinal boolean $isNullVar = $rsVar.wasNull();", isNullVar, col) } else { - ExprCode(code, "false", col) + internals.newExprCode(code, "false", col) } } } diff --git a/release/filehdr-mod.txt b/release/filehdr-mod.txt index 45fdd561b5..62afe02885 100644 --- a/release/filehdr-mod.txt +++ b/release/filehdr-mod.txt @@ -1,7 +1,7 @@ /* * Changes for TIBCO Project SnappyData data platform. * - * Portions Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Portions Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You diff --git a/release/filehdr.txt b/release/filehdr.txt index 0dcbd010ff..eda6fd14a3 100644 --- a/release/filehdr.txt +++ b/release/filehdr.txt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You diff --git a/settings.gradle b/settings.gradle index 4a30be3abb..b64e69ff2c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -34,6 +34,7 @@ include ':snappy-encoders_' + scalaBinaryVersion include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File project(':snappy-core_' + scalaBinaryVersion).projectDir = "$rootDir/core" as File @@ -47,6 +48,7 @@ project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoder project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0").projectDir = "$rootDir/core/compatibility/spark-2.1.0" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2").projectDir = "$rootDir/core/compatibility/spark-2.3.2" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4").projectDir = "$rootDir/core/compatibility/spark-2.4.4" as File if (sparkConnectorVersion != sparkVersion) { include ':snappy-core-product_' + scalaBinaryVersion diff --git a/store b/store index 8bdf142beb..422c769ddf 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 8bdf142beb59882cea7589dfffc5c8d78572a262 +Subproject commit 422c769ddfb313e3be6b67326b13d8e44587cf42 From 09289132fccdee63e124442e10cecf9e53877172 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 3 Feb 2020 11:13:55 +0530 Subject: [PATCH 35/80] more fixes for Spark 2.4.4 --- build.gradle | 2 +- .../io/snappydata/ToolsCallbackImpl.scala | 5 +- core/compatibility/spark-2.1.0/build.gradle | 1 + .../sql/internal/SnappySharedState21.java | 32 +++ .../sql/internal/Spark210Internals.scala | 109 ++++++++-- core/compatibility/spark-2.1.1/build.gradle | 1 + .../sql/internal/Spark211Internals.scala | 3 +- core/compatibility/spark-2.3.2/build.gradle | 4 +- .../sql/internal/SnappySharedState23.java | 32 +++ .../sql/internal/Spark232Internals.scala | 148 +++++++++++--- core/compatibility/spark-2.4.4/build.gradle | 2 + .../sql/internal/SnappySharedState24.java | 48 +++++ .../sql/internal/Spark244Internals.scala | 167 +++++++++++++++- .../spark/sql/internal/SnappySharedState.java | 34 +--- .../apache/spark/sql/SnappyBaseParser.scala | 4 + .../org/apache/spark/sql/SnappyContext.scala | 9 +- .../apache/spark/sql/SnappyDDLParser.scala | 18 +- .../org/apache/spark/sql/SnappyParser.scala | 115 ++++++----- .../org/apache/spark/sql/SnappySession.scala | 7 +- .../org/apache/spark/sql/SparkInternals.scala | 91 +++++++-- .../org/apache/spark/sql/SparkSupport.scala | 22 +- .../catalyst/expressions/DynamicInSet.scala | 16 +- .../DictionaryOptimizedMapAccessor.scala | 8 +- .../spark/sql/execution/EncoderScanExec.scala | 34 ++-- .../spark/sql/execution/ExistingPlans.scala | 6 +- .../aggregate/SnappyHashAggregateExec.scala | 12 +- .../execution/columnar/ColumnDeleteExec.scala | 8 +- .../execution/columnar/ColumnUpdateExec.scala | 2 +- .../sql/execution/common/attributes.scala | 188 ++++++++++++++++++ .../org/apache/spark/sql/execution/ddl.scala | 9 +- .../spark/sql/hive/SnappySessionState.scala | 16 +- .../sql/internal/SnappySessionCatalog.scala | 15 +- .../spark/sql/internal/UDFFunction.scala | 63 +++--- .../apache/spark/sql/internal/session.scala | 2 +- .../scala/org/apache/spark/sql/rdds.scala | 2 +- .../apache/spark/sql/sources/RuleUtils.scala | 6 +- .../sql/sources/SnappyOptimizations.scala | 2 +- .../spark/sql/store/CodeGeneration.scala | 54 ++--- spark | 2 +- store | 2 +- 40 files changed, 996 insertions(+), 305 deletions(-) create mode 100644 core/compatibility/spark-2.1.0/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java create mode 100644 core/compatibility/spark-2.3.2/src/main/java/org/apache/spark/sql/internal/SnappySharedState23.java create mode 100644 core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala diff --git a/build.gradle b/build.gradle index 53ee85236c..4981106634 100644 --- a/build.gradle +++ b/build.gradle @@ -137,7 +137,7 @@ allprojects { thriftVersion = '0.9.3' metricsVersion = '4.0.3' metrics2Version = '2.2.0' - janinoVersion = '3.0.8' + janinoVersion = '3.0.15' derbyVersion = '10.14.2.0' parboiledVersion = '2.1.5' tomcatJdbcVersion = '8.5.37' diff --git a/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala b/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala index f203e7d349..42a8c4a018 100644 --- a/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala +++ b/cluster/src/main/scala/io/snappydata/ToolsCallbackImpl.scala @@ -48,7 +48,7 @@ object ToolsCallbackImpl extends ToolsCallback with Logging { // Set SnappyData authenticator SecurityHandler. SparkCallbacks.getAuthenticatorForJettyServer() match { case Some(_) => - logInfo("Setting auth handler") + logInfo("Setting authentication handler") // Set JettyUtils.skipHandlerStart for adding dashboard and sql security handlers JettyUtils.skipHandlerStart.set(true) // Creating SQL and Dashboard UI tabs @@ -66,7 +66,8 @@ object ToolsCallbackImpl extends ToolsCallback with Logging { } // Unset JettyUtils.skipHandlerStart JettyUtils.skipHandlerStart.set(false) - case None => logDebug("Not setting auth handler") + case None => + logDebug("Not setting authentication handler") // Creating SQL and Dashboard UI tabs if (!sc.isLocal) { SparkSupport.internals(sc).createAndAttachSQLListener(sc) diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index 810153b256..7c8c464634 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -20,6 +20,7 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' sourceSets.main.scala.srcDir 'specific/scala' +sourceSets.main.scala.srcDir 'src/main/java' sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.1.0/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java b/core/compatibility/spark-2.1.0/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java new file mode 100644 index 0000000000..d9d6fb6879 --- /dev/null +++ b/core/compatibility/spark-2.1.0/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal; + +import org.apache.spark.SparkContext; +import org.apache.spark.sql.catalyst.catalog.ExternalCatalog; + +public final class SnappySharedState21 extends SnappySharedState { + + SnappySharedState21(SparkContext sparkContext) { + super(sparkContext); + } + + @Override + public ExternalCatalog externalCatalog() { + return getExternalCatalog(); + } +} diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index f0d2a84c4a..c4c8951871 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -31,9 +31,10 @@ import org.apache.spark.internal.config.ConfigBuilder import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder +import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec -import org.apache.spark.sql.catalyst.catalog._ +import org.apache.spark.sql.catalyst.catalog.{ExternalCatalog, _} import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} @@ -46,8 +47,9 @@ import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} import org.apache.spark.sql.execution._ -import org.apache.spark.sql.execution.columnar.ColumnTableScan -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, RunnableCommand} +import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, ExplainCommand, RunnableCommand} +import org.apache.spark.sql.execution.common.ErrorEstimateAttribute import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.row.RowTableScan @@ -70,7 +72,8 @@ class Spark210Internals extends SparkInternals { override def version: String = "2.1.0" - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { implicit val encoder: ExpressionEncoder[Row] = RowEncoder(plan.schema) spark.sharedState.cacheManager.uncacheQuery(Dataset(spark, plan), blocking) } @@ -227,13 +230,8 @@ class Spark210Internals extends SparkInternals { } } - def createAndAttachSQLListener(state: SharedState): Unit = { - // check that SparkSession.sqlListener should be set correctly - SparkSession.sqlListener.get() match { - case _: SnappySQLListener => - case l => - throw new IllegalStateException(s"expected SnappySQLListener to be set but was $l") - } + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + new SnappySharedState21(sparkContext) } def clearSQLListener(): Unit = { @@ -296,13 +294,26 @@ class Spark210Internals extends SparkInternals { SparkSubmitUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath, exclusions) } - override def copyAttribute(attr: Attribute)(name: String, + override def toAttributeReference(attr: Attribute)(name: String, dataType: DataType, nullable: Boolean, metadata: Metadata, exprId: ExprId): AttributeReference = { AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) } + override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Option[String], + isGenerated: Boolean): AttributeReference = { + AttributeReference(name, dataType, nullable, metadata)(exprId, qualifier, isGenerated) + } + + override def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute = { + ErrorEstimateAttribute21(name, dataType, nullable, metadata, exprId, realExprId)( + qualifier.headOption) + } + override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { insert.copy(child = newChild) } @@ -344,10 +355,10 @@ class Spark210Internals extends SparkInternals { override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = q.view - override def newAlias(child: Expression, name: String, - copyAlias: Option[NamedExpression]): Alias = { + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId, qualifier: Option[String]): Alias = { copyAlias match { - case None => Alias(child, name)() + case None => Alias(child, name)(exprId, qualifier) case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata, a.isGenerated) case Some(a) => Alias(child, name)(a.exprId, a.qualifier, isGenerated = a.isGenerated) @@ -656,6 +667,10 @@ class Spark210Internals extends SparkInternals { override def exprCodeIsNull(ev: ExprCode): String = ev.isNull + override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { + ev.isNull = isNull + } + override def exprCodeValue(ev: ExprCode): String = ev.value override def javaType(dt: DataType, ctx: CodegenContext): String = ctx.javaType(dt) @@ -691,6 +706,46 @@ class Spark210Internals extends SparkInternals { } Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) } + + override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { + pivot.copy(groupByExprs = groupByExprs) + } + + override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { + if (isAll) { + throw new ParseException(s"INTERSECT ALL not supported in spark $version") + } + Intersect(left, right) + } + + override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { + if (isAll) { + throw new ParseException(s"EXCEPT ALL not supported in spark $version") + } + Except(left, right) + } + + override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, + codegen: Boolean, cost: Boolean): LogicalPlan = { + if (cost) { + throw new ParseException(s"EXPLAIN COST not supported in spark $version") + } + ExplainCommand(logicalPlan, extended, codegen) + } + + override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { + relation.cachedColumnBuffers + } + + override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], + analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { + rules.flatMap { + case PromoteStrings => + (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: + PromoteStrings :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] + case r => r :: Nil + } + } } class SnappyEmbeddedHiveCatalog210(override val conf: SparkConf, @@ -846,6 +901,13 @@ class SnappySessionCatalog21(override val snappySession: SnappySession, super.failFunctionLookup(name) } + override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = super.createTable(table, ignoreIfExists) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { + createTableImpl(table, ignoreIfExists, validateTableLocation = true) + } + override def getTableMetadataOption(name: TableIdentifier): Option[CatalogTable] = { super.getTableMetadataOption(name) match { case None => None @@ -919,6 +981,7 @@ class SnappySessionState21(override val snappySession: SnappySession) override def optimizerBuilder(): Optimizer = { new SparkOptimizer(catalog, conf, experimentalMethods) with DefaultOptimizer { override def state: SnappySessionState = self + override def batches: Seq[Batch] = batchesImpl } } @@ -954,3 +1017,19 @@ class LogicalDStreamPlan21(output: Seq[Attribute], sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) ) } + +case class ErrorEstimateAttribute21(name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata, exprId: ExprId, realExprId: ExprId)( + val qualifier: Option[String]) extends ErrorEstimateAttribute { + + override def singleQualifier: Option[String] = qualifier + + override def withQualifier(newQualifier: Option[String]): Attribute = { + if (newQualifier == qualifier) { + this + } else { + ErrorEstimateAttribute21(name, dataType, nullable, metadata, exprId, + realExprId)(newQualifier) + } + } +} diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index 7c965e3138..0a6dc64105 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -21,6 +21,7 @@ compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with Spark 2.1.1 sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/scala" +sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/java" sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index 8916aaaf8c..0fbdb209e0 100644 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -36,7 +36,8 @@ class Spark211Internals extends Spark210Internals { override def version: String = "2.1.1" - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) } diff --git a/core/compatibility/spark-2.3.2/build.gradle b/core/compatibility/spark-2.3.2/build.gradle index 28e7d14df3..5d078244b4 100644 --- a/core/compatibility/spark-2.3.2/build.gradle +++ b/core/compatibility/spark-2.3.2/build.gradle @@ -19,9 +19,7 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -// directly include the base classes to ensure everything is compiled with Spark 2.3.2 -sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/scala" -sourceSets.main.scala.srcDir "../spark-${spark211Version}/src/main/scala" +sourceSets.main.scala.srcDir 'src/main/java' sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.3.2/src/main/java/org/apache/spark/sql/internal/SnappySharedState23.java b/core/compatibility/spark-2.3.2/src/main/java/org/apache/spark/sql/internal/SnappySharedState23.java new file mode 100644 index 0000000000..904cc1543b --- /dev/null +++ b/core/compatibility/spark-2.3.2/src/main/java/org/apache/spark/sql/internal/SnappySharedState23.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal; + +import org.apache.spark.SparkContext; +import org.apache.spark.sql.catalyst.catalog.ExternalCatalog; + +public final class SnappySharedState23 extends SnappySharedState { + + SnappySharedState23(SparkContext sparkContext) { + super(sparkContext); + } + + @Override + public ExternalCatalog externalCatalog() { + return getExternalCatalog(); + } +} diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index 51aa75cb22..ba8a836734 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -18,8 +18,6 @@ package org.apache.spark.sql.internal import java.lang.reflect.Field -import java.net.URI -import java.nio.file.Paths import scala.collection.mutable @@ -38,8 +36,8 @@ import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, Unres import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, Literal, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.optimizer.Optimizer import org.apache.spark.sql.catalyst.plans.logical._ @@ -48,16 +46,17 @@ import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{AccessUtils, FunctionIdentifier, InternalRow, TableIdentifier} import org.apache.spark.sql.execution.columnar.ColumnTableScan -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, RunnableCommand} +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, ExplainCommand, RunnableCommand} import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} import org.apache.spark.sql.execution._ +import org.apache.spark.sql.execution.common.ErrorEstimateAttribute import org.apache.spark.sql.hive._ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} -import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} +import org.apache.spark.sql.types.{DataType, Metadata, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext @@ -68,7 +67,7 @@ import org.apache.spark.{SparkConf, SparkContext} /** * Implementation of [[SparkInternals]] for Spark 2.3.2. */ -class Spark232Internals extends Spark211Internals with SparkInternals { +class Spark232Internals extends SparkInternals { private val codegenContextClassFunctions: Field = { val f = classOf[CodegenContext].getDeclaredField("classFunctions") @@ -78,6 +77,15 @@ class Spark232Internals extends Spark211Internals with SparkInternals { override def version: String = "2.3.2" + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) + } + + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + plan.mapExpressions(f) + } + override def registerFunction(session: SparkSession, name: FunctionIdentifier, info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { session.sessionState.functionRegistry.registerFunction(name, info, function) @@ -150,29 +158,34 @@ class Spark232Internals extends Spark211Internals with SparkInternals { CaseInsensitiveMap[String](map) } - // TODO: SW: inhibit SQLTab attach in SharedState.statusStore and instead do it - // here for embedded mode in the second call so that security policies are applied to the tab - def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { - // SQLAppStatusListener is created in the constructor of SharedState that needs to be overridden - } - - def createAndAttachSQLListener(state: SharedState): Unit = { + protected def createAndAttachSQLListener(state: SnappySharedState, sc: SparkContext): Unit = { // replace inside SQLAppStatusStore as well as change on the Spark ListenerBus val listenerField = classOf[SQLAppStatusStore].getDeclaredField("listener") listenerField.setAccessible(true) listenerField.get(state.statusStore).asInstanceOf[Option[SQLAppStatusListener]] match { case Some(_: SnappySQLAppListener) => // already changed case Some(_: SQLAppStatusListener) => - val newListener = new SnappySQLAppListener(state.sparkContext) + val newListener = new SnappySQLAppListener(sc) // update on ListenerBus - state.sparkContext.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( - state.sparkContext.removeSparkListener) - state.sparkContext.listenerBus.addToStatusQueue(newListener) + sc.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( + sc.removeSparkListener) + sc.listenerBus.addToStatusQueue(newListener) listenerField.set(state.statusStore, newListener) case _ => } } + override def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { + val state = SnappyContext.getExistingSharedState + if (state ne null) createAndAttachSQLListener(state, sparkContext) + } + + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + val state = new SnappySharedState23(sparkContext) + createAndAttachSQLListener(state, sparkContext) + state + } + def clearSQLListener(): Unit = { // no global SQLListener in Spark 2.3.x } @@ -225,13 +238,26 @@ class Spark232Internals extends Spark211Internals with SparkInternals { SparkSubmitUtils.buildIvySettings(remoteRepos, ivyPath), exclusions) } - override def copyAttribute(attr: Attribute)(name: String, + override def toAttributeReference(attr: Attribute)(name: String, dataType: DataType, nullable: Boolean, metadata: Metadata, exprId: ExprId): AttributeReference = { AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( exprId, qualifier = attr.qualifier) } + override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Option[String], + isGenerated: Boolean): AttributeReference = { + AttributeReference(name, dataType, nullable, metadata)(exprId, qualifier, isGenerated) + } + + override def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute = { + ErrorEstimateAttribute23(name, dataType, nullable, metadata, exprId, realExprId)( + qualifier.headOption) + } + override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { insert.copy(query = newChild) } @@ -271,10 +297,10 @@ class Spark232Internals extends Spark211Internals with SparkInternals { override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = None - override def newAlias(child: Expression, name: String, - copyAlias: Option[NamedExpression]): Alias = { + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId, qualifier: Option[String]): Alias = { copyAlias match { - case None => Alias(child, name)() + case None => Alias(child, name)(exprId, qualifier) case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) case Some(a) => Alias(child, name)(a.exprId, a.qualifier) } @@ -379,10 +405,6 @@ class Spark232Internals extends Spark211Internals with SparkInternals { rdd, relation, tableIdentifier) } - private def toURI(uri: String): URI = { - if (uri.contains("://")) new URI(uri) else new URI("file://" + Paths.get(uri).toAbsolutePath) - } - override def newCodegenSparkFallback(child: SparkPlan, session: SnappySession): CodegenSparkFallback = { new CodegenSparkFallback23(child, session) @@ -395,7 +417,7 @@ class Spark232Internals extends Spark211Internals with SparkInternals { override def newCatalogDatabase(name: String, description: String, locationUri: String, properties: Map[String, String]): CatalogDatabase = { - CatalogDatabase(name, description, toURI(locationUri), properties) + CatalogDatabase(name, description, CatalogUtils.stringToURI(locationUri), properties) } override def catalogDatabaseLocationURI(database: CatalogDatabase): String = @@ -426,6 +448,9 @@ class Spark232Internals extends Spark211Internals with SparkInternals { override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = None + override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = + catalogTable.schemaPreservesCase + override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = catalogTable.ignoredProperties @@ -438,8 +463,8 @@ class Spark232Internals extends Spark211Internals with SparkInternals { locationUri match { case None => CatalogStorageFormat(None, inputFormat, outputFormat, serde, compressed, properties) - case Some(uri) => CatalogStorageFormat(Some(toURI(uri)), inputFormat, outputFormat, - serde, compressed, properties) + case Some(uri) => CatalogStorageFormat(Some(CatalogUtils.stringToURL(uri)), + inputFormat, outputFormat, serde, compressed, properties) } } @@ -553,6 +578,38 @@ class Spark232Internals extends Spark211Internals with SparkInternals { override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { context.ui.get.store.rddList() } + + override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { + if (!pivotValues.forall(_.isInstanceOf[Literal])) { + throw new AnalysisException( + s"Literal expressions required for pivot values, found: ${pivotValues.mkString("; ")}") + } + Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) + } + + override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { + pivot.copy(groupByExprs = groupByExprs) + } + + override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { + if (isAll) { + throw new ParseException(s"INTERSECT ALL not supported in spark $version") + } + Intersect(left, right) + } + + override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { + if (isAll) { + throw new ParseException(s"EXCEPT ALL not supported in spark $version") + } + Except(left, right) + } + + override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, + codegen: Boolean, cost: Boolean): LogicalPlan = { + ExplainCommand(logicalPlan, extended, codegen, cost) + } } /** @@ -749,6 +806,13 @@ class SnappySessionCatalog23(override val snappySession: SnappySession, super.failFunctionLookup(FunctionIdentifier(name, None)) } + override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = super.createTable(table, ignoreIfExists) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { + createTableImpl(table, ignoreIfExists, validateTableLocation = true) + } + override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = View(desc = table, output = table.schema.toAttributes, child) @@ -797,8 +861,8 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se case _ => new SessionResourceLoader(session) } - private def createCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { - val catalog = new SnappySessionCatalog23( + protected def newSessionCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + new SnappySessionCatalog23( session, externalCatalog, session.sharedState.globalTempViewManager, @@ -808,6 +872,10 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se conf, SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf), wrapped) + } + + private def createCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + val catalog = newSessionCatalog(wrapped) parentState.foreach(_.catalog.copyStateTo(catalog)) catalog } @@ -863,6 +931,8 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se override def state: SnappySessionState = session.sessionState + override def batches: Seq[Batch] = batchesImpl + override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules } @@ -921,3 +991,19 @@ final class LogicalDStreamPlan23(output: Seq[Attribute], sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) ) } + +case class ErrorEstimateAttribute23(name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata, exprId: ExprId, realExprId: ExprId)( + val qualifier: Option[String]) extends ErrorEstimateAttribute { + + override def singleQualifier: Option[String] = qualifier + + override def withQualifier(newQualifier: Option[String]): Attribute = { + if (newQualifier == qualifier) { + this + } else { + ErrorEstimateAttribute23(name, dataType, nullable, metadata, exprId, + realExprId)(newQualifier) + } + } +} diff --git a/core/compatibility/spark-2.4.4/build.gradle b/core/compatibility/spark-2.4.4/build.gradle index a6b047f157..bc7c6052fd 100644 --- a/core/compatibility/spark-2.4.4/build.gradle +++ b/core/compatibility/spark-2.4.4/build.gradle @@ -21,6 +21,8 @@ compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with Spark 2.4.4 sourceSets.main.scala.srcDir "../spark-${spark232Version}/src/main/scala" +sourceSets.main.scala.srcDir "../spark-${spark232Version}/src/main/java" +sourceSets.main.scala.srcDir 'src/main/java' sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java b/core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java new file mode 100644 index 0000000000..7ec1a5e3ca --- /dev/null +++ b/core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal; + +import org.apache.spark.SparkContext; +import org.apache.spark.sql.catalyst.catalog.ExternalCatalogWithListener; + +public final class SnappySharedState24 extends SnappySharedState { + + private final ExternalCatalogWithListener catalogWrapper; + + SnappySharedState24(SparkContext sparkContext) { + super(sparkContext); + + if (this.embedCatalog != null) { + // Wrap to provide catalog events + this.catalogWrapper = new ExternalCatalogWithListener(this.embedCatalog); + // Make sure we propagate external catalog events to the spark listener bus + this.catalogWrapper.addListener(event -> sparkContext().listenerBus().post(event)); + } else { + this.catalogWrapper = null; + } + } + + @Override + public ExternalCatalogWithListener externalCatalog() { + if (this.initialized) { + return this.catalogWrapper; + } else { + // in super constructor, no harm in returning super's value at this point + return super.externalCatalog(); + } + } +} diff --git a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala index ee5c22b8d7..a1a50df2d6 100644 --- a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala +++ b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala @@ -16,20 +16,65 @@ */ package org.apache.spark.sql.internal -import org.apache.spark.sql.{SparkInternals, SparkSession} -import org.apache.spark.sql.catalyst.catalog.CatalogColumnStat -import org.apache.spark.sql.catalyst.expressions.{Expression, Literal, NamedExpression} +import io.snappydata.sql.catalog.SnappyExternalCatalog +import org.apache.hadoop.conf.Configuration + +import org.apache.spark.SparkContext +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, TypeCoercion} +import org.apache.spark.sql.catalyst.catalog.{CatalogColumnStat, CatalogTable, FunctionResourceLoader, GlobalTempViewManager} import org.apache.spark.sql.catalyst.expressions.codegen._ -import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, Pivot} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, NamedExpression} +import org.apache.spark.sql.catalyst.optimizer.Optimizer +import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, Except, Intersect, LogicalPlan, Pivot} import org.apache.spark.sql.catalyst.rules.Rule -import org.apache.spark.sql.execution.SparkPlan -import org.apache.spark.sql.types.{DataType, StructField} +import org.apache.spark.sql.execution.{SparkOptimizer, SparkPlan} +import org.apache.spark.sql.execution.columnar.InMemoryRelation +import org.apache.spark.sql.execution.common.ErrorEstimateAttribute +import org.apache.spark.sql.hive.{SnappyAnalyzer, SnappySessionState} +import org.apache.spark.sql.types.{DataType, Metadata, StructField} +import org.apache.spark.sql.{SnappySession, SnappySqlParser, SparkInternals, SparkSession} /** * Implementation of [[SparkInternals]] for Spark 2.4.4. */ class Spark244Internals extends Spark232Internals { + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, cascade, blocking) + } + + private def toQualifier(q: Option[String]): Seq[String] = if (q.isEmpty) Nil else q.get :: Nil + + override def toAttributeReference(attr: Attribute)(name: String, + dataType: DataType, nullable: Boolean, metadata: Metadata, + exprId: ExprId): AttributeReference = { + AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + exprId, qualifier = toQualifier(attr.qualifier)) + } + + override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Option[String], + isGenerated: Boolean): AttributeReference = { + AttributeReference(name, dataType, nullable, metadata)(exprId, toQualifier(qualifier)) + } + + override def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute = { + ErrorEstimateAttribute24(name, dataType, nullable, metadata, exprId, realExprId)(qualifier) + } + + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId, qualifier: Option[String]): Alias = { + copyAlias match { + case None => Alias(child, name)(exprId, toQualifier(qualifier)) + case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) + case Some(a) => Alias(child, name)(a.exprId, a.qualifier) + } + } + override def columnStatToMap(stat: Any, colName: String, dataType: DataType): Map[String, String] = { stat.asInstanceOf[CatalogColumnStat].toMap(colName) @@ -40,6 +85,16 @@ class Spark244Internals extends Spark232Internals { CatalogColumnStat.fromMap(table, field.name, map).map(_.toPlanStat(field.name, field.dataType)) } + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + val state = new SnappySharedState24(sparkContext) + createAndAttachSQLListener(state, sparkContext) + state + } + + override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { + new SnappySessionStateBuilder24(snappySession).build() + } + private def exprValue(v: String, javaClass: Class[_]): ExprValue = v match { case "false" => FalseLiteral case "true" => TrueLiteral @@ -70,6 +125,10 @@ class Spark244Internals extends Spark232Internals { override def exprCodeIsNull(ev: ExprCode): String = ev.isNull.code + override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { + ev.isNull = exprValue(isNull, classOf[Boolean]) + } + override def exprCodeValue(ev: ExprCode): String = ev.value.code override def javaType(dt: DataType, ctx: CodegenContext): String = CodeGenerator.javaType(dt) @@ -102,4 +161,100 @@ class Spark244Internals extends Spark232Internals { Pivot(if (groupByExprs.isEmpty) None else Some(groupByExprs), pivotColumn, pivotValues, aggregates, child) } + + override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { + pivot.copy(groupByExprsOpt = if (groupByExprs.isEmpty) None else Some(groupByExprs)) + } + + override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { + Intersect(left, right, isAll) + } + + override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { + Except(left, right, isAll) + } + + override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { + relation.cacheBuilder.cachedColumnBuffers + } + + override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], + analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { + rules.flatMap { + case _: TypeCoercion.PromoteStrings => + (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: + TypeCoercion.PromoteStrings(conf) :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] + case r => r :: Nil + } + } +} + +class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[SessionState] = None) + extends SnappySessionStateBuilder23(session, parentState) { + + override protected def newSessionCatalog( + wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + new SnappySessionCatalog24( + session, + externalCatalog, + session.sharedState.globalTempViewManager, + resourceLoader, + functionRegistry, + sqlParser, + conf, + SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf), + wrapped) + } + + override protected def optimizer: Optimizer = { + new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { + + override def state: SnappySessionState = session.sessionState + + override def defaultBatches: Seq[Batch] = batchesImpl + + override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = + super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules + } + } + + override protected def newBuilder: NewBuilder = (session, optState) => + new SnappySessionStateBuilder24(session.asInstanceOf[SnappySession], optState) +} + +class SnappySessionCatalog24(override val snappySession: SnappySession, + override val snappyExternalCatalog: SnappyExternalCatalog, + override val globalTempViewManager: GlobalTempViewManager, + override val functionResourceLoader: FunctionResourceLoader, + override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, + override val sqlConf: SQLConf, hadoopConf: Configuration, + override val wrappedCatalog: Option[SnappySessionCatalog]) + extends SnappySessionCatalog23(snappySession, snappyExternalCatalog, globalTempViewManager, + functionResourceLoader, functionRegistry, parser, sqlConf, hadoopConf, wrappedCatalog) { + + override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = { + super.createTable(table, ignoreIfExists, validateTableLocation) + } + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = { + createTableImpl(table, ignoreIfExists, validateTableLocation) + } +} + +case class ErrorEstimateAttribute24(name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata, exprId: ExprId, realExprId: ExprId)( + val qualifier: Seq[String]) extends ErrorEstimateAttribute { + + override def singleQualifier: Option[String] = qualifier.headOption + + override def withQualifier(newQualifier: Seq[String]): Attribute = { + if (newQualifier == qualifier) { + this + } else { + ErrorEstimateAttribute24(name, dataType, nullable, metadata, exprId, + realExprId)(newQualifier) + } + } } diff --git a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java index f15eb4aa54..6adde734ee 100644 --- a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java +++ b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java @@ -22,6 +22,7 @@ import org.apache.spark.sql.ClusterMode; import org.apache.spark.sql.SnappyContext; import org.apache.spark.sql.SnappySession; +import org.apache.spark.sql.SparkInternals; import org.apache.spark.sql.SparkSession; import org.apache.spark.sql.SparkSupport$; import org.apache.spark.sql.ThinClientConnectorMode; @@ -36,7 +37,7 @@ * class object but as a function rather than a "val" allowing to return * super.externalCatalog temporarily when it gets invoked in super's constructor. */ -public final class SnappySharedState extends SharedState { +public abstract class SnappySharedState extends SharedState { /** * Instance of SnappyData extended {@link CacheManager} to enable clearing cached plans. @@ -46,12 +47,12 @@ public final class SnappySharedState extends SharedState { /** * The ExternalCatalog implementation used for SnappyData in embedded mode. */ - private final SnappyHiveExternalCatalog embedCatalog; + final SnappyHiveExternalCatalog embedCatalog; /** * Used to skip initializing meta-store in super's constructor. */ - private final boolean initialized; + protected final boolean initialized; private static final String CATALOG_IMPLEMENTATION = StaticSQLConf.CATALOG_IMPLEMENTATION().key(); @@ -59,21 +60,7 @@ public final class SnappySharedState extends SharedState { private static final String WAREHOUSE_DIR = StaticSQLConf.WAREHOUSE_PATH().key(); - /** - * Create Snappy's SQL Listener instead of SQLListener (before SharedState creation). - */ - private static void createListenerAndUI(SparkContext sc) { - SparkSupport$.MODULE$.internals(sc).createAndAttachSQLListener(sc); - } - - /** - * Create Snappy's SQL Listener instead of SQLListener (post SharedState creation). - */ - private void createListenerAndUI() { - SparkSupport$.MODULE$.internals(sparkContext()).createAndAttachSQLListener(this); - } - - private SnappySharedState(SparkContext sparkContext) { + SnappySharedState(SparkContext sparkContext) { super(sparkContext); // avoid inheritance of activeSession @@ -104,11 +91,11 @@ public static synchronized SnappySharedState create(SparkContext sparkContext) { // always use default local path for warehouse dir (not used by SD but required by hive client) sparkContext.conf().set(WAREHOUSE_DIR, StaticSQLConf.WAREHOUSE_PATH().defaultValueString()); - createListenerAndUI(sparkContext); + SparkInternals internals = SparkSupport$.MODULE$.internals(sparkContext); + // create Snappy's SQL Listener instead of SQLListener (before SharedState creation) + internals.createAndAttachSQLListener(sparkContext); - final SnappySharedState sharedState = new SnappySharedState(sparkContext); - // new Spark versions initialize the UI listener in constructor which is updated next - sharedState.createListenerAndUI(); + final SnappySharedState sharedState = internals.newSharedState(sparkContext); // reset the temporary confs to original if (catalogImpl != null) { @@ -154,8 +141,7 @@ public CacheManager cacheManager() { } } - @Override - public ExternalCatalog externalCatalog() { + protected ExternalCatalog getExternalCatalog() { if (this.initialized) { // noinspection RedundantCast return (ExternalCatalog)this.embedCatalog; diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala index c308e4ece8..68da8ce32c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala @@ -666,6 +666,7 @@ object SnappyParserConsts { final val BUCKETS: Keyword = new Keyword("buckets") final val CACHE: Keyword = new Keyword("cache") final val CASCADE: Keyword = new Keyword("cascade") + final val CHANGE: Keyword = new Keyword("change") final val CHECK: Keyword = new Keyword("check") final val CONSTRAINT: Keyword = new Keyword("constraint") final val CLUSTER: Keyword = new Keyword("cluster") @@ -673,9 +674,11 @@ object SnappyParserConsts { final val CODEGEN: Keyword = new Keyword("codegen") final val COLUMNS: Keyword = new Keyword("columns") final val COMPUTE: Keyword = new Keyword("compute") + final val COST: Keyword = new Keyword("cost") final val DATABASE: Keyword = new Keyword("database") final val DATABASES: Keyword = new Keyword("databases") final val DEPLOY: Keyword = new Keyword("deploy") + final val DIRECTORY: Keyword = new Keyword("directory") final val DISKSTORE: Keyword = new Keyword("diskstore") final val FOREIGN: Keyword = new Keyword("foreign") final val FORMAT: Keyword = new Keyword("format") @@ -690,6 +693,7 @@ object SnappyParserConsts { final val LEVEL: Keyword = new Keyword("level") final val LIST: Keyword = new Keyword("list") final val LOAD: Keyword = new Keyword("load") + final val LOCAL: Keyword = new Keyword("local") final val LOCATION: Keyword = new Keyword("location") final val MEMBERS: Keyword = new Keyword("members") final val MSCK: Keyword = new Keyword("msck") diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 006f7f69d6..ad156f0137 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -1091,7 +1091,10 @@ object SnappyContext extends Logging { contextLock.synchronized { if (!_globalSNContextInitialized) { initGlobalSparkContext(sc) - _sharedState = SnappySharedState.create(sc) + val state = _sharedState + if ((state eq null) || (state.sparkContext ne sc)) { + _sharedState = SnappySharedState.create(sc) + } _globalClear = session.contextFunctions.clearStatic() // replay global sql commands if (ToolsCallbackInit.toolsCallback ne null) { @@ -1173,6 +1176,10 @@ object SnappyContext extends Logging { } } + private[sql] def getExistingSharedState: SnappySharedState = { + contextLock.synchronized(_sharedState) + } + def newHiveSession(): SparkSession = contextLock.synchronized { val sc = globalSparkContext sc.conf.set(StaticSQLConf.CATALOG_IMPLEMENTATION.key, "hive") diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index ebb374abc7..56b41d20ed 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -114,6 +114,7 @@ abstract class SnappyDDLParser(session: SnappySession) final def CACHE: Rule0 = rule { keyword(Consts.CACHE) } final def CALL: Rule0 = rule{ keyword(Consts.CALL) } final def CASCADE: Rule0 = rule { keyword(Consts.CASCADE) } + final def CHANGE: Rule0 = rule { keyword(Consts.CHANGE) } final def CHECK: Rule0 = rule { keyword(Consts.CHECK) } final def CLEAR: Rule0 = rule { keyword(Consts.CLEAR) } final def CLUSTER: Rule0 = rule { keyword(Consts.CLUSTER) } @@ -124,12 +125,14 @@ abstract class SnappyDDLParser(session: SnappySession) final def COMMENT: Rule0 = rule { keyword(Consts.COMMENT) } final def COMPUTE: Rule0 = rule { keyword(Consts.COMPUTE) } final def CONSTRAINT: Rule0 = rule { keyword(Consts.CONSTRAINT) } + final def COST: Rule0 = rule { keyword(Consts.COST) } final def CROSS: Rule0 = rule { keyword(Consts.CROSS) } final def CURRENT_USER: Rule0 = rule { keyword(Consts.CURRENT_USER) } final def DEPLOY: Rule0 = rule { keyword(Consts.DEPLOY) } final def DATABASE: Rule0 = rule { keyword(Consts.DATABASE) } final def DATABASES: Rule0 = rule { keyword(Consts.DATABASES) } final def DESCRIBE: Rule0 = rule { keyword(Consts.DESCRIBE) } + final def DIRECTORY: Rule0 = rule { keyword(Consts.DIRECTORY) } final def DISABLE: Rule0 = rule { keyword(Consts.DISABLE) } final def DISTRIBUTE: Rule0 = rule { keyword(Consts.DISTRIBUTE) } final def DISKSTORE: Rule0 = rule { keyword(Consts.DISKSTORE) } @@ -164,6 +167,7 @@ abstract class SnappyDDLParser(session: SnappySession) final def LIMIT: Rule0 = rule { keyword(Consts.LIMIT) } final def LIST: Rule0 = rule { keyword(Consts.LIST) } final def LOAD: Rule0 = rule { keyword(Consts.LOAD) } + final def LOCAL: Rule0 = rule { keyword(Consts.LOCAL) } final def LOCATION: Rule0 = rule { keyword(Consts.LOCATION) } final def MEMBERS: Rule0 = rule { keyword(Consts.MEMBERS) } final def MINUS: Rule0 = rule { keyword(Consts.MINUS) } @@ -656,18 +660,20 @@ abstract class SnappyDDLParser(session: SnappySession) ALTER ~ TABLE ~ tableIdentifier ~ ( (ADD ~ push(true) | DROP ~ push(false)) ~ ( // other store ALTER statements which don't effect the snappydata catalog - capture((PRIMARY | CONSTRAINT | CHECK | FOREIGN | UNIQUE) ~ ANY. +) ~ EOI ~> + capture((PRIMARY | CONSTRAINT | CHECK | FOREIGN | UNIQUE) ~ ANY. +) ~> ((table: TableIdentifier, isAdd: Boolean, s: String) => AlterTableMiscCommand(table, s"ALTER TABLE ${quotedUppercaseId(table)} " + s"${if (isAdd) "ADD" else "DROP"} $s")) | COLUMNS ~ ANY. + ~> ((_: TableIdentifier, _: Boolean) => sparkParser.parsePlan(input.sliceString(0, input.length))) ) | - ADD ~ COLUMN.? ~ column ~ capture(ANY.*) ~ EOI ~> AlterTableAddColumnCommand | - DROP ~ COLUMN.? ~ identifier ~ capture(ANY.*) ~ EOI ~> AlterTableDropColumnCommand | + ADD ~ COLUMN.? ~ column ~ capture(ANY.*) ~> AlterTableAddColumnCommand | + DROP ~ COLUMN.? ~ identifier ~ capture(ANY.*) ~> AlterTableDropColumnCommand | // other store ALTER statements which don't effect the snappydata catalog - capture((ALTER | SET) ~ ANY. +) ~ EOI ~> ((table: TableIdentifier, s: String) => - AlterTableMiscCommand(table, s"ALTER TABLE ${quotedUppercaseId(table)} $s")) + capture((ALTER | SET) ~ ANY. +) ~> ((table: TableIdentifier, s: String) => + AlterTableMiscCommand(table, s"ALTER TABLE ${quotedUppercaseId(table)} $s")) | + partitionSpec.? ~ CHANGE ~ ANY. + ~> ((_: TableIdentifier, _: Any) => + sparkParser.parsePlan(input.sliceString(0, input.length))) ) } @@ -790,7 +796,7 @@ abstract class SnappyDDLParser(session: SnappySession) ( ADD | ANALYZE | ALTER ~ (DATABASE | TABLE | VIEW) | CREATE ~ DATABASE | DESCRIBE | DESC | DROP ~ DATABASE | LIST | LOAD | MSCK | REFRESH | SHOW | TRUNCATE - ) ~ ANY.* ~ EOI ~> + ) ~ ANY.* ~> (() => sparkParser.parsePlan(input.sliceString(0, input.length))) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 02ca03cbcf..36e171c8ef 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -697,7 +697,7 @@ class SnappyParser(session: SnappySession) WindowLogicalPlan(win._1, win._2, internals.newUnresolvedRelation(tableIdent, None)) }) ) | - '(' ~ ws ~ start ~ ')' ~ ws ~ streamWindowOptions.? ~> { (child: LogicalPlan, w: Any) => + '(' ~ ws ~ queryNoWith ~ ')' ~ ws ~ streamWindowOptions.? ~> { (child: LogicalPlan, w: Any) => w.asInstanceOf[Option[(Duration, Option[Duration])]] match { case None => child case Some(win) => WindowLogicalPlan(win._1, win._2, child) @@ -780,7 +780,7 @@ class SnappyParser(session: SnappySession) session.sessionState.conf.numShufflePartitions, l)))).? ~ (WINDOW ~ ((identifier ~ AS ~ windowSpec ~> ((id: String, w: WindowSpec) => id -> w)) + commaSep)).? ~ - ((LIMIT ~ expressionNoTokens) | fetchExpression).? ~> { + ((LIMIT ~ (capture(ALL) | expressionNoTokens)) | fetchExpression).? ~> { (o: Any, w: Any, e: Any) => (l: LogicalPlan) => val withOrder = o.asInstanceOf[Option[LogicalPlan => LogicalPlan]] .map(_ (l)).getOrElse(l) @@ -801,7 +801,10 @@ class SnappyParser(session: SnappySession) // Note that mapValues creates a view, so force materialization. WithWindowDefinition(windowMapView.map(identity), withOrder) }.getOrElse(withOrder) - e.asInstanceOf[Option[Expression]].map(Limit(_, window)).getOrElse(window) + e match { + case Some(e: Expression) => Limit(e, window) + case _ => window + } } } @@ -983,17 +986,17 @@ class SnappyParser(session: SnappySession) } UnresolvedFunction(fnName, UnresolvedStar(None) :: Nil, isDistinct = false) }) | - (DISTINCT ~ push(true)).? ~ (expression * commaSep) ~ ')' ~ ws ~ - (OVER ~ windowSpec).? ~> { (n1: String, n2: Any, d: Any, e: Any, w: Any) => + setQuantifier ~ (expression * commaSep) ~ ')' ~ ws ~ + (OVER ~ windowSpec).? ~> { (n1: String, n2: Any, d: Option[Boolean], e: Any, w: Any) => val fnName = n2.asInstanceOf[Option[String]] match { case None => new FunctionIdentifier(n1) case Some(f) => new FunctionIdentifier(f, Some(n1)) } val allExprs = e.asInstanceOf[Seq[Expression]].toIndexedSeq val exprs = foldableFunctionsExpressionHandler(allExprs, n1) - val function = if (d.asInstanceOf[Option[Boolean]].isEmpty) { + val function = if (d.contains(false)) { UnresolvedFunction(fnName, exprs, isDistinct = false) - } else if (fnName.funcName.equalsIgnoreCase("COUNT")) { + } else if (fnName.funcName.equalsIgnoreCase("count")) { aggregate.Count(exprs).toAggregateExpression(isDistinct = true) } else { UnresolvedFunction(fnName, exprs, isDistinct = true) @@ -1068,6 +1071,11 @@ class SnappyParser(session: SnappySession) case _ => UnresolvedAlias(e) } + // noinspection MutatorLikeMethodIsParameterless + protected final def setQuantifier: Rule1[Option[Boolean]] = rule { + (ALL ~ push(true) | DISTINCT ~ push(false)).? ~> ((e: Any) => e.asInstanceOf[Option[Boolean]]) + } + protected def select: Rule1[LogicalPlan] = rule { SELECT ~ (DISTINCT ~ push(true)).? ~ TOKENIZE_BEGIN ~ namedExpressionSeq ~ TOKENIZE_END ~ @@ -1097,7 +1105,8 @@ class SnappyParser(session: SnappySession) case "GROUPINGSETS" => extractGroupingSet(withFilter(base), expressions, x._1, x._2) // pivot with group by cols case _ if base.isInstanceOf[Pivot] => - val newPlan = withFilter(base.asInstanceOf[Pivot].copy(groupByExprs = x._1.map(named))) + val newPlan = withFilter(internals.copyPivot(base.asInstanceOf[Pivot], + groupByExprs = x._1.map(named))) if (p.length == 1 && p.head.isInstanceOf[UnresolvedStar]) newPlan else Project(expressions, newPlan) // just "group by cols" @@ -1117,57 +1126,42 @@ class SnappyParser(session: SnappySession) } } - protected final def select2: Rule1[LogicalPlan] = rule { - select | ('(' ~ ws ~ select ~ ')' ~ ws) - } - - protected final def select1: Rule1[LogicalPlan] = rule { - select2 | inlineTable | ctes - } - - protected final def select0: Rule1[LogicalPlan] = rule { - select1.named("select") ~ ( - UNION ~ ( - ALL ~ select1.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Union(q1, q2)) | - DISTINCT.? ~ select1.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Distinct(Union(q1, q2))) - ) | - INTERSECT ~ select1.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Intersect(q1, q2)) | - (EXCEPT | MINUS) ~ select1.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Except(q1, q2)) - + protected final def queryPrimary: Rule1[LogicalPlan] = rule { + select | + TABLE ~ tableIdentifier ~> ((r: TableIdentifier) => internals.newUnresolvedRelation(r, None)) | + inlineTable | + ('(' ~ ws ~ queryNoWith ~ ')' ~ ws) + } + + protected final def queryTerm: Rule1[LogicalPlan] = rule { + queryPrimary.named("select") ~ ( + UNION ~ setQuantifier ~ queryPrimary.named("select") ~> + ((q1: LogicalPlan, quantifier: Option[Boolean], q2: LogicalPlan) => + if (quantifier.contains(true)) Union(q1, q2) else Distinct(Union(q1, q2))) | + INTERSECT ~ setQuantifier ~ queryPrimary.named("select") ~> + ((q1: LogicalPlan, quantifier: Option[Boolean], q2: LogicalPlan) => + internals.newIntersect(q1, q2, quantifier.contains(true))) | + (EXCEPT | MINUS) ~ setQuantifier ~ queryPrimary.named("select") ~> + ((q1: LogicalPlan, quantifier: Option[Boolean], q2: LogicalPlan) => + internals.newExcept(q1, q2, quantifier.contains(true))) ).* } // noinspection ScalaUnnecessaryParentheses protected final def query: Rule1[LogicalPlan] = rule { - select0 | + queryNoWith | ctes + } + + // noinspection ScalaUnnecessaryParentheses + protected final def queryNoWith: Rule1[LogicalPlan] = rule { + queryTerm | FROM ~ relations ~> (_fromRelations.push(_): Unit) ~ - (select0 | insert). + ~> { (queries: Seq[LogicalPlan]) => + (queryTerm | insert). + ~> { (queries: Seq[LogicalPlan]) => _fromRelations.pop() if (queries.length == 1) queries.head else Union(queries) } } - // TODO: remove once planner allows for null padding for different number - // of columns being inserted/put either with inlineTable or subselect - protected final def subSelectQuery: Rule1[LogicalPlan] = rule { - select2.named("select") ~ ( - UNION ~ ( - ALL ~ select2.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Union(q1, q2)) | - DISTINCT.? ~ select2.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Distinct(Union(q1, q2))) - ) | - INTERSECT ~ select2.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Intersect(q1, q2)) | - (EXCEPT | MINUS) ~ select2.named("select") ~> - ((q1: LogicalPlan, q2: LogicalPlan) => Except(q1, q2)) - ).* - } - protected final def lateralView: Rule1[LogicalPlan => LogicalPlan] = rule { LATERAL ~ VIEW ~ (OUTER ~ push(true)).? ~ functionIdentifier ~ expressionList ~ identifier ~ (AS.? ~ (identifier + commaSep)).? ~> @@ -1199,13 +1193,15 @@ class SnappyParser(session: SnappySession) protected final def insert: Rule1[LogicalPlan] = rule { INSERT ~ ((OVERWRITE ~ push(true)) | (INTO ~ push(false))) ~ - TABLE.? ~ baseRelation ~ subSelectQuery ~> ((overwrite: Boolean, r: LogicalPlan, + TABLE.? ~ baseRelation ~ queryTerm ~> ((overwrite: Boolean, r: LogicalPlan, s: LogicalPlan) => internals.newInsertPlanWithCountOutput( - r, Map.empty[String, Option[String]], s, overwrite, ifNotExists = false)) + r, Map.empty[String, Option[String]], s, overwrite, ifNotExists = false)) | + INSERT ~ OVERWRITE ~ LOCAL.? ~ DIRECTORY ~ ANY. + ~> (() => + sparkParser.parsePlan(input.sliceString(0, input.length))) } protected final def put: Rule1[LogicalPlan] = rule { - PUT ~ INTO ~ TABLE.? ~ baseRelation ~ subSelectQuery ~> PutIntoTable + PUT ~ INTO ~ TABLE.? ~ baseRelation ~ queryTerm ~> PutIntoTable } protected final def update: Rule1[LogicalPlan] = rule { @@ -1241,7 +1237,7 @@ class SnappyParser(session: SnappySession) protected final def ctes: Rule1[LogicalPlan] = rule { WITH ~ ((identifier ~ AS.? ~ '(' ~ ws ~ query ~ ')' ~ ws ~> ((id: String, p: LogicalPlan) => (id, p))) + commaSep) ~ - (query | insert) ~> ((r: Seq[(String, LogicalPlan)], s: LogicalPlan) => + queryNoWith ~> ((r: Seq[(String, LogicalPlan)], s: LogicalPlan) => With(s, r.map(ns => (ns._1, internals.newSubqueryAlias(ns._1, ns._2))))) } @@ -1276,9 +1272,10 @@ class SnappyParser(session: SnappySession) } // It can be the following patterns: - // SHOW TABLES IN schema; + // SHOW TABLES (FROM | IN) schema; + // SHOW TABLE EXTENDED (FROM | IN) schema ...; // SHOW DATABASES; - // SHOW COLUMNS IN table; + // SHOW COLUMNS (FROM | IN) table; // SHOW TBLPROPERTIES table; // SHOW FUNCTIONS; // SHOW FUNCTIONS mydb.func1; @@ -1288,6 +1285,7 @@ class SnappyParser(session: SnappySession) SHOW ~ TABLES ~ ((FROM | IN) ~ identifier).? ~ (LIKE.? ~ stringLiteral).? ~> ((id: Any, pat: Any) => new ShowSnappyTablesCommand(session, id.asInstanceOf[Option[String]], pat.asInstanceOf[Option[String]])) | + SHOW ~ TABLE ~ ANY. + ~> (() => sparkParser.parsePlan(input.sliceString(0, input.length))) | SHOW ~ VIEWS ~ ((FROM | IN) ~ identifier).? ~ (LIKE.? ~ stringLiteral).? ~> ((id: Any, pat: Any) => ShowViewsCommand(session, id.asInstanceOf[Option[String]], pat.asInstanceOf[Option[String]])) | @@ -1330,14 +1328,15 @@ class SnappyParser(session: SnappySession) } protected final def explain: Rule1[LogicalPlan] = rule { - EXPLAIN ~ (EXTENDED ~ push(true) | CODEGEN ~ push(false)).? ~ sql ~> ((flagVal: Any, + EXPLAIN ~ (EXTENDED ~ push(1) | CODEGEN ~ push(2) | COST ~ push(3)).? ~ sql ~> ((flagVal: Any, plan: LogicalPlan) => plan match { case _: DescribeTableCommand => ExplainCommand(OneRowRelation.asInstanceOf[LogicalPlan]) case _ => - val flag = flagVal.asInstanceOf[Option[Boolean]] + val flag = flagVal.asInstanceOf[Option[Int]] // ensure plan is sent back as CLOB for large plans especially with CODEGEN queryHints.put(QueryHint.ColumnsAsClob.toString, "*") - ExplainCommand(plan, extended = flag.contains(true), codegen = flag.contains(false)) + internals.newExplainCommand(plan, extended = flag.contains(1), + codegen = flag.contains(2), cost = flag.contains(3)) }) } @@ -1387,7 +1386,7 @@ class SnappyParser(session: SnappySession) } override protected def start: Rule1[LogicalPlan] = rule { - (ENABLE_TOKENIZE ~ (query.named("select") | insert | put | update | delete | ctes)) | + (ENABLE_TOKENIZE ~ (query.named("select") | insert | put | update | delete)) | (DISABLE_TOKENIZE ~ (dmlOperation | putValuesOperation | ddl | show | set | reset | cache | uncache | deployPackages | explain | analyze | delegateToSpark)) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 49a7f17c1c..ff22dd2319 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -1391,17 +1391,16 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } } // if there is no path option for external DataSources, then mark as MANAGED except for JDBC - var storage = DataSource.buildStorageFormatFromOptions(fullOptions) - // check for both LOCATION and 'path' in OPTIONS if (location.isDefined) { - if (storage.locationUri.isDefined) { + if (parameters.contains("path")) { throw new ParseException( "LOCATION and 'path' in OPTIONS are both used to indicate the custom table path, " + "you can only specify one of them.") } else { - storage = storage.copy(locationUri = location) + fullOptions += "path" -> location.get } } + val storage = DataSource.buildStorageFormatFromOptions(fullOptions) val tableType = if (!providerIsBuiltIn && storage.locationUri.isEmpty && !Utils.toLowerCase(provider).contains("jdbc")) { CatalogTableType.MANAGED diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 84011228c7..79c7ddb5e1 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -33,14 +33,15 @@ import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} -import org.apache.spark.sql.execution.columnar.ColumnTableScan +import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} import org.apache.spark.sql.execution.command.RunnableCommand +import org.apache.spark.sql.execution.common.ErrorEstimateAttribute import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} -import org.apache.spark.sql.hive.{SnappyHiveExternalCatalog, SnappySessionState} -import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SharedState} +import org.apache.spark.sql.hive.{SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SnappySharedState} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.streaming.LogicalDStreamPlan import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} @@ -76,7 +77,8 @@ trait SparkInternals extends Logging { /** * Remove any cached data of Dataset.persist for given plan. */ - def uncacheQuery(spark: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit + def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit /** * Apply a mapping function on all expressions in the given logical plan @@ -185,26 +187,16 @@ trait SparkInternals extends Logging { * b) shortens the SQL string to display properly in the UI (CachedDataFrame already * takes care of posting the SQL string rather than method name unlike Spark). *

- * This variant is invoked before initialization of SharedState for Spark versions - * where listener is attached independently of SharedState before latter is created. + * This is invoked before initialization of SharedState for Spark releases + * where listener is attached independently of SharedState before latter is created + * while it is invoked after initialization of SharedState for newer Spark versions. */ def createAndAttachSQLListener(sparkContext: SparkContext): Unit /** - * Create a new SQL listener with SnappyData extensions and attach to the SparkUI. - * The extension provides handling of: - *

- * a) combining the two part execution with CachedDataFrame where first execution - * does the caching ("prepare" phase) along with the actual execution while subsequent - * executions only do the latter - *

- * b) shortens the SQL string to display properly in the UI (CachedDataFrame already - * takes care of posting the SQL string rather than method name unlike Spark). - *

- * This variant is invoked after initialization of SharedState for Spark versions - * where listener is attached as part of SharedState creation. + * Create a new global instance of [[SnappySharedState]]. */ - def createAndAttachSQLListener(state: SharedState): Unit + def newSharedState(sparkContext: SparkContext): SnappySharedState /** * Clear any global SQL listener. @@ -262,10 +254,24 @@ trait SparkInternals extends Logging { /** * Create a copy of [[Attribute]] as [[AttributeReference]] with given arguments. */ - def copyAttribute(attr: Attribute)(name: String = attr.name, + def toAttributeReference(attr: Attribute)(name: String = attr.name, dataType: DataType = attr.dataType, nullable: Boolean = attr.nullable, metadata: Metadata = attr.metadata, exprId: ExprId = attr.exprId): AttributeReference + /** + * Create a new instance of [[AttributeReference]] + */ + def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Option[String], + isGenerated: Boolean = false): AttributeReference + + /** + * Create a new concrete instance of [[ErrorEstimateAttribute]]. + */ + def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute + /** * Create a copy of [[InsertIntoTable]] plan with a new child. */ @@ -317,7 +323,8 @@ trait SparkInternals extends Logging { /** * Create an alias with given parameters and optionally copying other fields from existing Alias. */ - def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression]): Alias + def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId = NamedExpression.newExprId, qualifier: Option[String] = None): Alias /** * Create a plan for column aliases in a table/sub-query/... @@ -624,6 +631,11 @@ trait SparkInternals extends Logging { */ def exprCodeIsNull(ev: ExprCode): String + /** + * Set the isNull field of [[ExprCode]]. + */ + def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit + /** * Get the string for value field of [[ExprCode]]. */ @@ -669,6 +681,43 @@ trait SparkInternals extends Logging { */ def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot + + /** + * Create a copy of [[Pivot]] plan with a new set of groupBy expressions. + */ + def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot + + /** + * Create a new instance of [[Intersect]] plan. + */ + def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect + + /** + * Create a new instance of [[Except]] plan. + */ + def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except + + /** + * Create a plan for explain command. + */ + def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, + codegen: Boolean, cost: Boolean): LogicalPlan + + /** + * Get the internal cached RDD for an in-memory relation. + */ + def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] + + /** + * Add SnappyData custom string promotion rules to deal with ParamLiterals. + */ + def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], + analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] + + def createTable(catalog: SessionCatalog, tableDefinition: CatalogTable, + ignoreIfExists: Boolean, validateLocation: Boolean): Unit = { + catalog.createTable(tableDefinition, ignoreIfExists) + } } /** diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index 5c7a2ecaa5..6d69b995fd 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -70,6 +70,17 @@ object SparkSupport extends Logging { } else None } + /** + * List all the supported Spark versions below. All implementations are required to + * have a public constructor having current SparkContext as the one argument. + */ + private val implementations: Map[String, String] = Map( + "2.1.0" -> s"$INTERNAL_PACKAGE.Spark210Internals", + "2.1.1" -> s"$INTERNAL_PACKAGE.Spark211Internals", + "2.3.2" -> s"$INTERNAL_PACKAGE.Spark232Internals", + "2.4.4" -> s"$INTERNAL_PACKAGE.Spark244Internals" + ) + /** * Get the appropriate [[SparkInternals]] for current SparkContext version. */ @@ -84,14 +95,9 @@ object SparkSupport extends Logging { case EXTENDED_VERSION_PATTERN(v) => v case v => v } - val implClassName = sparkVersion match { - // list all the supported versions below; all implementations are required to - // have a public constructor having current SparkContext as the one argument - case "2.1.0" => s"$INTERNAL_PACKAGE.Spark210Internals" - case "2.1.1" => s"$INTERNAL_PACKAGE.Spark211Internals" - case "2.3.2" => s"$INTERNAL_PACKAGE.Spark232Internals" - case "2.4.4" => s"$INTERNAL_PACKAGE.Spark244Internals" - case v => throw new SparkException(s"Unsupported Spark version $v") + val implClassName = implementations.get(sparkVersion) match { + case Some(v) => v + case None => throw new SparkException(s"Unsupported Spark version $sparkVersion") } val implClass: Class[_] = Utils.classForName(implClassName) internalImpl = implClass.newInstance().asInstanceOf[SparkInternals] diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala index 5b906c5327..b8236cf822 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala @@ -97,15 +97,17 @@ case class DynamicInSet(child: Expression, hset: IndexedSeq[Expression]) |} """.stripMargin) + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) internals.copyExprCode(ev, code = s""" - ${childGen.code} - boolean ${ev.isNull} = ${childGen.isNull}; - boolean ${ev.value} = false; - if (!${ev.isNull}) { - ${ev.value} = $hsetTerm.containsKey(${childGen.value}); - if (!${ev.value} && $hasNullTerm) { - ${ev.isNull} = true; + ${childGen.code.toString} + boolean $evIsNull = ${internals.exprCodeValue(childGen)}; + boolean $evValue = false; + if (!$evIsNull) { + $evValue = $hsetTerm.containsKey(${internals.exprCodeValue(childGen)}); + if (!$evValue && $hasNullTerm) { + $evIsNull = true; } } """) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala index 4904ba0f55..cc4b83274f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala @@ -79,7 +79,7 @@ object DictionaryOptimizedMapAccessor extends SparkSupport { keyVars: => Seq[ExprCode], ctx: CodegenContext, session: SnappySession): Option[DictionaryCode] = { if (canHaveSingleKeyCase(keyExpressions)) { - session.getDictionaryCode(ctx, keyVars.head.value) + session.getDictionaryCode(ctx, internals.exprCodeValue(keyVars.head)) } else None } @@ -88,7 +88,7 @@ object DictionaryOptimizedMapAccessor extends SparkSupport { resultVar: String, valueInit: String, continueOnNull: Boolean, accessor: ObjectHashMapAccessor): String = { val key = ctx.freshName("dictionaryKey") - val keyIndex = keyDictVar.dictionaryIndex.value + val keyIndex = internals.exprCodeValue(keyDictVar.dictionaryIndex) val keyNull = internals.exprCodeIsNull(keyVar) != "false" val keyValue = internals.exprCodeValue(keyVar) val keyEv = internals.copyExprCode(keyVar, code = "", @@ -128,7 +128,7 @@ object DictionaryOptimizedMapAccessor extends SparkSupport { // if keyVar code has not been consumed, then use dictionary val keyAssign = if (keyVar.code.isEmpty) s"final UTF8String $key = $keyValue;" else { - val dictionaryVar = keyDictVar.dictionary.value + val dictionaryVar = internals.exprCodeValue(keyDictVar.dictionary) val stringAssignCode = ColumnEncoding.stringFromDictionaryCode( dictionaryVar, keyDictVar.bufferVar, keyIndex) s"final UTF8String $key = $stringAssignCode;" @@ -136,7 +136,7 @@ object DictionaryOptimizedMapAccessor extends SparkSupport { val indexCode = keyDictVar.evaluateIndexCode() val dictionaryIndexInit = if (indexCode.isEmpty) "" else { - s"int ${keyDictVar.dictionaryIndex.value} = -1;" + s"int $keyIndex = -1;" } s""" diff --git a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala index 08a7efee9e..ab3aaa89b5 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala @@ -82,37 +82,39 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], declarations.append(s"java.sql.Date $prevJavaDate = null;\n") declarations.append(s"int $prevDate = 0;\n") val inputDate = s.arguments.head.genCode(ctx) - val javaDate = inputDate.value + val javaDate = internals.exprCodeValue(inputDate) val ev = s.genCode(ctx) - val code = if (ev.isNull == "false") { + val evIsNull = internals.exprCodeIsNull(ev) + val evValue = internals.exprCodeValue(ev) + val code = if (evIsNull == "false") { s""" - |${inputDate.code} - |int ${ev.value} = -1; + |${inputDate.code.toString} + |int $evValue = -1; |if ($prevJavaDate != null && | $prevJavaDate.getTime() == $javaDate.getTime()) { - | ${ev.value} = $prevDate; + | $evValue = $prevDate; |} else { | $prevJavaDate = $javaDate; | $prevDate = $dateTimeClass.fromJavaDate($javaDate); - | ${ev.value} = $prevDate; + | $evValue = $prevDate; |} """.stripMargin } else { s""" - |${inputDate.code} - |boolean ${ev.isNull}; - |int ${ev.value} = -1; - |if (${inputDate.isNull}) { - | ${ev.isNull} = true; + |${inputDate.code.toString} + |boolean $evIsNull; + |int $evValue = -1; + |if (${internals.exprCodeIsNull(inputDate)}) { + | $evIsNull = true; |} else if ($prevJavaDate != null && | $prevJavaDate.getTime() == $javaDate.getTime()) { - | ${ev.value} = $prevDate; - | ${ev.isNull} = false; + | $evValue = $prevDate; + | $evIsNull = false; |} else { | $prevJavaDate = $javaDate; | $prevDate = $dateTimeClass.fromJavaDate($javaDate); - | ${ev.value} = $prevDate; - | ${ev.isNull} = false; + | $evValue = $prevDate; + | $evIsNull = false; |} """.stripMargin } @@ -137,7 +139,7 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], // Hence the below code was erronous and after fixing null handing in above date field // it works for all cases. /* if (ctx.isPrimitiveType(dataType)) { - ev.copy(isNull = "false") + internals.copyExprCode(ev, isNull = "false") } else { ev } */ diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index d4a9829e52..ea3142a2e4 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -268,13 +268,13 @@ case class ExecutePlan(child: SparkPlan, preAction: () => Unit = () => ()) val (queryStringShortForm, queryStr, queryExecStr, planInfo) = if (key eq null) { val callSite = sqlContext.sparkContext.getCallSite() (callSite.shortForm, callSite.longForm, treeString(verbose = true), - PartitionedPhysicalScan.getSparkPlanInfo(this)) + PartitionedPhysicalScan.getSparkPlanInfo(this)) } else { val paramLiterals = key.currentLiterals val paramsId = key.currentParamsId (key.sqlText, key.sqlText, SnappySession.replaceParamLiterals( treeString(verbose = true), paramLiterals, paramsId), PartitionedPhysicalScan - .getSparkPlanInfo(this, paramLiterals, paramsId)) + .getSparkPlanInfo(this, paramLiterals, paramsId)) } CachedDataFrame.withNewExecutionId(session, queryStringShortForm, queryStr, queryExecStr, planInfo) { @@ -299,7 +299,7 @@ case class ExecutePlan(child: SparkPlan, preAction: () => Unit = () => ()) } finally { logDebug(s" Unlocking the table in execute of ExecutePlan:" + - s" ${child.treeString(false)}") + s" ${child.treeString(false)}") session.clearWriteLockOnTable() } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index 36ca41c3a9..61756a5a9d 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -162,24 +162,24 @@ case class SnappyHashAggregateExec( case g: GroupAggregate => g.aggBufferAttributesForGroup case sum: Sum if !sum.child.nullable => val sumAttr = sum.aggBufferAttributes.head - internals.copyAttribute(sumAttr)(nullable = false) :: Nil + internals.toAttributeReference(sumAttr)(nullable = false) :: Nil case avg: Average if !avg.child.nullable => val sumAttr = avg.aggBufferAttributes.head - internals.copyAttribute(sumAttr)(nullable = false) :: + internals.toAttributeReference(sumAttr)(nullable = false) :: avg.aggBufferAttributes(1) :: Nil case max: Max if !max.child.nullable => val maxAttr = max.aggBufferAttributes.head - internals.copyAttribute(maxAttr)(nullable = false) :: Nil + internals.toAttributeReference(maxAttr)(nullable = false) :: Nil case min: Min if !min.child.nullable => val minAttr = min.aggBufferAttributes.head - internals.copyAttribute(minAttr)(nullable = false) :: Nil + internals.toAttributeReference(minAttr)(nullable = false) :: Nil case last: Last if !last.child.nullable => val lastAttr = last.aggBufferAttributes.head val tail = if (last.aggBufferAttributes.length == 2) { val valueSetAttr = last.aggBufferAttributes(1) - internals.copyAttribute(valueSetAttr)(nullable = false) :: Nil + internals.toAttributeReference(valueSetAttr)(nullable = false) :: Nil } else Nil - internals.copyAttribute(lastAttr)(nullable = false) :: tail + internals.toAttributeReference(lastAttr)(nullable = false) :: tail case _ => aggregate.aggBufferAttributes } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala index 7086a49191..eb3bc5dc67 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala @@ -124,10 +124,10 @@ case class ColumnDeleteExec(child: SparkPlan, columnTable: String, ctx.currentVars = null val keyVars = keysInput.takeRight(4) - val ordinalIdVar = keyVars.head.value - val batchIdVar = keyVars(1).value - val bucketVar = keyVars(2).value - val numRowsVar = keyVars(3).value + val ordinalIdVar = internals.exprCodeValue(keyVars.head) + val batchIdVar = internals.exprCodeValue(keyVars(1)) + val bucketVar = internals.exprCodeValue(keyVars(2)) + val numRowsVar = internals.exprCodeValue(keyVars(3)) val externalStoreTerm = ctx.addReferenceObj("externalStore", externalStore) val keyVarsCode = evaluateVariables(keysInput) // row buffer needs to select the rowId and partitioning columns so drop last three diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala index 38986bca0b..0598615fa1 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala @@ -283,7 +283,7 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, | buffers[$index] = $deltaEncoders[$index].finish($cursors[$index], $lastNumRows); | } | // create delta statistics row - | ${statsEv.code} + | ${statsEv.code.toString} | // store the delta column batch | final $columnBatchClass columnBatch = $columnBatchClass.apply($batchOrdinal, | buffers, ${internals.exprCodeValue(statsEv)}.getBytes(), $deltaIndexes); diff --git a/core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala b/core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala new file mode 100644 index 0000000000..98a12e6f86 --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.common + +import org.apache.spark.sql.SparkSupport +import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, AttributeSet, ExprId, Expression, NamedExpression, UnaryExpression, Unevaluable} +import org.apache.spark.sql.catalyst.plans.logical.EventTimeWatermark +import org.apache.spark.sql.catalyst.util.quoteIdentifier +import org.apache.spark.sql.types.Metadata + + +trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSupport { + + def singleQualifier: Option[String] + + def realExprId: ExprId + + /** + * Returns true iff the expression id is the same for both attributes. + */ + def sameRef(other: AttributeReference): Boolean = this.exprId == other.exprId + + override def equals(other: Any): Boolean = other match { + case ar: AttributeReference => name == ar.name && dataType == ar.dataType && + nullable == ar.nullable && metadata == ar.metadata && exprId == ar.exprId && + qualifier == ar.qualifier + case eea: ErrorEstimateAttribute => (eea eq this) || (name == eea.name && + dataType == eea.dataType && nullable == eea.nullable && metadata == eea.metadata && + exprId == eea.exprId && qualifier == eea.qualifier) + case _ => false + } + + override def semanticEquals(other: Expression): Boolean = other match { + case ar: AttributeReference => sameRef(ar) + case _ => false + } + + override def semanticHash(): Int = { + this.exprId.hashCode() + } + + override def hashCode(): Int = { + // See http://stackoverflow.com/questions/113511/hash-code-implementation + var h = 17 + h = h * 37 + name.hashCode() + h = h * 37 + dataType.hashCode() + h = h * 37 + nullable.hashCode() + h = h * 37 + metadata.hashCode() + h = h * 37 + exprId.hashCode() + h = h * 37 + qualifier.hashCode() + h + } + + override def newInstance(): AttributeReference = + internals.toAttributeReference(this)(exprId = NamedExpression.newExprId) + + /** + * Returns a copy of this [[ErrorEstimateAttribute]] with changed nullability. + */ + override def withNullability(newNullability: Boolean): ErrorEstimateAttribute = { + if (nullable == newNullability) { + this + } else { + internals.newErrorEstimateAttribute(name, dataType, newNullability, metadata, exprId, + realExprId, qualifier.toSeq) + } + } + + override def withName(newName: String): ErrorEstimateAttribute = { + if (name == newName) { + this + } else { + internals.newErrorEstimateAttribute(newName, dataType, nullable, metadata, exprId, + realExprId, qualifier.toSeq) + } + } + + def withExprId(newExprId: ExprId): ErrorEstimateAttribute = { + if (exprId == newExprId) { + this + } else { + internals.newErrorEstimateAttribute(name, dataType, nullable, metadata, newExprId, + realExprId, qualifier.toSeq) + } + } + + override def references: AttributeSet = AttributeSet(internals.toAttributeReference(this)()) + + override def withMetadata(newMetadata: Metadata): Attribute = { + internals.newErrorEstimateAttribute(name, dataType, nullable, newMetadata, exprId, + realExprId, qualifier.toSeq) + } + + /** Used to signal the column used to calculate an eventTime watermark (e.g. a#1-T{delayMs}) */ + private def delaySuffix = if (metadata.contains(EventTimeWatermark.delayKey)) { + s"-T${metadata.getLong(EventTimeWatermark.delayKey)}ms" + } else { + "" + } + + override protected final def otherCopyArgs: Seq[AnyRef] = { + qualifier :: Nil + } + + override def toString: String = s"$name#${exprId.id}$typeSuffix$delaySuffix" + + // Since the expression id is not in the first constructor it is missing from the default + // tree string. + override def simpleString: String = s"$name#${exprId.id}: ${dataType.simpleString}" + + override def sql: String = { + val qualifierPrefix = if (qualifier.isEmpty) "" else qualifier.head + '.' + s"$qualifierPrefix${quoteIdentifier(name)}" + } +} + +trait ApproxColumnExtractor extends UnaryExpression with NamedExpression with SparkSupport { + + val ordinal: Int + + override lazy val resolved: Boolean = true + + override def eval(input: InternalRow): Any = + throw new UnsupportedOperationException("not implemented") + + override protected def doGenCode(ctx: CodegenContext, + ev: ExprCode): ExprCode = { + + val childEval = child.genCode(ctx) + val evIsNull = internals.exprCodeIsNull(ev) + val evVal = internals.exprCodeValue(ev) + val childVal = internals.exprCodeValue(childEval) + val code = + s""" + ${childEval.code} + double $evVal = 0d; + boolean $evIsNull = ((InternalRow) $childVal).isNullAt($ordinal); + if (!$evIsNull) { + $evVal = ((InternalRow) $childVal).getDouble($ordinal); + } + """ + internals.copyExprCode(ev, code = code) + } + + override def metadata: Metadata = Metadata.empty + + override def toAttribute: Attribute = { + if (resolved) { + internals.newAttributeReference(name, dataType, nullable, metadata, exprId, qualifier) + } else { + UnresolvedAttribute(name) + } + } + + override def toString: String = s"$child AS $name#${exprId.id}$typeSuffix" + + override protected final def otherCopyArgs: Seq[AnyRef] = { + exprId :: qualifier :: Nil + } + + override def equals(other: Any): Boolean = other match { + case a: Alias => + name == a.name && exprId == a.exprId && child == a.child + + case _ => false + } + + /** Returns a copy of this expression with a new `exprId`. */ + override def newInstance(): NamedExpression = + internals.toAttributeReference(this)(exprId = NamedExpression.newExprId) +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 2f657fcf19..c6fc1f62e9 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -132,7 +132,7 @@ case class DropPolicyCommand(ifExists: Boolean, } case class TruncateManagedTableCommand(ifExists: Boolean, - table: TableIdentifier) extends RunnableCommand { + table: TableIdentifier) extends RunnableCommand with SparkSupport { override def run(session: SparkSession): Seq[Row] = { val catalog = session.asInstanceOf[SnappySession].sessionCatalog @@ -144,7 +144,8 @@ case class TruncateManagedTableCommand(ifExists: Boolean, case plan => throw new AnalysisException( s"Table '$table' must be a DestroyRelation for truncate. Found plan: $plan") } - session.sharedState.cacheManager.uncacheQuery(session.table(table)) + internals.uncacheQuery(session, session.table(table).logicalPlan, + cascade = true, blocking = true) } Nil } @@ -290,7 +291,7 @@ case class SnappyStreamingActionsCommand(action: Int, * in the GUI rather than count() plan for InMemoryRelation. */ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: String, - plan: Option[LogicalPlan], isLazy: Boolean) extends RunnableCommand { + plan: Option[LogicalPlan], isLazy: Boolean) extends RunnableCommand with SparkSupport { require(plan.isEmpty || tableIdent.database.isEmpty, "Schema name is not allowed in CACHE TABLE AS SELECT") @@ -345,7 +346,7 @@ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: Str // Dummy op to materialize the cache. This does the minimal job of count on // the actual cached data (RDD[CachedBatch]) to force materialization of cache // while avoiding creation of any new SparkPlan. - val count = memoryPlan.cachedColumnBuffers.count() + val count = internals.cachedColumnBuffers(memoryPlan).count() (count, System.nanoTime() - start) }))._1) :: Nil } finally { diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 7e2c692dd6..7708690d70 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -28,7 +28,7 @@ import io.snappydata.Property import org.apache.spark.Partition import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis -import org.apache.spark.sql.catalyst.analysis.TypeCoercion.{PromoteStrings, numericPrecedence} +import org.apache.spark.sql.catalyst.analysis.TypeCoercion.numericPrecedence import org.apache.spark.sql.catalyst.analysis.{Analyzer, Star, UnresolvedAttribute} import org.apache.spark.sql.catalyst.catalog.SessionCatalog import org.apache.spark.sql.catalyst.expressions.{And, BinaryArithmetic, EqualTo, In, _} @@ -365,7 +365,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu if groupBy.isEmpty && pivotColumn.resolved && aggregates.forall(_.resolved) => val pivotColAndAggRefs = pivotColumn.references ++ AttributeSet(aggregates) val groupByExprs = child.output.filterNot(pivotColAndAggRefs.contains) - p.copy(groupByExprs = groupByExprs) + internals.copyPivot(p, groupByExprs) case o => o } @@ -732,7 +732,7 @@ class HiveConditionalStrategy(strategy: HiveStrategies => Strategy, state: Snapp } -trait SnappyAnalyzer extends Analyzer { +trait SnappyAnalyzer extends Analyzer with SparkSupport { def session: SnappySession @@ -740,13 +740,7 @@ trait SnappyAnalyzer extends Analyzer { override lazy val batches: Seq[Batch] = baseAnalyzerInstance.batches.map { case batch if batch.name.equalsIgnoreCase("Resolution") => - val rules = batch.rules.flatMap { - case PromoteStrings => - StringPromotionCheckForUpdate.asInstanceOf[Rule[LogicalPlan]] :: SnappyPromoteStrings :: - PromoteStrings :: Nil - case r => r :: Nil - } - + val rules = internals.addStringPromotionRules(batch.rules, this, session.sessionState.conf) Batch(batch.name, batch.strategy.asInstanceOf[Strategy], rules: _*) case batch => Batch(batch.name, batch.strategy.asInstanceOf[Strategy], batch.rules: _*) } @@ -760,7 +754,7 @@ trait SnappyAnalyzer extends Analyzer { // need to be done because by default spark performs fail safe implicit type // conversion when type of two operands does't match and this can lead to null values getting // populated in the table. - private object StringPromotionCheckForUpdate extends Rule[LogicalPlan] { + object StringPromotionCheckForUpdate extends Rule[LogicalPlan] { override def apply(plan: LogicalPlan): LogicalPlan = { plan match { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index a43d0aae29..7b7dad95e8 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -228,7 +228,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { queryLR.get.output.map(_.exprId)).toMap filter.transformAllExpressions { case ar: AttributeReference if mappingInfo.contains(ar.exprId) => - internals.copyAttribute(ar)(exprId = mappingInfo(ar.exprId)) + internals.toAttributeReference(ar)(exprId = mappingInfo(ar.exprId)) } } } @@ -551,7 +551,11 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } else super.listDatabases(pattern).distinct.sorted } - override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { + protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit + + protected final def createTableImpl(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = { // first check required permission to create objects in a schema val schemaName = getSchemaName(table.identifier) val tableName = formatTableName(table.identifier.table) @@ -573,7 +577,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } // resolve table fully as per current schema in this session - hiveSessionCatalog.createTable(resolveCatalogTable(table, schemaName), ignoreIfExists) + internals.createTable(hiveSessionCatalog, resolveCatalogTable(table, schemaName), + ignoreIfExists, validateTableLocation) } else { throw Utils.analysisException( s"External hive support (${StaticSQLConf.CATALOG_IMPLEMENTATION.key} = hive) " + @@ -582,7 +587,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } case _ => createSchema(schemaName, ignoreIfExists = true) - super.createTable(table, ignoreIfExists) + baseCreateTable(table, ignoreIfExists, validateTableLocation) } contextFunctions.postCreateTable(table) @@ -605,7 +610,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val catalogTable = CatalogTable(new TableIdentifier(tableName, Some(schemaName)), CatalogTableType.EXTERNAL, DataSource.buildStorageFormatFromOptions( options + (DBTABLE_PROPERTY -> fullTableName)), schema, Some(provider)) - createTable(catalogTable, ignoreIfExists) + createTableImpl(catalogTable, ignoreIfExists, validateTableLocation = false) } protected def convertCharTypes(table: CatalogTable): CatalogTable = { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala b/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala index 04aed81d7e..39dfdf954c 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala @@ -29,10 +29,16 @@ import org.apache.spark.sql.types.DataType object UDFFunction { - def makeFunctionBuilder(name: String, clazz: Class[_] , returnType: DataType): FunctionBuilder = { - (children: Seq[Expression]) => { - try { + private def scalaUDF(function: AnyRef, dataType: DataType, + children: Seq[Expression], inputTypes: Seq[DataType] = Nil, + udfName: Option[String] = None): ScalaUDF = { + // noinspection RedundantNewCaseClass + new ScalaUDF(function, dataType, children, inputTypes, udfName) + } + def makeFunctionBuilder(name: String, clazz: Class[_], returnType: DataType): FunctionBuilder = { + children: Seq[Expression] => { + try { if (classOf[UserDefinedAggregateFunction].isAssignableFrom(clazz)) { val udaf = clazz.newInstance().asInstanceOf[UserDefinedAggregateFunction] ScalaUDAF(children, udaf) @@ -57,99 +63,98 @@ object UDFFunction { // Script code starts case 1 => val func = clazz.newInstance().asInstanceOf[UDF1[Any, Any]] - ScalaUDF(func.call(_: Any), returnType, children) + scalaUDF(func.call(_: Any), returnType, children) case 2 => val func = clazz.newInstance().asInstanceOf[UDF2[Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any), returnType, children) case 3 => val func = clazz.newInstance().asInstanceOf[UDF3[Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any), returnType, children) case 4 => val func = clazz.newInstance().asInstanceOf[UDF4[Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any), returnType, children) case 5 => val func = clazz.newInstance().asInstanceOf[UDF5[Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 6 => val func = clazz.newInstance().asInstanceOf[UDF6[Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 7 => val func = clazz.newInstance().asInstanceOf[UDF7[Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 8 => val func = clazz.newInstance().asInstanceOf[UDF8[Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 9 => val func = clazz.newInstance().asInstanceOf[UDF9[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 10 => val func = clazz.newInstance().asInstanceOf[UDF10[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 11 => val func = clazz.newInstance().asInstanceOf[UDF11[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 12 => val func = clazz.newInstance().asInstanceOf[UDF12[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 13 => val func = clazz.newInstance().asInstanceOf[UDF13[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 14 => val func = clazz.newInstance().asInstanceOf[UDF14[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 15 => val func = clazz.newInstance().asInstanceOf[UDF15[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 16 => val func = clazz.newInstance().asInstanceOf[UDF16[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 17 => val func = clazz.newInstance().asInstanceOf[UDF17[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 18 => val func = clazz.newInstance().asInstanceOf[UDF18[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 19 => val func = clazz.newInstance().asInstanceOf[UDF19[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 20 => val func = clazz.newInstance().asInstanceOf[UDF20[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 21 => val func = clazz.newInstance().asInstanceOf[UDF21[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) case 22 => val func = clazz.newInstance().asInstanceOf[UDF22[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]] - ScalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) + scalaUDF(func.call(_: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any, _: Any), returnType, children) - //Script code end + // Script code end // scalastyle:on line.size.limit - case _ => throw new AnalysisException(s"No handler for SnappyStore UDF '${clazz.getCanonicalName}'") + case _ => throw new AnalysisException( + s"No handler for SnappyStore UDF '${clazz.getCanonicalName}'") } - } - } catch { case ae: AnalysisException => throw ae diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index 01745ded26..fd300352d9 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -559,7 +559,7 @@ trait DefaultOptimizer extends SparkOptimizer { def state: SnappySessionState - override def batches: Seq[Batch] = { + def batchesImpl: Seq[Batch] = { implicit val ss: SnappySession = state.snappySession var insertedSnappyOpts = 0 val modified = super.batches.map { diff --git a/core/src/main/scala/org/apache/spark/sql/rdds.scala b/core/src/main/scala/org/apache/spark/sql/rdds.scala index f9e82ca54d..a52a60ee91 100644 --- a/core/src/main/scala/org/apache/spark/sql/rdds.scala +++ b/core/src/main/scala/org/apache/spark/sql/rdds.scala @@ -86,6 +86,6 @@ case class EmptyIteratorWithRowCount[U](rowCount : Long) extends Iterator[U] { object RDDs { def getIteratorSize[T](iterator: Iterator[T]): Long = iterator match { case EmptyIteratorWithRowCount(rowCount) => rowCount - case _ => Utils.getIteratorSize[T](iterator) + case _ => Utils.getIteratorSize(iterator) } } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala index 6822b24f6f..89d94369a5 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala @@ -191,7 +191,7 @@ object RuleUtils extends PredicateHelper with SparkSupport { (Seq[Expression], Seq[Expression]) = expressions.partition(e => e.references.subsetOf(allColumns) && !SubqueryExpression.hasCorrelatedSubquery(e)) - private[sql] def returnPlan(partial: PartialPlan) = { + private[sql] def returnPlan(partial: PartialPlan): CompletePlan = { val input = if (partial.curPlan == null) partial.input else Seq(partial.curPlan) ++ partial.input CompletePlan(ReorderJoin.createOrderedJoin(input.map((_, Inner)), @@ -199,7 +199,7 @@ object RuleUtils extends PredicateHelper with SparkSupport { } private[sql] def chooseIndexForFilter(child: LogicalPlan, conditions: Seq[Expression]) - (implicit snappySession: SnappySession) = { + (implicit snappySession: SnappySession): Option[Replacement] = { val columnGroups = conditions.collect { case expressions.EqualTo(l, r) => l.collectFirst { case a: AttributeReference => a }.orElse { @@ -211,7 +211,7 @@ object RuleUtils extends PredicateHelper with SparkSupport { } }.groupBy(_.map(_.qualifier)).collect { case (table, cols) if table.nonEmpty && table.get.nonEmpty => ( - table.get.get, + table.get.head, cols.collect { case a if a.nonEmpty => a.get }) } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala index be57c07b35..e7005cb3a1 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala @@ -68,7 +68,7 @@ case class ResolveQueryHints(snappySession: SnappySession) case q: LogicalPlan => q transformExpressionsUp { case a: AttributeReference => - q.resolveChildren(Seq(a.qualifier.getOrElse(""), a.name), + q.resolveChildren((if (a.qualifier.isEmpty) "" else a.qualifier.head) :: a.name :: Nil, analyzer.resolver).getOrElse(a) } } diff --git a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala index 5a64c207cf..a8e9245b62 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala @@ -145,22 +145,23 @@ object CodeGeneration extends Logging with SparkSupport { val serArrayClass = classOf[SerializedArray].getName val serMapClass = classOf[SerializedMap].getName val serRowClass = classOf[SerializedRow].getName + val evValue = internals.exprCodeValue(ev) val nonNullCode = Utils.getSQLDataType(dataType) match { - case IntegerType => s"$stmt.setInt(${col + 1}, ${ev.value});" - case LongType => s"$stmt.setLong(${col + 1}, ${ev.value});" - case DoubleType => s"$stmt.setDouble(${col + 1}, ${ev.value});" - case FloatType => s"$stmt.setFloat(${col + 1}, ${ev.value});" - case ShortType => s"$stmt.setInt(${col + 1}, ${ev.value});" - case ByteType => s"$stmt.setInt(${col + 1}, ${ev.value});" - case BooleanType => s"$stmt.setBoolean(${col + 1}, ${ev.value});" - case StringType => s"$stmt.setString(${col + 1}, ${ev.value}.toString());" - case BinaryType => s"$stmt.setBytes(${col + 1}, ${ev.value});" + case IntegerType => s"$stmt.setInt(${col + 1}, $evValue);" + case LongType => s"$stmt.setLong(${col + 1}, $evValue);" + case DoubleType => s"$stmt.setDouble(${col + 1}, $evValue);" + case FloatType => s"$stmt.setFloat(${col + 1}, $evValue);" + case ShortType => s"$stmt.setInt(${col + 1}, $evValue);" + case ByteType => s"$stmt.setInt(${col + 1}, $evValue);" + case BooleanType => s"$stmt.setBoolean(${col + 1}, $evValue);" + case StringType => s"$stmt.setString(${col + 1}, $evValue.toString());" + case BinaryType => s"$stmt.setBytes(${col + 1}, $evValue);" case TimestampType => - s"$stmt.setTimestamp(${col + 1}, $timeUtilsClass.toJavaTimestamp(${ev.value}));" + s"$stmt.setTimestamp(${col + 1}, $timeUtilsClass.toJavaTimestamp($evValue));" case DateType => - s"$stmt.setDate(${col + 1}, $timeUtilsClass.toJavaDate(${ev.value}));" + s"$stmt.setDate(${col + 1}, $timeUtilsClass.toJavaDate($evValue));" case _: DecimalType => - s"$stmt.setBigDecimal(${col + 1}, ${ev.value}.toJavaBigDecimal());" + s"$stmt.setBigDecimal(${col + 1}, $evValue.toJavaBigDecimal());" case a: ArrayType => val arr = ctx.freshName("arr") val encoder = ctx.freshName("encoder") @@ -168,7 +169,7 @@ object CodeGeneration extends Logging with SparkSupport { val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", v => s"$v = new $encoderClass();", forceInline = true) s""" - |final ArrayData $arr = ${ev.value}; + |final ArrayData $arr = $evValue; |if ($arr instanceof $serArrayClass) { | $stmt.setBytes(${col + 1}, (($serArrayClass)$arr).toBytes()); |} else { @@ -187,7 +188,7 @@ object CodeGeneration extends Logging with SparkSupport { val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", v => s"$v = new $encoderClass();", forceInline = true) s""" - |final MapData $map = ${ev.value}; + |final MapData $map = $evValue; |if ($map instanceof $serMapClass) { | $stmt.setBytes(${col + 1}, (($serMapClass)$map).toBytes()); |} else { @@ -205,7 +206,7 @@ object CodeGeneration extends Logging with SparkSupport { val encoderVar = internals.addClassField(ctx, encoderClass, "encoderObj", v => s"$v = new $encoderClass();", forceInline = true) s""" - |final InternalRow $struct = ${ev.value}; + |final InternalRow $struct = $evValue; |if ($struct instanceof $serRowClass) { | $stmt.setBytes(${col + 1}, (($serRowClass)$struct).toBytes()); |} else { @@ -218,17 +219,18 @@ object CodeGeneration extends Logging with SparkSupport { |} """.stripMargin case _ => - s"$stmt.setObject(${col + 1}, ${ev.value});" + s"$stmt.setObject(${col + 1}, $evValue);" } - val code = if (ev.code == "") "" + val evCode = ev.code.toString + val code = if (evCode.isEmpty) "" else { - val c = s"${ev.code}\n" - ev.code = "" + val c = s"$evCode\n" + internals.resetCode(ev) c } val jdbcType = JdbcExtendedUtils.getJdbcType(NullType, null, dialect).jdbcNullType s""" - |${code}if (${ev.isNull}) { + |${code}if (${internals.exprCodeIsNull(ev)}) { | $stmt.setNull(${col + 1}, $jdbcType); |} else { | $nonNullCode @@ -248,8 +250,8 @@ object CodeGeneration extends Logging with SparkSupport { def getRowSetterFragment(schema: Array[StructField], dialect: JdbcDialect, row: String, stmt: String, schemaTerm: String, ctx: CodegenContext): String = { - val rowInput = (col: Int) => ExprCode("", s"$row.isNullAt($col)", - ctx.getValue(row, schema(col).dataType, Integer.toString(col))) + val rowInput = (col: Int) => internals.newExprCode(code = "", isNull = s"$row.isNullAt($col)", + value = internals.getValue(row, schema(col).dataType, Integer.toString(col), ctx)) genStmtSetters(schema, dialect, rowInput, stmt, schemaTerm, ctx) } @@ -278,7 +280,7 @@ object CodeGeneration extends Logging with SparkSupport { val evaluator = new CompilerFactory().newScriptEvaluator() evaluator.setClassName("io.snappydata.execute.GeneratedEvaluation") evaluator.setParentClassLoader(getClass.getClassLoader) - evaluator.setDefaultImports(defaultImports) + evaluator.setDefaultImports(defaultImports: _*) val separator = "\n " val mutableStates = internals.getInlinedClassFields(ctx) val varDeclarations = mutableStates._1.map { case (javaType, name) => @@ -331,7 +333,7 @@ object CodeGeneration extends Logging with SparkSupport { val evaluator = new CompilerFactory().newScriptEvaluator() evaluator.setClassName("io.snappydata.execute.GeneratedIndexEvaluation") evaluator.setParentClassLoader(getClass.getClassLoader) - evaluator.setDefaultImports(defaultImports) + evaluator.setDefaultImports(defaultImports: _*) val separator = "\n " val mutableStates = internals.getInlinedClassFields(ctx) val varDeclarations = mutableStates._1.map { case (javaType, name) => @@ -428,14 +430,14 @@ object CodeGeneration extends Logging with SparkSupport { val evaluator = new CompilerFactory().newScriptEvaluator() evaluator.setClassName("io.snappydata.execute.GeneratedSerialization") evaluator.setParentClassLoader(getClass.getClassLoader) - evaluator.setDefaultImports(Array(classOf[Platform].getName, + evaluator.setDefaultImports(classOf[Platform].getName, classOf[InternalRow].getName, classOf[UTF8String].getName, classOf[Decimal].getName, classOf[CalendarInterval].getName, classOf[ArrayData].getName, classOf[MapData].getName, - classOf[InternalDataSerializer].getName)) + classOf[InternalDataSerializer].getName) val separator = "\n " val mutableStates = internals.getInlinedClassFields(ctx) val varDeclarations = mutableStates._1.map { case (javaType, name) => diff --git a/spark b/spark index 8f520df355..9e00642394 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 8f520df355d6b2cb4c5617af5229867c3c203de5 +Subproject commit 9e00642394ef0a6bc9e40c1fa9364c784a237246 diff --git a/store b/store index 422c769ddf..7175d0f1a6 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 422c769ddfb313e3be6b67326b13d8e44587cf42 +Subproject commit 7175d0f1a6d28611962b6ff7bd495856e8e0abed From fe78f8b5891e8d79145b48d83d9df68315a4f86a Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 5 Feb 2020 02:08:50 +0530 Subject: [PATCH 36/80] refactored for multiple 2.4.x versions --- .../org/apache/spark/util/SnappyUtils.scala | 2 +- core/compatibility/spark-2.1.0/build.gradle | 5 +- .../sql/internal/SnappyCacheManager210.scala | 2 +- .../sql/internal/Spark210Internals.scala | 999 +--------------- core/compatibility/spark-2.1.1/build.gradle | 4 +- .../sql/internal/Spark211Internals.scala | 25 +- .../sql/internal/SnappySharedState21.java | 0 .../sql/execution/ui/SnappySQLListener.scala | 0 .../spark/sql/internal/Spark21Internals.scala | 1008 +++++++++++++++++ .../spark/sql/internal/expressions.scala | 66 ++ .../org/apache/spark/sql/internal/plans.scala | 6 +- core/compatibility/spark-2.3.2/build.gradle | 6 +- .../sql/internal/Spark232Internals.scala | 986 +--------------- .../sql/internal/SnappySharedState23.java | 0 .../spark/sql/internal/Spark23Internals.scala | 456 ++++++++ .../spark/sql/internal/expressions.scala | 66 ++ .../spark/sql/catalyst/AccessUtils.scala | 0 .../execution/ui/SnappySQLAppListener.scala | 0 .../sql/internal/Spark23_4_Internals.scala | 682 +++++++++++ .../org/apache/spark/sql/internal/plans.scala | 8 +- core/compatibility/spark-2.4.4/build.gradle | 9 +- .../sql/internal/Spark244Internals.scala | 239 +--- .../sql/internal/SnappySharedState24.java | 10 +- .../spark/sql/internal/Spark24Internals.scala | 470 ++++++++ .../spark/sql/internal/expressions.scala | 66 ++ .../catalog/ConnectorExternalCatalog.scala | 67 +- .../sql/catalog/SnappyExternalCatalog.scala | 8 +- .../impl/SmartConnectorExternalCatalog.scala | 51 +- .../apache/spark/sql/SnappyBaseParser.scala | 4 +- .../spark/sql/SnappyContextFunctions.scala | 6 + .../org/apache/spark/sql/SnappySession.scala | 6 +- .../org/apache/spark/sql/SparkInternals.scala | 74 +- .../org/apache/spark/sql/SparkSupport.scala | 16 +- .../bootstrap/ApproxColumnExtractor.scala | 81 ++ .../execution/bootstrap/lazyExpressions.scala | 167 +++ .../ClosedFormColumnExtractor.scala | 96 ++ .../closedform/ClosedFormStats.scala | 113 ++ .../execution/closedform/ErrorAggregate.scala | 122 ++ .../ErrorEstimateAttribute.scala} | 92 +- .../spark/sql/execution/common/HAC.scala | 89 ++ .../sql/hive/SnappyHiveExternalCatalog.scala | 8 +- .../{JarUtils.scala => ContextJarUtils.scala} | 10 +- .../sql/internal/SnappySessionCatalog.scala | 32 +- .../apache/spark/sql/internal/session.scala | 13 +- examples/build.gradle | 9 +- 45 files changed, 3731 insertions(+), 2448 deletions(-) rename core/compatibility/spark-2.1.0/{specific => src/main}/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala (98%) rename core/compatibility/{spark-2.1.0 => spark-2.1.x}/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java (100%) rename core/compatibility/{spark-2.1.0 => spark-2.1.x}/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala (100%) create mode 100644 core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala create mode 100644 core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala rename core/compatibility/{spark-2.1.0 => spark-2.1.x}/src/main/scala/org/apache/spark/sql/internal/plans.scala (95%) rename core/compatibility/{spark-2.3.2/src/main => spark-2.3.x/specific}/java/org/apache/spark/sql/internal/SnappySharedState23.java (100%) create mode 100644 core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala create mode 100644 core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/expressions.scala rename core/compatibility/{spark-2.3.2 => spark-2.3.x}/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala (100%) rename core/compatibility/{spark-2.3.2 => spark-2.3.x}/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala (100%) create mode 100644 core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala rename core/compatibility/{spark-2.3.2 => spark-2.3.x}/src/main/scala/org/apache/spark/sql/internal/plans.scala (95%) rename core/compatibility/{spark-2.4.4 => spark-2.4.x}/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java (79%) create mode 100644 core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala create mode 100644 core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/bootstrap/ApproxColumnExtractor.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/bootstrap/lazyExpressions.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormColumnExtractor.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormStats.scala create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorAggregate.scala rename core/src/main/scala/org/apache/spark/sql/execution/{common/attributes.scala => closedform/ErrorEstimateAttribute.scala} (60%) create mode 100644 core/src/main/scala/org/apache/spark/sql/execution/common/HAC.scala rename core/src/main/scala/org/apache/spark/sql/internal/{JarUtils.scala => ContextJarUtils.scala} (96%) diff --git a/cluster/src/main/scala/org/apache/spark/util/SnappyUtils.scala b/cluster/src/main/scala/org/apache/spark/util/SnappyUtils.scala index de8b07dec2..042a5cdf81 100644 --- a/cluster/src/main/scala/org/apache/spark/util/SnappyUtils.scala +++ b/cluster/src/main/scala/org/apache/spark/util/SnappyUtils.scala @@ -46,7 +46,7 @@ object SnappyUtils { classLoader: ClassLoader, addAllJars: Boolean = false): Unit = { assert(classOf[URLClassLoader].isAssignableFrom(classLoader.getClass)) val dependentJars = if (addAllJars) { - ContextJarUtils.getDriverJarURLs() + ContextJarUtils.getDriverJarURLs } else { classLoader.asInstanceOf[URLClassLoader].getURLs } diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index 7c8c464634..8c45a050a8 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -19,8 +19,9 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -sourceSets.main.scala.srcDir 'specific/scala' -sourceSets.main.scala.srcDir 'src/main/java' +// directly include the base classes to ensure everything is compiled with Spark 2.1.0 +sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala similarity index 98% rename from core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala rename to core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala index 0f53221786..389b8fc426 100644 --- a/core/compatibility/spark-2.1.0/specific/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala @@ -23,7 +23,7 @@ import org.apache.spark.sql.{Dataset, SnappySession, SparkSession} import org.apache.spark.storage.StorageLevel /** - * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. + * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. */ class SnappyCacheManager210 extends CacheManager { diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index c4c8951871..1ddfd18d9c 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -14,492 +14,32 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ - package org.apache.spark.sql.internal -import scala.reflect.ClassTag -import scala.util.control.NonFatal - -import io.snappydata.Property.HashAggregateSize import io.snappydata.sql.catalog.SnappyExternalCatalog -import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog -import io.snappydata.{HintName, QueryHint} -import org.apache.hadoop.conf.Configuration -import org.apache.spark.deploy.SparkSubmitUtils -import org.apache.spark.internal.config.ConfigBuilder -import org.apache.spark.rdd.RDD -import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings -import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} -import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec -import org.apache.spark.sql.catalyst.catalog.{ExternalCatalog, _} -import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} -import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} -import org.apache.spark.sql.catalyst.json.JSONOptions -import org.apache.spark.sql.catalyst.optimizer.Optimizer -import org.apache.spark.sql.catalyst.plans.logical._ -import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartitioning} -import org.apache.spark.sql.catalyst.rules.Rule -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} -import org.apache.spark.sql.execution._ -import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, ExplainCommand, RunnableCommand} -import org.apache.spark.sql.execution.common.ErrorEstimateAttribute -import org.apache.spark.sql.execution.datasources._ -import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} -import org.apache.spark.sql.execution.row.RowTableScan -import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} -import org.apache.spark.sql.hive.{HiveConditionalRule, HiveConditionalStrategy, HiveSessionCatalog, SnappyAnalyzer, SnappyHiveCatalogBase, SnappyHiveExternalCatalog, SnappySessionState} -import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder -import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} -import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} -import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} -import org.apache.spark.status.api.v1.RDDStorageInfo -import org.apache.spark.streaming.SnappyStreamingContext -import org.apache.spark.streaming.dstream.DStream -import org.apache.spark.util.Utils -import org.apache.spark.{SparkConf, SparkContext, SparkException} +import org.apache.spark.SparkException +import org.apache.spark.sql.catalyst.TableIdentifier +import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType} +import org.apache.spark.sql.catalyst.plans.logical.Statistics +import org.apache.spark.sql.execution.CacheManager +import org.apache.spark.sql.types.StructType +import org.apache.spark.sql.{SparkInternals, SparkSession} /** * Implementation of [[SparkInternals]] for Spark 2.1.0. */ -class Spark210Internals extends SparkInternals { +class Spark210Internals extends Spark21Internals { override def version: String = "2.1.0" - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, - cascade: Boolean, blocking: Boolean): Unit = { - implicit val encoder: ExpressionEncoder[Row] = RowEncoder(plan.schema) - spark.sharedState.cacheManager.uncacheQuery(Dataset(spark, plan), blocking) - } - - /** - * Apply a map function to each expression present in this query operator, and return a new - * query operator based on the mapped expressions. - * - * Taken from the mapExpressions in Spark 2.1.1 and beyond. - */ - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - var changed = false - - @inline def transformExpression(e: Expression): Expression = { - val newE = f(e) - if (newE.fastEquals(e)) { - e - } else { - changed = true - newE - } - } - - def recursiveTransform(arg: Any): AnyRef = arg match { - case e: Expression => transformExpression(e) - case Some(e: Expression) => Some(transformExpression(e)) - case Some(seq: Traversable[_]) => Some(seq.map(recursiveTransform)) - case m: Map[_, _] => m - case d: DataType => d // Avoid unpacking Structs - case seq: Traversable[_] => seq.map(recursiveTransform) - case other: AnyRef => other - case null => null - } - - /** - * Efficient alternative to `productIterator.map(f).toArray`. - */ - def mapProductIterator[B: ClassTag](f: Any => B): Array[B] = { - val arr = Array.ofDim[B](plan.productArity) - var i = 0 - while (i < arr.length) { - arr(i) = f(plan.productElement(i)) - i += 1 - } - arr - } - - val newArgs = mapProductIterator(recursiveTransform) - - if (changed) plan.makeCopy(newArgs).asInstanceOf[plan.type] else plan - } - - override def registerFunction(session: SparkSession, name: FunctionIdentifier, - info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { - session.sessionState.functionRegistry.registerFunction(name.unquotedString, info, function) - } - - override def addClassField(ctx: CodegenContext, javaType: String, - varPrefix: String, initFunc: String => String, - forceInline: Boolean, useFreshName: Boolean): String = { - val variableName = if (useFreshName) ctx.freshName(varPrefix) else varPrefix - ctx.addMutableState(javaType, variableName, initFunc(variableName)) - variableName - } - - override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = { - ctx.mutableStates.map(t => t._1 -> t._2) -> ctx.mutableStates.map(_._3) - } - - override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, - inlineToOuterClass: Boolean = false): String = { - ctx.addNewFunction(funcName, funcCode) - funcName - } - - override def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean = { - ctx.addedFunctions.contains(funcName) - } - - override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { - ctx.splitExpressions(ctx.INPUT_ROW, expressions) - } - - override def resetCopyResult(ctx: CodegenContext): Unit = ctx.copyResult = false - - override def isPredicateSubquery(expr: Expression): Boolean = - expr.isInstanceOf[PredicateSubquery] - - override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, - newExprId: ExprId): Expression = { - expr.asInstanceOf[PredicateSubquery].copy(plan = newPlan, exprId = newExprId) - } - - // scalastyle:off - - override def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], - otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], - partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, - relationSchema: StructType, allFilters: Seq[Expression], - schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, - isSampleReservoirAsRegion: Boolean): ColumnTableScan = { - new ColumnTableScan21(output, dataRDD, otherRDDs, numBuckets, partitionColumns, - partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, - caseSensitive, isSampleReservoirAsRegion) - } - - // scalastyle:on - - override def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], - numBuckets: Int, partitionColumns: Seq[Expression], - partitionColumnAliases: Seq[Seq[Attribute]], table: String, - baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan = { - new RowTableScan21(output, schema, dataRDD, numBuckets, partitionColumns, - partitionColumnAliases, JdbcExtendedUtils.toLowerCase(table), baseRelation, caseSensitive) - } - - override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { - WholeStageCodegenExec(plan) - } - - override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - new CaseInsensitiveMap(map) - } - - def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { - // if the call is done the second time, then attach in embedded mode - // too since this is coming from ToolsCallbackImpl - val (forceAttachUI, listener, old) = SparkSession.sqlListener.get() match { - case l: SnappySQLListener => (true, l, null) // already set - case l => - val listener = new SnappySQLListener(sparkContext.conf) - if (SparkSession.sqlListener.compareAndSet(l, listener)) { - sparkContext.listenerBus.addListener(listener) - if (l ne null) sparkContext.listenerBus.removeListener(l) - } - (false, listener, l) - } - // embedded mode attaches SQLTab later via ToolsCallbackImpl that also - // takes care of injecting any authentication module if configured - sparkContext.ui match { - case Some(ui) if forceAttachUI || !SnappyContext.getClusterMode(sparkContext) - .isInstanceOf[SnappyEmbeddedMode] => - // clear the previous SQLTab, if any - if (old ne null) { - ui.getTabs.foreach { - case tab: SQLTab => - ui.detachTab(tab) - ui.removeStaticHandler("/static/sql") - case _ => - } - } - new SQLTab(listener, ui) - case _ => - } - } - - override def newSharedState(sparkContext: SparkContext): SnappySharedState = { - new SnappySharedState21(sparkContext) - } - - def clearSQLListener(): Unit = { - SparkSession.sqlListener.set(null) - } - - override def createViewSQL(session: SparkSession, plan: LogicalPlan, - originalText: Option[String]): String = { - val viewSQL = new SQLBuilder(plan).toSQL - // Validate the view SQL - make sure we can parse it and analyze it. - // If we cannot analyze the generated query, there is probably a bug in SQL generation. - try { - session.sql(viewSQL).queryExecution.assertAnalyzed() - } catch { - case NonFatal(e) => - throw new RuntimeException(s"Failed to analyze the canonicalized SQL: $viewSQL", e) - } - viewSQL - } - - override def createView(desc: CatalogTable, output: Seq[Attribute], - child: LogicalPlan): LogicalPlan = child - - override def newCreateFunctionCommand(schemaName: Option[String], functionName: String, - className: String, resources: Seq[FunctionResource], isTemp: Boolean, - ignoreIfExists: Boolean, replace: Boolean): LogicalPlan = { - if (ignoreIfExists) { - throw new ParseException(s"CREATE FUNCTION does not support IF NOT EXISTS in Spark $version") - } - if (replace) { - throw new ParseException(s"CREATE FUNCTION does not support REPLACE in Spark $version") - } - CreateFunctionCommand(schemaName, functionName, className, resources, isTemp) - } - - override def newDescribeTableCommand(table: TableIdentifier, - partitionSpec: Map[String, String], isExtended: Boolean, - isFormatted: Boolean): RunnableCommand = { - DescribeTableCommand(table, partitionSpec, isExtended, isFormatted) - } - - override def newCreateTableLikeCommand(targetIdent: TableIdentifier, - sourceIdent: TableIdentifier, location: Option[String], - allowExisting: Boolean): RunnableCommand = { - if (location.isDefined) { - throw new ParseException(s"CREATE TABLE LIKE does not support LOCATION in Spark $version") - } - CreateTableLikeCommand(targetIdent, sourceIdent, allowExisting) - } - - override def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, - alias: Option[String]): LogicalPlan = { - catalog.lookupRelation(name, alias) - } - - override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand - - override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], - ivyPath: Option[String], exclusions: Seq[String]): String = { - SparkSubmitUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath, exclusions) - } - - override def toAttributeReference(attr: Attribute)(name: String, - dataType: DataType, nullable: Boolean, metadata: Metadata, - exprId: ExprId): AttributeReference = { - AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( - exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) - } - - override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, - metadata: Metadata, exprId: ExprId, qualifier: Option[String], - isGenerated: Boolean): AttributeReference = { - AttributeReference(name, dataType, nullable, metadata)(exprId, qualifier, isGenerated) - } - - override def newErrorEstimateAttribute(name: String, dataType: DataType, - nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, - qualifier: Seq[String]): ErrorEstimateAttribute = { - ErrorEstimateAttribute21(name, dataType, nullable, metadata, exprId, realExprId)( - qualifier.headOption) - } - - override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { - insert.copy(child = newChild) - } - - override def newInsertPlanWithCountOutput(table: LogicalPlan, - partition: Map[String, Option[String]], child: LogicalPlan, - overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { - new Insert21(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) - } - - override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite.enabled - - override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifNotExists - - override def newGroupingSet(groupingSets: Seq[Seq[Expression]], - groupByExprs: Seq[Expression], child: LogicalPlan, - aggregations: Seq[NamedExpression]): LogicalPlan = { - val keyMap = groupByExprs.zipWithIndex.toMap - val numExpressions = keyMap.size - val mask = (1 << numExpressions) - 1 - val bitmasks: Seq[Int] = groupingSets.map(set => set.foldLeft(mask)((bitmap, col) => { - if (!keyMap.contains(col)) { - throw new ParseException(s"GROUPING SETS column '$col' does not appear in GROUP BY list") - } - bitmap & ~(1 << (numExpressions - 1 - keyMap(col))) - })) - GroupingSets(bitmasks, groupByExprs, child, aggregations) - } - - override def newUnresolvedRelation(tableIdentifier: TableIdentifier, - alias: Option[String]): LogicalPlan = { - UnresolvedRelation(tableIdentifier, alias) - } - - override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = u.alias - - override def newSubqueryAlias(alias: String, child: LogicalPlan, - view: Option[TableIdentifier]): SubqueryAlias = SubqueryAlias(alias, child, view) - - override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = q.view - - override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], - exprId: ExprId, qualifier: Option[String]): Alias = { - copyAlias match { - case None => Alias(child, name)(exprId, qualifier) - case Some(a: Alias) => - Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata, a.isGenerated) - case Some(a) => Alias(child, name)(a.exprId, a.qualifier, isGenerated = a.isGenerated) - } - } - - override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], - child: LogicalPlan): LogicalPlan = { - if (outputColumnNames.isEmpty) child - else { - throw new ParseException(s"Aliases ($outputColumnNames) for column names " + - s"of a sub-plan not supported in Spark $version") - } - } - - override def newSortOrder(child: Expression, direction: SortDirection, - nullOrdering: NullOrdering): SortOrder = { - SortOrder(child, direction, nullOrdering) - } - - override def newRepartitionByExpression(partitionExpressions: Seq[Expression], - numPartitions: Int, child: LogicalPlan): RepartitionByExpression = { - RepartitionByExpression(partitionExpressions, child, Some(numPartitions)) - } - - override def newUnresolvedTableValuedFunction(functionName: String, - functionArgs: Seq[Expression], outputNames: Seq[String]): UnresolvedTableValuedFunction = { - if (outputNames.nonEmpty) { - throw new ParseException(s"Aliases ($outputNames) for table value function " + - s"'$functionName' not supported in Spark $version") - } - UnresolvedTableValuedFunction(functionName, functionArgs) - } - - private def boundaryInt(boundaryType: FrameBoundaryType.Type, - num: Option[Expression]): Int = num match { - case Some(l: Literal) => l.value.toString.toInt - case _ => throw new ParseException( - s"Expression ($num) in frame boundary ($boundaryType) not supported in Spark $version") - } - - override def newFrameBoundary(boundaryType: FrameBoundaryType.Type, - num: Option[Expression]): FrameBoundary = { - boundaryType match { - case FrameBoundaryType.UnboundedPreceding => UnboundedPreceding - case FrameBoundaryType.ValuePreceding => ValuePreceding(boundaryInt(boundaryType, num)) - case FrameBoundaryType.CurrentRow => CurrentRow - case FrameBoundaryType.UnboundedFollowing => UnboundedFollowing - case FrameBoundaryType.ValueFollowing => ValueFollowing(boundaryInt(boundaryType, num)) - } - } - - override def newSpecifiedWindowFrame(frameType: FrameType, frameStart: Any, - frameEnd: Any): SpecifiedWindowFrame = { - SpecifiedWindowFrame(frameType, frameStart.asInstanceOf[FrameBoundary], - frameEnd.asInstanceOf[FrameBoundary]) - } - - override def newLogicalPlanWithHints(child: LogicalPlan, - hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints = { - new PlanWithHints21(child, hints) - } - - override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, - seed: Long, child: LogicalPlan): Sample = { - Sample(lowerBound, upperBound, withReplacement, seed, child)(isTableSample = true) - } - - override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[BroadcastHint] - - override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { - case p: PlanWithHints21 => p.allHints - case _: BroadcastHint => Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) - case _ => Map.empty - } - - override def isBroadcastable(plan: LogicalPlan): Boolean = plan.statistics.isBroadcastable - - override def newOneRowRelation(): LogicalPlan = OneRowRelation - - override def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], - generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan = { - Generate(generator, join = true, outer, qualifier, generatorOutput, child) - } - - override def writeToDataSource(ds: DataSource, mode: SaveMode, - data: Dataset[Row]): BaseRelation = { - ds.write(mode, data) - ds.copy(userSpecifiedSchema = Some(data.schema.asNullable)).resolveRelation() - } - - override def newLogicalRelation(relation: BaseRelation, - expectedOutputAttributes: Option[Seq[AttributeReference]], - catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation = { - if (isStreaming) { - throw new ParseException(s"Streaming relations not supported in Spark $version") - } - LogicalRelation(relation, expectedOutputAttributes, catalogTable) - } - - override def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], - schema: StructType, isStreaming: Boolean): Dataset[Row] = { - if (isStreaming) { - throw new SparkException(s"Streaming datasets not supported in Spark $version") - } - session.internalCreateDataFrame(catalystRows, schema) - } - - override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], - filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], - metadata: Map[String, String], relation: BaseRelation, - tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec = { - RowDataSourceScanExec(requiredColumnsIndex.map(fullOutput), rdd, relation, - UnknownPartitioning(0), metadata, tableIdentifier) - } - - override def newCodegenSparkFallback(child: SparkPlan, - session: SnappySession): CodegenSparkFallback = { - new CodegenSparkFallback21(child, session) - } - - override def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], - streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan = { - new LogicalDStreamPlan21(output, stream)(streamingSnappy) - } - - override def newCatalogDatabase(name: String, description: String, - locationUri: String, properties: Map[String, String]): CatalogDatabase = { - CatalogDatabase(name, description, locationUri, properties) - } - - override def catalogDatabaseLocationURI(database: CatalogDatabase): String = database.locationUri - // scalastyle:off override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, storage: CatalogStorageFormat, schema: StructType, provider: Option[String], partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])], - viewOriginalText: Option[String], viewText: Option[String], + stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], comment: Option[String], unsupportedFeatures: Seq[String], tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, ignoredProperties: Map[String, String]): CatalogTable = { @@ -509,527 +49,20 @@ class Spark210Internals extends SparkInternals { if (ignoredProperties.nonEmpty) { throw new SparkException(s"ignoredProperties should be always empty in Spark $version") } - val statistics = stats match { - case None => None - case Some(s) => Some(Statistics(s._1, s._2, s._3)) - } CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, - bucketSpec, owner, createTime, lastAccessTime, properties, statistics, viewOriginalText, - viewText, comment, unsupportedFeatures, tracksPartitionsInCatalog) + bucketSpec, owner, createTime, lastAccessTime, properties, + stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, + unsupportedFeatures, tracksPartitionsInCatalog) } // scalastyle:on - override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = - catalogTable.viewOriginalText - - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = true - - override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = - Map.empty - - override def newCatalogTableWithViewOriginalText(catalogTable: CatalogTable, - viewOriginalText: Option[String]): CatalogTable = { - catalogTable.copy(viewOriginalText = viewOriginalText) - } - - override def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], - outputFormat: Option[String], serde: Option[String], compressed: Boolean, - properties: Map[String, String]): CatalogStorageFormat = { - CatalogStorageFormat(locationUri, inputFormat, outputFormat, serde, compressed, properties) - } - - override def catalogStorageFormatLocationUri( - storageFormat: CatalogStorageFormat): Option[String] = storageFormat.locationUri - - override def catalogTablePartitionToRow(partition: CatalogTablePartition, - partitionSchema: StructType, defaultTimeZoneId: String): InternalRow = { - partition.toRow(partitionSchema) - } - - override def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, - table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, - numDP: Int, holdDDLTime: Boolean): Unit = { - externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, - numDP, holdDDLTime) - } - - override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, - table: String, newSchema: StructType): Unit = { - throw new ParseException(s"ALTER TABLE schema not supported in Spark $version") - } - - override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { - throw new ParseException(s"ALTER TABLE STATS not supported in Spark $version") - } - - override def alterFunction(externalCatalog: ExternalCatalog, schema: String, - function: CatalogFunction): Unit = { - throw new ParseException(s"ALTER FUNCTION not supported in Spark $version") - } - - override def columnStatToMap(stat: Any, colName: String, - dataType: DataType): Map[String, String] = { - stat.asInstanceOf[ColumnStat].toMap - } - - override def columnStatFromMap(table: String, field: StructField, - map: Map[String, String]): Option[ColumnStat] = { - ColumnStat.fromMap(table, field, map) - } - - override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, - createTime: Long): SnappyHiveExternalCatalog = { - new SnappyEmbeddedHiveCatalog210(conf, hadoopConf, createTime) - } - - override def newSmartConnectorExternalCatalog( - session: SparkSession): SmartConnectorExternalCatalog = { + override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { new SmartConnectorExternalCatalog210(session) } - override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = - DataSource.lookupDataSource(provider) - - override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { - ShuffleExchange(newPartitioning, child) - } - - override def isShuffleExchange(plan: SparkPlan): Boolean = plan.isInstanceOf[ShuffleExchange] - - override def classOfShuffleExchange(): Class[_] = classOf[ShuffleExchange] - - override def getStatistics(plan: LogicalPlan): Statistics = plan.statistics - - override def supportsPartial(aggregate: AggregateFunction): Boolean = aggregate.supportsPartial - - override def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], - aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], - planChild: () => SparkPlan): Seq[SparkPlan] = { - aggregate.AggUtils.planAggregateWithoutPartial( - groupingExpressions, - aggregateExpressions, - resultExpressions, - planChild()) - } - - override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code) - - override def newJSONOptions(parameters: Map[String, String], - session: Option[SparkSession]): JSONOptions = new JSONOptions(parameters) - - override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { - new SnappySessionState21(snappySession) - } - - override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { - // we pass wrapper catalog to make sure LogicalRelation - // is passed in PreWriteCheck - PreWriteCheck(sessionState.conf, sessionState.wrapperCatalog) - } - - override def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] = { - new HiveConditionalStrategy(_.HiveTableScans, sessionState) :: - new HiveConditionalStrategy(_.DataSinks, sessionState) :: - new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil - } - - override def newCacheManager(): CacheManager = { - // load by reflection since this class is not visible when compiling for 2.1.1 compatibility - Utils.classForName("org.apache.spark.sql.internal.SnappyCacheManager210") - .newInstance().asInstanceOf[CacheManager] - } - - override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) - - override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { - context.ui.get.storageListener.rddInfoList.map(info => new RDDStorageInfo(info.id, info.name, - info.numPartitions, info.numCachedPartitions, info.storageLevel.description, - info.memSize, info.diskSize, dataDistribution = None, partitions = None)) - } - - override def newExprCode(code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { - ExprCode(code = code, isNull = isNull, value = value) - } - - override def copyExprCode(ev: ExprCode, code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { - ev.copy(code = if (code ne null) code else ev.code, - isNull = if (isNull ne null) isNull else ev.isNull, - value = if (value ne null) value else ev.value) - } - - override def resetCode(ev: ExprCode): Unit = { - ev.code = "" - } - - override def exprCodeIsNull(ev: ExprCode): String = ev.isNull - - override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { - ev.isNull = isNull - } - - override def exprCodeValue(ev: ExprCode): String = ev.value - - override def javaType(dt: DataType, ctx: CodegenContext): String = ctx.javaType(dt) - - override def boxedType(javaType: String, ctx: CodegenContext): String = { - ctx.boxedType(javaType) - } - - override def defaultValue(dt: DataType, ctx: CodegenContext): String = ctx.defaultValue(dt) - - override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { - ctx.isPrimitiveType(javaType) - } - - override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { - ctx.primitiveTypeName(javaType) - } - - override def getValue(input: String, dataType: DataType, ordinal: String, - ctx: CodegenContext): String = { - ctx.getValue(input, dataType, ordinal) - } - - override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = { - python.ExtractPythonUDFs :: Nil - } - - override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, - pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { - if (!pivotValues.forall(_.isInstanceOf[Literal])) { - throw new AnalysisException( - s"Literal expressions required for pivot values, found: ${pivotValues.mkString("; ")}") - } - Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) - } - - override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { - pivot.copy(groupByExprs = groupByExprs) - } - - override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { - if (isAll) { - throw new ParseException(s"INTERSECT ALL not supported in spark $version") - } - Intersect(left, right) - } - - override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { - if (isAll) { - throw new ParseException(s"EXCEPT ALL not supported in spark $version") - } - Except(left, right) - } - - override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, - codegen: Boolean, cost: Boolean): LogicalPlan = { - if (cost) { - throw new ParseException(s"EXPLAIN COST not supported in spark $version") - } - ExplainCommand(logicalPlan, extended, codegen) - } - - override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { - relation.cachedColumnBuffers - } - - override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], - analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { - rules.flatMap { - case PromoteStrings => - (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: - PromoteStrings :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] - case r => r :: Nil - } - } -} - -class SnappyEmbeddedHiveCatalog210(override val conf: SparkConf, - override val hadoopConf: Configuration, override val createTime: Long) - extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { - - override def getTable(schema: String, table: String): CatalogTable = - getTableImpl(schema, table) - - override def getTableOption(schema: String, table: String): Option[CatalogTable] = - getTableIfExists(schema, table) - - override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, - ignoreIfExists: Boolean): Unit = super.createDatabase(schemaDefinition, ignoreIfExists) - - override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, - cascade: Boolean): Unit = super.dropDatabase(schema, ignoreIfNotExists, cascade) - - override protected def baseCreateTable(tableDefinition: CatalogTable, - ignoreIfExists: Boolean): Unit = super.createTable(tableDefinition, ignoreIfExists) - - override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, - purge: Boolean): Unit = super.dropTable(schema, table, ignoreIfNotExists, purge) - - override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = - super.alterTable(tableDefinition) - - override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = - super.renameTable(schema, oldName, newName) - - override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, - partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { - super.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP, holdDDLTime) - } - - override protected def baseCreateFunction(schema: String, - funcDefinition: CatalogFunction): Unit = super.createFunction(schema, funcDefinition) - - override protected def baseDropFunction(schema: String, name: String): Unit = - super.dropFunction(schema, name) - - override protected def baseRenameFunction(schema: String, oldName: String, - newName: String): Unit = super.renameFunction(schema, oldName, newName) - - override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = - createDatabaseImpl(schemaDefinition, ignoreIfExists) - - override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = - dropDatabaseImpl(schema, ignoreIfNotExists, cascade) - - override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = - alterDatabaseImpl(schemaDefinition) - - override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = - createTableImpl(table, ignoreIfExists) - - override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, - purge: Boolean): Unit = { - dropTableImpl(schema, table, ignoreIfNotExists, purge) - } - - override def renameTable(schema: String, oldName: String, newName: String): Unit = - renameTableImpl(schema, oldName, newName) - - override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) - - override def loadDynamicPartitions(schema: String, table: String, loadPath: String, - partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { - loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) - } - - override def listPartitionsByFilter(schema: String, table: String, - predicates: Seq[Expression]): Seq[CatalogTablePartition] = { - withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, predicates)) - } - - override def createFunction(schema: String, function: CatalogFunction): Unit = - createFunctionImpl(schema, function) - - override def dropFunction(schema: String, funcName: String): Unit = - dropFunctionImpl(schema, funcName) - - override def renameFunction(schema: String, oldName: String, newName: String): Unit = - renameFunctionImpl(schema, oldName, newName) + override def newCacheManager(): CacheManager = new SnappyCacheManager210 } -class SmartConnectorExternalCatalog210(override val session: SparkSession) - extends ExternalCatalog with SmartConnectorExternalCatalog { - - override def getTable(schema: String, table: String): CatalogTable = - getTableImpl(schema, table) - - override def getTableOption(schema: String, table: String): Option[CatalogTable] = - getTableIfExists(schema, table) - - override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = - createDatabaseImpl(schemaDefinition, ignoreIfExists) - - override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = - dropDatabaseImpl(schema, ignoreIfNotExists, cascade) - - override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = - throw new UnsupportedOperationException("Schema definitions cannot be altered") - - override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = - createTableImpl(table, ignoreIfExists) - - override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, - purge: Boolean): Unit = { - dropTableImpl(schema, table, ignoreIfNotExists, purge) - } - - override def renameTable(schema: String, oldName: String, newName: String): Unit = - renameTableImpl(schema, oldName, newName) - - override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) - - def alterTableSchema(db: String, table: String, schema: StructType): Unit = { - throw new UnsupportedOperationException("not expected to be invoked") - } - - override def loadDynamicPartitions(schema: String, table: String, loadPath: String, - partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { - loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) - } - - override def listPartitionsByFilter(schema: String, table: String, - predicates: Seq[Expression]): Seq[CatalogTablePartition] = { - listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId = "") - } - - override def createFunction(schema: String, function: CatalogFunction): Unit = - createFunctionImpl(schema, function) - - override def dropFunction(schema: String, funcName: String): Unit = - dropFunctionImpl(schema, funcName) - - override def renameFunction(schema: String, oldName: String, newName: String): Unit = - renameFunctionImpl(schema, oldName, newName) -} - -class SnappySessionCatalog21(override val snappySession: SnappySession, - override val snappyExternalCatalog: SnappyExternalCatalog, - override val globalTempViewManager: GlobalTempViewManager, - override val functionResourceLoader: FunctionResourceLoader, - override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, - override val sqlConf: SQLConf, hadoopConf: Configuration, - override val wrappedCatalog: Option[SnappySessionCatalog]) - extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionResourceLoader, - functionRegistry, sqlConf, hadoopConf) with SnappySessionCatalog { - - override def functionNotFound(name: String): Nothing = { - super.failFunctionLookup(name) - } - - override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, - validateTableLocation: Boolean): Unit = super.createTable(table, ignoreIfExists) - - override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { - createTableImpl(table, ignoreIfExists, validateTableLocation = true) - } - - override def getTableMetadataOption(name: TableIdentifier): Option[CatalogTable] = { - super.getTableMetadataOption(name) match { - case None => None - case Some(table) => Some(convertCharTypes(table)) - } - } - - override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = child - - override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = - SimpleCatalogRelation(schemaName, table) - - override def lookupRelation(name: TableIdentifier, alias: Option[String]): LogicalPlan = - lookupRelationImpl(name, alias) - - override def makeFunctionBuilder(name: String, functionClassName: String): FunctionBuilder = - makeFunctionBuilderImpl(name, functionClassName) -} - -class SnappySessionState21(override val snappySession: SnappySession) - extends SessionState(snappySession) with SnappySessionState { - - self => - - override def catalogBuilder(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { - new SnappySessionCatalog21(snappySession, - snappySession.sharedState.getExternalCatalogInstance(snappySession), - snappySession.sharedState.globalTempViewManager, - functionResourceLoader, functionRegistry, sqlParser, conf, newHadoopConf(), wrapped) - } - - override def analyzerBuilder(): Analyzer = new Analyzer(catalog, conf) with SnappyAnalyzer { - - self => - - override def session: SnappySession = snappySession - - private def state: SnappySessionState = session.sessionState - - private def hiveCatalog(state: SessionState): HiveSessionCatalog = - state.catalog.asInstanceOf[HiveSessionCatalog] - - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { - val extensions1 = session.contextFunctions.getExtendedResolutionRules - val extensions2 = session.contextFunctions.getPostHocResolutionRules - val rules = new HiveConditionalRule(hiveCatalog(_).ParquetConversions, state) :: - new HiveConditionalRule(hiveCatalog(_).OrcConversions, state) :: - AnalyzeCreateTable(session) :: - new PreprocessTable(state) :: - ResolveAliasInGroupBy :: - new FindDataSourceTable(session) :: - DataSourceAnalysis(conf) :: - AnalyzeMutableOperations(session, this) :: - ResolveQueryHints(session) :: - RowLevelSecurity :: - ExternalRelationLimitFetch :: - (if (conf.runSQLonFile) new ResolveDataSource(session) :: extensions2 else extensions2) - if (extensions1.isEmpty) rules else extensions1 ++ rules - } - - override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules - - override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = self.extendedResolutionRules - override val extendedCheckRules: Seq[LogicalPlan => Unit] = self.extendedCheckRules - - override def execute(plan: LogicalPlan): LogicalPlan = self.execute(plan) - } - } - - override def optimizerBuilder(): Optimizer = { - new SparkOptimizer(catalog, conf, experimentalMethods) with DefaultOptimizer { - override def state: SnappySessionState = self - override def batches: Seq[Batch] = batchesImpl - } - } - - override lazy val conf: SQLConf = new SnappyConf(snappySession) - - override lazy val sqlParser: SnappySqlParser = snappySession.contextFunctions.newSQLParser() - - override lazy val streamingQueryManager: StreamingQueryManager = { - // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with - // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This - // implies that Snappydata aggregation optimisation will be turned off for any usage of - // this session including non-streaming queries. - - HashAggregateSize.set(snappySession.sessionState.conf, "-1") - new StreamingQueryManager(snappySession) - } -} - -class CodegenSparkFallback21(child: SparkPlan, - session: SnappySession) extends CodegenSparkFallback(child, session) { - - override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, - verbose: Boolean, prefix: String): StringBuilder = { - child.generateTreeString(depth, lastChildren, builder, verbose, prefix) - } -} - -class LogicalDStreamPlan21(output: Seq[Attribute], - stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) - extends LogicalDStreamPlan(output, stream)(streamingSnappy) { - - @transient override lazy val statistics: Statistics = Statistics( - sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) - ) -} - -case class ErrorEstimateAttribute21(name: String, dataType: DataType, nullable: Boolean, - override val metadata: Metadata, exprId: ExprId, realExprId: ExprId)( - val qualifier: Option[String]) extends ErrorEstimateAttribute { - - override def singleQualifier: Option[String] = qualifier - - override def withQualifier(newQualifier: Option[String]): Attribute = { - if (newQualifier == qualifier) { - this - } else { - ErrorEstimateAttribute21(name, dataType, nullable, metadata, exprId, - realExprId)(newQualifier) - } - } -} +final class SmartConnectorExternalCatalog210(session: SparkSession) + extends SmartConnectorExternalCatalog21(session) diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index 0a6dc64105..ad6cc090e6 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -20,8 +20,8 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with Spark 2.1.1 -sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/scala" -sourceSets.main.scala.srcDir "../spark-${spark210Version}/src/main/java" +sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index 0fbdb209e0..27aee04ad7 100644 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -17,14 +17,14 @@ package org.apache.spark.sql.internal -import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog +import io.snappydata.sql.catalog.SnappyExternalCatalog import org.apache.spark.SparkException import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} import org.apache.spark.sql.catalyst.expressions.Expression -import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, LogicalPlan, Statistics} +import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Statistics} import org.apache.spark.sql.execution.CacheManager import org.apache.spark.sql.types.StructType import org.apache.spark.storage.StorageLevel @@ -32,7 +32,7 @@ import org.apache.spark.storage.StorageLevel /** * Implementation of [[SparkInternals]] for Spark 2.1.1. */ -class Spark211Internals extends Spark210Internals { +class Spark211Internals extends Spark21Internals { override def version: String = "2.1.1" @@ -51,21 +51,17 @@ class Spark211Internals extends Spark210Internals { storage: CatalogStorageFormat, schema: StructType, provider: Option[String], partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])], - viewOriginalText: Option[String], viewText: Option[String], + stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], comment: Option[String], unsupportedFeatures: Seq[String], tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, ignoredProperties: Map[String, String]): CatalogTable = { if (ignoredProperties.nonEmpty) { throw new SparkException(s"ignoredProperties should be always empty in Spark $version") } - val statistics = stats match { - case None => None - case Some(s) => Some(Statistics(s._1, s._2, s._3)) - } CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, - bucketSpec, owner, createTime, lastAccessTime, properties, statistics, viewOriginalText, - viewText, comment, unsupportedFeatures, tracksPartitionsInCatalog, schemaPreservesCase) + bucketSpec, owner, createTime, lastAccessTime, properties, + stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, + unsupportedFeatures, tracksPartitionsInCatalog, schemaPreservesCase) } // scalastyle:on @@ -78,8 +74,7 @@ class Spark211Internals extends Spark210Internals { externalCatalog.alterTableSchema(schemaName, table, newSchema) } - override def newSmartConnectorExternalCatalog( - session: SparkSession): SmartConnectorExternalCatalog = { + override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { new SmartConnectorExternalCatalog211(session) } @@ -87,7 +82,7 @@ class Spark211Internals extends Spark210Internals { } /** - * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. + * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. */ final class SnappyCacheManager211 extends CacheManager { @@ -115,7 +110,7 @@ final class SnappyCacheManager211 extends CacheManager { } final class SmartConnectorExternalCatalog211(session: SparkSession) - extends SmartConnectorExternalCatalog210(session) { + extends SmartConnectorExternalCatalog21(session) { override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) diff --git a/core/compatibility/spark-2.1.0/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java b/core/compatibility/spark-2.1.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java similarity index 100% rename from core/compatibility/spark-2.1.0/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java rename to core/compatibility/spark-2.1.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala similarity index 100% rename from core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala rename to core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala new file mode 100644 index 0000000000..a93ebc4796 --- /dev/null +++ b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -0,0 +1,1008 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +package org.apache.spark.sql.internal + +import scala.reflect.ClassTag +import scala.util.control.NonFatal + +import io.snappydata.Property.HashAggregateSize +import io.snappydata.sql.catalog.SnappyExternalCatalog +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog +import io.snappydata.{HintName, QueryHint} +import org.apache.hadoop.conf.Configuration + +import org.apache.spark.deploy.SparkSubmitUtils +import org.apache.spark.internal.config.ConfigBuilder +import org.apache.spark.rdd.RDD +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder +import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings +import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec +import org.apache.spark.sql.catalyst.catalog.{ExternalCatalog, _} +import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} +import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} +import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.optimizer.Optimizer +import org.apache.spark.sql.catalyst.plans.logical._ +import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartitioning} +import org.apache.spark.sql.catalyst.rules.Rule +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap +import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} +import org.apache.spark.sql.execution._ +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} +import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, ExplainCommand, RunnableCommand} +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.execution.datasources._ +import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} +import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} +import org.apache.spark.sql.hive.{HiveConditionalRule, HiveConditionalStrategy, HiveSessionCatalog, SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder +import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} +import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} +import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} +import org.apache.spark.status.api.v1.RDDStorageInfo +import org.apache.spark.streaming.SnappyStreamingContext +import org.apache.spark.streaming.dstream.DStream +import org.apache.spark.{SparkConf, SparkContext, SparkException} + +/** + * Base implementation of [[SparkInternals]] for Spark 2.1.x releases. + */ +abstract class Spark21Internals extends SparkInternals { + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + implicit val encoder: ExpressionEncoder[Row] = RowEncoder(plan.schema) + spark.sharedState.cacheManager.uncacheQuery(Dataset(spark, plan), blocking) + } + + /** + * Apply a map function to each expression present in this query operator, and return a new + * query operator based on the mapped expressions. + * + * Taken from the mapExpressions in Spark 2.1.1 and beyond. + */ + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + var changed = false + + @inline def transformExpression(e: Expression): Expression = { + val newE = f(e) + if (newE.fastEquals(e)) { + e + } else { + changed = true + newE + } + } + + def recursiveTransform(arg: Any): AnyRef = arg match { + case e: Expression => transformExpression(e) + case Some(e: Expression) => Some(transformExpression(e)) + case Some(seq: Traversable[_]) => Some(seq.map(recursiveTransform)) + case m: Map[_, _] => m + case d: DataType => d // Avoid unpacking Structs + case seq: Traversable[_] => seq.map(recursiveTransform) + case other: AnyRef => other + case null => null + } + + /** + * Efficient alternative to `productIterator.map(f).toArray`. + */ + def mapProductIterator[B: ClassTag](f: Any => B): Array[B] = { + val arr = Array.ofDim[B](plan.productArity) + var i = 0 + while (i < arr.length) { + arr(i) = f(plan.productElement(i)) + i += 1 + } + arr + } + + val newArgs = mapProductIterator(recursiveTransform) + + if (changed) plan.makeCopy(newArgs).asInstanceOf[plan.type] else plan + } + + override def registerFunction(session: SparkSession, name: FunctionIdentifier, + info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { + session.sessionState.functionRegistry.registerFunction(name.unquotedString, info, function) + } + + override def addClassField(ctx: CodegenContext, javaType: String, + varPrefix: String, initFunc: String => String, + forceInline: Boolean, useFreshName: Boolean): String = { + val variableName = if (useFreshName) ctx.freshName(varPrefix) else varPrefix + ctx.addMutableState(javaType, variableName, initFunc(variableName)) + variableName + } + + override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = { + ctx.mutableStates.map(t => t._1 -> t._2) -> ctx.mutableStates.map(_._3) + } + + override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, + inlineToOuterClass: Boolean = false): String = { + ctx.addNewFunction(funcName, funcCode) + funcName + } + + override def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean = { + ctx.addedFunctions.contains(funcName) + } + + override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { + ctx.splitExpressions(ctx.INPUT_ROW, expressions) + } + + override def resetCopyResult(ctx: CodegenContext): Unit = ctx.copyResult = false + + override def isPredicateSubquery(expr: Expression): Boolean = + expr.isInstanceOf[PredicateSubquery] + + override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, + newExprId: ExprId): Expression = { + expr.asInstanceOf[PredicateSubquery].copy(plan = newPlan, exprId = newExprId) + } + + // scalastyle:off + + override def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, + relationSchema: StructType, allFilters: Seq[Expression], + schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, + isSampleReservoirAsRegion: Boolean): ColumnTableScan = { + new ColumnTableScan21(output, dataRDD, otherRDDs, numBuckets, partitionColumns, + partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, + caseSensitive, isSampleReservoirAsRegion) + } + + // scalastyle:on + + override def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], + numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], table: String, + baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan = { + new RowTableScan21(output, schema, dataRDD, numBuckets, partitionColumns, + partitionColumnAliases, JdbcExtendedUtils.toLowerCase(table), baseRelation, caseSensitive) + } + + override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { + WholeStageCodegenExec(plan) + } + + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + new CaseInsensitiveMap(map) + } + + def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { + // if the call is done the second time, then attach in embedded mode + // too since this is coming from ToolsCallbackImpl + val (forceAttachUI, listener, old) = SparkSession.sqlListener.get() match { + case l: SnappySQLListener => (true, l, null) // already set + case l => + val listener = new SnappySQLListener(sparkContext.conf) + if (SparkSession.sqlListener.compareAndSet(l, listener)) { + sparkContext.listenerBus.addListener(listener) + if (l ne null) sparkContext.listenerBus.removeListener(l) + } + (false, listener, l) + } + // embedded mode attaches SQLTab later via ToolsCallbackImpl that also + // takes care of injecting any authentication module if configured + sparkContext.ui match { + case Some(ui) if forceAttachUI || !SnappyContext.getClusterMode(sparkContext) + .isInstanceOf[SnappyEmbeddedMode] => + // clear the previous SQLTab, if any + if (old ne null) { + ui.getTabs.foreach { + case tab: SQLTab => + ui.detachTab(tab) + ui.removeStaticHandler("/static/sql") + case _ => + } + } + new SQLTab(listener, ui) + case _ => + } + } + + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + new SnappySharedState21(sparkContext) + } + + def clearSQLListener(): Unit = { + SparkSession.sqlListener.set(null) + } + + override def createViewSQL(session: SparkSession, plan: LogicalPlan, + originalText: Option[String]): String = { + val viewSQL = new SQLBuilder(plan).toSQL + // Validate the view SQL - make sure we can parse it and analyze it. + // If we cannot analyze the generated query, there is probably a bug in SQL generation. + try { + session.sql(viewSQL).queryExecution.assertAnalyzed() + } catch { + case NonFatal(e) => + throw new RuntimeException(s"Failed to analyze the canonicalized SQL: $viewSQL", e) + } + viewSQL + } + + override def createView(desc: CatalogTable, output: Seq[Attribute], + child: LogicalPlan): LogicalPlan = child + + override def newCreateFunctionCommand(schemaName: Option[String], functionName: String, + className: String, resources: Seq[FunctionResource], isTemp: Boolean, + ignoreIfExists: Boolean, replace: Boolean): LogicalPlan = { + if (ignoreIfExists) { + throw new ParseException(s"CREATE FUNCTION does not support IF NOT EXISTS in Spark $version") + } + if (replace) { + throw new ParseException(s"CREATE FUNCTION does not support REPLACE in Spark $version") + } + CreateFunctionCommand(schemaName, functionName, className, resources, isTemp) + } + + override def newDescribeTableCommand(table: TableIdentifier, + partitionSpec: Map[String, String], isExtended: Boolean, + isFormatted: Boolean): RunnableCommand = { + DescribeTableCommand(table, partitionSpec, isExtended, isFormatted) + } + + override def newCreateTableLikeCommand(targetIdent: TableIdentifier, + sourceIdent: TableIdentifier, location: Option[String], + allowExisting: Boolean): RunnableCommand = { + if (location.isDefined) { + throw new ParseException(s"CREATE TABLE LIKE does not support LOCATION in Spark $version") + } + CreateTableLikeCommand(targetIdent, sourceIdent, allowExisting) + } + + override def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, + alias: Option[String]): LogicalPlan = { + catalog.lookupRelation(name, alias) + } + + override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand + + override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], + ivyPath: Option[String], exclusions: Seq[String]): String = { + SparkSubmitUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath, exclusions) + } + + override def toAttributeReference(attr: Attribute)(name: String, + dataType: DataType, nullable: Boolean, metadata: Metadata, + exprId: ExprId): AttributeReference = { + AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + exprId, qualifier = attr.qualifier, isGenerated = attr.isGenerated) + } + + override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Seq[String], + isGenerated: Boolean): AttributeReference = { + AttributeReference(name, dataType, nullable, metadata)(exprId, + qualifier.headOption, isGenerated) + } + + override def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, realExprId: ExprId, exprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute = { + ErrorEstimateAttribute21(name, dataType, nullable, metadata, realExprId)( + exprId, qualifier.headOption) + } + + override def newApproxColumnExtractor(child: Expression, name: String, ordinal: Int, + dataType: DataType, nullable: Boolean, exprId: ExprId, + qualifier: Seq[String]): ApproxColumnExtractor = { + ApproxColumnExtractor21(child, name, ordinal, dataType, nullable)(exprId, qualifier.headOption) + } + + override def newTaggedAttribute(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Seq[String]): TaggedAttribute = { + TaggedAttribute21(tag, name, dataType, nullable, metadata)(exprId, qualifier.headOption) + } + + override def newTaggedAlias(tag: TransformableTag, child: Expression, name: String, + exprId: ExprId, qualifier: Seq[String]): TaggedAlias = { + TaggedAlias21(tag, child, name)(exprId, qualifier.headOption) + } + + // scalastyle:off + + override def newClosedFormColumnExtractor(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, nullable: Boolean, exprId: ExprId, + qualifier: Seq[String]): ClosedFormColumnExtractor = { + ClosedFormColumnExtractor21(child, name, confidence, confFactor, aggType, error, + dataType, behavior, nullable)(exprId, qualifier.headOption) + } + + // scalastyle:on + + override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { + insert.copy(child = newChild) + } + + override def newInsertPlanWithCountOutput(table: LogicalPlan, + partition: Map[String, Option[String]], child: LogicalPlan, + overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { + new Insert21(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) + } + + override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite.enabled + + override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifNotExists + + override def newGroupingSet(groupingSets: Seq[Seq[Expression]], + groupByExprs: Seq[Expression], child: LogicalPlan, + aggregations: Seq[NamedExpression]): LogicalPlan = { + val keyMap = groupByExprs.zipWithIndex.toMap + val numExpressions = keyMap.size + val mask = (1 << numExpressions) - 1 + val bitmasks: Seq[Int] = groupingSets.map(set => set.foldLeft(mask)((bitmap, col) => { + if (!keyMap.contains(col)) { + throw new ParseException(s"GROUPING SETS column '$col' does not appear in GROUP BY list") + } + bitmap & ~(1 << (numExpressions - 1 - keyMap(col))) + })) + GroupingSets(bitmasks, groupByExprs, child, aggregations) + } + + override def newUnresolvedRelation(tableIdentifier: TableIdentifier, + alias: Option[String]): LogicalPlan = { + UnresolvedRelation(tableIdentifier, alias) + } + + override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = u.alias + + override def newSubqueryAlias(alias: String, child: LogicalPlan, + view: Option[TableIdentifier]): SubqueryAlias = SubqueryAlias(alias, child, view) + + override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = q.view + + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId, qualifier: Seq[String]): Alias = { + copyAlias match { + case None => Alias(child, name)(exprId, qualifier.headOption) + case Some(a: Alias) => + Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata, a.isGenerated) + case Some(a) => Alias(child, name)(a.exprId, a.qualifier, isGenerated = a.isGenerated) + } + } + + override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], + child: LogicalPlan): LogicalPlan = { + if (outputColumnNames.isEmpty) child + else { + throw new ParseException(s"Aliases ($outputColumnNames) for column names " + + s"of a sub-plan not supported in Spark $version") + } + } + + override def newSortOrder(child: Expression, direction: SortDirection, + nullOrdering: NullOrdering): SortOrder = { + SortOrder(child, direction, nullOrdering) + } + + override def newRepartitionByExpression(partitionExpressions: Seq[Expression], + numPartitions: Int, child: LogicalPlan): RepartitionByExpression = { + RepartitionByExpression(partitionExpressions, child, Some(numPartitions)) + } + + override def newUnresolvedTableValuedFunction(functionName: String, + functionArgs: Seq[Expression], outputNames: Seq[String]): UnresolvedTableValuedFunction = { + if (outputNames.nonEmpty) { + throw new ParseException(s"Aliases ($outputNames) for table value function " + + s"'$functionName' not supported in Spark $version") + } + UnresolvedTableValuedFunction(functionName, functionArgs) + } + + private def boundaryInt(boundaryType: FrameBoundaryType.Type, + num: Option[Expression]): Int = num match { + case Some(l: Literal) => l.value.toString.toInt + case _ => throw new ParseException( + s"Expression ($num) in frame boundary ($boundaryType) not supported in Spark $version") + } + + override def newFrameBoundary(boundaryType: FrameBoundaryType.Type, + num: Option[Expression]): FrameBoundary = { + boundaryType match { + case FrameBoundaryType.UnboundedPreceding => UnboundedPreceding + case FrameBoundaryType.ValuePreceding => ValuePreceding(boundaryInt(boundaryType, num)) + case FrameBoundaryType.CurrentRow => CurrentRow + case FrameBoundaryType.UnboundedFollowing => UnboundedFollowing + case FrameBoundaryType.ValueFollowing => ValueFollowing(boundaryInt(boundaryType, num)) + } + } + + override def newSpecifiedWindowFrame(frameType: FrameType, frameStart: Any, + frameEnd: Any): SpecifiedWindowFrame = { + SpecifiedWindowFrame(frameType, frameStart.asInstanceOf[FrameBoundary], + frameEnd.asInstanceOf[FrameBoundary]) + } + + override def newLogicalPlanWithHints(child: LogicalPlan, + hints: Map[QueryHint.Type, HintName.Type]): LogicalPlan = { + new PlanWithHints21(child, hints) + } + + override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, + seed: Long, child: LogicalPlan): Sample = { + Sample(lowerBound, upperBound, withReplacement, seed, child)(isTableSample = true) + } + + override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[BroadcastHint] + + override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { + case p: PlanWithHints21 => p.allHints + case _: BroadcastHint => Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) + case _ => Map.empty + } + + override def isBroadcastable(plan: LogicalPlan): Boolean = plan.statistics.isBroadcastable + + override def newOneRowRelation(): LogicalPlan = OneRowRelation + + override def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], + generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan = { + Generate(generator, join = true, outer, qualifier, generatorOutput, child) + } + + override def writeToDataSource(ds: DataSource, mode: SaveMode, + data: Dataset[Row]): BaseRelation = { + ds.write(mode, data) + ds.copy(userSpecifiedSchema = Some(data.schema.asNullable)).resolveRelation() + } + + override def newLogicalRelation(relation: BaseRelation, + expectedOutputAttributes: Option[Seq[AttributeReference]], + catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation = { + if (isStreaming) { + throw new ParseException(s"Streaming relations not supported in Spark $version") + } + LogicalRelation(relation, expectedOutputAttributes, catalogTable) + } + + override def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], + schema: StructType, isStreaming: Boolean): Dataset[Row] = { + if (isStreaming) { + throw new SparkException(s"Streaming datasets not supported in Spark $version") + } + session.internalCreateDataFrame(catalystRows, schema) + } + + override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], + filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], + metadata: Map[String, String], relation: BaseRelation, + tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec = { + RowDataSourceScanExec(requiredColumnsIndex.map(fullOutput), rdd, relation, + UnknownPartitioning(0), metadata, tableIdentifier) + } + + override def newCodegenSparkFallback(child: SparkPlan, + session: SnappySession): CodegenSparkFallback = { + new CodegenSparkFallback21(child, session) + } + + override def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], + streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan = { + new LogicalDStreamPlan21(output, stream)(streamingSnappy) + } + + override def newCatalogDatabase(name: String, description: String, + locationUri: String, properties: Map[String, String]): CatalogDatabase = { + CatalogDatabase(name, description, locationUri, properties) + } + + override def catalogDatabaseLocationURI(database: CatalogDatabase): String = database.locationUri + + override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = + catalogTable.viewOriginalText + + override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = true + + override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = + Map.empty + + override def newCatalogTableWithViewOriginalText(catalogTable: CatalogTable, + viewOriginalText: Option[String]): CatalogTable = { + catalogTable.copy(viewOriginalText = viewOriginalText) + } + + override def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], + outputFormat: Option[String], serde: Option[String], compressed: Boolean, + properties: Map[String, String]): CatalogStorageFormat = { + CatalogStorageFormat(locationUri, inputFormat, outputFormat, serde, compressed, properties) + } + + override def catalogStorageFormatLocationUri( + storageFormat: CatalogStorageFormat): Option[String] = storageFormat.locationUri + + override def catalogTablePartitionToRow(partition: CatalogTablePartition, + partitionSchema: StructType, defaultTimeZoneId: String): InternalRow = { + partition.toRow(partitionSchema) + } + + override def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, + table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, + numDP: Int, holdDDLTime: Boolean): Unit = { + externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, + numDP, holdDDLTime) + } + + override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit = { + throw new ParseException(s"ALTER TABLE schema not supported in Spark $version") + } + + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, + stats: Option[AnyRef]): Unit = { + throw new ParseException(s"ALTER TABLE STATS not supported in Spark $version") + } + + override def alterFunction(externalCatalog: ExternalCatalog, schema: String, + function: CatalogFunction): Unit = { + throw new ParseException(s"ALTER FUNCTION not supported in Spark $version") + } + + override def columnStatToMap(stat: Any, colName: String, + dataType: DataType): Map[String, String] = { + stat.asInstanceOf[ColumnStat].toMap + } + + override def columnStatFromMap(table: String, field: StructField, + map: Map[String, String]): Option[AnyRef] = { + ColumnStat.fromMap(table, field, map) + } + + override def toCatalogStatistics(sizeInBytes: BigInt, rowCount: Option[BigInt], + colStats: Map[String, AnyRef]): AnyRef = { + Statistics(sizeInBytes, rowCount, colStats.asInstanceOf[Map[String, ColumnStat]]) + } + + override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog = { + new SnappyEmbeddedHiveCatalog21(conf, hadoopConf, createTime) + } + + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = + DataSource.lookupDataSource(provider) + + override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { + ShuffleExchange(newPartitioning, child) + } + + override def isShuffleExchange(plan: SparkPlan): Boolean = plan.isInstanceOf[ShuffleExchange] + + override def classOfShuffleExchange(): Class[_] = classOf[ShuffleExchange] + + override def getStatistics(plan: LogicalPlan): Statistics = plan.statistics + + override def supportsPartial(aggregate: AggregateFunction): Boolean = aggregate.supportsPartial + + override def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], + aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], + planChild: () => SparkPlan): Seq[SparkPlan] = { + aggregate.AggUtils.planAggregateWithoutPartial( + groupingExpressions, + aggregateExpressions, + resultExpressions, + planChild()) + } + + override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code) + + override def newJSONOptions(parameters: Map[String, String], + session: Option[SparkSession]): JSONOptions = new JSONOptions(parameters) + + override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { + new SnappySessionState21(snappySession) + } + + override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { + // we pass wrapper catalog to make sure LogicalRelation + // is passed in PreWriteCheck + PreWriteCheck(sessionState.conf, sessionState.wrapperCatalog) + } + + override def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] = { + new HiveConditionalStrategy(_.HiveTableScans, sessionState) :: + new HiveConditionalStrategy(_.DataSinks, sessionState) :: + new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil + } + + override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) + + override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { + context.ui.get.storageListener.rddInfoList.map(info => new RDDStorageInfo(info.id, info.name, + info.numPartitions, info.numCachedPartitions, info.storageLevel.description, + info.memSize, info.diskSize, dataDistribution = None, partitions = None)) + } + + override def newExprCode(code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + ExprCode(code = code, isNull = isNull, value = value) + } + + override def copyExprCode(ev: ExprCode, code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + ev.copy(code = if (code ne null) code else ev.code, + isNull = if (isNull ne null) isNull else ev.isNull, + value = if (value ne null) value else ev.value) + } + + override def resetCode(ev: ExprCode): Unit = { + ev.code = "" + } + + override def exprCodeIsNull(ev: ExprCode): String = ev.isNull + + override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { + ev.isNull = isNull + } + + override def exprCodeValue(ev: ExprCode): String = ev.value + + override def javaType(dt: DataType, ctx: CodegenContext): String = ctx.javaType(dt) + + override def boxedType(javaType: String, ctx: CodegenContext): String = ctx.boxedType(javaType) + + override def defaultValue(dt: DataType, ctx: CodegenContext): String = ctx.defaultValue(dt) + + override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { + ctx.isPrimitiveType(javaType) + } + + override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { + ctx.primitiveTypeName(javaType) + } + + override def getValue(input: String, dataType: DataType, ordinal: String, + ctx: CodegenContext): String = { + ctx.getValue(input, dataType, ordinal) + } + + override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = { + python.ExtractPythonUDFs :: Nil + } + + override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { + if (!pivotValues.forall(_.isInstanceOf[Literal])) { + throw new AnalysisException( + s"Literal expressions required for pivot values, found: ${pivotValues.mkString("; ")}") + } + Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) + } + + override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { + pivot.copy(groupByExprs = groupByExprs) + } + + override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { + if (isAll) { + throw new ParseException(s"INTERSECT ALL not supported in spark $version") + } + Intersect(left, right) + } + + override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { + if (isAll) { + throw new ParseException(s"EXCEPT ALL not supported in spark $version") + } + Except(left, right) + } + + override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, + codegen: Boolean, cost: Boolean): LogicalPlan = { + if (cost) { + throw new ParseException(s"EXPLAIN COST not supported in spark $version") + } + ExplainCommand(logicalPlan, extended = extended, codegen = codegen) + } + + override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { + relation.cachedColumnBuffers + } + + override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], + analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { + rules.flatMap { + case PromoteStrings => + (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: + PromoteStrings :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] + case r => r :: Nil + } + } +} + +class SnappyEmbeddedHiveCatalog21(_conf: SparkConf, _hadoopConf: Configuration, + _createTime: Long) extends SnappyHiveExternalCatalog(_conf, _hadoopConf, _createTime) { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override def getTableOption(schema: String, table: String): Option[CatalogTable] = + getTableIfExists(schema, table) + + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = super.createDatabase(schemaDefinition, ignoreIfExists) + + override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = super.dropDatabase(schema, ignoreIfNotExists, cascade) + + override protected def baseCreateTable(tableDefinition: CatalogTable, + ignoreIfExists: Boolean): Unit = super.createTable(tableDefinition, ignoreIfExists) + + override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = super.dropTable(schema, table, ignoreIfNotExists, purge) + + override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = + super.alterTable(tableDefinition) + + override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = + super.renameTable(schema, oldName, newName) + + override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + super.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP, holdDDLTime) + } + + override protected def baseCreateFunction(schema: String, + funcDefinition: CatalogFunction): Unit = super.createFunction(schema, funcDefinition) + + override protected def baseDropFunction(schema: String, name: String): Unit = + super.dropFunction(schema, name) + + override protected def baseRenameFunction(schema: String, oldName: String, + newName: String): Unit = super.renameFunction(schema, oldName, newName) + + override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = + createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = + dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = { + dropTableImpl(schema, table, ignoreIfNotExists, purge) + } + + override def renameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) + } + + override def listPartitionsByFilter(schema: String, table: String, + predicates: Seq[Expression]): Seq[CatalogTablePartition] = { + withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, predicates)) + } + + override def createFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override def dropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override def renameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +abstract class SmartConnectorExternalCatalog21(override val session: SparkSession) + extends SmartConnectorExternalCatalog { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override def getTableOption(schema: String, table: String): Option[CatalogTable] = + getTableIfExists(schema, table) + + override def createDatabase(schemaDefinition: CatalogDatabase, ignoreIfExists: Boolean): Unit = + createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, cascade: Boolean): Unit = + dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = + throw new UnsupportedOperationException("Schema definitions cannot be altered") + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = { + dropTableImpl(schema, table, ignoreIfNotExists, purge) + } + + override def renameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) + } + + override def listPartitionsByFilter(schema: String, table: String, + predicates: Seq[Expression]): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId = "") + } + + override def createFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override def dropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override def renameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +class SnappySessionCatalog21(override val snappySession: SnappySession, + override val snappyExternalCatalog: SnappyExternalCatalog, + override val globalTempManager: GlobalTempViewManager, + override val functionResourceLoader: FunctionResourceLoader, + override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, + override val sqlConf: SQLConf, hadoopConf: Configuration, + override val wrappedCatalog: Option[SnappySessionCatalog]) + extends SessionCatalog(snappyExternalCatalog, globalTempManager, functionResourceLoader, + functionRegistry, sqlConf, hadoopConf) with SnappySessionCatalog { + + override def functionNotFound(name: String): Nothing = { + super.failFunctionLookup(name) + } + + override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = super.createTable(table, ignoreIfExists) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { + createTableImpl(table, ignoreIfExists, validateTableLocation = true) + } + + override def getTableMetadataOption(name: TableIdentifier): Option[CatalogTable] = { + super.getTableMetadataOption(name) match { + case None => None + case Some(table) => Some(convertCharTypes(table)) + } + } + + override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = child + + override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = + SimpleCatalogRelation(schemaName, table) + + override def lookupRelation(name: TableIdentifier, alias: Option[String]): LogicalPlan = + lookupRelationImpl(name, alias) + + override def makeFunctionBuilder(name: String, functionClassName: String): FunctionBuilder = + makeFunctionBuilderImpl(name, functionClassName) +} + +class SnappySessionState21(override val snappySession: SnappySession) + extends SessionState(snappySession) with SnappySessionState { + + self => + + override def catalogBuilder(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + new SnappySessionCatalog21(snappySession, + snappySession.sharedState.getExternalCatalogInstance(snappySession), + snappySession.sharedState.globalTempViewManager, + functionResourceLoader, functionRegistry, sqlParser, conf, newHadoopConf(), wrapped) + } + + override def analyzerBuilder(): Analyzer = new Analyzer(catalog, conf) with SnappyAnalyzer { + + self => + + override def session: SnappySession = snappySession + + private def state: SnappySessionState = session.sessionState + + private def hiveCatalog(state: SessionState): HiveSessionCatalog = + state.catalog.asInstanceOf[HiveSessionCatalog] + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { + val extensions1 = session.contextFunctions.getExtendedResolutionRules + val extensions2 = session.contextFunctions.getPostHocResolutionRules + val rules = new HiveConditionalRule(hiveCatalog(_).ParquetConversions, state) :: + new HiveConditionalRule(hiveCatalog(_).OrcConversions, state) :: + AnalyzeCreateTable(session) :: + new PreprocessTable(state) :: + ResolveAliasInGroupBy :: + new FindDataSourceTable(session) :: + DataSourceAnalysis(conf) :: + AnalyzeMutableOperations(session, this) :: + ResolveQueryHints(session) :: + RowLevelSecurity :: + ExternalRelationLimitFetch :: + (if (conf.runSQLonFile) new ResolveDataSource(session) :: extensions2 else extensions2) + if (extensions1.isEmpty) rules else extensions1 ++ rules + } + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = getExtendedCheckRules + + override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = self.extendedResolutionRules + override val extendedCheckRules: Seq[LogicalPlan => Unit] = self.extendedCheckRules + + override def execute(plan: LogicalPlan): LogicalPlan = self.execute(plan) + } + } + + override def optimizerBuilder(): Optimizer = { + new SparkOptimizer(catalog, conf, experimentalMethods) with DefaultOptimizer { + + override def state: SnappySessionState = self + + override def batches: Seq[Batch] = batchesImpl + } + } + + override lazy val conf: SQLConf = new SnappyConf(snappySession) + + override lazy val sqlParser: SnappySqlParser = snappySession.contextFunctions.newSQLParser() + + override lazy val streamingQueryManager: StreamingQueryManager = { + // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with + // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This + // implies that Snappydata aggregation optimisation will be turned off for any usage of + // this session including non-streaming queries. + + HashAggregateSize.set(snappySession.sessionState.conf, "-1") + new StreamingQueryManager(snappySession) + } +} + +class CodegenSparkFallback21(child: SparkPlan, + session: SnappySession) extends CodegenSparkFallback(child, session) { + + override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, + verbose: Boolean, prefix: String): StringBuilder = { + child.generateTreeString(depth, lastChildren, builder, verbose, prefix) + } +} + +class LogicalDStreamPlan21(output: Seq[Attribute], + stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) + extends LogicalDStreamPlan(output, stream)(streamingSnappy) { + + @transient override lazy val statistics: Statistics = Statistics( + sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) + ) +} diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala new file mode 100644 index 0000000000..be698e7c7a --- /dev/null +++ b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql.catalyst.expressions.{Attribute, ExprId, Expression} +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.types.{DataType, Metadata} + +case class ErrorEstimateAttribute21(name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata, realExprId: ExprId)(override val exprId: ExprId, + override val qualifier: Option[String]) extends ErrorEstimateAttribute { + + override def withQualifier(newQualifier: Option[String]): Attribute = { + if (newQualifier == qualifier) { + this + } else { + ErrorEstimateAttribute21(name, dataType, nullable, metadata, realExprId)( + exprId, newQualifier) + } + } +} + +case class ApproxColumnExtractor21(child: Expression, name: String, + override val ordinal: Int, dataType: DataType, override val nullable: Boolean)( + override val exprId: ExprId, override val qualifier: Option[String]) + extends ApproxColumnExtractor + +case class TaggedAttribute21(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata)(override val exprId: ExprId, + override val qualifier: Option[String]) extends TaggedAttribute { + + /** + * Returns a copy of this [[TaggedAttribute]] with new qualifier. + */ + override def withQualifier(newQualifier: Option[String]): TaggedAttribute = { + if (newQualifier == qualifier) { + this + } else { + TaggedAttribute21(tag, name, dataType, nullable, metadata)(exprId, newQualifier) + } + } +} + +case class TaggedAlias21(tag: TransformableTag, child: Expression, name: String)( + override val exprId: ExprId, override val qualifier: Option[String]) extends TaggedAlias + +case class ClosedFormColumnExtractor21(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, override val nullable: Boolean)(override val exprId: ExprId, + override val qualifier: Option[String]) extends ClosedFormColumnExtractor diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/plans.scala similarity index 95% rename from core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala rename to core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/plans.scala index f3f9f9ae58..876be0dfd6 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -58,8 +58,7 @@ final class Insert21( * than just broadcast. */ class PlanWithHints21(_child: LogicalPlan, - override val allHints: Map[QueryHint.Type, HintName.Type]) - extends BroadcastHint(_child) with LogicalPlanWithHints { + val allHints: Map[QueryHint.Type, HintName.Type]) extends BroadcastHint(_child) { override def productArity: Int = 2 @@ -67,6 +66,9 @@ class PlanWithHints21(_child: LogicalPlan, case 0 => child case 1 => allHints } + + override def simpleString: String = + s"PlanWithHints[hints = $allHints; child = ${child.simpleString}]" } final class ColumnTableScan21(output: Seq[Attribute], dataRDD: RDD[Any], diff --git a/core/compatibility/spark-2.3.2/build.gradle b/core/compatibility/spark-2.3.2/build.gradle index 5d078244b4..2f76d9a6fa 100644 --- a/core/compatibility/spark-2.3.2/build.gradle +++ b/core/compatibility/spark-2.3.2/build.gradle @@ -19,7 +19,11 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -sourceSets.main.scala.srcDir 'src/main/java' +// directly include the base classes to ensure everything is compiled with Spark 2.3.2 +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.3.x/specific/scala" +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" +sourceSets.main.scala.srcDir "../spark-2.3.x/specific/java" sourceSets.main.java.srcDirs = [] dependencies { diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala index ba8a836734..7aec9d41c3 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala @@ -14,996 +14,14 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ - package org.apache.spark.sql.internal -import java.lang.reflect.Field - -import scala.collection.mutable - -import io.snappydata.Property.HashAggregateSize -import io.snappydata.sql.catalog.SnappyExternalCatalog -import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog -import io.snappydata.{HintName, QueryHint} -import org.apache.hadoop.conf.Configuration - -import org.apache.spark.deploy.SparkSubmitUtils -import org.apache.spark.internal.config.ConfigBuilder -import org.apache.spark.rdd.RDD -import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} -import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec -import org.apache.spark.sql.catalyst.catalog._ -import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} -import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, Literal, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} -import org.apache.spark.sql.catalyst.json.JSONOptions -import org.apache.spark.sql.catalyst.optimizer.Optimizer -import org.apache.spark.sql.catalyst.plans.logical._ -import org.apache.spark.sql.catalyst.plans.physical.Partitioning -import org.apache.spark.sql.catalyst.rules.Rule -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.catalyst.{AccessUtils, FunctionIdentifier, InternalRow, TableIdentifier} -import org.apache.spark.sql.execution.columnar.ColumnTableScan -import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, ExplainCommand, RunnableCommand} -import org.apache.spark.sql.execution.datasources._ -import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} -import org.apache.spark.sql.execution.row.RowTableScan -import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} -import org.apache.spark.sql.execution._ -import org.apache.spark.sql.execution.common.ErrorEstimateAttribute -import org.apache.spark.sql.hive._ -import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} -import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} -import org.apache.spark.sql.types.{DataType, Metadata, StructType} -import org.apache.spark.status.api.v1.RDDStorageInfo -import org.apache.spark.storage.StorageLevel -import org.apache.spark.streaming.SnappyStreamingContext -import org.apache.spark.streaming.dstream.DStream -import org.apache.spark.util.Utils -import org.apache.spark.{SparkConf, SparkContext} +import org.apache.spark.sql.SparkInternals /** * Implementation of [[SparkInternals]] for Spark 2.3.2. */ -class Spark232Internals extends SparkInternals { - - private val codegenContextClassFunctions: Field = { - val f = classOf[CodegenContext].getDeclaredField("classFunctions") - f.setAccessible(true) - f - } +class Spark232Internals extends Spark23Internals { override def version: String = "2.3.2" - - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, - cascade: Boolean, blocking: Boolean): Unit = { - spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) - } - - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - plan.mapExpressions(f) - } - - override def registerFunction(session: SparkSession, name: FunctionIdentifier, - info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { - session.sessionState.functionRegistry.registerFunction(name, info, function) - } - - override def addClassField(ctx: CodegenContext, javaType: String, - varPrefix: String, initFunc: String => String, - forceInline: Boolean, useFreshName: Boolean): String = { - ctx.addMutableState(javaType, varPrefix, initFunc, forceInline, useFreshName) - } - - override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = - AccessUtils.getInlinedMutableStates(ctx) - - override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, - inlineToOuterClass: Boolean = false): String = { - ctx.addNewFunction(funcName, funcCode, inlineToOuterClass) - } - - override def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean = { - codegenContextClassFunctions.get(ctx).asInstanceOf[ - mutable.Map[String, mutable.Map[String, String]]].get(ctx.outerClassName) match { - case Some(m) => m.contains(funcName) - case None => false - } - } - - override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { - ctx.splitExpressionsWithCurrentInputs(expressions) - } - - override def resetCopyResult(ctx: CodegenContext): Unit = {} - - override def isPredicateSubquery(expr: Expression): Boolean = false - - override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, - newExprId: ExprId): Expression = { - throw new UnsupportedOperationException( - s"unexpected copyPredicateSubquery call in Spark $version module") - } - - // scalastyle:off - - override def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], - otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], - partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, - relationSchema: StructType, allFilters: Seq[Expression], - schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, - isForSampleReservoirAsRegion: Boolean): ColumnTableScan = { - new ColumnTableScan23(output, dataRDD, otherRDDs, numBuckets, partitionColumns, - partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, - caseSensitive, isForSampleReservoirAsRegion) - } - - // scalastyle:on - - override def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], - numBuckets: Int, partitionColumns: Seq[Expression], - partitionColumnAliases: Seq[Seq[Attribute]], table: String, - baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan = { - new RowTableScan23(output, schema, dataRDD, numBuckets, partitionColumns, - partitionColumnAliases, JdbcExtendedUtils.toLowerCase(table), baseRelation, caseSensitive) - } - - override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { - WholeStageCodegenExec(plan)(codegenStageId = 0) - } - - override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - CaseInsensitiveMap[String](map) - } - - protected def createAndAttachSQLListener(state: SnappySharedState, sc: SparkContext): Unit = { - // replace inside SQLAppStatusStore as well as change on the Spark ListenerBus - val listenerField = classOf[SQLAppStatusStore].getDeclaredField("listener") - listenerField.setAccessible(true) - listenerField.get(state.statusStore).asInstanceOf[Option[SQLAppStatusListener]] match { - case Some(_: SnappySQLAppListener) => // already changed - case Some(_: SQLAppStatusListener) => - val newListener = new SnappySQLAppListener(sc) - // update on ListenerBus - sc.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( - sc.removeSparkListener) - sc.listenerBus.addToStatusQueue(newListener) - listenerField.set(state.statusStore, newListener) - case _ => - } - } - - override def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { - val state = SnappyContext.getExistingSharedState - if (state ne null) createAndAttachSQLListener(state, sparkContext) - } - - override def newSharedState(sparkContext: SparkContext): SnappySharedState = { - val state = new SnappySharedState23(sparkContext) - createAndAttachSQLListener(state, sparkContext) - state - } - - def clearSQLListener(): Unit = { - // no global SQLListener in Spark 2.3.x - } - - override def createViewSQL(session: SparkSession, plan: LogicalPlan, - originalText: Option[String]): String = originalText match { - case Some(viewSQL) => viewSQL - case None => throw new AnalysisException("Cannot create a persisted VIEW from the Dataset API") - } - - override def createView(desc: CatalogTable, output: Seq[Attribute], - child: LogicalPlan): LogicalPlan = View(desc, output, child) - - override def newCreateFunctionCommand(schemaName: Option[String], functionName: String, - className: String, resources: Seq[FunctionResource], isTemp: Boolean, - ignoreIfExists: Boolean, replace: Boolean): LogicalPlan = { - CreateFunctionCommand(schemaName, functionName, className, resources, isTemp, - ignoreIfExists, replace) - } - - override def newDescribeTableCommand(table: TableIdentifier, - partitionSpec: Map[String, String], isExtended: Boolean, - isFormatted: Boolean): RunnableCommand = { - if (isFormatted) { - throw new ParseException(s"DESCRIBE FORMATTED TABLE not supported in Spark $version") - } - DescribeTableCommand(table, partitionSpec, isExtended) - } - - override def newCreateTableLikeCommand(targetIdent: TableIdentifier, - sourceIdent: TableIdentifier, location: Option[String], - allowExisting: Boolean): RunnableCommand = { - CreateTableLikeCommand(targetIdent, sourceIdent, location, allowExisting) - } - - override def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, - alias: Option[String]): LogicalPlan = { - if (alias.isDefined) { - throw new AnalysisException(s"Spark $version does not support lookupRelation " + - s"with an alias: alias=$alias, name=$name") - } - catalog.lookupRelation(name) - } - - override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand() - - override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], - ivyPath: Option[String], exclusions: Seq[String]): String = { - SparkSubmitUtils.resolveMavenCoordinates(coordinates, - SparkSubmitUtils.buildIvySettings(remoteRepos, ivyPath), exclusions) - } - - override def toAttributeReference(attr: Attribute)(name: String, - dataType: DataType, nullable: Boolean, metadata: Metadata, - exprId: ExprId): AttributeReference = { - AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( - exprId, qualifier = attr.qualifier) - } - - override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, - metadata: Metadata, exprId: ExprId, qualifier: Option[String], - isGenerated: Boolean): AttributeReference = { - AttributeReference(name, dataType, nullable, metadata)(exprId, qualifier, isGenerated) - } - - override def newErrorEstimateAttribute(name: String, dataType: DataType, - nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, - qualifier: Seq[String]): ErrorEstimateAttribute = { - ErrorEstimateAttribute23(name, dataType, nullable, metadata, exprId, realExprId)( - qualifier.headOption) - } - - override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { - insert.copy(query = newChild) - } - - override def newInsertPlanWithCountOutput(table: LogicalPlan, - partition: Map[String, Option[String]], child: LogicalPlan, - overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { - new Insert23(table, partition, child, overwrite, ifNotExists) - } - - override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite - - override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifPartitionNotExists - - override def newGroupingSet(groupingSets: Seq[Seq[Expression]], - groupByExprs: Seq[Expression], child: LogicalPlan, - aggregations: Seq[NamedExpression]): LogicalPlan = { - GroupingSets(groupingSets, groupByExprs, child, aggregations) - } - - override def newUnresolvedRelation(tableIdentifier: TableIdentifier, - alias: Option[String]): LogicalPlan = alias match { - case None => UnresolvedRelation(tableIdentifier) - case Some(a) => SubqueryAlias(a, UnresolvedRelation(tableIdentifier)) - } - - override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = None - - override def newSubqueryAlias(alias: String, child: LogicalPlan, - view: Option[TableIdentifier]): SubqueryAlias = { - if (view.isDefined) { - throw new AnalysisException(s"Spark $version does not support creating SubqueryAlias " + - s"with a VIEW: alias=$alias, view=${view.get}") - } - SubqueryAlias(alias, child) - } - - override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = None - - override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], - exprId: ExprId, qualifier: Option[String]): Alias = { - copyAlias match { - case None => Alias(child, name)(exprId, qualifier) - case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) - case Some(a) => Alias(child, name)(a.exprId, a.qualifier) - } - } - - override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], - child: LogicalPlan): LogicalPlan = { - if (outputColumnNames.isEmpty) child - else UnresolvedSubqueryColumnAliases(outputColumnNames, child) - } - - override def newSortOrder(child: Expression, direction: SortDirection, - nullOrdering: NullOrdering): SortOrder = { - SortOrder(child, direction, nullOrdering, Set.empty) - } - - override def newRepartitionByExpression(partitionExpressions: Seq[Expression], - numPartitions: Int, child: LogicalPlan): RepartitionByExpression = { - RepartitionByExpression(partitionExpressions, child, numPartitions) - } - - override def newUnresolvedTableValuedFunction(functionName: String, - functionArgs: Seq[Expression], outputNames: Seq[String]): UnresolvedTableValuedFunction = { - UnresolvedTableValuedFunction(functionName, functionArgs, outputNames) - } - - override def newFrameBoundary(boundaryType: FrameBoundaryType.Type, - num: Option[Expression]): Any = { - boundaryType match { - case FrameBoundaryType.UnboundedPreceding => UnboundedPreceding - case FrameBoundaryType.ValuePreceding => UnaryMinus(num.get) - case FrameBoundaryType.CurrentRow => CurrentRow - case FrameBoundaryType.UnboundedFollowing => UnboundedFollowing - case FrameBoundaryType.ValueFollowing => num.get - } - } - - override def newSpecifiedWindowFrame(frameType: FrameType, frameStart: Any, - frameEnd: Any): SpecifiedWindowFrame = { - SpecifiedWindowFrame(frameType, frameStart.asInstanceOf[Expression], - frameEnd.asInstanceOf[Expression]) - } - - override def newLogicalPlanWithHints(child: LogicalPlan, - hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints = { - new ResolvedPlanWithHints23(child, hints) - } - - override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, - seed: Long, child: LogicalPlan): Sample = { - Sample(lowerBound, upperBound, withReplacement, seed, child) - } - - override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[ResolvedHint] - - override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { - case p: ResolvedPlanWithHints23 => p.allHints - case _: ResolvedHint => - // only broadcast supported - Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) - case _ => Map.empty - } - - override def isBroadcastable(plan: LogicalPlan): Boolean = { - // Spark now uses the UnresolvedHint/ResolvedHint infrastructure and not a fixed flag - false - } - - override def newOneRowRelation(): LogicalPlan = OneRowRelation() - - override def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], - generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan = { - Generate(generator, unrequiredChildIndex = Nil, outer, qualifier, generatorOutput, child) - } - - override def writeToDataSource(ds: DataSource, mode: SaveMode, - data: Dataset[Row]): BaseRelation = { - ds.writeAndRead(mode, data.planWithBarrier, data.planWithBarrier.output.map(_.name), - data.queryExecution.executedPlan) - } - - override def newLogicalRelation(relation: BaseRelation, - expectedOutputAttributes: Option[Seq[AttributeReference]], - catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation = { - val output = expectedOutputAttributes match { - case None => relation.schema.toAttributes - case Some(attrs) => attrs - } - LogicalRelation(relation, output, catalogTable, isStreaming) - } - - override def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], - schema: StructType, isStreaming: Boolean): Dataset[Row] = { - session.internalCreateDataFrame(catalystRows, schema, isStreaming) - } - - override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], - filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], - metadata: Map[String, String], relation: BaseRelation, - tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec = { - RowDataSourceScanExec(fullOutput, requiredColumnsIndex, filters.toSet, handledFilters.toSet, - rdd, relation, tableIdentifier) - } - - override def newCodegenSparkFallback(child: SparkPlan, - session: SnappySession): CodegenSparkFallback = { - new CodegenSparkFallback23(child, session) - } - - override def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], - streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan = { - new LogicalDStreamPlan23(output, stream)(streamingSnappy) - } - - override def newCatalogDatabase(name: String, description: String, - locationUri: String, properties: Map[String, String]): CatalogDatabase = { - CatalogDatabase(name, description, CatalogUtils.stringToURI(locationUri), properties) - } - - override def catalogDatabaseLocationURI(database: CatalogDatabase): String = - database.locationUri.toString - - // scalastyle:off - - override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, - storage: CatalogStorageFormat, schema: StructType, provider: Option[String], - partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], - owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])], - viewOriginalText: Option[String], viewText: Option[String], - comment: Option[String], unsupportedFeatures: Seq[String], - tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, - ignoredProperties: Map[String, String]): CatalogTable = { - val statistics = stats match { - case None => None - case Some(s) => Some(CatalogStatistics(s._1, s._2, s._3)) - } - CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, - bucketSpec, owner, createTime, lastAccessTime, createVersion = "", properties, statistics, - viewText, comment, unsupportedFeatures, tracksPartitionsInCatalog, - schemaPreservesCase, ignoredProperties) - } - - // scalastyle:on - - override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = None - - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = - catalogTable.schemaPreservesCase - - override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = - catalogTable.ignoredProperties - - override def newCatalogTableWithViewOriginalText(catalogTable: CatalogTable, - viewOriginalText: Option[String]): CatalogTable = catalogTable - - override def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], - outputFormat: Option[String], serde: Option[String], compressed: Boolean, - properties: Map[String, String]): CatalogStorageFormat = { - locationUri match { - case None => CatalogStorageFormat(None, inputFormat, outputFormat, - serde, compressed, properties) - case Some(uri) => CatalogStorageFormat(Some(CatalogUtils.stringToURL(uri)), - inputFormat, outputFormat, serde, compressed, properties) - } - } - - override def catalogStorageFormatLocationUri( - storageFormat: CatalogStorageFormat): Option[String] = storageFormat.locationUri match { - case None => None - case Some(uri) => Some(uri.toString) - } - - override def catalogTablePartitionToRow(partition: CatalogTablePartition, - partitionSchema: StructType, defaultTimeZoneId: String): InternalRow = { - partition.toRow(partitionSchema, defaultTimeZoneId) - } - - override def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, - table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, - numDP: Int, holdDDLTime: Boolean): Unit = { - if (holdDDLTime) { - throw new UnsupportedOperationException( - s"unexpected loadDynamicPartitions with holdDDLTime=true in Spark $version module") - } - externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP) - } - - override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, - table: String, newSchema: StructType): Unit = { - externalCatalog.alterTableDataSchema(schemaName, table, newSchema) - } - - override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit = { - val catalogStats = stats match { - case None => None - case Some(s) => Some(CatalogStatistics(s._1, s._2, s._3)) - } - externalCatalog.alterTableStats(schema, table, catalogStats) - } - - override def alterFunction(externalCatalog: ExternalCatalog, schema: String, - function: CatalogFunction): Unit = externalCatalog.alterFunction(schema, function) - - override def columnStatToMap(stat: Any, colName: String, - dataType: DataType): Map[String, String] = { - stat.asInstanceOf[ColumnStat].toMap(colName, dataType) - } - - override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, - createTime: Long): SnappyHiveExternalCatalog = { - new SnappyEmbeddedHiveCatalog23(conf, hadoopConf, createTime) - } - - override def newSmartConnectorExternalCatalog( - session: SparkSession): SmartConnectorExternalCatalog = { - new SmartConnectorExternalCatalog23(session) - } - - override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = - DataSource.lookupDataSource(provider, conf) - - override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { - ShuffleExchangeExec(newPartitioning, child) - } - - override def isShuffleExchange(plan: SparkPlan): Boolean = plan.isInstanceOf[ShuffleExchangeExec] - - override def classOfShuffleExchange(): Class[_] = classOf[ShuffleExchangeExec] - - override def getStatistics(plan: LogicalPlan): Statistics = plan.stats - - override def supportsPartial(aggregate: AggregateFunction): Boolean = true - - override def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], - aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], - planChild: () => SparkPlan): Seq[SparkPlan] = { - throw new UnsupportedOperationException( - s"unexpected planAggregateWithoutPartial call in Spark $version module") - } - - override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code)._1 - - override def newJSONOptions(parameters: Map[String, String], - session: Option[SparkSession]): JSONOptions = session match { - case None => - new JSONOptions(parameters, - SQLConf.SESSION_LOCAL_TIMEZONE.defaultValue.get, - SQLConf.COLUMN_NAME_OF_CORRUPT_RECORD.defaultValue.get) - case Some(sparkSession) => - new JSONOptions(parameters, - sparkSession.sessionState.conf.sessionLocalTimeZone, - sparkSession.sessionState.conf.columnNameOfCorruptRecord) - } - - override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { - new SnappySessionStateBuilder23(snappySession).build() - } - - override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { - PreWriteCheck - } - - override def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] = { - // DataSinks in older Spark releases is now taken care of by HiveAnalysis - new HiveConditionalStrategy(_.HiveTableScans, sessionState) :: - new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil - } - - override def newCacheManager(): CacheManager = new SnappyCacheManager23 - - override def buildConf(key: String): ConfigBuilder = SQLConf.buildConf(key) - - override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { - context.ui.get.store.rddList() - } - - override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, - pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { - if (!pivotValues.forall(_.isInstanceOf[Literal])) { - throw new AnalysisException( - s"Literal expressions required for pivot values, found: ${pivotValues.mkString("; ")}") - } - Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) - } - - override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { - pivot.copy(groupByExprs = groupByExprs) - } - - override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { - if (isAll) { - throw new ParseException(s"INTERSECT ALL not supported in spark $version") - } - Intersect(left, right) - } - - override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { - if (isAll) { - throw new ParseException(s"EXCEPT ALL not supported in spark $version") - } - Except(left, right) - } - - override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, - codegen: Boolean, cost: Boolean): LogicalPlan = { - ExplainCommand(logicalPlan, extended, codegen, cost) - } -} - -/** - * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. - */ -final class SnappyCacheManager23 extends CacheManager { - - override def cacheQuery(query: Dataset[_], tableName: Option[String], - storageLevel: StorageLevel): Unit = { - super.cacheQuery(query, tableName, storageLevel) - // clear plan cache since cached representation can change existing plans - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() - } - - override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { - super.uncacheQuery(session, plan, blocking) - session.asInstanceOf[SnappySession].clearPlanCache() - } - - override def recacheByPlan(session: SparkSession, plan: LogicalPlan): Unit = { - super.recacheByPlan(session, plan) - session.asInstanceOf[SnappySession].clearPlanCache() - } - - override def recacheByPath(session: SparkSession, resourcePath: String): Unit = { - super.recacheByPath(session, resourcePath) - session.asInstanceOf[SnappySession].clearPlanCache() - } -} - -final class SnappyEmbeddedHiveCatalog23(override val conf: SparkConf, - override val hadoopConf: Configuration, override val createTime: Long) - extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyHiveExternalCatalog { - - override def getTable(schema: String, table: String): CatalogTable = - getTableImpl(schema, table) - - override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, - ignoreIfExists: Boolean): Unit = super.doCreateDatabase(schemaDefinition, ignoreIfExists) - - override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, - cascade: Boolean): Unit = super.doDropDatabase(schema, ignoreIfNotExists, cascade) - - override protected def baseCreateTable(tableDefinition: CatalogTable, - ignoreIfExists: Boolean): Unit = super.doCreateTable(tableDefinition, ignoreIfExists) - - override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, - purge: Boolean): Unit = super.doDropTable(schema, table, ignoreIfNotExists, purge) - - override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = - super.doAlterTable(tableDefinition) - - override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = - super.doRenameTable(schema, oldName, newName) - - override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, - partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { - SparkSupport.internals.loadDynamicPartitions(this, schema, table, loadPath, partition, - replace, numDP, holdDDLTime) - } - - override protected def baseCreateFunction(schema: String, - funcDefinition: CatalogFunction): Unit = super.doCreateFunction(schema, funcDefinition) - - override protected def baseDropFunction(schema: String, name: String): Unit = - super.doDropFunction(schema, name) - - override protected def baseRenameFunction(schema: String, oldName: String, - newName: String): Unit = super.doRenameFunction(schema, oldName, newName) - - override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, - ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) - - override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, - cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) - - override def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = - alterDatabaseImpl(schemaDefinition) - - override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = - createTableImpl(table, ignoreIfExists) - - override protected def doDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, - purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) - - override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = - renameTableImpl(schema, oldName, newName) - - override def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) - - override def doAlterTableStats(schema: String, table: String, - stats: Option[CatalogStatistics]): Unit = { - withHiveExceptionHandling(super.doAlterTableStats(schema, table, stats)) - } - - override def loadDynamicPartitions(schema: String, table: String, loadPath: String, - partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { - loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, - holdDDLTime = false) - } - - override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], - defaultTimeZoneId: String): Seq[CatalogTablePartition] = { - withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, - predicates, defaultTimeZoneId)) - } - - override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = - createFunctionImpl(schema, function) - - override protected def doDropFunction(schema: String, funcName: String): Unit = - dropFunctionImpl(schema, funcName) - - override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = { - withHiveExceptionHandling(super.doAlterFunction(schema, function)) - SnappySession.clearAllCache() - } - - override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = - renameFunctionImpl(schema, oldName, newName) -} - -final class SmartConnectorExternalCatalog23(override val session: SparkSession) - extends ExternalCatalog with SmartConnectorExternalCatalog { - - override def getTable(schema: String, table: String): CatalogTable = - getTableImpl(schema, table) - - override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, - ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) - - override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, - cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) - - override protected def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = - throw new UnsupportedOperationException("Schema definitions cannot be altered") - - override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = - createTableImpl(table, ignoreIfExists) - - override protected def doDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, - purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) - - override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = - renameTableImpl(schema, oldName, newName) - - override protected def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) - - override protected def doAlterTableDataSchema(schemaName: String, table: String, - newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) - - override protected def doAlterTableStats(schema: String, table: String, - stats: Option[CatalogStatistics]): Unit = stats match { - case None => alterTableStatsImpl(schema, table, None) - case Some(s) => alterTableStatsImpl(schema, table, - Some((s.sizeInBytes, s.rowCount, s.colStats))) - } - - override def loadDynamicPartitions(schema: String, table: String, loadPath: String, - partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { - loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, - holdDDLTime = false) - } - - override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], - defaultTimeZoneId: String): Seq[CatalogTablePartition] = { - listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId) - } - - override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = - createFunctionImpl(schema, function) - - override protected def doDropFunction(schema: String, funcName: String): Unit = - dropFunctionImpl(schema, funcName) - - override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = - alterFunctionImpl(schema, function) - - override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = - renameFunctionImpl(schema, oldName, newName) -} - -class SnappySessionCatalog23(override val snappySession: SnappySession, - override val snappyExternalCatalog: SnappyExternalCatalog, - override val globalTempViewManager: GlobalTempViewManager, - override val functionResourceLoader: FunctionResourceLoader, - override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, - override val sqlConf: SQLConf, hadoopConf: Configuration, - override val wrappedCatalog: Option[SnappySessionCatalog]) - extends SessionCatalog(snappyExternalCatalog, globalTempViewManager, functionRegistry, - sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog { - - override def functionNotFound(name: String): Nothing = { - super.failFunctionLookup(FunctionIdentifier(name, None)) - } - - override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, - validateTableLocation: Boolean): Unit = super.createTable(table, ignoreIfExists) - - override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { - createTableImpl(table, ignoreIfExists, validateTableLocation = true) - } - - override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = - View(desc = table, output = table.schema.toAttributes, child) - - override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = - UnresolvedCatalogRelation(table) - - override def lookupRelation(name: TableIdentifier): LogicalPlan = lookupRelationImpl(name, None) - - override def registerFunction(funcDefinition: CatalogFunction, - overrideIfExists: Boolean, functionBuilder: Option[FunctionBuilder]): Unit = { - val func = funcDefinition.identifier - if (functionRegistry.functionExists(func) && !overrideIfExists) { - throw new AnalysisException(s"Function $func already exists") - } - val info = new ExpressionInfo(funcDefinition.className, func.database.orNull, func.funcName) - val builder = functionBuilder.getOrElse { - val className = funcDefinition.className - if (!Utils.classIsLoadable(className)) { - throw new AnalysisException(s"Can not load class '$className' when registering " + - s"the function '$func', please make sure it is on the classpath") - } - makeFunctionBuilderImpl(func.unquotedString, className) - } - functionRegistry.registerFunction(func, info, builder) - } -} - -class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[SessionState] = None) - extends BaseSessionStateBuilder(session, parentState) { - - self => - - override protected lazy val conf: SQLConf = { - val conf = parentState.map(_.conf.clone()).getOrElse(new SnappyConf(session)) - mergeSparkConf(conf, session.sparkContext.conf) - conf - } - - override protected lazy val sqlParser: SnappySqlParser = session.contextFunctions.newSQLParser() - - protected val externalCatalog: SnappyExternalCatalog = - session.sharedState.getExternalCatalogInstance(session) - - override protected lazy val resourceLoader: SessionResourceLoader = externalCatalog match { - case c: SnappyHiveExternalCatalog => new HiveSessionResourceLoader(session, c.client()) - case _ => new SessionResourceLoader(session) - } - - protected def newSessionCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { - new SnappySessionCatalog23( - session, - externalCatalog, - session.sharedState.globalTempViewManager, - resourceLoader, - functionRegistry, - sqlParser, - conf, - SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf), - wrapped) - } - - private def createCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { - val catalog = newSessionCatalog(wrapped) - parentState.foreach(_.catalog.copyStateTo(catalog)) - catalog - } - - override protected lazy val catalog: SnappySessionCatalog = createCatalog(wrapped = None) - - override protected def analyzer: Analyzer = new Analyzer(catalog, conf) with SnappyAnalyzer { - - aSelf => - - override def session: SnappySession = self.session - - private def state: SnappySessionState = session.sessionState - - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { - (new HiveConditionalRule(_ => new ResolveHiveSerdeTable(state.hiveSession), state) :: - new PreprocessTable(state) :: - state.ResolveAliasInGroupBy :: - new FindDataSourceTable(session) :: - new ResolveSQLOnFile(session) :: - session.contextFunctions.getExtendedResolutionRules) ++ customResolutionRules - } - - override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = { - (new HiveConditionalRule(_ => new DetermineTableStats(session), state) :: - new HiveConditionalRule(s => - RelationConversions(s.conf, s.catalog.asInstanceOf[HiveSessionCatalog]), state) :: - PreprocessTableCreation(session) :: - PreprocessTableInsertion(conf) :: - DataSourceAnalysis(conf) :: - new HiveConditionalRule(_ => HiveAnalysis, state) :: - state.AnalyzeMutableOperations(session, analyzer) :: - ResolveQueryHints(session) :: - state.RowLevelSecurity :: - state.ExternalRelationLimitFetch :: - session.contextFunctions.getPostHocResolutionRules) ++ customPostHocResolutionRules - } - - override val extendedCheckRules: Seq[LogicalPlan => Unit] = - state.getExtendedCheckRules ++ (PreReadCheck +: customCheckRules) - - override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { - override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.extendedResolutionRules - override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.postHocResolutionRules - override val extendedCheckRules: Seq[LogicalPlan => Unit] = aSelf.extendedCheckRules - - override def execute(plan: LogicalPlan): LogicalPlan = aSelf.execute(plan) - } - } - - override protected def optimizer: Optimizer = { - new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { - - override def state: SnappySessionState = session.sessionState - - override def batches: Seq[Batch] = batchesImpl - - override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = - super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules - } - } - - override protected def streamingQueryManager: StreamingQueryManager = { - // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with - // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This - // implies that Snappydata aggregation optimisation will be turned off for any usage of - // this session including non-streaming queries. - - HashAggregateSize.set(session.sessionState.conf, "-1") - new StreamingQueryManager(session) - } - - override def build(): SnappySessionState = { - new SessionState(session.sharedState, conf, experimentalMethods, - functionRegistry, udfRegistration, () => catalog, sqlParser, - () => analyzer, () => optimizer, planner, streamingQueryManager, - listenerManager, () => resourceLoader, createQueryExecution, - createClone) with SnappySessionState { - - override val snappySession: SnappySession = session - - override def catalogBuilder(wrapped: Option[SnappySessionCatalog]): SessionCatalog = { - wrapped match { - case None => self.catalog - case _ => self.createCatalog(wrapped) - } - } - - def analyzerBuilder(): Analyzer = self.analyzer - - def optimizerBuilder(): Optimizer = self.optimizer - } - } - - override protected def newBuilder: NewBuilder = (session, optState) => - new SnappySessionStateBuilder23(session.asInstanceOf[SnappySession], optState) -} - -final class CodegenSparkFallback23(child: SparkPlan, - session: SnappySession) extends CodegenSparkFallback(child, session) { - - override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, - verbose: Boolean, prefix: String, addSuffix: Boolean): StringBuilder = { - child.generateTreeString(depth, lastChildren, builder, verbose, prefix, addSuffix) - } -} - -final class LogicalDStreamPlan23(output: Seq[Attribute], - stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) - extends LogicalDStreamPlan(output, stream)(streamingSnappy) { - - override def stats: Statistics = Statistics( - sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) - ) -} - -case class ErrorEstimateAttribute23(name: String, dataType: DataType, nullable: Boolean, - override val metadata: Metadata, exprId: ExprId, realExprId: ExprId)( - val qualifier: Option[String]) extends ErrorEstimateAttribute { - - override def singleQualifier: Option[String] = qualifier - - override def withQualifier(newQualifier: Option[String]): Attribute = { - if (newQualifier == qualifier) { - this - } else { - ErrorEstimateAttribute23(name, dataType, nullable, metadata, exprId, - realExprId)(newQualifier) - } - } } diff --git a/core/compatibility/spark-2.3.2/src/main/java/org/apache/spark/sql/internal/SnappySharedState23.java b/core/compatibility/spark-2.3.x/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java similarity index 100% rename from core/compatibility/spark-2.3.2/src/main/java/org/apache/spark/sql/internal/SnappySharedState23.java rename to core/compatibility/spark-2.3.x/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java diff --git a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala b/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala new file mode 100644 index 0000000000..0474f910a6 --- /dev/null +++ b/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala @@ -0,0 +1,456 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import io.snappydata.sql.catalog.SnappyExternalCatalog +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog +import org.apache.hadoop.conf.Configuration + +import org.apache.spark.rdd.RDD +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.analysis.FunctionRegistry +import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec +import org.apache.spark.sql.catalyst.catalog._ +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, Literal, NamedExpression} +import org.apache.spark.sql.catalyst.optimizer.Optimizer +import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, Except, Intersect, LogicalPlan, Pivot} +import org.apache.spark.sql.catalyst.rules.Rule +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} +import org.apache.spark.sql.execution.columnar.InMemoryRelation +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.execution.datasources.DataSource +import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan, python} +import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} +import org.apache.spark.{SparkConf, SparkContext} + +/** + * Base implementation of [[SparkInternals]] for Spark 2.3.x releases. + */ +abstract class Spark23Internals extends Spark23_4_Internals { + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) + } + + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + val state = new SnappySharedState23(sparkContext) + createAndAttachSQLListener(state, sparkContext) + state + } + + override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Seq[String], + isGenerated: Boolean): AttributeReference = { + AttributeReference(name, dataType, nullable, metadata)(exprId, qualifier.headOption) + } + + override def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, realExprId: ExprId, exprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute = { + ErrorEstimateAttribute23(name, dataType, nullable, metadata, realExprId)( + exprId, qualifier.headOption) + } + + override def newApproxColumnExtractor(child: Expression, name: String, ordinal: Int, + dataType: DataType, nullable: Boolean, exprId: ExprId, + qualifier: Seq[String]): ApproxColumnExtractor = { + ApproxColumnExtractor23(child, name, ordinal, dataType, nullable)(exprId, qualifier.headOption) + } + + override def newTaggedAttribute(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Seq[String]): TaggedAttribute = { + TaggedAttribute23(tag, name, dataType, nullable, metadata)(exprId, qualifier.headOption) + } + + override def newTaggedAlias(tag: TransformableTag, child: Expression, name: String, + exprId: ExprId, qualifier: Seq[String]): TaggedAlias = { + TaggedAlias23(tag, child, name)(exprId, qualifier.headOption) + } + + // scalastyle:off + + override def newClosedFormColumnExtractor(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, nullable: Boolean, exprId: ExprId, + qualifier: Seq[String]): ClosedFormColumnExtractor = { + ClosedFormColumnExtractor23(child, name, confidence, confFactor, aggType, error, + dataType, behavior, nullable)(exprId, qualifier.headOption) + } + + // scalastyle:on + + override def toAttributeReference(attr: Attribute)(name: String, + dataType: DataType, nullable: Boolean, metadata: Metadata, + exprId: ExprId): AttributeReference = { + AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + exprId, qualifier = attr.qualifier) + } + + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId, qualifier: Seq[String]): Alias = { + copyAlias match { + case None => Alias(child, name)(exprId, qualifier.headOption) + case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) + case Some(a) => Alias(child, name)(a.exprId, a.qualifier) + } + } + + override def writeToDataSource(ds: DataSource, mode: SaveMode, + data: Dataset[Row]): BaseRelation = { + ds.writeAndRead(mode, data.planWithBarrier, data.planWithBarrier.output.map(_.name), + data.queryExecution.executedPlan) + } + + override def columnStatToMap(stat: Any, colName: String, + dataType: DataType): Map[String, String] = { + stat.asInstanceOf[ColumnStat].toMap(colName, dataType) + } + + override def columnStatFromMap(table: String, field: StructField, + map: Map[String, String]): Option[AnyRef] = { + ColumnStat.fromMap(table, field, map) + } + + override def toCatalogStatistics(sizeInBytes: BigInt, rowCount: Option[BigInt], + colStats: Map[String, AnyRef]): AnyRef = { + CatalogStatistics(sizeInBytes, rowCount, colStats.asInstanceOf[Map[String, ColumnStat]]) + } + + override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog = { + new SnappyEmbeddedHiveCatalog23(conf, hadoopConf, createTime) + } + + override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { + new SmartConnectorExternalCatalog23(session) + } + + override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { + new SnappySessionStateBuilder23(snappySession).build() + } + + override def newCacheManager(): CacheManager = new SnappyCacheManager23 + + override def newExprCode(code: String, isNull: String, value: String, + javaClass: Class[_]): ExprCode = { + ExprCode(code, isNull, value) + } + + override def copyExprCode(ev: ExprCode, code: String, isNull: String, value: String, + javaClass: Class[_]): ExprCode = { + ev.copy(code, isNull, value) + } + + override def resetCode(ev: ExprCode): Unit = { + ev.code = "" + } + + override def exprCodeIsNull(ev: ExprCode): String = ev.isNull + + override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { + ev.isNull = isNull + } + + override def exprCodeValue(ev: ExprCode): String = ev.value + + override def javaType(dt: DataType, ctx: CodegenContext): String = ctx.javaType(dt) + + override def boxedType(javaType: String, ctx: CodegenContext): String = ctx.boxedType(javaType) + + override def defaultValue(dt: DataType, ctx: CodegenContext): String = ctx.defaultValue(dt) + + override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { + ctx.isPrimitiveType(javaType) + } + + override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { + ctx.primitiveTypeName(javaType) + } + + override def getValue(input: String, dataType: DataType, ordinal: String, + ctx: CodegenContext): String = { + ctx.getValue(input, dataType, ordinal) + } + + override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = { + python.ExtractPythonUDFs :: Nil + } + + override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { + if (!pivotValues.forall(_.isInstanceOf[Literal])) { + throw new AnalysisException( + s"Literal expressions required for pivot values, found: ${pivotValues.mkString("; ")}") + } + Pivot(groupByExprs, pivotColumn, pivotValues.map(_.asInstanceOf[Literal]), aggregates, child) + } + + override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { + pivot.copy(groupByExprs = groupByExprs) + } + + override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { + if (isAll) { + throw new ParseException(s"INTERSECT ALL not supported in spark $version") + } + Intersect(left, right) + } + + override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { + if (isAll) { + throw new ParseException(s"EXCEPT ALL not supported in spark $version") + } + Except(left, right) + } + + override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { + relation.cachedColumnBuffers + } + + override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], + analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { + rules.flatMap { + case PromoteStrings => + (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: + PromoteStrings :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] + case r => r :: Nil + } + } +} + +/** + * Extension of SnappyCacheManager23_4 to enable clearing cached plans on cache create/drop. + */ +final class SnappyCacheManager23 extends SnappyCacheManager23_4 { + + override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + super.uncacheQuery(session, plan, blocking) + session.asInstanceOf[SnappySession].clearPlanCache() + } +} + +final class SnappyEmbeddedHiveCatalog23(_conf: SparkConf, _hadoopConf: Configuration, + _createTime: Long) extends SnappyHiveExternalCatalog(_conf, _hadoopConf, _createTime) { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = super.doCreateDatabase(schemaDefinition, ignoreIfExists) + + override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = super.doDropDatabase(schema, ignoreIfNotExists, cascade) + + override protected def baseCreateTable(tableDefinition: CatalogTable, + ignoreIfExists: Boolean): Unit = super.doCreateTable(tableDefinition, ignoreIfExists) + + override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = super.doDropTable(schema, table, ignoreIfNotExists, purge) + + override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = + super.doAlterTable(tableDefinition) + + override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = + super.doRenameTable(schema, oldName, newName) + + override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + super.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP) + } + + override protected def baseCreateFunction(schema: String, + funcDefinition: CatalogFunction): Unit = super.doCreateFunction(schema, funcDefinition) + + override protected def baseDropFunction(schema: String, name: String): Unit = + super.doDropFunction(schema, name) + + override protected def baseRenameFunction(schema: String, oldName: String, + newName: String): Unit = super.doRenameFunction(schema, oldName, newName) + + override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override protected def doDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) + + override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override def doAlterTableStats(schema: String, table: String, + stats: Option[CatalogStatistics]): Unit = { + withHiveExceptionHandling(super.doAlterTableStats(schema, table, stats)) + } + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, + holdDDLTime = false) + } + + override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], + defaultTimeZoneId: String): Seq[CatalogTablePartition] = { + withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, + predicates, defaultTimeZoneId)) + } + + override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override protected def doDropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = { + withHiveExceptionHandling(super.doAlterFunction(schema, function)) + SnappySession.clearAllCache() + } + + override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +final class SmartConnectorExternalCatalog23(override val session: SparkSession) + extends SmartConnectorExternalCatalog { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override protected def doCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override protected def doDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override protected def doAlterDatabase(schemaDefinition: CatalogDatabase): Unit = + throw new UnsupportedOperationException("Schema definitions cannot be altered") + + override protected def doCreateTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override protected def doDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) + + override protected def doRenameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override protected def doAlterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override protected def doAlterTableDataSchema(schemaName: String, table: String, + newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) + + override protected def doAlterTableStats(schema: String, table: String, + stats: Option[CatalogStatistics]): Unit = stats match { + case None => alterTableStatsImpl(schema, table, None) + case Some(s) => alterTableStatsImpl(schema, table, + Some((s.sizeInBytes, s.rowCount, s.colStats))) + } + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, + holdDDLTime = false) + } + + override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], + defaultTimeZoneId: String): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId) + } + + override protected def doCreateFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override protected def doDropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override protected def doAlterFunction(schema: String, function: CatalogFunction): Unit = + alterFunctionImpl(schema, function) + + override protected def doRenameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +class SnappySessionCatalog23(override val snappySession: SnappySession, + override val snappyExternalCatalog: SnappyExternalCatalog, + override val globalTempManager: GlobalTempViewManager, + override val functionResourceLoader: FunctionResourceLoader, + override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, + override val sqlConf: SQLConf, hadoopConf: Configuration, + override val wrappedCatalog: Option[SnappySessionCatalog]) + extends SessionCatalog(snappyExternalCatalog, globalTempManager, functionRegistry, + sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog23_4 { + + override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = super.createTable(table, ignoreIfExists) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = { + createTableImpl(table, ignoreIfExists, validateTableLocation = true) + } +} + +class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[SessionState] = None) + extends SnappySessionStateBuilder23_4(session, parentState) { + + override protected lazy val resourceLoader: SessionResourceLoader = externalCatalog match { + case c: SnappyHiveExternalCatalog => new HiveSessionResourceLoader(session, c.client()) + case _ => new SessionResourceLoader(session) + } + + override protected def newSessionCatalog( + wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + new SnappySessionCatalog23( + session, + externalCatalog, + session.sharedState.globalTempViewManager, + resourceLoader, + functionRegistry, + sqlParser, + conf, + SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf), + wrapped) + } + + override protected def optimizer: Optimizer = { + new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { + + override def state: SnappySessionState = session.sessionState + + override def batches: Seq[Batch] = batchesImpl + + override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = + super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules + } + } + + override protected def newBuilder: NewBuilder = (session, optState) => + new SnappySessionStateBuilder23(session.asInstanceOf[SnappySession], optState) +} diff --git a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/expressions.scala b/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/expressions.scala new file mode 100644 index 0000000000..c328b5a391 --- /dev/null +++ b/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/expressions.scala @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql.catalyst.expressions.{Attribute, ExprId, Expression} +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.types.{DataType, Metadata} + +case class ErrorEstimateAttribute23(name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata, realExprId: ExprId)(override val exprId: ExprId, + override val qualifier: Option[String]) extends ErrorEstimateAttribute { + + override def withQualifier(newQualifier: Option[String]): Attribute = { + if (newQualifier == qualifier) { + this + } else { + ErrorEstimateAttribute23(name, dataType, nullable, metadata, realExprId)( + exprId, newQualifier) + } + } +} + +case class ApproxColumnExtractor23(child: Expression, name: String, + override val ordinal: Int, dataType: DataType, override val nullable: Boolean)( + override val exprId: ExprId, override val qualifier: Option[String]) + extends ApproxColumnExtractor + +case class TaggedAttribute23(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata)(override val exprId: ExprId, + override val qualifier: Option[String]) extends TaggedAttribute { + + /** + * Returns a copy of this [[TaggedAttribute]] with new qualifier. + */ + override def withQualifier(newQualifier: Option[String]): TaggedAttribute = { + if (newQualifier == qualifier) { + this + } else { + TaggedAttribute23(tag, name, dataType, nullable, metadata)(exprId, newQualifier) + } + } +} + +case class TaggedAlias23(tag: TransformableTag, child: Expression, name: String)( + override val exprId: ExprId, override val qualifier: Option[String]) extends TaggedAlias + +case class ClosedFormColumnExtractor23(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, override val nullable: Boolean)(override val exprId: ExprId, + override val qualifier: Option[String]) extends ClosedFormColumnExtractor diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala b/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala similarity index 100% rename from core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala rename to core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala similarity index 100% rename from core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala rename to core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala diff --git a/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala new file mode 100644 index 0000000000..a27de7bcc1 --- /dev/null +++ b/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -0,0 +1,682 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import java.lang.reflect.Field + +import scala.collection.mutable + +import io.snappydata.Property.HashAggregateSize +import io.snappydata.sql.catalog.SnappyExternalCatalog +import io.snappydata.{HintName, QueryHint} + +import org.apache.spark.SparkContext +import org.apache.spark.deploy.SparkSubmitUtils +import org.apache.spark.internal.config.ConfigBuilder +import org.apache.spark.rdd.RDD +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder +import org.apache.spark.sql.catalyst.analysis.{Analyzer, UnresolvedRelation, UnresolvedSubqueryColumnAliases, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec +import org.apache.spark.sql.catalyst.catalog._ +import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} +import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} +import org.apache.spark.sql.catalyst.json.JSONOptions +import org.apache.spark.sql.catalyst.optimizer.Optimizer +import org.apache.spark.sql.catalyst.plans.logical._ +import org.apache.spark.sql.catalyst.plans.physical.Partitioning +import org.apache.spark.sql.catalyst.rules.Rule +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap +import org.apache.spark.sql.catalyst.{AccessUtils, FunctionIdentifier, InternalRow, TableIdentifier} +import org.apache.spark.sql.execution._ +import org.apache.spark.sql.execution.columnar.ColumnTableScan +import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunctionCommand, CreateTableLikeCommand, DescribeTableCommand, ExplainCommand, RunnableCommand} +import org.apache.spark.sql.execution.datasources._ +import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} +import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} +import org.apache.spark.sql.hive._ +import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} +import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} +import org.apache.spark.sql.types.StructType +import org.apache.spark.status.api.v1.RDDStorageInfo +import org.apache.spark.storage.StorageLevel +import org.apache.spark.streaming.SnappyStreamingContext +import org.apache.spark.streaming.dstream.DStream +import org.apache.spark.util.Utils + +/** + * Base implementation of [[SparkInternals]] for Spark 2.3.x and 2.4.x releases. + */ +abstract class Spark23_4_Internals extends SparkInternals { + + private val codegenContextClassFunctions: Field = { + val f = classOf[CodegenContext].getDeclaredField("classFunctions") + f.setAccessible(true) + f + } + + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + plan.mapExpressions(f) + } + + override def registerFunction(session: SparkSession, name: FunctionIdentifier, + info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { + session.sessionState.functionRegistry.registerFunction(name, info, function) + } + + override def addClassField(ctx: CodegenContext, javaType: String, + varPrefix: String, initFunc: String => String, + forceInline: Boolean, useFreshName: Boolean): String = { + ctx.addMutableState(javaType, varPrefix, initFunc, forceInline, useFreshName) + } + + override def getInlinedClassFields(ctx: CodegenContext): (Seq[(String, String)], Seq[String]) = + AccessUtils.getInlinedMutableStates(ctx) + + override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, + inlineToOuterClass: Boolean = false): String = { + ctx.addNewFunction(funcName, funcCode, inlineToOuterClass) + } + + override def isFunctionAddedToOuterClass(ctx: CodegenContext, funcName: String): Boolean = { + codegenContextClassFunctions.get(ctx).asInstanceOf[ + mutable.Map[String, mutable.Map[String, String]]].get(ctx.outerClassName) match { + case Some(m) => m.contains(funcName) + case None => false + } + } + + override def splitExpressions(ctx: CodegenContext, expressions: Seq[String]): String = { + ctx.splitExpressionsWithCurrentInputs(expressions) + } + + override def resetCopyResult(ctx: CodegenContext): Unit = {} + + override def isPredicateSubquery(expr: Expression): Boolean = false + + override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, + newExprId: ExprId): Expression = { + throw new UnsupportedOperationException( + s"unexpected copyPredicateSubquery call in Spark $version module") + } + + // scalastyle:off + + override def columnTableScan(output: Seq[Attribute], dataRDD: RDD[Any], + otherRDDs: Seq[RDD[InternalRow]], numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], baseRelation: PartitionedDataSourceScan, + relationSchema: StructType, allFilters: Seq[Expression], + schemaAttributes: Seq[AttributeReference], caseSensitive: Boolean, + isForSampleReservoirAsRegion: Boolean): ColumnTableScan = { + new ColumnTableScan23(output, dataRDD, otherRDDs, numBuckets, partitionColumns, + partitionColumnAliases, baseRelation, relationSchema, allFilters, schemaAttributes, + caseSensitive, isForSampleReservoirAsRegion) + } + + // scalastyle:on + + override def rowTableScan(output: Seq[Attribute], schema: StructType, dataRDD: RDD[Any], + numBuckets: Int, partitionColumns: Seq[Expression], + partitionColumnAliases: Seq[Seq[Attribute]], table: String, + baseRelation: PartitionedDataSourceScan, caseSensitive: Boolean): RowTableScan = { + new RowTableScan23(output, schema, dataRDD, numBuckets, partitionColumns, + partitionColumnAliases, JdbcExtendedUtils.toLowerCase(table), baseRelation, caseSensitive) + } + + override def newWholeStagePlan(plan: SparkPlan): WholeStageCodegenExec = { + WholeStageCodegenExec(plan)(codegenStageId = 0) + } + + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + CaseInsensitiveMap[String](map) + } + + protected def createAndAttachSQLListener(state: SnappySharedState, sc: SparkContext): Unit = { + // replace inside SQLAppStatusStore as well as change on the Spark ListenerBus + val listenerField = classOf[SQLAppStatusStore].getDeclaredField("listener") + listenerField.setAccessible(true) + listenerField.get(state.statusStore).asInstanceOf[Option[SQLAppStatusListener]] match { + case Some(_: SnappySQLAppListener) => // already changed + case Some(_: SQLAppStatusListener) => + val newListener = new SnappySQLAppListener(sc) + // update on ListenerBus + sc.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( + sc.removeSparkListener) + sc.listenerBus.addToStatusQueue(newListener) + listenerField.set(state.statusStore, newListener) + case _ => + } + } + + override def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { + val state = SnappyContext.getExistingSharedState + if (state ne null) createAndAttachSQLListener(state, sparkContext) + } + + def clearSQLListener(): Unit = { + // no global SQLListener in Spark 2.3.x + } + + override def createViewSQL(session: SparkSession, plan: LogicalPlan, + originalText: Option[String]): String = originalText match { + case Some(viewSQL) => viewSQL + case None => throw new AnalysisException("Cannot create a persisted VIEW from the Dataset API") + } + + override def createView(desc: CatalogTable, output: Seq[Attribute], + child: LogicalPlan): LogicalPlan = View(desc, output, child) + + override def newCreateFunctionCommand(schemaName: Option[String], functionName: String, + className: String, resources: Seq[FunctionResource], isTemp: Boolean, + ignoreIfExists: Boolean, replace: Boolean): LogicalPlan = { + CreateFunctionCommand(schemaName, functionName, className, resources, isTemp, + ignoreIfExists, replace) + } + + override def newDescribeTableCommand(table: TableIdentifier, + partitionSpec: Map[String, String], isExtended: Boolean, + isFormatted: Boolean): RunnableCommand = { + if (isFormatted) { + throw new ParseException(s"DESCRIBE FORMATTED TABLE not supported in Spark $version") + } + DescribeTableCommand(table, partitionSpec, isExtended) + } + + override def newCreateTableLikeCommand(targetIdent: TableIdentifier, + sourceIdent: TableIdentifier, location: Option[String], + allowExisting: Boolean): RunnableCommand = { + CreateTableLikeCommand(targetIdent, sourceIdent, location, allowExisting) + } + + override def lookupRelation(catalog: SessionCatalog, name: TableIdentifier, + alias: Option[String]): LogicalPlan = { + if (alias.isDefined) { + throw new AnalysisException(s"Spark $version does not support lookupRelation " + + s"with an alias: alias=$alias, name=$name") + } + catalog.lookupRelation(name) + } + + override def newClearCacheCommand(): LogicalPlan = ClearCacheCommand() + + override def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], + ivyPath: Option[String], exclusions: Seq[String]): String = { + SparkSubmitUtils.resolveMavenCoordinates(coordinates, + SparkSubmitUtils.buildIvySettings(remoteRepos, ivyPath), exclusions) + } + + override def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable = { + insert.copy(query = newChild) + } + + override def newInsertPlanWithCountOutput(table: LogicalPlan, + partition: Map[String, Option[String]], child: LogicalPlan, + overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { + new Insert23(table, partition, child, overwrite, ifNotExists) + } + + override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite + + override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifPartitionNotExists + + override def newGroupingSet(groupingSets: Seq[Seq[Expression]], + groupByExprs: Seq[Expression], child: LogicalPlan, + aggregations: Seq[NamedExpression]): LogicalPlan = { + GroupingSets(groupingSets, groupByExprs, child, aggregations) + } + + override def newUnresolvedRelation(tableIdentifier: TableIdentifier, + alias: Option[String]): LogicalPlan = alias match { + case None => UnresolvedRelation(tableIdentifier) + case Some(a) => SubqueryAlias(a, UnresolvedRelation(tableIdentifier)) + } + + override def unresolvedRelationAlias(u: UnresolvedRelation): Option[String] = None + + override def newSubqueryAlias(alias: String, child: LogicalPlan, + view: Option[TableIdentifier]): SubqueryAlias = { + if (view.isDefined) { + throw new AnalysisException(s"Spark $version does not support creating SubqueryAlias " + + s"with a VIEW: alias=$alias, view=${view.get}") + } + SubqueryAlias(alias, child) + } + + override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = None + + override def newUnresolvedColumnAliases(outputColumnNames: Seq[String], + child: LogicalPlan): LogicalPlan = { + if (outputColumnNames.isEmpty) child + else UnresolvedSubqueryColumnAliases(outputColumnNames, child) + } + + override def newSortOrder(child: Expression, direction: SortDirection, + nullOrdering: NullOrdering): SortOrder = { + SortOrder(child, direction, nullOrdering, Set.empty) + } + + override def newRepartitionByExpression(partitionExpressions: Seq[Expression], + numPartitions: Int, child: LogicalPlan): RepartitionByExpression = { + RepartitionByExpression(partitionExpressions, child, numPartitions) + } + + override def newUnresolvedTableValuedFunction(functionName: String, + functionArgs: Seq[Expression], outputNames: Seq[String]): UnresolvedTableValuedFunction = { + UnresolvedTableValuedFunction(functionName, functionArgs, outputNames) + } + + override def newFrameBoundary(boundaryType: FrameBoundaryType.Type, + num: Option[Expression]): Any = { + boundaryType match { + case FrameBoundaryType.UnboundedPreceding => UnboundedPreceding + case FrameBoundaryType.ValuePreceding => UnaryMinus(num.get) + case FrameBoundaryType.CurrentRow => CurrentRow + case FrameBoundaryType.UnboundedFollowing => UnboundedFollowing + case FrameBoundaryType.ValueFollowing => num.get + } + } + + override def newSpecifiedWindowFrame(frameType: FrameType, frameStart: Any, + frameEnd: Any): SpecifiedWindowFrame = { + SpecifiedWindowFrame(frameType, frameStart.asInstanceOf[Expression], + frameEnd.asInstanceOf[Expression]) + } + + override def newLogicalPlanWithHints(child: LogicalPlan, + hints: Map[QueryHint.Type, HintName.Type]): LogicalPlan = { + new ResolvedPlanWithHints23(child, hints) + } + + override def newTableSample(lowerBound: Double, upperBound: Double, withReplacement: Boolean, + seed: Long, child: LogicalPlan): Sample = { + Sample(lowerBound, upperBound, withReplacement, seed, child) + } + + override def isHintPlan(plan: LogicalPlan): Boolean = plan.isInstanceOf[ResolvedHint] + + override def getHints(plan: LogicalPlan): Map[QueryHint.Type, HintName.Type] = plan match { + case p: ResolvedPlanWithHints23 => p.allHints + case _: ResolvedHint => + // only broadcast supported + Map(QueryHint.JoinType -> HintName.JoinType_Broadcast) + case _ => Map.empty + } + + override def isBroadcastable(plan: LogicalPlan): Boolean = { + // Spark now uses the UnresolvedHint/ResolvedHint infrastructure and not a fixed flag + false + } + + override def newOneRowRelation(): LogicalPlan = OneRowRelation() + + override def newGeneratePlan(generator: Generator, outer: Boolean, qualifier: Option[String], + generatorOutput: Seq[Attribute], child: LogicalPlan): LogicalPlan = { + Generate(generator, unrequiredChildIndex = Nil, outer, qualifier, generatorOutput, child) + } + + override def newLogicalRelation(relation: BaseRelation, + expectedOutputAttributes: Option[Seq[AttributeReference]], + catalogTable: Option[CatalogTable], isStreaming: Boolean): LogicalRelation = { + val output = expectedOutputAttributes match { + case None => relation.schema.toAttributes + case Some(attrs) => attrs + } + LogicalRelation(relation, output, catalogTable, isStreaming) + } + + override def internalCreateDataFrame(session: SparkSession, catalystRows: RDD[InternalRow], + schema: StructType, isStreaming: Boolean): Dataset[Row] = { + session.internalCreateDataFrame(catalystRows, schema, isStreaming) + } + + override def newRowDataSourceScanExec(fullOutput: Seq[Attribute], requiredColumnsIndex: Seq[Int], + filters: Seq[Filter], handledFilters: Seq[Filter], rdd: RDD[InternalRow], + metadata: Map[String, String], relation: BaseRelation, + tableIdentifier: Option[TableIdentifier]): RowDataSourceScanExec = { + RowDataSourceScanExec(fullOutput, requiredColumnsIndex, filters.toSet, handledFilters.toSet, + rdd, relation, tableIdentifier) + } + + override def newCodegenSparkFallback(child: SparkPlan, + session: SnappySession): CodegenSparkFallback = { + new CodegenSparkFallback23(child, session) + } + + override def newLogicalDStreamPlan(output: Seq[Attribute], stream: DStream[InternalRow], + streamingSnappy: SnappyStreamingContext): LogicalDStreamPlan = { + new LogicalDStreamPlan23(output, stream)(streamingSnappy) + } + + override def newCatalogDatabase(name: String, description: String, + locationUri: String, properties: Map[String, String]): CatalogDatabase = { + CatalogDatabase(name, description, CatalogUtils.stringToURI(locationUri), properties) + } + + override def catalogDatabaseLocationURI(database: CatalogDatabase): String = + database.locationUri.toString + + // scalastyle:off + + override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, + storage: CatalogStorageFormat, schema: StructType, provider: Option[String], + partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], + owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], + stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], + comment: Option[String], unsupportedFeatures: Seq[String], + tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, + ignoredProperties: Map[String, String]): CatalogTable = { + CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, + bucketSpec, owner, createTime, lastAccessTime, createVersion = "", properties, + stats.asInstanceOf[Option[CatalogStatistics]], viewText, comment, unsupportedFeatures, + tracksPartitionsInCatalog, schemaPreservesCase, ignoredProperties) + } + + // scalastyle:on + + override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = None + + override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = + catalogTable.schemaPreservesCase + + override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = + catalogTable.ignoredProperties + + override def newCatalogTableWithViewOriginalText(catalogTable: CatalogTable, + viewOriginalText: Option[String]): CatalogTable = catalogTable + + override def newCatalogStorageFormat(locationUri: Option[String], inputFormat: Option[String], + outputFormat: Option[String], serde: Option[String], compressed: Boolean, + properties: Map[String, String]): CatalogStorageFormat = { + locationUri match { + case None => CatalogStorageFormat(None, inputFormat, outputFormat, + serde, compressed, properties) + case Some(uri) => CatalogStorageFormat(Some(CatalogUtils.stringToURI(uri)), + inputFormat, outputFormat, serde, compressed, properties) + } + } + + override def catalogStorageFormatLocationUri( + storageFormat: CatalogStorageFormat): Option[String] = storageFormat.locationUri match { + case None => None + case Some(uri) => Some(uri.toString) + } + + override def catalogTablePartitionToRow(partition: CatalogTablePartition, + partitionSchema: StructType, defaultTimeZoneId: String): InternalRow = { + partition.toRow(partitionSchema, defaultTimeZoneId) + } + + override def loadDynamicPartitions(externalCatalog: ExternalCatalog, schema: String, + table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, + numDP: Int, holdDDLTime: Boolean): Unit = { + if (holdDDLTime) { + throw new UnsupportedOperationException( + s"unexpected loadDynamicPartitions with holdDDLTime=true in Spark $version module") + } + externalCatalog.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP) + } + + override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit = { + externalCatalog.alterTableDataSchema(schemaName, table, newSchema) + } + + override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, + stats: Option[AnyRef]): Unit = { + externalCatalog.alterTableStats(schema, table, stats.asInstanceOf[Option[CatalogStatistics]]) + } + + override def alterFunction(externalCatalog: ExternalCatalog, schema: String, + function: CatalogFunction): Unit = externalCatalog.alterFunction(schema, function) + + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = + DataSource.lookupDataSource(provider, conf) + + override def newShuffleExchange(newPartitioning: Partitioning, child: SparkPlan): Exchange = { + ShuffleExchangeExec(newPartitioning, child) + } + + override def isShuffleExchange(plan: SparkPlan): Boolean = plan.isInstanceOf[ShuffleExchangeExec] + + override def classOfShuffleExchange(): Class[_] = classOf[ShuffleExchangeExec] + + override def getStatistics(plan: LogicalPlan): Statistics = plan.stats + + override def supportsPartial(aggregate: AggregateFunction): Boolean = true + + override def planAggregateWithoutPartial(groupingExpressions: Seq[NamedExpression], + aggregateExpressions: Seq[AggregateExpression], resultExpressions: Seq[NamedExpression], + planChild: () => SparkPlan): Seq[SparkPlan] = { + throw new UnsupportedOperationException( + s"unexpected planAggregateWithoutPartial call in Spark $version module") + } + + override def compile(code: CodeAndComment): GeneratedClass = CodeGenerator.compile(code)._1 + + override def newJSONOptions(parameters: Map[String, String], + session: Option[SparkSession]): JSONOptions = session match { + case None => + new JSONOptions(parameters, + SQLConf.SESSION_LOCAL_TIMEZONE.defaultValue.get, + SQLConf.COLUMN_NAME_OF_CORRUPT_RECORD.defaultValue.get) + case Some(sparkSession) => + new JSONOptions(parameters, + sparkSession.sessionState.conf.sessionLocalTimeZone, + sparkSession.sessionState.conf.columnNameOfCorruptRecord) + } + + override def newPreWriteCheck(sessionState: SnappySessionState): LogicalPlan => Unit = { + PreWriteCheck + } + + override def hiveConditionalStrategies(sessionState: SnappySessionState): Seq[Strategy] = { + // DataSinks in older Spark releases is now taken care of by HiveAnalysis + new HiveConditionalStrategy(_.HiveTableScans, sessionState) :: + new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil + } + + override def buildConf(key: String): ConfigBuilder = SQLConf.buildConf(key) + + override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { + context.ui.get.store.rddList() + } + + override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, + codegen: Boolean, cost: Boolean): LogicalPlan = { + ExplainCommand(logicalPlan, extended, codegen, cost) + } +} + +/** + * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. + */ +abstract class SnappyCacheManager23_4 extends CacheManager { + + override def cacheQuery(query: Dataset[_], tableName: Option[String], + storageLevel: StorageLevel): Unit = { + super.cacheQuery(query, tableName, storageLevel) + // clear plan cache since cached representation can change existing plans + query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() + } + + override def recacheByPlan(session: SparkSession, plan: LogicalPlan): Unit = { + super.recacheByPlan(session, plan) + session.asInstanceOf[SnappySession].clearPlanCache() + } + + override def recacheByPath(session: SparkSession, resourcePath: String): Unit = { + super.recacheByPath(session, resourcePath) + session.asInstanceOf[SnappySession].clearPlanCache() + } +} + +trait SnappySessionCatalog23_4 extends SessionCatalog with SnappySessionCatalog { + + override def functionNotFound(name: String): Nothing = { + super.failFunctionLookup(FunctionIdentifier(name, None)) + } + + override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = + View(desc = table, output = table.schema.toAttributes, child) + + override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = + UnresolvedCatalogRelation(table) + + override def lookupRelation(name: TableIdentifier): LogicalPlan = lookupRelationImpl(name, None) + + override def registerFunction(funcDefinition: CatalogFunction, + overrideIfExists: Boolean, functionBuilder: Option[FunctionBuilder]): Unit = { + val func = funcDefinition.identifier + if (functionRegistry.functionExists(func) && !overrideIfExists) { + throw new AnalysisException(s"Function $func already exists") + } + val info = new ExpressionInfo(funcDefinition.className, func.database.orNull, func.funcName) + val builder = functionBuilder.getOrElse { + val className = funcDefinition.className + if (!Utils.classIsLoadable(className)) { + throw new AnalysisException(s"Can not load class '$className' when registering " + + s"the function '$func', please make sure it is on the classpath") + } + makeFunctionBuilderImpl(func.unquotedString, className) + } + functionRegistry.registerFunction(func, info, builder) + } +} + +abstract class SnappySessionStateBuilder23_4(session: SnappySession, + parentState: Option[SessionState] = None) + extends BaseSessionStateBuilder(session, parentState) { + + self => + + override protected lazy val conf: SQLConf = { + val conf = parentState.map(_.conf.clone()).getOrElse(new SnappyConf(session)) + mergeSparkConf(conf, session.sparkContext.conf) + conf + } + + override protected lazy val sqlParser: SnappySqlParser = session.contextFunctions.newSQLParser() + + protected val externalCatalog: SnappyExternalCatalog = + session.sharedState.getExternalCatalogInstance(session) + + protected def newSessionCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog + + private def createCatalog(wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + val catalog = newSessionCatalog(wrapped) + parentState.foreach(_.catalog.copyStateTo(catalog)) + catalog + } + + override protected lazy val catalog: SnappySessionCatalog = createCatalog(wrapped = None) + + override protected def analyzer: Analyzer = new Analyzer(catalog, conf) with SnappyAnalyzer { + + aSelf => + + override def session: SnappySession = self.session + + private def state: SnappySessionState = session.sessionState + + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { + (new HiveConditionalRule(_ => new ResolveHiveSerdeTable(state.hiveSession), state) :: + new PreprocessTable(state) :: + state.ResolveAliasInGroupBy :: + new FindDataSourceTable(session) :: + new ResolveSQLOnFile(session) :: + session.contextFunctions.getExtendedResolutionRules) ++ customResolutionRules + } + + override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = { + (new HiveConditionalRule(_ => new DetermineTableStats(session), state) :: + new HiveConditionalRule(s => + RelationConversions(s.conf, s.catalog.asInstanceOf[HiveSessionCatalog]), state) :: + PreprocessTableCreation(session) :: + PreprocessTableInsertion(conf) :: + DataSourceAnalysis(conf) :: + new HiveConditionalRule(_ => HiveAnalysis, state) :: + state.AnalyzeMutableOperations(session, analyzer) :: + ResolveQueryHints(session) :: + state.RowLevelSecurity :: + state.ExternalRelationLimitFetch :: + session.contextFunctions.getPostHocResolutionRules) ++ customPostHocResolutionRules + } + + override val extendedCheckRules: Seq[LogicalPlan => Unit] = + state.getExtendedCheckRules ++ (PreReadCheck +: customCheckRules) + + override lazy val baseAnalyzerInstance: Analyzer = new Analyzer(catalog, conf) { + override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.extendedResolutionRules + override val postHocResolutionRules: Seq[Rule[LogicalPlan]] = aSelf.postHocResolutionRules + override val extendedCheckRules: Seq[LogicalPlan => Unit] = aSelf.extendedCheckRules + + override def execute(plan: LogicalPlan): LogicalPlan = aSelf.execute(plan) + } + } + + override protected def streamingQueryManager: StreamingQueryManager = { + // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with + // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This + // implies that Snappydata aggregation optimisation will be turned off for any usage of + // this session including non-streaming queries. + + HashAggregateSize.set(session.sessionState.conf, "-1") + new StreamingQueryManager(session) + } + + override def build(): SnappySessionState = { + new SessionState(session.sharedState, conf, experimentalMethods, + functionRegistry, udfRegistration, () => catalog, sqlParser, + () => analyzer, () => optimizer, planner, streamingQueryManager, + listenerManager, () => resourceLoader, createQueryExecution, + createClone) with SnappySessionState { + + override val snappySession: SnappySession = session + + override def catalogBuilder(wrapped: Option[SnappySessionCatalog]): SessionCatalog = { + wrapped match { + case None => self.catalog + case _ => self.createCatalog(wrapped) + } + } + + def analyzerBuilder(): Analyzer = self.analyzer + + def optimizerBuilder(): Optimizer = self.optimizer + } + } +} + +final class CodegenSparkFallback23(child: SparkPlan, + session: SnappySession) extends CodegenSparkFallback(child, session) { + + override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, + verbose: Boolean, prefix: String, addSuffix: Boolean): StringBuilder = { + child.generateTreeString(depth, lastChildren, builder, verbose, prefix, addSuffix) + } +} + +final class LogicalDStreamPlan23(output: Seq[Attribute], + stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) + extends LogicalDStreamPlan(output, stream)(streamingSnappy) { + + override def stats: Statistics = Statistics( + sizeInBytes = BigInt(streamingSnappy.snappySession.sessionState.conf.defaultSizeInBytes) + ) +} diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/plans.scala similarity index 95% rename from core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala rename to core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/plans.scala index d9b4c06cf8..ed959ad3d7 100644 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -58,9 +58,8 @@ final class Insert23( * than just broadcast. */ class ResolvedPlanWithHints23(child: LogicalPlan, - override val allHints: Map[QueryHint.Type, HintName.Type]) - extends ResolvedHint(child, HintInfo(JoinStrategy.hasBroadcastHint(allHints))) - with LogicalPlanWithHints { + val allHints: Map[QueryHint.Type, HintName.Type]) + extends ResolvedHint(child, HintInfo(JoinStrategy.hasBroadcastHint(allHints))) { override def productArity: Int = 3 @@ -69,6 +68,9 @@ class ResolvedPlanWithHints23(child: LogicalPlan, case 1 => hints case 2 => allHints } + + override def simpleString: String = + s"ResolvedPlanWithHints[hints = $allHints; child = ${child.simpleString}]" } final class ColumnTableScan23(output: Seq[Attribute], dataRDD: RDD[Any], diff --git a/core/compatibility/spark-2.4.4/build.gradle b/core/compatibility/spark-2.4.4/build.gradle index bc7c6052fd..570dbb0db3 100644 --- a/core/compatibility/spark-2.4.4/build.gradle +++ b/core/compatibility/spark-2.4.4/build.gradle @@ -20,9 +20,10 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with Spark 2.4.4 -sourceSets.main.scala.srcDir "../spark-${spark232Version}/src/main/scala" -sourceSets.main.scala.srcDir "../spark-${spark232Version}/src/main/java" -sourceSets.main.scala.srcDir 'src/main/java' +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" +sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/java" sourceSets.main.java.srcDirs = [] dependencies { @@ -42,7 +43,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly (project(coreProjectName)) { + compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) diff --git a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala index a1a50df2d6..7dbf92af14 100644 --- a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala +++ b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala @@ -16,245 +16,12 @@ */ package org.apache.spark.sql.internal -import io.snappydata.sql.catalog.SnappyExternalCatalog -import org.apache.hadoop.conf.Configuration - -import org.apache.spark.SparkContext -import org.apache.spark.rdd.RDD -import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, TypeCoercion} -import org.apache.spark.sql.catalyst.catalog.{CatalogColumnStat, CatalogTable, FunctionResourceLoader, GlobalTempViewManager} -import org.apache.spark.sql.catalyst.expressions.codegen._ -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, NamedExpression} -import org.apache.spark.sql.catalyst.optimizer.Optimizer -import org.apache.spark.sql.catalyst.plans.logical.{ColumnStat, Except, Intersect, LogicalPlan, Pivot} -import org.apache.spark.sql.catalyst.rules.Rule -import org.apache.spark.sql.execution.{SparkOptimizer, SparkPlan} -import org.apache.spark.sql.execution.columnar.InMemoryRelation -import org.apache.spark.sql.execution.common.ErrorEstimateAttribute -import org.apache.spark.sql.hive.{SnappyAnalyzer, SnappySessionState} -import org.apache.spark.sql.types.{DataType, Metadata, StructField} -import org.apache.spark.sql.{SnappySession, SnappySqlParser, SparkInternals, SparkSession} +import org.apache.spark.sql._ /** * Implementation of [[SparkInternals]] for Spark 2.4.4. */ -class Spark244Internals extends Spark232Internals { - - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, - cascade: Boolean, blocking: Boolean): Unit = { - spark.sharedState.cacheManager.uncacheQuery(spark, plan, cascade, blocking) - } - - private def toQualifier(q: Option[String]): Seq[String] = if (q.isEmpty) Nil else q.get :: Nil - - override def toAttributeReference(attr: Attribute)(name: String, - dataType: DataType, nullable: Boolean, metadata: Metadata, - exprId: ExprId): AttributeReference = { - AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( - exprId, qualifier = toQualifier(attr.qualifier)) - } - - override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, - metadata: Metadata, exprId: ExprId, qualifier: Option[String], - isGenerated: Boolean): AttributeReference = { - AttributeReference(name, dataType, nullable, metadata)(exprId, toQualifier(qualifier)) - } - - override def newErrorEstimateAttribute(name: String, dataType: DataType, - nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, - qualifier: Seq[String]): ErrorEstimateAttribute = { - ErrorEstimateAttribute24(name, dataType, nullable, metadata, exprId, realExprId)(qualifier) - } - - override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], - exprId: ExprId, qualifier: Option[String]): Alias = { - copyAlias match { - case None => Alias(child, name)(exprId, toQualifier(qualifier)) - case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) - case Some(a) => Alias(child, name)(a.exprId, a.qualifier) - } - } - - override def columnStatToMap(stat: Any, colName: String, - dataType: DataType): Map[String, String] = { - stat.asInstanceOf[CatalogColumnStat].toMap(colName) - } - - override def columnStatFromMap(table: String, field: StructField, - map: Map[String, String]): Option[ColumnStat] = { - CatalogColumnStat.fromMap(table, field.name, map).map(_.toPlanStat(field.name, field.dataType)) - } - - override def newSharedState(sparkContext: SparkContext): SnappySharedState = { - val state = new SnappySharedState24(sparkContext) - createAndAttachSQLListener(state, sparkContext) - state - } - - override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { - new SnappySessionStateBuilder24(snappySession).build() - } - - private def exprValue(v: String, javaClass: Class[_]): ExprValue = v match { - case "false" => FalseLiteral - case "true" => TrueLiteral - case _ => VariableValue(v, javaClass) - } - - override def newExprCode(code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { - ExprCode(CodeBlock(code :: Nil, EmptyBlock :: Nil), - isNull = exprValue(isNull, java.lang.Boolean.TYPE), - value = exprValue(value, javaClass)) - } - - override def copyExprCode(ev: ExprCode, code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { - val codeBlock = - if (code eq null) ev.code - else if (code.isEmpty) EmptyBlock - else CodeBlock(code :: Nil, EmptyBlock :: Nil) - ev.copy(codeBlock, - if (isNull ne null) VariableValue(isNull, java.lang.Boolean.TYPE) else ev.isNull, - if (value ne null) VariableValue(value, javaClass) else ev.value) - } - - override def resetCode(ev: ExprCode): Unit = { - ev.code = EmptyBlock - } - - override def exprCodeIsNull(ev: ExprCode): String = ev.isNull.code - - override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { - ev.isNull = exprValue(isNull, classOf[Boolean]) - } - - override def exprCodeValue(ev: ExprCode): String = ev.value.code - - override def javaType(dt: DataType, ctx: CodegenContext): String = CodeGenerator.javaType(dt) - - override def boxedType(javaType: String, ctx: CodegenContext): String = { - CodeGenerator.boxedType(javaType) - } - - override def defaultValue(dt: DataType, ctx: CodegenContext): String = { - CodeGenerator.defaultValue(dt) - } - - override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { - CodeGenerator.isPrimitiveType(javaType) - } - - override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { - CodeGenerator.primitiveTypeName(javaType) - } - - override def getValue(input: String, dataType: DataType, ordinal: String, - ctx: CodegenContext): String = { - CodeGenerator.getValue(input, dataType, ordinal) - } - - override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = Nil - - override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, - pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { - Pivot(if (groupByExprs.isEmpty) None else Some(groupByExprs), pivotColumn, pivotValues, - aggregates, child) - } - - override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { - pivot.copy(groupByExprsOpt = if (groupByExprs.isEmpty) None else Some(groupByExprs)) - } - - override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { - Intersect(left, right, isAll) - } - - override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { - Except(left, right, isAll) - } - - override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { - relation.cacheBuilder.cachedColumnBuffers - } - - override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], - analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { - rules.flatMap { - case _: TypeCoercion.PromoteStrings => - (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: - TypeCoercion.PromoteStrings(conf) :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] - case r => r :: Nil - } - } -} - -class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[SessionState] = None) - extends SnappySessionStateBuilder23(session, parentState) { - - override protected def newSessionCatalog( - wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { - new SnappySessionCatalog24( - session, - externalCatalog, - session.sharedState.globalTempViewManager, - resourceLoader, - functionRegistry, - sqlParser, - conf, - SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf), - wrapped) - } - - override protected def optimizer: Optimizer = { - new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { - - override def state: SnappySessionState = session.sessionState - - override def defaultBatches: Seq[Batch] = batchesImpl - - override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = - super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules - } - } - - override protected def newBuilder: NewBuilder = (session, optState) => - new SnappySessionStateBuilder24(session.asInstanceOf[SnappySession], optState) -} - -class SnappySessionCatalog24(override val snappySession: SnappySession, - override val snappyExternalCatalog: SnappyExternalCatalog, - override val globalTempViewManager: GlobalTempViewManager, - override val functionResourceLoader: FunctionResourceLoader, - override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, - override val sqlConf: SQLConf, hadoopConf: Configuration, - override val wrappedCatalog: Option[SnappySessionCatalog]) - extends SnappySessionCatalog23(snappySession, snappyExternalCatalog, globalTempViewManager, - functionResourceLoader, functionRegistry, parser, sqlConf, hadoopConf, wrappedCatalog) { - - override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, - validateTableLocation: Boolean): Unit = { - super.createTable(table, ignoreIfExists, validateTableLocation) - } - - override def createTable(table: CatalogTable, ignoreIfExists: Boolean, - validateTableLocation: Boolean): Unit = { - createTableImpl(table, ignoreIfExists, validateTableLocation) - } -} - -case class ErrorEstimateAttribute24(name: String, dataType: DataType, nullable: Boolean, - override val metadata: Metadata, exprId: ExprId, realExprId: ExprId)( - val qualifier: Seq[String]) extends ErrorEstimateAttribute { - - override def singleQualifier: Option[String] = qualifier.headOption +class Spark244Internals extends Spark24Internals { - override def withQualifier(newQualifier: Seq[String]): Attribute = { - if (newQualifier == qualifier) { - this - } else { - ErrorEstimateAttribute24(name, dataType, nullable, metadata, exprId, - realExprId)(newQualifier) - } - } + override def version: String = "2.4.4" } diff --git a/core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java b/core/compatibility/spark-2.4.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java similarity index 79% rename from core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java rename to core/compatibility/spark-2.4.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java index 7ec1a5e3ca..9988da11f3 100644 --- a/core/compatibility/spark-2.4.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java +++ b/core/compatibility/spark-2.4.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java @@ -17,6 +17,8 @@ package org.apache.spark.sql.internal; import org.apache.spark.SparkContext; +import org.apache.spark.sql.catalyst.catalog.ExternalCatalogEvent; +import org.apache.spark.sql.catalyst.catalog.ExternalCatalogEventListener; import org.apache.spark.sql.catalyst.catalog.ExternalCatalogWithListener; public final class SnappySharedState24 extends SnappySharedState { @@ -30,7 +32,13 @@ public final class SnappySharedState24 extends SnappySharedState { // Wrap to provide catalog events this.catalogWrapper = new ExternalCatalogWithListener(this.embedCatalog); // Make sure we propagate external catalog events to the spark listener bus - this.catalogWrapper.addListener(event -> sparkContext().listenerBus().post(event)); + // noinspection Convert2Lambda + this.catalogWrapper.addListener(new ExternalCatalogEventListener() { + @Override + public void onEvent(ExternalCatalogEvent event) { + sparkContext().listenerBus().post(event); + } + }); } else { this.catalogWrapper = null; } diff --git a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala new file mode 100644 index 0000000000..c7b031b38e --- /dev/null +++ b/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -0,0 +1,470 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import io.snappydata.sql.catalog.SnappyExternalCatalog +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog +import org.apache.hadoop.conf.Configuration + +import org.apache.spark.rdd.RDD +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, TypeCoercion} +import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec +import org.apache.spark.sql.catalyst.catalog._ +import org.apache.spark.sql.catalyst.expressions.codegen._ +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, NamedExpression} +import org.apache.spark.sql.catalyst.optimizer.Optimizer +import org.apache.spark.sql.catalyst.plans.logical.{Except, Intersect, LogicalPlan, Pivot} +import org.apache.spark.sql.catalyst.rules.Rule +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} +import org.apache.spark.sql.execution.columnar.InMemoryRelation +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.execution.datasources.DataSource +import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan} +import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.sources.BaseRelation +import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} +import org.apache.spark.{SparkConf, SparkContext} + +/** + * Base implementation of [[SparkInternals]] for Spark 2.4.x releases. + */ +abstract class Spark24Internals extends Spark23_4_Internals { + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, cascade, blocking) + } + + override def toAttributeReference(attr: Attribute)(name: String, + dataType: DataType, nullable: Boolean, metadata: Metadata, + exprId: ExprId): AttributeReference = { + AttributeReference(name = name, dataType = dataType, nullable = nullable, metadata = metadata)( + exprId, qualifier = attr.qualifier) + } + + override def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Seq[String], + isGenerated: Boolean): AttributeReference = { + AttributeReference(name, dataType, nullable, metadata)(exprId, qualifier) + } + + override def newErrorEstimateAttribute(name: String, dataType: DataType, + nullable: Boolean, metadata: Metadata, realExprId: ExprId, exprId: ExprId, + qualifier: Seq[String]): ErrorEstimateAttribute = { + ErrorEstimateAttribute24(name, dataType, nullable, metadata, realExprId)(exprId, qualifier) + } + + override def newApproxColumnExtractor(child: Expression, name: String, ordinal: Int, + dataType: DataType, nullable: Boolean, exprId: ExprId, + qualifier: Seq[String]): ApproxColumnExtractor = { + ApproxColumnExtractor24(child, name, ordinal, dataType, nullable)(exprId, qualifier) + } + + override def newTaggedAttribute(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId, qualifier: Seq[String]): TaggedAttribute = { + TaggedAttribute24(tag, name, dataType, nullable, metadata)(exprId, qualifier) + } + + override def newTaggedAlias(tag: TransformableTag, child: Expression, name: String, + exprId: ExprId, qualifier: Seq[String]): TaggedAlias = { + TaggedAlias24(tag, child, name)(exprId, qualifier) + } + + // scalastyle:off + + override def newClosedFormColumnExtractor(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, nullable: Boolean, exprId: ExprId, + qualifier: Seq[String]): ClosedFormColumnExtractor = { + ClosedFormColumnExtractor24(child, name, confidence, confFactor, aggType, error, + dataType, behavior, nullable)(exprId, qualifier) + } + + // scalastyle:on + + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], + exprId: ExprId, qualifier: Seq[String]): Alias = { + copyAlias match { + case None => Alias(child, name)(exprId, qualifier) + case Some(a: Alias) => Alias(child, name)(a.exprId, a.qualifier, a.explicitMetadata) + case Some(a) => Alias(child, name)(a.exprId, a.qualifier) + } + } + + override def writeToDataSource(ds: DataSource, mode: SaveMode, + data: Dataset[Row]): BaseRelation = { + ds.writeAndRead(mode, data.logicalPlan, data.logicalPlan.output.map(_.name), + data.queryExecution.executedPlan) + } + + override def columnStatToMap(stat: Any, colName: String, + dataType: DataType): Map[String, String] = { + stat.asInstanceOf[CatalogColumnStat].toMap(colName) + } + + override def columnStatFromMap(table: String, field: StructField, + map: Map[String, String]): Option[AnyRef] = { + CatalogColumnStat.fromMap(table, field.name, map) + } + + override def toCatalogStatistics(sizeInBytes: BigInt, rowCount: Option[BigInt], + colStats: Map[String, AnyRef]): AnyRef = { + CatalogStatistics(sizeInBytes, rowCount, colStats.asInstanceOf[Map[String, CatalogColumnStat]]) + } + + override def newEmbeddedHiveCatalog(conf: SparkConf, hadoopConf: Configuration, + createTime: Long): SnappyHiveExternalCatalog = { + new SnappyEmbeddedHiveCatalog24(conf, hadoopConf, createTime) + } + + override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { + new SmartConnectorExternalCatalog24(session) + } + + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + val state = new SnappySharedState24(sparkContext) + createAndAttachSQLListener(state, sparkContext) + state + } + + override def newSnappySessionState(snappySession: SnappySession): SnappySessionState = { + new SnappySessionStateBuilder24(snappySession).build() + } + + override def newCacheManager(): CacheManager = new SnappyCacheManager24 + + private def exprValue(v: String, javaClass: Class[_]): ExprValue = v match { + case "false" => FalseLiteral + case "true" => TrueLiteral + case _ => VariableValue(v, javaClass) + } + + override def newExprCode(code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + ExprCode(CodeBlock(code :: Nil, EmptyBlock :: Nil), + isNull = exprValue(isNull, java.lang.Boolean.TYPE), + value = exprValue(value, javaClass)) + } + + override def copyExprCode(ev: ExprCode, code: String, isNull: String, + value: String, javaClass: Class[_]): ExprCode = { + val codeBlock = + if (code eq null) ev.code + else if (code.isEmpty) EmptyBlock + else CodeBlock(code :: Nil, EmptyBlock :: Nil) + ev.copy(codeBlock, + if (isNull ne null) VariableValue(isNull, java.lang.Boolean.TYPE) else ev.isNull, + if (value ne null) VariableValue(value, javaClass) else ev.value) + } + + override def resetCode(ev: ExprCode): Unit = { + ev.code = EmptyBlock + } + + override def exprCodeIsNull(ev: ExprCode): String = ev.isNull.code + + override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { + ev.isNull = exprValue(isNull, classOf[Boolean]) + } + + override def exprCodeValue(ev: ExprCode): String = ev.value.code + + override def javaType(dt: DataType, ctx: CodegenContext): String = CodeGenerator.javaType(dt) + + override def boxedType(javaType: String, ctx: CodegenContext): String = { + CodeGenerator.boxedType(javaType) + } + + override def defaultValue(dt: DataType, ctx: CodegenContext): String = { + CodeGenerator.defaultValue(dt) + } + + override def isPrimitiveType(javaType: String, ctx: CodegenContext): Boolean = { + CodeGenerator.isPrimitiveType(javaType) + } + + override def primitiveTypeName(javaType: String, ctx: CodegenContext): String = { + CodeGenerator.primitiveTypeName(javaType) + } + + override def getValue(input: String, dataType: DataType, ordinal: String, + ctx: CodegenContext): String = { + CodeGenerator.getValue(input, dataType, ordinal) + } + + override def optionalQueryPreparations(session: SparkSession): Seq[Rule[SparkPlan]] = Nil + + override def newPivot(groupByExprs: Seq[NamedExpression], pivotColumn: Expression, + pivotValues: Seq[Expression], aggregates: Seq[Expression], child: LogicalPlan): Pivot = { + Pivot(if (groupByExprs.isEmpty) None else Some(groupByExprs), pivotColumn, pivotValues, + aggregates, child) + } + + override def copyPivot(pivot: Pivot, groupByExprs: Seq[NamedExpression]): Pivot = { + pivot.copy(groupByExprsOpt = if (groupByExprs.isEmpty) None else Some(groupByExprs)) + } + + override def newIntersect(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Intersect = { + Intersect(left, right, isAll) + } + + override def newExcept(left: LogicalPlan, right: LogicalPlan, isAll: Boolean): Except = { + Except(left, right, isAll) + } + + override def cachedColumnBuffers(relation: InMemoryRelation): RDD[_] = { + relation.cacheBuilder.cachedColumnBuffers + } + + override def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], + analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] = { + rules.flatMap { + case _: TypeCoercion.PromoteStrings => + (analyzer.StringPromotionCheckForUpdate :: analyzer.SnappyPromoteStrings :: + TypeCoercion.PromoteStrings(conf) :: Nil).asInstanceOf[Seq[Rule[LogicalPlan]]] + case r => r :: Nil + } + } + + override def createTable(catalog: SessionCatalog, tableDefinition: CatalogTable, + ignoreIfExists: Boolean, validateLocation: Boolean): Unit = { + catalog.createTable(tableDefinition, ignoreIfExists, validateLocation) + } +} + +final class SnappyEmbeddedHiveCatalog24(_conf: SparkConf, _hadoopConf: Configuration, + _createTime: Long) extends SnappyHiveExternalCatalog(_conf, _hadoopConf, _createTime) { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override protected def baseCreateDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = super.createDatabase(schemaDefinition, ignoreIfExists) + + override protected def baseDropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = super.dropDatabase(schema, ignoreIfNotExists, cascade) + + override protected def baseCreateTable(tableDefinition: CatalogTable, + ignoreIfExists: Boolean): Unit = super.createTable(tableDefinition, ignoreIfExists) + + override protected def baseDropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = super.dropTable(schema, table, ignoreIfNotExists, purge) + + override protected def baseAlterTable(tableDefinition: CatalogTable): Unit = + super.alterTable(tableDefinition) + + override protected def baseRenameTable(schema: String, oldName: String, newName: String): Unit = + super.renameTable(schema, oldName, newName) + + override protected def baseLoadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { + super.loadDynamicPartitions(schema, table, loadPath, partition, replace, numDP) + } + + override protected def baseCreateFunction(schema: String, + funcDefinition: CatalogFunction): Unit = super.createFunction(schema, funcDefinition) + + override protected def baseDropFunction(schema: String, name: String): Unit = + super.dropFunction(schema, name) + + override protected def baseRenameFunction(schema: String, oldName: String, + newName: String): Unit = super.renameFunction(schema, oldName, newName) + + override def createDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = + alterDatabaseImpl(schemaDefinition) + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) + + override def renameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override def alterTableStats(schema: String, table: String, + stats: Option[CatalogStatistics]): Unit = { + withHiveExceptionHandling(super.alterTableStats(schema, table, stats)) + } + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, + holdDDLTime = false) + } + + override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], + defaultTimeZoneId: String): Seq[CatalogTablePartition] = { + withHiveExceptionHandling(super.listPartitionsByFilter(schema, table, + predicates, defaultTimeZoneId)) + } + + override def createFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override def dropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override def alterFunction(schema: String, function: CatalogFunction): Unit = { + withHiveExceptionHandling(super.alterFunction(schema, function)) + SnappySession.clearAllCache() + } + + override def renameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +final class SmartConnectorExternalCatalog24(override val session: SparkSession) + extends SmartConnectorExternalCatalog { + + override def getTable(schema: String, table: String): CatalogTable = + getTableImpl(schema, table) + + override def createDatabase(schemaDefinition: CatalogDatabase, + ignoreIfExists: Boolean): Unit = createDatabaseImpl(schemaDefinition, ignoreIfExists) + + override def dropDatabase(schema: String, ignoreIfNotExists: Boolean, + cascade: Boolean): Unit = dropDatabaseImpl(schema, ignoreIfNotExists, cascade) + + override def alterDatabase(schemaDefinition: CatalogDatabase): Unit = + throw new UnsupportedOperationException("Schema definitions cannot be altered") + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean): Unit = + createTableImpl(table, ignoreIfExists) + + override def dropTable(schema: String, table: String, ignoreIfNotExists: Boolean, + purge: Boolean): Unit = dropTableImpl(schema, table, ignoreIfNotExists, purge) + + override def renameTable(schema: String, oldName: String, newName: String): Unit = + renameTableImpl(schema, oldName, newName) + + override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + + override def alterTableDataSchema(schemaName: String, table: String, + newSchema: StructType): Unit = alterTableSchemaImpl(schemaName, table, newSchema) + + override def alterTableStats(schema: String, table: String, + stats: Option[CatalogStatistics]): Unit = stats match { + case None => alterTableStatsImpl(schema, table, None) + case Some(s) => alterTableStatsImpl(schema, table, + Some((s.sizeInBytes, s.rowCount, s.colStats))) + } + + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, + partition: TablePartitionSpec, replace: Boolean, numDP: Int): Unit = { + loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, + holdDDLTime = false) + } + + override def listPartitionsByFilter(schema: String, table: String, predicates: Seq[Expression], + defaultTimeZoneId: String): Seq[CatalogTablePartition] = { + listPartitionsByFilterImpl(schema, table, predicates, defaultTimeZoneId) + } + + override def createFunction(schema: String, function: CatalogFunction): Unit = + createFunctionImpl(schema, function) + + override def dropFunction(schema: String, funcName: String): Unit = + dropFunctionImpl(schema, funcName) + + override def alterFunction(schema: String, function: CatalogFunction): Unit = + alterFunctionImpl(schema, function) + + override def renameFunction(schema: String, oldName: String, newName: String): Unit = + renameFunctionImpl(schema, oldName, newName) +} + +class SnappySessionCatalog24(override val snappySession: SnappySession, + override val snappyExternalCatalog: SnappyExternalCatalog, + override val globalTempManager: GlobalTempViewManager, + override val functionResourceLoader: FunctionResourceLoader, + override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, + override val sqlConf: SQLConf, hadoopConf: Configuration, + override val wrappedCatalog: Option[SnappySessionCatalog]) + extends SessionCatalog(() => snappyExternalCatalog, () => globalTempManager, functionRegistry, + sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog23_4 { + + override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = { + super.createTable(table, ignoreIfExists, validateTableLocation) + } + + override def createTable(table: CatalogTable, ignoreIfExists: Boolean, + validateTableLocation: Boolean): Unit = { + createTableImpl(table, ignoreIfExists, validateTableLocation) + } +} + +class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[SessionState] = None) + extends SnappySessionStateBuilder23_4(session, parentState) { + + override protected lazy val resourceLoader: SessionResourceLoader = externalCatalog match { + case c: SnappyHiveExternalCatalog => new HiveSessionResourceLoader(session, c.client) + case _ => new SessionResourceLoader(session) + } + + override protected def newSessionCatalog( + wrapped: Option[SnappySessionCatalog]): SnappySessionCatalog = { + new SnappySessionCatalog24( + session, + externalCatalog, + session.sharedState.globalTempViewManager, + resourceLoader, + functionRegistry, + sqlParser, + conf, + SessionState.newHadoopConf(session.sparkContext.hadoopConfiguration, conf), + wrapped) + } + + override protected def optimizer: Optimizer = { + new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { + + override def state: SnappySessionState = session.sessionState + + override def defaultBatches: Seq[Batch] = batchesImpl + + override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = + super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules + } + } + + override protected def newBuilder: NewBuilder = (session, optState) => + new SnappySessionStateBuilder24(session.asInstanceOf[SnappySession], optState) +} + +/** + * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. + */ +final class SnappyCacheManager24 extends SnappyCacheManager23_4 { + + override def uncacheQuery(session: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + super.uncacheQuery(session, plan, cascade, blocking) + session.asInstanceOf[SnappySession].clearPlanCache() + } +} diff --git a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala b/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala new file mode 100644 index 0000000000..c62fccae27 --- /dev/null +++ b/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql.catalyst.expressions.{Attribute, ExprId, Expression} +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.types.{DataType, Metadata} + +case class ErrorEstimateAttribute24(name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata, realExprId: ExprId)(override val exprId: ExprId, + override val qualifier: Seq[String]) extends ErrorEstimateAttribute { + + override def withQualifier(newQualifier: Seq[String]): Attribute = { + if (newQualifier == qualifier) { + this + } else { + ErrorEstimateAttribute24(name, dataType, nullable, metadata, realExprId)( + exprId, newQualifier) + } + } +} + +case class ApproxColumnExtractor24(child: Expression, name: String, + override val ordinal: Int, dataType: DataType, override val nullable: Boolean)( + override val exprId: ExprId, override val qualifier: Seq[String]) + extends ApproxColumnExtractor + +case class TaggedAttribute24(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + override val metadata: Metadata)(override val exprId: ExprId, + override val qualifier: Seq[String]) extends TaggedAttribute { + + /** + * Returns a copy of this [[TaggedAttribute]] with new qualifier. + */ + override def withQualifier(newQualifier: Seq[String]): TaggedAttribute = { + if (newQualifier == qualifier) { + this + } else { + TaggedAttribute24(tag, name, dataType, nullable, metadata)(exprId, newQualifier) + } + } +} + +case class TaggedAlias24(tag: TransformableTag, child: Expression, name: String)( + override val exprId: ExprId, override val qualifier: Seq[String]) extends TaggedAlias + +case class ClosedFormColumnExtractor24(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, override val nullable: Boolean)(override val exprId: ExprId, + override val qualifier: Seq[String]) extends ClosedFormColumnExtractor diff --git a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala index 8abbc2bcb6..3c0b6781ad 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala @@ -16,19 +16,16 @@ */ package io.snappydata.sql.catalog -import java.sql.SQLException import java.util.Collections -import javax.annotation.concurrent.GuardedBy import scala.collection.JavaConverters._ import com.google.common.cache.{Cache, CacheBuilder} -import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState import io.snappydata.Property +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.thrift._ import org.apache.spark.sql.catalyst.catalog._ -import org.apache.spark.sql.catalyst.plans.logical.ColumnStat import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.collection.Utils.EMPTY_STRING_ARRAY @@ -37,53 +34,6 @@ import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{SparkSession, SparkSupport, TableNotFoundException} import org.apache.spark.{Logging, Partition, SparkEnv} -/** - * Base class for catalog implementations for connector modes. This is either used as basis - * for ExternalCatalog implementation (in smart connector) or as a helper class for catalog - * queries like in connector v2 implementation. - */ -trait ConnectorExternalCatalog { - - def session: SparkSession - - def jdbcUrl: String - - @GuardedBy("this") - protected var connectorHelper: SmartConnectorHelper = new SmartConnectorHelper(session, jdbcUrl) - - protected def withExceptionHandling[T](function: => T): T = synchronized { - try { - function - } catch { - case e: SQLException if isConnectionException(e) => - // attempt to create a new connection - connectorHelper.close() - connectorHelper = new SmartConnectorHelper(session, jdbcUrl) - function - } - } - - protected def isConnectionException(e: SQLException): Boolean = { - e.getSQLState.startsWith(SQLState.CONNECTIVITY_PREFIX) || - e.getSQLState.startsWith(SQLState.LANG_DEAD_STATEMENT) || - e.getSQLState.startsWith(SQLState.GFXD_NODE_SHUTDOWN_PREFIX) - } - - def invalidateAll(): Unit = { - // invalidate all the RelationInfo objects inside as well as the cache itself - val iter = ConnectorExternalCatalog.cachedCatalogTables.asMap().values().iterator() - while (iter.hasNext) { - iter.next()._2 match { - case Some(info) => info.invalid = true - case None => - } - } - ConnectorExternalCatalog.cachedCatalogTables.invalidateAll() - } - - def close(): Unit = synchronized(connectorHelper.close()) -} - object ConnectorExternalCatalog extends Logging with SparkSupport { def cacheSize: Int = { @@ -110,7 +60,7 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { } private[snappydata] def convertToCatalogStatistics(schema: StructType, fullTableName: String, - catalogStats: CatalogStats): (BigInt, Option[BigInt], Map[String, ColumnStat]) = { + catalogStats: CatalogStats): AnyRef = { val colStats = schema.indices.flatMap { i => val f = schema(i) val colStatsMap = catalogStats.colStats.get(i) @@ -120,8 +70,8 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { case Some(s) => Some(f.name -> s) } }.toMap - (BigInt(catalogStats.sizeInBytes), - if (catalogStats.isSetRowCount) Some(BigInt(catalogStats.getRowCount)) else None, colStats) + internals.toCatalogStatistics(BigInt(catalogStats.sizeInBytes), + if (catalogStats.isSetRowCount) Some(BigInt(catalogStats.getRowCount)) else None, colStats) } private[snappydata] def convertToCatalogTable(request: CatalogMetadataDetails, @@ -294,7 +244,7 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { } private def loadFromCache(name: (String, String), - catalog: ConnectorExternalCatalog): (CatalogTable, Option[RelationInfo]) = { + catalog: SmartConnectorExternalCatalog): (CatalogTable, Option[RelationInfo]) = { cachedCatalogTables.getIfPresent(name) match { case null => synchronized { cachedCatalogTables.getIfPresent(name) match { @@ -302,7 +252,7 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { logDebug(s"Looking up data source for $name") val request = new CatalogMetadataRequest() request.setSchemaName(name._1).setNameOrPattern(name._2) - val result = catalog.withExceptionHandling(catalog.connectorHelper.getCatalogMetadata( + val result = catalog.withExceptionHandling(catalog.helper.getCatalogMetadata( snappydataConstants.CATALOG_GET_TABLE, request)) if (!result.isSetCatalogTable) throw new TableNotFoundException(name._1, name._2) val (table, relationInfo) = convertToCatalogTable(result, catalog.session) @@ -317,12 +267,13 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { } } - def getCatalogTable(name: (String, String), catalog: ConnectorExternalCatalog): CatalogTable = { + def getCatalogTable(name: (String, String), + catalog: SmartConnectorExternalCatalog): CatalogTable = { loadFromCache(name, catalog)._1 } def getRelationInfo(name: (String, String), - catalog: ConnectorExternalCatalog): Option[RelationInfo] = { + catalog: SmartConnectorExternalCatalog): Option[RelationInfo] = { loadFromCache(name, catalog)._2 } diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala index 91144e7b2d..7377570d3e 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SnappyExternalCatalog.scala @@ -48,7 +48,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { // Overrides for better exceptions that say "schema" instead of "database" override def requireDbExists(schema: String): Unit = { - if (!databaseExists(schema)) throw SnappyExternalCatalog.schemaNotFoundException(schema) + if (!databaseExists(schema)) throw schemaNotFoundException(schema) } override def requireTableExists(schema: String, table: String): Unit = { @@ -70,6 +70,8 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } } + // End overrides for exception messages + protected def getTableImpl(schema: String, table: String): CatalogTable = { if (schema == SYS_SCHEMA) { // check for a system table/VTI in store @@ -105,7 +107,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { } def getTableIfExists(schema: String, table: String): Option[CatalogTable] = - SnappyExternalCatalog.getTableIfExists(this, schema, table) + SnappyExternalCatalog.getTableIfExists(catalog = this, schema, table) protected def getCachedCatalogTable(schema: String, table: String): CatalogTable @@ -209,7 +211,7 @@ trait SnappyExternalCatalog extends ExternalCatalog with SparkSupport { * the inbuilt SYS schema is skipped. */ def getAllTables(skipSchemas: Seq[String] = SYS_SCHEMA :: Nil): Seq[CatalogTable] = - SnappyExternalCatalog.getAllTables(this, skipSchemas) + SnappyExternalCatalog.getAllTables(catalog = this, skipSchemas) /** * Check for baseTable in both properties and storage.properties (older releases used a mix). diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala index dac909f101..83f9890942 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala @@ -16,13 +16,16 @@ */ package io.snappydata.sql.catalog.impl +import java.sql.SQLException import java.util.Collections +import javax.annotation.concurrent.GuardedBy import scala.collection.JavaConverters._ import scala.collection.mutable.ArrayBuffer import com.gemstone.gemfire.internal.cache.LocalRegion -import io.snappydata.sql.catalog.{ConnectorExternalCatalog, RelationInfo, SnappyExternalCatalog} +import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState +import io.snappydata.sql.catalog.{ConnectorExternalCatalog, RelationInfo, SmartConnectorHelper, SnappyExternalCatalog} import io.snappydata.thrift.{CatalogMetadataDetails, CatalogMetadataRequest, CatalogSchemaObject, snappydataConstants} import org.apache.spark.sql.catalyst.analysis.{NoSuchPartitionException, NoSuchPermanentFunctionException} @@ -32,7 +35,7 @@ import org.apache.spark.sql.catalyst.expressions.{And, AttributeReference, Bound import org.apache.spark.sql.collection.{SmartExecutorBucketPartition, Utils} import org.apache.spark.sql.execution.RefreshMetadata import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{SnappyContext, TableNotFoundException, ThinClientConnectorMode} +import org.apache.spark.sql.{SnappyContext, SparkSession, TableNotFoundException, ThinClientConnectorMode} /** * An ExternalCatalog implementation for the smart connector mode. @@ -45,11 +48,37 @@ import org.apache.spark.sql.{SnappyContext, TableNotFoundException, ThinClientCo * be added later that switches the user authentication using thread-locals or similar, but as * of now it is used only by some hive insert paths which are not used in SnappySessionState. */ -trait SmartConnectorExternalCatalog extends SnappyExternalCatalog with ConnectorExternalCatalog { +abstract class SmartConnectorExternalCatalog extends SnappyExternalCatalog { - override def jdbcUrl: String = SnappyContext.getClusterMode(session.sparkContext) + val session: SparkSession + + def jdbcUrl: String = SnappyContext.getClusterMode(session.sparkContext) .asInstanceOf[ThinClientConnectorMode].url + @GuardedBy("this") + private[this] var connectorHelper: SmartConnectorHelper = + new SmartConnectorHelper(session, jdbcUrl) + + protected[catalog] def helper: SmartConnectorHelper = connectorHelper + + protected[catalog] def withExceptionHandling[T](function: => T): T = synchronized { + try { + function + } catch { + case e: SQLException if isConnectionException(e) => + // attempt to create a new connection + connectorHelper.close() + connectorHelper = new SmartConnectorHelper(session, jdbcUrl) + function + } + } + + protected def isConnectionException(e: SQLException): Boolean = { + e.getSQLState.startsWith(SQLState.CONNECTIVITY_PREFIX) || + e.getSQLState.startsWith(SQLState.LANG_DEAD_STATEMENT) || + e.getSQLState.startsWith(SQLState.GFXD_NODE_SHUTDOWN_PREFIX) + } + override def invalidate(name: (String, String)): Unit = { // invalidation of a single table can result in all cached RelationInfo being // out of date due to lower schema version, so always invalidate all @@ -64,6 +93,20 @@ trait SmartConnectorExternalCatalog extends SnappyExternalCatalog with Connector RefreshMetadata.executeLocal(RefreshMetadata.UPDATE_CATALOG_SCHEMA_VERSION, args = null) } + def invalidateAll(): Unit = { + // invalidate all the RelationInfo objects inside as well as the cache itself + val iter = ConnectorExternalCatalog.cachedCatalogTables.asMap().values().iterator() + while (iter.hasNext) { + iter.next()._2 match { + case Some(info) => info.invalid = true + case None => + } + } + ConnectorExternalCatalog.cachedCatalogTables.invalidateAll() + } + + def close(): Unit = synchronized(connectorHelper.close()) + // Using a common procedure to update catalog meta-data for create/drop/alter methods // and likewise a common procedure to get catalog meta-data for get/exists/list methods diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala index 68da8ce32c..8f82b5b593 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala @@ -48,7 +48,7 @@ abstract class SnappyBaseParser(session: SparkSession) extends Parser { /** * Tracks the hints that need to be applied at current plan level and will be - * wrapped by LogicalPlanWithHints + * wrapped by LogicalPlan */ private[sql] final def planHints: java.util.Stack[(QueryHint.Type, HintName.Type)] = { val hints = _planHints @@ -409,7 +409,7 @@ object SnappyParserConsts { /** * Define the hints that need to be applied at plan-level and will be - * wrapped by LogicalPlanWithHints + * wrapped by LogicalPlan */ final val allowedPlanHints: Array[QueryHint.Type] = Array(QueryHint.JoinType) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 7c75bd2047..98421ad44f 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -28,6 +28,8 @@ import org.apache.spark.sql.catalyst.catalog.CatalogTable import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} +import org.apache.spark.sql.execution.closedform.{ClosedFormStats, ErrorAggregate} +import org.apache.spark.sql.execution.common.HAC import org.apache.spark.sql.execution.exchange.{EnsureRequirements, ReuseExchange} import org.apache.spark.sql.execution.{CollapseCodegenStages, PlanLater, QueryExecution, SparkPlan, TopK} import org.apache.spark.sql.hive.{OptimizeSortAndFilePlans, SnappyAnalyzer} @@ -162,4 +164,8 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def executePlan(analyzer: SnappyAnalyzer, plan: LogicalPlan): LogicalPlan = analyzer.baseExecute(plan) + + def finalizeEvaluation(errorStats: ClosedFormStats, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, + behavior: HAC.Type): Double = throw missingAQPException() } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index ff22dd2319..b63c27e3b0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -108,11 +108,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo override lazy val sessionState: SnappySessionState = internals.newSnappySessionState(self) @transient - final val contextFunctions: SnappyContextFunctions = SparkSupport.aqpOverridesClass match { - case None => new SnappyContextFunctions(self) - case Some(c) => c.getConstructor(classOf[SnappySession]).newInstance(self) - .asInstanceOf[SnappyContextFunctions] - } + final val contextFunctions: SnappyContextFunctions = SparkSupport.newContextFunctions(self) final def sessionCatalog: SnappySessionCatalog = sessionState.catalog diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 79c7ddb5e1..6c65e7035e 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -16,7 +16,7 @@ */ package org.apache.spark.sql -import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog +import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.hadoop.conf.Configuration @@ -33,15 +33,17 @@ import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, TableIdentifier} +import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} +import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} import org.apache.spark.sql.execution.command.RunnableCommand -import org.apache.spark.sql.execution.common.ErrorEstimateAttribute +import org.apache.spark.sql.execution.common.HAC import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.{SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} -import org.apache.spark.sql.internal.{LogicalPlanWithHints, SQLConf, SnappySharedState} +import org.apache.spark.sql.internal.{SQLConf, SnappySharedState} import org.apache.spark.sql.sources.{BaseRelation, Filter} import org.apache.spark.sql.streaming.LogicalDStreamPlan import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} @@ -262,15 +264,48 @@ trait SparkInternals extends Logging { * Create a new instance of [[AttributeReference]] */ def newAttributeReference(name: String, dataType: DataType, nullable: Boolean, - metadata: Metadata, exprId: ExprId, qualifier: Option[String], + metadata: Metadata, exprId: ExprId, qualifier: Seq[String], isGenerated: Boolean = false): AttributeReference /** * Create a new concrete instance of [[ErrorEstimateAttribute]]. */ def newErrorEstimateAttribute(name: String, dataType: DataType, - nullable: Boolean, metadata: Metadata, exprId: ExprId, realExprId: ExprId, - qualifier: Seq[String]): ErrorEstimateAttribute + nullable: Boolean, metadata: Metadata, realExprId: ExprId, + exprId: ExprId = NamedExpression.newExprId, + qualifier: Seq[String] = Nil): ErrorEstimateAttribute + + /** + * Create a new concrete instance of [[ApproxColumnExtractor]]. + */ + def newApproxColumnExtractor(child: Expression, name: String, ordinal: Int, + dataType: DataType, nullable: Boolean, exprId: ExprId = NamedExpression.newExprId, + qualifier: Seq[String] = Nil): ApproxColumnExtractor + + /** + * Create a new concrete instance of [[TaggedAttribute]]. + */ + def newTaggedAttribute(tag: Tag, name: String, dataType: DataType, nullable: Boolean, + metadata: Metadata, exprId: ExprId = NamedExpression.newExprId, + qualifier: Seq[String] = Nil): TaggedAttribute + + /** + * Create a new concrete instance of [[TaggedAlias]]. + */ + def newTaggedAlias(tag: TransformableTag, child: Expression, name: String, + exprId: ExprId = NamedExpression.newExprId, qualifier: Seq[String] = Nil): TaggedAlias + + // scalastyle:off + + /** + * Create a new concrete instance of [[ClosedFormColumnExtractor]]. + */ + def newClosedFormColumnExtractor(child: Expression, name: String, confidence: Double, + confFactor: Double, aggType: ErrorAggregate.Type, error: Double, dataType: DataType, + behavior: HAC.Type, nullable: Boolean, exprId: ExprId = NamedExpression.newExprId, + qualifier: Seq[String] = Nil): ClosedFormColumnExtractor + + // scalastyle:on /** * Create a copy of [[InsertIntoTable]] plan with a new child. @@ -324,7 +359,7 @@ trait SparkInternals extends Logging { * Create an alias with given parameters and optionally copying other fields from existing Alias. */ def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], - exprId: ExprId = NamedExpression.newExprId, qualifier: Option[String] = None): Alias + exprId: ExprId = NamedExpression.newExprId, qualifier: Seq[String] = Nil): Alias /** * Create a plan for column aliases in a table/sub-query/... @@ -369,7 +404,7 @@ trait SparkInternals extends Logging { * Create a new wrapper [[LogicalPlan]] that encapsulates an arbitrary set of hints. */ def newLogicalPlanWithHints(child: LogicalPlan, - hints: Map[QueryHint.Type, HintName.Type]): LogicalPlanWithHints + hints: Map[QueryHint.Type, HintName.Type]): LogicalPlan /** * Create a new TABLESAMPLE operator. @@ -460,8 +495,7 @@ trait SparkInternals extends Logging { storage: CatalogStorageFormat, schema: StructType, provider: Option[String], partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])], - viewOriginalText: Option[String], viewText: Option[String], + stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], comment: Option[String], unsupportedFeatures: Seq[String], tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, ignoredProperties: Map[String, String]): CatalogTable @@ -504,9 +538,12 @@ trait SparkInternals extends Logging { def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, table: String, newSchema: StructType): Unit - /** Alter table statistics in the ExternalCatalog if possible else throw an exception */ + /** + * Alter table statistics in the ExternalCatalog if possible else throw an exception. + * The `stats` argument is an optional Statistics (for Spark < 2.2) or CatalogStatistics object. + */ def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, - stats: Option[(BigInt, Option[BigInt], Map[String, ColumnStat])]): Unit + stats: Option[AnyRef]): Unit /** Alter function definition in the ExternalCatalog if possible else throw an exception */ def alterFunction(externalCatalog: ExternalCatalog, schema: String, @@ -515,9 +552,16 @@ trait SparkInternals extends Logging { /** Convert a ColumnStat (or CatalogColumnStat for Spark >= 2.4) to a map. */ def columnStatToMap(stat: Any, colName: String, dataType: DataType): Map[String, String] - /** Convert a map created by [[columnStatToMap]] to ColumnStat. */ + /** Convert a map created by [[columnStatToMap]] to ColumnStat or CatalogColumnStat. */ def columnStatFromMap(table: String, field: StructField, - map: Map[String, String]): Option[ColumnStat] + map: Map[String, String]): Option[AnyRef] + + /** + * Create a Statistics/CatalogStatistics object from given arguments. The `colStats` argument + * is a map of string to ColumnStat(Spark < 2.4)/CatalogColumnStat + */ + def toCatalogStatistics(sizeInBytes: BigInt, rowCount: Option[BigInt], + colStats: Map[String, AnyRef]): AnyRef /** * Create a new instance of SnappyHiveExternalCatalog. The method overrides in @@ -530,7 +574,7 @@ trait SparkInternals extends Logging { * Create a new instance of SmartConnectorExternalCatalog. The method overrides in * ExternalCatalog have changed across Spark versions. */ - def newSmartConnectorExternalCatalog(session: SparkSession): SmartConnectorExternalCatalog + def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog /** Lookup the data source for a given provider. */ def lookupDataSource(provider: String, conf: => SQLConf): Class[_] diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index 6d69b995fd..9478a45420 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -57,7 +57,7 @@ object SparkSupport extends Logging { GemFireVersion.isEnterpriseEdition } - lazy val aqpOverridesClass: Option[Class[_]] = { + private lazy val aqpOverridesClass: Option[Class[_]] = { if (isEnterpriseEdition) { try { Some(Utils.classForName("org.apache.spark.sql.execution.SnappyContextAQPFunctions")) @@ -70,6 +70,20 @@ object SparkSupport extends Logging { } else None } + private[sql] def newContextFunctions(session: SnappySession): SnappyContextFunctions = { + aqpOverridesClass match { + case None => new SnappyContextFunctions(session) + case Some(c) => c.getConstructor(classOf[SnappySession]).newInstance(session) + .asInstanceOf[SnappyContextFunctions] + } + } + + /** + * An instance of [[SnappyContextFunctions]] with null session meaning any of the methods + * that require a session instance will fail with an NPE. + */ + lazy val contextFunctionsStateless: SnappyContextFunctions = newContextFunctions(session = null) + /** * List all the supported Spark versions below. All implementations are required to * have a public constructor having current SparkContext as the one argument. diff --git a/core/src/main/scala/org/apache/spark/sql/execution/bootstrap/ApproxColumnExtractor.scala b/core/src/main/scala/org/apache/spark/sql/execution/bootstrap/ApproxColumnExtractor.scala new file mode 100644 index 0000000000..21132e2f0a --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/bootstrap/ApproxColumnExtractor.scala @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.bootstrap + +import org.apache.spark.sql.SparkSupport +import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, NamedExpression, UnaryExpression} +import org.apache.spark.sql.types.Metadata + +trait ApproxColumnExtractor extends UnaryExpression with NamedExpression with SparkSupport { + + val ordinal: Int + + override lazy val resolved: Boolean = true + + override def eval(input: InternalRow): Any = + throw new UnsupportedOperationException("not implemented") + + override protected def doGenCode(ctx: CodegenContext, + ev: ExprCode): ExprCode = { + + val childEval = child.genCode(ctx) + val evIsNull = internals.exprCodeIsNull(ev) + val evVal = internals.exprCodeValue(ev) + val childVal = internals.exprCodeValue(childEval) + val code = + s""" + ${childEval.code} + double $evVal = 0d; + boolean $evIsNull = ((InternalRow) $childVal).isNullAt($ordinal); + if (!$evIsNull) { + $evVal = ((InternalRow) $childVal).getDouble($ordinal); + } + """ + internals.copyExprCode(ev, code = code) + } + + override def metadata: Metadata = Metadata.empty + + override def toAttribute: Attribute = { + if (resolved) { + internals.newAttributeReference(name, dataType, nullable, metadata, exprId, qualifier.toSeq) + } else { + UnresolvedAttribute(name) + } + } + + override def toString: String = s"$child AS $name#${exprId.id}$typeSuffix" + + override protected final def otherCopyArgs: Seq[AnyRef] = { + exprId :: qualifier :: Nil + } + + override def equals(other: Any): Boolean = other match { + case a: Alias => + name == a.name && exprId == a.exprId && child == a.child + + case _ => false + } + + /** Returns a copy of this expression with a new `exprId`. */ + override def newInstance(): NamedExpression = + internals.newApproxColumnExtractor(child, name, ordinal, dataType, nullable, + qualifier = qualifier.toSeq) +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/bootstrap/lazyExpressions.scala b/core/src/main/scala/org/apache/spark/sql/execution/bootstrap/lazyExpressions.scala new file mode 100644 index 0000000000..ecd69a37c6 --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/bootstrap/lazyExpressions.scala @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.bootstrap + +import org.apache.spark.sql.SparkSupport +import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute +import org.apache.spark.sql.catalyst.errors.TreeNodeException +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, NamedExpression, Unevaluable} +import org.apache.spark.sql.types.{DataType, Metadata} + +trait Tag { + + def symbol: String + + def simpleString: String = "" +} + +trait TransformableTag extends Tag { + def toTag: Tag +} + +object Seed extends TransformableTag { + + val symbol = ":" + + def toTag: TransformableTag = this +} + +object Bootstrap extends TransformableTag { + + val symbol = ":" + + def toTag: TransformableTag = this + + override lazy val simpleString = "No Op" // s"^${branches.mkString("[", ", ", "]")}" +} + +trait TaggedAttribute extends Attribute with Unevaluable with SparkSupport { + + val tag: Tag + + override def equals(other: Any): Boolean = other match { + case ar: TaggedAttribute => tag == ar.tag && name == ar.name && + exprId == ar.exprId && dataType == ar.dataType + case _ => false + } + + + override def hashCode(): Int = { + // See http://stackoverflow.com/questions/113511/hash-code-implementation + var h = 17 + h = h * 37 + exprId.hashCode() + h = h * 37 + dataType.hashCode() + h = h * 37 + metadata.hashCode() + h = h * 37 + tag.hashCode() + h + } + + override def newInstance(): TaggedAttribute = internals.newTaggedAttribute(tag, name, + dataType, nullable, metadata, qualifier = qualifier.toSeq) + + /** + * Returns a copy of this [[TaggedAttribute]] with changed nullability. + */ + override def withNullability(newNullability: Boolean): TaggedAttribute = { + if (nullable == newNullability) { + this + } else { + internals.newTaggedAttribute(tag, name, dataType, newNullability, metadata, + exprId, qualifier.toSeq) + } + } + + override def withName(newName: String): TaggedAttribute = { + if (name == newName) { + this + } else { + internals.newTaggedAttribute(tag, newName, dataType, nullable, metadata, + exprId, qualifier.toSeq) + } + } + + def withExprId(newExprId: ExprId): TaggedAttribute = { + if (exprId == newExprId) { + this + } else { + internals.newTaggedAttribute(tag, name, dataType, nullable, metadata, + newExprId, qualifier.toSeq) + } + } + + def toAttributeReference: AttributeReference = internals.newAttributeReference(name, + dataType, nullable, metadata, exprId, qualifier.toSeq) + + override def withMetadata(newMetadata: Metadata): Attribute = { + internals.newTaggedAttribute(tag, name, dataType, nullable, metadata, + exprId, qualifier.toSeq) + } + + override protected final def otherCopyArgs: Seq[AnyRef] = exprId :: qualifier :: Nil +} + +trait TaggedAlias extends NamedExpression with SparkSupport { + + val child: Expression + + val tag: TransformableTag + + // override type EvaluatedType = Any + /** Just a simple passthrough for code generation. */ + override def genCode(ctx: CodegenContext): ExprCode = child.genCode(ctx) + + override protected def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = + internals.copyExprCode(ev, code = "") + + override def eval(input: InternalRow): Any = throw new TreeNodeException( + this, s"No function to evaluate expression. type: ${this.nodeName}") + + override def dataType: DataType = child.dataType + + override def nullable: Boolean = child.nullable + + override def metadata: Metadata = { + child match { + case named: NamedExpression => named.metadata + case _ => Metadata.empty + } + } + + def children: Seq[Expression] = child :: Nil + + override def toAttribute: Attribute = { + if (resolved) { + internals.newTaggedAttribute(tag.toTag, name, child.dataType, child.nullable, + metadata, exprId, qualifier.toSeq) + } else { + UnresolvedAttribute(name) + } + } + + override def toString: String = + s"$child${tag.simpleString} AS ${tag.symbol}$name#${exprId.id}$typeSuffix" + + override protected final def otherCopyArgs: Seq[AnyRef] = exprId :: qualifier :: Nil + + def toAlias: Alias = internals.newAlias(child, name, copyAlias = None, exprId, qualifier.toSeq) + + /** Returns a copy of this expression with a new `exprId`. */ + override def newInstance(): NamedExpression = internals.newTaggedAlias(tag, child, + name, qualifier = qualifier.toSeq) +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormColumnExtractor.scala b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormColumnExtractor.scala new file mode 100644 index 0000000000..00dde1e8ac --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormColumnExtractor.scala @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.closedform + +import org.apache.spark.sql.SparkSupport +import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute +import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, NamedExpression, UnaryExpression} +import org.apache.spark.sql.execution.common.HAC +import org.apache.spark.sql.types.Metadata + +trait ClosedFormColumnExtractor extends UnaryExpression with NamedExpression with SparkSupport { + + val confidence: Double + + val confFactor: Double + + val aggType: ErrorAggregate.Type + + val error: Double + + val behavior: HAC.Type + + // Alias(Generator, xx) need to be transformed into Generate(generator, ...) + override lazy val resolved = true + + override def eval(input: InternalRow): Any = { + val errorStats = child.eval(input).asInstanceOf[ClosedFormStats] + val retVal: Double = SparkSupport.contextFunctionsStateless.finalizeEvaluation( + errorStats, confidence, confFactor, aggType, error, behavior) + if (retVal.isNaN) null else retVal + } + + protected def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { + val childEval = child.genCode(ctx) + val statClass = classOf[ClosedFormStats].getName + val statVar = ctx.freshName("errorStats") + val returnValue = ctx.freshName("returnValue") + val statCounterUDTF = "org.apache.spark.sql.execution.closedform.StatCounterUDTCF" + val behaviorString = HAC.getBehaviorAsString(behavior) + val hacClass = HAC.getClass.getName + val aggTypeStr = aggType.toString + val aggTypeClass = ErrorAggregate.getClass.getName + + val code = childEval.code.toString + + s""" + $statClass $statVar = ($statClass)${internals.exprCodeValue(childEval)}; + double $returnValue = $statCounterUDTF.MODULE$$.finalizeEvaluation($statVar, + $confidence, $confFactor,$aggTypeClass.MODULE$$.withName("$aggTypeStr"), $error, + $hacClass.MODULE$$.getBehavior("$behaviorString")); + boolean ${internals.exprCodeIsNull(ev)} = Double.isNaN($returnValue); + double ${internals.exprCodeValue(ev)} = $returnValue; + """ + internals.copyExprCode(ev, code = code) + } + + override def metadata: Metadata = Metadata.empty + + override def toAttribute: Attribute = + if (resolved) { + internals.newAttributeReference(name, dataType, nullable, metadata, exprId, qualifier.toSeq) + } else { + UnresolvedAttribute(name) + } + + override def toString: String = s"$child AS $name#${exprId.id}$typeSuffix" + + override protected final def otherCopyArgs: Seq[AnyRef] = exprId :: qualifier :: Nil + + override def equals(other: Any): Boolean = other match { + case a: Alias => + name == a.name && exprId == a.exprId && child == a.child + + case _ => false + } + + /** Returns a copy of this expression with a new `exprId`. */ + override def newInstance(): NamedExpression = internals.newClosedFormColumnExtractor( + child, name, confidence, confFactor, aggType, error, dataType, behavior, + nullable, qualifier = qualifier.toSeq) +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormStats.scala b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormStats.scala new file mode 100644 index 0000000000..82adc81d84 --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ClosedFormStats.scala @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.closedform + +import org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow +import org.apache.spark.sql.sources.StatVarianceCounter + +trait ClosedFormStats extends StatVarianceCounter { + + self: BaseGenericInternalRow => + + // New variance as per closed form formula + var weightedCount: Double + var trueSum: Double + + override def numFields: Int = 5 + + def mergeTrueSum(other: ClosedFormStats): Unit = { + (trueSum.isNaN, other.trueSum.isNaN) match { + case (false, false) => trueSum += other.trueSum + case (true, false) => trueSum = other.trueSum + case (false, true) => if (other.count > 0) trueSum = other.trueSum + case _ => + } + } + + protected override def genericGet(ordinal: Int): Any = { + triggerSerialization() + ordinal match { + case 0 => count + case 1 => mean + case 2 => nvariance + case 3 => weightedCount + case 4 => trueSum + } + } + + override def getLong(ordinal: Int): Long = { + triggerSerialization() + if (ordinal == 0) { + count + } else { + throw new ClassCastException("cannot cast double to long") + } + } + + override def getDouble(ordinal: Int): Double = { + triggerSerialization() + ordinal match { + case 1 => mean + case 2 => nvariance + case 3 => weightedCount + case 0 => count + case 4 => trueSum + } + } + + def triggerSerialization(): Unit + + def copy(other: ClosedFormStats): Unit = { + other.count = count + other.mean = mean + other.nvariance = nvariance + other.weightedCount = weightedCount + other.trueSum = trueSum + } + + + def merge(other: ClosedFormStats) { + if (other ne this) { + this.mergeDistinctCounter(other) + weightedCount += other.weightedCount + mergeTrueSum(other) + } else { + merge(other.copy()) // Avoid overwriting fields in a weird order + } + } + + /////////////// + + protected def mergeDistinctCounter(other: ClosedFormStats) { + if (count == 0) { + mean = other.mean + count = other.count + } else if (other.count != 0) { + val delta = other.mean - mean + if (other.count * 10 < count) { + mean = mean + (delta * other.count) / (count + other.count) + } else if (count * 10 < other.count) { + mean = other.mean - (delta * count) / (count + other.count) + } else { + mean = (mean * count + other.mean * other.count) / + (count + other.count) + } + count += other.count + } + nvariance += other.nvariance + } +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorAggregate.scala b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorAggregate.scala new file mode 100644 index 0000000000..a08325b6cc --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorAggregate.scala @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.closedform + +object ErrorAggregate extends Enumeration { + + type Type = Value + + val separator = '_' + + val Avg: Type = Value("Avg") + val Sum: Type = Value("Sum") + val Count: Type = Value("Count") + + val Sum_Lower: Type = Value(Sum.toString + separator + "Lower") + val Avg_Lower: Type = Value(Avg.toString + separator + "Lower") + val Count_Lower: Type = Value(Count.toString + separator + "Lower") + + val Sum_Upper: Type = Value(Sum.toString + separator + "Upper") + val Avg_Upper: Type = Value(Avg.toString + separator + "Upper") + val Count_Upper: Type = Value(Count.toString + separator + "Upper") + + // relative error + val Sum_Relative: Type = Value(Sum.toString + separator + "Relative") + val Avg_Relative: Type = Value(Avg.toString + separator + "Relative") + val Count_Relative: Type = Value(Count.toString + separator + "Relative") + + // absolute error + val Sum_Absolute: Type = Value(Sum.toString + separator + "Absolute") + val Avg_Absolute: Type = Value(Avg.toString + separator + "Absolute") + val Count_Absolute: Type = Value(Count.toString + separator + "Absolute") + + def getBaseAggregateType(param: ErrorAggregate.Type): ErrorAggregate.Type = { + val name = param.toString + val sepIndex = name.indexOf(separator) + if (sepIndex == -1) { + param + } else { + val baseName = name.substring(0, sepIndex) + ErrorAggregate.withName(baseName) + } + } + + def getRelativeErrorTypeForBaseType(baseAggregateType: Type): Type = { + val relErrorName = baseAggregateType.toString + separator + "Relative" + ErrorAggregate.withName(relErrorName) + } + + def isBaseAggType(aggType: Type): Boolean = { + val name = aggType.toString + val sepIndex = name.indexOf(separator) + sepIndex == -1 + } + + private def getSuffix(name: String): Option[String] = { + val sepIndex = name.indexOf(separator) + if (sepIndex == -1) { + None + } else { + Some(name.substring(sepIndex + 1)) + } + } + + private def getPrefix(name: String): Option[String] = { + val sepIndex = name.indexOf(separator) + if (sepIndex == -1) { + None + } else { + Some(name.substring(0, sepIndex)) + } + } + + def checkFor(suffix: String, aggType: Type): Boolean = { + getSuffix(aggType.toString) match { + case Some(x) => x == suffix + case None => false + } + } + + def checkFor(prefix: String, errorEstimateFuncName: String): Boolean = { + getPrefix(errorEstimateFuncName) match { + case Some(x) => x == prefix + case None => false + } + } + + def isLowerAggType(aggType: Type): Boolean = checkFor("Lower", aggType) + + def isUpperAggType(aggType: Type): Boolean = checkFor("Upper", aggType) + + def isRelativeErrorAggType(aggType: Type): Boolean = + checkFor("Relative", aggType) + + def isAbsoluteErrorAggType(aggType: Type): Boolean = + checkFor("Absolute", aggType) + + def isLowerAggType(errorEstimateFuncName: String): Boolean = + checkFor("Lower", errorEstimateFuncName) + + def isUpperAggType(errorEstimateFuncName: String): Boolean = + checkFor("Upper", errorEstimateFuncName) + + def isRelativeErrorAggType(errorEstimateFuncName: String): Boolean = + checkFor("Relative", errorEstimateFuncName) + + def isAbsoluteErrorAggType(errorEstimateFuncName: String): Boolean = + checkFor("Absolute", errorEstimateFuncName) +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorEstimateAttribute.scala similarity index 60% rename from core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala rename to core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorEstimateAttribute.scala index 98a12e6f86..73256f4d75 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/common/attributes.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/closedform/ErrorEstimateAttribute.scala @@ -14,22 +14,16 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ -package org.apache.spark.sql.execution.common +package org.apache.spark.sql.execution.closedform import org.apache.spark.sql.SparkSupport -import org.apache.spark.sql.catalyst.InternalRow -import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute -import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, AttributeSet, ExprId, Expression, NamedExpression, UnaryExpression, Unevaluable} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, AttributeSet, ExprId, Expression, Unevaluable} import org.apache.spark.sql.catalyst.plans.logical.EventTimeWatermark import org.apache.spark.sql.catalyst.util.quoteIdentifier import org.apache.spark.sql.types.Metadata - trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSupport { - def singleQualifier: Option[String] - def realExprId: ExprId /** @@ -68,8 +62,10 @@ trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSuppor h } - override def newInstance(): AttributeReference = - internals.toAttributeReference(this)(exprId = NamedExpression.newExprId) + override def newInstance(): ErrorEstimateAttribute = { + internals.newErrorEstimateAttribute(name, dataType, nullable, metadata, realExprId, + qualifier = qualifier.toSeq) + } /** * Returns a copy of this [[ErrorEstimateAttribute]] with changed nullability. @@ -78,8 +74,8 @@ trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSuppor if (nullable == newNullability) { this } else { - internals.newErrorEstimateAttribute(name, dataType, newNullability, metadata, exprId, - realExprId, qualifier.toSeq) + internals.newErrorEstimateAttribute(name, dataType, newNullability, metadata, realExprId, + exprId, qualifier.toSeq) } } @@ -87,8 +83,8 @@ trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSuppor if (name == newName) { this } else { - internals.newErrorEstimateAttribute(newName, dataType, nullable, metadata, exprId, - realExprId, qualifier.toSeq) + internals.newErrorEstimateAttribute(newName, dataType, nullable, metadata, realExprId, + exprId, qualifier.toSeq) } } @@ -96,16 +92,16 @@ trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSuppor if (exprId == newExprId) { this } else { - internals.newErrorEstimateAttribute(name, dataType, nullable, metadata, newExprId, - realExprId, qualifier.toSeq) + internals.newErrorEstimateAttribute(name, dataType, nullable, metadata, realExprId, + newExprId, qualifier.toSeq) } } override def references: AttributeSet = AttributeSet(internals.toAttributeReference(this)()) override def withMetadata(newMetadata: Metadata): Attribute = { - internals.newErrorEstimateAttribute(name, dataType, nullable, newMetadata, exprId, - realExprId, qualifier.toSeq) + internals.newErrorEstimateAttribute(name, dataType, nullable, newMetadata, realExprId, + exprId, qualifier.toSeq) } /** Used to signal the column used to calculate an eventTime watermark (e.g. a#1-T{delayMs}) */ @@ -115,9 +111,7 @@ trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSuppor "" } - override protected final def otherCopyArgs: Seq[AnyRef] = { - qualifier :: Nil - } + override protected final def otherCopyArgs: Seq[AnyRef] = exprId :: qualifier :: Nil override def toString: String = s"$name#${exprId.id}$typeSuffix$delaySuffix" @@ -130,59 +124,3 @@ trait ErrorEstimateAttribute extends Attribute with Unevaluable with SparkSuppor s"$qualifierPrefix${quoteIdentifier(name)}" } } - -trait ApproxColumnExtractor extends UnaryExpression with NamedExpression with SparkSupport { - - val ordinal: Int - - override lazy val resolved: Boolean = true - - override def eval(input: InternalRow): Any = - throw new UnsupportedOperationException("not implemented") - - override protected def doGenCode(ctx: CodegenContext, - ev: ExprCode): ExprCode = { - - val childEval = child.genCode(ctx) - val evIsNull = internals.exprCodeIsNull(ev) - val evVal = internals.exprCodeValue(ev) - val childVal = internals.exprCodeValue(childEval) - val code = - s""" - ${childEval.code} - double $evVal = 0d; - boolean $evIsNull = ((InternalRow) $childVal).isNullAt($ordinal); - if (!$evIsNull) { - $evVal = ((InternalRow) $childVal).getDouble($ordinal); - } - """ - internals.copyExprCode(ev, code = code) - } - - override def metadata: Metadata = Metadata.empty - - override def toAttribute: Attribute = { - if (resolved) { - internals.newAttributeReference(name, dataType, nullable, metadata, exprId, qualifier) - } else { - UnresolvedAttribute(name) - } - } - - override def toString: String = s"$child AS $name#${exprId.id}$typeSuffix" - - override protected final def otherCopyArgs: Seq[AnyRef] = { - exprId :: qualifier :: Nil - } - - override def equals(other: Any): Boolean = other match { - case a: Alias => - name == a.name && exprId == a.exprId && child == a.child - - case _ => false - } - - /** Returns a copy of this expression with a new `exprId`. */ - override def newInstance(): NamedExpression = - internals.toAttributeReference(this)(exprId = NamedExpression.newExprId) -} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/common/HAC.scala b/core/src/main/scala/org/apache/spark/sql/execution/common/HAC.scala new file mode 100644 index 0000000000..8e9ca6cc9b --- /dev/null +++ b/core/src/main/scala/org/apache/spark/sql/execution/common/HAC.scala @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.execution.common + +import io.snappydata.{Constant, Property} + +import org.apache.spark.sql.catalyst.expressions.{Expression, Literal, ParamLiteral} +import org.apache.spark.sql.collection.Utils +import org.apache.spark.sql.internal.SQLConf +import org.apache.spark.sql.types.StringType + +object HAC extends Enumeration { + + type Type = Value + + val DO_NOTHING: Type = Value(0) + val SPECIAL_SYMBOL: Type = Value(1) + val THROW_EXCEPTION: Type = Value(2) + val REROUTE_TO_BASE: Type = Value(3) + val PARTIAL_ROUTING: Type = Value(4) + + override def toString(): String = { + s" 1)DO_NOTHING 2)LOCAL_OMIT 3)STRICT 4)RUN_ON_FULL_TABLE 5)PARTIAL_RUN_ON_BASE_TABLE" + } + + def getBehavior(expr: Expression): HAC.Type = { + expr match { + case lp: ParamLiteral => getBehavior(lp.valueString) + case _ => getBehavior(expr.simpleString) + } + } + + + def getBehavior(name: String): HAC.Type = { + Utils.toUpperCase(name) match { + case Constant.BEHAVIOR_DO_NOTHING => DO_NOTHING + case Constant.BEHAVIOR_LOCAL_OMIT => SPECIAL_SYMBOL + case Constant.BEHAVIOR_STRICT => THROW_EXCEPTION + case Constant.BEHAVIOR_RUN_ON_FULL_TABLE => REROUTE_TO_BASE + case Constant.DEFAULT_BEHAVIOR => getDefaultBehavior() + case Constant.BEHAVIOR_PARTIAL_RUN_ON_BASE_TABLE => PARTIAL_ROUTING + + case x@_ => throw new UnsupportedOperationException( + s"Please specify valid HAC from below:\n$HAC\nGiven: $x") + } + } + + def getBehaviorAsString(value: HAC.Type): String = { + value match { + case DO_NOTHING => Constant.BEHAVIOR_DO_NOTHING + case SPECIAL_SYMBOL => Constant.BEHAVIOR_LOCAL_OMIT + case THROW_EXCEPTION => Constant.BEHAVIOR_STRICT + case REROUTE_TO_BASE => Constant.BEHAVIOR_RUN_ON_FULL_TABLE + case PARTIAL_ROUTING => Constant.BEHAVIOR_PARTIAL_RUN_ON_BASE_TABLE + case _ => "INVALID" + } + } + + def getDefaultBehavior(conf: SQLConf = null): HAC.Type = { + if (System.getProperty(Constant.defaultBehaviorAsDO_NOTHING, "false").toBoolean) { + DO_NOTHING + } + else if (conf != null) { + try { + HAC.getBehavior(Literal.create(Property.Behavior.getOption(conf).getOrElse( + Constant.BEHAVIOR_RUN_ON_FULL_TABLE), + StringType)) + } catch { + case e: UnsupportedOperationException => Property.Behavior.set(conf, + Constant.BEHAVIOR_RUN_ON_FULL_TABLE) + throw e + } + } else REROUTE_TO_BASE + } +} diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index 6fc4a022a1..a14ccfaa28 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -62,11 +62,9 @@ import org.apache.spark.sql.sources.JdbcExtendedUtils.normalizeSchema import org.apache.spark.sql.store.CodeGeneration import org.apache.spark.sql.types.LongType -trait SnappyHiveExternalCatalog extends SnappyHiveCatalogBase with SnappyExternalCatalog { - - val conf: SparkConf - val hadoopConf: Configuration - val createTime: Long +abstract class SnappyHiveExternalCatalog(val conf: SparkConf, + val hadoopConf: Configuration, val createTime: Long) + extends SnappyHiveCatalogBase(conf, hadoopConf) with SnappyExternalCatalog { /** A cache of Spark SQL data source tables that have been accessed. */ protected final val cachedCatalogTables: LoadingCache[(String, String), CatalogTable] = { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala b/core/src/main/scala/org/apache/spark/sql/internal/ContextJarUtils.scala similarity index 96% rename from core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala rename to core/src/main/scala/org/apache/spark/sql/internal/ContextJarUtils.scala index beacd2842a..99ce81c402 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/JarUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ContextJarUtils.scala @@ -49,7 +49,7 @@ object ContextJarUtils extends Logging { val JAR_PATH = "snappy-jars" private val driverJars = new ConcurrentHashMap[String, URLClassLoader]().asScala val functionKeyPrefix = "__FUNC__" - val droppedFunctionsKey = functionKeyPrefix + "DROPPED__" + val droppedFunctionsKey: String = functionKeyPrefix + "DROPPED__" val DELIMITER = "," def addDriverJar(key: String, classLoader: URLClassLoader): Option[URLClassLoader] = { @@ -60,7 +60,7 @@ object ContextJarUtils extends Logging { def removeDriverJar(key: String) : Unit = driverJars.remove(key) - def getDriverJarURLs(): Array[URL] = { + def getDriverJarURLs: Array[URL] = { var urls = new mutable.HashSet[URL]() driverJars.foreach(_._2.getURLs.foreach(urls += _)) urls.toArray @@ -77,7 +77,7 @@ object ContextJarUtils extends Logging { def fetchFile(prefix: String, path: String): URL = { val callbacks = ToolsCallbackInit.toolsCallback val localName = path.split("/").last - val changedFileName = s"${prefix}-${localName}" + val changedFileName = s"$prefix-$localName" logInfo(s"Fetching jar $path to driver local directory $jarDir") val changedFile = new File(jarDir, changedFileName) if (!changedFile.exists()) { @@ -90,7 +90,7 @@ object ContextJarUtils extends Logging { val callbacks = ToolsCallbackInit.toolsCallback if (callbacks != null) { val localName = path.split("/").last - val changedFileName = s"${prefix}-${localName}" + val changedFileName = s"$prefix-$localName" val jarFile = new File(jarDir, changedFileName) try { @@ -181,5 +181,3 @@ object ContextJarUtils extends Logging { value != null && value.contains(item) } } - - diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 7b7dad95e8..3641476c0d 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -31,7 +31,6 @@ import io.snappydata.sql.catalog.SnappyExternalCatalog.{DBTABLE_PROPERTY, getTab import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} import org.apache.hadoop.fs.Path -import org.apache.spark.annotation.DeveloperApi import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalog.Column @@ -53,15 +52,14 @@ import org.apache.spark.sql.types._ import org.apache.spark.util.MutableURLClassLoader /** - * ::DeveloperApi:: - * Catalog using Hive for persistence and adding Snappy extensions like + * SessionCatalog implementation using Snappy store for persistence in embedded mode and + * using client API calls for smart connector mode, Adds Snappy extensions like * stream/topK tables and returning LogicalPlan to materialize these entities. */ -@DeveloperApi trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val snappyExternalCatalog: SnappyExternalCatalog - val globalTempViewManager: GlobalTempViewManager + val globalTempManager: GlobalTempViewManager val functionResourceLoader: FunctionResourceLoader val functionRegistry: FunctionRegistry val snappySession: SnappySession @@ -292,8 +290,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { protected def addMissingGlobalTempSchema(name: TableIdentifier): TableIdentifier = { if (name.database.isEmpty) { val tableName = formatTableName(name.table) - if (globalTempViewManager.get(tableName).isDefined) { - name.copy(table = tableName, database = Some(globalTempViewManager.database)) + if (globalTempManager.get(tableName).isDefined) { + name.copy(table = tableName, database = Some(globalTempManager.database)) } else name } else name } @@ -305,7 +303,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } protected[sql] def validateSchemaName(schemaName: String, checkForDefault: Boolean): Unit = { - if (schemaName == globalTempViewManager.database) { + if (schemaName == globalTempManager.database) { throw new AnalysisException(s"$schemaName is a system preserved database/schema for global " + s"temporary tables. You cannot create, drop or set a schema with this name.") } @@ -764,8 +762,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { override def renameTable(old: TableIdentifier, newName: TableIdentifier): Unit = { val oldName = addMissingGlobalTempSchema(old) if (isTemporaryTable(oldName)) { - if (newName.database.isEmpty && oldName.database.contains(globalTempViewManager.database)) { - super.renameTable(oldName, newName.copy(database = Some(globalTempViewManager.database))) + if (newName.database.isEmpty && oldName.database.contains(globalTempManager.database)) { + super.renameTable(oldName, newName.copy(database = Some(globalTempManager.database))) } else super.renameTable(oldName, newName) } else { // first check required permission to alter objects in a schema @@ -864,15 +862,15 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { var view: Option[TableIdentifier] = Some(name) val relationPlan = (if (name.database.isEmpty) { getTempView(tableName) match { - case None => globalTempViewManager.get(tableName) + case None => globalTempManager.get(tableName) case s => s } } else None) match { case None => val schemaName = if (name.database.isEmpty) currentDb else formatDatabaseName(name.database.get) - if (schemaName == globalTempViewManager.database) { - globalTempViewManager.get(tableName) match { + if (schemaName == globalTempManager.database) { + globalTempManager.get(tableName) match { case None => throw new TableNotFoundException(schemaName, tableName) case Some(p) => p } @@ -913,15 +911,15 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { if (name.database.isEmpty) synchronized { // check both local and global temporary tables val tableName = formatTableName(name.table) - getTempView(tableName).isDefined || globalTempViewManager.get(tableName).isDefined - } else if (formatDatabaseName(name.database.get) == globalTempViewManager.database) { - globalTempViewManager.get(formatTableName(name.table)).isDefined + getTempView(tableName).isDefined || globalTempManager.get(tableName).isDefined + } else if (formatDatabaseName(name.database.get) == globalTempManager.database) { + globalTempManager.get(formatTableName(name.table)).isDefined } else false } override def listTables(schema: String, pattern: String): Seq[TableIdentifier] = { val schemaName = formatDatabaseName(schema) - if (schemaName != globalTempViewManager.database && !databaseExists(schemaName)) { + if (schemaName != globalTempManager.database && !databaseExists(schemaName)) { throw SnappyExternalCatalog.schemaNotFoundException(schema) } if (snappySession.enableHiveSupport && hiveSessionCatalog.databaseExists(schema)) { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index fd300352d9..6f895e2837 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -27,7 +27,7 @@ import com.pivotal.gemfirexd.internal.impl.jdbc.Util import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState import com.pivotal.gemfirexd.{Attribute => GAttr} import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} -import io.snappydata.{Constant, HintName, Property, QueryHint} +import io.snappydata.{Constant, Property} import org.apache.spark.SparkConf import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} @@ -844,14 +844,3 @@ case class MarkerForCreateTableAsSelect(child: LogicalPlan) extends UnaryNode { case class BypassRowLevelSecurity(child: LogicalFilter) extends UnaryNode { override def output: Seq[Attribute] = child.output } - -/** - * Wrap plan-specific query hints (like joinType). This extends Spark's BroadcastHint - * so that filters/projections etc can be pushed below this by optimizer. - */ -trait LogicalPlanWithHints extends UnaryNode { - def allHints: Map[QueryHint.Type, HintName.Type] - - override def simpleString: String = - s"LogicalPlanWithHints[hints = $allHints; child = ${child.simpleString}]" -} diff --git a/examples/build.gradle b/examples/build.gradle index 8e8b6d6aea..ad55636b32 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -25,13 +25,6 @@ sourceSets.test.java.srcDirs = [] sourceSets.test.scala.srcDir 'src/test/scala' if (!(new File(rootDir, 'cluster/build.gradle').exists())) { - ext { - scalaBinaryVersion = '2.11' - scalatestVersion = '3.0.8' - scalaVersion = scalaBinaryVersion + '.8' - snappyVersion = '1.1.0' - } - repositories { mavenCentral() maven { url 'https://dl.bintray.com/big-data/maven' } @@ -43,7 +36,7 @@ if (!(new File(rootDir, 'cluster/build.gradle').exists())) { dependencies { compile 'org.scala-lang:scala-library:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" - compile "io.snappydata:snappydata-cluster_2.11:${snappyVersion}" + compile "io.snappydata:snappydata-cluster_2.11:${version}" } archivesBaseName = 'snappydata-examples_' + '2.11' From 9e9f2eacc5f6a88a2ac74f3b31814dcee8d98fb4 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 5 Feb 2020 02:38:17 +0530 Subject: [PATCH 37/80] fix kafka incompatibility in tests with new kafka 2.x --- core/build.gradle | 5 +- .../spark/sql/kafka010/KafkaTestUtils.scala | 382 ------------------ spark | 2 +- 3 files changed, 3 insertions(+), 386 deletions(-) delete mode 100644 core/src/test/scala/org/apache/spark/sql/kafka010/KafkaTestUtils.scala diff --git a/core/build.gradle b/core/build.gradle index b308ce633f..c39bd4a266 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -64,7 +64,9 @@ dependencies { testCompile project(path: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion, configuration: 'testOutput') testCompile project(path: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion, configuration: 'testOutput') + testCompile project(path: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion, configuration: 'testOutput') testCompile project(path: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion, configuration: 'testOutput') + testCompile project(path: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion, configuration: 'testOutput') } else { compileOnly coreLibraries.spark testCompile coreLibraries.spark @@ -95,9 +97,6 @@ dependencies { testCompile project(':dunit') testCompile 'org.scala-lang:scala-actors:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" - testCompile(group: 'org.apache.kafka', name: 'kafka_' + scalaBinaryVersion, version: kafka010Version) { - exclude(group: 'net.jpountz.lz4', module: 'lz4') - } testCompile project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkConnectorVersion}") diff --git a/core/src/test/scala/org/apache/spark/sql/kafka010/KafkaTestUtils.scala b/core/src/test/scala/org/apache/spark/sql/kafka010/KafkaTestUtils.scala deleted file mode 100644 index c75c309972..0000000000 --- a/core/src/test/scala/org/apache/spark/sql/kafka010/KafkaTestUtils.scala +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -package org.apache.spark.sql.kafka010 - -import java.io.File -import java.lang.{Integer => JInt} -import java.net.InetSocketAddress -import java.util.concurrent.TimeUnit -import java.util.{Properties, Map => JMap} - -import kafka.admin.AdminUtils -import kafka.api.Request -import kafka.common.TopicAndPartition -import kafka.server.{KafkaConfig, KafkaServer, OffsetCheckpoint} -import kafka.utils.ZkUtils -import org.apache.kafka.clients.consumer.KafkaConsumer -import org.apache.kafka.clients.producer._ -import org.apache.kafka.common.TopicPartition -import org.apache.kafka.common.serialization.{StringDeserializer, StringSerializer} -import org.apache.spark.SparkConf -import org.apache.spark.internal.Logging -import org.apache.spark.util.Utils -import org.apache.zookeeper.server.{NIOServerCnxnFactory, ZooKeeperServer} -import org.scalatest.concurrent.Eventually._ -import org.scalatest.time.SpanSugar._ - -import scala.collection.JavaConverters._ -import scala.language.postfixOps -import scala.util.Random - -/** - * This is a helper class for Kafka test suites. This has the functionality to set up - * and tear down local Kafka servers, and to push data using Kafka producers. - * - * The reason to put Kafka test utility class in src is to test Python related Kafka APIs. - */ -class KafkaTestUtils extends Logging { - - // Zookeeper related configurations - private val zkHost = "localhost" - private var zkPort: Int = 0 - private val zkConnectionTimeout = 60000 - private val zkSessionTimeout = 6000 - - private var zookeeper: EmbeddedZookeeper = _ - - private var zkUtils: kafka.utils.ZkUtils = _ - - // Kafka broker related configurations - private val brokerHost = "localhost" - private var brokerPort = 0 - private var brokerConf: KafkaConfig = _ - - // Kafka broker server - private var server: KafkaServer = _ - - // Kafka producer - private var producer: Producer[String, String] = _ - - // Flag to test whether the system is correctly started - private var zkReady = false - private var brokerReady = false - - def zkAddress: String = { - assert(zkReady, "Zookeeper not setup yet or already torn down, cannot get zookeeper address") - s"$zkHost:$zkPort" - } - - def brokerAddress: String = { - assert(brokerReady, "Kafka not setup yet or already torn down, cannot get broker address") - s"$brokerHost:$brokerPort" - } - - def zookeeperClient: ZkUtils = { - assert(zkReady, "Zookeeper not setup yet or already torn down, cannot get zookeeper client") - Option(zkUtils).getOrElse( - throw new IllegalStateException("Zookeeper client is not yet initialized")) - } - - // Set up the Embedded Zookeeper server and get the proper Zookeeper port - private def setupEmbeddedZookeeper(): Unit = { - // Zookeeper server startup - zookeeper = new EmbeddedZookeeper(s"$zkHost:$zkPort") - // Get the actual zookeeper binding port - zkPort = zookeeper.actualPort - zkUtils = ZkUtils(s"$zkHost:$zkPort", zkSessionTimeout, zkConnectionTimeout, false) - zkReady = true - } - - // Set up the Embedded Kafka server - private def setupEmbeddedKafkaServer(): Unit = { - assert(zkReady, "Zookeeper should be set up beforehand") - - // Kafka broker startup - Utils.startServiceOnPort(brokerPort, port => { - brokerPort = port - brokerConf = new KafkaConfig(brokerConfiguration, doLog = false) - server = new KafkaServer(brokerConf) - server.startup() - brokerPort = server.boundPort() - (server, brokerPort) - }, new SparkConf(), "KafkaBroker") - - brokerReady = true - } - - /** setup the whole embedded servers, including Zookeeper and Kafka brokers */ - def setup(): Unit = { - setupEmbeddedZookeeper() - setupEmbeddedKafkaServer() - } - - /** Teardown the whole servers, including Kafka broker and Zookeeper */ - def teardown(): Unit = { - brokerReady = false - zkReady = false - - if (producer != null) { - producer.close() - producer = null - } - - if (server != null) { - server.shutdown() - server = null - } - - brokerConf.logDirs.foreach { f => Utils.deleteRecursively(new File(f)) } - - if (zkUtils != null) { - zkUtils.close() - zkUtils = null - } - - if (zookeeper != null) { - zookeeper.shutdown() - zookeeper = null - } - } - - /** Create a Kafka topic and wait until it is propagated to the whole cluster */ - def createTopic(topic: String, partitions: Int, overwrite: Boolean = false): Unit = { - var created = false - while (!created) { - try { - AdminUtils.createTopic(zkUtils, topic, partitions, 1) - created = true - } catch { - case e: kafka.common.TopicExistsException if overwrite => deleteTopic(topic) - } - } - // wait until metadata is propagated - (0 until partitions).foreach { p => - waitUntilMetadataIsPropagated(topic, p) - } - } - - def getAllTopicsAndPartitionSize(): Seq[(String, Int)] = { - zkUtils.getPartitionsForTopics(zkUtils.getAllTopics()).mapValues(_.size).toSeq - } - - /** Create a Kafka topic and wait until it is propagated to the whole cluster */ - def createTopic(topic: String): Unit = { - createTopic(topic, 1) - } - - /** Delete a Kafka topic and wait until it is propagated to the whole cluster */ - def deleteTopic(topic: String): Unit = { - val partitions = zkUtils.getPartitionsForTopics(Seq(topic))(topic).size - AdminUtils.deleteTopic(zkUtils, topic) - verifyTopicDeletionWithRetries(zkUtils, topic, partitions, List(this.server)) - } - - /** Add new paritions to a Kafka topic */ - def addPartitions(topic: String, partitions: Int): Unit = { - AdminUtils.addPartitions(zkUtils, topic, partitions) - // wait until metadata is propagated - (0 until partitions).foreach { p => - waitUntilMetadataIsPropagated(topic, p) - } - } - - /** Java-friendly function for sending messages to the Kafka broker */ - def sendMessages(topic: String, messageToFreq: JMap[String, JInt]): Unit = { - sendMessages(topic, Map(messageToFreq.asScala.mapValues(_.intValue()).toSeq: _*)) - } - - /** Send the messages to the Kafka broker */ - def sendMessages(topic: String, messageToFreq: Map[String, Int]): Unit = { - val messages = messageToFreq.flatMap { case (s, freq) => Seq.fill(freq)(s) }.toArray - sendMessages(topic, messages) - } - - /** Send the array of messages to the Kafka broker */ - def sendMessages(topic: String, messages: Array[String]): Seq[(String, RecordMetadata)] = { - sendMessages(topic, messages, None) - } - - /** Send the array of messages to the Kafka broker using specified partition */ - def sendMessages( - topic: String, - messages: Array[String], - partition: Option[Int]): Seq[(String, RecordMetadata)] = { - producer = new KafkaProducer[String, String](producerConfiguration) - val offsets = try { - messages.map { m => - val record = partition match { - case Some(p) => new ProducerRecord[String, String](topic, p, null, m) - case None => new ProducerRecord[String, String](topic, m) - } - val metadata = - producer.send(record).get(10, TimeUnit.SECONDS) - // logInfo(s"\tSent $m to partition ${metadata.partition}, offset ${metadata.offset}") - (m, metadata) - } - } finally { - if (producer != null) { - producer.close() - producer = null - } - } - offsets - } - - def getLatestOffsets(topics: Set[String]): Map[TopicPartition, Long] = { - val kc = new KafkaConsumer[String, String](consumerConfiguration) - logInfo("Created consumer to get latest offsets") - kc.subscribe(topics.asJavaCollection) - kc.poll(0) - val partitions = kc.assignment() - kc.pause(partitions) - kc.seekToEnd(partitions) - val offsets = partitions.asScala.map(p => p -> kc.position(p)).toMap - kc.close() - logInfo("Closed consumer to get latest offsets") - offsets - } - - protected def brokerConfiguration: Properties = { - val props = new Properties() - props.put("broker.id", "0") - props.put("host.name", "localhost") - props.put("advertised.host.name", "localhost") - props.put("port", brokerPort.toString) - props.put("log.dir", Utils.createTempDir().getAbsolutePath) - props.put("zookeeper.connect", zkAddress) - props.put("log.flush.interval.messages", "1") - props.put("replica.socket.timeout.ms", "1500") - props.put("delete.topic.enable", "true") - props - } - - private def producerConfiguration: Properties = { - val props = new Properties() - props.put("bootstrap.servers", brokerAddress) - props.put("value.serializer", classOf[StringSerializer].getName) - props.put("key.serializer", classOf[StringSerializer].getName) - // wait for all in-sync replicas to ack sends - props.put("acks", "all") - props - } - - private def consumerConfiguration: Properties = { - val props = new Properties() - props.put("bootstrap.servers", brokerAddress) - props.put("group.id", "group-KafkaTestUtils-" + Random.nextInt) - props.put("value.deserializer", classOf[StringDeserializer].getName) - props.put("key.deserializer", classOf[StringDeserializer].getName) - props.put("enable.auto.commit", "false") - props - } - - /** Verify topic is deleted in all places, e.g, brokers, zookeeper. */ - private def verifyTopicDeletion( - topic: String, - numPartitions: Int, - servers: Seq[KafkaServer]): Unit = { - val topicAndPartitions = (0 until numPartitions).map(TopicAndPartition(topic, _)) - - import ZkUtils._ - // wait until admin path for delete topic is deleted, signaling completion of topic deletion - assert( - !zkUtils.pathExists(getDeleteTopicPath(topic)), - s"${getDeleteTopicPath(topic)} still exists") - assert(!zkUtils.pathExists(getTopicPath(topic)), s"${getTopicPath(topic)} still exists") - // ensure that the topic-partition has been deleted from all brokers' replica managers - assert(servers.forall(server => topicAndPartitions.forall(tp => - server.replicaManager.getPartition(tp.topic, tp.partition) == None)), - s"topic $topic still exists in the replica manager") - // ensure that logs from all replicas are deleted if delete topic is marked successful - assert(servers.forall(server => topicAndPartitions.forall(tp => - server.getLogManager().getLog(tp).isEmpty)), - s"topic $topic still exists in log mananger") - // ensure that topic is removed from all cleaner offsets - assert(servers.forall(server => topicAndPartitions.forall { tp => - val checkpoints = server.getLogManager().logDirs.map { logDir => - new OffsetCheckpoint(new File(logDir, "cleaner-offset-checkpoint")).read() - } - checkpoints.forall(checkpointsPerLogDir => !checkpointsPerLogDir.contains(tp)) - }), s"checkpoint for topic $topic still exists") - // ensure the topic is gone - assert( - !zkUtils.getAllTopics().contains(topic), - s"topic $topic still exists on zookeeper") - } - - /** Verify topic is deleted. Retry to delete the topic if not. */ - private def verifyTopicDeletionWithRetries( - zkUtils: ZkUtils, - topic: String, - numPartitions: Int, - servers: Seq[KafkaServer]) { - eventually(timeout(60.seconds), interval(200.millis)) { - try { - verifyTopicDeletion(topic, numPartitions, servers) - } catch { - case e: Throwable => - // As pushing messages into Kafka updates Zookeeper asynchronously, there is a small - // chance that a topic will be recreated after deletion due to the asynchronous update. - // Hence, delete the topic and retry. - AdminUtils.deleteTopic(zkUtils, topic) - throw e - } - } - } - - private def waitUntilMetadataIsPropagated(topic: String, partition: Int): Unit = { - def isPropagated = server.apis.metadataCache.getPartitionInfo(topic, partition) match { - case Some(partitionState) => - val leaderAndInSyncReplicas = partitionState.leaderIsrAndControllerEpoch.leaderAndIsr - - zkUtils.getLeaderForPartition(topic, partition).isDefined && - Request.isValidBrokerId(leaderAndInSyncReplicas.leader) && - leaderAndInSyncReplicas.isr.size >= 1 - - case _ => - false - } - - eventually(timeout(60.seconds)) { - assert(isPropagated, s"Partition [$topic, $partition] metadata not propagated after timeout") - } - } - - private class EmbeddedZookeeper(val zkConnect: String) { - val snapshotDir = Utils.createTempDir() - val logDir = Utils.createTempDir() - - val zookeeper = new ZooKeeperServer(snapshotDir, logDir, 500) - val (ip, port) = { - val splits = zkConnect.split(":") - (splits(0), splits(1).toInt) - } - val factory = new NIOServerCnxnFactory() - factory.configure(new InetSocketAddress(ip, port), 16) - factory.startup(zookeeper) - - val actualPort = factory.getLocalPort - - def shutdown() { - factory.shutdown() - Utils.deleteRecursively(snapshotDir) - Utils.deleteRecursively(logDir) - } - } - -} diff --git a/spark b/spark index 9e00642394..f700acb297 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 9e00642394ef0a6bc9e40c1fa9364c784a237246 +Subproject commit f700acb297b2e76122604c0d8d47d59c2dd9d0ea From 8e97d3394eb808323d09fd2583501c62fda79245 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 12 Feb 2020 06:42:48 +0530 Subject: [PATCH 38/80] update snappy-spark to snappy/branch-2.4 (v2.4.5) fixing compile errors with -Yno-adapted-args --- build.gradle | 51 ++++++------- .../scala/org/apache/spark/sql/MiscTest.scala | 28 ++++---- .../sql/hive/TestHiveSnappySession.scala | 23 +++--- core/compatibility/spark-2.1.0/build.gradle | 2 + core/compatibility/spark-2.1.1/build.gradle | 4 +- .../spark/sql/internal/Spark21Internals.scala | 7 +- core/compatibility/spark-2.3.2/build.gradle | 2 + .../spark/sql/internal/Spark23Internals.scala | 11 +-- core/compatibility/spark-2.4.4/build.gradle | 2 + core/compatibility/spark-2.4.5/build.gradle | 71 +++++++++++++++++++ .../sql/internal/Spark245Internals.scala | 27 +++++++ .../spark/sql/internal/Spark24Internals.scala | 20 +++--- .../main/scala/io/snappydata/functions.scala | 2 +- .../org/apache/spark/RDDJavaFunctions.scala | 2 +- .../org/apache/spark/sql/SnappyParser.scala | 8 +++ .../org/apache/spark/sql/SnappySession.scala | 2 +- .../apache/spark/sql/SnappySqlParser.scala | 18 +++-- .../org/apache/spark/sql/SparkInternals.scala | 5 +- .../org/apache/spark/sql/SparkSupport.scala | 9 +-- .../catalyst/expressions/ParamLiteral.scala | 4 +- .../DictionaryOptimizedMapAccessor.scala | 5 +- .../spark/sql/execution/EncoderScanExec.scala | 5 +- .../sql/execution/ObjectHashMapAccessor.scala | 20 +++--- .../spark/sql/execution/SHAMapAccessor.scala | 6 +- .../spark/sql/execution/SnappySortExec.scala | 6 +- .../aggregate/SnappyHashAggregateExec.scala | 11 +-- .../execution/columnar/ColumnInsertExec.scala | 18 ++--- .../execution/columnar/ColumnTableScan.scala | 25 +++---- .../execution/columnar/ColumnUpdateExec.scala | 13 ++-- .../spark/sql/execution/row/RowExec.scala | 7 +- .../sql/execution/row/RowTableScan.scala | 10 +-- .../apache/spark/sql/sources/RuleUtils.scala | 7 +- .../spark/sql/store/CodeGeneration.scala | 5 +- docs/best_practices/important_settings.md | 4 +- docs/best_practices/setup_cluster.md | 4 +- .../configuring_cluster.md | 2 +- .../property_description.md | 4 +- docs/monitoring/monitoring.md | 2 +- encoders/build.gradle | 18 +++-- .../encoding/ColumnDeltaEncoder.scala | 2 +- jdbc/build.gradle | 9 ++- .../spark/sql/SnappyDataBaseDialect.scala | 37 ++++++++-- settings.gradle | 13 +++- spark | 2 +- spark-jobserver | 2 +- 45 files changed, 355 insertions(+), 180 deletions(-) create mode 100644 core/compatibility/spark-2.4.5/build.gradle create mode 100644 core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala diff --git a/build.gradle b/build.gradle index 4981106634..4c976b840f 100644 --- a/build.gradle +++ b/build.gradle @@ -25,9 +25,9 @@ buildscript { } dependencies { classpath 'io.snappydata:gradle-scalatest:0.25' - classpath 'org.github.ngbinh.scalastyle:gradle-scalastyle-plugin_2.11:0.9.0' - classpath 'com.github.jengelman.gradle.plugins:shadow:5.1.0' - classpath 'de.undercouch:gradle-download-task:3.4.3' + classpath 'org.github.ngbinh.scalastyle:gradle-scalastyle-plugin_2.11:1.0.1' + classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0' + classpath 'de.undercouch:gradle-download-task:4.0.4' classpath 'net.rdrei.android.buildtimetracker:gradle-plugin:0.11.+' classpath 'com.netflix.nebula:gradle-ospackage-plugin:5.2.+' } @@ -56,11 +56,10 @@ allprojects { repositories { mavenCentral() + maven { url 'https://repo.hortonworks.com/content/repositories/releases' } maven { url 'https://dl.bintray.com/big-data/maven' } maven { url "https://repo.spring.io/libs-release" } - maven { url "https://oss.sonatype.org/content/repositories/snapshots" } - // maven { url 'http://repository.snappydata.io/repository/internal' } - // maven { url 'http://repository.snappydata.io/repository/snapshots' } + // maven { url "https://oss.sonatype.org/content/repositories/snapshots" } maven { url 'https://app.camunda.com/nexus/content/repositories/public' } } @@ -78,20 +77,20 @@ allprojects { tasks.withType(JavaCompile) { options.encoding = 'UTF-8' options.incremental = true - options.compilerArgs << '-Xlint:-serial,-path,-deprecation,-unchecked,-rawtypes' + options.compilerArgs << '-Xlint:-serial,-path,-deprecation,-unchecked,-rawtypes,-try' options.compilerArgs << '-XDignore.symbol.file' options.fork = true options.forkOptions.javaHome = file(System.properties['java.home']) options.forkOptions.jvmArgs = [ '-J-Xmx2g', '-J-Xms2g', '-J-XX:ReservedCodeCacheSize=512m', '-J-Djava.net.preferIPv4Stack=true' ] } tasks.withType(ScalaCompile) { + options.encoding = 'UTF-8' options.fork = true options.forkOptions.jvmArgs = [ '-Xmx2g', '-Xms2g', '-XX:ReservedCodeCacheSize=512m', '-Djava.net.preferIPv4Stack=true' ] // scalaCompileOptions.optimize = true // scalaCompileOptions.useAnt = false scalaCompileOptions.deprecation = false - scalaCompileOptions.additionalParameters = [ '-feature' ] - options.encoding = 'UTF-8' + scalaCompileOptions.additionalParameters = [ '-feature', '-explaintypes', '-Yno-adapted-args' ] } jar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE @@ -107,37 +106,32 @@ allprojects { aqpProductName = 'TIBCO ComputeDB AQP' vendorName = 'TIBCO Software Inc.' scalaBinaryVersion = '2.11' - scalaVersion = scalaBinaryVersion + '.8' - - spark210Version = '2.1.0' - spark211Version = '2.1.1' - spark232Version = '2.3.2' - spark244Version = '2.4.4' + scalaVersion = scalaBinaryVersion + '.12' - sparkVersion = spark211Version + sparkVersion = '2.4.5' sparkConnectorVersion = System.getProperty('spark.connector.version', sparkVersion) - snappySparkVersion = '2.1.1.7' + snappySparkVersion = '2.4.5.1' coreProjectName = sparkVersion == sparkConnectorVersion ? ":snappy-core_${scalaBinaryVersion}" : ":snappy-core-product_${scalaBinaryVersion}" aqpProjectName = ":snappy-aqp_${scalaBinaryVersion}" sparkPackageName = "snappydata-${version}_${sparkConnectorVersion}-s_${scalaBinaryVersion}" sparkConnectorDistName = "spark-${sparkConnectorVersion}-bin-hadoop2.7" - sparkCurrentVersion = '2.4.4' + sparkCurrentVersion = '2.4.5' sparkCurrentDistName = "spark-${sparkCurrentVersion}-bin-hadoop2.7" log4jVersion = '1.2.17' - slf4jVersion = '1.7.25' + slf4jVersion = '1.7.30' junitVersion = '4.12' mockitoVersion = '1.10.19' hadoopVersion = '2.7.7' scalatestVersion = '3.0.8' - jettyVersion = '9.2.26.v20180806' + jettyVersion = '9.3.28.v20191105' guavaVersion = '14.0.1' kryoVersion = '4.0.1' thriftVersion = '0.9.3' metricsVersion = '4.0.3' metrics2Version = '2.2.0' - janinoVersion = '3.0.15' + janinoVersion = '3.0.9' derbyVersion = '10.14.2.0' parboiledVersion = '2.1.5' tomcatJdbcVersion = '8.5.37' @@ -153,7 +147,7 @@ allprojects { jodaVersion = '2.1.2' jodaTimeVersion = '2.10.1' slickVersion = '2.1.0' - h2Version = '1.3.176' + h2Version = '1.4.195' commonsCollectionsVersion = '3.2.2' commonsIoVersion = '2.6' commonsPoolVersion = '1.6' @@ -163,7 +157,7 @@ allprojects { typesafeConfigVersion = '1.3.3' mssqlVersion = '7.0.0.jre8' antlr2Version = '2.7.7' - kafka010Version = '0.10.0.1' + kafka2Version = '2.0.1' pegdownVersion = '1.6.0' snappyStoreVersion = '1.6.4' @@ -182,9 +176,9 @@ allprojects { jdkVersion = System.getProperty('java.version') clusterType = '' - sparkJobServerVersion = '0.6.2.10' - eclipseCollectionsVersion = '9.2.0' - fastutilVersion = '8.2.2' + sparkJobServerVersion = '0.9.0.1' + eclipseCollectionsVersion = '10.1.0' + fastutilVersion = '8.3.1' gitCmd = "git --git-dir=${rootDir}/.git --work-tree=${rootDir}" gitBranch = "${gitCmd} rev-parse --abbrev-ref HEAD".execute().text.trim() @@ -395,12 +389,12 @@ subprojects { minHeapSize '4g' maxHeapSize '4g' jvmArgs '-ea', '-XX:+HeapDumpOnOutOfMemoryError','-XX:+UseConcMarkSweepGC', '-XX:MaxNewSize=1g', - '-XX:+UseParNewGC', '-XX:+CMSClassUnloadingEnabled' + '-XX:+UseParNewGC', '-XX:+CMSClassUnloadingEnabled', '-Xss4m', '-XX:ReservedCodeCacheSize=1g' // for benchmarking // minHeapSize '12g' // maxHeapSize '12g' // jvmArgs '-XX:+HeapDumpOnOutOfMemoryError','-XX:+UseConcMarkSweepGC', '-XX:MaxNewSize=2g', - // '-XX:+UseParNewGC', '-XX:+CMSClassUnloadingEnabled' + // '-XX:+UseParNewGC', '-XX:+CMSClassUnloadingEnabled', '-Xss4m', '-XX:ReservedCodeCacheSize=1g' testLogging.exceptionFormat = TestExceptionFormat.FULL testLogging.events = TestLogEvent.values() as Set @@ -1354,6 +1348,7 @@ task buildAll { dependsOn getTasksByName('assemble', true).findAll { taskFilter(it) }.collect { it.path } dependsOn getTasksByName('product', true).findAll { taskFilter(it) }.collect { it.path } dependsOn getTasksByName('testClasses', true).findAll { taskFilter(it) }.collect { it.path } + dependsOn ':snappy-spark:scalaStyle' dependsOn ':copyShadowJars' mustRunAfter cleanAll } diff --git a/cluster/src/test/scala/org/apache/spark/sql/MiscTest.scala b/cluster/src/test/scala/org/apache/spark/sql/MiscTest.scala index 86b078e831..3ff86bc3f9 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/MiscTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/MiscTest.scala @@ -17,7 +17,9 @@ package org.apache.spark.sql import scala.util.control.NonFatal + import io.snappydata.SnappyFunSuite + import org.apache.spark.Logging import org.apache.spark.scheduler._ @@ -29,13 +31,13 @@ class MiscTest extends SnappyFunSuite with Logging { test("With Clause") { snc.sql("drop table if exists nulls_table") snc.sql(s"create table table1 (ol_1_int_id integer," + - s" ol_1_int2_id integer, ol_1_str_id STRING) using column " + - "options( partition_by 'ol_1_int2_id', buckets '2')") + s" ol_1_int2_id integer, ol_1_str_id STRING) using column " + + "options( partition_by 'ol_1_int2_id', buckets '2')") snc.sql("WITH temp_table AS ( SELECT ol_1_int2_id as col1," + - " sum(ol_1_int_id) AS col2 FROM table1 GROUP BY ol_1_int2_id)" + - " SELECT ol_1_int2_id FROM temp_table ," + - " table1 WHERE ol_1_int2_id = col1 LIMIT 100 ").collect() + " sum(ol_1_int_id) AS col2 FROM table1 GROUP BY ol_1_int2_id)" + + " SELECT ol_1_int2_id FROM temp_table ," + + " table1 WHERE ol_1_int2_id = col1 LIMIT 100 ").collect() } test("Pool test") { @@ -44,7 +46,7 @@ class MiscTest extends SnappyFunSuite with Logging { sc.taskScheduler.rootPool.addSchedulable(rootPool) try { - snc.sql("set snappydata.scheduler.pool=xyz") + snc.sql("set spark.scheduler.pool=xyz") fail("unknown spark scheduler cannot be set") } catch { case _: IllegalArgumentException => // do nothing @@ -52,8 +54,8 @@ class MiscTest extends SnappyFunSuite with Logging { fail("setting unknown spark scheduler with a different error", e) } - snc.sql("set snappydata.scheduler.pool=lowlatency") - snc.sql("select 1").count + snc.sql("set spark.scheduler.pool=lowlatency") + snc.sql("select 1").count() assert(sc.getLocalProperty("spark.scheduler.pool") === "lowlatency") } @@ -65,7 +67,7 @@ class MiscTest extends SnappyFunSuite with Logging { snc.sql(sqlstr) fail(s"this should have given TableNotFoundException") } catch { - case tnfe: TableNotFoundException => + case _: TableNotFoundException => case ae: AnalysisException => if (!ae.getMessage().contains("Table or view not found")) { throw ae } @@ -80,10 +82,10 @@ class MiscTest extends SnappyFunSuite with Logging { snc.sql(s"create table test.good(dept string, sal int) using column options()") snc.sql(s"insert into test.good values('IT', 10000), ('HR', 9000), ('ADMIN', 4000)") var arr = snc.sql(s"select * from good").collect() - assert(arr.size === 0) + assert(arr.length === 0) snc.sql(s"set schema test") arr = snc.sql(s"select * from good").collect() - assert(arr.size === 3) + assert(arr.length === 3) } finally { snc.sql(s"set schema app") } @@ -94,7 +96,7 @@ class MiscTest extends SnappyFunSuite with Logging { snc.sql("create table emp.test1(col1 int not null, col2 int not null) using column") snc.sql("insert into test values (1, 2), (4, 5), (6, 7)") snc.sql("insert into emp.test1 values (1, 2), (4, 5), (6, 7)") - val sz = snc.sql(s"select * from app.test").collect().length + assert(snc.sql(s"select * from app.test").collect().length === 3) val sqlstrs = Seq("select app.test.* from app.test", "select app.test.col1, app.test.col2 from app.test", "select col1, col2 from app.test", @@ -122,7 +124,7 @@ class MiscTest extends SnappyFunSuite with Logging { snc.sql(sqlstr) fail(s"expected analysis exception for $sqlstr") } catch { - case ae: AnalysisException => // expected ... ignore + case _: AnalysisException => // expected ... ignore }) } } diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala index c7a1710abe..aa54599e67 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala @@ -26,9 +26,8 @@ import org.apache.hadoop.hive.ql.exec.FunctionRegistry import org.apache.spark.SparkContext import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan -import org.apache.spark.sql.hive.client.HiveClient import org.apache.spark.sql.hive.test.{TestHiveContext, TestHiveSparkSession} -import org.apache.spark.sql.internal.{SharedState, SnappySharedState} +import org.apache.spark.sql.internal.{SessionState, SharedState, SnappySessionCatalog, SnappySharedState} import org.apache.spark.sql.{SnappyContext, SnappySession} class TestHiveSnappySession(@transient protected val sc: SparkContext, @@ -37,7 +36,10 @@ class TestHiveSnappySession(@transient protected val sc: SparkContext, assume(enableHiveSupport) - override protected def existingSharedState: Option[SharedState] = None + override protected def existingSharedState: Option[SharedState] = + Option(SnappyContext.getExistingSharedState) + + override protected def parentSessionState: Option[SessionState] = None /** * State shared across sessions, including the [[SparkContext]], cached data, listener, @@ -46,17 +48,18 @@ class TestHiveSnappySession(@transient protected val sc: SparkContext, @transient override lazy val sharedState: SnappySharedState = SnappyContext.sharedState(sparkContext) - override def hiveDefaultTableFilePath(name: TableIdentifier): String = - sessionState.catalog.hiveSessionCatalog.hiveDefaultTableFilePath(name) - override def getCachedDataSourceTable(table: TableIdentifier): LogicalPlan = - sessionState.catalog.hiveSessionCatalog.getCachedDataSourceTable(table) - - override def metadataHive: HiveClient = - sessionState.hiveState.asInstanceOf[HiveSessionState].metadataHive + sessionState.catalog.asInstanceOf[SnappySessionCatalog].hiveSessionCatalog + .metastoreCatalog.getCachedDataSourceTable(table) override def newSession(): SnappySession = new TestHiveSnappySession(sc, loadTestTables) + override def cloneSession(): SnappySession = { + val result = newSession() + result.sessionState // force copy of SessionState + result + } + override private[sql] def overrideConfs: Map[String, String] = TestHiveContext.overrideConfs + (Property.HiveCompatibility.name -> "spark") diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index 8c45a050a8..1dace4a054 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -24,6 +24,8 @@ sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" sourceSets.main.java.srcDirs = [] +String spark210Version = '2.1.0' + dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index ad6cc090e6..cfa1fed6e5 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -24,6 +24,8 @@ sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" sourceSets.main.java.srcDirs = [] +String spark211Version = '2.1.1' + dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion @@ -41,7 +43,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly (project(coreProjectName)) { + compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index a93ebc4796..f0620e2468 100644 --- a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -643,13 +643,12 @@ abstract class Spark21Internals extends SparkInternals { info.memSize, info.diskSize, dataDistribution = None, partitions = None)) } - override def newExprCode(code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { - ExprCode(code = code, isNull = isNull, value = value) + override def newExprCode(code: String, isNull: String, value: String, dt: DataType): ExprCode = { + ExprCode(code, isNull, value) } override def copyExprCode(ev: ExprCode, code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { + value: String, dt: DataType): ExprCode = { ev.copy(code = if (code ne null) code else ev.code, isNull = if (isNull ne null) isNull else ev.isNull, value = if (value ne null) value else ev.value) diff --git a/core/compatibility/spark-2.3.2/build.gradle b/core/compatibility/spark-2.3.2/build.gradle index 2f76d9a6fa..e843bab3e0 100644 --- a/core/compatibility/spark-2.3.2/build.gradle +++ b/core/compatibility/spark-2.3.2/build.gradle @@ -26,6 +26,8 @@ sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" sourceSets.main.scala.srcDir "../spark-2.3.x/specific/java" sourceSets.main.java.srcDirs = [] +String spark232Version = '2.3.2' + dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion diff --git a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala b/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala index 0474f910a6..a734fc2af3 100644 --- a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala +++ b/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala @@ -151,14 +151,15 @@ abstract class Spark23Internals extends Spark23_4_Internals { override def newCacheManager(): CacheManager = new SnappyCacheManager23 - override def newExprCode(code: String, isNull: String, value: String, - javaClass: Class[_]): ExprCode = { + override def newExprCode(code: String, isNull: String, value: String, dt: DataType): ExprCode = { ExprCode(code, isNull, value) } - override def copyExprCode(ev: ExprCode, code: String, isNull: String, value: String, - javaClass: Class[_]): ExprCode = { - ev.copy(code, isNull, value) + override def copyExprCode(ev: ExprCode, code: String, isNull: String, + value: String, dt: DataType): ExprCode = { + ev.copy(code = if (code ne null) code else ev.code, + isNull = if (isNull ne null) isNull else ev.isNull, + value = if (value ne null) value else ev.value) } override def resetCode(ev: ExprCode): Unit = { diff --git a/core/compatibility/spark-2.4.4/build.gradle b/core/compatibility/spark-2.4.4/build.gradle index 570dbb0db3..543e67377c 100644 --- a/core/compatibility/spark-2.4.4/build.gradle +++ b/core/compatibility/spark-2.4.4/build.gradle @@ -26,6 +26,8 @@ sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/scala" sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/java" sourceSets.main.java.srcDirs = [] +String spark244Version = '2.4.4' + dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion diff --git a/core/compatibility/spark-2.4.5/build.gradle b/core/compatibility/spark-2.4.5/build.gradle new file mode 100644 index 0000000000..7c36c1caec --- /dev/null +++ b/core/compatibility/spark-2.4.5/build.gradle @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +// directly include the base classes to ensure everything is compiled with Spark 2.4.5 +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" +sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/java" +sourceSets.main.java.srcDirs = [] + +String spark245Version = '2.4.5' + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark245Version}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly (project(coreProjectName)) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + + exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) + } +} + +archivesBaseName = "snappydata-core-compat-spark${spark245Version}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${spark245Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala b/core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala new file mode 100644 index 0000000000..50ff031541 --- /dev/null +++ b/core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql._ + +/** + * Implementation of [[SparkInternals]] for Spark 2.4.4. + */ +class Spark245Internals extends Spark24Internals { + + override def version: String = "2.4.5" +} diff --git a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index c7b031b38e..f7aee6e5d7 100644 --- a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -38,7 +38,7 @@ import org.apache.spark.sql.execution.datasources.DataSource import org.apache.spark.sql.execution.{CacheManager, SparkOptimizer, SparkPlan} import org.apache.spark.sql.hive.{HiveSessionResourceLoader, SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.sources.BaseRelation -import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} +import org.apache.spark.sql.types.{BooleanType, DataType, Metadata, StructField, StructType} import org.apache.spark.{SparkConf, SparkContext} /** @@ -149,28 +149,28 @@ abstract class Spark24Internals extends Spark23_4_Internals { override def newCacheManager(): CacheManager = new SnappyCacheManager24 - private def exprValue(v: String, javaClass: Class[_]): ExprValue = v match { + private def exprValue(v: String, dt: DataType): ExprValue = v match { case "false" => FalseLiteral case "true" => TrueLiteral - case _ => VariableValue(v, javaClass) + case _ => VariableValue(v, CodeGenerator.javaClass(dt)) } override def newExprCode(code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { + value: String, dt: DataType): ExprCode = { ExprCode(CodeBlock(code :: Nil, EmptyBlock :: Nil), - isNull = exprValue(isNull, java.lang.Boolean.TYPE), - value = exprValue(value, javaClass)) + isNull = exprValue(isNull, BooleanType), + value = exprValue(value, dt)) } override def copyExprCode(ev: ExprCode, code: String, isNull: String, - value: String, javaClass: Class[_]): ExprCode = { + value: String, dt: DataType): ExprCode = { val codeBlock = if (code eq null) ev.code else if (code.isEmpty) EmptyBlock else CodeBlock(code :: Nil, EmptyBlock :: Nil) ev.copy(codeBlock, - if (isNull ne null) VariableValue(isNull, java.lang.Boolean.TYPE) else ev.isNull, - if (value ne null) VariableValue(value, javaClass) else ev.value) + isNull = if (isNull ne null) exprValue(isNull, BooleanType) else ev.isNull, + value = if (value ne null) exprValue(value, dt) else ev.value) } override def resetCode(ev: ExprCode): Unit = { @@ -180,7 +180,7 @@ abstract class Spark24Internals extends Spark23_4_Internals { override def exprCodeIsNull(ev: ExprCode): String = ev.isNull.code override def setExprCodeIsNull(ev: ExprCode, isNull: String): Unit = { - ev.isNull = exprValue(isNull, classOf[Boolean]) + ev.isNull = exprValue(isNull, BooleanType) } override def exprCodeValue(ev: ExprCode): String = ev.value.code diff --git a/core/src/main/scala/io/snappydata/functions.scala b/core/src/main/scala/io/snappydata/functions.scala index f70653eb3a..72c22302fa 100644 --- a/core/src/main/scala/io/snappydata/functions.scala +++ b/core/src/main/scala/io/snappydata/functions.scala @@ -145,6 +145,6 @@ case class DSID() extends LeafExpression with Nondeterministic with SparkSupport varName => s"$varName = UTF8String.fromString(" + s"io.snappydata.SnappyDataFunctions.getDSID($connPropsRef));") internals.copyExprCode(ev, code = "", isNull = "false", value = dsidVar, - javaClass = classOf[UTF8String]) + dt = StringType) } } diff --git a/core/src/main/scala/org/apache/spark/RDDJavaFunctions.scala b/core/src/main/scala/org/apache/spark/RDDJavaFunctions.scala index abdf90a65b..8482f9b885 100644 --- a/core/src/main/scala/org/apache/spark/RDDJavaFunctions.scala +++ b/core/src/main/scala/org/apache/spark/RDDJavaFunctions.scala @@ -76,7 +76,7 @@ class RDDJavaFunctions[U](val javaRDD: JavaRDD[U]) { preservesPartitioning: Boolean = false): JavaRDD[R] = { def fn: (Int, Iterator[U]) => Iterator[R] = { - (x: Int, y: Iterator[U]) => f.call(x, y.asJava).asScala + (x: Int, y: Iterator[U]) => f.call((x, y.asJava)).asScala } JavaRDD.fromRDD( new RDDExtensions(javaRDD.rdd)(fakeClassTag[U]) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 36e171c8ef..50fb350e8c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -381,6 +381,14 @@ class SnappyParser(session: SnappySession) ws ~ (identifier + commaSep) ~ EOI } + final def parseFunctionIdentifier: Rule1[FunctionIdentifier] = rule { + ws ~ functionIdentifier ~ EOI + } + + final def parseTableSchema: Rule1[Seq[StructField]] = rule { + ws ~ (column + commaSep) ~ EOI + } + protected final def expression: Rule1[Expression] = rule { andExpression ~ (OR ~ andExpression ~> ((e1: Expression, e2: Expression) => Or(e1, e2))).* diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index b63c27e3b0..adb0bdf023 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -609,7 +609,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo // conn.close() } } while (!locked) - Some(conn, new TableIdentifier(table, Some(schemaName))) + Some((conn, new TableIdentifier(table, Some(schemaName)))) case _ => logDebug(s"Taking lock in " + s" ${Thread.currentThread().getId} and " + diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala index ac43d2937a..a145fa9a0c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala @@ -16,17 +16,13 @@ */ package org.apache.spark.sql -import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.expressions.Expression -import org.apache.spark.sql.catalyst.parser.AbstractSqlParser import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan +import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} import org.apache.spark.sql.internal.VariableSubstitution -import org.apache.spark.sql.types.DataType +import org.apache.spark.sql.types.{DataType, StructType} -class SnappySqlParser(session: SnappySession) extends AbstractSqlParser { - - protected def astBuilder = throw new UnsupportedOperationException( - "SnappyData parser does not use AST") +class SnappySqlParser(session: SnappySession) extends SQLParserInterface { @transient protected[sql] val sqlParser: SnappyParser = new SnappyParser(session) @@ -57,6 +53,14 @@ class SnappySqlParser(session: SnappySession) extends AbstractSqlParser { sqlParser.parse(withSubstitution(sqlText), sqlParser.sql.run()) } + override def parseFunctionIdentifier(sqlText: String): FunctionIdentifier = { + sqlParser.parse(sqlText, sqlParser.parseFunctionIdentifier.run()) + } + + override def parseTableSchema(sqlText: String): StructType = { + StructType(sqlParser.parse(sqlText, sqlParser.parseTableSchema.run())) + } + def parsePlan(sqlText: String, clearExecutionData: Boolean): LogicalPlan = { sqlParser.parse(withSubstitution(sqlText), sqlParser.sql.run(), clearExecutionData) } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 6c65e7035e..6d827478e7 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -656,14 +656,13 @@ trait SparkInternals extends Logging { /** * Create a new ExprCode with given arguments. */ - def newExprCode(code: String, isNull: String, - value: String, javaClass: Class[_] = classOf[Object]): ExprCode + def newExprCode(code: String, isNull: String, value: String, dt: DataType): ExprCode /** * Make a copy of ExprCode with given new arguments. */ def copyExprCode(ev: ExprCode, code: String = null, isNull: String = null, - value: String = null, javaClass: Class[_] = classOf[Object]): ExprCode + value: String = null, dt: DataType = null): ExprCode /** * Reset the code field of [[ExprCode]] to empty code block. diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index 9478a45420..f922aece16 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -43,7 +43,7 @@ object SparkSupport extends Logging { * The default Spark version for which core will be built and must exactly match * the version of the embedded SnappyData Spark since this will be used on executors. */ - final val DEFAULT_VERSION = "2.1.1" + final val DEFAULT_VERSION = "2.4.5" private[this] val EXTENDED_VERSION_PATTERN = "([0-9]\\.[0-9]\\.[0-9])\\.[0-9]".r @@ -89,10 +89,11 @@ object SparkSupport extends Logging { * have a public constructor having current SparkContext as the one argument. */ private val implementations: Map[String, String] = Map( - "2.1.0" -> s"$INTERNAL_PACKAGE.Spark210Internals", - "2.1.1" -> s"$INTERNAL_PACKAGE.Spark211Internals", + "2.4.5" -> s"$INTERNAL_PACKAGE.Spark245Internals", + "2.4.4" -> s"$INTERNAL_PACKAGE.Spark244Internals", "2.3.2" -> s"$INTERNAL_PACKAGE.Spark232Internals", - "2.4.4" -> s"$INTERNAL_PACKAGE.Spark244Internals" + "2.1.1" -> s"$INTERNAL_PACKAGE.Spark211Internals", + "2.1.0" -> s"$INTERNAL_PACKAGE.Spark210Internals" ) /** diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala index 3b259ffaae..876034508f 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/ParamLiteral.scala @@ -103,7 +103,7 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { if (!addMutableState) { // use the already added fields - return internals.copyExprCode(ev, initCode, isNullLocal, valueLocal) + return internals.copyExprCode(ev, initCode, isNullLocal, valueLocal, dataType) } val valueRef = literalValueRef val box = internals.boxedType(javaType, ctx) @@ -170,7 +170,7 @@ trait DynamicReplacableConstant extends Expression with SparkSupport { |$valueTerm = $isNull ? $defValue : (($box)$valueResult)$unbox; """.stripMargin, forceInline = true, useFreshName = false) } - internals.copyExprCode(ev, initCode, isNullLocal, valueLocal) + internals.copyExprCode(ev, initCode, isNullLocal, valueLocal, dataType) } } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala index cc4b83274f..13843d829a 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/DictionaryOptimizedMapAccessor.scala @@ -18,12 +18,11 @@ package org.apache.spark.sql.execution import io.snappydata.collection.ObjectHashSet -import org.apache.spark.sql.{SnappySession, SparkSupport} import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.execution.columnar.encoding.ColumnEncoding import org.apache.spark.sql.types.StringType -import org.apache.spark.unsafe.types.UTF8String +import org.apache.spark.sql.{SnappySession, SparkSupport} /** * Makes use of dictionary indexes for strings if any. @@ -92,7 +91,7 @@ object DictionaryOptimizedMapAccessor extends SparkSupport { val keyNull = internals.exprCodeIsNull(keyVar) != "false" val keyValue = internals.exprCodeValue(keyVar) val keyEv = internals.copyExprCode(keyVar, code = "", - isNull = if (keyNull) s"($key == null)" else "false", key, classOf[UTF8String]) + isNull = if (keyNull) s"($key == null)" else "false", key, StringType) val className = accessor.getClassName // for the case when there is no entry in map (hash join), insert a token diff --git a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala index ab3aaa89b5..162dda9f70 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala @@ -24,7 +24,7 @@ import org.apache.spark.sql.catalyst.expressions.objects.StaticInvoke import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, BindReferences, Expression} import org.apache.spark.sql.catalyst.util.DateTimeUtils import org.apache.spark.sql.collection.Utils -import org.apache.spark.sql.types.DateType +import org.apache.spark.sql.types.{DateType, ObjectType} import org.apache.spark.sql.{SparkSession, SparkSupport} /** @@ -70,7 +70,8 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], | throw new RuntimeException("top level null input object"); |}""") } - ctx.currentVars = internals.newExprCode(code = "", nullVar, objVar, javaClass) :: Nil + ctx.currentVars = internals.newExprCode(code = "", nullVar, objVar, + ObjectType(javaClass)) :: Nil val declarations = new StringBuilder def optimizeDate(expr: Expression): ExprCode = expr match { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index 1b10883451..54e6f278ed 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -264,11 +264,11 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } else ("", NULL_NON_PRIM) // field itself is nullable } else ("", -1) if (index < numEntryVars) { - entryVars += ((dataType, javaType, internals.newExprCode(code = "", nullVar, varName), - nullIndex)) + entryVars += ((dataType, javaType, internals.newExprCode(code = "", nullVar, varName, + dataType), nullIndex)) } else { - valClassVars += ((dataType, javaType, internals.newExprCode(code = "", nullVar, varName), - nullIndex)) + valClassVars += ((dataType, javaType, internals.newExprCode(code = "", nullVar, varName, + dataType), nullIndex)) } } val numNullVars = if (numNulls >= 0) (numNulls / 64) + 1 else 0 @@ -496,7 +496,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } declarations.append(s"long $nullValMaskVar = $nullMaskVar;\n") nullValMaskVars(index) = nullValMaskVar - nullVar -> (nullMaskVar, nullValMaskVar) + (nullVar, (nullMaskVar, nullValMaskVar)) }.toMap val vars = if (onlyKeyVars) classVars.take(valueIndex) @@ -553,7 +553,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, else "false") val nullVar = ctx.freshName("isNull") localDeclaration.append(s"\nboolean $nullVar = $nullExpr;") - columnVars += internals.newExprCode(localDeclaration.toString, nullVar, localVar) + columnVars += internals.newExprCode(localDeclaration.toString, nullVar, + localVar, dataType) } } (declarations.toString(), columnVars, nullValMaskVars) @@ -574,13 +575,14 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val evIsNull = internals.exprCodeIsNull(ev) val evValue = internals.exprCodeValue(ev) if (evIsNull == "false") { - (s"final $javaType $newKeyVar", evValue, internals.copyExprCode(ev, value = newKeyVar)) + (s"final $javaType $newKeyVar", evValue, + internals.copyExprCode(ev, value = newKeyVar, dt = expr.dataType)) } else { // new variable for nullability since isNull can be an expression val newNullVar = ctx.freshName("keyIsNull") (s"final $javaType $newKeyVar, final boolean $newNullVar", s"$evValue, $evIsNull", - internals.copyExprCode(ev, isNull = newNullVar, value = newKeyVar)) + internals.copyExprCode(ev, isNull = newNullVar, value = newKeyVar, dt = expr.dataType)) } }.unzip3 val keyDeclarations = keyDecls.mkString(", ") @@ -969,7 +971,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val existsVar = ctx.freshName("exists") genExistenceJoinCodes(entryVar, existsVar, mapKeyCodes, checkCondition, checkCode, numRows, getConsumeResultCode(numRows, - input :+ internals.newExprCode("", "false", existsVar)), keyIsUnique, + input :+ internals.newExprCode("", "false", existsVar, BooleanType)), keyIsUnique, declareLocalVars, moveNextValue, inputCodes) case _ => throw new IllegalArgumentException( diff --git a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala index cb845bca4a..8516aa9651 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala @@ -338,7 +338,7 @@ case class SHAMapAccessor(@transient session: SnappySession, } }""".stripMargin } - internals.newExprCode(exprCode, nullVar, varName) + internals.newExprCode(exprCode, nullVar, varName, dt) } } @@ -739,7 +739,7 @@ case class SHAMapAccessor(@transient session: SnappySession, val dataType = ctx.freshName("dataType") val dataTypeClass = classOf[DataType].getName val elementWitingCode = writeKeyOrValue(baseObjectTerm, offsetTerm, Seq(elementType), - Seq(internals.newExprCode("", "false", arrElement)), "", -1, + Seq(internals.newExprCode("", "false", arrElement, elementType)), "", -1, isKey = true, skipNullEvalCode = true, nestingLevel) val elType = internals.javaType(elementType, ctx) val explodeArraySnippet = @@ -1019,7 +1019,7 @@ case class SHAMapAccessor(@transient session: SnappySession, nestingLevel: Int): (Seq[ExprCode], Seq[DataType]) = st.zipWithIndex.map { case (sf, index) => val (varName, nullVarName) = SHAMapAccessor.generateExplodedStructFieldVars(parentStructVarName, nestingLevel, index) - internals.newExprCode("", nullVarName, varName) -> sf.dataType + internals.newExprCode("", nullVarName, varName, sf.dataType) -> sf.dataType }.unzip /** diff --git a/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala index 34601c605c..49643a24fa 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/SnappySortExec.scala @@ -56,9 +56,9 @@ case class SnappySortExec(sortPlan: SortExec, child: SparkPlan) child.execute().mapPartitionsPreserveInternal(itr => - new AbstractIterator[UnsafeRow] { + new AbstractIterator[InternalRow] { - private lazy val sortedIterator: Iterator[UnsafeRow] = { + private lazy val sortedIterator: Iterator[InternalRow] = { val sorter = sortPlan.createSorter() val metrics = TaskContext.get().taskMetrics() // Remember spill data size of this task before execute this operator so that we can @@ -74,7 +74,7 @@ case class SnappySortExec(sortPlan: SortExec, child: SparkPlan) override def hasNext: Boolean = sortedIterator.hasNext - override def next(): UnsafeRow = sortedIterator.next() + override def next(): InternalRow = sortedIterator.next() }) } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index 61756a5a9d..bbda98fe3b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -319,7 +319,7 @@ case class SnappyHashAggregateExec( | $isNull = ${internals.exprCodeIsNull(ev)}; | $value = ${internals.exprCodeValue(ev)}; """.stripMargin - internals.newExprCode(ev.code.toString + initVars, isNull, value) + internals.newExprCode(ev.code.toString + initVars, isNull, value, e.dataType) } var initBufVar = evaluateVariables(bufVars) @@ -1166,12 +1166,15 @@ case class SnappyHashAggregateExec( byteBufferAccessor.nullAggsBitsetTerm, byteBufferAccessor.numBytesForNullAggBits, skipNullBitsCode = false) val bufferEval = evaluateVariables(bufferVars) - val bufferVarsFromInitVars = byteBufferAccessor.aggregateBufferVars.zip(initVars).map { - case (bufferVarName, initEv) => internals.newExprCode(code = + val bufferVarsFromInitVars = byteBufferAccessor.aggregateBufferVars.indices.map { i => + val bufferVarName = byteBufferAccessor.aggregateBufferVars(i) + val initEv = initVars(i) + internals.newExprCode(code = s""" |$bufferVarName${SHAMapAccessor.nullVarSuffix} = ${internals.exprCodeIsNull(initEv)}; |$bufferVarName = ${internals.exprCodeValue(initEv)};""".stripMargin, - isNull = s"$bufferVarName${SHAMapAccessor.nullVarSuffix}", value = bufferVarName) + isNull = s"$bufferVarName${SHAMapAccessor.nullVarSuffix}", value = bufferVarName, + aggBuffDataTypes(i)) } val bufferEvalFromInitVars = evaluateVariables(bufferVarsFromInitVars) ctx.currentVars = bufferVars ++ input diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index ec7aa18bdc..e1ffbc5e36 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -250,7 +250,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], |$closeForNoContext |${if (numInsertedRowsMetric eq null) "" else s"$numInsertedRowsMetric.${metricAdd(numInsertions)};"} - |${consume(ctx, Seq(internals.newExprCode("", "false", numInsertions, classOf[Long])))} + |${consume(ctx, Seq(internals.newExprCode("", "false", numInsertions, LongType)))} |success = true; |} |finally { @@ -393,7 +393,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], |$closeForNoContext |${if (numInsertedRowsMetric eq null) "" else s"$numInsertedRowsMetric.${metricAdd(numInsertions)};"} - |${consume(ctx, Seq(internals.newExprCode("", "false", numInsertions, classOf[Long])))} + |${consume(ctx, Seq(internals.newExprCode("", "false", numInsertions, LongType)))} |success = true; |} |finally { @@ -509,7 +509,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val rowReadExprs = schema.zipWithIndex.map { case (field, ordinal) => internals.newExprCode("", s"${ctx.INPUT_ROW}.isNullAt($ordinal)", - internals.getValue(ctx.INPUT_ROW, field.dataType, ordinal.toString, ctx), classOf[Int]) + internals.getValue(ctx.INPUT_ROW, field.dataType, ordinal.toString, ctx), IntegerType) } val columnWrite = schema.indices.map { i => @@ -854,16 +854,16 @@ object ColumnWriter extends SparkSupport { } else (lCode, uCode) (ColumnStatsSchema(field.name, field.dataType, nullCountNullable).schema, Seq( - internals.newExprCode(lowerCode, lowerIsNull, lower), - internals.newExprCode(upperCode, upperIsNull, upper), + internals.newExprCode(lowerCode, lowerIsNull, lower, field.dataType), + internals.newExprCode(upperCode, upperIsNull, upper, field.dataType), internals.newExprCode(s"final int $nullCount = $encoder.nullCount();", "false", - nullCount, classOf[Int]))) + nullCount, IntegerType))) } def genStatsRow(ctx: CodegenContext, batchSizeTerm: String, stats: Seq[Seq[ExprCode]], statsSchema: Seq[Seq[Attribute]]): ExprCode = { val statsVars = internals.newExprCode(code = "", isNull = "false", batchSizeTerm, - classOf[Int]) +: stats.flatten + IntegerType) +: stats.flatten val statsExprs = (ColumnStatsSchema.COUNT_ATTRIBUTE +: statsSchema.flatten) .zipWithIndex.map { case (a, i) => a.dataType match { @@ -1120,8 +1120,8 @@ object ColumnWriter extends SparkSupport { s""" |final long $fieldOffset = $baseDataOffset + ($index << 3); |${genCodeColumnWrite(ctx, dt, nullable = false, encoder, encoder, - cursorTerm, internals.newExprCode("", "false", value, classOf[Int]), batchSizeTerm, - fieldOffset, baseOffset)} + cursorTerm, internals.newExprCode("", "false", value, IntegerType), + batchSizeTerm, fieldOffset, baseOffset)} """.stripMargin val (checkNull, assignValue) = dt match { case d: DecimalType => val checkNull = diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index ff53833795..13eaf8aee6 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -174,7 +174,7 @@ abstract case class ColumnTableScan( s""" |$jt $retValName = $name($batchOrdinal); """.stripMargin - internals.newExprCode(exprCode, nullVarForCol, retValName) + internals.newExprCode(exprCode, nullVarForCol, retValName, sqlType) } override def doProduce(ctx: CodegenContext): String = { @@ -436,14 +436,14 @@ abstract case class ColumnTableScan( ColumnDelta.mutableKeyNames.indexOf(attr.name) match { case 0 => ordinalIdTerm = ctx.freshName("ordinalId") - internals.newExprCode("", "false", ordinalIdTerm, classOf[Long]) + internals.newExprCode("", "false", ordinalIdTerm, LongType) case 1 => columnBatchIdTerm = ctx.freshName("columnBatchId") - internals.newExprCode("", "false", columnBatchIdTerm, classOf[Long]) + internals.newExprCode("", "false", columnBatchIdTerm, LongType) case 2 => bucketIdTerm = ctx.freshName("bucketId") - internals.newExprCode("", "false", bucketIdTerm, classOf[Int]) - case 3 => internals.newExprCode("", "false", numBatchRows, classOf[Int]) + internals.newExprCode("", "false", bucketIdTerm, IntegerType) + case 3 => internals.newExprCode("", "false", numBatchRows, IntegerType) case _ => throw new IllegalStateException(s"Unexpected internal attribute $attr") } case (attr, index) => rsIndex += 1; columnsInputMapper(attr, index, rsIndex) @@ -691,7 +691,8 @@ abstract case class ColumnTableScan( |$dictionaryVar = $mutableDecoderGlobal == null | ? $decoderGlobal.getStringDictionary() | : $mutableDecoderGlobal.getStringDictionary(); - """.stripMargin, s"($dictionaryVar == null)", dictionaryVar, classOf[StringDictionary]) + """.stripMargin, s"($dictionaryVar == null)", dictionaryVar, + ObjectType(classOf[StringDictionary])) val dictionaryIndex = if (attr.nullable) { internals.newExprCode( s""" @@ -702,14 +703,14 @@ abstract case class ColumnTableScan( |} else { | $dictionaryIndexVar = $dictionaryVar.size(); |} - """.stripMargin, "false", dictionaryIndexVar, classOf[Int]) + """.stripMargin, "false", dictionaryIndexVar, IntegerType) } else { internals.newExprCode( s""" |$dictionaryIndexVar = $updateDecoder == null | ? $decoder.readDictionaryIndex($buffer, $nonNullPosition) | : $updateDecoder.readDictionaryIndex(); - """.stripMargin, "false", dictionaryIndexVar, classOf[Int]) + """.stripMargin, "false", dictionaryIndexVar, IntegerType) } session.foreach(_.addDictionaryCode(ctx, col, DictionaryCode(dictionary, buffer, dictionaryIndex))) @@ -765,7 +766,7 @@ abstract case class ColumnTableScan( | $isNullVar = true; |} """.stripMargin - internals.newExprCode(code, isNullVar, col) + internals.newExprCode(code, isNullVar, col, sqlType) } else { var code = s""" @@ -776,7 +777,7 @@ abstract case class ColumnTableScan( if (weightVar != null && attr.name.equalsIgnoreCase(Utils.WEIGHTAGE_COLUMN_NAME)) { code += s"if ($col == 1) $col = $weightVar;\n" } - internals.newExprCode(code, "false", col) + internals.newExprCode(code, "false", col, sqlType) } } @@ -1012,7 +1013,7 @@ case class NumBatchRows(varName: String) extends LeafExpression with SparkSuppor override def dataType: DataType = IntegerType override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { - internals.newExprCode("", "false", varName) + internals.newExprCode("", "false", varName, IntegerType) } override def eval(input: InternalRow): Any = @@ -1085,7 +1086,7 @@ case class StartsWithForStats(upper: Expression, lower: Expression, |} | """.stripMargin - internals.copyExprCode(ev, code = code, isNull = "false", value = result, classOf[Boolean]) + internals.copyExprCode(ev, code = code, isNull = "false", value = result, BooleanType) } override def eval(input: InternalRow): Any = diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala index 0598615fa1..577a008477 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala @@ -30,7 +30,7 @@ import org.apache.spark.sql.execution.row.RowExec import org.apache.spark.sql.sources.JdbcExtendedUtils.quotedName import org.apache.spark.sql.sources.{ConnectionProperties, DestroyRelation, JdbcExtendedUtils} import org.apache.spark.sql.store.{CompressionCodecId, StoreUtils} -import org.apache.spark.sql.types.StructType +import org.apache.spark.sql.types.{IntegerType, StructType} /** * Generated code plan for updates into a column table. @@ -221,7 +221,8 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, | final $encoderClass $realEncoderTerm = $encoderTerm.getRealEncoder(); | $encoderTerm.setUpdatePosition($ordinalIdVar); | ${ColumnWriter.genCodeColumnWrite(ctx, dataType, col.nullable, realEncoderTerm, - encoderTerm, cursorTerm, internals.copyExprCode(ev, isNull, field), ordinal)} + encoderTerm, cursorTerm, internals.copyExprCode(ev, isNull = isNull, + value = field, dt = dataType), ordinal)} |} """.stripMargin) // code for invoking the function @@ -249,14 +250,16 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, // equals to 1 i.e LZ4 compression codec id ). // Hence setting each 3rd bit( null count stats) with not null flag. This will never cause // the word to be read as negative number. - val allNullsExprs = Seq(internals.newExprCode("", "true", ""), - internals.newExprCode("", "true", ""), internals.newExprCode("", "false", "-1")) val (statsSchema, stats) = tableSchema.indices.map { i => val field = tableSchema(i) tableToUpdateIndex.get(i) match { case null => + val dataType = field.dataType + val allNullsExprs = Seq(internals.newExprCode("", "true", "", dataType), + internals.newExprCode("", "true", "", dataType), + internals.newExprCode("", "false", "-1", IntegerType)) // write null for unchanged columns apart from null count field (by this update) - (ColumnStatsSchema(field.name, field.dataType, + (ColumnStatsSchema(field.name, dataType, nullCountNullable = false).schema, allNullsExprs) case u => ColumnWriter.genCodeColumnStats(ctx, field, s"$deltaEncoders[$u].getRealEncoder()") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index ab4bf855f1..d82672300b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -26,7 +26,7 @@ import org.apache.spark.sql.execution.TableExec import org.apache.spark.sql.execution.columnar.ExternalStoreUtils import org.apache.spark.sql.sources.ConnectionProperties import org.apache.spark.sql.store.CodeGeneration -import org.apache.spark.sql.types.{StructField, StructType} +import org.apache.spark.sql.types.{LongType, StructField, StructType} /** * Base class for bulk row table insert, update, put, delete operations. @@ -151,7 +151,7 @@ trait RowExec extends TableExec { | $stmt = $connTerm.prepareStatement("$pstmtStr"); | $result = 0L; | $mutateTable(); - | ${consume(ctx, Seq(internals.newExprCode("", "false", result, classOf[Long])))} + | ${consume(ctx, Seq(internals.newExprCode("", "false", result, LongType)))} |} catch (java.sql.SQLException sqle) { | throw new java.io.IOException(sqle.toString(), sqle); |}$commitCode @@ -192,7 +192,8 @@ trait RowExec extends TableExec { val dataType = internals.javaType(f.dataType, ctx) val columnSetterFunction = ctx.freshName("setColumnOfRow") val columnSetterCode = CodeGeneration.getColumnSetterFragment(col, f.dataType, - connProps.dialect, internals.copyExprCode(ev, isNull, field), stmt, schemaFields, ctx) + connProps.dialect, internals.copyExprCode(ev, isNull, field, dataType), stmt, + schemaFields, ctx) ctx.addNewFunction(columnSetterFunction, s""" |private void $columnSetterFunction(final boolean $isNull, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index b5da33711f..90b99261e1 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -262,13 +262,13 @@ abstract case class RowTableScan( val isNullVar = ctx.freshName("isNull") if (useHolder) { internals.newExprCode(s"$code\nfinal boolean $isNullVar = $holder.wasNullAndClear();", - isNullVar, col) + isNullVar, col, dataType) } else { internals.newExprCode(s"$code\nfinal boolean $isNullVar = $col == null;", - isNullVar, col) + isNullVar, col, dataType) } } else { - internals.newExprCode(code, "false", col) + internals.newExprCode(code, "false", col, dataType) } } @@ -381,9 +381,9 @@ abstract case class RowTableScan( if (nullable) { val isNullVar = ctx.freshName("isNull") internals.newExprCode(code + s"\nfinal boolean $isNullVar = $rsVar.wasNull();", - isNullVar, col) + isNullVar, col, dataType) } else { - internals.newExprCode(code, "false", col) + internals.newExprCode(code, "false", col, dataType) } } } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala index 89d94369a5..e4effe5223 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/RuleUtils.scala @@ -582,7 +582,7 @@ object ExtractFiltersAndInnerJoins extends PredicateHelper { case j@Join(_, _, Inner, _) => Some(flattenJoin(j)) case plans.logical.Filter(filterCondition, child) => - Some(Seq(child), splitConjunctivePredicates(filterCondition)) + Some((Seq(child), splitConjunctivePredicates(filterCondition))) case _ => None } } @@ -620,11 +620,10 @@ case class PartialPlan(curPlan: LogicalPlan, replaced: Seq[Replacement], outputS finalPlan case (finalPlan, replacement: Replacement) if finalPlan.replaced.contains(replacement) => finalPlan - case (partial, table) if specializedHandling.isDefinedAt(partial, table) => - specializedHandling.lift(partial, table).get + case (partial, table) if specializedHandling.isDefinedAt((partial, table)) => + specializedHandling.lift((partial, table)).get } } - } case class CompletePlan(plan: LogicalPlan, replaced: Seq[Replacement]) extends SubPlan diff --git a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala index a8e9245b62..03ed039fef 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala @@ -61,7 +61,7 @@ object CodeGeneration extends Logging with SparkSupport { lazy val (codeCacheSize, cacheSize) = { val env = SparkEnv.get val size = if (env ne null) { - env.conf.getInt("spark.sql.codegen.cacheSize", 2000) + env.conf.getInt("spark.sql.codegen.cache.maxEntries", 2000) } else 2000 // don't need as big a cache for other caches (size, size >>> 2) @@ -251,7 +251,8 @@ object CodeGeneration extends Logging with SparkSupport { dialect: JdbcDialect, row: String, stmt: String, schemaTerm: String, ctx: CodegenContext): String = { val rowInput = (col: Int) => internals.newExprCode(code = "", isNull = s"$row.isNullAt($col)", - value = internals.getValue(row, schema(col).dataType, Integer.toString(col), ctx)) + value = internals.getValue(row, schema(col).dataType, Integer.toString(col), ctx), + schema(col).dataType) genStmtSetters(schema, dialect, rowInput, stmt, schemaTerm, ctx) } diff --git a/docs/best_practices/important_settings.md b/docs/best_practices/important_settings.md index 81aa22e626..3a945ad752 100644 --- a/docs/best_practices/important_settings.md +++ b/docs/best_practices/important_settings.md @@ -169,7 +169,7 @@ Optionally when using the `-XX:+HeapDumpOnOutOfMemoryError` option, you can spec SnappyData uses generated code for best performance for most of the queries and internal operations. This is done for both Spark-side whole-stage code generation for queries, for example,[Technical Preview of Apache Spark 2.0 blog]( https://databricks.com/blog/2016/05/11/apache-spark-2-0-technical-preview-easier-faster-and-smarter.html), and internally by SnappyData for many operations. For example, rolling over data from row buffer to column store or merging batches among others.
The point key lookup queries on row tables, and JDBC inserts bypass this and perform direct operations. However, for all other operations, the product uses code generation for best performance. In many cases, the first query execution is slightly slower than subsequent query executions. This is primarily due to the overhead of compilation of generated code for the query plan and optimized machine code generation by JVM's hotspot JIT. -Each distinct piece of generated code is a separate class which is loaded using its own ClassLoader. To reduce these overheads in multiple runs, this class is reused using a cache whose size is controlled by **spark.sql.codegen.cacheSize** property (default is 2000). Thus when the size limit of the cache is breached, the older classes that are used for a while gets removed from the cache. +Each distinct piece of generated code is a separate class which is loaded using its own ClassLoader. To reduce these overheads in multiple runs, this class is reused using a cache whose size is controlled by **spark.sql.codegen.cache.maxEntries** property (default is 2000). Thus when the size limit of the cache is breached, the older classes that are used for a while gets removed from the cache. Further to minimize the generated plans, SnappyData performs tokenization of the values that are most constant in queries by default. Therefore the queries that differ only in constants can still create the same generated code plan. Thus if an application has a fixed number of query patterns that are used repeatedly, then the effect of the slack during the first execution, due to compilation and JIT, is minimized. @@ -177,7 +177,7 @@ Thus if an application has a fixed number of query patterns that are used repeat !!!note A single query pattern constitutes of queries that differ only in constant values that are embedded in the query string. -For cases where the application has many query patterns, you can increase the value of **spark.sql.codegen.cacheSize** property from the default size of **2000**. +For cases where the application has many query patterns, you can increase the value of **spark.sql.codegen.cache.maxEntries** property from the default size of **2000**. You can also increase the value for JVM's **ReservedCodeCacheSize** property and add additional RAM capacity accordingly. diff --git a/docs/best_practices/setup_cluster.md b/docs/best_practices/setup_cluster.md index a212b17630..0795d72595 100644 --- a/docs/best_practices/setup_cluster.md +++ b/docs/best_practices/setup_cluster.md @@ -69,7 +69,7 @@ Two cores are statically assigned to the low latency pool. Also, the low latency If a query requires all 30 partitions and no low latency queries are running at that time, all 30 cores are assigned to the first query. However, when a low latency query is assigned, the scheduler does its best to allocate cores as soon as tasks from the earlier query finish.
-Applications can explicitly configure to use a particular pool for the current session using a SQL configuration property, `snappydata.scheduler.pool`. For example, the `set snappydata.scheduler.pool=lowlatency` command sets the pool as low latency pool for the current session. +Applications can explicitly configure to use a particular pool for the current session using a SQL configuration property, `spark.scheduler.pool`. For example, the `set spark.scheduler.pool=lowlatency` command sets the pool as low latency pool for the current session. New pools can be added and properties of the existing pools can be configured by modifying the **conf/fairscheduler.xml** file. We do not recommend changing the pool names (`default` and `lowlatency`). @@ -80,7 +80,7 @@ The product is configured with two out-of-the-box pools, that is the **Default p The [**Stages**](/monitoring/monitoring.md#stages) tab on the SnappyData Monitoring Console shows the available pools. When you track a job for an SQL query on the [**SQL**](/monitoring/monitoring.md#sql) tab, it shows the pool that is used in the **Pool Name** column. In-built tasks such as ingestion can show lower priority pools by default to give priority to foreground queries. To configure such priority, do the following: 1. Define the pools in **conf/fairscheduler.xml** -2. Set a pool for a job using Spark API or use `set snappydata.scheduler.pool` property in a SnappySession. +2. Set a pool for a job using Spark API or use `set spark.scheduler.pool` property in a SnappySession. To configure the priority based on specific requirements, you can also either permit the users to set the priority for queries or add some pool allocation logic in the application as per client requirements. diff --git a/docs/configuring_cluster/configuring_cluster.md b/docs/configuring_cluster/configuring_cluster.md index 507c2ba767..3306ae5407 100644 --- a/docs/configuring_cluster/configuring_cluster.md +++ b/docs/configuring_cluster/configuring_cluster.md @@ -119,7 +119,7 @@ Refer to the [SnappyData properties](property_description.md) for the complete l |-spark.jobserver.max-jobs-per-context|The number of jobs that can be run simultaneously in the context. The default is 8.| |-spark.local.dir|Directory to use for "scratch" space in SnappyData, including map output files and RDDs that get stored on disk. This should be on a fast, local disk in your system. It can also be a comma-separated list of multiple directories on different disks.| |-spark.network.timeout|The default timeout for all network interactions while running queries. | -|-spark.sql.codegen.cacheSize|Size of the generated code cache that is used by Spark, in the SnappyData Spark distribution, and by SnappyData. The default is 2000.| +|-spark.sql.codegen.cache.maxEntries|Size of the generated code cache that is used by Spark, in the SnappyData Spark distribution, and by SnappyData. The default is 2000.| |-spark.ssl.enabled|Enables or disables Spark layer encryption. The default is false.| |-spark.ssl.keyPassword|The password to the private key in the key store.| |-spark.ssl.keyStore|Path to the key store file. The path can be absolute or relative to the directory in which the process is started.| diff --git a/docs/configuring_cluster/property_description.md b/docs/configuring_cluster/property_description.md index 2c5099984c..c5631d4798 100644 --- a/docs/configuring_cluster/property_description.md +++ b/docs/configuring_cluster/property_description.md @@ -106,7 +106,7 @@ The following list of commonly used configuration properties can be set to confi |-spark.local.dir|Directory to use for "scratch" space in SnappyData, including map output files and RDDs that get stored on disk. This should be on a fast, local disk in your system. It can also be a comma-separated list of multiple directories on different disks. For more information, refer to [Best Practices](../best_practices/important_settings.md#spark-local-dir).|Lead
Server| |-spark.network.timeout|The default timeout for all network interactions while running queries.|Lead| |-spark.sql.autoBroadcastJoinThreshold|Configures the maximum size in bytes for a table that is broadcast to all server nodes when performing a join. By setting this value to **-1** broadcasting can be disabled. | -|-spark.sql.codegen.cacheSize|Size of the generated code cache. This effectively controls the maximum number of query plans whose generated code (Classes) is cached. The default is 2000. |Lead| +|-spark.sql.codegen.cache.maxEntries|Size of the generated code cache. This effectively controls the maximum number of query plans whose generated code (Classes) is cached. The default is 2000. |Lead| |-spark.sql.aqp.numBootStrapTrials|Number of bootstrap trials to do for calculating error bounds. The default value is100.
This property must be set in the **conf/leads** file.| |-spark.sql.aqp.error|Maximum relative error tolerable in the approximate value calculation. It should be a fractional value not exceeding 1. The default value is0.2.
This property can be set as connection property in the Snappy SQL shell.| |-spark.sql.aqp.confidence|Confidence with which the error bounds are calculated for the approximate value. It should be a fractional value not exceeding 1.
The default value is0.95.
This property can be set as connection property in the Snappy SQL shell.| @@ -187,7 +187,7 @@ node-l -heap-size=4096m -spark.ui.port=9090 -locators=node-b:8888,node-a:9999 -s |-snappydata.sql.partitionPruning|Use this property to set/unset the partition pruning of queries.| |-snappydata.sql.tokenize|Use this property to enable/disable tokenization.| |-snappydata.cache.putIntoInnerJoinResultSize| Use this property with extreme limits such as 1K and 10GB. The default is 100 MB.| -|-snappydata.scheduler.pool|Use this property to define scheduler pool to either default or low latency. You can also assign queries to different pools.| +|-spark.scheduler.pool|Use this property to define scheduler pool to either default or low latency. You can also assign queries to different pools.| |-snappydata.enable-experimental-features|Use this property to enable and disable experimental features. You can call out in case some features are completely broken and need to be removed from the product.| |-snappydata.sql.planCaching|Use this property to enable/disable plan caching. By default it is disabled. |Lead| |sync-commits| See [sync-commits](/reference/configuration_parameters/sync-commits.md)|| diff --git a/docs/monitoring/monitoring.md b/docs/monitoring/monitoring.md index afbcb8f019..dfebfe886b 100644 --- a/docs/monitoring/monitoring.md +++ b/docs/monitoring/monitoring.md @@ -198,7 +198,7 @@ The SQL section shows all the queries and their corresponding details along with | **Colocated** | When colocated tables are joined on the partitioning columns, the join happens locally on the node where data is present, without the need of shuffling the data. This improves the performance of the query significantly instead of broadcasting the data across all the data partitions. | |**Whole-Stage Code Generation** | A whole stage code generation node compiles a sub-tree of plans that support code generation together into a single Java function, which helps improve execution performance. | | **Per node execution timing** | Displays the time required for the execution of each node. If there are too many rows that are not getting filtered or exchanged. | -| **Pool Name** | Default/Low Latency. Applications can explicitly configure the use of this pool using a SQL command `set snappydata.scheduler.pool=lowlatency`. | +| **Pool Name** | Default/Low Latency. Applications can explicitly configure the use of this pool using a SQL command `set spark.scheduler.pool=lowlatency`. | |**Query Node Details**| Hover over a component to view its details. | | **Filter** | Displays the number of rows that are filtered for each node. | | **Joins** | If HashJoin puts pressure on memory, you can change the HashJoin size to use SortMergeJoin to avoid on-heap memory pressure. | diff --git a/encoders/build.gradle b/encoders/build.gradle index f55506666d..27f9096f1f 100644 --- a/encoders/build.gradle +++ b/encoders/build.gradle @@ -34,10 +34,20 @@ dependencies { exclude(group: 'org.scala-lang', module: 'scala-compiler') } - compileOnly "org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}" - compileOnly "org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}" - compileOnly "org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}" - compileOnly "org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkVersion}" + // always use stock spark so that snappy extensions don't get accidently + // included here in snappy-jdbc code. + if (System.properties.containsKey('ideaBuild') && new File(rootDir, 'spark/build.gradle').exists()) { + compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + } else { + compileOnly "org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkConnectorVersion}" + compileOnly "org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkConnectorVersion}" + compileOnly "org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkConnectorVersion}" + compileOnly "org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkConnectorVersion}" + } + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" compile project(":snappy-jdbc_${scalaBinaryVersion}") if (new File(rootDir, 'store/build.gradle').exists()) { diff --git a/encoders/src/main/scala/org/apache/spark/sql/execution/columnar/encoding/ColumnDeltaEncoder.scala b/encoders/src/main/scala/org/apache/spark/sql/execution/columnar/encoding/ColumnDeltaEncoder.scala index 134eb81fd8..799065a129 100644 --- a/encoders/src/main/scala/org/apache/spark/sql/execution/columnar/encoding/ColumnDeltaEncoder.scala +++ b/encoders/src/main/scala/org/apache/spark/sql/execution/columnar/encoding/ColumnDeltaEncoder.scala @@ -674,7 +674,7 @@ object DeltaWriter extends Logging { val evaluator = new CompilerFactory().newScriptEvaluator() evaluator.setClassName("io.snappydata.execute.GeneratedDeltaWriterFactory") evaluator.setParentClassLoader(getClass.getClassLoader) - evaluator.setDefaultImports(defaultImports) + evaluator.setDefaultImports(defaultImports: _*) val (name, complexType) = dataType match { case BooleanType => ("Boolean", "") diff --git a/jdbc/build.gradle b/jdbc/build.gradle index b1e26b331a..c9cd73c783 100644 --- a/jdbc/build.gradle +++ b/jdbc/build.gradle @@ -38,13 +38,12 @@ dependencies { compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" } else { - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkVersion}") - compileOnly("org.eclipse.jetty:jetty-servlet:${jettyVersion}") + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkConnectorVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkConnectorVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkConnectorVersion}") } + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" if (new File(rootDir, 'store/build.gradle').exists()) { compile project(':snappy-store:snappydata-store-client') diff --git a/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataBaseDialect.scala b/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataBaseDialect.scala index aa3dfb9bbf..898d38112f 100644 --- a/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataBaseDialect.scala +++ b/jdbc/src/main/scala/org/apache/spark/sql/SnappyDataBaseDialect.scala @@ -25,7 +25,8 @@ import com.pivotal.gemfirexd.internal.shared.common.reference.Limits.{DB2_LOB_MA import io.snappydata.Constant import org.apache.spark.SparkEnv -import org.apache.spark.sql.catalyst.parser.AbstractSqlParser +import org.apache.spark.sql.catalyst.FunctionIdentifier +import org.apache.spark.sql.catalyst.parser.{AbstractSqlParser, ParserInterface} import org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils import org.apache.spark.sql.jdbc.JdbcType import org.apache.spark.sql.sources.JdbcExtendedUtils.quotedName @@ -79,10 +80,15 @@ abstract class SnappyDataBaseDialect extends JdbcExtendedDialect { case Types.ARRAY | JDBC40Translation.MAP | Types.STRUCT => val sparkSession = session match { case Some(s) => s - case None => SparkSession.builder().getOrCreate() + case None => SparkSession.getActiveSession match { + case Some(s) => s + case None => SparkSession.builder().getOrCreate() + } + } + sparkSession.sessionState.sqlParser match { + case parser: SQLParserInterface => Some(parser.parseDataType(typeName)) + case p => Some(p.asInstanceOf[AbstractSqlParser].parseDataType(typeName)) } - Some(sparkSession.sessionState.sqlParser - .asInstanceOf[AbstractSqlParser].parseDataType(typeName)) case Types.JAVA_OBJECT => // used by some system tables and VTIs // try to get class for the typeName else fallback to Object val userClass = try { @@ -234,6 +240,29 @@ abstract class SnappyDataBaseDialect extends JdbcExtendedDialect { s"partition by column($col)" } +/** + * Extension to [[ParserInterface]] having methods from recent Spark releases + * so that methods like `parseDataType` can be used with older releaases too. + */ +trait SQLParserInterface extends ParserInterface { + + /** + * Parse a string to a [[FunctionIdentifier]]. + */ + def parseFunctionIdentifier(sqlText: String): FunctionIdentifier + + /** + * Parse a string to a [[StructType]]. The passed SQL string should be a comma separated list + * of field definitions which will preserve the correct Hive metadata. + */ + def parseTableSchema(sqlText: String): StructType + + /** + * Parse a string to a [[DataType]]. + */ + def parseDataType(sqlText: String): DataType +} + final class JavaObjectType(override val userClass: java.lang.Class[AnyRef]) extends UserDefinedType[AnyRef] { diff --git a/settings.gradle b/settings.gradle index b64e69ff2c..6161a79d81 100644 --- a/settings.gradle +++ b/settings.gradle @@ -35,6 +35,7 @@ include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File project(':snappy-core_' + scalaBinaryVersion).projectDir = "$rootDir/core" as File @@ -49,6 +50,7 @@ project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0").projectDir = "$r project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2").projectDir = "$rootDir/core/compatibility/spark-2.3.2" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4").projectDir = "$rootDir/core/compatibility/spark-2.4.4" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5").projectDir = "$rootDir/core/compatibility/spark-2.4.5" as File if (sparkConnectorVersion != sparkVersion) { include ':snappy-core-product_' + scalaBinaryVersion @@ -74,13 +76,16 @@ if (new File(rootDir, 'spark/build.gradle').exists()) { include ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-hive-thriftserver_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-mesos_' + scalaBinaryVersion + include ':snappy-spark:snappy-spark-kubernetes_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-unsafe_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-sketch_' + scalaBinaryVersion + include ':snappy-spark:snappy-spark-kvstore_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-assembly_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-streaming-flume_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-streaming-flume-sink_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion + include ':snappy-spark:snappy-spark-avro_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-examples_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-repl_' + scalaBinaryVersion include ':snappy-spark:snappy-spark-launcher_' + scalaBinaryVersion @@ -101,22 +106,26 @@ if (new File(rootDir, 'spark/build.gradle').exists()) { "$rootDir/spark/common/network-shuffle" as File project(':snappy-spark:snappy-spark-network-yarn_' + scalaBinaryVersion).projectDir = "$rootDir/spark/common/network-yarn" as File - project(':snappy-spark:snappy-spark-yarn_' + scalaBinaryVersion).projectDir = "$rootDir/spark/yarn" as File + project(':snappy-spark:snappy-spark-yarn_' + scalaBinaryVersion).projectDir = "$rootDir/spark/resource-managers/yarn" as File project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion).projectDir = "$rootDir/spark/streaming" as File project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion).projectDir = "$rootDir/spark/sql/catalyst" as File project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion).projectDir = "$rootDir/spark/sql/core" as File project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion).projectDir = "$rootDir/spark/sql/hive" as File project(':snappy-spark:snappy-spark-hive-thriftserver_' + scalaBinaryVersion).projectDir = "$rootDir/spark/sql/hive-thriftserver" as File - project(':snappy-spark:snappy-spark-mesos_' + scalaBinaryVersion).projectDir = "$rootDir/spark/mesos" as File + project(':snappy-spark:snappy-spark-mesos_' + scalaBinaryVersion).projectDir = "$rootDir/spark/resource-managers/mesos" as File + project(':snappy-spark:snappy-spark-kubernetes_' + scalaBinaryVersion).projectDir = "$rootDir/spark/resource-managers/kubernetes/core" as File project(':snappy-spark:snappy-spark-unsafe_' + scalaBinaryVersion).projectDir = "$rootDir/spark/common/unsafe" as File project(':snappy-spark:snappy-spark-sketch_' + scalaBinaryVersion).projectDir = "$rootDir/spark/common/sketch" as File + project(':snappy-spark:snappy-spark-kvstore_' + scalaBinaryVersion).projectDir = + "$rootDir/spark/common/kvstore" as File project(':snappy-spark:snappy-spark-assembly_' + scalaBinaryVersion).projectDir = "$rootDir/spark/assembly" as File project(':snappy-spark:snappy-spark-streaming-flume_' + scalaBinaryVersion).projectDir = "$rootDir/spark/external/flume" as File project(':snappy-spark:snappy-spark-streaming-flume-sink_' + scalaBinaryVersion).projectDir = "$rootDir/spark/external/flume-sink" as File project(':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion).projectDir = "$rootDir/spark/external/kafka-0-10" as File project(':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion).projectDir = "$rootDir/spark/external/kafka-0-10-sql" as File + project(':snappy-spark:snappy-spark-avro_' + scalaBinaryVersion).projectDir = "$rootDir/spark/external/avro" as File project(':snappy-spark:snappy-spark-examples_' + scalaBinaryVersion).projectDir = "$rootDir/spark/examples" as File project(':snappy-spark:snappy-spark-repl_' + scalaBinaryVersion).projectDir = "$rootDir/spark/repl" as File project(':snappy-spark:snappy-spark-launcher_' + scalaBinaryVersion).projectDir = "$rootDir/spark/launcher" as File diff --git a/spark b/spark index f700acb297..0943767dca 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit f700acb297b2e76122604c0d8d47d59c2dd9d0ea +Subproject commit 0943767dca6aeec32bd25cc19a4ab423bff1f5db diff --git a/spark-jobserver b/spark-jobserver index 9ee48b2162..416c254a07 160000 --- a/spark-jobserver +++ b/spark-jobserver @@ -1 +1 @@ -Subproject commit 9ee48b2162d12a1a565a1aedf7580b72e3181455 +Subproject commit 416c254a07bef6bf4d7e36350fd6168f9e003de1 From 6f811fa9f0df948dbb1d59cf8a2d5bc023c34b9f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 12 Feb 2020 06:44:02 +0530 Subject: [PATCH 39/80] update store link --- store | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store b/store index 7175d0f1a6..97026ff140 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 7175d0f1a6d28611962b6ff7bd495856e8e0abed +Subproject commit 97026ff140fa5fcc2c26d555ae1b5838d35c069d From 9c579a11bc6956d427be02828e921623d403b8ee Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 12 Feb 2020 07:16:29 +0530 Subject: [PATCH 40/80] support for latest 2.1 Spark (2.1.3) and 2.3 Spark (2.3.4) --- .../sql/internal/Spark210Internals.scala | 5 + .../sql/internal/Spark211Internals.scala | 5 + core/compatibility/spark-2.1.3/build.gradle | 69 ++++++++++ .../sql/internal/Spark213Internals.scala | 122 ++++++++++++++++++ .../spark/sql/internal/Spark21Internals.scala | 4 - core/compatibility/spark-2.3.4/build.gradle | 81 ++++++++++++ .../sql/internal/Spark234Internals.scala | 27 ++++ .../org/apache/spark/sql/SparkSupport.scala | 2 + encoders/build.gradle | 1 + settings.gradle | 4 + 10 files changed, 316 insertions(+), 4 deletions(-) create mode 100644 core/compatibility/spark-2.1.3/build.gradle create mode 100644 core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala create mode 100644 core/compatibility/spark-2.3.4/build.gradle create mode 100644 core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 1ddfd18d9c..65a5ef2f69 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -22,6 +22,7 @@ import org.apache.spark.SparkException import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType} import org.apache.spark.sql.catalyst.plans.logical.Statistics +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.execution.CacheManager import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{SparkInternals, SparkSession} @@ -33,6 +34,10 @@ class Spark210Internals extends Spark21Internals { override def version: String = "2.1.0" + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + new CaseInsensitiveMap(map) + } + // scalastyle:off override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index 27aee04ad7..667ffe4fa7 100644 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -25,6 +25,7 @@ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Statistics} +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.execution.CacheManager import org.apache.spark.sql.types.StructType import org.apache.spark.storage.StorageLevel @@ -45,6 +46,10 @@ class Spark211Internals extends Spark21Internals { plan.mapExpressions(f) } + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + new CaseInsensitiveMap(map) + } + // scalastyle:off override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, diff --git a/core/compatibility/spark-2.1.3/build.gradle b/core/compatibility/spark-2.1.3/build.gradle new file mode 100644 index 0000000000..cc300780c0 --- /dev/null +++ b/core/compatibility/spark-2.1.3/build.gradle @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +// directly include the base classes to ensure everything is compiled with Spark 2.1.3 +sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" +sourceSets.main.java.srcDirs = [] + +String spark213Version = '2.1.3' + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark213Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark213Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark213Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark213Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark213Version}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + + exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) + } +} + +archivesBaseName = "snappydata-core-compat-spark${spark213Version}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${spark213Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala b/core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala new file mode 100644 index 0000000000..ca97337192 --- /dev/null +++ b/core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +package org.apache.spark.sql.internal + +import io.snappydata.sql.catalog.SnappyExternalCatalog + +import org.apache.spark.SparkException +import org.apache.spark.sql._ +import org.apache.spark.sql.catalyst.TableIdentifier +import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} +import org.apache.spark.sql.catalyst.expressions.Expression +import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Statistics} +import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap +import org.apache.spark.sql.execution.CacheManager +import org.apache.spark.sql.types.StructType +import org.apache.spark.storage.StorageLevel + +/** + * Implementation of [[SparkInternals]] for Spark 2.1.3. + */ +class Spark213Internals extends Spark21Internals { + + override def version: String = "2.1.3" + + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, + cascade: Boolean, blocking: Boolean): Unit = { + spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) + } + + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { + plan.mapExpressions(f) + } + + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + CaseInsensitiveMap[String](map) + } + + // scalastyle:off + + override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, + storage: CatalogStorageFormat, schema: StructType, provider: Option[String], + partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], + owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], + stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], + comment: Option[String], unsupportedFeatures: Seq[String], + tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, + ignoredProperties: Map[String, String]): CatalogTable = { + if (ignoredProperties.nonEmpty) { + throw new SparkException(s"ignoredProperties should be always empty in Spark $version") + } + CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, + bucketSpec, owner, createTime, lastAccessTime, properties, + stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, + unsupportedFeatures, tracksPartitionsInCatalog, schemaPreservesCase) + } + + // scalastyle:on + + override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = + catalogTable.schemaPreservesCase + + override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, + table: String, newSchema: StructType): Unit = { + externalCatalog.alterTableSchema(schemaName, table, newSchema) + } + + override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { + new SmartConnectorExternalCatalog213(session) + } + + override def newCacheManager(): CacheManager = new SnappyCacheManager213 +} + +/** + * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. + */ +final class SnappyCacheManager213 extends CacheManager { + + override def cacheQuery(query: Dataset[_], tableName: Option[String], + storageLevel: StorageLevel): Unit = { + super.cacheQuery(query, tableName, storageLevel) + // clear plan cache since cached representation can change existing plans + query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() + } + + override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + super.uncacheQuery(session, plan, blocking) + session.asInstanceOf[SnappySession].clearPlanCache() + } + + override def recacheByPlan(session: SparkSession, plan: LogicalPlan): Unit = { + super.recacheByPlan(session, plan) + session.asInstanceOf[SnappySession].clearPlanCache() + } + + override def recacheByPath(session: SparkSession, resourcePath: String): Unit = { + super.recacheByPath(session, resourcePath) + session.asInstanceOf[SnappySession].clearPlanCache() + } +} + +final class SmartConnectorExternalCatalog213(session: SparkSession) + extends SmartConnectorExternalCatalog21(session) { + + override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = + alterTableSchemaImpl(schemaName, table, newSchema) +} diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index f0620e2468..e4fe57fc08 100644 --- a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -193,10 +193,6 @@ abstract class Spark21Internals extends SparkInternals { WholeStageCodegenExec(plan) } - override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - new CaseInsensitiveMap(map) - } - def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { // if the call is done the second time, then attach in embedded mode // too since this is coming from ToolsCallbackImpl diff --git a/core/compatibility/spark-2.3.4/build.gradle b/core/compatibility/spark-2.3.4/build.gradle new file mode 100644 index 0000000000..46b101ee8a --- /dev/null +++ b/core/compatibility/spark-2.3.4/build.gradle @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +// directly include the base classes to ensure everything is compiled with Spark 2.3.4 +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" +sourceSets.main.scala.srcDir "../spark-2.3.x/specific/scala" +sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" +sourceSets.main.scala.srcDir "../spark-2.3.x/specific/java" +sourceSets.main.java.srcDirs = [] + +String spark234Version = '2.3.4' + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark234Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark234Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark234Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark234Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark234Version}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { + exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) + exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') + + exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) + exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) + } +} + +task packageScalaDocs(type: Jar, dependsOn: scaladoc) { + classifier = 'javadoc' + from scaladoc +} +if (rootProject.hasProperty('enablePublish')) { + artifacts { + archives packageScalaDocs, packageSources + } +} + +archivesBaseName = "snappydata-core-compat-spark${spark234Version}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${spark234Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala b/core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala new file mode 100644 index 0000000000..b935f02922 --- /dev/null +++ b/core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.internal + +import org.apache.spark.sql.SparkInternals + +/** + * Implementation of [[SparkInternals]] for Spark 2.3.4. + */ +class Spark234Internals extends Spark23Internals { + + override def version: String = "2.3.4" +} diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index f922aece16..e7e36dadba 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -91,7 +91,9 @@ object SparkSupport extends Logging { private val implementations: Map[String, String] = Map( "2.4.5" -> s"$INTERNAL_PACKAGE.Spark245Internals", "2.4.4" -> s"$INTERNAL_PACKAGE.Spark244Internals", + "2.3.4" -> s"$INTERNAL_PACKAGE.Spark234Internals", "2.3.2" -> s"$INTERNAL_PACKAGE.Spark232Internals", + "2.1.3" -> s"$INTERNAL_PACKAGE.Spark213Internals", "2.1.1" -> s"$INTERNAL_PACKAGE.Spark211Internals", "2.1.0" -> s"$INTERNAL_PACKAGE.Spark210Internals" ) diff --git a/encoders/build.gradle b/encoders/build.gradle index 27f9096f1f..9e5490c218 100644 --- a/encoders/build.gradle +++ b/encoders/build.gradle @@ -56,6 +56,7 @@ dependencies { compile group: 'io.snappydata', name: 'snappydata-store-core', version: snappyStoreVersion } + compile "org.codehaus.janino:janino:${janinoVersion}" compile "org.eclipse.collections:eclipse-collections-api:${eclipseCollectionsVersion}" compile "org.eclipse.collections:eclipse-collections:${eclipseCollectionsVersion}" compile "org.apache.tomcat:tomcat-jdbc:${tomcatJdbcVersion}" diff --git a/settings.gradle b/settings.gradle index 6161a79d81..1ae52df946 100644 --- a/settings.gradle +++ b/settings.gradle @@ -33,7 +33,9 @@ include ':snappy-encoders_' + scalaBinaryVersion // compatibility modules for all supported Spark releases include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.3" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3.4" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5" @@ -48,7 +50,9 @@ project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoder project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0").projectDir = "$rootDir/core/compatibility/spark-2.1.0" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.3").projectDir = "$rootDir/core/compatibility/spark-2.1.3" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2").projectDir = "$rootDir/core/compatibility/spark-2.3.2" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3.4").projectDir = "$rootDir/core/compatibility/spark-2.3.4" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4").projectDir = "$rootDir/core/compatibility/spark-2.4.4" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5").projectDir = "$rootDir/core/compatibility/spark-2.4.5" as File From 0f707e810349b3203b0027bd94a83087e7ce96de Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 17 Feb 2020 23:37:26 +0530 Subject: [PATCH 41/80] fixing build and runtime issues in tests --- build.gradle | 23 +++++-- cluster/build.gradle | 8 +++ .../cluster/ExecutorInitiator.scala | 2 +- .../gemxd/SparkSQLPrepareImpl.scala | 30 +++++---- .../org/apache/spark/SparkCallbacks.scala | 6 +- .../spark/deploy/PackageAndDepUtils.scala | 18 +++-- .../SnappyCoarseGrainedExecutorBackend.scala | 13 ++-- .../spark/executor/SnappyExecutor.scala | 9 ++- .../memory/SnappyUnifiedMemoryManager.scala | 2 +- .../SnappyHiveThriftServer2.scala | 2 +- .../apache/spark/ui/SnappyDashboardPage.scala | 27 ++++---- .../apache/spark/ui/SnappyDashboardTab.scala | 14 ++-- .../spark/ui/SnappyMemberDetailsPage.scala | 33 +++++---- .../org/apache/spark/ui/SnappyStatsPage.scala | 7 +- compatibilityTests/build.gradle | 3 + .../spark/sql/SnappySQLConfEntrySuite.scala | 5 +- .../streaming/SnappyForeachSinkSuite.scala | 23 ------- .../sources/SnappyForeachWriterSuite.scala} | 5 +- .../SnappyTextSocketStreamSuite.scala | 6 +- .../sql/kafka010/SnappyKafkaSourceSuite.scala | 11 ++- .../apache/spark/sql/CachedDataFrame.scala | 4 +- .../org/apache/spark/sql/SnappyContext.scala | 2 +- .../spark/sql/SnappyContextFunctions.scala | 4 +- .../org/apache/spark/sql/SnappyParser.scala | 2 +- .../org/apache/spark/sql/SnappySession.scala | 18 +++-- .../apache/spark/sql/SnappyStrategies.scala | 2 +- .../sql/execution/CodegenSparkFallback.scala | 4 +- .../spark/sql/execution/TableExec.scala | 2 +- .../columnar/impl/ColumnFormatRelation.scala | 2 +- .../impl/JDBCSourceAsColumnarStore.scala | 4 +- .../org/apache/spark/sql/execution/ddl.scala | 8 +-- .../sql/execution/row/RowFormatScanRDD.scala | 4 +- .../sql/internal/SnappySessionCatalog.scala | 4 +- .../apache/spark/sql/internal/session.scala | 4 +- .../sql/sources/SnappyOptimizations.scala | 3 +- .../spark/sql/streaming/StreamSqlHelper.scala | 2 +- .../streaming/SnappyStreamingContext.scala | 2 +- .../scala/io/snappydata/util/TestUtils.scala | 2 +- .../spark/sql/store/TokenizationTest.scala | 17 ++--- .../snappydata/StreamingExample.scala | 67 +++++++++---------- spark | 2 +- 41 files changed, 209 insertions(+), 197 deletions(-) delete mode 100644 compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyForeachSinkSuite.scala rename compatibilityTests/src/test/scala/org/apache/spark/sql/{SnappyDDLTestSuite.scala => execution/streaming/sources/SnappyForeachWriterSuite.scala} (86%) rename compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/{ => sources}/SnappyTextSocketStreamSuite.scala (87%) diff --git a/build.gradle b/build.gradle index 4c976b840f..29e1c23140 100644 --- a/build.gradle +++ b/build.gradle @@ -929,9 +929,6 @@ task product(type: Zip) { def targets = targetProject.configurations.runtime copy { from(targets) { - // exclude antlr4 explicitly (runtime is still included) - // that gets pulled by antlr gradle plugin - exclude '**antlr4-4*.jar' // exclude scalatest included by spark-tags exclude '**scalatest*.jar' // exclude other test jars @@ -1097,17 +1094,33 @@ task product(type: Zip) { into "${snappyProductDir}/benchmark" } + def sparkProjectRootDir = project(":snappy-spark").projectDir + + if (rootProject.hasProperty('k8s')) { + file("${snappyProductDir}/kubernetes").mkdirs() + copy { + from("${sparkProjectRootDir}/resource-managers/kubernetes/docker/src/main") { + include 'dockerfiles/**' + } + from("${sparkProjectRootDir}/resource-managers/kubernetes/integration-tests") { + include 'tests/**' + } + into "${snappyProductDir}/kubernetes" + } + } + if (rootProject.hasProperty('R.enable')) { def targetRDir = "${snappyProductDir}/R" copy { - from("${project(":snappy-spark").projectDir}/R") + from("${sparkProjectRootDir}/R") into targetRDir } exec { environment "SPARK_HOME", snappyProductDir + environment 'R_PACKAGE_VERSION', sparkVersion environment "NO_TESTS", "1" - environment "CLEAN_INSTALL", "1" + environment '_R_CHECK_FORCE_SUGGESTS_', '0' workingDir targetRDir commandLine "${targetRDir}/check-cran.sh" } diff --git a/cluster/build.gradle b/cluster/build.gradle index 121f4bd905..3c93f506b4 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -44,6 +44,7 @@ dependencies { compile project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-avro_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-yarn_' + scalaBinaryVersion) compile project(':snappy-spark:snappy-spark-graphx_' + scalaBinaryVersion) @@ -51,6 +52,9 @@ dependencies { if (rootProject.hasProperty('mesos')) { compile project(':snappy-spark:snappy-spark-mesos_' + scalaBinaryVersion) } + if (rootProject.hasProperty('k8s')) { + compile project(':snappy-spark:snappy-spark-kubernetes_' + scalaBinaryVersion) + } testCompile project(path: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion, configuration: 'testOutput') @@ -64,6 +68,7 @@ dependencies { compile 'io.snappydata:snappy-spark-streaming_' + scalaBinaryVersion + ':' + snappySparkVersion compile 'io.snappydata:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion + ':' + snappySparkVersion compile 'io.snappydata:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion + ':' + snappySparkVersion + compile 'io.snappydata:snappy-spark-avro_' + scalaBinaryVersion + ':' + snappySparkVersion compile 'io.snappydata:snappy-spark-mllib_' + scalaBinaryVersion + ':' + snappySparkVersion compile 'io.snappydata:snappy-spark-yarn_' + scalaBinaryVersion + ':' + snappySparkVersion compile 'io.snappydata:snappy-spark-graphx_' + scalaBinaryVersion + ':' + snappySparkVersion @@ -71,6 +76,9 @@ dependencies { if (rootProject.hasProperty('mesos')) { compile 'io.snappydata:snappy-spark-mesos_' + scalaBinaryVersion + ':' + snappySparkVersion } + if (rootProject.hasProperty('k8s')) { + compile 'io.snappydata:snappy-spark-kubernetes_' + scalaBinaryVersion + ':' + snappySparkVersion + } testCompile group: 'io.snappydata', name: 'snappy-spark-sql_' + scalaBinaryVersion, version: snappySparkVersion, classifier: 'tests' diff --git a/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala b/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala index 4fb38459a9..021c96e901 100644 --- a/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala +++ b/cluster/src/main/scala/io/snappydata/cluster/ExecutorInitiator.scala @@ -184,7 +184,7 @@ object ExecutorInitiator extends Logging { Runtime.getRuntime.availableProcessors() * 2) env = SparkCallbacks.createExecutorEnv(driverConf, - memberId, executorHost, port, cores, ioEncryptionKey, isLocal = false) + memberId, executorHost, cores, ioEncryptionKey, isLocal = false) LocalDirectoryCleanupUtil.save() // This is not required with snappy diff --git a/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala b/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala index 069714c7c1..a33a1a64fa 100644 --- a/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala +++ b/cluster/src/main/scala/io/snappydata/gemxd/SparkSQLPrepareImpl.scala @@ -31,8 +31,9 @@ import com.pivotal.gemfirexd.internal.shared.common.StoredFormatIds import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState import com.pivotal.gemfirexd.internal.snappy.{LeadNodeExecutionContext, SparkSQLExecute} +import org.apache.spark.sql.SparkSupport import org.apache.spark.sql.catalyst.expressions -import org.apache.spark.sql.catalyst.expressions.{BinaryComparison, CaseWhen, Cast, Exists, Expression, Like, ListQuery, ParamLiteral, PredicateSubquery, ScalarSubquery, SubqueryExpression} +import org.apache.spark.sql.catalyst.expressions.{BinaryComparison, CaseWhen, Cast, Exists, Expression, Like, ListQuery, ParamLiteral, ScalarSubquery, SubqueryExpression} import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution.PutIntoValuesColumnTable @@ -165,7 +166,8 @@ class SparkSQLPrepareImpl(val sql: String, } } -object SparkSQLPrepareImpl{ +object SparkSQLPrepareImpl extends SparkSupport { + def getTableNamesAndDatatype( output: Seq[expressions.Attribute]): (Array[String], Array[DataType]) = output.toArray.map(o => o.name -> o.dataType).unzip @@ -195,32 +197,32 @@ object SparkSQLPrepareImpl{ addParamLiteral(pos, left.dataType, left.nullable, result) bl case blc@BinaryComparison(left: Expression, - Cast(QuestionMark(pos), _)) => + Cast(QuestionMark(pos), _, _)) => addParamLiteral(pos, left.dataType, left.nullable, result) blc case ble@BinaryComparison(left: Expression, CaseWhen(branches, elseValue)) => handleCase(branches, elseValue, left.dataType, left.nullable, result) ble - case blce@BinaryComparison(left: Expression, Cast(CaseWhen(branches, elseValue), _)) => + case blce@BinaryComparison(left: Expression, Cast(CaseWhen(branches, elseValue), _, _)) => handleCase(branches, elseValue, left.dataType, left.nullable, result) blce case br@BinaryComparison(QuestionMark(pos), right: Expression) => addParamLiteral(pos, right.dataType, right.nullable, result) br - case brc@BinaryComparison(Cast(QuestionMark(pos), _), + case brc@BinaryComparison(Cast(QuestionMark(pos), _, _), right: Expression) => addParamLiteral(pos, right.dataType, right.nullable, result) brc case bre@BinaryComparison(CaseWhen(branches, elseValue), right: Expression) => handleCase(branches, elseValue, right.dataType, right.nullable, result) bre - case brce@BinaryComparison(Cast(CaseWhen(branches, elseValue), _), right: Expression) => + case brce@BinaryComparison(Cast(CaseWhen(branches, elseValue), _, _), right: Expression) => handleCase(branches, elseValue, right.dataType, right.nullable, result) brce case l@Like(left: Expression, QuestionMark(pos)) => addParamLiteral(pos, left.dataType, left.nullable, result) l - case lc@Like(left: Expression, Cast(QuestionMark(pos), _)) => + case lc@Like(left: Expression, Cast(QuestionMark(pos), _, _)) => addParamLiteral(pos, left.dataType, left.nullable, result) lc case inlist@org.apache.spark.sql.catalyst.expressions.In(value: Expression, @@ -228,7 +230,7 @@ object SparkSQLPrepareImpl{ list.map { case QuestionMark(pos) => addParamLiteral(pos, value.dataType, value.nullable, result) - case Cast(QuestionMark(pos), _) => + case Cast(QuestionMark(pos), _, _) => addParamLiteral(pos, value.dataType, value.nullable, result) case x => x } @@ -239,10 +241,10 @@ object SparkSQLPrepareImpl{ def remainingParamLiterals(plan: LogicalPlan, result: mutable.HashSet[ParamLiteral]): Unit = { val mapExpression: PartialFunction[Expression, Expression] = { - case c@Cast(QuestionMark(pos), castType: DataType) => + case c@Cast(QuestionMark(pos), castType: DataType, _) => addParamLiteral(pos, castType, nullable = false, result) c - case cc@Cast(CaseWhen(branches, elseValue), castType: DataType) => + case cc@Cast(CaseWhen(branches, elseValue), castType: DataType, _) => handleCase(branches, elseValue, castType, nullable = false, result) cc } @@ -253,9 +255,11 @@ object SparkSQLPrepareImpl{ f: PartialFunction[Expression, Expression]): LogicalPlan = plan transformAllExpressions { case e if f.isDefinedAt(e) => f(e) case sub: SubqueryExpression => sub match { - case l@ListQuery(query, x) => l.copy(handleSubQuery(query, f), x) - case e@Exists(query, x) => e.copy(handleSubQuery(query, f), x) - case p@PredicateSubquery(query, x, y, z) => p.copy(handleSubQuery(query, f), x, y, z) + case l@ListQuery(query, x, y, z) => l.copy(handleSubQuery(query, f), x, y, z) + case e@Exists(query, x, y) => e.copy(handleSubQuery(query, f), x, y) + case p if internals.isPredicateSubquery(p) => + val query = p.asInstanceOf[SubqueryExpression] + internals.copyPredicateSubquery(query, handleSubQuery(query.plan, f), query.exprId) case s@ScalarSubquery(query, x, y) => s.copy(handleSubQuery(query, f), x, y) } } diff --git a/cluster/src/main/scala/org/apache/spark/SparkCallbacks.scala b/cluster/src/main/scala/org/apache/spark/SparkCallbacks.scala index 8e5ab180c6..9f254bf42a 100644 --- a/cluster/src/main/scala/org/apache/spark/SparkCallbacks.scala +++ b/cluster/src/main/scala/org/apache/spark/SparkCallbacks.scala @@ -34,13 +34,12 @@ object SparkCallbacks { driverConf: SparkConf, executorId: String, hostname: String, - port: Int, numCores: Int, ioEncryptionKey: Option[Array[Byte]], isLocal: Boolean): SparkEnv = { val env = SparkEnv.createExecutorEnv(driverConf, executorId, hostname, - port, numCores, ioEncryptionKey, isLocal) + numCores, ioEncryptionKey, isLocal) env.memoryManager.asInstanceOf[StoreUnifiedManager].init() env } @@ -56,7 +55,6 @@ object SparkCallbacks { SparkEnv.get.memoryManager.asInstanceOf[StoreUnifiedManager].close env.stop() SparkEnv.set(null) - SparkHadoopUtil.get.stopCredentialUpdater() } } } @@ -70,7 +68,7 @@ object SparkCallbacks { executorConf, new spark.SecurityManager(executorConf), clientMode = true) val driver = fetcher.setupEndpointRefByURI(url) - val cfg = driver.askWithRetry[SparkAppConfig](RetrieveSparkAppConfig) + val cfg = driver.askSync[SparkAppConfig](RetrieveSparkAppConfig) val ioEncryptionKey: Option[Array[Byte]] = cfg.ioEncryptionKey val props = cfg.sparkProperties ++ Seq[(String, String)](("spark.app.id", appId)) diff --git a/cluster/src/main/scala/org/apache/spark/deploy/PackageAndDepUtils.scala b/cluster/src/main/scala/org/apache/spark/deploy/PackageAndDepUtils.scala index c0ddc8aee7..915d6e7287 100644 --- a/cluster/src/main/scala/org/apache/spark/deploy/PackageAndDepUtils.scala +++ b/cluster/src/main/scala/org/apache/spark/deploy/PackageAndDepUtils.scala @@ -19,16 +19,19 @@ package org.apache.spark.deploy object GetJarsAndDependencies { - val usage = s"Usage: GetJarsAndDependencies" + + val usage: String = s"Usage: GetJarsAndDependencies" + s" [--repos repositories] [--jarcache path] coordinates" + private def isSwitch(s: String): Boolean = s(0) == '-' + + // scalastyle:off println + def main(args: Array[String]) { if (args.length == 0) println(usage) val arglist = args.toList type OptionMap = Map[Symbol, String] def nextOption(map: OptionMap, list: List[String]): OptionMap = { - def isSwitch(s: String) = (s(0) == '-') list match { case Nil => map @@ -36,10 +39,10 @@ object GetJarsAndDependencies { nextOption(map ++ Map('jarcache -> value), tail) case "--repos" :: value :: tail => nextOption(map ++ Map('repos -> value), tail) - case string :: opt2 :: tail if isSwitch(opt2) => + case string :: opt2 :: _ if isSwitch(opt2) => nextOption(map ++ Map('coordinates -> string), list.tail) case string :: Nil => nextOption(map ++ Map('coordinates -> string), list.tail) - case option :: tail => println("Unknown option " + option) + case option :: _ => println("Unknown option " + option) Map.empty } } @@ -51,11 +54,14 @@ object GetJarsAndDependencies { val ivyPath = options.get('jarcache) println(PackageAndDepUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath)) } + + // scalastyle:on println } object PackageAndDepUtils { def resolveMavenCoordinates(coordinates: String, remoteRepos: Option[String], - ivyPath: Option[String], exclusions: Seq[String] = Nil, isTest: Boolean = false): String = { - SparkSubmitUtils.resolveMavenCoordinates(coordinates, remoteRepos, ivyPath, exclusions, isTest) + ivyPath: Option[String], exclusions: Seq[String] = Nil, isTest: Boolean = false): String = { + SparkSubmitUtils.resolveMavenCoordinates(coordinates, + SparkSubmitUtils.buildIvySettings(remoteRepos, ivyPath), exclusions, isTest) } } diff --git a/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala b/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala index ca9d306a98..5f760a384d 100644 --- a/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala +++ b/cluster/src/main/scala/org/apache/spark/executor/SnappyCoarseGrainedExecutorBackend.scala @@ -23,7 +23,6 @@ import com.gemstone.gemfire.CancelException import com.pivotal.gemfirexd.internal.engine.Misc import io.snappydata.cluster.ExecutorInitiator -import org.apache.spark.deploy.SparkHadoopUtil import org.apache.spark.rpc.RpcEnv import org.apache.spark.sql.SnappyContext import org.apache.spark.{SparkEnv, TaskState} @@ -39,9 +38,9 @@ class SnappyCoarseGrainedExecutorBackend( extends CoarseGrainedExecutorBackend(rpcEnv, driverUrl, executorId, hostName, cores, userClassPath, env) { - override def onStop() { + override def onStop(): Unit = { SnappyContext.clearStaticArtifacts() - exitWithoutRestart() + exitWithoutRestart("onStop()") } override def onStart(): Unit = { @@ -72,7 +71,7 @@ class SnappyCoarseGrainedExecutorBackend( override def exitExecutor(code: Int, reason: String, throwable: Throwable, notifyDriver: Boolean = true): Unit = { - exitWithoutRestart() + exitWithoutRestart(reason) // See if the VM is going down try { Misc.checkIfCacheClosing(null) @@ -93,13 +92,13 @@ class SnappyCoarseGrainedExecutorBackend( } - def exitWithoutRestart(): Unit = { + def exitWithoutRestart(reason: String): Unit = { if (executor != null) { // kill all the running tasks // When tasks are killed, the task threads cannot be interrupted // as snappy may be writing to an oplog and it generates a // DiskAccessException. This DAE ends up closing the underlying regions. - executor.killAllTasks(interruptThread = false) + executor.killAllTasks(interruptThread = false, reason) executor.stop() } // stop the actor system @@ -107,7 +106,5 @@ class SnappyCoarseGrainedExecutorBackend( if (rpcEnv != null) { rpcEnv.shutdown() } - - SparkHadoopUtil.get.stopCredentialUpdater() } } diff --git a/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala b/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala index dad2864835..9b44eae8c6 100644 --- a/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala +++ b/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala @@ -141,15 +141,14 @@ class SnappyExecutor( override def equals(obj: Any): Boolean = { obj match { - case x: ClassLoaderKey => - (x.appName, x.appTime).equals(appName, appTime) + case x: ClassLoaderKey => x.appName == appName && x.appTime == appTime case _ => false } } } - override def updateDependencies(newFiles: mutable.HashMap[String, Long], - newJars: mutable.HashMap[String, Long]): Unit = { + override def updateDependencies(newFiles: mutable.Map[String, Long], + newJars: mutable.Map[String, Long]): Unit = { super.updateDependencies(newFiles, newJars) synchronized { val taskDeserializationProps = Executor.taskDeserializationProps.get() @@ -209,7 +208,7 @@ class SnappyExecutor( def removeJarsFromExecutorLoader(jars: Array[String]): Unit = { synchronized { - val updatedURLs = urlClassLoader.getURLs().toBuffer + val updatedURLs = urlClassLoader.getURLs.toBuffer jars.foreach(name => { val localName = name.split("/").last val jarFile = new File(SparkFiles.getRootDirectory(), localName) diff --git a/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala b/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala index 81c3a13011..15cdcbe59d 100644 --- a/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala +++ b/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala @@ -77,7 +77,7 @@ class SnappyUnifiedMemoryManager private[memory]( * divisor, but even the divisor used may not compensate for the skew in some * cases but it should be acceptable for those rare cases. */ - private val maxPartResultSize = Utils.getMaxResultSize(conf) / + private val maxPartResultSize = conf.get(org.apache.spark.internal.config.MAX_RESULT_SIZE) / math.min(8, Runtime.getRuntime.availableProcessors()) /** diff --git a/cluster/src/main/scala/org/apache/spark/sql/hive/thriftserver/SnappyHiveThriftServer2.scala b/cluster/src/main/scala/org/apache/spark/sql/hive/thriftserver/SnappyHiveThriftServer2.scala index 87d81325fe..1fba8cad36 100644 --- a/cluster/src/main/scala/org/apache/spark/sql/hive/thriftserver/SnappyHiveThriftServer2.scala +++ b/cluster/src/main/scala/org/apache/spark/sql/hive/thriftserver/SnappyHiveThriftServer2.scala @@ -48,7 +48,7 @@ object SnappyHiveThriftServer2 extends Logging { } else new SnappySession(sc) SparkSQLEnv.sqlContext = sparkSession.sqlContext SparkSQLEnv.sparkContext = sc - sparkSession.conf.set("spark.sql.hive.version", HiveUtils.hiveExecutionVersion) + sparkSession.conf.set(HiveUtils.FAKE_HIVE_VERSION.key, HiveUtils.builtinHiveVersion) // New executionHive is used to get the HiveServer2 configuration. When SnappySession // is being used then only the hive server2 settings are copied from it while the diff --git a/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardPage.scala b/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardPage.scala index e4309159ea..3c274426a8 100644 --- a/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardPage.scala +++ b/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardPage.scala @@ -29,7 +29,7 @@ import org.apache.spark.internal.Logging private[ui] class SnappyDashboardPage (parent: SnappyDashboardTab) extends WebUIPage("") with Logging { - private val startDate = Calendar.getInstance().getTime() + private val startDate = Calendar.getInstance().getTime override def render(request: HttpServletRequest): Seq[Node] = { @@ -43,8 +43,8 @@ private[ui] class SnappyDashboardPage (parent: SnappyDashboardTab) val clustersStatsTitle = createTitleNode(SnappyDashboardPage.clusterStatsTitle, SnappyDashboardPage.clusterStatsTitleTooltip, "clustersStatsTitle", - true) - val clusterDetails = clusterStats + display = true) + val clusterDetails = clusterStats() clustersStatsTitle ++ clusterDetails } @@ -53,8 +53,8 @@ private[ui] class SnappyDashboardPage (parent: SnappyDashboardTab) val membersStatsTitle = createTitleNode(SnappyDashboardPage.membersStatsTitle, SnappyDashboardPage.membersStatsTitleTooltip, "membersStatsTitle", - true) - val membersStatsTable = memberStats + display = true) + val membersStatsTable = memberStats() membersStatsTitle ++ membersStatsTable } @@ -63,8 +63,8 @@ private[ui] class SnappyDashboardPage (parent: SnappyDashboardTab) val tablesStatsTitle = createTitleNode(SnappyDashboardPage.tablesStatsTitle, SnappyDashboardPage.tablesStatsTitleTooltip, "tablesStatsTitle", - true) - val tablesStatsTable = tableStats + display = true) + val tablesStatsTable = tableStats() tablesStatsTitle ++ tablesStatsTable } @@ -73,22 +73,21 @@ private[ui] class SnappyDashboardPage (parent: SnappyDashboardTab) val extTablesStatsTitle = createTitleNode(SnappyDashboardPage.extTablesStatsTitle, SnappyDashboardPage.extTablesStatsTitleTooltip, "extTablesStatsTitle", - false) - val extTablesStatsTable = extTableStats + display = false) + val extTablesStatsTable = extTableStats() extTablesStatsTitle ++ extTablesStatsTable } - val jsScripts = + val jsScripts = + val pageContent = jsScripts ++ dataNode ++ pageTitleNode ++ clusterStatsDetails ++ membersStatsDetails ++ tablesStatsDetails ++ extTablesStatsDetails - UIUtils.headerSparkPage(pageHeaderText, pageContent, parent, Some(500), + UIUtils.headerSparkPage(request, pageHeaderText, pageContent, parent, Some(500), useDataTables = true, isSnappyPage = true) - } private def createPageTitleNode(title: String): Seq[Node] = { diff --git a/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardTab.scala b/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardTab.scala index ef1632f73a..42b07cedb1 100644 --- a/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardTab.scala +++ b/cluster/src/main/scala/org/apache/spark/ui/SnappyDashboardTab.scala @@ -22,17 +22,17 @@ package org.apache.spark.ui import javax.servlet.http.HttpServletRequest import scala.collection.mutable.ArrayBuffer +import scala.util.control.Breaks._ import io.snappydata.gemxd.SnappyDataVersion -import scala.util.control.Breaks._ import org.apache.spark.internal.Logging import org.apache.spark.status.api.v1.SnappyApiRootResource import org.apache.spark.ui.JettyUtils._ class SnappyDashboardTab(sparkUI: SparkUI) extends SparkUITab(sparkUI, "dashboard") with Logging { - val parent = sparkUI - val appUIBaseAddress = parent.appUIAddress + val parent: SparkUI = sparkUI + val appUIBaseAddress: String = parent.webUrl // Attaching dashboard ui page val snappyDashboardPage = new SnappyDashboardPage(this) @@ -44,8 +44,8 @@ class SnappyDashboardTab(sparkUI: SparkUI) extends SparkUITab(sparkUI, "dashboar parent.attachTab(this) // Move Dashboard tab to first place - val tabsList = parent.getTabs - val newTabsList = ArrayBuffer[WebUITab]() + val tabsList: Seq[WebUITab] = parent.getTabs + val newTabsList: ArrayBuffer[WebUITab] = ArrayBuffer[WebUITab]() // Add dashboard first newTabsList += tabsList.last // Add remaining tabs in tabs list @@ -61,11 +61,11 @@ class SnappyDashboardTab(sparkUI: SparkUI) extends SparkUITab(sparkUI, "dashboar // Set SnappyData Product Version in SparkUI SparkUI.setProductVersion(SnappyDataVersion.getSnappyDataProductVersion) - updateRedirectionHandler + updateRedirectionHandler() // Replace default spark jobs page redirection handler by Snappy Dashboard page // redirection handler - def updateRedirectionHandler: Unit = { + def updateRedirectionHandler(): Unit = { val handlers = parent.getHandlers breakable { handlers.foreach(h => { diff --git a/cluster/src/main/scala/org/apache/spark/ui/SnappyMemberDetailsPage.scala b/cluster/src/main/scala/org/apache/spark/ui/SnappyMemberDetailsPage.scala index 8604b58a1d..6675986fe9 100644 --- a/cluster/src/main/scala/org/apache/spark/ui/SnappyMemberDetailsPage.scala +++ b/cluster/src/main/scala/org/apache/spark/ui/SnappyMemberDetailsPage.scala @@ -17,8 +17,6 @@ package org.apache.spark.ui import java.io.File -import java.text.SimpleDateFormat -import java.util.Date import javax.servlet.http.HttpServletRequest import scala.collection.mutable @@ -38,8 +36,8 @@ import org.apache.spark.util.Utils private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) extends WebUIPage("memberDetails") with Logging { - private var workDir: File = null - private var logFileName: String = null + private var workDir: File = _ + private var logFileName: String = _ private val defaultBytes: Long = 1024 * 100 private def createPageTitleNode(title: String): Seq[Node] = { @@ -74,11 +72,13 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) val status = memberDetails.getStatus + /* val statusImgUri = if (status.equalsIgnoreCase("running")) { "/static/snappydata/running-status-icon-70x68.png" } else { "/static/snappydata/warning-status-icon-70x68.png" } + */ val memberType = { if (memberDetails.isLead) { @@ -96,7 +96,7 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) } } - val cpuUsage = memberDetails.getCpuActive.toDouble; + // val cpuUsage = memberDetails.getCpuActive.toDouble val diskStoreDiskSpace = memberDetails.getDiskStoreDiskSpace @@ -275,7 +275,7 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) var mem: MemberStatistics = null breakable { allMembers.foreach(m => { - if (m._2.getId().equalsIgnoreCase(memberId)) { + if (m._2.getId.equalsIgnoreCase(memberId)) { mem = m._2 break } @@ -299,10 +299,10 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) val msg = new MemberLogsMessage(collector) msg.setMemberId(memberId) msg.setByteLength(byteLength) - msg.setLogDirectory(workDir); - msg.setLogFileName(logFileName); + msg.setLogDirectory(workDir) + msg.setLogFileName(logFileName) - if (offset == None) { + if (offset.isEmpty) { // set offset null msg.setOffset(null) } else { @@ -313,7 +313,7 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) val memStats = collector.getResult val itr = memStats.iterator() - var logData: java.util.HashMap[String, Any] = new java.util.HashMap[String, Any]; + var logData: java.util.HashMap[String, Any] = new java.util.HashMap[String, Any] while (itr.hasNext) { val o = itr.next().asInstanceOf[ListResultCollectorValue] @@ -388,14 +388,13 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) - val jsScripts = ++ - + val jsScripts = + ++ PageContent = jsScripts ++ pageTitleNode ++ memberStats ++ memberLogTitle ++ content - UIUtils.headerSparkPage(pageHeaderText, PageContent, parent, Some(500), + UIUtils.headerSparkPage(request, pageHeaderText, PageContent, parent, Some(500), useDataTables = true, isSnappyPage = true) } @@ -419,7 +418,7 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) msg.setLogDirectory(workDir) msg.setLogFileName(logFileName) - if (offset == None) { + if (offset.isEmpty) { // set offset null msg.setOffset(null) } else { @@ -430,7 +429,7 @@ private[ui] class SnappyMemberDetailsPage(parent: SnappyDashboardTab) val memStats = collector.getResult val itr = memStats.iterator() - var logData: java.util.HashMap[String, Any] = new java.util.HashMap[String, Any]; + var logData: java.util.HashMap[String, Any] = new java.util.HashMap[String, Any] while (itr.hasNext) { val o = itr.next().asInstanceOf[ListResultCollectorValue] diff --git a/cluster/src/main/scala/org/apache/spark/ui/SnappyStatsPage.scala b/cluster/src/main/scala/org/apache/spark/ui/SnappyStatsPage.scala index 2030cda21d..0412b625ac 100644 --- a/cluster/src/main/scala/org/apache/spark/ui/SnappyStatsPage.scala +++ b/cluster/src/main/scala/org/apache/spark/ui/SnappyStatsPage.scala @@ -19,6 +19,7 @@ package org.apache.spark.ui +import java.text.NumberFormat import javax.servlet.http.HttpServletRequest import scala.xml.Node @@ -32,7 +33,8 @@ import org.apache.spark.util.Utils /** Page showing list of tables currently stored in the cluster */ private[ui] class SnappyStatsPage(parent: SnappyStatsTab) extends WebUIPage("") with Logging { - val numFormatter = java.text.NumberFormat.getIntegerInstance + + val numFormatter: NumberFormat = java.text.NumberFormat.getIntegerInstance def render(request: HttpServletRequest): Seq[Node] = { val uiDisplayInfo = SnappyTableStatsProviderService.getService @@ -45,8 +47,7 @@ private[ui] class SnappyStatsPage(parent: SnappyStatsTab) } else Nil - UIUtils.headerSparkPage("Snappy Store", nodes, parent, Some(500)) - + UIUtils.headerSparkPage(request, "Snappy Store", nodes, parent, Some(500)) } private def header = Seq("Table Name", "Table Type", "Memory Used", "Total Rows") diff --git a/compatibilityTests/build.gradle b/compatibilityTests/build.gradle index bcb2def67f..83d605e570 100644 --- a/compatibilityTests/build.gradle +++ b/compatibilityTests/build.gradle @@ -53,6 +53,8 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-avro_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } @@ -65,6 +67,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-avro_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/SnappySQLConfEntrySuite.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/SnappySQLConfEntrySuite.scala index db8b792435..1e3dfb34cf 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/SnappySQLConfEntrySuite.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/SnappySQLConfEntrySuite.scala @@ -17,7 +17,6 @@ package org.apache.spark.sql import org.apache.spark.sql.internal.SQLConfEntrySuite -import org.apache.spark.sql.test.{SharedSnappySessionContext, SnappySparkTestUtil} +import org.apache.spark.sql.test.SnappySparkTestUtil -class SnappySQLConfEntrySuite extends SQLConfEntrySuite - with SharedSnappySessionContext with SnappySparkTestUtil +class SnappySQLConfEntrySuite extends SQLConfEntrySuite with SnappySparkTestUtil diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyForeachSinkSuite.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyForeachSinkSuite.scala deleted file mode 100644 index f5f7b3f1f9..0000000000 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyForeachSinkSuite.scala +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.execution.streaming - -import org.apache.spark.sql.test.{SharedSnappySessionContext, SnappySparkTestUtil} - -class SnappyForeachSinkSuite extends ForeachSinkSuite - with SharedSnappySessionContext with SnappySparkTestUtil { -} diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/SnappyDDLTestSuite.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/sources/SnappyForeachWriterSuite.scala similarity index 86% rename from compatibilityTests/src/test/scala/org/apache/spark/sql/SnappyDDLTestSuite.scala rename to compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/sources/SnappyForeachWriterSuite.scala index 08d17d3f72..6caae7ce15 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/SnappyDDLTestSuite.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/sources/SnappyForeachWriterSuite.scala @@ -14,10 +14,9 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ -package org.apache.spark.sql +package org.apache.spark.sql.execution.streaming.sources -import org.apache.spark.sql.sources.DDLTestSuite import org.apache.spark.sql.test.{SharedSnappySessionContext, SnappySparkTestUtil} -class SnappyDDLTestSuite extends DDLTestSuite +class SnappyForeachWriterSuite extends ForeachWriterSuite with SharedSnappySessionContext with SnappySparkTestUtil diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyTextSocketStreamSuite.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/sources/SnappyTextSocketStreamSuite.scala similarity index 87% rename from compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyTextSocketStreamSuite.scala rename to compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/sources/SnappyTextSocketStreamSuite.scala index 23011e9123..5572ef44f9 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/SnappyTextSocketStreamSuite.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/execution/streaming/sources/SnappyTextSocketStreamSuite.scala @@ -14,11 +14,9 @@ * permissions and limitations under the License. See accompanying * LICENSE file. */ -package org.apache.spark.sql.execution.streaming +package org.apache.spark.sql.execution.streaming.sources import org.apache.spark.sql.test.{SharedSnappySessionContext, SnappySparkTestUtil} class SnappyTextSocketStreamSuite extends TextSocketStreamSuite - with SharedSnappySessionContext with SnappySparkTestUtil{ - -} + with SharedSnappySessionContext with SnappySparkTestUtil diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/kafka010/SnappyKafkaSourceSuite.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/kafka010/SnappyKafkaSourceSuite.scala index 39c65bfb78..64086bd6a9 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/kafka010/SnappyKafkaSourceSuite.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/kafka010/SnappyKafkaSourceSuite.scala @@ -20,7 +20,16 @@ import org.apache.spark.SparkContext import org.apache.spark.sql.SnappySession import org.apache.spark.sql.test.{SharedSnappySessionContext, SnappySparkTestUtil, TestSnappySession} -class SnappyKafkaSourceSuite extends KafkaSourceSuite +class SnappyKafkaContinuousSourceSuite extends KafkaContinuousSourceSuite + with SharedSnappySessionContext with SnappySparkTestUtil + +class SnappyKafkaMicroBatchSourceSuiteBase extends KafkaMicroBatchSourceSuiteBase + with SharedSnappySessionContext with SnappySparkTestUtil + +class SnappyKafkaMicroBatchV1SourceSuite extends KafkaMicroBatchV1SourceSuite + with SharedSnappySessionContext with SnappySparkTestUtil + +class SnappyKafkaMicroBatchV2SourceSuite extends KafkaMicroBatchV2SourceSuite with SharedSnappySessionContext with SnappySparkTestUtil class SnappyKafkaSourceStressSuite extends KafkaSourceStressSuite diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index b78c5494d9..192725de2f 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -216,7 +216,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti } private def setPoolForExecution(): Unit = { - var pool = snappySession.sessionState.snappyConf.activeSchedulerPool + var pool = snappySession.snappySessionState.snappyConf.activeSchedulerPool // Check if it is pruned query, execute it automatically on the low latency pool if (isLowLatencyQuery && pool == "default") { if (snappySession.sparkContext.getPoolForName(Constant.LOW_LATENCY_POOL).isDefined) { @@ -260,7 +260,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti prepared = false // reset the pool if (isLowLatencyQuery) { - val pool = snappySession.sessionState.snappyConf.activeSchedulerPool + val pool = snappySession.snappySessionState.snappyConf.activeSchedulerPool snappySession.sparkContext.setLocalProperty("spark.scheduler.pool", pool) } // clear the shuffle dependencies asynchronously after the execution. diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index ad156f0137..6d9d552dec 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -103,7 +103,7 @@ class SnappyContext protected[spark](val snappySession: SnappySession) override def newSession(): SnappyContext = snappySession.newSession().snappyContext - override def sessionState: SnappySessionState = snappySession.sessionState + override def sessionState: SnappySessionState = snappySession.snappySessionState def clear(): Unit = { snappySession.clear() diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 98421ad44f..3b98be5909 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -134,7 +134,7 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { def aqpTablePopulator(): Unit = { // register blank tasks for the stream tables so that the streams start - session.sessionState.catalog.getDataSourceRelations[StreamBaseRelation]( + session.snappySessionState.catalog.getDataSourceRelations[StreamBaseRelation]( CatalogObjectType.Stream).foreach(_.rowStream.foreachRDD(_ => Unit)) } @@ -153,7 +153,7 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { Seq[Rule[SparkPlan]]( TokenizeSubqueries(session), EnsureRequirements(session.sessionState.conf), - OptimizeSortAndFilePlans(session.sessionState.snappyConf), + OptimizeSortAndFilePlans(session.snappySessionState.snappyConf), CollapseCollocatedPlans(session), CollapseCodegenStages(session.sessionState.conf), InsertCachedPlanFallback(session, topLevel), diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 50fb350e8c..1692f90729 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -1402,7 +1402,7 @@ class SnappyParser(session: SnappySession) final def parse[T](sqlText: String, parseRule: => Try[T], clearExecutionData: Boolean = false): T = session.synchronized { session.clearQueryData() - if (clearExecutionData) session.sessionState.clearExecutionData() + if (clearExecutionData) session.snappySessionState.clearExecutionData() caseSensitive = session.sessionState.conf.caseSensitiveAnalysis parseSQL(sqlText, parseRule) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index adb0bdf023..b725334516 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -64,7 +64,7 @@ import org.apache.spark.sql.execution.joins.{BroadcastHashJoinExec, BroadcastNes import org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionEnd import org.apache.spark.sql.hive.{HiveClientUtil, SnappySessionState} import org.apache.spark.sql.internal.StaticSQLConf.SCHEMA_STRING_LENGTH_THRESHOLD -import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect, SnappySessionCatalog, SnappySharedState, StaticSQLConf} +import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect, SessionState, SnappySessionCatalog, SnappySharedState, StaticSQLConf} import org.apache.spark.sql.row.{JDBCMutableRelation, SnappyStoreDialect} import org.apache.spark.sql.sources._ import org.apache.spark.sql.store.StoreUtils @@ -100,21 +100,25 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo @transient override lazy val sharedState: SnappySharedState = SnappyContext.sharedState(sparkContext) + @transient + lazy val snappySessionState: SnappySessionState = internals.newSnappySessionState(self) + /** * State isolated across sessions, including SQL configurations, temporary tables, registered * functions, and everything else that accepts a [[org.apache.spark.sql.internal.SQLConf]]. */ @transient - override lazy val sessionState: SnappySessionState = internals.newSnappySessionState(self) + override lazy val sessionState: SessionState = snappySessionState @transient final val contextFunctions: SnappyContextFunctions = SparkSupport.newContextFunctions(self) - final def sessionCatalog: SnappySessionCatalog = sessionState.catalog + final def sessionCatalog: SnappySessionCatalog = snappySessionState.catalog - final def externalCatalog: SnappyExternalCatalog = sessionState.catalog.snappyExternalCatalog + final def externalCatalog: SnappyExternalCatalog = + snappySessionState.catalog.snappyExternalCatalog - final def snappyParser: SnappyParser = sessionState.snappySqlParser.sqlParser + final def snappyParser: SnappyParser = snappySessionState.snappySqlParser.sqlParser SnappyContext.initGlobalSnappyContext(sparkContext, this) contextFunctions.registerSnappyFunctions() @@ -195,7 +199,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } final def prepareSQL(sqlText: String, skipPromote: Boolean = false): LogicalPlan = { - val logical = sessionState.snappySqlParser.parsePlan(sqlText, clearExecutionData = true) + val logical = snappySessionState.snappySqlParser.parsePlan(sqlText, clearExecutionData = true) SparkSession.setActiveSession(this) val ap: Analyzer = sessionState.analyzer // logInfo(s"KN: Batches ${ap.batches.filter( @@ -2310,7 +2314,7 @@ object SnappySession extends Logging { def getPlanCache: Cache[CachedKey, CachedDataFrame] = planCache def sqlPlan(session: SnappySession, sqlText: String): CachedDataFrame = { - val parser = session.sessionState.snappySqlParser + val parser = session.snappySessionState.snappySqlParser val sqlShortText = CachedDataFrame.queryStringShortForm(sqlText) val plan = parser.parsePlan(sqlText, clearExecutionData = true) val planCaching = session.planCaching diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 1e6190c7e5..39282a7e32 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -811,7 +811,7 @@ case class InsertCachedPlanFallback(session: SnappySession, topLevel: Boolean) // or if the plan is not a top-level one e.g. a subquery or inside // CollectAggregateExec (only top-level plan will catch and retry // with disabled optimizations) - if (!topLevel || session.sessionState.disableStoreOptimizations) plan + if (!topLevel || session.snappySessionState.disableStoreOptimizations) plan else plan match { // TODO: disabled for StreamPlans due to issues but can it require fallback? case _: StreamPlan => plan diff --git a/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala b/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala index d5c432d403..b99237b117 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala @@ -98,7 +98,7 @@ abstract case class CodegenSparkFallback(var child: SparkPlan, } logInfo(s"SnappyData code generation failed due to $msg." + s" Falling back to Spark plans.") - session.sessionState.disableStoreOptimizations = true + session.snappySessionState.disableStoreOptimizations = true } try { val plan = exec().executedPlan.transform { @@ -114,7 +114,7 @@ abstract case class CodegenSparkFallback(var child: SparkPlan, SnappySession.clearAllCache() throw CachedDataFrame.catalogStaleFailure(t, session) } finally { - session.sessionState.disableStoreOptimizations = false + session.snappySessionState.disableStoreOptimizations = false } case _ => throw t } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala index b82a933862..78ed2c6c36 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/TableExec.scala @@ -80,7 +80,7 @@ trait TableExec extends UnaryExecNode with CodegenSupportOnExecutor // Only one insert plan possible in the plan tree, so no clashes. if (partitioned) { val session = sqlContext.sparkSession.asInstanceOf[SnappySession] - session.sessionState.snappyConf.setExecutionShufflePartitions(numBuckets) + session.snappySessionState.snappyConf.setExecutionShufflePartitions(numBuckets) } /** Specifies how data is partitioned for the table. */ diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala index 07b6aaf5e5..80a32af096 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/ColumnFormatRelation.scala @@ -696,7 +696,7 @@ class IndexColumnFormatRelation( def getBaseTableRelation: ColumnFormatRelation = { val session = sqlContext.sparkSession.asInstanceOf[SnappySession] - val catalog = session.sessionState.catalog + val catalog = session.snappySessionState.catalog catalog.resolveRelation(session.tableIdentifier(baseTableName)) match { case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] => lr.relation.asInstanceOf[ColumnFormatRelation] diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala index 34d07c6d34..9a6aa4775e 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/impl/JDBCSourceAsColumnarStore.scala @@ -707,12 +707,12 @@ final class ColumnarStorePartitionedRDD( case -1 if allPartitions != null => allPartitions case -1 => - allPartitions = session.sessionState.getTablePartitions( + allPartitions = session.snappySessionState.getTablePartitions( region.asInstanceOf[PartitionedRegion]) allPartitions case bucketId: Int => if (!session.partitionPruning) { - allPartitions = session.sessionState.getTablePartitions( + allPartitions = session.snappySessionState.getTablePartitions( region.asInstanceOf[PartitionedRegion]) allPartitions } else { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index c6fc1f62e9..7539028234 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -325,15 +325,15 @@ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: Str val previousJobDescription = localProperties.getProperty(SparkContext.SPARK_JOB_DESCRIPTION) localProperties.setProperty(SparkContext.SPARK_JOB_DESCRIPTION, queryShortString) try { - session.sessionState.enableExecutionCache = true + session.snappySessionState.enableExecutionCache = true // Get the actual QueryExecution used by InMemoryRelation so that // "withNewExecutionId" runs on the same and shows proper metrics in GUI. val cachedExecution = try { if (isOffHeap) df.persist(StorageLevel.OFF_HEAP) else df.persist() - session.sessionState.getExecution(df.logicalPlan) + session.snappySessionState.getExecution(df.logicalPlan) } finally { - session.sessionState.enableExecutionCache = false - session.sessionState.clearExecutionCache() + session.snappySessionState.enableExecutionCache = false + session.snappySessionState.clearExecutionCache() } val memoryPlan = df.queryExecution.executedPlan.collectFirst { case plan: InMemoryTableScanExec => plan.relation diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala index 8277c19e8b..7821bf4181 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala @@ -349,8 +349,8 @@ class RowFormatScanRDD(@transient val session: SnappySession, } region match { - case Some(pr: PartitionedRegion) => session.sessionState.getTablePartitions(pr) - case Some(dr: CacheDistributionAdvisee) => session.sessionState.getTablePartitions(dr) + case Some(pr: PartitionedRegion) => session.snappySessionState.getTablePartitions(pr) + case Some(dr: CacheDistributionAdvisee) => session.snappySessionState.getTablePartitions(dr) // system table/VTI is shown as a replicated table having a single partition case _ => Array(new MultiBucketExecutorPartition(0, null, 0, Nil)) } diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 3641476c0d..00e8b516e2 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -112,7 +112,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { * "snappydata.sql.hive.enabled" is set on the session. */ protected[sql] final lazy val hiveSessionCatalog: HiveSessionCatalog = - snappySession.sessionState.hiveState.catalog.asInstanceOf[HiveSessionCatalog] + snappySession.snappySessionState.hiveState.catalog.asInstanceOf[HiveSessionCatalog] /** * Return true if the given table needs to be checked in the builtin catalog @@ -880,7 +880,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { if (snappySession.enableHiveSupport) { // lookupRelation uses HiveMetastoreCatalog that looks up the session state and // catalog from the session every time so use withHiveState to switch the catalog - val state = snappySession.sessionState + val state = snappySession.snappySessionState if (hiveSessionCatalog.databaseExists(schemaName)) state.withHiveSession { return internals.lookupRelation(hiveSessionCatalog, TableIdentifier(tableName, Some(schemaName)), alias) diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index 6f895e2837..21737e1523 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -183,7 +183,7 @@ class SnappyConf(@transient val session: SnappySession) // initialize hive session upfront if (newValue) { session.hiveInitializing = true - assert(session.sessionState.hiveSession ne null) + assert(session.snappySessionState.hiveSession ne null) session.hiveInitializing = false } session.enableHiveSupport = newValue @@ -256,7 +256,7 @@ class SnappyConf(@transient val session: SnappySession) } else key } - private def hiveConf: SQLConf = session.sessionState.hiveSession.sessionState.conf + private def hiveConf: SQLConf = session.snappySessionState.hiveSession.sessionState.conf private[sql] def resetDefaults(): Unit = synchronized { if (session ne null) { diff --git a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala index e7005cb3a1..051bc58b55 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala @@ -32,6 +32,7 @@ import org.apache.spark.sql.catalyst.{expressions, plans} import org.apache.spark.sql.execution.PartitionedDataSourceScan import org.apache.spark.sql.execution.columnar.impl.{BaseColumnFormatRelation, ColumnFormatRelation, IndexColumnFormatRelation} import org.apache.spark.sql.execution.datasources.LogicalRelation +import org.apache.spark.sql.internal.SnappySessionCatalog import org.apache.spark.sql.sources.Entity.{INDEX_RELATION, TABLE} import org.apache.spark.sql.{SnappySession, SparkSupport} @@ -42,7 +43,7 @@ import org.apache.spark.sql.{SnappySession, SparkSupport} case class ResolveQueryHints(snappySession: SnappySession) extends Rule[LogicalPlan] with SparkSupport { - private def catalog = snappySession.sessionState.catalog + private def catalog: SnappySessionCatalog = snappySession.snappySessionState.catalog private def analyzer = snappySession.sessionState.analyzer diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala b/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala index 02f6e8fde8..4afcc25789 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/StreamSqlHelper.scala @@ -46,7 +46,7 @@ object StreamSqlHelper extends SparkSupport { } def getSchemaDStream(ssc: SnappyStreamingContext, tableName: String): SchemaDStream = { - val catalog = ssc.snappySession.sessionState.catalog + val catalog = ssc.snappySession.snappySessionState.catalog catalog.resolveRelation(ssc.snappySession.tableIdentifier(tableName)) match { case lr: LogicalRelation if lr.relation.isInstanceOf[StreamPlan] => val sr = lr.relation.asInstanceOf[StreamPlan] diff --git a/core/src/main/scala/org/apache/spark/streaming/SnappyStreamingContext.scala b/core/src/main/scala/org/apache/spark/streaming/SnappyStreamingContext.scala index 098bed7184..11ab3be83a 100644 --- a/core/src/main/scala/org/apache/spark/streaming/SnappyStreamingContext.scala +++ b/core/src/main/scala/org/apache/spark/streaming/SnappyStreamingContext.scala @@ -153,7 +153,7 @@ class SnappyStreamingContext protected[spark]( def registerStreamTables(): Unit = { // register dummy output transformations for the stream tables // so that the streaming context starts - snappySession.sessionState.catalog.getDataSourceRelations[StreamBaseRelation]( + snappySession.snappySessionState.catalog.getDataSourceRelations[StreamBaseRelation]( CatalogObjectType.Stream).foreach(_.rowStream.foreachRDD(_ => Unit)) } diff --git a/core/src/test/scala/io/snappydata/util/TestUtils.scala b/core/src/test/scala/io/snappydata/util/TestUtils.scala index 6a5de125b4..09253baa12 100644 --- a/core/src/test/scala/io/snappydata/util/TestUtils.scala +++ b/core/src/test/scala/io/snappydata/util/TestUtils.scala @@ -59,7 +59,7 @@ object TestUtils extends Logging { val sc = SnappyContext.globalSparkContext if (sc != null && !sc.isStopped) { try { - val catalog = session.sessionState.catalog + val catalog = session.snappySessionState.catalog catalog.destroyAndRegisterBuiltInFunctionsForTests() } catch { case t: Throwable => logError("Failure in dropping function in cleanup", t) diff --git a/core/src/test/scala/org/apache/spark/sql/store/TokenizationTest.scala b/core/src/test/scala/org/apache/spark/sql/store/TokenizationTest.scala index 59bcd60e68..8982f7f228 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/TokenizationTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/TokenizationTest.scala @@ -20,7 +20,6 @@ import scala.collection.mutable.ArrayBuffer import io.snappydata.core.{Data, TestData2} import io.snappydata.{Property, SnappyFunSuite, SnappyTableStatsProviderService} -import jdk.internal.org.objectweb.asm.tree.analysis.AnalyzerException import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll} import org.apache.spark.Logging @@ -696,7 +695,9 @@ class TokenizationTest test("SNAP-1894") { val snap = snc - val row = identity[(java.lang.Integer, java.lang.Double)](_) + + def row(i: java.lang.Integer, d: java.lang.Double): (java.lang.Integer, java.lang.Double) = + (i, d) import snap.implicits._ lazy val l = Seq( @@ -1033,18 +1034,18 @@ class TokenizationTest // null, non-null combinations of updates // implicit int to string cast will cause it to be null (SNAP-2039) - // Update [SNAP-2052]: this behavior is updated to fail the update query if a string expression is - // as part of arithmetic operator in update expression. Explicity casting the srring to int is a - // workaround. However, it is important to note that casting a non-numeric string value to int will - // still end up in a NULL. + // Update [SNAP-2052]: this behavior is updated to fail the update query if a string expression + // is as part of arithmetic operator in update expression. Explicity casting the srring to int + // is a workaround. However, it is important to note that casting a non-numeric string value to + // int will still end up in a NULL. try { res2 = snc.sql(s"update $colTableName set DEST = DEST + 1000 where " + "depdelay = 0 and arrdelay > 0 and airtime > 350").collect() fail("AnalyzerException was expected here") } catch { case ex: AnalysisException => - val expectedMessage = "Implicit type casting of string type to numeric type is not performed" + - " for update statements.;" + val expectedMessage = "Implicit type casting of string type to numeric type is not " + + "performed for update statements.;" assertResult(expectedMessage)(ex.getMessage) } diff --git a/examples/src/main/scala/org/apache/spark/examples/snappydata/StreamingExample.scala b/examples/src/main/scala/org/apache/spark/examples/snappydata/StreamingExample.scala index 3889b0bbdf..6a2c7ba10f 100644 --- a/examples/src/main/scala/org/apache/spark/examples/snappydata/StreamingExample.scala +++ b/examples/src/main/scala/org/apache/spark/examples/snappydata/StreamingExample.scala @@ -18,20 +18,23 @@ package org.apache.spark.examples.snappydata import java.io.File -import java.lang.{Integer => JInt} import java.net.InetSocketAddress +import java.util.Properties import java.util.concurrent.TimeUnit -import java.util.{Properties, Map => JMap} + +import scala.language.postfixOps +import scala.util.Random import kafka.admin.AdminUtils import kafka.api.Request import kafka.server.{KafkaConfig, KafkaServer} import kafka.utils.ZkUtils -import org.apache.kafka.clients.consumer.KafkaConsumer import org.apache.kafka.clients.producer.{KafkaProducer, Producer, ProducerRecord, RecordMetadata} -import org.apache.kafka.common.TopicPartition -import org.apache.kafka.common.serialization.{StringDeserializer, StringSerializer} +import org.apache.kafka.common.network.ListenerName +import org.apache.kafka.common.serialization.StringSerializer import org.apache.log4j.{Level, Logger} +import org.apache.zookeeper.server.{NIOServerCnxnFactory, ZooKeeperServer} + import org.apache.spark.SparkConf import org.apache.spark.internal.Logging import org.apache.spark.jdbc.{ConnectionConfBuilder, ConnectionUtil} @@ -39,15 +42,6 @@ import org.apache.spark.sql.streaming.{SchemaDStream, StreamToRowsConverter} import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.streaming.{Seconds, SnappyStreamingContext} import org.apache.spark.util.Utils -import org.apache.zookeeper.server.{NIOServerCnxnFactory, ZooKeeperServer} -import org.json4s.NoTypeHints -import org.json4s.jackson.Serialization - -import scala.collection.JavaConverters._ -import scala.collection.mutable.HashMap -import scala.language.postfixOps -import scala.util.Random -import scala.util.control.NonFatal /** * An example showing usage of streaming with SnappyData @@ -75,7 +69,9 @@ import scala.util.control.NonFatal */ object StreamingExample { - def main(args: Array[String]) { + // scalastyle:off println + + def main(args: Array[String]): Unit = { // reducing the log level to minimize the messages on console Logger.getLogger("org").setLevel(Level.ERROR) Logger.getLogger("akka").setLevel(Level.ERROR) @@ -84,13 +80,13 @@ object StreamingExample { println("Initializing a SnappyStreamingContext") val spark: SparkSession = SparkSession - .builder + .builder() .appName(getClass.getSimpleName) .master("local[*]") // sys-disk-dir attribute specifies the directory where persistent data is saved .config("snappydata.store.sys-disk-dir", dataDirAbsolutePath) .config("snappydata.store.log-file", dataDirAbsolutePath + "/SnappyDataExample.log") - .getOrCreate + .getOrCreate() val snsc = new SnappyStreamingContext(spark.sparkContext, Seconds(1)) @@ -143,11 +139,11 @@ object StreamingExample { println() // Execute this query once every second. Output is a SchemaDStream. println("Registering a continuous query to to be executed every second on the stream table") - val resultStream: SchemaDStream = snsc.registerCQ("select publisher, count(bid) as bidCount from " + - "adImpressionStream window (duration 1 seconds, slide 1 seconds) group by publisher") + val resultStream: SchemaDStream = snsc.registerCQ("select publisher, count(bid) as bidCount " + + "from adImpressionStream window (duration 1 seconds, slide 1 seconds) group by publisher") // this conf is used to get a connection a JDBC connection - val conf = new ConnectionConfBuilder(snsc.snappySession).build + val conf = new ConnectionConfBuilder(snsc.snappySession).build() println() // process the stream data returned by continuous query and update publisher_bid_counts table @@ -177,7 +173,7 @@ object StreamingExample { } }) - snsc.start + snsc.start() println("Publishing messages on Kafka") publishKafkaMessages(utils, topic) @@ -193,6 +189,8 @@ object StreamingExample { System.exit(0) } + // scalastyle:off println + def createAndGetDataDir: String = { // creating a directory to save all persistent data val dataDir = "./" + "snappydata_examples_data" @@ -206,13 +204,13 @@ object StreamingExample { val currentTime = System.currentTimeMillis() // bids with comma separated fields - //timestamp, publisher,advertiser,web,geo,bid,cookie - val bid1 = currentTime + ",publisher1,advt1,pb1.web,US," + scala.util.Random.nextDouble() + ",23543" - val bid2 = currentTime + ",publisher2,advt1,pb1.web,US," + scala.util.Random.nextDouble() + ",45445" - val bid3 = currentTime + ",publisher3,advt2,pb1.web,US," + scala.util.Random.nextDouble() + ",13434" - val bid4 = currentTime + ",publisher4,advt2,pb1.web,US," + scala.util.Random.nextDouble() + ",34324" - val bid5 = currentTime + ",publisher2,advt1,pb1.web,US," + scala.util.Random.nextDouble() + ",23233" - val bid6 = currentTime + ",publisher4,advt2,pb1.web,US," + scala.util.Random.nextDouble() + ",43545" + // timestamp, publisher,advertiser,web,geo,bid,cookie + val bid1 = currentTime + ",publisher1,advt1,pb1.web,US," + Random.nextDouble() + ",23543" + val bid2 = currentTime + ",publisher2,advt1,pb1.web,US," + Random.nextDouble() + ",45445" + val bid3 = currentTime + ",publisher3,advt2,pb1.web,US," + Random.nextDouble() + ",13434" + val bid4 = currentTime + ",publisher4,advt2,pb1.web,US," + Random.nextDouble() + ",34324" + val bid5 = currentTime + ",publisher2,advt1,pb1.web,US," + Random.nextDouble() + ",23233" + val bid6 = currentTime + ",publisher4,advt2,pb1.web,US," + Random.nextDouble() + ",43545" // publish the bids as a Kafka message utils.sendMessages(topic, Array(bid1, bid2, bid3, bid4, bid5, bid6)) @@ -309,7 +307,7 @@ class EmbeddedKafkaUtils extends Logging { brokerConf = new KafkaConfig(brokerConfiguration, doLog = false) server = new KafkaServer(brokerConf) server.startup() - brokerPort = server.boundPort() + brokerPort = server.boundPort(new ListenerName("PLAINTEXT")) (server, brokerPort) }, new SparkConf(), "KafkaBroker") @@ -358,7 +356,8 @@ class EmbeddedKafkaUtils extends Logging { AdminUtils.createTopic(zkUtils, topic, partitions, 1) created = true } catch { - case e: kafka.common.TopicExistsException if overwrite => // deleteTopic(topic) + case e: Exception if overwrite && e.getClass.getSimpleName == "TopicExistsException" => + // deleteTopic(topic) } } // wait until metadata is propagated @@ -430,11 +429,9 @@ class EmbeddedKafkaUtils extends Logging { private def waitUntilMetadataIsPropagated(topic: String, partition: Int): Unit = { def isPropagated = server.apis.metadataCache.getPartitionInfo(topic, partition) match { case Some(partitionState) => - val leaderAndInSyncReplicas = partitionState.leaderIsrAndControllerEpoch.leaderAndIsr - zkUtils.getLeaderForPartition(topic, partition).isDefined && - Request.isValidBrokerId(leaderAndInSyncReplicas.leader) && - leaderAndInSyncReplicas.isr.size >= 1 + Request.isValidBrokerId(partitionState.basePartitionState.leader) && + !partitionState.basePartitionState.replicas.isEmpty case _ => false @@ -463,4 +460,4 @@ class EmbeddedKafkaUtils extends Logging { } } -} \ No newline at end of file +} diff --git a/spark b/spark index 0943767dca..3e3ce52912 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 0943767dca6aeec32bd25cc19a4ab423bff1f5db +Subproject commit 3e3ce52912fa2aade4bab13e1ab1829b34c529c9 From a4b7fae6ca4c2c36e7e7d6a5524636f02baf058a Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 17 Feb 2020 23:38:21 +0530 Subject: [PATCH 42/80] update spark --- spark | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark b/spark index 3e3ce52912..fecbb486fe 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 3e3ce52912fa2aade4bab13e1ab1829b34c529c9 +Subproject commit fecbb486feaa42c02a07c2c20f5d2363e6da6d11 From c3a07f007e3c39634d8954899b91e8f10bf92884 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 18 Feb 2020 05:18:17 +0530 Subject: [PATCH 43/80] code reorganization --- build.gradle | 15 ++- cluster/build.gradle | 15 +-- compatibilityTests/build.gradle | 14 +- core-product/build.gradle | 13 +- core/build.gradle | 4 +- core/compatibility/spark-2.1.0/build.gradle | 51 ++------ .../sql/internal/Spark210Internals.scala | 4 +- core/compatibility/spark-2.1.1/build.gradle | 40 ++---- .../sql/internal/Spark211Internals.scala | 4 +- core/compatibility/spark-2.1.3/build.gradle | 69 ---------- .../sql/internal/Spark213Internals.scala | 122 ------------------ core/compatibility/spark-2.3.2/build.gradle | 81 ------------ .../sql/internal/Spark232Internals.scala | 27 ---- core/compatibility/spark-2.3.4/build.gradle | 81 ------------ .../sql/internal/Spark234Internals.scala | 27 ---- core/compatibility/spark-2.3/build.gradle | 50 +++++++ .../sql/internal/SnappySharedState23.java | 0 .../spark/sql/internal/Spark23Internals.scala | 4 +- .../spark/sql/internal/expressions.scala | 0 .../spark/sql/catalyst/AccessUtils.scala | 0 .../execution/ui/SnappySQLAppListener.scala | 0 .../sql/internal/Spark23_4_Internals.scala | 18 ++- .../org/apache/spark/sql/internal/plans.scala | 0 core/compatibility/spark-2.4.4/build.gradle | 71 ---------- .../sql/internal/Spark244Internals.scala | 27 ---- core/compatibility/spark-2.4.5/build.gradle | 31 +---- .../sql/internal/Spark245Internals.scala | 27 ---- core/compatibility/spark-2.4/build.gradle | 51 ++++++++ .../sql/internal/SnappySharedState24.java | 0 .../spark/sql/internal/Spark24Internals.scala | 4 +- .../spark/sql/internal/expressions.scala | 0 .../apache/spark/sql/SnappyBaseParser.scala | 3 +- .../org/apache/spark/sql/SnappyParser.scala | 1 + .../apache/spark/sql/SnappySqlParser.scala | 2 +- .../org/apache/spark/sql/SparkSupport.scala | 21 ++- settings.gradle | 12 +- 36 files changed, 188 insertions(+), 701 deletions(-) delete mode 100644 core/compatibility/spark-2.1.3/build.gradle delete mode 100644 core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala delete mode 100644 core/compatibility/spark-2.3.2/build.gradle delete mode 100644 core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala delete mode 100644 core/compatibility/spark-2.3.4/build.gradle delete mode 100644 core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala create mode 100644 core/compatibility/spark-2.3/build.gradle rename core/compatibility/{spark-2.3.x => spark-2.3}/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java (100%) rename core/compatibility/{spark-2.3.x => spark-2.3}/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala (99%) rename core/compatibility/{spark-2.3.x => spark-2.3}/specific/scala/org/apache/spark/sql/internal/expressions.scala (100%) rename core/compatibility/{spark-2.3.x => spark-2.3}/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala (100%) rename core/compatibility/{spark-2.3.x => spark-2.3}/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala (100%) rename core/compatibility/{spark-2.3.x => spark-2.3}/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala (98%) rename core/compatibility/{spark-2.3.x => spark-2.3}/src/main/scala/org/apache/spark/sql/internal/plans.scala (100%) delete mode 100644 core/compatibility/spark-2.4.4/build.gradle delete mode 100644 core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala delete mode 100644 core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala create mode 100644 core/compatibility/spark-2.4/build.gradle rename core/compatibility/{spark-2.4.x => spark-2.4}/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java (100%) rename core/compatibility/{spark-2.4.x => spark-2.4}/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala (99%) rename core/compatibility/{spark-2.4.x => spark-2.4}/src/main/scala/org/apache/spark/sql/internal/expressions.scala (100%) diff --git a/build.gradle b/build.gradle index 29e1c23140..b836b5f063 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,12 @@ apply plugin: "nebula.ospackage" def isEnterpriseProduct = rootProject.hasProperty('snappydata.enterprise') +def compatibilityMap = [ + '2.1.0': '2.1.0', '2.1.1': '2.1.1', '2.1.2': '2.1.1', '2.1.3': '2.1.1', + '2.3.0': '2.3', '2.3.1': '2.3', '2.3.2': '2.3', '2.3.3': '2.3', '2.3.4': '2.3', + '2.4.0': '2.4', '2.4.1': '2.4', '2.4.2': '2.4', '2.4.3': '2.4', '2.4.4': '2.4', '2.4.5': '2.4.5' +] + allprojects { // We want to see all test results. This is equivalent to setting --continue // on the command line. @@ -113,6 +119,8 @@ allprojects { snappySparkVersion = '2.4.5.1' coreProjectName = sparkVersion == sparkConnectorVersion ? ":snappy-core_${scalaBinaryVersion}" : ":snappy-core-product_${scalaBinaryVersion}" + compatProjectName = ":snappy-core_${scalaBinaryVersion}:compat-spark${compatibilityMap[sparkVersion]}" + compatConnectorProjectName = ":snappy-core_${scalaBinaryVersion}:compat-spark${compatibilityMap[sparkConnectorVersion]}" aqpProjectName = ":snappy-aqp_${scalaBinaryVersion}" sparkPackageName = "snappydata-${version}_${sparkConnectorVersion}-s_${scalaBinaryVersion}" @@ -882,11 +890,11 @@ task publishMaven { task product(type: Zip) { dependsOn ":snappy-cluster_${scalaBinaryVersion}:jar" dependsOn ":snappy-core_${scalaBinaryVersion}:jar" - dependsOn ":snappy-core_${scalaBinaryVersion}:compat-spark${sparkVersion}:jar" + dependsOn "${compatProjectName}:jar" dependsOn ":snappy-examples_${scalaBinaryVersion}:jar" dependsOn ":snappy-spark:snappy-spark-assembly_${scalaBinaryVersion}:sparkProduct" dependsOn ':snappy-launcher:jar' - dependsOn ':jdbcJar' + dependsOn ':copyShadowJars' def clusterProject = project(":snappy-cluster_${scalaBinaryVersion}") def launcherProject = project(':snappy-launcher') @@ -1318,7 +1326,6 @@ task distInstallers { task distProduct { dependsOn product, distTar, distZip dependsOn distInstallers - dependsOn copyShadowJars } task generateSources { @@ -1355,7 +1362,7 @@ task cleanAll { dependsOn getTasksByName('clean', true).collect { it.path } } def taskFilter(Task p) { - !p.path.matches('.*compat-spark.*') || p.path.matches(".*compat-spark${sparkConnectorVersion}.*") + !p.path.matches('.*compat-spark.*') || p.path.matches(".*${compatConnectorProjectName}.*") } task buildAll { dependsOn getTasksByName('assemble', true).findAll { taskFilter(it) }.collect { it.path } diff --git a/cluster/build.gradle b/cluster/build.gradle index 3c93f506b4..88ecb1b82d 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -93,21 +93,11 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-avro_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - } + compile project(compatProjectName) testCompile (project(path: coreProjectName, configuration: 'testOutput')) { exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) @@ -118,6 +108,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) + exclude(group: 'org.apache.spark', module: 'spark-avro_' + scalaBinaryVersion) exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } diff --git a/compatibilityTests/build.gradle b/compatibilityTests/build.gradle index 83d605e570..4989866d1c 100644 --- a/compatibilityTests/build.gradle +++ b/compatibilityTests/build.gradle @@ -58,19 +58,7 @@ dependencies { exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') } - compile (project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-avro_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - } + compile project(compatProjectName) // some tests expect resource files as having file: URI and not jar:file: testRuntime files("${projectDir}/../spark/sql/core/src/test/resources") diff --git a/core-product/build.gradle b/core-product/build.gradle index 754e8a0b0c..304aeecb99 100644 --- a/core-product/build.gradle +++ b/core-product/build.gradle @@ -78,18 +78,7 @@ dependencies { testCompile 'org.scala-lang:scala-actors:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" - testCompile (project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql-kafka-0-10_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - } + testCompile project(compatProjectName) testCompile project(path: ':snappy-store:snappydata-store-tools', configuration: 'testOutput') testRuntime files("${projectDir}/../tests/common/src/main/resources") diff --git a/core/build.gradle b/core/build.gradle index c39bd4a266..9993e486df 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -92,13 +92,13 @@ dependencies { compile project(":snappy-jdbc_${scalaBinaryVersion}") compile project(":snappy-encoders_${scalaBinaryVersion}") - connector project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkConnectorVersion}") + connector project(compatConnectorProjectName) testCompile project(':dunit') testCompile 'org.scala-lang:scala-actors:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" - testCompile project(":snappy-core_${scalaBinaryVersion}:compat-spark${sparkConnectorVersion}") + testCompile project(compatConnectorProjectName) testRuntime files("${projectDir}/../tests/common/src/main/resources") testRuntime "org.pegdown:pegdown:${pegdownVersion}" diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index 1dace4a054..c6ab5d690f 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -19,12 +19,13 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -// directly include the base classes to ensure everything is compiled with Spark 2.1.0 +// directly include the base classes to ensure everything is compiled with current Spark version sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" sourceSets.main.java.srcDirs = [] -String spark210Version = '2.1.0' +// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions +String sparkCompatVersion = sparkConnectorVersion dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion @@ -35,45 +36,15 @@ dependencies { compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark210Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark210Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark210Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark210Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark210Version}") + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } -} - -task packageScalaDocs(type: Jar, dependsOn: scaladoc) { - classifier = 'javadoc' - from scaladoc -} -if (rootProject.hasProperty('enablePublish')) { - artifacts { - archives packageScalaDocs, packageSources - } + compileOnly project(":snappy-core_${scalaBinaryVersion}") } -archivesBaseName = "snappydata-core-compat-spark${spark210Version}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${spark210Version}-s_${scalaBinaryVersion}" +archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala index 65a5ef2f69..d3e8e0b0ac 100644 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala @@ -30,9 +30,7 @@ import org.apache.spark.sql.{SparkInternals, SparkSession} /** * Implementation of [[SparkInternals]] for Spark 2.1.0. */ -class Spark210Internals extends Spark21Internals { - - override def version: String = "2.1.0" +class Spark210Internals(override val version: String) extends Spark21Internals { override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { new CaseInsensitiveMap(map) diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index cfa1fed6e5..c263b3029b 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -19,12 +19,13 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' -// directly include the base classes to ensure everything is compiled with Spark 2.1.1 +// directly include the base classes to ensure everything is compiled with current Spark version sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" sourceSets.main.java.srcDirs = [] -String spark211Version = '2.1.1' +// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions +String sparkCompatVersion = sparkConnectorVersion dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion @@ -35,35 +36,16 @@ dependencies { compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark211Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark211Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark211Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark211Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark211Version}") + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } + compileOnly project(":snappy-core_${scalaBinaryVersion}") } -archivesBaseName = "snappydata-core-compat-spark${spark211Version}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${spark211Version}-s_${scalaBinaryVersion}" +archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala index 667ffe4fa7..b88af49641 100644 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala @@ -33,9 +33,7 @@ import org.apache.spark.storage.StorageLevel /** * Implementation of [[SparkInternals]] for Spark 2.1.1. */ -class Spark211Internals extends Spark21Internals { - - override def version: String = "2.1.1" +class Spark211Internals(override val version: String) extends Spark21Internals { override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit = { diff --git a/core/compatibility/spark-2.1.3/build.gradle b/core/compatibility/spark-2.1.3/build.gradle deleted file mode 100644 index cc300780c0..0000000000 --- a/core/compatibility/spark-2.1.3/build.gradle +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -apply plugin: 'scala' - -compileScala.options.encoding = 'UTF-8' - -// directly include the base classes to ensure everything is compiled with Spark 2.1.3 -sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" -sourceSets.main.java.srcDirs = [] - -String spark213Version = '2.1.3' - -dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - - compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion - compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark213Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark213Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark213Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark213Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark213Version}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } -} - -archivesBaseName = "snappydata-core-compat-spark${spark213Version}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${spark213Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala b/core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala deleted file mode 100644 index ca97337192..0000000000 --- a/core/compatibility/spark-2.1.3/src/main/scala/org/apache/spark/sql/internal/Spark213Internals.scala +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -package org.apache.spark.sql.internal - -import io.snappydata.sql.catalog.SnappyExternalCatalog - -import org.apache.spark.SparkException -import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.TableIdentifier -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} -import org.apache.spark.sql.catalyst.expressions.Expression -import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Statistics} -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.execution.CacheManager -import org.apache.spark.sql.types.StructType -import org.apache.spark.storage.StorageLevel - -/** - * Implementation of [[SparkInternals]] for Spark 2.1.3. - */ -class Spark213Internals extends Spark21Internals { - - override def version: String = "2.1.3" - - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, - cascade: Boolean, blocking: Boolean): Unit = { - spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) - } - - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - plan.mapExpressions(f) - } - - override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - CaseInsensitiveMap[String](map) - } - - // scalastyle:off - - override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, - storage: CatalogStorageFormat, schema: StructType, provider: Option[String], - partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], - owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], - comment: Option[String], unsupportedFeatures: Seq[String], - tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, - ignoredProperties: Map[String, String]): CatalogTable = { - if (ignoredProperties.nonEmpty) { - throw new SparkException(s"ignoredProperties should be always empty in Spark $version") - } - CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, - bucketSpec, owner, createTime, lastAccessTime, properties, - stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, - unsupportedFeatures, tracksPartitionsInCatalog, schemaPreservesCase) - } - - // scalastyle:on - - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = - catalogTable.schemaPreservesCase - - override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, - table: String, newSchema: StructType): Unit = { - externalCatalog.alterTableSchema(schemaName, table, newSchema) - } - - override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { - new SmartConnectorExternalCatalog213(session) - } - - override def newCacheManager(): CacheManager = new SnappyCacheManager213 -} - -/** - * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. - */ -final class SnappyCacheManager213 extends CacheManager { - - override def cacheQuery(query: Dataset[_], tableName: Option[String], - storageLevel: StorageLevel): Unit = { - super.cacheQuery(query, tableName, storageLevel) - // clear plan cache since cached representation can change existing plans - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() - } - - override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { - super.uncacheQuery(session, plan, blocking) - session.asInstanceOf[SnappySession].clearPlanCache() - } - - override def recacheByPlan(session: SparkSession, plan: LogicalPlan): Unit = { - super.recacheByPlan(session, plan) - session.asInstanceOf[SnappySession].clearPlanCache() - } - - override def recacheByPath(session: SparkSession, resourcePath: String): Unit = { - super.recacheByPath(session, resourcePath) - session.asInstanceOf[SnappySession].clearPlanCache() - } -} - -final class SmartConnectorExternalCatalog213(session: SparkSession) - extends SmartConnectorExternalCatalog21(session) { - - override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = - alterTableSchemaImpl(schemaName, table, newSchema) -} diff --git a/core/compatibility/spark-2.3.2/build.gradle b/core/compatibility/spark-2.3.2/build.gradle deleted file mode 100644 index e843bab3e0..0000000000 --- a/core/compatibility/spark-2.3.2/build.gradle +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -apply plugin: 'scala' - -compileScala.options.encoding = 'UTF-8' - -// directly include the base classes to ensure everything is compiled with Spark 2.3.2 -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.3.x/specific/scala" -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" -sourceSets.main.scala.srcDir "../spark-2.3.x/specific/java" -sourceSets.main.java.srcDirs = [] - -String spark232Version = '2.3.2' - -dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - - compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion - compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark232Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark232Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark232Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark232Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark232Version}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } -} - -task packageScalaDocs(type: Jar, dependsOn: scaladoc) { - classifier = 'javadoc' - from scaladoc -} -if (rootProject.hasProperty('enablePublish')) { - artifacts { - archives packageScalaDocs, packageSources - } -} - -archivesBaseName = "snappydata-core-compat-spark${spark232Version}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${spark232Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala b/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala deleted file mode 100644 index 7aec9d41c3..0000000000 --- a/core/compatibility/spark-2.3.2/src/main/scala/org/apache/spark/sql/internal/Spark232Internals.scala +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.internal - -import org.apache.spark.sql.SparkInternals - -/** - * Implementation of [[SparkInternals]] for Spark 2.3.2. - */ -class Spark232Internals extends Spark23Internals { - - override def version: String = "2.3.2" -} diff --git a/core/compatibility/spark-2.3.4/build.gradle b/core/compatibility/spark-2.3.4/build.gradle deleted file mode 100644 index 46b101ee8a..0000000000 --- a/core/compatibility/spark-2.3.4/build.gradle +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -apply plugin: 'scala' - -compileScala.options.encoding = 'UTF-8' - -// directly include the base classes to ensure everything is compiled with Spark 2.3.4 -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.3.x/specific/scala" -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" -sourceSets.main.scala.srcDir "../spark-2.3.x/specific/java" -sourceSets.main.java.srcDirs = [] - -String spark234Version = '2.3.4' - -dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - - compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion - compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark234Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark234Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark234Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark234Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark234Version}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } -} - -task packageScalaDocs(type: Jar, dependsOn: scaladoc) { - classifier = 'javadoc' - from scaladoc -} -if (rootProject.hasProperty('enablePublish')) { - artifacts { - archives packageScalaDocs, packageSources - } -} - -archivesBaseName = "snappydata-core-compat-spark${spark234Version}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${spark234Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala b/core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala deleted file mode 100644 index b935f02922..0000000000 --- a/core/compatibility/spark-2.3.4/src/main/scala/org/apache/spark/sql/internal/Spark234Internals.scala +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.internal - -import org.apache.spark.sql.SparkInternals - -/** - * Implementation of [[SparkInternals]] for Spark 2.3.4. - */ -class Spark234Internals extends Spark23Internals { - - override def version: String = "2.3.4" -} diff --git a/core/compatibility/spark-2.3/build.gradle b/core/compatibility/spark-2.3/build.gradle new file mode 100644 index 0000000000..bd3686106b --- /dev/null +++ b/core/compatibility/spark-2.3/build.gradle @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +sourceSets.main.scala.srcDir 'specific/scala' +sourceSets.main.scala.srcDir 'specific/java' +sourceSets.main.java.srcDirs = [] + +// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions +String sparkCompatVersion = sparkConnectorVersion + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly project(":snappy-core_${scalaBinaryVersion}") +} + +archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.3.x/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java b/core/compatibility/spark-2.3/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java similarity index 100% rename from core/compatibility/spark-2.3.x/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java rename to core/compatibility/spark-2.3/specific/java/org/apache/spark/sql/internal/SnappySharedState23.java diff --git a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala similarity index 99% rename from core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala rename to core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala index a734fc2af3..4244df5afe 100644 --- a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala +++ b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala @@ -45,7 +45,7 @@ import org.apache.spark.{SparkConf, SparkContext} /** * Base implementation of [[SparkInternals]] for Spark 2.3.x releases. */ -abstract class Spark23Internals extends Spark23_4_Internals { +class Spark23Internals(override val version: String) extends Spark23_4_Internals { override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit = { @@ -443,7 +443,7 @@ class SnappySessionStateBuilder23(session: SnappySession, parentState: Option[Se override protected def optimizer: Optimizer = { new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { - override def state: SnappySessionState = session.sessionState + override def state: SnappySessionState = session.snappySessionState override def batches: Seq[Batch] = batchesImpl diff --git a/core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/expressions.scala b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/expressions.scala similarity index 100% rename from core/compatibility/spark-2.3.x/specific/scala/org/apache/spark/sql/internal/expressions.scala rename to core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/expressions.scala diff --git a/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala similarity index 100% rename from core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala rename to core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/catalyst/AccessUtils.scala diff --git a/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala similarity index 100% rename from core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala rename to core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala diff --git a/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala similarity index 98% rename from core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala rename to core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index a27de7bcc1..a4fec1b0ef 100644 --- a/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -20,6 +20,7 @@ import java.lang.reflect.Field import scala.collection.mutable +import com.gemstone.gemfire.internal.shared.unsafe.UnsafeHolder import io.snappydata.Property.HashAggregateSize import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.{HintName, QueryHint} @@ -58,6 +59,7 @@ import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream +import org.apache.spark.unsafe.Platform import org.apache.spark.util.Utils /** @@ -71,6 +73,12 @@ abstract class Spark23_4_Internals extends SparkInternals { f } + private val (listenerField, listenerFieldOffset): (Field, Long) = { + val f = classOf[SQLAppStatusStore].getDeclaredField("listener") + f.setAccessible(true) + f -> UnsafeHolder.getUnsafe.objectFieldOffset(f) + } + override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { plan.mapExpressions(f) } @@ -149,8 +157,6 @@ abstract class Spark23_4_Internals extends SparkInternals { protected def createAndAttachSQLListener(state: SnappySharedState, sc: SparkContext): Unit = { // replace inside SQLAppStatusStore as well as change on the Spark ListenerBus - val listenerField = classOf[SQLAppStatusStore].getDeclaredField("listener") - listenerField.setAccessible(true) listenerField.get(state.statusStore).asInstanceOf[Option[SQLAppStatusListener]] match { case Some(_: SnappySQLAppListener) => // already changed case Some(_: SQLAppStatusListener) => @@ -159,7 +165,7 @@ abstract class Spark23_4_Internals extends SparkInternals { sc.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( sc.removeSparkListener) sc.listenerBus.addToStatusQueue(newListener) - listenerField.set(state.statusStore, newListener) + Platform.putObjectVolatile(state.statusStore, listenerFieldOffset, newListener) case _ => } } @@ -592,7 +598,7 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, override def session: SnappySession = self.session - private def state: SnappySessionState = session.sessionState + private def state: SnappySessionState = session.snappySessionState override val extendedResolutionRules: Seq[Rule[LogicalPlan]] = { (new HiveConditionalRule(_ => new ResolveHiveSerdeTable(state.hiveSession), state) :: @@ -611,7 +617,7 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, PreprocessTableInsertion(conf) :: DataSourceAnalysis(conf) :: new HiveConditionalRule(_ => HiveAnalysis, state) :: - state.AnalyzeMutableOperations(session, analyzer) :: + state.AnalyzeMutableOperations(session, aSelf) :: ResolveQueryHints(session) :: state.RowLevelSecurity :: state.ExternalRelationLimitFetch :: @@ -636,7 +642,7 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, // implies that Snappydata aggregation optimisation will be turned off for any usage of // this session including non-streaming queries. - HashAggregateSize.set(session.sessionState.conf, "-1") + HashAggregateSize.set(conf, "-1") new StreamingQueryManager(session) } diff --git a/core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala similarity index 100% rename from core/compatibility/spark-2.3.x/src/main/scala/org/apache/spark/sql/internal/plans.scala rename to core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala diff --git a/core/compatibility/spark-2.4.4/build.gradle b/core/compatibility/spark-2.4.4/build.gradle deleted file mode 100644 index 543e67377c..0000000000 --- a/core/compatibility/spark-2.4.4/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -apply plugin: 'scala' - -compileScala.options.encoding = 'UTF-8' - -// directly include the base classes to ensure everything is compiled with Spark 2.4.4 -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" -sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/java" -sourceSets.main.java.srcDirs = [] - -String spark244Version = '2.4.4' - -dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - - compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion - compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark244Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark244Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark244Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark244Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark244Version}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - compileOnly (project(":snappy-core_${scalaBinaryVersion}")) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } -} - -archivesBaseName = "snappydata-core-compat-spark${spark244Version}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${spark244Version}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala b/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala deleted file mode 100644 index 7dbf92af14..0000000000 --- a/core/compatibility/spark-2.4.4/src/main/scala/org/apache/spark/sql/internal/Spark244Internals.scala +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.internal - -import org.apache.spark.sql._ - -/** - * Implementation of [[SparkInternals]] for Spark 2.4.4. - */ -class Spark244Internals extends Spark24Internals { - - override def version: String = "2.4.4" -} diff --git a/core/compatibility/spark-2.4.5/build.gradle b/core/compatibility/spark-2.4.5/build.gradle index 7c36c1caec..b77caabee6 100644 --- a/core/compatibility/spark-2.4.5/build.gradle +++ b/core/compatibility/spark-2.4.5/build.gradle @@ -20,12 +20,14 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with Spark 2.4.5 -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.3.x/src/main/java" -sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.4.x/src/main/java" +sourceSets.main.scala.srcDir '../spark-2.3/src/main/scala' +sourceSets.main.scala.srcDir '../spark-2.3/src/main/java' +sourceSets.main.scala.srcDir '../spark-2.4/src/main/scala' +sourceSets.main.scala.srcDir '../spark-2.4/src/main/java' sourceSets.main.java.srcDirs = [] +// this is current embedded version so will remain the same whether used +// for embedded build or connector build String spark245Version = '2.4.5' dependencies { @@ -45,26 +47,7 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly (project(coreProjectName)) { - exclude(group: 'org.apache.spark', module: 'spark-unsafe_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-core_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-catalyst_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-sql_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-hive_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-streaming-kafka-0-8_' + scalaBinaryVersion) - exclude(group: 'org.apache.spark', module: 'spark-mllib_' + scalaBinaryVersion) - exclude(group: 'org.eclipse.jetty', module: 'jetty-servlet') - - exclude(module: ':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-streaming-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion) - exclude(module: ':snappy-spark:snappy-spark-mllib_' + scalaBinaryVersion) - } + compileOnly project(coreProjectName) } archivesBaseName = "snappydata-core-compat-spark${spark245Version}_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala b/core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala deleted file mode 100644 index 50ff031541..0000000000 --- a/core/compatibility/spark-2.4.5/src/main/scala/org/apache/spark/sql/internal/Spark245Internals.scala +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.internal - -import org.apache.spark.sql._ - -/** - * Implementation of [[SparkInternals]] for Spark 2.4.4. - */ -class Spark245Internals extends Spark24Internals { - - override def version: String = "2.4.5" -} diff --git a/core/compatibility/spark-2.4/build.gradle b/core/compatibility/spark-2.4/build.gradle new file mode 100644 index 0000000000..26ca2b435f --- /dev/null +++ b/core/compatibility/spark-2.4/build.gradle @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +// directly include the base classes to ensure everything is compiled with current Spark version +sourceSets.main.scala.srcDir '../spark-2.3/src/main/scala' +sourceSets.main.scala.srcDir '../spark-2.3/src/main/java' +sourceSets.main.java.srcDirs = [] + +// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions +String sparkCompatVersion = sparkConnectorVersion + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly project(":snappy-core_${scalaBinaryVersion}") +} + +archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java b/core/compatibility/spark-2.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java similarity index 100% rename from core/compatibility/spark-2.4.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java rename to core/compatibility/spark-2.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java diff --git a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala similarity index 99% rename from core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala rename to core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index f7aee6e5d7..a42e3b64c8 100644 --- a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -44,7 +44,7 @@ import org.apache.spark.{SparkConf, SparkContext} /** * Base implementation of [[SparkInternals]] for Spark 2.4.x releases. */ -abstract class Spark24Internals extends Spark23_4_Internals { +class Spark24Internals(override val version: String) extends Spark23_4_Internals { override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit = { @@ -444,7 +444,7 @@ class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[Se override protected def optimizer: Optimizer = { new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { - override def state: SnappySessionState = session.sessionState + override def state: SnappySessionState = session.snappySessionState override def defaultBatches: Seq[Batch] = batchesImpl diff --git a/core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/expressions.scala similarity index 100% rename from core/compatibility/spark-2.4.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala rename to core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/expressions.scala diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala index 8f82b5b593..3387d6993a 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyBaseParser.scala @@ -38,8 +38,7 @@ import org.apache.spark.sql.{SnappyParserConsts => Consts} */ abstract class SnappyBaseParser(session: SparkSession) extends Parser { - protected var caseSensitive: Boolean = - (session ne null) && session.sessionState.conf.caseSensitiveAnalysis + protected var caseSensitive: Boolean = _ private[sql] final val queryHints: ConcurrentHashMap[String, String] = new ConcurrentHashMap[String, String](4, 0.7f, 1) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 1692f90729..99fec8b14f 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -1410,6 +1410,7 @@ class SnappyParser(session: SnappySession) /** Parse SQL without any other handling like query hints */ def parseSQLOnly[T](sqlText: String, parseRule: => Try[T]): T = { this.input = sqlText + caseSensitive = session.sessionState.conf.caseSensitiveAnalysis parseRule match { case Success(p) => p case Failure(e: ParseError) => diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala index a145fa9a0c..224b9f5911 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySqlParser.scala @@ -27,7 +27,7 @@ class SnappySqlParser(session: SnappySession) extends SQLParserInterface { @transient protected[sql] val sqlParser: SnappyParser = new SnappyParser(session) - @transient private val substitutor = + @transient private lazy val substitutor: VariableSubstitution = new VariableSubstitution(session.sessionState.conf) private def withSubstitution(sqlText: String): String = { diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index e7e36dadba..0b0c2e7a21 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -89,11 +89,19 @@ object SparkSupport extends Logging { * have a public constructor having current SparkContext as the one argument. */ private val implementations: Map[String, String] = Map( - "2.4.5" -> s"$INTERNAL_PACKAGE.Spark245Internals", - "2.4.4" -> s"$INTERNAL_PACKAGE.Spark244Internals", - "2.3.4" -> s"$INTERNAL_PACKAGE.Spark234Internals", - "2.3.2" -> s"$INTERNAL_PACKAGE.Spark232Internals", - "2.1.3" -> s"$INTERNAL_PACKAGE.Spark213Internals", + "2.4.5" -> s"$INTERNAL_PACKAGE.Spark24Internals", + "2.4.4" -> s"$INTERNAL_PACKAGE.Spark24Internals", + "2.4.3" -> s"$INTERNAL_PACKAGE.Spark24Internals", + "2.4.2" -> s"$INTERNAL_PACKAGE.Spark24Internals", + "2.4.1" -> s"$INTERNAL_PACKAGE.Spark24Internals", + "2.4.0" -> s"$INTERNAL_PACKAGE.Spark24Internals", + "2.3.4" -> s"$INTERNAL_PACKAGE.Spark23Internals", + "2.3.3" -> s"$INTERNAL_PACKAGE.Spark23Internals", + "2.3.2" -> s"$INTERNAL_PACKAGE.Spark23Internals", + "2.3.1" -> s"$INTERNAL_PACKAGE.Spark23Internals", + "2.3.0" -> s"$INTERNAL_PACKAGE.Spark23Internals", + "2.1.3" -> s"$INTERNAL_PACKAGE.Spark211Internals", + "2.1.2" -> s"$INTERNAL_PACKAGE.Spark211Internals", "2.1.1" -> s"$INTERNAL_PACKAGE.Spark211Internals", "2.1.0" -> s"$INTERNAL_PACKAGE.Spark210Internals" ) @@ -117,7 +125,8 @@ object SparkSupport extends Logging { case None => throw new SparkException(s"Unsupported Spark version $sparkVersion") } val implClass: Class[_] = Utils.classForName(implClassName) - internalImpl = implClass.newInstance().asInstanceOf[SparkInternals] + internalImpl = implClass.getConstructor(classOf[String]) + .newInstance(sparkVersion).asInstanceOf[SparkInternals] internalImpl } } diff --git a/settings.gradle b/settings.gradle index 1ae52df946..9d7230748f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -33,10 +33,8 @@ include ':snappy-encoders_' + scalaBinaryVersion // compatibility modules for all supported Spark releases include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.3" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3.4" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File @@ -50,10 +48,8 @@ project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoder project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0").projectDir = "$rootDir/core/compatibility/spark-2.1.0" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.3").projectDir = "$rootDir/core/compatibility/spark-2.1.3" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3.2").projectDir = "$rootDir/core/compatibility/spark-2.3.2" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3.4").projectDir = "$rootDir/core/compatibility/spark-2.3.4" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.4").projectDir = "$rootDir/core/compatibility/spark-2.4.4" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3").projectDir = "$rootDir/core/compatibility/spark-2.3" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4").projectDir = "$rootDir/core/compatibility/spark-2.4" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5").projectDir = "$rootDir/core/compatibility/spark-2.4.5" as File if (sparkConnectorVersion != sparkVersion) { From 3c5902a1dd4a0f86191e958a274fe2aa89f0cfff Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 18 Feb 2020 05:20:53 +0530 Subject: [PATCH 44/80] more reorganization --- core/compatibility/spark-2.1.0/build.gradle | 4 ++-- core/compatibility/spark-2.1.1/build.gradle | 4 ++-- .../org/apache/spark/sql/internal/SnappySharedState21.java | 0 .../org/apache/spark/sql/execution/ui/SnappySQLListener.scala | 0 .../org/apache/spark/sql/internal/Spark21Internals.scala | 0 .../scala/org/apache/spark/sql/internal/expressions.scala | 0 .../src/main/scala/org/apache/spark/sql/internal/plans.scala | 0 7 files changed, 4 insertions(+), 4 deletions(-) rename core/compatibility/{spark-2.1.x => spark-2.1}/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java (100%) rename core/compatibility/{spark-2.1.x => spark-2.1}/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala (100%) rename core/compatibility/{spark-2.1.x => spark-2.1}/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala (100%) rename core/compatibility/{spark-2.1.x => spark-2.1}/src/main/scala/org/apache/spark/sql/internal/expressions.scala (100%) rename core/compatibility/{spark-2.1.x => spark-2.1}/src/main/scala/org/apache/spark/sql/internal/plans.scala (100%) diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle index c6ab5d690f..723b911180 100644 --- a/core/compatibility/spark-2.1.0/build.gradle +++ b/core/compatibility/spark-2.1.0/build.gradle @@ -20,8 +20,8 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with current Spark version -sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" +sourceSets.main.scala.srcDir '../spark-2.1/src/main/scala' +sourceSets.main.scala.srcDir '../spark-2.1/src/main/java' sourceSets.main.java.srcDirs = [] // keeping this as sparkConnectorVersion helps use the same for multiple Spark versions diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle index c263b3029b..b4883a5832 100644 --- a/core/compatibility/spark-2.1.1/build.gradle +++ b/core/compatibility/spark-2.1.1/build.gradle @@ -20,8 +20,8 @@ apply plugin: 'scala' compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with current Spark version -sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/scala" -sourceSets.main.scala.srcDir "../spark-2.1.x/src/main/java" +sourceSets.main.scala.srcDir '../spark-2.1/src/main/scala' +sourceSets.main.scala.srcDir '../spark-2.1/src/main/java' sourceSets.main.java.srcDirs = [] // keeping this as sparkConnectorVersion helps use the same for multiple Spark versions diff --git a/core/compatibility/spark-2.1.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java b/core/compatibility/spark-2.1/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java similarity index 100% rename from core/compatibility/spark-2.1.x/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java rename to core/compatibility/spark-2.1/src/main/java/org/apache/spark/sql/internal/SnappySharedState21.java diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala similarity index 100% rename from core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala rename to core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala similarity index 100% rename from core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala rename to core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/expressions.scala similarity index 100% rename from core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/expressions.scala rename to core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/expressions.scala diff --git a/core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala similarity index 100% rename from core/compatibility/spark-2.1.x/src/main/scala/org/apache/spark/sql/internal/plans.scala rename to core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala From f19e8450314f8a53091fa19db7f3c02ee48d7858 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 18 Feb 2020 20:56:58 +0530 Subject: [PATCH 45/80] fixes and updated modules --- .../spark/sql/internal/Spark21Internals.scala | 6 +++- .../execution/ui/SnappySQLAppListener.scala | 29 +++++++++++++++++-- .../sql/internal/Spark23_4_Internals.scala | 8 +++-- .../spark/sql/internal/Spark24Internals.scala | 13 ++++++++- .../apache/spark/sql/SnappyDDLParser.scala | 13 +++++---- .../org/apache/spark/sql/SnappyParser.scala | 4 +-- .../org/apache/spark/sql/SparkInternals.scala | 7 ++++- .../spark/sql/hive/SnappySessionState.scala | 18 ++++++------ .../apache/spark/sql/internal/session.scala | 8 ++--- .../spark/sql/sources/StoreStrategy.scala | 20 ++++++++----- settings.gradle | 2 +- store | 2 +- 12 files changed, 92 insertions(+), 38 deletions(-) diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index e4fe57fc08..3b47184013 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -350,6 +350,10 @@ abstract class Spark21Internals extends SparkInternals { override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite.enabled + override def getOverwriteOption(insert: InsertIntoDataSourceCommand): Boolean = { + insert.overwrite.enabled + } + override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifNotExists override def newGroupingSet(groupingSets: Seq[Seq[Expression]], @@ -927,7 +931,7 @@ class SnappySessionState21(override val snappySession: SnappySession) override def session: SnappySession = snappySession - private def state: SnappySessionState = session.sessionState + private def state: SnappySessionState = session.snappySessionState private def hiveCatalog(state: SessionState): HiveSessionCatalog = state.catalog.asInstanceOf[HiveSessionCatalog] diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala index b110a4bbd9..007fa91856 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala @@ -17,9 +17,11 @@ package org.apache.spark.sql.execution.ui +import java.util.concurrent.ConcurrentMap + import org.apache.spark.SparkContext import org.apache.spark.scheduler.SparkListenerEvent -import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionStart} +import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionEnd, SparkListenerSQLPlanExecutionStart} import org.apache.spark.status.ElementTrackingStore /** @@ -36,6 +38,13 @@ class SnappySQLAppListener(context: SparkContext) extends SQLAppStatusListener(context.conf, context.statusStore.store.asInstanceOf[ElementTrackingStore], live = true) { + private[this] val baseLiveExecutions: ConcurrentMap[Long, LiveExecutionData] = { + val f = classOf[SQLAppStatusListener].getDeclaredFields + .find(_.getName.contains("liveExecutions")).get + f.setAccessible(true) + f.get(this).asInstanceOf[ConcurrentMap[Long, LiveExecutionData]] + } + /** * Snappy's execution happens in two phases. First phase the plan is executed * to create a rdd which is then used to create a CachedDataFrame. @@ -58,14 +67,30 @@ class SnappySQLAppListener(context: SparkContext) case SparkListenerSQLExecutionStart(executionId, description, details, physicalPlanDescription, sparkPlanInfo, time) => + // if executionId already exists (from SparkListenerSQLPlanExecutionStart) then + // use the submissionTime from those details + val submissionTime = try { + context.statusStore.store.read(classOf[SQLExecutionUIData], executionId) match { + case null => time + case data if data.submissionTime <= 0 => time + case data => data.submissionTime + } + } catch { + case _: NoSuchElementException => time + } // description and details strings being reference equals means // trim off former here if (description eq details) { val desc = CachedDataFrame.queryStringShortForm(details) super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, desc, details, - physicalPlanDescription, sparkPlanInfo, time)) + physicalPlanDescription, sparkPlanInfo, submissionTime)) + } else if (submissionTime != time) { + super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, submissionTime)) } else super.onOtherEvent(event) + case SparkListenerSQLPlanExecutionEnd(executionId) => baseLiveExecutions.remove(executionId) + case _ => super.onOtherEvent(event) } } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index a4fec1b0ef..921f1ce6da 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -73,10 +73,10 @@ abstract class Spark23_4_Internals extends SparkInternals { f } - private val (listenerField, listenerFieldOffset): (Field, Long) = { + private val listenerFieldOffset: Long = { val f = classOf[SQLAppStatusStore].getDeclaredField("listener") f.setAccessible(true) - f -> UnsafeHolder.getUnsafe.objectFieldOffset(f) + UnsafeHolder.getUnsafe.objectFieldOffset(f) } override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { @@ -157,7 +157,7 @@ abstract class Spark23_4_Internals extends SparkInternals { protected def createAndAttachSQLListener(state: SnappySharedState, sc: SparkContext): Unit = { // replace inside SQLAppStatusStore as well as change on the Spark ListenerBus - listenerField.get(state.statusStore).asInstanceOf[Option[SQLAppStatusListener]] match { + state.statusStore.listener match { case Some(_: SnappySQLAppListener) => // already changed case Some(_: SQLAppStatusListener) => val newListener = new SnappySQLAppListener(sc) @@ -239,6 +239,8 @@ abstract class Spark23_4_Internals extends SparkInternals { override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite + override def getOverwriteOption(insert: InsertIntoDataSourceCommand): Boolean = insert.overwrite + override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifPartitionNotExists override def newGroupingSet(groupingSets: Seq[Seq[Expression]], diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index a42e3b64c8..c1c1a736b3 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -444,9 +444,20 @@ class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[Se override protected def optimizer: Optimizer = { new SparkOptimizer(catalog, experimentalMethods) with DefaultOptimizer { + private[this] var depth = 0 + override def state: SnappySessionState = session.snappySessionState - override def defaultBatches: Seq[Batch] = batchesImpl + override def defaultBatches: Seq[Batch] = { + if (depth == 0) { + depth += 1 + try { + batchesImpl + } finally { + depth -= 1 + } + } else super.defaultBatches + } override def extendedOperatorOptimizationRules: Seq[Rule[LogicalPlan]] = super.extendedOperatorOptimizationRules ++ customOperatorOptimizationRules diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index 56b41d20ed..148327017d 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -448,13 +448,14 @@ abstract class SnappyDDLParser(session: SnappySession) PARTITIONED ~ BY ~ identifierList | bucketSpec | LOCATION ~ stringLiteral).* ~ (AS ~ query).? ~ ws ~ &((';' ~ ws).* ~ EOI) ~> ((provider: Any, optionals: Any, asQuery: Any) => { - val tableOpts = new Array[Any](5) // options, comment, partitions, buckets, location + // options, comment, partitions, buckets, location + val tableOpts = Array[Any](None, None, Utils.EMPTY_STRING_ARRAY, None, None) optionals.asInstanceOf[Seq[Any]].foreach { - case opts: Map[_, _] => tableOpts(0) = opts - case comment: Some[_] => tableOpts(1) = comment.get - case parts: Seq[_] => tableOpts(2) = parts - case buckets: BucketSpec => tableOpts(3) = buckets - case location: String => tableOpts(4) = location + case opts: Map[_, _] => tableOpts(0) = Some(opts) + case comment: Some[_] => tableOpts(1) = comment + case parts: Seq[_] => tableOpts(2) = parts.asInstanceOf[Seq[String]].toArray + case buckets: BucketSpec => tableOpts(3) = Some(buckets) + case location: String => tableOpts(4) = Some(location) case v => throw new ParseException(s"Unknown table option: $v") } (provider, tableOpts(0), tableOpts(1), tableOpts(2), tableOpts(3), tableOpts(4), diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 99fec8b14f..af6617caba 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -995,14 +995,14 @@ class SnappyParser(session: SnappySession) UnresolvedFunction(fnName, UnresolvedStar(None) :: Nil, isDistinct = false) }) | setQuantifier ~ (expression * commaSep) ~ ')' ~ ws ~ - (OVER ~ windowSpec).? ~> { (n1: String, n2: Any, d: Option[Boolean], e: Any, w: Any) => + (OVER ~ windowSpec).? ~> { (n1: String, n2: Any, a: Option[Boolean], e: Any, w: Any) => val fnName = n2.asInstanceOf[Option[String]] match { case None => new FunctionIdentifier(n1) case Some(f) => new FunctionIdentifier(f, Some(n1)) } val allExprs = e.asInstanceOf[Seq[Expression]].toIndexedSeq val exprs = foldableFunctionsExpressionHandler(allExprs, n1) - val function = if (d.contains(false)) { + val function = if (!a.contains(false)) { UnresolvedFunction(fnName, exprs, isDistinct = false) } else if (fnName.funcName.equalsIgnoreCase("count")) { aggregate.Count(exprs).toAggregateExpression(isDistinct = true) diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 6d827478e7..bad5adb1c7 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -38,7 +38,7 @@ import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, Err import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.common.HAC -import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} +import org.apache.spark.sql.execution.datasources.{DataSource, InsertIntoDataSourceCommand, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} @@ -323,6 +323,11 @@ trait SparkInternals extends Logging { */ def getOverwriteOption(insert: InsertIntoTable): Boolean + /** + * Return true if overwrite is enabled in the insert plan else false. + */ + def getOverwriteOption(insert: InsertIntoDataSourceCommand): Boolean + /** * Return true if "ifNotExists" is enabled in the insert plan else false. */ diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 7708690d70..3816170afe 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -26,7 +26,6 @@ import com.pivotal.gemfirexd.internal.engine.store.GemFireStore import io.snappydata.Property import org.apache.spark.Partition -import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.analysis import org.apache.spark.sql.catalyst.analysis.TypeCoercion.numericPrecedence import org.apache.spark.sql.catalyst.analysis.{Analyzer, Star, UnresolvedAttribute} @@ -51,6 +50,7 @@ import org.apache.spark.sql.sources._ import org.apache.spark.sql.store.StoreUtils import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager, WindowLogicalPlan} import org.apache.spark.sql.types._ +import org.apache.spark.sql.{Strategy, _} import org.apache.spark.streaming.Duration @@ -170,7 +170,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu DynamicFoldableExpression(mark(e, foldable = false)) } - plan transform { + plan resolveOperators { // transformDown for expression so that top-most node which is foldable gets // selected for wrapping by DynamicFoldableExpression and further sub-expressions // do not since foldExpression will reset inner ParamLiterals as non-foldable @@ -216,7 +216,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu var duration: Duration = null var slide: Option[Duration] = None var transformed: Boolean = false - plan transformDown { + plan resolveOperators { case win@WindowLogicalPlan(d, s, child, false) => child match { case _: LogicalRelation | _: LogicalDStreamPlan => win @@ -275,7 +275,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu * Orders the join keys as per the underlying partitioning keys ordering of the table. */ object OrderJoinConditions extends Rule[LogicalPlan] with JoinQueryPlanning { - def apply(plan: LogicalPlan): LogicalPlan = plan transform { + def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { case ExtractEquiJoinKeys(joinType, leftKeys, rightKeys, otherCondition, left, right) => prepareOrderedCondition(joinType, left, right, leftKeys, rightKeys, otherCondition) } @@ -342,7 +342,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } object ResolveAliasInGroupBy extends Rule[LogicalPlan] { - def apply(plan: LogicalPlan): LogicalPlan = plan transformUp { + def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { // pivot with '*' projection messes up references for some reason // in older versions of Spark case Project(projectList, p: Pivot) @@ -400,7 +400,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu // is of type RunnableCommad. Later if it turns out any data operation // is happening via this command we need to handle it case _: RunnableCommand => plan - case _ if !alreadyPolicyApplied(plan) => plan.transformUp { + case _ if !alreadyPolicyApplied(plan) => plan resolveOperators { case lr: LogicalRelation if lr.relation.isInstanceOf[RowLevelSecurityRelation] => val policyFilter = catalog.getCombinedPolicyFilterForNativeTable( lr.relation.asInstanceOf[RowLevelSecurityRelation], Some(lr)) @@ -521,7 +521,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu s"Update/Delete requires a MutableRelation but got $table")) // resolve key columns right away var mutablePlan: Option[LogicalRelation] = None - val newChild = child.transformDown { + val newChild = child resolveOperators { case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] && lr.relation.asInstanceOf[MutableRelation].table.equalsIgnoreCase(tableName) => val mutable = lr.relation.asInstanceOf[MutableRelation] @@ -544,7 +544,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } } - def apply(plan: LogicalPlan): LogicalPlan = plan transform { + def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { case u@Update(table, child, keyColumns, updateCols, updateExprs) if keyColumns.isEmpty && u.resolved && child.resolved => // add the key columns to the plan @@ -781,7 +781,7 @@ trait SnappyAnalyzer extends Analyzer with SparkSupport { */ object SnappyPromoteStrings extends Rule[LogicalPlan] { override def apply(plan: LogicalPlan): LogicalPlan = { - plan transformAllExpressions { + plan resolveExpressions { case e if !e.childrenResolved => e case p@BinaryComparison(left@StringType(), right@QuestionMark(_)) if right.dataType == NullType => diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index 21737e1523..130e7dbe83 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -563,14 +563,14 @@ trait DefaultOptimizer extends SparkOptimizer { implicit val ss: SnappySession = state.snappySession var insertedSnappyOpts = 0 val modified = super.batches.map { - case batch if batch.name.equalsIgnoreCase("Operator Optimizations") => + case batch if batch.name.startsWith("Operator Optimization") => insertedSnappyOpts += 1 val (left, right) = batch.rules.splitAt(batch.rules.indexOf(ReorderJoin)) Batch(batch.name, batch.strategy, (left :+ ResolveIndex()) ++ right: _*) case b => b } - if (insertedSnappyOpts != 1) { + if (insertedSnappyOpts == 0) { throw new AnalysisException("Snappy Optimizations not applied") } @@ -587,7 +587,7 @@ private[sql] final class PreprocessTable(state: SnappySessionState) private def conf: SQLConf = state.conf - def apply(plan: LogicalPlan): LogicalPlan = plan transform { + def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { // Add dbtable property for create table. While other routes can add it in // SnappySession.createTable, the DataFrameWriter path needs to be handled here. @@ -831,7 +831,7 @@ object LikeEscapeSimplification { } } - def apply(plan: LogicalPlan): LogicalPlan = plan transformAllExpressions { + def apply(plan: LogicalPlan): LogicalPlan = plan resolveExpressions { case l@Like(left, Literal(pattern, StringType)) => simplifyLike(null, l, left, pattern.toString) } diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index c972a4c7ed..3692817d32 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -24,7 +24,7 @@ import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan} import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.command.{ExecutedCommandExec, RunnableCommand} -import org.apache.spark.sql.execution.datasources.LogicalRelation +import org.apache.spark.sql.execution.datasources.{InsertIntoDataSourceCommand, LogicalRelation} import org.apache.spark.sql.internal.PutIntoColumnTable import org.apache.spark.sql.types.{DataType, LongType} @@ -47,13 +47,19 @@ object StoreStrategy extends Strategy with SparkSupport { EncoderScanExec(plan.rdd.asInstanceOf[RDD[Any]], plan.encoder, plan.isFlat, plan.output) :: Nil - case insert: InsertIntoTable if insert.partition.isEmpty && - !internals.getIfNotExistsOption(insert) && insert.table.isInstanceOf[LogicalRelation] && - insert.table.asInstanceOf[LogicalRelation].relation.isInstanceOf[PlanInsertableRelation] => - val l = insert.table.asInstanceOf[LogicalRelation] + case i: InsertIntoTable if i.partition.isEmpty && + !internals.getIfNotExistsOption(i) && i.table.isInstanceOf[LogicalRelation] && + i.table.asInstanceOf[LogicalRelation].relation.isInstanceOf[PlanInsertableRelation] => + val l = i.table.asInstanceOf[LogicalRelation] val p = l.relation.asInstanceOf[PlanInsertableRelation] - val preAction = if (internals.getOverwriteOption(insert)) () => p.truncate() else () => () - ExecutePlan(p.getInsertPlan(l, planLater(insert.children.head)), preAction) :: Nil + val preAction = if (internals.getOverwriteOption(i)) () => p.truncate() else () => () + ExecutePlan(p.getInsertPlan(l, planLater(i.children.head)), preAction) :: Nil + + case i: InsertIntoDataSourceCommand + if i.logicalRelation.relation.isInstanceOf[PlanInsertableRelation] => + val p = i.logicalRelation.relation.asInstanceOf[PlanInsertableRelation] + val preAction = if (internals.getOverwriteOption(i)) () => p.truncate() else () => () + ExecutePlan(p.getInsertPlan(i.logicalRelation, planLater(i.query)), preAction) :: Nil case d@DMLExternalTable(table, cmd) => findLogicalRelation[BaseRelation](table) match { case Some(l) => ExecutedCommandExec(ExternalTableDMLCmd(l, cmd, d.output)) :: Nil diff --git a/settings.gradle b/settings.gradle index 9d7230748f..9d6d43cf47 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,7 +16,7 @@ */ String scalaBinaryVersion = '2.11' -String sparkVersion = '2.1.1' +String sparkVersion = '2.4.5' String sparkConnectorVersion = System.getProperty('spark.connector.version', sparkVersion) rootProject.name = 'snappydata_' + scalaBinaryVersion diff --git a/store b/store index 97026ff140..4c50982e3c 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 97026ff140fa5fcc2c26d555ae1b5838d35c069d +Subproject commit 4c50982e3cf644e379bdb237f9dae6beccbc2e8f From 4d09cc1b97389fa676c5f1e285c863cce31cbf57 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 19 Feb 2020 03:22:52 +0530 Subject: [PATCH 46/80] build fixes --- ...ColumnBatchAndExternalTableDUnitTest.scala | 37 +++++++++---------- .../test/scala/io/snappydata/QueryTest.scala | 9 +++-- .../spark/sql/SnappySQLQuerySuite.scala | 5 ++- .../spark/sql/internal/Spark21Internals.scala | 3 ++ .../sql/internal/Spark23_4_Internals.scala | 10 +++-- .../org/apache/spark/sql/SparkInternals.scala | 5 +++ 6 files changed, 40 insertions(+), 29 deletions(-) diff --git a/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala b/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala index 2dd02d66a8..5db173ab3b 100644 --- a/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala +++ b/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala @@ -24,13 +24,16 @@ import io.snappydata.test.dunit.{AvailablePortHelper, SerializableCallable} import io.snappydata.util.TestUtils import org.scalatest.Assertions +import org.apache.spark.SparkContext import org.apache.spark.internal.Logging import org.apache.spark.scheduler.{SparkListener, SparkListenerTaskEnd, SparkListenerTaskStart} case class TestRecord(col1: Int, col2: Int, col3: Int) class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTestBase(s) - with Assertions with Logging { + with Assertions with Logging with SparkSupport { + + def activeExecutionIds(sc: SparkContext): Set[Long] = internals.getActiveExecutionIds(sc) def _testColumnBatchSkipping(): Unit = { @@ -54,7 +57,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest ds.write.insertInto("airline") // ***Check for the case when all the column batches are scanned **** - var previousExecutionIds = snc.sharedState.listener.executionIdToData.keySet + var previousExecutionIds = activeExecutionIds(sc) val df_allColumnBatchesScan = snc.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + @@ -63,8 +66,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest df_allColumnBatchesScan.count() - var executionIds = - snc.sharedState.listener.executionIdToData.keySet.diff(previousExecutionIds) + var executionIds = activeExecutionIds(sc).diff(previousExecutionIds) var executionId = executionIds.head @@ -74,7 +76,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest assert(scanned1 > 0, "All Column batches should have been scanned") // ***Check for the case when all the column batches are skipped**** - previousExecutionIds = snc.sharedState.listener.executionIdToData.keySet + previousExecutionIds = activeExecutionIds(sc) val df_noColumnBatchesScan = snc.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + @@ -83,8 +85,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest df_noColumnBatchesScan.count() - executionIds = - snc.sharedState.listener.executionIdToData.keySet.diff(previousExecutionIds) + executionIds = activeExecutionIds(sc).diff(previousExecutionIds) executionId = executionIds.head @@ -94,7 +95,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest assert(skipped2 > 0, "No Column batches should have been scanned") // ***Check for the case when some of the column batches are scanned **** - previousExecutionIds = snc.sharedState.listener.executionIdToData.keySet + previousExecutionIds = activeExecutionIds(sc) val df_someColumnBatchesScan = snc.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + @@ -103,8 +104,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest df_someColumnBatchesScan.count() - executionIds = - snc.sharedState.listener.executionIdToData.keySet.diff(previousExecutionIds) + executionIds = activeExecutionIds(sc).diff(previousExecutionIds) executionId = executionIds.head @@ -117,7 +117,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest // check for StartsWith predicate with MAX/MIN handling // first all batches chosen - previousExecutionIds = snc.sharedState.listener.executionIdToData.keySet + previousExecutionIds = activeExecutionIds(sc) val df_allColumnBatchesLikeScan = snc.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + @@ -127,8 +127,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest var count = df_allColumnBatchesLikeScan.count() assert(count == 100, s"Unexpected count = $count, expected 100") - executionIds = - snc.sharedState.listener.executionIdToData.keySet.diff(previousExecutionIds) + executionIds = activeExecutionIds(sc).diff(previousExecutionIds) executionId = executionIds.head @@ -139,7 +138,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest assert(scanned4 > 0, "All Column batches should have been scanned") // next some batches skipped - previousExecutionIds = snc.sharedState.listener.executionIdToData.keySet + previousExecutionIds = activeExecutionIds(sc) val df_someColumnBatchesLikeScan = snc.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + @@ -149,8 +148,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest count = df_someColumnBatchesLikeScan.count() assert(count == 12, s"Unexpected count = $count, expected 12") - executionIds = - snc.sharedState.listener.executionIdToData.keySet.diff(previousExecutionIds) + executionIds = activeExecutionIds(sc).diff(previousExecutionIds) executionId = executionIds.head @@ -161,7 +159,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest assert(scanned5 != skipped5, "Some Column batches should have been skipped - comparison") // last all batches skipped - previousExecutionIds = snc.sharedState.listener.executionIdToData.keySet + previousExecutionIds = activeExecutionIds(sc) val df_noColumnBatchesLikeScan = snc.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + @@ -171,8 +169,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest count = df_noColumnBatchesLikeScan.count() assert(count == 0, s"Unexpected count = $count, expected 0") - executionIds = - snc.sharedState.listener.executionIdToData.keySet.diff(previousExecutionIds) + executionIds = activeExecutionIds(sc).diff(previousExecutionIds) executionId = executionIds.head @@ -335,7 +332,7 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest } } } - sc.listenerBus.addListener(listener) + sc.addSparkListener(listener) // ---- Check explicit spark.task.cpus setting takes effect in embedded mode ----- diff --git a/cluster/src/test/scala/io/snappydata/QueryTest.scala b/cluster/src/test/scala/io/snappydata/QueryTest.scala index 2ba69be49b..b946791461 100644 --- a/cluster/src/test/scala/io/snappydata/QueryTest.scala +++ b/cluster/src/test/scala/io/snappydata/QueryTest.scala @@ -24,7 +24,7 @@ import scala.collection.JavaConverters._ import com.pivotal.gemfirexd.TestUtil import org.apache.spark.sql.execution.benchmark.ColumnCacheBenchmark -import org.apache.spark.sql.execution.exchange.{BroadcastExchangeExec, ShuffleExchange} +import org.apache.spark.sql.execution.exchange.{BroadcastExchangeExec, ShuffleExchangeExec} import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.{AnalysisException, Row, SnappyContext, SnappySession, SparkSession} @@ -177,11 +177,12 @@ class QueryTest extends SnappyFunSuite { snc.conf.set("spark.sql.caseSensitive", "false") } + def row(i: java.lang.Integer, d: java.lang.Double): (java.lang.Integer, java.lang.Double) = + (i, d) + private def setupTestData(session: SnappySession): Unit = { import session.implicits._ - val row = identity[(java.lang.Integer, java.lang.Double)] _ - val l = Seq( row(1, 2.0), row(1, 2.0), @@ -355,7 +356,7 @@ class QueryTest extends SnappyFunSuite { var plan = df.queryExecution.executedPlan // exactly one exchange of test1 and test2 is expected val exchanges = plan.collect { - case e: ShuffleExchange if e.outputPartitioning.numPartitions > 1 => e + case e: ShuffleExchangeExec if e.outputPartitioning.numPartitions > 1 => e } assert(exchanges.length === 2) assert(exchanges.head.treeString.toLowerCase.contains("test1")) diff --git a/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala b/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala index 893d98e248..63b7133a12 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala @@ -153,9 +153,10 @@ class SnappySQLQuerySuite extends SnappyFunSuite { session.dropTable("subqueryData", ifExists = true) } - test("NOT EXISTS predicate subquery") { - val row = identity[(java.lang.Integer, java.lang.Double)] _ + def row(i: java.lang.Integer, d: java.lang.Double): (java.lang.Integer, java.lang.Double) = + (i, d) + test("NOT EXISTS predicate subquery") { lazy val l = Seq( row(1, 2.0), row(1, 2.0), diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 3b47184013..63787772fa 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -225,6 +225,9 @@ abstract class Spark21Internals extends SparkInternals { } } + override def getActiveExecutionIds(sparkContext: SparkContext): Set[Long] = + SparkSession.sqlListener.get().getRunningExecutions.map(_.executionId).toSet + override def newSharedState(sparkContext: SparkContext): SnappySharedState = { new SnappySharedState21(sparkContext) } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 921f1ce6da..180ca23fe1 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -67,13 +67,13 @@ import org.apache.spark.util.Utils */ abstract class Spark23_4_Internals extends SparkInternals { - private val codegenContextClassFunctions: Field = { + private[this] val codegenContextClassFunctions: Field = { val f = classOf[CodegenContext].getDeclaredField("classFunctions") f.setAccessible(true) f } - private val listenerFieldOffset: Long = { + private[this] val listenerFieldOffset: Long = { val f = classOf[SQLAppStatusStore].getDeclaredField("listener") f.setAccessible(true) UnsafeHolder.getUnsafe.objectFieldOffset(f) @@ -175,7 +175,11 @@ abstract class Spark23_4_Internals extends SparkInternals { if (state ne null) createAndAttachSQLListener(state, sparkContext) } - def clearSQLListener(): Unit = { + override def getActiveExecutionIds(sparkContext: SparkContext): Set[Long] = { + SnappyContext.getExistingSharedState.statusStore.executionsList().map(_.executionId).toSet + } + + override def clearSQLListener(): Unit = { // no global SQLListener in Spark 2.3.x } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index bad5adb1c7..3f13735854 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -195,6 +195,11 @@ trait SparkInternals extends Logging { */ def createAndAttachSQLListener(sparkContext: SparkContext): Unit + /** + * Get the active execution IDs for all running jobs. + */ + def getActiveExecutionIds(sparkContext: SparkContext): Set[Long] + /** * Create a new global instance of [[SnappySharedState]]. */ From bc4ba1dc2726962045b91f0fa6d57ee18c2ac33f Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 19 Feb 2020 03:56:53 +0530 Subject: [PATCH 47/80] update spark module --- spark | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark b/spark index fecbb486fe..f2e40daae6 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit fecbb486feaa42c02a07c2c20f5d2363e6da6d11 +Subproject commit f2e40daae65e0160c164f776178b9b94dcf93bf3 From 39a0b822f5fca5420f847225e6ebfc776999e467 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 19 Feb 2020 16:19:09 +0530 Subject: [PATCH 48/80] more fixes and reorganization --- build.gradle | 2 +- cluster/build.gradle | 4 + .../cluster/SplitSnappyClusterDUnitTest.scala | 22 +-- ...ColumnBatchAndExternalTableDUnitTest.scala | 89 ++++++------ .../benchmark/snappy/tpchmodifiers.scala | 6 +- .../memory/SnappyMemoryAccountingSuite.scala | 2 +- .../org/apache/spark/sql/IndexTest.scala | 32 +++-- .../org/apache/spark/sql/NWQueries.scala | 1 - .../benchmark/ColumnCacheBenchmark.scala | 55 ++++++-- .../sql/execution/benchmark/MapTest.scala | 35 +++-- .../execution/benchmark/StringBenchmark.scala | 2 +- .../sql/execution/benchmark/TAQTest.scala | 9 +- .../benchmark/TPCDSQuerySnappyBenchmark.scala | 26 ++-- .../sql/policy/PolicyJdbcClientTest.scala | 14 +- .../org/apache/spark/sql/store/BugTest.scala | 14 +- core/compatibility/spark-2.1.0/build.gradle | 50 ------- .../sql/internal/SnappyCacheManager210.scala | 56 -------- .../sql/internal/Spark210Internals.scala | 71 ---------- core/compatibility/spark-2.1.1/build.gradle | 51 ------- .../sql/internal/Spark211Internals.scala | 120 ----------------- .../spark/sql/internal/Spark21Internals.scala | 127 +++++++++--------- core/compatibility/spark-2.3/build.gradle | 11 +- .../spark/sql/internal/Spark23Internals.scala | 6 +- .../sql/internal/Spark23_4_Internals.scala | 15 +-- core/compatibility/spark-2.4.5/build.gradle | 8 +- core/compatibility/spark-2.4/build.gradle | 12 +- .../spark/sql/internal/Spark24Internals.scala | 6 +- .../catalog/ConnectorExternalCatalog.scala | 2 +- .../org/apache/spark/sql/SparkInternals.scala | 14 -- .../org/apache/spark/sql/SparkSupport.scala | 7 +- .../spark/sql/hive/SnappySessionState.scala | 2 +- .../hydra/consistency/ConsistencyTest.scala | 2 +- .../apache/spark/sql/DistIndexTestUtils.scala | 16 ++- settings.gradle | 6 +- 34 files changed, 294 insertions(+), 601 deletions(-) delete mode 100644 core/compatibility/spark-2.1.0/build.gradle delete mode 100644 core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala delete mode 100644 core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala delete mode 100644 core/compatibility/spark-2.1.1/build.gradle delete mode 100644 core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala diff --git a/build.gradle b/build.gradle index b836b5f063..3e8b46d186 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ apply plugin: "nebula.ospackage" def isEnterpriseProduct = rootProject.hasProperty('snappydata.enterprise') def compatibilityMap = [ - '2.1.0': '2.1.0', '2.1.1': '2.1.1', '2.1.2': '2.1.1', '2.1.3': '2.1.1', + '2.1.1': '2.1', '2.1.2': '2.1', '2.1.3': '2.1', '2.3.0': '2.3', '2.3.1': '2.3', '2.3.2': '2.3', '2.3.3': '2.3', '2.3.4': '2.3', '2.4.0': '2.4', '2.4.1': '2.4', '2.4.2': '2.4', '2.4.3': '2.4', '2.4.4': '2.4', '2.4.5': '2.4.5' ] diff --git a/cluster/build.gradle b/cluster/build.gradle index 88ecb1b82d..5515123d95 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -58,6 +58,8 @@ dependencies { testCompile project(path: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion, configuration: 'testOutput') + testCompile project(path: ':snappy-spark:snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion, + configuration: 'testOutput') } else { compile 'io.snappydata:snappy-spark-unsafe_' + scalaBinaryVersion + ':' + snappySparkVersion compile 'io.snappydata:snappy-spark-core_' + scalaBinaryVersion + ':' + snappySparkVersion @@ -82,6 +84,8 @@ dependencies { testCompile group: 'io.snappydata', name: 'snappy-spark-sql_' + scalaBinaryVersion, version: snappySparkVersion, classifier: 'tests' + testCompile group: 'io.snappydata', name: 'snappy-spark-sql-kafka-0.10_' + scalaBinaryVersion, + version: snappySparkVersion, classifier: 'tests' } compile (project(coreProjectName)) { diff --git a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala index bb96c7d76a..8bb0ce4b1b 100644 --- a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala +++ b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala @@ -26,6 +26,7 @@ import scala.concurrent.{Await, Future} import scala.language.postfixOps import scala.reflect.io.Path import scala.util.{Failure, Success, Try} + import com.gemstone.gemfire.internal.cache.PartitionedRegion import com.pivotal.gemfirexd.internal.engine.Misc import io.snappydata.core.{TestData, TestData2} @@ -33,6 +34,7 @@ import io.snappydata.test.dunit.{AvailablePortHelper, SerializableRunnable} import io.snappydata.util.TestUtils import io.snappydata.{ColumnUpdateDeleteTests, ConcurrentOpsTests, Property, SnappyTableStatsProviderService} import org.junit.Assert + import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} @@ -40,7 +42,7 @@ import org.apache.spark.sql.execution.CatalogStaleException import org.apache.spark.sql.execution.columnar.impl.ColumnFormatRelation import org.apache.spark.sql.kafka010.KafkaTestUtils import org.apache.spark.sql.store.{SnappyJoinSuite, StoreUtils} -import org.apache.spark.sql.streaming.ProcessingTime +import org.apache.spark.sql.streaming.Trigger import org.apache.spark.sql.types.{DateType, StringType, StructField, StructType} import org.apache.spark.sql.udf.UserDefinedFunctionsDUnitTest import org.apache.spark.{Logging, SparkConf, SparkContext} @@ -49,8 +51,7 @@ import org.apache.spark.{Logging, SparkConf, SparkContext} * Basic tests for non-embedded mode connections to an embedded cluster. */ class SplitSnappyClusterDUnitTest(s: String) - extends ClusterManagerTestBase(s) with SplitClusterDUnitTestBase - with Serializable { + extends ClusterManagerTestBase(s) with SplitClusterDUnitTestBase with Serializable { override val locatorNetPort: Int = testObject.locatorNetPort @@ -255,7 +256,7 @@ class SplitSnappyClusterDUnitTest(s: String) if (jars.count() > 0) { var str = msg jars.collect().foreach(x => str += s"$x,") - assert(false, str) + assert(assertion = false, str) } } @@ -291,13 +292,16 @@ class SplitSnappyClusterDUnitTest(s: String) sns.sql("deploy package testsch.mongo-spark_v1.2 'org.mongodb.spark:mongo-spark" + "-connector_2.11:2.2.2'") sns.sql("undeploy testsch.mongo-spark_v1.2") - sns.sql(s"""deploy package "testsch"."mongo-spark_v1.3" 'org.mongodb.spark:mongo""" + + sns.sql( + s"""deploy package "testsch"."mongo-spark_v1.3" 'org.mongodb.spark:mongo""" + "-spark-connector_2.11:2.2.2'") sns.sql(s"""undeploy "testsch"."mongo-spark_v1.3" """) - sns.sql(s"""deploy package testsch."mongo-spark_v1.4" 'org.mongodb.spark:mongo""" + + sns.sql( + s"""deploy package testsch."mongo-spark_v1.4" 'org.mongodb.spark:mongo""" + "-spark-connector_2.11:2.2.2'") sns.sql(s"""undeploy testsch."mongo-spark_v1.4" """) - sns.sql(s"""deploy package "testsch".mongo-spark_v1.5 'org.mongodb.spark:mongo""" + + sns.sql( + s"""deploy package "testsch".mongo-spark_v1.5 'org.mongodb.spark:mongo""" + "-spark-connector_2.11:2.2.2'") sns.sql(s"""undeploy "testsch".mongo-spark_v1.5 """) assert(sns.sql("list packages").count() == 0) @@ -346,7 +350,7 @@ class SplitSnappyClusterDUnitTest(s: String) "Deploy command should have failed because of the duplicate alias.") case Failure(error) => assert(error.getMessage.contains("Name 'akka-v1' specified in" + - " context 'of deploying jars/packages' is not unique.")) + " context 'of deploying jars/packages' is not unique.")) } sns.sql("undeploy akka-v1") functionCheck(sns, "Some jars/packages are not cleaned up! ") @@ -1411,7 +1415,7 @@ object SplitSnappyClusterDUnitTest .writeStream .format("snappysink") .queryName(tableName) - .trigger(ProcessingTime("1 seconds")) + .trigger(Trigger.ProcessingTime("1 seconds")) .option("tableName", tableName) .option("checkpointLocation", s"$testTempDir/checkpoint") .start() diff --git a/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala b/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala index 5db173ab3b..40f1b9d9a8 100644 --- a/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala +++ b/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala @@ -24,7 +24,6 @@ import io.snappydata.test.dunit.{AvailablePortHelper, SerializableCallable} import io.snappydata.util.TestUtils import org.scalatest.Assertions -import org.apache.spark.SparkContext import org.apache.spark.internal.Logging import org.apache.spark.scheduler.{SparkListener, SparkListenerTaskEnd, SparkListenerTaskStart} @@ -33,11 +32,13 @@ case class TestRecord(col1: Int, col2: Int, col3: Int) class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTestBase(s) with Assertions with Logging with SparkSupport { - def activeExecutionIds(sc: SparkContext): Set[Long] = internals.getActiveExecutionIds(sc) + private def activeExecutionIds(session: SparkSession): Set[Long] = { + session.sharedState.statusStore.executionsList().map(_.executionId).toSet + } - def _testColumnBatchSkipping(): Unit = { + def testColumnBatchSkipping(): Unit = { - val snc = SnappyContext(sc) + val session = new SnappySession(sc) val ddlStr = "YearI INT NOT NULL," + "MonthI INT NOT NULL," + "DayOfMonth INT NOT NULL," + @@ -47,69 +48,69 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest // reduce the batch size to ensure that multiple are created - snc.sql(s"create table if not exists airline ($ddlStr) " + + session.sql(s"create table if not exists airline ($ddlStr) " + s" using column options (Buckets '2', COLUMN_BATCH_SIZE '400')") - import snc.implicits._ + import session.implicits._ - val ds = snc.createDataset(sc.range(1, 101).map(i => + val ds = session.createDataset(sc.range(1, 101).map(i => AirlineData(2015, 2, 15, 1002, i.toInt, "AA" + i))) ds.write.insertInto("airline") // ***Check for the case when all the column batches are scanned **** - var previousExecutionIds = activeExecutionIds(sc) + var previousExecutionIds = activeExecutionIds(session) - val df_allColumnBatchesScan = snc.sql( + val df_allColumnBatchesScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where ArrDelay < 101 " + "group by UniqueCarrier order by arrivalDelay") df_allColumnBatchesScan.count() - var executionIds = activeExecutionIds(sc).diff(previousExecutionIds) + var executionIds = activeExecutionIds(session).diff(previousExecutionIds) var executionId = executionIds.head val (scanned1, skipped1) = - findColumnBatchStats(df_allColumnBatchesScan, snc.snappySession, executionId) + findColumnBatchStats(df_allColumnBatchesScan, session, executionId) assert(skipped1 == 0, "All Column batches should have been scanned") assert(scanned1 > 0, "All Column batches should have been scanned") // ***Check for the case when all the column batches are skipped**** - previousExecutionIds = activeExecutionIds(sc) + previousExecutionIds = activeExecutionIds(session) - val df_noColumnBatchesScan = snc.sql( + val df_noColumnBatchesScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where ArrDelay > 101 " + "group by UniqueCarrier order by arrivalDelay") df_noColumnBatchesScan.count() - executionIds = activeExecutionIds(sc).diff(previousExecutionIds) + executionIds = activeExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head val (scanned2, skipped2) = - findColumnBatchStats(df_allColumnBatchesScan, snc.snappySession, executionId) + findColumnBatchStats(df_allColumnBatchesScan, session, executionId) assert(scanned2 == skipped2, "No Column batches should have been scanned") assert(skipped2 > 0, "No Column batches should have been scanned") // ***Check for the case when some of the column batches are scanned **** - previousExecutionIds = activeExecutionIds(sc) + previousExecutionIds = activeExecutionIds(session) - val df_someColumnBatchesScan = snc.sql( + val df_someColumnBatchesScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where ArrDelay < 20 " + "group by UniqueCarrier order by arrivalDelay") df_someColumnBatchesScan.count() - executionIds = activeExecutionIds(sc).diff(previousExecutionIds) + executionIds = activeExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head val (scanned3, skipped3) = - findColumnBatchStats(df_allColumnBatchesScan, snc.snappySession, executionId) + findColumnBatchStats(df_allColumnBatchesScan, session, executionId) assert(skipped3 > 0, "Some Column batches should have been skipped") assert(scanned3 != skipped3, "Some Column batches should have been skipped - comparison") @@ -117,9 +118,9 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest // check for StartsWith predicate with MAX/MIN handling // first all batches chosen - previousExecutionIds = activeExecutionIds(sc) + previousExecutionIds = activeExecutionIds(session) - val df_allColumnBatchesLikeScan = snc.sql( + val df_allColumnBatchesLikeScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where UniqueCarrier like 'AA%' " + "group by UniqueCarrier order by arrivalDelay") @@ -127,20 +128,20 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest var count = df_allColumnBatchesLikeScan.count() assert(count == 100, s"Unexpected count = $count, expected 100") - executionIds = activeExecutionIds(sc).diff(previousExecutionIds) + executionIds = activeExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head val (scanned4, skipped4) = - findColumnBatchStats(df_allColumnBatchesLikeScan, snc.snappySession, executionId) + findColumnBatchStats(df_allColumnBatchesLikeScan, session, executionId) assert(skipped4 == 0, "No Column batches should have been skipped") assert(scanned4 > 0, "All Column batches should have been scanned") // next some batches skipped - previousExecutionIds = activeExecutionIds(sc) + previousExecutionIds = activeExecutionIds(session) - val df_someColumnBatchesLikeScan = snc.sql( + val df_someColumnBatchesLikeScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where UniqueCarrier like 'AA1%' " + "group by UniqueCarrier order by arrivalDelay") @@ -148,20 +149,20 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest count = df_someColumnBatchesLikeScan.count() assert(count == 12, s"Unexpected count = $count, expected 12") - executionIds = activeExecutionIds(sc).diff(previousExecutionIds) + executionIds = activeExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head val (scanned5, skipped5) = - findColumnBatchStats(df_someColumnBatchesLikeScan, snc.snappySession, executionId) + findColumnBatchStats(df_someColumnBatchesLikeScan, session, executionId) assert(skipped5 > 0, "Some Column batches should have been skipped") assert(scanned5 != skipped5, "Some Column batches should have been skipped - comparison") // last all batches skipped - previousExecutionIds = activeExecutionIds(sc) + previousExecutionIds = activeExecutionIds(session) - val df_noColumnBatchesLikeScan = snc.sql( + val df_noColumnBatchesLikeScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where UniqueCarrier like 'AA0%' " + "group by UniqueCarrier order by arrivalDelay") @@ -169,36 +170,28 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest count = df_noColumnBatchesLikeScan.count() assert(count == 0, s"Unexpected count = $count, expected 0") - executionIds = activeExecutionIds(sc).diff(previousExecutionIds) + executionIds = activeExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head val (scanned6, skipped6) = - findColumnBatchStats(df_noColumnBatchesLikeScan, snc.snappySession, executionId) + findColumnBatchStats(df_noColumnBatchesLikeScan, session, executionId) assert(scanned6 == skipped6, "No Column batches should have been returned") assert(skipped6 > 0, "No Column batches should have been returned") } private def findColumnBatchStats(df: DataFrame, - sc: SnappySession, executionId: Long): (Long, Long) = { - - val metricValues = sc.sharedState.listener.getExecutionMetrics(executionId) - val a = (sc.sharedState.listener.getRunningExecutions ++ - sc.sharedState.listener.getCompletedExecutions).filter(x => { - x.executionId == executionId - }) - val seenid = a.head.accumulatorMetrics.filter(x => { - x._2.name == "column batches seen" - }).head._1 - val skippedid = a.head.accumulatorMetrics.filter(x => { - x._2.name == "column batches skipped by the predicate" - }).head._1 - - (metricValues.filter(_._1 == seenid).head._2.toInt, - metricValues.filter(_._1 == skippedid).head._2.toInt) - } + session: SnappySession, executionId: Long): (Long, Long) = { + val execData = session.sharedState.statusStore.executionsList().find( + _.executionId == executionId).get + val seenId = execData.metrics.find(_.name == "column batches seen").get + val skippedId = execData.metrics.find(_.name == "column batches skipped by the predicate").get + + (execData.metricValues.filter(_._1 == seenId).head._2.toInt, + execData.metricValues.filter(_._1 == skippedId).head._2.toInt) + } def testCreateColumnTablesFromOtherTables(): Unit = { val tempRowTableProps = "BUCKETS '16', PARTITION_BY 'COL2'" diff --git a/cluster/src/test/scala/io/snappydata/benchmark/snappy/tpchmodifiers.scala b/cluster/src/test/scala/io/snappydata/benchmark/snappy/tpchmodifiers.scala index b55b0bf088..462b6e2614 100644 --- a/cluster/src/test/scala/io/snappydata/benchmark/snappy/tpchmodifiers.scala +++ b/cluster/src/test/scala/io/snappydata/benchmark/snappy/tpchmodifiers.scala @@ -16,8 +16,6 @@ */ package io.snappydata.benchmark.snappy -import scala.util.matching.Regex - import org.apache.spark.sql.DataFrame import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.analysis.UnresolvedRelation @@ -112,14 +110,14 @@ trait SnappyAdapter extends Adapter with DynamicQueryGetter { // per-row processing time for those cases. val queryRelations = scala.collection.mutable.HashSet[String]() executor(queryString).queryExecution.logical.map { - case ur@UnresolvedRelation(t: TableIdentifier, _) => + case ur@UnresolvedRelation(t: TableIdentifier) => queryRelations.add(t.table.toLowerCase) case lp: LogicalPlan => lp.expressions.foreach { _ foreach { case subquery: SubqueryExpression => subquery.plan.foreach { - case ur@UnresolvedRelation(t: TableIdentifier, _) => + case ur@UnresolvedRelation(t: TableIdentifier) => queryRelations.add(t.table.toLowerCase) case _ => } diff --git a/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala b/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala index 25f1faa26d..e592be1319 100644 --- a/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala @@ -615,7 +615,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { val taskMemoryManager = new TaskMemoryManager(sparkSession.sparkContext.env.memoryManager, 0L) val taskContext = - new TaskContextImpl(0, 0, taskAttemptId = 1, 0, taskMemoryManager, new Properties, null) + new TaskContextImpl(0, 0, 0, taskAttemptId = 1, 0, taskMemoryManager, new Properties, null) try { CachedDataFrame(taskContext, Seq(unsafeRow).iterator) assert(false , "Should not have obtained memory") diff --git a/cluster/src/test/scala/org/apache/spark/sql/IndexTest.scala b/cluster/src/test/scala/org/apache/spark/sql/IndexTest.scala index 4762da4917..bfe0cdd10a 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/IndexTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/IndexTest.scala @@ -206,14 +206,14 @@ class IndexTest extends SnappyFunSuite with PlanTest with BeforeAndAfterEach { // per-row processing time for those cases. val queryRelations = scala.collection.mutable.HashSet[String]() snc.sql(queryString).queryExecution.logical.map { - case ur@UnresolvedRelation(t: TableIdentifier, _) => + case ur@UnresolvedRelation(t: TableIdentifier) => queryRelations.add(t.table.toLowerCase) case lp: LogicalPlan => lp.expressions.foreach { _ foreach { case subquery: SubqueryExpression => subquery.plan.foreach { - case ur@UnresolvedRelation(t: TableIdentifier, _) => + case ur@UnresolvedRelation(t: TableIdentifier) => queryRelations.add(t.table.toLowerCase) case _ => } @@ -227,12 +227,14 @@ class IndexTest extends SnappyFunSuite with PlanTest with BeforeAndAfterEach { import scala.concurrent.duration._ val b = new Benchmark(s"JoinOrder optimization", size, warmupTime = numSecs.seconds) - b.addCase("WithOut Partition Pruning", numIters = 0, - prepare = () => togglePruning(onOff = false, snc), - cleanup = () => {})(_ => snc.sql(queryString).collect()) - b.addCase("With Partition Pruning", numIters = 0, - prepare = () => togglePruning(onOff = true, snc), - cleanup = () => {})(_ => snc.sql(queryString).collect()) + b.addCase("WithOut Partition Pruning") { _ => + togglePruning(onOff = false, snc) + snc.sql(queryString).collect() + } + b.addCase("With Partition Pruning") { _ => + togglePruning(onOff = true, snc) + snc.sql(queryString).collect() + } b.run() } @@ -269,12 +271,14 @@ class IndexTest extends SnappyFunSuite with PlanTest with BeforeAndAfterEach { // b.addCase(s"$qNum baseTPCH index = F", prepare = case1)(i => evalBaseTPCH) // b.addCase(s"$qNum baseTPCH joinOrder = T", prepare = case2)(i => evalBaseTPCH) - b.addCase(s"$qNum without PartitionPruning", numIters = 0, - prepare = () => togglePruning(onOff = false, snc), - cleanup = () => {})(_ => evalSnappyMods(false)) - b.addCase(s"$qNum with PartitionPruning", numIters = 0, - prepare = () => togglePruning(onOff = true, snc), - cleanup = () => {})(_ => evalSnappyMods(false)) + b.addCase(s"$qNum without PartitionPruning") { _ => + togglePruning(onOff = false, snc) + evalSnappyMods(false) + } + b.addCase(s"$qNum with PartitionPruning") { _ => + togglePruning(onOff = true, snc) + evalSnappyMods(false) + } /* b.addCase(s"$qNum snappyMods joinOrder = T", prepare = case2)(i => evalSnappyMods(false)) b.addCase(s"$qNum baseTPCH index = T", prepare = case3)(i => evalBaseTPCH) diff --git a/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala b/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala index 3f93f39a60..bda299ca48 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala @@ -1104,7 +1104,6 @@ object NWQueries extends SnappyFunSuite { case j: LocalTableScanExec => j case j: CoalesceExec => j case j: FilterExec => j - case j: OutputFakerExec => j case j: RangeExec => j case j: SampleExec => j case j: SubqueryExec => j diff --git a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/ColumnCacheBenchmark.scala b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/ColumnCacheBenchmark.scala index 74a88012ba..b2d5ca8b8d 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/ColumnCacheBenchmark.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/ColumnCacheBenchmark.scala @@ -36,6 +36,10 @@ package org.apache.spark.sql.execution.benchmark +import java.io.OutputStream + +import scala.concurrent.duration._ + import com.gemstone.gemfire.internal.cache.GemFireCacheImpl import io.snappydata.SnappyFunSuite @@ -157,15 +161,17 @@ class ColumnCacheBenchmark extends SnappyFunSuite { "a.val_name like 'val\\_42%' and b.role_id = 99 and c.type_id = a.type_id and " + "c.target_name = 'type_36' group by b.group_name, a.name" - val benchmark = new Benchmark("SNAP-2118 with random data", numElems1) + val benchmark = new BenchmarkWithCleanup("SNAP-2118 with random data", numElems1) var expectedResult: Array[Row] = null - benchmark.addCase("smj", numIters, () => snappy.sql("set snappydata.hashJoinSize=-1"), + addCaseWithCleanup(benchmark, "smj", numIters, + () => snappy.sql("set snappydata.hashJoinSize=-1"), () => {}) { i => if (i == 1) expectedResult = snappy.sql(sql).collect() else snappy.sql(sql).collect() } - benchmark.addCase("hash", numIters, () => snappy.sql("set snappydata.hashJoinSize=1g"), + addCaseWithCleanup(benchmark, "hash", numIters, + () => snappy.sql("set snappydata.hashJoinSize=1g"), () => {}) { i => if (i == 1) ColumnCacheBenchmark.collect(snappy.sql(sql), expectedResult) else snappy.sql(sql).collect() @@ -230,7 +236,7 @@ class ColumnCacheBenchmark extends SnappyFunSuite { } private def benchMarkForPutIntoColumnTable(size: Int, numIters: Int = 10): Unit = { - val benchmark = new Benchmark("PutInto Vs Insert", size) + val benchmark = new BenchmarkWithCleanup("PutInto Vs Insert", size) val sparkSession = this.sparkSession val snappySession = this.snappySession import org.apache.spark.sql.snappy._ @@ -274,7 +280,7 @@ class ColumnCacheBenchmark extends SnappyFunSuite { */ private def benchmarkRandomizedKeys(size: Int, queryPath: Boolean, numIters: Int = 10, runSparkCaching: Boolean = true): Unit = { - val benchmark = new Benchmark("Cache random keys", size) + val benchmark = new BenchmarkWithCleanup("Cache random keys", size) val sparkSession = this.sparkSession val snappySession = this.snappySession if (GemFireCacheImpl.getCurrentBufferAllocator.isDirect) { @@ -496,20 +502,49 @@ object ColumnCacheBenchmark { } def addCaseWithCleanup( - benchmark: Benchmark, + benchmark: BenchmarkWithCleanup, name: String, numIters: Int = 0, prepare: () => Unit, cleanup: () => Unit, - testCleanup: () => Unit, + testCleanup: () => Unit = () => Unit, testPrepare: () => Unit = () => Unit)(f: Int => Unit): Unit = { - val timedF = (timer: Benchmark.Timer) => { + val timedF = TimedFunction(prepare, cleanup, (timer: Benchmark.Timer) => { testPrepare() timer.startTiming() f(timer.iteration) timer.stopTiming() testCleanup() - } - benchmark.benchmarks += Benchmark.Case(name, timedF, numIters, prepare, cleanup) + }) + benchmark.benchmarks += Benchmark.Case(name, timedF, numIters) } } + +class BenchmarkWithCleanup( + name: String, + valuesPerIteration: Long, + minNumIters: Int = 2, + warmupTime: FiniteDuration = 2.seconds, + minTime: FiniteDuration = 2.seconds, + outputPerIteration: Boolean = false, + output: Option[OutputStream] = None) + extends Benchmark(name, valuesPerIteration, minNumIters, + warmupTime, minTime, outputPerIteration, output) { + + override def measure(num: Long, overrideNumIters: Int)( + f: Benchmark.Timer => Unit): Benchmark.Result = f match { + case TimedFunction(prepare, cleanup, _) => + prepare() + try { + super.measure(num, overrideNumIters)(f) + } finally { + cleanup() + } + case _ => super.measure(num, overrideNumIters)(f) + } +} + +case class TimedFunction(prepare: () => Unit, cleanup: () => Unit, + f: Benchmark.Timer => Unit) extends (Benchmark.Timer => Unit) { + override def apply(t: Benchmark.Timer): Unit = f(t) +} diff --git a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/MapTest.scala b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/MapTest.scala index 2bf4b586f0..0c189d824c 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/MapTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/MapTest.scala @@ -25,7 +25,6 @@ import org.eclipse.collections.impl.map.mutable.UnifiedMap import org.eclipse.collections.impl.set.mutable.UnifiedSet import org.apache.spark.sql.execution.benchmark.ColumnCacheBenchmark.addCaseWithCleanup -import org.apache.spark.util.Benchmark import org.apache.spark.util.random.XORShiftRandom /** @@ -72,7 +71,7 @@ class MapTest extends SnappyFunSuite { item }) - var benchmark = new Benchmark("hashing mixed ops", numOperations) + var benchmark = new BenchmarkWithCleanup("hashing mixed ops", numOperations) val results = new mutable.ArrayBuffer[Long]() @@ -165,7 +164,7 @@ class MapTest extends SnappyFunSuite { assert(r === expected, s"Mismatch at index = $index") } - benchmark = new Benchmark("hashing iteration", numEntries) + benchmark = new BenchmarkWithCleanup("hashing iteration", numEntries) results.clear() addCaseWithCleanup(benchmark, "THashSet", numIterations, @@ -217,7 +216,7 @@ class MapTest extends SnappyFunSuite { assert(r === expected, s"Mismatch at index = $index") } - benchmark = new Benchmark("hashing gets", numEntries) + benchmark = new BenchmarkWithCleanup("hashing gets", numEntries) results.clear() addCaseWithCleanup(benchmark, "Scala Immutable HashMap", numIterations, @@ -299,7 +298,7 @@ class MapTest extends SnappyFunSuite { assert(r === expected, s"Mismatch at index = $index") } - benchmark = new Benchmark("hashing inserts", numEntries) + benchmark = new BenchmarkWithCleanup("hashing inserts", numEntries) results.clear() addCaseWithCleanup(benchmark, "THashSet", numIterations, @@ -354,7 +353,7 @@ class MapTest extends SnappyFunSuite { item }) - var benchmark = new Benchmark("hashing mixed ops", numOperations) + var benchmark = new BenchmarkWithCleanup("hashing mixed ops", numOperations) val results = new mutable.ArrayBuffer[Long]() @@ -467,7 +466,7 @@ class MapTest extends SnappyFunSuite { assert(r === expected, s"Mismatch at index = $index") } - benchmark = new Benchmark("hashing iteration", numEntries) + benchmark = new BenchmarkWithCleanup("hashing iteration", numEntries) results.clear() addCaseWithCleanup(benchmark, "THashMap", numIterations, @@ -524,7 +523,7 @@ class MapTest extends SnappyFunSuite { assert(r === expected, s"Mismatch at index = $index") } - benchmark = new Benchmark("hashing gets", numEntries) + benchmark = new BenchmarkWithCleanup("hashing gets", numEntries) results.clear() addCaseWithCleanup(benchmark, "Scala Immutable HashMap", numIterations, @@ -606,7 +605,7 @@ class MapTest extends SnappyFunSuite { assert(r === expected, s"Mismatch at index = $index") } - benchmark = new Benchmark("hashing inserts", numEntries) + benchmark = new BenchmarkWithCleanup("hashing inserts", numEntries) results.clear() addCaseWithCleanup(benchmark, "THashMap", numIterations, @@ -645,9 +644,9 @@ class MapTest extends SnappyFunSuite { val rnd = new XORShiftRandom() val data = Array.fill(numEntries)(s"str${rnd.nextInt(100)}") - val benchmark = new Benchmark("hashing gets", numEntries * numLoops) + val benchmark = new BenchmarkWithCleanup("hashing gets", numEntries * numLoops) - benchmark.addCase("Scala Immutable HashMap", numIterations, + addCaseWithCleanup(benchmark, "Scala Immutable HashMap", numIterations, () => { data.foreach(d => omap3.put(d, d)) imap3 = omap3.toMap @@ -663,7 +662,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("Scala HashMap", numIterations, + addCaseWithCleanup(benchmark, "Scala HashMap", numIterations, () => data.foreach(d => omap3.put(d, d)), omap3.clear)(_ => { var loop = 0 while (loop < numLoops) { @@ -675,7 +674,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("THashMap", numIterations, + addCaseWithCleanup(benchmark, "THashMap", numIterations, () => data.foreach(d => omap1.put(d, d)), omap1.clear)(_ => { var loop = 0 while (loop < numLoops) { @@ -687,7 +686,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("Java HashMap", numIterations, + addCaseWithCleanup(benchmark, "Java HashMap", numIterations, () => data.foreach(d => omap2.put(d, d)), omap2.clear)(_ => { var loop = 0 while (loop < numLoops) { @@ -699,7 +698,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("Java ConcurrentHashMap", numIterations, + addCaseWithCleanup(benchmark, "Java ConcurrentHashMap", numIterations, () => data.foreach(d => omap4.put(d, d)), omap4.clear)(_ => { var loop = 0 while (loop < numLoops) { @@ -711,7 +710,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("Scala TrieMap", numIterations, + addCaseWithCleanup(benchmark, "Scala TrieMap", numIterations, () => data.foreach(d => omap5.put(d, d)), omap5.clear)(_ => { var loop = 0 while (loop < numLoops) { @@ -723,7 +722,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("FastUtil Map", numIterations, + addCaseWithCleanup(benchmark, "FastUtil Map", numIterations, () => data.foreach(d => omap6.put(d, d)), omap6.clear)(_ => { var loop = 0 while (loop < numLoops) { @@ -735,7 +734,7 @@ class MapTest extends SnappyFunSuite { loop += 1 } }) - benchmark.addCase("Eclipse Collections Map", numIterations, + addCaseWithCleanup(benchmark, "Eclipse Collections Map", numIterations, () => data.foreach(d => omap7.put(d, d)), omap7.clear)(_ => { var loop = 0 while (loop < numLoops) { diff --git a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/StringBenchmark.scala b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/StringBenchmark.scala index 253ab389a8..3ae37df659 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/StringBenchmark.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/StringBenchmark.scala @@ -92,7 +92,7 @@ class StringBenchmark extends SnappyFunSuite { else num.toString } - val benchmark = new Benchmark(s"Sort${if (preSorted) "(pre-sorted)" else ""} " + + val benchmark = new BenchmarkWithCleanup(s"Sort${if (preSorted) "(pre-sorted)" else ""} " + s"num=${displayNumber(numElements)} distinct=${displayNumber(numDistinct)}", numElements) ColumnCacheBenchmark.addCaseWithCleanup(benchmark, "Spark", numIters, () => Unit, diff --git a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala index 478e432e75..d94b03257e 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TAQTest.scala @@ -22,7 +22,7 @@ import java.time.{ZoneId, ZonedDateTime} import scala.util.Random import com.typesafe.config.Config -import io.snappydata.{Property, SnappyFunSuite} +import io.snappydata.SnappyFunSuite import org.scalatest.Assertions import org.apache.spark.memory.SnappyUnifiedMemoryManager @@ -32,7 +32,6 @@ import org.apache.spark.sql.execution.benchmark.TAQTest.CreateOp import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.types.{Decimal, DecimalType, StringType, StructField, StructType} import org.apache.spark.unsafe.types.UTF8String -import org.apache.spark.util.Benchmark import org.apache.spark.util.random.XORShiftRandom import org.apache.spark.{Logging, SparkConf, SparkContext} @@ -305,7 +304,7 @@ object TAQTest extends Logging with Assertions { import session.implicits._ - val benchmark = new Benchmark("Cache random data", size) + val benchmark = new BenchmarkWithCleanup("Cache random data", size) val quoteRDD = sc.range(0, quoteSize).mapPartitions { itr => val rnd = new XORShiftRandom val syms = ALL_SYMBOLS.map(UTF8String.fromString) @@ -509,9 +508,9 @@ object TAQTest extends Logging with Assertions { } session.conf.set(SQLConf.WHOLESTAGE_CODEGEN_ENABLED.key, "true") - session.conf.set(SQLConf.WHOLESTAGE_FALLBACK.key, "false") + session.conf.set(SQLConf.CODEGEN_FALLBACK.key, "false") spark.conf.set(SQLConf.WHOLESTAGE_CODEGEN_ENABLED.key, "true") - spark.conf.set(SQLConf.WHOLESTAGE_FALLBACK.key, "false") + spark.conf.set(SQLConf.CODEGEN_FALLBACK.key, "false") // Benchmark cases: // (1) Spark caching with column batch compression diff --git a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TPCDSQuerySnappyBenchmark.scala b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TPCDSQuerySnappyBenchmark.scala index d4773c4562..ff9ae4e885 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TPCDSQuerySnappyBenchmark.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/execution/benchmark/TPCDSQuerySnappyBenchmark.scala @@ -27,9 +27,6 @@ import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.util.fileToString import org.apache.spark.sql.types.StructType import org.apache.spark.util.Benchmark -import org.apache.spark.{SparkConf, SparkContext} - -import scala.collection.mutable.ArrayBuffer object TPCDSQuerySnappyBenchmark { @@ -64,7 +61,8 @@ object TPCDSQuerySnappyBenchmark { df.write.insertInto(tableName) // scalastyle:off println - println("Table Created..."+ tableName) + println("Table Created..." + tableName) + // scalastyle:on println tableName -> snappy.table(tableName).count() } else { @@ -96,20 +94,20 @@ object TPCDSQuerySnappyBenchmark { if (isSnappy) { ds = snappy.sqlContext.sql(queryString) - //println("Plan..."+ ds.queryExecution.executedPlan) - } - else + // println("Plan..."+ ds.queryExecution.executedPlan) + } else { ds = spark.sql(queryString) + } ds.queryExecution.logical.map { - case ur@UnresolvedRelation(t: TableIdentifier, _) => + case ur@UnresolvedRelation(t: TableIdentifier) => queryRelations.add(t.table) case lp: LogicalPlan => lp.expressions.foreach { _ foreach { case subquery: SubqueryExpression => subquery.plan.foreach { - case ur@UnresolvedRelation(t: TableIdentifier, _) => + case ur@UnresolvedRelation(t: TableIdentifier) => queryRelations.add(t.table) case _ => } @@ -131,24 +129,28 @@ object TPCDSQuerySnappyBenchmark { } else { val rs = spark.sql(queryString).collect() - //sparkPS = new PrintStream(new FileOutputStream(new File(s"Spark_$name.out"))) - //normalizeRows(rs, sparkPS) + // sparkPS = new PrintStream(new FileOutputStream(new File(s"Spark_$name.out"))) + // normalizeRows(rs, sparkPS) } } benchmark.run() } catch { + // scalastyle:off println case e: Exception => println(s"Failed $name " + e.printStackTrace()) + // scalastyle:on println } } } private def normalizeRows(resultSet: Array[Row], printStream: PrintStream): Unit = { for (row <- resultSet) { + // scalastyle:off println printStream.println(row.toSeq.map { // case d: Double => "%18.4f".format(d).trim() - case v => v + v => v }.mkString("|")) + // scalastyle:on println } } } diff --git a/cluster/src/test/scala/org/apache/spark/sql/policy/PolicyJdbcClientTest.scala b/cluster/src/test/scala/org/apache/spark/sql/policy/PolicyJdbcClientTest.scala index 847dc9e19a..a3a10398b7 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/policy/PolicyJdbcClientTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/policy/PolicyJdbcClientTest.scala @@ -430,18 +430,18 @@ class PolicyJdbcClientTest extends PolicyTestBase { val expectedColumns = List("NAME", "SCHEMANAME", "TABLENAME", "POLICYFOR", "APPLYTO", "FILTER", "OWNER") - val expectedResults = Map("TESTPOLICY1" -> (tableOwner.toUpperCase, + val expectedResults = Map("TESTPOLICY1" -> ((tableOwner.toUpperCase, colTableName.toUpperCase.substring(colTableName.indexOf('.') + 1), "select", "current_user", "id > 10", - tableOwner.toUpperCase), - "TESTPOLICY2" -> (tableOwner.toUpperCase, + tableOwner.toUpperCase)), + "TESTPOLICY2" -> ((tableOwner.toUpperCase, rowTableName.toUpperCase.substring(rowTableName.indexOf('.') + 1), "select", "current_user", "id < 30", - tableOwner.toUpperCase), - "TESTPOLICY3" -> (tableOwner.toUpperCase, + tableOwner.toUpperCase)), + "TESTPOLICY3" -> ((tableOwner.toUpperCase, rowTableName.toUpperCase.substring(rowTableName.indexOf('.') + 1), "select", "current_user", "id < 70", - tableOwner.toUpperCase) + tableOwner.toUpperCase)) ) // check using session @@ -622,7 +622,7 @@ class PolicyJdbcClientTest extends PolicyTestBase { // return true if a policy exists for a table else false private def checkIfPoliciesOnTableExist(tableName: String): Boolean = { - val policies = Misc.getMemStore.getExternalCatalog.getPolicies() + val policies = Misc.getMemStore.getExternalCatalog.getPolicies val it = policies.listIterator() while (it.hasNext) { val p = it.next() diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala index 7aedd08cdd..899230ce64 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala @@ -29,6 +29,7 @@ import io.snappydata.{Property, SnappyFunSuite} import org.junit.Assert._ import org.scalatest.BeforeAndAfterAll +import org.apache.spark.JobExecutionStatus import org.apache.spark.scheduler.{SparkListener, SparkListenerTaskEnd} import org.apache.spark.sql.catalog.Column import org.apache.spark.sql.collection.Utils @@ -1185,17 +1186,18 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { ds.collect() // check UI timings and plan details - val listener = SparkSession.sqlListener.get() + val sqlStore = session.sharedState.statusStore // last one should be the query above - val queryUIData = listener.getCompletedExecutions.last - val duration = queryUIData.completionTime.get - queryUIData.submissionTime + val queryUIData = sqlStore.executionsList().last + val duration = queryUIData.completionTime.get.getTime - queryUIData.submissionTime // never expect the query above to take more than 7 secs assert(duration > 0L) assert(duration < sleepTime) - assert(queryUIData.succeededJobs.length === 2) + assert(queryUIData.jobs.count(_._2 == JobExecutionStatus.SUCCEEDED) === 2) - val metrics = listener.getExecutionMetrics(queryUIData.executionId) - val scanNode = queryUIData.physicalPlanGraph.allNodes.find(_.name == "ColumnTableScan").get + val executionId = queryUIData.executionId + val metrics = sqlStore.executionMetrics(executionId) + val scanNode = sqlStore.planGraph(executionId).allNodes.find(_.name == "ColumnTableScan").get val numRowsMetric = scanNode.metrics.find(_.name == "number of output rows").get assert(metrics(numRowsMetric.accumulatorId) === SQLMetrics.stringValue(numRowsMetric.metricType, numRows :: Nil)) diff --git a/core/compatibility/spark-2.1.0/build.gradle b/core/compatibility/spark-2.1.0/build.gradle deleted file mode 100644 index 723b911180..0000000000 --- a/core/compatibility/spark-2.1.0/build.gradle +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -apply plugin: 'scala' - -compileScala.options.encoding = 'UTF-8' - -// directly include the base classes to ensure everything is compiled with current Spark version -sourceSets.main.scala.srcDir '../spark-2.1/src/main/scala' -sourceSets.main.scala.srcDir '../spark-2.1/src/main/java' -sourceSets.main.java.srcDirs = [] - -// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions -String sparkCompatVersion = sparkConnectorVersion - -dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - - compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion - compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly project(":snappy-core_${scalaBinaryVersion}") -} - -archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala deleted file mode 100644 index 389b8fc426..0000000000 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/SnappyCacheManager210.scala +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -package org.apache.spark.sql.internal - -import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan -import org.apache.spark.sql.execution.CacheManager -import org.apache.spark.sql.{Dataset, SnappySession, SparkSession} -import org.apache.spark.storage.StorageLevel - -/** - * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. - */ -class SnappyCacheManager210 extends CacheManager { - - override def cacheQuery(query: Dataset[_], tableName: Option[String], - storageLevel: StorageLevel): Unit = { - super.cacheQuery(query, tableName, storageLevel) - // clear plan cache since cached representation can change existing plans - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() - } - - override def uncacheQuery(query: Dataset[_], blocking: Boolean): Boolean = { - if (super.uncacheQuery(query, blocking)) { - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() - true - } else false - } - - override def invalidateCache(plan: LogicalPlan): Unit = { - super.invalidateCache(plan) - SparkSession.getActiveSession match { - case None => - case Some(session) => session.asInstanceOf[SnappySession].clearPlanCache() - } - } - - override def invalidateCachedPath(session: SparkSession, resourcePath: String): Unit = { - super.invalidateCachedPath(session, resourcePath) - session.asInstanceOf[SnappySession].clearPlanCache() - } -} diff --git a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala b/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala deleted file mode 100644 index d3e8e0b0ac..0000000000 --- a/core/compatibility/spark-2.1.0/src/main/scala/org/apache/spark/sql/internal/Spark210Internals.scala +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ -package org.apache.spark.sql.internal - -import io.snappydata.sql.catalog.SnappyExternalCatalog - -import org.apache.spark.SparkException -import org.apache.spark.sql.catalyst.TableIdentifier -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType} -import org.apache.spark.sql.catalyst.plans.logical.Statistics -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.execution.CacheManager -import org.apache.spark.sql.types.StructType -import org.apache.spark.sql.{SparkInternals, SparkSession} - -/** - * Implementation of [[SparkInternals]] for Spark 2.1.0. - */ -class Spark210Internals(override val version: String) extends Spark21Internals { - - override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - new CaseInsensitiveMap(map) - } - - // scalastyle:off - - override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, - storage: CatalogStorageFormat, schema: StructType, provider: Option[String], - partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], - owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], - comment: Option[String], unsupportedFeatures: Seq[String], - tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, - ignoredProperties: Map[String, String]): CatalogTable = { - if (!schemaPreservesCase) { - throw new SparkException(s"schemaPreservesCase should be always true in Spark $version") - } - if (ignoredProperties.nonEmpty) { - throw new SparkException(s"ignoredProperties should be always empty in Spark $version") - } - CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, - bucketSpec, owner, createTime, lastAccessTime, properties, - stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, - unsupportedFeatures, tracksPartitionsInCatalog) - } - - // scalastyle:on - - override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { - new SmartConnectorExternalCatalog210(session) - } - - override def newCacheManager(): CacheManager = new SnappyCacheManager210 -} - -final class SmartConnectorExternalCatalog210(session: SparkSession) - extends SmartConnectorExternalCatalog21(session) diff --git a/core/compatibility/spark-2.1.1/build.gradle b/core/compatibility/spark-2.1.1/build.gradle deleted file mode 100644 index b4883a5832..0000000000 --- a/core/compatibility/spark-2.1.1/build.gradle +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -apply plugin: 'scala' - -compileScala.options.encoding = 'UTF-8' - -// directly include the base classes to ensure everything is compiled with current Spark version -sourceSets.main.scala.srcDir '../spark-2.1/src/main/scala' -sourceSets.main.scala.srcDir '../spark-2.1/src/main/java' -sourceSets.main.java.srcDirs = [] - -// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions -String sparkCompatVersion = sparkConnectorVersion - -dependencies { - compileOnly 'org.scala-lang:scala-library:' + scalaVersion - compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion - - compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion - compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion - compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion - compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") - - compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - - compileOnly project(":snappy-core_${scalaBinaryVersion}") -} - -archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" -sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala b/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala deleted file mode 100644 index b88af49641..0000000000 --- a/core/compatibility/spark-2.1.1/src/main/scala/org/apache/spark/sql/internal/Spark211Internals.scala +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. See accompanying - * LICENSE file. - */ - -package org.apache.spark.sql.internal - -import io.snappydata.sql.catalog.SnappyExternalCatalog - -import org.apache.spark.SparkException -import org.apache.spark.sql._ -import org.apache.spark.sql.catalyst.TableIdentifier -import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogStorageFormat, CatalogTable, CatalogTableType, ExternalCatalog} -import org.apache.spark.sql.catalyst.expressions.Expression -import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Statistics} -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap -import org.apache.spark.sql.execution.CacheManager -import org.apache.spark.sql.types.StructType -import org.apache.spark.storage.StorageLevel - -/** - * Implementation of [[SparkInternals]] for Spark 2.1.1. - */ -class Spark211Internals(override val version: String) extends Spark21Internals { - - override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, - cascade: Boolean, blocking: Boolean): Unit = { - spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) - } - - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - plan.mapExpressions(f) - } - - override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - new CaseInsensitiveMap(map) - } - - // scalastyle:off - - override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, - storage: CatalogStorageFormat, schema: StructType, provider: Option[String], - partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], - owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], - stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], - comment: Option[String], unsupportedFeatures: Seq[String], - tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, - ignoredProperties: Map[String, String]): CatalogTable = { - if (ignoredProperties.nonEmpty) { - throw new SparkException(s"ignoredProperties should be always empty in Spark $version") - } - CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, - bucketSpec, owner, createTime, lastAccessTime, properties, - stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, - unsupportedFeatures, tracksPartitionsInCatalog, schemaPreservesCase) - } - - // scalastyle:on - - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = - catalogTable.schemaPreservesCase - - override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, - table: String, newSchema: StructType): Unit = { - externalCatalog.alterTableSchema(schemaName, table, newSchema) - } - - override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { - new SmartConnectorExternalCatalog211(session) - } - - override def newCacheManager(): CacheManager = new SnappyCacheManager211 -} - -/** - * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. - */ -final class SnappyCacheManager211 extends CacheManager { - - override def cacheQuery(query: Dataset[_], tableName: Option[String], - storageLevel: StorageLevel): Unit = { - super.cacheQuery(query, tableName, storageLevel) - // clear plan cache since cached representation can change existing plans - query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() - } - - override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { - super.uncacheQuery(session, plan, blocking) - session.asInstanceOf[SnappySession].clearPlanCache() - } - - override def recacheByPlan(session: SparkSession, plan: LogicalPlan): Unit = { - super.recacheByPlan(session, plan) - session.asInstanceOf[SnappySession].clearPlanCache() - } - - override def recacheByPath(session: SparkSession, resourcePath: String): Unit = { - super.recacheByPath(session, resourcePath) - session.asInstanceOf[SnappySession].clearPlanCache() - } -} - -final class SmartConnectorExternalCatalog211(session: SparkSession) - extends SmartConnectorExternalCatalog21(session) { - - override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = - alterTableSchemaImpl(schemaName, table, newSchema) -} diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 63787772fa..487a23b7ef 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -17,7 +17,6 @@ package org.apache.spark.sql.internal -import scala.reflect.ClassTag import scala.util.control.NonFatal import io.snappydata.Property.HashAggregateSize @@ -35,7 +34,6 @@ import org.apache.spark.sql.catalyst.analysis.TypeCoercion.PromoteStrings import org.apache.spark.sql.catalyst.analysis.{Analyzer, FunctionRegistry, UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog.{ExternalCatalog, _} -import org.apache.spark.sql.catalyst.encoders.{ExpressionEncoder, RowEncoder} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} @@ -62,6 +60,7 @@ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, Re import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo +import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream import org.apache.spark.{SparkConf, SparkContext, SparkException} @@ -69,60 +68,11 @@ import org.apache.spark.{SparkConf, SparkContext, SparkException} /** * Base implementation of [[SparkInternals]] for Spark 2.1.x releases. */ -abstract class Spark21Internals extends SparkInternals { +class Spark21Internals(override val version: String) extends SparkInternals { override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit = { - implicit val encoder: ExpressionEncoder[Row] = RowEncoder(plan.schema) - spark.sharedState.cacheManager.uncacheQuery(Dataset(spark, plan), blocking) - } - - /** - * Apply a map function to each expression present in this query operator, and return a new - * query operator based on the mapped expressions. - * - * Taken from the mapExpressions in Spark 2.1.1 and beyond. - */ - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - var changed = false - - @inline def transformExpression(e: Expression): Expression = { - val newE = f(e) - if (newE.fastEquals(e)) { - e - } else { - changed = true - newE - } - } - - def recursiveTransform(arg: Any): AnyRef = arg match { - case e: Expression => transformExpression(e) - case Some(e: Expression) => Some(transformExpression(e)) - case Some(seq: Traversable[_]) => Some(seq.map(recursiveTransform)) - case m: Map[_, _] => m - case d: DataType => d // Avoid unpacking Structs - case seq: Traversable[_] => seq.map(recursiveTransform) - case other: AnyRef => other - case null => null - } - - /** - * Efficient alternative to `productIterator.map(f).toArray`. - */ - def mapProductIterator[B: ClassTag](f: Any => B): Array[B] = { - val arr = Array.ofDim[B](plan.productArity) - var i = 0 - while (i < arr.length) { - arr(i) = f(plan.productElement(i)) - i += 1 - } - arr - } - - val newArgs = mapProductIterator(recursiveTransform) - - if (changed) plan.makeCopy(newArgs).asInstanceOf[plan.type] else plan + spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) } override def registerFunction(session: SparkSession, name: FunctionIdentifier, @@ -193,6 +143,10 @@ abstract class Spark21Internals extends SparkInternals { WholeStageCodegenExec(plan) } + override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { + new CaseInsensitiveMap(map) + } + def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { // if the call is done the second time, then attach in embedded mode // too since this is coming from ToolsCallbackImpl @@ -225,9 +179,6 @@ abstract class Spark21Internals extends SparkInternals { } } - override def getActiveExecutionIds(sparkContext: SparkContext): Set[Long] = - SparkSession.sqlListener.get().getRunningExecutions.map(_.executionId).toSet - override def newSharedState(sparkContext: SparkContext): SnappySharedState = { new SnappySharedState21(sparkContext) } @@ -523,11 +474,30 @@ abstract class Spark21Internals extends SparkInternals { override def catalogDatabaseLocationURI(database: CatalogDatabase): String = database.locationUri + // scalastyle:off + + override def newCatalogTable(identifier: TableIdentifier, tableType: CatalogTableType, + storage: CatalogStorageFormat, schema: StructType, provider: Option[String], + partitionColumnNames: Seq[String], bucketSpec: Option[BucketSpec], + owner: String, createTime: Long, lastAccessTime: Long, properties: Map[String, String], + stats: Option[AnyRef], viewOriginalText: Option[String], viewText: Option[String], + comment: Option[String], unsupportedFeatures: Seq[String], + tracksPartitionsInCatalog: Boolean, schemaPreservesCase: Boolean, + ignoredProperties: Map[String, String]): CatalogTable = { + if (ignoredProperties.nonEmpty) { + throw new SparkException(s"ignoredProperties should be always empty in Spark $version") + } + CatalogTable(identifier, tableType, storage, schema, provider, partitionColumnNames, + bucketSpec, owner, createTime, lastAccessTime, properties, + stats.asInstanceOf[Option[Statistics]], viewOriginalText, viewText, comment, + unsupportedFeatures, tracksPartitionsInCatalog, schemaPreservesCase) + } + + // scalastyle:on + override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = catalogTable.viewOriginalText - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = true - override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = Map.empty @@ -559,7 +529,7 @@ abstract class Spark21Internals extends SparkInternals { override def alterTableSchema(externalCatalog: ExternalCatalog, schemaName: String, table: String, newSchema: StructType): Unit = { - throw new ParseException(s"ALTER TABLE schema not supported in Spark $version") + externalCatalog.alterTableSchema(schemaName, table, newSchema) } override def alterTableStats(externalCatalog: ExternalCatalog, schema: String, table: String, @@ -592,6 +562,10 @@ abstract class Spark21Internals extends SparkInternals { new SnappyEmbeddedHiveCatalog21(conf, hadoopConf, createTime) } + override def newSmartConnectorExternalCatalog(session: SparkSession): SnappyExternalCatalog = { + new SmartConnectorExternalCatalog21(session) + } + override def lookupDataSource(provider: String, conf: => SQLConf): Class[_] = DataSource.lookupDataSource(provider) @@ -638,6 +612,8 @@ abstract class Spark21Internals extends SparkInternals { new HiveConditionalStrategy(_.Scripts, sessionState) :: Nil } + override def newCacheManager(): CacheManager = new SnappyCacheManager21 + override def buildConf(key: String): ConfigBuilder = SQLConfigBuilder(key) override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { @@ -742,6 +718,34 @@ abstract class Spark21Internals extends SparkInternals { } } +/** + * Simple extension to CacheManager to enable clearing cached plans on cache create/drop. + */ +class SnappyCacheManager21 extends CacheManager { + + override def cacheQuery(query: Dataset[_], tableName: Option[String], + storageLevel: StorageLevel): Unit = { + super.cacheQuery(query, tableName, storageLevel) + // clear plan cache since cached representation can change existing plans + query.sparkSession.asInstanceOf[SnappySession].clearPlanCache() + } + + override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { + super.uncacheQuery(session, plan, blocking) + session.asInstanceOf[SnappySession].clearPlanCache() + } + + override def recacheByPlan(session: SparkSession, plan: LogicalPlan): Unit = { + super.recacheByPlan(session, plan) + session.asInstanceOf[SnappySession].clearPlanCache() + } + + override def recacheByPath(session: SparkSession, resourcePath: String): Unit = { + super.recacheByPath(session, resourcePath) + session.asInstanceOf[SnappySession].clearPlanCache() + } +} + class SnappyEmbeddedHiveCatalog21(_conf: SparkConf, _hadoopConf: Configuration, _createTime: Long) extends SnappyHiveExternalCatalog(_conf, _hadoopConf, _createTime) { @@ -825,7 +829,7 @@ class SnappyEmbeddedHiveCatalog21(_conf: SparkConf, _hadoopConf: Configuration, renameFunctionImpl(schema, oldName, newName) } -abstract class SmartConnectorExternalCatalog21(override val session: SparkSession) +class SmartConnectorExternalCatalog21(override val session: SparkSession) extends SmartConnectorExternalCatalog { override def getTable(schema: String, table: String): CatalogTable = @@ -856,6 +860,9 @@ abstract class SmartConnectorExternalCatalog21(override val session: SparkSessio override def alterTable(table: CatalogTable): Unit = alterTableImpl(table) + override def alterTableSchema(schemaName: String, table: String, newSchema: StructType): Unit = + alterTableSchemaImpl(schemaName, table, newSchema) + override def loadDynamicPartitions(schema: String, table: String, loadPath: String, partition: TablePartitionSpec, replace: Boolean, numDP: Int, holdDDLTime: Boolean): Unit = { loadDynamicPartitionsImpl(schema, table, loadPath, partition, replace, numDP, holdDDLTime) diff --git a/core/compatibility/spark-2.3/build.gradle b/core/compatibility/spark-2.3/build.gradle index bd3686106b..682b700fa0 100644 --- a/core/compatibility/spark-2.3/build.gradle +++ b/core/compatibility/spark-2.3/build.gradle @@ -24,7 +24,8 @@ sourceSets.main.scala.srcDir 'specific/java' sourceSets.main.java.srcDirs = [] // keeping this as sparkConnectorVersion helps use the same for multiple Spark versions -String sparkCompatVersion = sparkConnectorVersion +// for using the same gradle build across 2.3.x versions +String sparkCompatVersion = (sparkConnectorVersion ==~ /2.3.*/) ? sparkConnectorVersion : '2.3.4' dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion @@ -43,7 +44,13 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly project(":snappy-core_${scalaBinaryVersion}") + compileOnly(project(":snappy-core_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly(project(":snappy-jdbc_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly project(':snappy-store:snappydata-store-core') } archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala index 4244df5afe..e18c3fe2d1 100644 --- a/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala +++ b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala @@ -242,7 +242,7 @@ class Spark23Internals(override val version: String) extends Spark23_4_Internals /** * Extension of SnappyCacheManager23_4 to enable clearing cached plans on cache create/drop. */ -final class SnappyCacheManager23 extends SnappyCacheManager23_4 { +class SnappyCacheManager23 extends SnappyCacheManager23_4 { override def uncacheQuery(session: SparkSession, plan: LogicalPlan, blocking: Boolean): Unit = { super.uncacheQuery(session, plan, blocking) @@ -250,7 +250,7 @@ final class SnappyCacheManager23 extends SnappyCacheManager23_4 { } } -final class SnappyEmbeddedHiveCatalog23(_conf: SparkConf, _hadoopConf: Configuration, +class SnappyEmbeddedHiveCatalog23(_conf: SparkConf, _hadoopConf: Configuration, _createTime: Long) extends SnappyHiveExternalCatalog(_conf, _hadoopConf, _createTime) { override def getTable(schema: String, table: String): CatalogTable = @@ -340,7 +340,7 @@ final class SnappyEmbeddedHiveCatalog23(_conf: SparkConf, _hadoopConf: Configura renameFunctionImpl(schema, oldName, newName) } -final class SmartConnectorExternalCatalog23(override val session: SparkSession) +class SmartConnectorExternalCatalog23(override val session: SparkSession) extends SmartConnectorExternalCatalog { override def getTable(schema: String, table: String): CatalogTable = diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 180ca23fe1..89ae26143f 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -79,10 +79,6 @@ abstract class Spark23_4_Internals extends SparkInternals { UnsafeHolder.getUnsafe.objectFieldOffset(f) } - override def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan = { - plan.mapExpressions(f) - } - override def registerFunction(session: SparkSession, name: FunctionIdentifier, info: ExpressionInfo, function: Seq[Expression] => Expression): Unit = { session.sessionState.functionRegistry.registerFunction(name, info, function) @@ -175,10 +171,6 @@ abstract class Spark23_4_Internals extends SparkInternals { if (state ne null) createAndAttachSQLListener(state, sparkContext) } - override def getActiveExecutionIds(sparkContext: SparkContext): Set[Long] = { - SnappyContext.getExistingSharedState.statusStore.executionsList().map(_.executionId).toSet - } - override def clearSQLListener(): Unit = { // no global SQLListener in Spark 2.3.x } @@ -403,9 +395,6 @@ abstract class Spark23_4_Internals extends SparkInternals { override def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] = None - override def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean = - catalogTable.schemaPreservesCase - override def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] = catalogTable.ignoredProperties @@ -675,7 +664,7 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, } } -final class CodegenSparkFallback23(child: SparkPlan, +class CodegenSparkFallback23(child: SparkPlan, session: SnappySession) extends CodegenSparkFallback(child, session) { override def generateTreeString(depth: Int, lastChildren: Seq[Boolean], builder: StringBuilder, @@ -684,7 +673,7 @@ final class CodegenSparkFallback23(child: SparkPlan, } } -final class LogicalDStreamPlan23(output: Seq[Attribute], +class LogicalDStreamPlan23(output: Seq[Attribute], stream: DStream[InternalRow])(streamingSnappy: SnappyStreamingContext) extends LogicalDStreamPlan(output, stream)(streamingSnappy) { diff --git a/core/compatibility/spark-2.4.5/build.gradle b/core/compatibility/spark-2.4.5/build.gradle index b77caabee6..ee9f1e7bdc 100644 --- a/core/compatibility/spark-2.4.5/build.gradle +++ b/core/compatibility/spark-2.4.5/build.gradle @@ -47,7 +47,13 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly project(coreProjectName) + compileOnly(project(coreProjectName)) { + transitive = false + } + compileOnly(project(":snappy-jdbc_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly project(':snappy-store:snappydata-store-core') } archivesBaseName = "snappydata-core-compat-spark${spark245Version}_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4/build.gradle b/core/compatibility/spark-2.4/build.gradle index 26ca2b435f..8e324963de 100644 --- a/core/compatibility/spark-2.4/build.gradle +++ b/core/compatibility/spark-2.4/build.gradle @@ -22,10 +22,12 @@ compileScala.options.encoding = 'UTF-8' // directly include the base classes to ensure everything is compiled with current Spark version sourceSets.main.scala.srcDir '../spark-2.3/src/main/scala' sourceSets.main.scala.srcDir '../spark-2.3/src/main/java' +sourceSets.main.scala.srcDir 'src/main/java' sourceSets.main.java.srcDirs = [] // keeping this as sparkConnectorVersion helps use the same for multiple Spark versions -String sparkCompatVersion = sparkConnectorVersion +// for using the same gradle build across 2.4.x versions +String sparkCompatVersion = (sparkConnectorVersion ==~ /2.4.*/) ? sparkConnectorVersion : '2.4.5' dependencies { compileOnly 'org.scala-lang:scala-library:' + scalaVersion @@ -44,7 +46,13 @@ dependencies { compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - compileOnly project(":snappy-core_${scalaBinaryVersion}") + compileOnly(project(":snappy-core_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly(project(":snappy-jdbc_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly project(':snappy-store:snappydata-store-core') } archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index c1c1a736b3..5123a584fd 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -248,7 +248,7 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals } } -final class SnappyEmbeddedHiveCatalog24(_conf: SparkConf, _hadoopConf: Configuration, +class SnappyEmbeddedHiveCatalog24(_conf: SparkConf, _hadoopConf: Configuration, _createTime: Long) extends SnappyHiveExternalCatalog(_conf, _hadoopConf, _createTime) { override def getTable(schema: String, table: String): CatalogTable = @@ -338,7 +338,7 @@ final class SnappyEmbeddedHiveCatalog24(_conf: SparkConf, _hadoopConf: Configura renameFunctionImpl(schema, oldName, newName) } -final class SmartConnectorExternalCatalog24(override val session: SparkSession) +class SmartConnectorExternalCatalog24(override val session: SparkSession) extends SmartConnectorExternalCatalog { override def getTable(schema: String, table: String): CatalogTable = @@ -471,7 +471,7 @@ class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[Se /** * Simple extension to CacheManager to enable clearing cached plan on cache create/drop. */ -final class SnappyCacheManager24 extends SnappyCacheManager23_4 { +class SnappyCacheManager24 extends SnappyCacheManager23_4 { override def uncacheQuery(session: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit = { diff --git a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala index 3c0b6781ad..5ea11c34b7 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/ConnectorExternalCatalog.scala @@ -213,7 +213,7 @@ object ConnectorExternalCatalog extends Logging with SparkSupport { Collections.emptyList(), Collections.emptyList(), bucketColumns, sortColumns, table.owner, table.createTime, table.lastAccessTime, table.properties.asJava, table.unsupportedFeatures.asJava, table.tracksPartitionsInCatalog, - internals.catalogTableSchemaPreservesCase(table)) + table.schemaPreservesCase) tableObj.setSchemaName(getOrNull(table.identifier.database)) .setProvider(getOrNull(table.provider)) .setViewText(getOrNull(table.viewText)) diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 3f13735854..cccd042128 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -82,12 +82,6 @@ trait SparkInternals extends Logging { def uncacheQuery(spark: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit - /** - * Apply a mapping function on all expressions in the given logical plan - * and return the updated plan. - */ - def mapExpressions(plan: LogicalPlan, f: Expression => Expression): LogicalPlan - /** * Register an inbuilt function in the session function registry. */ @@ -195,11 +189,6 @@ trait SparkInternals extends Logging { */ def createAndAttachSQLListener(sparkContext: SparkContext): Unit - /** - * Get the active execution IDs for all running jobs. - */ - def getActiveExecutionIds(sparkContext: SparkContext): Set[Long] - /** * Create a new global instance of [[SnappySharedState]]. */ @@ -515,9 +504,6 @@ trait SparkInternals extends Logging { /** Get the viewOriginalText of CataLogTable or None if not present. */ def catalogTableViewOriginalText(catalogTable: CatalogTable): Option[String] - /** Get the schemaPreservesCase field of CataLogTable or true if not present. */ - def catalogTableSchemaPreservesCase(catalogTable: CatalogTable): Boolean - /** Get the ignoredProperties map of CataLogTable or empty map if not present. */ def catalogTableIgnoredProperties(catalogTable: CatalogTable): Map[String, String] diff --git a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala index 0b0c2e7a21..958efc3588 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkSupport.scala @@ -100,10 +100,9 @@ object SparkSupport extends Logging { "2.3.2" -> s"$INTERNAL_PACKAGE.Spark23Internals", "2.3.1" -> s"$INTERNAL_PACKAGE.Spark23Internals", "2.3.0" -> s"$INTERNAL_PACKAGE.Spark23Internals", - "2.1.3" -> s"$INTERNAL_PACKAGE.Spark211Internals", - "2.1.2" -> s"$INTERNAL_PACKAGE.Spark211Internals", - "2.1.1" -> s"$INTERNAL_PACKAGE.Spark211Internals", - "2.1.0" -> s"$INTERNAL_PACKAGE.Spark210Internals" + "2.1.3" -> s"$INTERNAL_PACKAGE.Spark21Internals", + "2.1.2" -> s"$INTERNAL_PACKAGE.Spark21Internals", + "2.1.1" -> s"$INTERNAL_PACKAGE.Spark21Internals" ) /** diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 3816170afe..ad4c761bc1 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -174,7 +174,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu // transformDown for expression so that top-most node which is foldable gets // selected for wrapping by DynamicFoldableExpression and further sub-expressions // do not since foldExpression will reset inner ParamLiterals as non-foldable - case q: LogicalPlan => internals.mapExpressions(q, ex => unmarkAll(mark(ex).transformDown { + case q: LogicalPlan => q.mapExpressions(ex => unmarkAll(mark(ex).transformDown { // ignore leaf literals case l@(_: Literal | _: DynamicReplacableConstant) => l // Wrap expressions that are foldable. diff --git a/dtests/src/test/scala/io/snappydata/hydra/consistency/ConsistencyTest.scala b/dtests/src/test/scala/io/snappydata/hydra/consistency/ConsistencyTest.scala index 4870bea9dd..af2db58da4 100644 --- a/dtests/src/test/scala/io/snappydata/hydra/consistency/ConsistencyTest.scala +++ b/dtests/src/test/scala/io/snappydata/hydra/consistency/ConsistencyTest.scala @@ -96,7 +96,7 @@ class ConsistencyTest { pw.flush() } catch { case se: SQLException => - pw.println(s"${printTime} Got exception while executing select query for $op", se) + pw.println(s"$printTime Got exception while executing select query for $op: $se") pw.flush() } } diff --git a/dtests/src/test/scala/org/apache/spark/sql/DistIndexTestUtils.scala b/dtests/src/test/scala/org/apache/spark/sql/DistIndexTestUtils.scala index 52c2d0b1f0..728e5f6bb9 100644 --- a/dtests/src/test/scala/org/apache/spark/sql/DistIndexTestUtils.scala +++ b/dtests/src/test/scala/org/apache/spark/sql/DistIndexTestUtils.scala @@ -24,7 +24,8 @@ import io.snappydata.benchmark.snappy.tpch.QueryExecutor import io.snappydata.benchmark.snappy.{SnappyAdapter, TPCH} import org.apache.spark.sql.catalyst.plans.logical.Sort -import org.apache.spark.util.Benchmark +import org.apache.spark.sql.execution.benchmark.BenchmarkWithCleanup +import org.apache.spark.sql.execution.benchmark.ColumnCacheBenchmark.addCaseWithCleanup object DistIndexTestUtils { @@ -40,7 +41,8 @@ object DistIndexTestUtils { val size = qryProvider.estimateSizes(query, tableSizes, executor) // scalastyle:off println pw.println(s"$qNum size $size") - val b = new Benchmark(s"JoinOrder optimization", size, minNumIters = 5, output = Some(fos)) + val b = new BenchmarkWithCleanup( + s"JoinOrder optimization", size, minNumIters = 5, output = Some(fos)) def case1(): Unit = snc.setConf(io.snappydata.Property.EnableExperimentalFeatures.name, "false") @@ -62,14 +64,14 @@ object DistIndexTestUtils { def evalBaseTPCH = qryProvider.execute(query, executor) - - b.addCase(s"$qNum baseTPCH index = F", numIters = 0, prepare = case3, cleanup = () => {})( - _ => evalBaseTPCH) + addCaseWithCleanup(b, s"$qNum baseTPCH index = F", numIters = 0, prepare = case3, + cleanup = () => {})(_ => evalBaseTPCH) // b.addCase(s"$qNum baseTPCH joinOrder = T", prepare = case2)(i => evalBaseTPCH) // b.addCase(s"$qNum snappyMods joinOrder = F", prepare = case1)(i => evalSnappyMods(false)) // b.addCase(s"$qNum snappyMods joinOrder = T", prepare = case2)(i => evalSnappyMods(false)) - b.addCase(s"$qNum baseTPCH index = T", numIters = 0, prepare = case3, cleanup = () => {})(_ => - evalBaseTPCH) + addCaseWithCleanup(b, s"$qNum baseTPCH index = T", numIters = 0, prepare = case3, + cleanup = () => {})(_ => evalBaseTPCH) + b.run() } diff --git a/settings.gradle b/settings.gradle index 9d6d43cf47..b1e96eefad 100644 --- a/settings.gradle +++ b/settings.gradle @@ -31,8 +31,7 @@ include ':snappy-compatibility-tests_' + scalaBinaryVersion include ':snappy-encoders_' + scalaBinaryVersion // compatibility modules for all supported Spark releases -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1" +include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5" @@ -46,8 +45,7 @@ project(':snappy-dtests_' + scalaBinaryVersion).projectDir = "$rootDir/dtests" a project(':snappy-compatibility-tests_' + scalaBinaryVersion).projectDir = "$rootDir/compatibilityTests" as File project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoders" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.0").projectDir = "$rootDir/core/compatibility/spark-2.1.0" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1.1").projectDir = "$rootDir/core/compatibility/spark-2.1.1" as File +project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1").projectDir = "$rootDir/core/compatibility/spark-2.1" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3").projectDir = "$rootDir/core/compatibility/spark-2.3" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4").projectDir = "$rootDir/core/compatibility/spark-2.4" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5").projectDir = "$rootDir/core/compatibility/spark-2.4.5" as File From 4f0ab26fcc328bc53de98ff502a94359f181523e Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 19 Feb 2020 22:48:31 +0530 Subject: [PATCH 49/80] fix code generation issues --- .../spark/sql/internal/Spark21Internals.scala | 12 ++++- .../sql/internal/Spark23_4_Internals.scala | 2 +- .../sql/execution/NonRecursivePlans.scala | 4 ++ .../sql/execution/ObjectHashMapAccessor.scala | 12 +++-- .../aggregate/SnappyHashAggregateExec.scala | 2 + .../execution/columnar/ColumnInsertExec.scala | 47 +++++-------------- .../execution/columnar/ColumnTableScan.scala | 7 ++- .../sql/execution/joins/HashJoinExec.scala | 8 ++-- .../spark/sql/execution/row/RowExec.scala | 8 ++-- .../spark/sql/store/CodeGeneration.scala | 5 +- core/src/test/resources/log4j.properties | 8 ++-- settings.gradle | 14 +++--- spark | 2 +- 13 files changed, 64 insertions(+), 67 deletions(-) diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 487a23b7ef..84dcde9a93 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -42,7 +42,6 @@ import org.apache.spark.sql.catalyst.optimizer.Optimizer import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.catalyst.plans.physical.{Partitioning, UnknownPartitioning} import org.apache.spark.sql.catalyst.rules.Rule -import org.apache.spark.sql.catalyst.util.CaseInsensitiveMap import org.apache.spark.sql.catalyst.{FunctionIdentifier, InternalRow, SQLBuilder, TableIdentifier} import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} @@ -63,6 +62,7 @@ import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream +import org.apache.spark.util.Utils import org.apache.spark.{SparkConf, SparkContext, SparkException} /** @@ -70,6 +70,13 @@ import org.apache.spark.{SparkConf, SparkContext, SparkException} */ class Spark21Internals(override val version: String) extends SparkInternals { + private[this] lazy val caseInsensitiveMapCons = { + val cons = Utils.classForName("org.apache.spark.sql.catalyst.util.CaseInsensitiveMap") + .getDeclaredConstructor(classOf[Map[_, _]]) + cons.setAccessible(true) + cons + } + override def uncacheQuery(spark: SparkSession, plan: LogicalPlan, cascade: Boolean, blocking: Boolean): Unit = { spark.sharedState.cacheManager.uncacheQuery(spark, plan, blocking) @@ -144,7 +151,8 @@ class Spark21Internals(override val version: String) extends SparkInternals { } override def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] = { - new CaseInsensitiveMap(map) + // versions >= 2.1.2 use CaseInsensitiveMap.apply() so use reflection here + caseInsensitiveMapCons.newInstance(map).asInstanceOf[Map[String, String]] } def createAndAttachSQLListener(sparkContext: SparkContext): Unit = { diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 89ae26143f..6e5a667315 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -255,7 +255,7 @@ abstract class Spark23_4_Internals extends SparkInternals { override def newSubqueryAlias(alias: String, child: LogicalPlan, view: Option[TableIdentifier]): SubqueryAlias = { - if (view.isDefined) { + if (view.isDefined && alias != view.get.unquotedString) { throw new AnalysisException(s"Spark $version does not support creating SubqueryAlias " + s"with a VIEW: alias=$alias, view=${view.get}") } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala index e10f9fd05c..cfeab3f6f6 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/NonRecursivePlans.scala @@ -34,6 +34,10 @@ trait NonRecursivePlans extends SparkPlan with SparkSupport { */ protected final var nonCodeGeneratedPlanCalls: Int = _ + // from CodegenSupport in newer Spark releases that allows child classes + // to override and still compile fine in older releases + def needCopyResult: Boolean + override protected def doExecute(): RDD[InternalRow] = { if (nonCodeGeneratedPlanCalls > 4) { throw new CodeGenerationException("Code generation failed for some of the child plans") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index 54e6f278ed..a3a083de1f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -24,7 +24,7 @@ import io.snappydata.collection.ObjectHashSet import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} -import org.apache.spark.sql.catalyst.expressions.{Attribute, BindReferences, Expression, NamedExpression} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeSet, BindReferences, Expression, NamedExpression} import org.apache.spark.sql.catalyst.plans._ import org.apache.spark.sql.execution.columnar.encoding.StringDictionary import org.apache.spark.sql.execution.joins.{BuildLeft, BuildRight, BuildSide, HashJoinExec} @@ -134,6 +134,9 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, @transient private[this] val (className, valueClassName, classVars, numNullVars) = initClass() + // return empty here as code of required variables is explicitly instantiated + override def usedInputs: AttributeSet = AttributeSet.empty + private def initClass(): (String, String, IndexedSeq[ClassVar], Int) = { // Key columns will be first in the class. @@ -518,11 +521,11 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val (dataType, javaType, ev, nullIndex) = vars(index) val isKeyVar = index < valueIndex val objVar = if (isKeyVar) keyObjVar else valObjVar - val evValue = internals.exprCodeValue(ev) ev match { // nullIndex contains index of referenced key variable in this case case null if !onlyValueVars => columnVars += columnVars(nullIndex) case _ => + val evValue = internals.exprCodeValue(ev) val (localVar, localDeclaration) = { dataType match { case StringType if !multiMap => @@ -599,6 +602,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, case None => ctx.freshName("mapLookup") case Some(p) => p._1 } + val hashMapArg = ctx.freshName("hashMap") val insertCode = if (skipInit) { s"""else { | // key not found so return entry as null for consumption @@ -619,7 +623,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, | ${generateUpdate(objVar, Nil, newKeyVars, forKey = true)} | // insert into the map and rehash if required | $dataTerm[$pos] = $objVar; - | if ($hashMapTerm.handleNewInsert($pos)) { + | if ($hashMapArg.handleNewInsert($pos)) { | // return null to indicate map was rehashed | return null; | } else { @@ -631,7 +635,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, s""" |private $className $function(final int $hash, $keyDeclarations, | final $className[] $dataTerm, final int $maskTerm, - | final ${classOf[ObjectHashSet[_]].getName} $hashMapTerm, + | final ${classOf[ObjectHashSet[_]].getName} $hashMapArg, | final boolean skipInit) { | // Lookup or insert the key in map (for group by). | // Using inline get call so that equals() is inline using diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index bbda98fe3b..afa8feac30 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -96,6 +96,8 @@ case class SnappyHashAggregateExec( override def nodeName: String = if (useByteBufferMapBasedAggregation) "BufferMapHashAggregate" else "SnappyHashAggregate" + override def needCopyResult: Boolean = false + @transient def resultExpressions: Seq[NamedExpression] = __resultExpressions @transient lazy private[this] val aggregateBufferAttributes = { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index e1ffbc5e36..e2eee54505 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -165,7 +165,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], cur => s"this.$cur = new long[$schemaLength];") numInsertions = internals.addClassField(ctx, "long", "numInsertions", v => s"$v = -1L;") maxDeltaRowsTerm = ctx.freshName("maxDeltaRows") - txIdConnArray = ctx.freshName("txIdConnArray") + txIdConnArray = internals.addClassField(ctx, "Object[]", "txIdConnArray") txId = ctx.freshName("txId") conn = ctx.freshName("conn") defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") @@ -225,7 +225,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], s""" |$checkEnd; // already done | - |final Object[] $txIdConnArray = $beginSnapshotTx(); + |$txIdConnArray = $beginSnapshotTx(); | |boolean success = false; |try { @@ -299,40 +299,24 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], encoderCursorTerms = new Array[(String, String)](tableSchema.length) numInsertions = internals.addClassField(ctx, "long", "numInsertions", v => s"$v = -1L;") maxDeltaRowsTerm = ctx.freshName("maxDeltaRows") - txIdConnArray = ctx.freshName("txIdConnArray") + txIdConnArray = internals.addClassField(ctx, "Object[]", "txIdConnArray") txId = ctx.freshName("txId") conn = ctx.freshName("conn") - val batchSizeDeclaration = if (useMemberVariables) { - batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") - "" - } else { - batchSizeTerm = ctx.freshName("currentBatchSize") - s"int $batchSizeTerm = 0;" - } + batchSizeTerm = internals.addClassField(ctx, "int", "currentBatchSize", v => s"$v = 0;") defaultBatchSizeTerm = ctx.freshName("defaultBatchSize") val defaultRowSize = ctx.freshName("defaultRowSize") val closeEncoders = new StringBuilder - val (declarations, cursorDeclarations) = tableSchema.indices.map { i => + val declarations = tableSchema.indices.map { i => val encoder = internals.addClassField(ctx, encoderClass, "encoder", enc => s"this.$enc = $encodingClass.getColumnEncoder($schemaTerm.fields()[$i]);") - var cursor: String = null - val cursorDeclaration = if (useMemberVariables) { - cursor = internals.addClassField(ctx, "long", "cursor", v => s"$v = 0L;") - "" - } else { - cursor = ctx.freshName("cursor") - s"long $cursor = 0L;" - } + val cursor = internals.addClassField(ctx, "long", "cursor", v => s"$v = 0L;") encoderCursorTerms(i) = (encoder, cursor) val declaration = - s""" - |final $encoderClass $encoder = this.$encoder; - |$defaultRowSize += $encoder.defaultSize($schemaTerm.fields()[$i].dataType()); - """.stripMargin + s"$defaultRowSize += $encoder.defaultSize($schemaTerm.fields()[$i].dataType());" closeEncoders.append(s"if ($encoder != null) $encoder.close();\n") - (declaration, cursorDeclaration) - }.unzip + declaration + } val childProduce = doChildProduce(ctx) child match { @@ -368,11 +352,9 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val resetConnectionAttributes = resetConnectionAttributesCode() s""" |$checkEnd; // already done - |final Object[] $txIdConnArray = $beginSnapshotTx(); + |$txIdConnArray = $beginSnapshotTx(); |boolean success = false; |try { - |$batchSizeDeclaration - |${cursorDeclarations.mkString("\n")} |if ($numInsertions < 0) { | $numInsertions = 0; | int $defaultRowSize = 0; @@ -663,9 +645,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val sizeTerm = ctx.freshName("size") val sizeExceededTerm = ctx.freshName("sizeExceeded") - val encoderClass = classOf[ColumnEncoder].getName val buffersCode = new StringBuilder - val encoderCursorDeclarations = new StringBuilder val batchFunctionDeclarations = new StringBuilder val batchFunctionCall = new StringBuilder val calculateSize = new StringBuilder @@ -676,8 +656,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], s"$schemaTerm.fields()[$i], $defaultBatchSizeTerm, true);" buffersCode.append( s"$buffers[$i] = $encoderTerm.finish($cursorTerm);\n") - encoderCursorDeclarations.append( - s"final $encoderClass $encoderTerm = this.$encoderTerm;\n") batchFunctionDeclarations.append(s"long $cursorTerm,\n") batchFunctionCall.append(s"$cursorTerm,\n") @@ -715,7 +693,6 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], s""" |private final void $storeColumnBatch(int $maxDeltaRowsTerm, | int $batchSizeTerm, ${batchFunctionDeclarations.toString()}, scala.Some $conn) { - | $encoderCursorDeclarations | // create statistics row | ${statsEv.code.toString.trim} | // create ColumnBatch and insert @@ -780,13 +757,11 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], // don't expect code generation to fail try { internals.newWholeStagePlan(this).execute() - } - finally { + } finally { sqlContext.sparkSession.asInstanceOf[SnappySession].clearWriteLockOnTable() } } - private def genCodeColumnWrite(ctx: CodegenContext, dataType: DataType, nullable: Boolean, encoder: String, cursorTerm: String, ev: ExprCode): String = { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index 13eaf8aee6..d7a3f1e3fd 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -338,10 +338,10 @@ abstract case class ColumnTableScan( val updatedDecoderLocal = ctx.freshName("decoderUpdatedLocal") val buffer = internals.addClassField(ctx, "java.nio.ByteBuffer", "buffer") val numNullsVar = internals.addClassField(ctx, "int", "numNulls") - val initBufferFunction = s"${buffer}Init" + val initBufferFunction = ctx.freshName("bufferInit") val bufferVar = if (isWideSchema) { internals.addClassField(ctx, "Object", "bufferObject") - } else s"${buffer}Object" + } else ctx.freshName("bufferObject") // projections are not pushed in embedded mode for optimized access val baseIndex = Utils.fieldIndex(schemaAttributes, attr.name, caseSensitive) val rsPosition = if (embedded) baseIndex + 1 else rsIndex + 1 @@ -371,7 +371,7 @@ abstract case class ColumnTableScan( ) } val updatedDecoder = internals.addClassField(ctx, updatedDecoderClass, "updatedDecoder") - val closeDecoderFunction = s"${decoder}Close" + val closeDecoderFunction = ctx.freshName("decoderClose") ctx.addNewFunction(initBufferFunction, s""" @@ -595,7 +595,6 @@ abstract case class ColumnTableScan( val (assignBatchId, assignOrdinalId) = if (ordinalIdTerm ne null) ( s""" - |final boolean $inputIsRow = this.$inputIsRow; |final long $columnBatchIdTerm; |final int $bucketIdTerm; |if ($inputIsRow) { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index dce6c64081..5e522204d4 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -66,6 +66,8 @@ case class HashJoinExec(leftKeys: Seq[Expression], override def nodeName: String = "SnappyHashJoin" + override def needCopyResult: Boolean = false + @transient private var mapAccessor: ObjectHashMapAccessor = _ @transient private var hashMapTerm: String = _ @transient private var mapDataTerm: String = _ @@ -130,7 +132,6 @@ case class HashJoinExec(leftKeys: Seq[Expression], // return empty here as code of required variables is explicitly instantiated override def usedInputs: AttributeSet = AttributeSet.empty - private def findShuffleDependencies(rdd: RDD[_]): Seq[Dependency[_]] = { rdd.dependencies.flatMap { case s: ShuffleDependency[_, _, _] => if (s.rdd ne rdd) { @@ -345,7 +346,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], s""" |$v = inputs; |inputs = new $scalaIterorClass[$buildRDDs.length]; - |$taskContextClass $contextName = $taskContextClass.get(); + |$contextName = $taskContextClass.get(); |for (int $indexVar = 0; $indexVar < $buildRDDs.length; $indexVar++) { | $partitionClass[] parts = $buildPartsVar[$indexVar]; | // check for replicate table @@ -366,10 +367,9 @@ case class HashJoinExec(leftKeys: Seq[Expression], val numKeyColumns = buildSideKeys.length val longLived = replicatedTableJoin val buildSideCreateMap = - s"""$hashSetClassName $hashMapTerm = new $hashSetClassName(128, 0.6, + s"""$hashMapTerm = new $hashSetClassName(128, 0.6, $numKeyColumns, $longLived, scala.reflect.ClassTag$$.MODULE$$.apply( $entryClass.class)); - this.$hashMapTerm = $hashMapTerm; int $maskTerm = $hashMapTerm.mask(); $entryClass[] $mapDataTerm = ($entryClass[])$hashMapTerm.data(); $buildProduce""" diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index d82672300b..970a1902cc 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -189,15 +189,15 @@ trait RowExec extends TableExec { val isNull = ctx.freshName("isNull") val field = ctx.freshName("field") val ev = input(col) - val dataType = internals.javaType(f.dataType, ctx) + val javaType = internals.javaType(f.dataType, ctx) val columnSetterFunction = ctx.freshName("setColumnOfRow") val columnSetterCode = CodeGeneration.getColumnSetterFragment(col, f.dataType, - connProps.dialect, internals.copyExprCode(ev, isNull, field, dataType), stmt, - schemaFields, ctx) + connProps.dialect, internals.copyExprCode(ev, isNull = isNull, value = field, + dt = f.dataType), stmt, schemaFields, ctx) ctx.addNewFunction(columnSetterFunction, s""" |private void $columnSetterFunction(final boolean $isNull, - | final $dataType $field) throws java.sql.SQLException { + | final $javaType $field) throws java.sql.SQLException { | $columnSetterCode |} """.stripMargin) diff --git a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala index 03ed039fef..6e3813a8fb 100644 --- a/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala +++ b/core/src/main/scala/org/apache/spark/sql/store/CodeGeneration.scala @@ -107,7 +107,10 @@ object CodeGeneration extends Logging with SparkSupport { CodegenMetrics.METRIC_SOURCE_CODE_SIZE.update(code.body.length) CodegenMetrics.METRIC_COMPILATION_TIME.update(timeMs.toLong) logInfo(s"Local code for ${key.name} generated in $timeMs ms") - (result.asInstanceOf[GeneratedClass], references) + result match { + case (c, _) => (c.asInstanceOf[GeneratedClass], references) + case _ => (result.asInstanceOf[GeneratedClass], references) + } } }) diff --git a/core/src/test/resources/log4j.properties b/core/src/test/resources/log4j.properties index 3bc8aaa561..e843048377 100644 --- a/core/src/test/resources/log4j.properties +++ b/core/src/test/resources/log4j.properties @@ -124,13 +124,13 @@ log4j.logger.io.snappydata.impl.LocatorImpl=INFO log4j.logger.spray.can.server.HttpListener=INFO # for generated code of plans -log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenExec=INFO, code +log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenExec=DEBUG, code log4j.additivity.org.apache.spark.sql.execution.WholeStageCodegenExec=false -log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenRDD=INFO, code +log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenRDD=DEBUG, code log4j.additivity.org.apache.spark.sql.execution.WholeStageCodegenRDD=false # for all Spark generated code (including ad-hoc UnsafeProjection calls etc) -log4j.logger.org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator=WARN, code +log4j.logger.org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator=DEBUG, code log4j.additivity.org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator=false # for SnappyData generated code used on store (ComplexTypeSerializer, JDBC inserts ...) -log4j.logger.org.apache.spark.sql.store.CodeGeneration=INFO, code +log4j.logger.org.apache.spark.sql.store.CodeGeneration=DEBUG, code log4j.additivity.org.apache.spark.sql.store.CodeGeneration=false diff --git a/settings.gradle b/settings.gradle index b1e96eefad..b4119ce839 100644 --- a/settings.gradle +++ b/settings.gradle @@ -31,9 +31,6 @@ include ':snappy-compatibility-tests_' + scalaBinaryVersion include ':snappy-encoders_' + scalaBinaryVersion // compatibility modules for all supported Spark releases -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3" -include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4" include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5" project(':snappy-jdbc_' + scalaBinaryVersion).projectDir = "$rootDir/jdbc" as File @@ -45,14 +42,19 @@ project(':snappy-dtests_' + scalaBinaryVersion).projectDir = "$rootDir/dtests" a project(':snappy-compatibility-tests_' + scalaBinaryVersion).projectDir = "$rootDir/compatibilityTests" as File project(':snappy-encoders_' + scalaBinaryVersion).projectDir = "$rootDir/encoders" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1").projectDir = "$rootDir/core/compatibility/spark-2.1" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3").projectDir = "$rootDir/core/compatibility/spark-2.3" as File -project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4").projectDir = "$rootDir/core/compatibility/spark-2.4" as File project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4.5").projectDir = "$rootDir/core/compatibility/spark-2.4.5" as File if (sparkConnectorVersion != sparkVersion) { include ':snappy-core-product_' + scalaBinaryVersion project(':snappy-core-product_' + scalaBinaryVersion).projectDir = "$rootDir/core-product" as File + + include ":snappy-core_${scalaBinaryVersion}:compat-spark2.1" + include ":snappy-core_${scalaBinaryVersion}:compat-spark2.3" + include ":snappy-core_${scalaBinaryVersion}:compat-spark2.4" + + project(":snappy-core_${scalaBinaryVersion}:compat-spark2.1").projectDir = "$rootDir/core/compatibility/spark-2.1" as File + project(":snappy-core_${scalaBinaryVersion}:compat-spark2.3").projectDir = "$rootDir/core/compatibility/spark-2.3" as File + project(":snappy-core_${scalaBinaryVersion}:compat-spark2.4").projectDir = "$rootDir/core/compatibility/spark-2.4" as File } if (new File(rootDir, 'spark/build.gradle').exists()) { diff --git a/spark b/spark index f2e40daae6..0c638085e4 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit f2e40daae65e0160c164f776178b9b94dcf93bf3 +Subproject commit 0c638085e4d6ba72ca0304181ef32a595dafd7a8 From bf6dce10629241932766c2332d33e6e91d8ceaa0 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 19 Feb 2020 23:18:06 +0530 Subject: [PATCH 50/80] fixing insert failures due to InsertIntoTable -> InsertIntoDataSourceCommand moved into analysis phase --- .../org/apache/spark/sql/hive/SnappySessionState.scala | 2 +- .../org/apache/spark/sql/sources/StoreStrategy.scala | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index ad4c761bc1..5461bc4cff 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -665,7 +665,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu experimentalMethods.extraStrategies = experimentalMethods.extraStrategies ++ internals.hiveConditionalStrategies(this) ++ - Seq(SnappyStrategies, StoreStrategy, StreamQueryStrategy) ++ storeOptimizedRules + Seq(SnappyStrategies, new StoreStrategy(this), StreamQueryStrategy) ++ storeOptimizedRules } protected def beforeExecutePlan(plan: LogicalPlan): Unit = { diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index 3692817d32..c12396b057 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -19,19 +19,20 @@ package org.apache.spark.sql.sources import scala.reflect.{ClassTag, classTag} import org.apache.spark.rdd.RDD -import org.apache.spark.sql._ +import org.apache.spark.sql.{Strategy, _} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan} import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.command.{ExecutedCommandExec, RunnableCommand} import org.apache.spark.sql.execution.datasources.{InsertIntoDataSourceCommand, LogicalRelation} +import org.apache.spark.sql.hive.SnappySessionState import org.apache.spark.sql.internal.PutIntoColumnTable import org.apache.spark.sql.types.{DataType, LongType} /** * Support for DML and other operations on external tables. */ -object StoreStrategy extends Strategy with SparkSupport { +class StoreStrategy(sessionState: SnappySessionState) extends Strategy with SparkSupport { private def findLogicalRelation[T: ClassTag](table: LogicalPlan): Option[LogicalRelation] = { table.find(_.isInstanceOf[LogicalRelation]) match { @@ -58,8 +59,9 @@ object StoreStrategy extends Strategy with SparkSupport { case i: InsertIntoDataSourceCommand if i.logicalRelation.relation.isInstanceOf[PlanInsertableRelation] => val p = i.logicalRelation.relation.asInstanceOf[PlanInsertableRelation] + val childPlan = sessionState.executePlan(i.query).sparkPlan val preAction = if (internals.getOverwriteOption(i)) () => p.truncate() else () => () - ExecutePlan(p.getInsertPlan(i.logicalRelation, planLater(i.query)), preAction) :: Nil + ExecutePlan(p.getInsertPlan(i.logicalRelation, childPlan), preAction) :: Nil case d@DMLExternalTable(table, cmd) => findLogicalRelation[BaseRelation](table) match { case Some(l) => ExecutedCommandExec(ExternalTableDMLCmd(l, cmd, d.output)) :: Nil From da5ab2b0a7ab02e5969c567436f8d229e15d16d2 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 20 Feb 2020 19:44:46 +0530 Subject: [PATCH 51/80] codegeneration fixes --- .../apache/spark/sql/CachedDataFrame.scala | 1 + .../apache/spark/sql/SnappyImplicits.scala | 24 ++++++++++-------- .../org/apache/spark/sql/SnappySession.scala | 1 + .../sql/execution/ObjectHashMapAccessor.scala | 3 +-- .../sql/execution/joins/HashJoinExec.scala | 25 +++++++++++++------ .../spark/sql/execution/row/RowExec.scala | 24 ++++++++++++------ core/src/test/resources/log4j.properties | 8 +++--- 7 files changed, 55 insertions(+), 31 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index 192725de2f..3ece2168ba 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -662,6 +662,7 @@ object CachedDataFrame // add the time of plan execution to the end time. if (postGUIPlans) sc.listenerBus.post(SparkListenerSQLExecutionEnd(executionId, endTime)) } finally { + snappySession.snappySessionState.clearExecutionData() SnappySession.clearExecutionProperties(localProperties) } } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala b/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala index 2f6bfb03cd..62ba1b2483 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyImplicits.scala @@ -36,7 +36,7 @@ object snappy extends Serializable { df.sparkSession match { case sc: SnappySession => SnappyDataFrameOperations(sc, df) case sc => throw new AnalysisException("Extended snappy operations " + - s"require SnappyContext and not ${sc.getClass.getSimpleName}") + s"require SnappySession and not ${sc.getClass.getSimpleName}") } } @@ -52,7 +52,7 @@ object snappy extends Serializable { s"${plan.getClass.getSimpleName}") } case sc => throw new AnalysisException("Extended snappy operations " + - s"require SnappyContext and not ${sc.getClass.getSimpleName}") + s"require SnappySession and not ${sc.getClass.getSimpleName}") } } @@ -162,13 +162,13 @@ object snappy extends Serializable { f => f.getName == "df" || f.getName.endsWith("$df") }.getOrElse(sys.error("Failed to obtain DataFrame from DataFrameWriter")) - private[this] val parColsMethod = classOf[DataFrameWriter[_]] - .getDeclaredMethods.find(_.getName.contains("$normalizedParCols")) - .getOrElse(sys.error("Failed to obtain method " + - "normalizedParCols from DataFrameWriter")) + private[this] val partitionColumnsField = classOf[DataFrameWriter[_]] + .getDeclaredFields.find(_.getName.contains("partitioningColumns")) + .getOrElse(sys.error("Failed to obtain field " + + "partitioningColumns in DataFrameWriter")) dfField.setAccessible(true) - parColsMethod.setAccessible(true) + partitionColumnsField.setAccessible(true) implicit class DataFrameWriterExtensions(writer: DataFrameWriter[_]) extends Serializable { @@ -186,20 +186,22 @@ object snappy extends Serializable { case sc: SnappySession => sc case _ => sys.error("Expected a SnappyContext for putInto operation") } - val normalizedParCols = parColsMethod.invoke(writer) + val partitionColumns = partitionColumnsField.get(writer) .asInstanceOf[Option[Seq[String]]] // A partitioned relation's schema can be different from the input // logicalPlan, since partition columns are all moved after data columns. // We Project to adjust the ordering. // TODO: this belongs to the analyzer. - val input = normalizedParCols.map { parCols => + val sessionState = df.sparkSession.sessionState + val resolver = sessionState.analyzer.resolver + val input = partitionColumns.map { parCols => val (inputPartCols, inputDataCols) = df.logicalPlan.output.partition { - attr => parCols.contains(attr.name) + attr => parCols.exists(resolver(_, attr.name)) } Project(inputDataCols ++ inputPartCols, df.logicalPlan) }.getOrElse(df.logicalPlan) - df.sparkSession.sessionState.executePlan(PutIntoTable(UnresolvedRelation( + sessionState.executePlan(PutIntoTable(UnresolvedRelation( session.tableIdentifier(tableName)), input)).executedPlan. executeCollect().foldLeft(0)(_ + _.getInt(0)) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index b725334516..c33c39ec2b 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -2169,6 +2169,7 @@ object SnappySession extends Logging { // post the end of "plan" phase which will remove this execution from active list context.listenerBus.post(SparkListenerSQLPlanExecutionEnd(executionId)) } else { + session.snappySessionState.clearExecutionData() // post the end of SQL since body of `f` failed context.listenerBus.post(SparkListenerSQLExecutionEnd( executionId, System.currentTimeMillis())) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index a3a083de1f..a110d40ea8 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -826,8 +826,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // also add a mapSize check but when continueOnNull is true, then emit a continue immediately val (checkMapSize, initFilters) = if (continueOnNull) { (s"if ($mapSize == 0) continue;\n", nullStreamKey ++ minMaxFilter) - } - else ("", s"$mapSize != 0" +: (nullStreamKey ++ minMaxFilter)) + } else ("", s"$mapSize != 0" +: (nullStreamKey ++ minMaxFilter)) val initFilterCode = if (initFilters.isEmpty) "" else initFilters.mkString("if (", " &&\n", ")") diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index 5e522204d4..e6933637d0 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -32,7 +32,7 @@ import org.apache.spark.annotation.DeveloperApi import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} -import org.apache.spark.sql.catalyst.expressions.{AttributeSet, BindReferences, Expression, SortOrder} +import org.apache.spark.sql.catalyst.expressions.{AttributeSet, BindReferences, BoundReference, Expression, SortOrder} import org.apache.spark.sql.catalyst.plans._ import org.apache.spark.sql.catalyst.plans.physical._ import org.apache.spark.sql.collection.Utils @@ -471,18 +471,29 @@ case class HashJoinExec(leftKeys: Seq[Expression], ctx.INPUT_ROW = null ctx.currentVars = input - val (resultVars, streamKeys) = buildSide match { - case BuildLeft => (buildVars ++ input, - streamSideKeys.map(BindReferences.bindReference(_, right.output))) - case BuildRight => (input ++ buildVars, - streamSideKeys.map(BindReferences.bindReference(_, left.output))) + // empty code blocks for those input variables referenced by streamKeys so that + // the code for those are not materialized by both streamKeyVars and resultVars + val streamKeys = buildSide match { + case BuildLeft => streamSideKeys.map(BindReferences.bindReference(_, right.output)) + case BuildRight => streamSideKeys.map(BindReferences.bindReference(_, left.output)) + } + val inputArray = input.toArray + streamKeys.foreach(_.foreach { + case BoundReference(ordinal, _, _) => + inputArray(ordinal) = internals.copyExprCode(inputArray(ordinal), code = "") + case _ => + }) + val newInput = inputArray.toSeq + val resultVars = buildSide match { + case BuildLeft => buildVars ++ newInput + case BuildRight => newInput ++ buildVars } val streamKeyVars = ctx.generateExpressions(streamKeys) mapAccessor.generateMapLookup(entryVar, localValueVar, mapSize, keyIsUniqueTerm, initMap, initMapCode, numRowsTerm, nullMaskVars, initCode, checkCondition, streamSideKeys, - streamKeyVars, streamedPlan.output, buildKeyVars, buildVars, input, + streamKeyVars, streamedPlan.output, buildKeyVars, buildVars, newInput, resultVars, dictionaryArrayTerm, dictionaryArrayInit, joinType, buildSide) } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index 970a1902cc..d494a9f0ac 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -204,13 +204,23 @@ trait RowExec extends TableExec { s"$columnSetterFunction(${internals.exprCodeIsNull(ev)}, ${internals.exprCodeValue(ev)});" }.mkString("\n") s""" - |$inputCode - |$functionCalls - |$rowCount++; - |$stmt.addBatch(); - |if (($rowCount % $batchSize) == 0) { - | ${executeBatchCode(numOperations, numOpRowsMetric)} - | $rowCount = 0; + |try { + | $inputCode + | $functionCalls + | $rowCount++; + | $stmt.addBatch(); + | if (($rowCount % $batchSize) == 0) { + | ${executeBatchCode(numOperations, numOpRowsMetric)} + | $rowCount = 0; + | } + |} catch (RuntimeException re) { + | throw re; + |} catch (Exception e) { + | if (e instanceof java.io.IOException) { + | throw (java.io.IOException)e; + | } else { + | throw new java.io.IOException(e.toString(), e); + | } |} """.stripMargin } diff --git a/core/src/test/resources/log4j.properties b/core/src/test/resources/log4j.properties index e843048377..3bc8aaa561 100644 --- a/core/src/test/resources/log4j.properties +++ b/core/src/test/resources/log4j.properties @@ -124,13 +124,13 @@ log4j.logger.io.snappydata.impl.LocatorImpl=INFO log4j.logger.spray.can.server.HttpListener=INFO # for generated code of plans -log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenExec=DEBUG, code +log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenExec=INFO, code log4j.additivity.org.apache.spark.sql.execution.WholeStageCodegenExec=false -log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenRDD=DEBUG, code +log4j.logger.org.apache.spark.sql.execution.WholeStageCodegenRDD=INFO, code log4j.additivity.org.apache.spark.sql.execution.WholeStageCodegenRDD=false # for all Spark generated code (including ad-hoc UnsafeProjection calls etc) -log4j.logger.org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator=DEBUG, code +log4j.logger.org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator=WARN, code log4j.additivity.org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator=false # for SnappyData generated code used on store (ComplexTypeSerializer, JDBC inserts ...) -log4j.logger.org.apache.spark.sql.store.CodeGeneration=DEBUG, code +log4j.logger.org.apache.spark.sql.store.CodeGeneration=INFO, code log4j.additivity.org.apache.spark.sql.store.CodeGeneration=false From 356ad75b6b076a10313478166a430dc645736b63 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 20 Feb 2020 21:34:58 +0530 Subject: [PATCH 52/80] couple more fixes --- .../spark/sql/hive/TestHiveSnappySession.scala | 6 ------ core/build.gradle | 6 ++++++ .../org/apache/spark/sql/SnappySession.scala | 17 ++++++++++++++++- spark | 2 +- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala b/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala index aa54599e67..3f39b45b38 100644 --- a/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala +++ b/compatibilityTests/src/test/scala/org/apache/spark/sql/hive/TestHiveSnappySession.scala @@ -54,12 +54,6 @@ class TestHiveSnappySession(@transient protected val sc: SparkContext, override def newSession(): SnappySession = new TestHiveSnappySession(sc, loadTestTables) - override def cloneSession(): SnappySession = { - val result = newSession() - result.sessionState // force copy of SessionState - result - } - override private[sql] def overrideConfs: Map[String, String] = TestHiveContext.overrideConfs + (Property.HiveCompatibility.name -> "spark") diff --git a/core/build.gradle b/core/build.gradle index 9993e486df..12e1269a14 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -97,6 +97,12 @@ dependencies { testCompile project(':dunit') testCompile 'org.scala-lang:scala-actors:' + scalaVersion testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" + testCompile(group: 'org.apache.kafka', name: 'kafka_' + scalaBinaryVersion, version: kafka2Version) { + exclude(group: 'net.jpountz.lz4', module: 'lz4') + exclude(group: 'com.fasterxml.jackson.core', module: 'jackson-core') + exclude(group: 'com.fasterxml.jackson.core', module: 'jackson-databind') + exclude(group: 'com.fasterxml.jackson.core', module: 'jackson-annotations') + } testCompile project(compatConnectorProjectName) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index c33c39ec2b..0be7a40db5 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -75,7 +75,8 @@ import org.apache.spark.streaming.dstream.DStream import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.{Logging, ShuffleDependency, SparkContext, SparkEnv} -class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSupport { +class SnappySession(_sc: SparkContext) extends SparkSession(_sc) + with SnappySessionLike with SparkSupport { self => @@ -153,6 +154,12 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo */ override def newSession(): SnappySession = new SnappySession(sparkContext) + override private[sql] def cloneSession(): SnappySession = { + val result = newSession() + result.sessionState // force copy of SessionState + result + } + /** * :: Experimental :: * Creates a [[DataFrame]] from an RDD of Product (e.g. case classes, tuples). @@ -2038,6 +2045,14 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) with SparkSuppo } } +/** + * Trait that adds cloneSession() added in new Spark releases but absent in older + * ones. SnappySession can override this cleanly and be source compatible with both. + */ +trait SnappySessionLike { + private[sql] def cloneSession(): SparkSession +} + private class FinalizeSession(session: SnappySession) extends FinalizeObject(session, true) { diff --git a/spark b/spark index 0c638085e4..576d83edcc 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 0c638085e4d6ba72ca0304181ef32a595dafd7a8 +Subproject commit 576d83edcc3b60b2ff4507b45504d7586e82417a From ba672aa7f9a695f7f163cb0b7de131f5eb46e365 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 20 Feb 2020 21:52:31 +0530 Subject: [PATCH 53/80] fix CTAS behaviour --- .../sql/hive/SnappyHiveExternalCatalog.scala | 15 ++++++++++++++- .../spark/sql/internal/SnappySessionCatalog.scala | 13 +++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala index a14ccfaa28..1f7f0f1e36 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappyHiveExternalCatalog.scala @@ -385,7 +385,12 @@ abstract class SnappyHiveExternalCatalog(val conf: SparkConf, protected def createTableImpl(tableDefinition: CatalogTable, ignoreIfExists: Boolean): Unit = { val catalogTable = addViewProperties(tableDefinition) - var ifExists = ignoreIfExists + var ifExists = + if (ignoreIfExists) { + val realIfExists = SnappyHiveExternalCatalog.ignoreIfExists.get() + // check if the CTAS flag has been explicitly set else honour the passed flag + (realIfExists eq null) || realIfExists.booleanValue() + } else false // Add dependency on base table if required. This is done before actual table // entry so that if there is a cluster failure between the two steps, then // table will still not be in catalog and base table will simply ignore @@ -854,6 +859,14 @@ object SnappyHiveExternalCatalog extends SparkSupport { @GuardedBy("this") private[this] var instance: SnappyHiveExternalCatalog = _ + /** + * Hack for CTAS for builtin tables that need to pre-create the tables before + * insert for the store layer to find them. This flag allows handling of this + * case in the ExternalCatalog.createTable method. + */ + private[sql] val ignoreIfExists: ThreadLocal[java.lang.Boolean] = + new ThreadLocal[java.lang.Boolean]() + def getInstance(sparkConf: SparkConf, hadoopConf: Configuration): SnappyHiveExternalCatalog = synchronized { val catalog = instance diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 00e8b516e2..6622ea728a 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -45,7 +45,7 @@ import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.TopK import org.apache.spark.sql.execution.command.DDLUtils import org.apache.spark.sql.execution.datasources.{DataSource, FindDataSourceTable, LogicalRelation} -import org.apache.spark.sql.hive.HiveSessionCatalog +import org.apache.spark.sql.hive.{HiveSessionCatalog, SnappyHiveExternalCatalog} import org.apache.spark.sql.policy.PolicyProperties import org.apache.spark.sql.sources.{DestroyRelation, JdbcExtendedUtils, MutableRelation, RowLevelSecurityRelation} import org.apache.spark.sql.types._ @@ -585,7 +585,16 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } case _ => createSchema(schemaName, ignoreIfExists = true) - baseCreateTable(table, ignoreIfExists, validateTableLocation) + // hack to always pass ignoreIfExists as true so that + // for the case of CTAS for builtin tables which is handled + // in SnappyHiveExternalCatalog but premature exception gets + // thrown in newer SessionCatalog.createTable + SnappyHiveExternalCatalog.ignoreIfExists.set(ignoreIfExists) + try { + baseCreateTable(table, ignoreIfExists = true, validateTableLocation) + } finally { + SnappyHiveExternalCatalog.ignoreIfExists.remove() + } } contextFunctions.postCreateTable(table) From 35b7e2caea3df3aa59214368521bd98c44a5a201 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 21 Feb 2020 21:17:43 +0530 Subject: [PATCH 54/80] more generated code and other fixes --- core/compatibility/spark-2.1/build.gradle | 56 ++++++ .../spark/sql/internal/Spark21Internals.scala | 8 +- .../sql/internal/Spark23_4_Internals.scala | 10 +- .../spark/sql/internal/Spark24Internals.scala | 2 +- .../org/apache/spark/sql/SnappyParser.scala | 2 +- .../org/apache/spark/sql/SparkInternals.scala | 6 + .../sql/execution/ObjectHashMapAccessor.scala | 186 +++++++++++++----- .../sql/execution/joins/HashJoinExec.scala | 45 ++--- .../sql/internal/SnappySessionCatalog.scala | 5 +- .../apache/spark/sql/internal/session.scala | 5 + store | 2 +- 11 files changed, 232 insertions(+), 95 deletions(-) create mode 100644 core/compatibility/spark-2.1/build.gradle diff --git a/core/compatibility/spark-2.1/build.gradle b/core/compatibility/spark-2.1/build.gradle new file mode 100644 index 0000000000..6ef41350ee --- /dev/null +++ b/core/compatibility/spark-2.1/build.gradle @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + +apply plugin: 'scala' + +compileScala.options.encoding = 'UTF-8' + +sourceSets.main.scala.srcDir 'src/main/java' +sourceSets.main.java.srcDirs = [] + +// keeping this as sparkConnectorVersion helps use the same for multiple Spark versions +// for using the same gradle build across 2.1.x versions +String sparkCompatVersion = (sparkConnectorVersion ==~ /2.1.*/) ? sparkConnectorVersion : '2.1.3' + +dependencies { + compileOnly 'org.scala-lang:scala-library:' + scalaVersion + compileOnly 'org.scala-lang:scala-reflect:' + scalaVersion + + compileOnly 'org.slf4j:slf4j-api:' + slf4jVersion + compileOnly 'org.slf4j:slf4j-log4j12:' + slf4jVersion + compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion + compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion + + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + + compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + + compileOnly(project(":snappy-core_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly(project(":snappy-jdbc_${scalaBinaryVersion}")) { + transitive = false + } + compileOnly project(':snappy-store:snappydata-store-core') +} + +archivesBaseName = "snappydata-core-compat-spark${sparkCompatVersion}_${scalaBinaryVersion}" +sparkPackageName = "snappydata-${version}_${sparkCompatVersion}-s_${scalaBinaryVersion}" diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 84dcde9a93..6743f3d833 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -36,7 +36,7 @@ import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog.{ExternalCatalog, _} import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, ExprCode, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameBoundary, FrameType, Generator, In, ListQuery, Literal, NamedExpression, NullOrdering, PredicateSubquery, SortDirection, SortOrder, SpecifiedWindowFrame, UnboundedFollowing, UnboundedPreceding, ValueFollowing, ValuePreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.optimizer.Optimizer import org.apache.spark.sql.catalyst.plans.logical._ @@ -100,7 +100,7 @@ class Spark21Internals(override val version: String) extends SparkInternals { } override def addFunction(ctx: CodegenContext, funcName: String, funcCode: String, - inlineToOuterClass: Boolean = false): String = { + inlineToOuterClass: Boolean): String = { ctx.addNewFunction(funcName, funcCode) funcName } @@ -118,6 +118,10 @@ class Spark21Internals(override val version: String) extends SparkInternals { override def isPredicateSubquery(expr: Expression): Boolean = expr.isInstanceOf[PredicateSubquery] + override def newInSubquery(expr: Expression, query: LogicalPlan): Expression = { + In(expr, ListQuery(query) :: Nil) + } + override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, newExprId: ExprId): Expression = { expr.asInstanceOf[PredicateSubquery].copy(plan = newPlan, exprId = newExprId) diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 6e5a667315..7dd795b0ff 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -36,7 +36,7 @@ import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.aggregate.{AggregateExpression, AggregateFunction} import org.apache.spark.sql.catalyst.expressions.codegen.{CodeAndComment, CodeGenerator, CodegenContext, GeneratedClass} -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, CreateNamedStruct, CurrentRow, ExprId, Expression, ExpressionInfo, FrameType, Generator, ListQuery, NamedExpression, NullOrdering, SortDirection, SortOrder, SpecifiedWindowFrame, UnaryMinus, UnboundedFollowing, UnboundedPreceding} import org.apache.spark.sql.catalyst.json.JSONOptions import org.apache.spark.sql.catalyst.optimizer.Optimizer import org.apache.spark.sql.catalyst.plans.logical._ @@ -114,6 +114,14 @@ abstract class Spark23_4_Internals extends SparkInternals { override def isPredicateSubquery(expr: Expression): Boolean = false + override def newInSubquery(expr: Expression, query: LogicalPlan): Expression = { + val expressions = expr match { + case c: CreateNamedStruct => c.valExprs + case _ => expr :: Nil + } + catalyst.expressions.InSubquery(expressions, ListQuery(query)) + } + override def copyPredicateSubquery(expr: Expression, newPlan: LogicalPlan, newExprId: ExprId): Expression = { throw new UnsupportedOperationException( diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index 5123a584fd..ca34fd4d6a 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -157,7 +157,7 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals override def newExprCode(code: String, isNull: String, value: String, dt: DataType): ExprCode = { - ExprCode(CodeBlock(code :: Nil, EmptyBlock :: Nil), + ExprCode(if (code.isEmpty) EmptyBlock else CodeBlock(code :: Nil, EmptyBlock :: Nil), isNull = exprValue(isNull, BooleanType), value = exprValue(value, dt)) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index af6617caba..d129657015 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -508,7 +508,7 @@ class SnappyParser(session: SnappySession) (termExpression * commaSep) ~ ')' ~ ws ~> ((e: Expression, es: Any) => In(e, es.asInstanceOf[Seq[Expression]])) | query ~ ')' ~ ws ~> ((e1: Expression, plan: LogicalPlan) => - In(e1, Seq(ListQuery(plan)))) + internals.newInSubquery(e1, plan)) ) | BETWEEN ~ termExpression ~ AND ~ termExpression ~> ((e: Expression, el: Expression, eu: Expression) => diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index cccd042128..5e6a9ff522 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -129,6 +129,12 @@ trait SparkInternals extends Logging { */ def isPredicateSubquery(expr: Expression): Boolean + /** + * Create a new IN expression for a subquery. Older Spark versions handle + * it as a regular IN expression while newer ones use a separate InSubquery. + */ + def newInSubquery(expr: Expression, query: LogicalPlan): Expression + /** * Make a copy of given predicate sub-query with new plan and [[ExprId]]. */ diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index a110d40ea8..2411636e02 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -297,8 +297,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, override protected def doProduce(ctx: CodegenContext): String = throw new UnsupportedOperationException("unexpected invocation") - override def doConsume(ctx: CodegenContext, input: Seq[ExprCode], - row: ExprCode): String = { + private def doConsume(ctx: CodegenContext, keyExpressions: Seq[Expression], + valueExpressions: Seq[Expression], input: Seq[ExprCode]): String = { // consume the data and populate the map val entryVar = "mapEntry" // local variable val hashVar = Array(ctx.freshName("hash")) @@ -307,8 +307,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val keyVars = getExpressionVars(keyExpressions, input) // skip expressions already in key variables (that are also skipped // in the value class fields in class generation) - val valueVars = getExpressionVars( - valueExprIndexes.filter(_._2 >= 0).map(_._1), input) + val valueVars = getExpressionVars(valueExpressions, input) // Update min/max code for primitive type columns. Avoiding additional // index mapping here for mix of integral and non-integral keys // rather using key index since overhead of blanks will be negligible. @@ -334,13 +333,17 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // mark map as not unique on multiple inserts for same key $hashMapTerm.setKeyIsUnique(false);""" } + val nullableKeys = keyVars.map(internals.exprCodeIsNull).filter(_ != "false") + val (nullCheckStart, nullCheckEnd) = + if (nullableKeys.isEmpty) ("", "") + else { + (s"// skip if a key is null\nif (${nullableKeys.mkString("!", " &&\n!", "")}) {\n", "\n}") + } s""" // evaluate the key and value expressions ${evaluateVariables(keyVars)}${evaluateVariables(valueVars)} - // skip if any key is null - if (${keyVars.map(internals.exprCodeIsNull).mkString(" ||\n")}) continue; - // generate hash code - ${generateHashCode(hashVar, keyVars, keyExpressions, register = false)} + $nullCheckStart// generate hash code + ${generateHashCode(hashVar, keyVars, register = false)} // lookup or insert the grouping key in map // using inline get call so that equals() is inline using // existing register variables instead of having to fill up @@ -376,10 +379,73 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, break; } - } + }$nullCheckEnd """ } + override def doConsume(ctx: CodegenContext, input: Seq[ExprCode], row: ExprCode): String = { + val valueExpressions = valueExprIndexes.filter(_._2 >= 0).map(_._1) + val output = this.output + // try to create a separate function for doConsume to reduce outer function size + if (calculateParamLength(ctx, output) <= 255) { + val doConsumeFunction = ctx.freshName("doConsume") + val usedInput = AttributeSet(keyExpressions) ++ AttributeSet(valueExpressions) + val usedInputCode = new mutable.ArrayBuffer[String] + val args = new mutable.ArrayBuffer[String] + val params = new mutable.ArrayBuffer[String] + val newInput = new mutable.ArrayBuffer[ExprCode]() + for (i <- input.indices) { + val attr = output(i) + val ev = input(i) + if (usedInput.contains(attr)) { + val varName = ctx.freshName("arg") + val dataType = attr.dataType + val evCode = ev.code.toString + if (!evCode.isEmpty) usedInputCode += evCode + args += internals.exprCodeValue(ev) + params += s"${internals.javaType(dataType, ctx)} $varName" + var isNull = internals.exprCodeIsNull(ev) + if (isNull != "false") { + args += isNull + isNull = ctx.freshName("isNull") + params += s"boolean $isNull" + } + newInput += internals.newExprCode(code = "", isNull, varName, dataType) + } else { + newInput += ev + } + } + val functionName = internals.addFunction(ctx, doConsumeFunction, + s""" + |private void $doConsumeFunction(${params.mkString(", ")}) throws java.io.IOException { + | ${doConsume(ctx, keyExpressions, valueExpressions, newInput)} + |} + """.stripMargin) + s""" + |${usedInputCode.mkString("\n")} + |$functionName(${args.mkString(", ")}); + """.stripMargin + } else { + doConsume(ctx, keyExpressions, valueExpressions, input) + } + } + + /** + * Taken from CodeGenerator.calculateParamLength in Spark 2.4.x + */ + private def calculateParamLength(ctx: CodegenContext, params: Seq[Expression]): Int = { + def paramLengthForExpr(input: Expression): Int = { + val javaParamLength = internals.javaType(input.dataType, ctx) match { + case "long" | "double" => 2 + case _ => 1 + } + // For a nullable expression, we need to pass in an extra boolean parameter. + (if (input.nullable) 1 else 0) + javaParamLength + } + // Initial value is 1 for `this`. + 1 + params.map(paramLengthForExpr).sum + } + /** get the generated class name */ def getClassName: String = className @@ -388,8 +454,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, * correspond to the key columns in this class. */ def generateHashCode(hashVar: Array[String], keyVars: Seq[ExprCode], - keyExpressions: Seq[Expression], skipDeclaration: Boolean = false, - register: Boolean = true): String = { + skipDeclaration: Boolean = false, register: Boolean = true): String = { var hash = hashVar(0) val hashDeclaration = if (skipDeclaration) "" else s"int $hash;\n" // check if hash has already been generated for keyExpressions @@ -745,7 +810,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // evaluate the key expressions ${evaluateVariables(keyVars)} // evaluate hash code of the lookup key - ${generateHashCode(hashVar, keyVars, keyExpressions, register = false)} + ${generateHashCode(hashVar, keyVars, register = false)} ${mapLookupCode(keyVars)} } """ @@ -757,7 +822,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, $inputEvals ${evaluateVariables(keyVars)} // evaluate hash code of the lookup key - ${generateHashCode(hashVar, keyVars, keyExpressions)} + ${generateHashCode(hashVar, keyVars)} $className $objVar; ${mapLookupCode(keyVars)} """ @@ -769,15 +834,13 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, s"$numRows++;\n${consumer.consume(ctx, resultVars)}" // scalastyle:off - def generateMapLookup(entryVar: String, localValueVar: String, - mapSize: String, keyIsUnique: String, initMap: String, - initMapCode: String, numRows: String, nullMaskVars: Array[String], - initCode: String, checkCond: (Option[ExprCode], String, Option[Expression]), - streamKeys: Seq[Expression], streamKeyVars: Seq[ExprCode], - streamOutput: Seq[Attribute], buildKeyVars: Seq[ExprCode], - buildVars: Seq[ExprCode], input: Seq[ExprCode], - resultVars: Seq[ExprCode], dictArrayVar: String, dictArrayInitVar: String, - joinType: JoinType, buildSide: BuildSide): String = { + def generateMapLookup(entryVar: String, localValueVar: String, mapSize: String, + keyIsUnique: String, initMap: String, initMapCode: String, numRows: String, + nullMaskVars: Array[String], initCode: String, checkCond: (Option[ExprCode], String, + Option[Expression]), streamKeys: Seq[Expression], streamOutput: Seq[Attribute], + buildKeyVars: Seq[ExprCode], buildVars: Seq[ExprCode], input: Seq[ExprCode], + dictArrayVar: String, dictArrayInitVar: String, joinType: JoinType, + buildSide: BuildSide): String = { // scalastyle:on val hash = ctx.freshName("hash") @@ -799,24 +862,43 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } val mapKeyCodes = s"$initCode\n${evaluateVariables(mapKeyVars)}" + // continue to next entry on no match + val continueOnNull = joinType match { + case Inner | LeftSemi => true + case _ => false + } + // initialize dictionaryKey + initDictionaryCodeForSingleKeyCase(dictArrayInitVar, input, streamKeys, streamOutput) + + // check if streamKeyVars need to be evaluated in the outer block in which case pre-evaluate + // the used input variables in appropriate positions to avoid double variable initialization + val inputKeysCode = if (dictionaryKey.isEmpty || + // determine if initFilters will be empty or not + !continueOnNull || integralKeys.nonEmpty || streamKeys.exists(_.nullable)) { + evaluateRequiredVariables(streamOutput, input, AttributeSet(streamKeys)) + } else "" + val resultVars = buildSide match { + case BuildLeft => buildVars ++ input + case BuildRight => input ++ buildVars + } + + ctx.INPUT_ROW = null + ctx.currentVars = input + val boundStreamKeys = streamKeys.map(BindReferences.bindReference(_, streamOutput)) + val streamKeyVars = ctx.generateExpressions(boundStreamKeys) + // invoke generateHashCode before consume so that hash variables // can be re-used by consume if possible - val streamHashCode = generateHashCode(hashVar, streamKeyVars, streamKeys, - skipDeclaration = true) + val streamHashCode = generateHashCode(hashVar, streamKeyVars, skipDeclaration = true) // if previous hash variable is being used then skip declaration val hashInit = if (hashVar(0) eq hash) s"int $hash = 0;" else "" // if a stream-side key is null then skip (or null for outer join) - val nullStreamKey = streamKeyVars.filter(internals.exprCodeIsNull(_) != "false") - .map(v => s"!${internals.exprCodeIsNull(v)}") - // continue to next entry on no match - val continueOnNull = joinType match { - case Inner | LeftSemi => true - case _ => false + val nullStreamKeys = streamKeys.indices.collect { + case i if streamKeys(i).nullable => s"!${internals.exprCodeIsNull(streamKeyVars(i))}" } // filter as per min/max if provided; the min/max variables will be // initialized by the caller outside the loop after creating the map - val minMaxFilter = integralKeys.zipWithIndex.map { - case (indexKey, index) => + val minMaxFilter = integralKeys.zipWithIndex.map { case (indexKey, index) => val keyVar = internals.exprCodeValue(streamKeyVars(indexKey)) val minVar = integralKeysMinVars(index) val maxVar = integralKeysMaxVars(index) @@ -825,10 +907,10 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // generate the initial filter condition from above two // also add a mapSize check but when continueOnNull is true, then emit a continue immediately val (checkMapSize, initFilters) = if (continueOnNull) { - (s"if ($mapSize == 0) continue;\n", nullStreamKey ++ minMaxFilter) - } else ("", s"$mapSize != 0" +: (nullStreamKey ++ minMaxFilter)) - val initFilterCode = if (initFilters.isEmpty) "" - else initFilters.mkString("if (", " &&\n", ")") + (s"if ($mapSize == 0) continue;\n", nullStreamKeys ++ minMaxFilter) + } else ("", s"$mapSize != 0" +: (nullStreamKeys ++ minMaxFilter)) + val initFilterCode = + if (initFilters.isEmpty) "" else initFilters.mkString("if (", " &&\n", ")") // common multi-value iteration code fragments val entryIndexVar = ctx.freshName("entryIndex") @@ -880,12 +962,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } // optimized path for single key string column if dictionary is present - val lookup = mapLookup(entryVar, hashVar(0), streamKeys, streamKeyVars, - valueInit = null) - val preEvalKeys = if (initFilterCode.isEmpty) "" - else evaluateVariables(streamKeyVars) - initDictionaryCodeForSingleKeyCase(dictArrayInitVar, input, - streamKeys, streamOutput) + val lookup = mapLookup(entryVar, hashVar(0), boundStreamKeys, streamKeyVars, valueInit = null) + val preEvalKeys = if (initFilterCode.isEmpty) "" else evaluateVariables(streamKeyVars) var mapLookupCode = dictionaryKey match { case Some(dictKey) => val keyVar = streamKeyVars.head @@ -895,9 +973,9 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // if required outside the block val code = s""" ${DictionaryOptimizedMapAccessor.dictionaryArrayGetOrInsert(ctx, - streamKeys, keyVar, dictKey, dictArrayVar, entryVar, + boundStreamKeys, keyVar, dictKey, dictArrayVar, entryVar, valueInit = null, continueOnNull, accessor = this)} else { - // evaluate the key expressions + // evaluate the string key expression ${if (keyCode.isEmpty) "" else keyCode.trim} // generate hash code from stream side key columns $streamHashCode @@ -981,15 +1059,19 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, s"HashJoin should not take $joinType as the JoinType") } + // wrap in "do {...} while(false)" so that the code inside can break out with continue s""" - if (!$initMap) { - $initMapCode - } - $checkMapSize$className $entryVar = null; - $hashInit - $mapLookupCode - $entryConsume - """ + |if (!$initMap) { + | $initMapCode + |} + |do { + | $checkMapSize$className $entryVar = null; + | $inputKeysCode + | $hashInit + | $mapLookupCode + | $entryConsume + |} while (false); + """.stripMargin } /** diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index e6933637d0..d326e1a5e2 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -32,7 +32,7 @@ import org.apache.spark.annotation.DeveloperApi import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} -import org.apache.spark.sql.catalyst.expressions.{AttributeSet, BindReferences, BoundReference, Expression, SortOrder} +import org.apache.spark.sql.catalyst.expressions.{AttributeSet, BindReferences, Expression, SortOrder} import org.apache.spark.sql.catalyst.plans._ import org.apache.spark.sql.catalyst.plans.physical._ import org.apache.spark.sql.collection.Utils @@ -311,12 +311,12 @@ case class HashJoinExec(leftKeys: Seq[Expression], val cacheKeyTerm = ctx.addReferenceObj("cacheKey", new CacheKey(exprIds, rdds.head.id)) - // generate local variables for HashMap data array and mask + // generate variables for HashMap data array and mask mapDataTerm = ctx.freshName("mapData") maskTerm = internals.addClassField(ctx, "int", "hashMapMask") mapSize = internals.addClassField(ctx, "int", "mapSize", v => s"$v = -1;") keyIsUniqueTerm = internals.addClassField(ctx, "boolean", "keyIsUnique", v => s"$v = true;") - numRowsTerm = ctx.freshName("numRows") + numRowsTerm = internals.addClassField(ctx, "long", "numRows", v => s"$v = 0L;") // generate the map accessor to generate key/value class // and get map access methods @@ -371,7 +371,8 @@ case class HashJoinExec(leftKeys: Seq[Expression], $numKeyColumns, $longLived, scala.reflect.ClassTag$$.MODULE$$.apply( $entryClass.class)); int $maskTerm = $hashMapTerm.mask(); - $entryClass[] $mapDataTerm = ($entryClass[])$hashMapTerm.data(); + this.$maskTerm = $maskTerm; + this.$mapDataTerm = ($entryClass[])$hashMapTerm.data(); $buildProduce""" if (replicatedTableJoin) { @@ -432,19 +433,17 @@ case class HashJoinExec(leftKeys: Seq[Expression], $buildTime.${metricAdd(s"(System.nanoTime() - $beforeMap) / 1000000")}; this.$initMap = true; - this.$mapSize = $hashMapTerm.size(); + $mapSize = $hashMapTerm.size(); this.$keyIsUniqueTerm = $keyIsUniqueTerm = $hashMapTerm.keyIsUnique(); $initMinMaxVars this.$maskTerm = $maskTerm = $hashMapTerm.mask(); - this.$mapDataTerm = $mapDataTerm = ($entryClass[])$hashMapTerm.data();""" + $mapDataTerm = ($entryClass[])$hashMapTerm.data();""" val produced = streamedPlan.asInstanceOf[CodegenSupport].produce(ctx, this) s""" boolean $keyIsUniqueTerm = this.$keyIsUniqueTerm; int $maskTerm = this.$maskTerm; - $entryClass[] $mapDataTerm = this.$mapDataTerm; - long $numRowsTerm = 0L; try { ${session.evaluateFinallyCode(ctx, produced)} } finally { @@ -469,32 +468,10 @@ case class HashJoinExec(leftKeys: Seq[Expression], val buildVars = keyValueVars.drop(buildSideKeys.length) val checkCondition = getJoinCondition(ctx, input, buildVars) - ctx.INPUT_ROW = null - ctx.currentVars = input - // empty code blocks for those input variables referenced by streamKeys so that - // the code for those are not materialized by both streamKeyVars and resultVars - val streamKeys = buildSide match { - case BuildLeft => streamSideKeys.map(BindReferences.bindReference(_, right.output)) - case BuildRight => streamSideKeys.map(BindReferences.bindReference(_, left.output)) - } - val inputArray = input.toArray - streamKeys.foreach(_.foreach { - case BoundReference(ordinal, _, _) => - inputArray(ordinal) = internals.copyExprCode(inputArray(ordinal), code = "") - case _ => - }) - val newInput = inputArray.toSeq - val resultVars = buildSide match { - case BuildLeft => buildVars ++ newInput - case BuildRight => newInput ++ buildVars - } - val streamKeyVars = ctx.generateExpressions(streamKeys) - - mapAccessor.generateMapLookup(entryVar, localValueVar, - mapSize, keyIsUniqueTerm, initMap, initMapCode, numRowsTerm, - nullMaskVars, initCode, checkCondition, streamSideKeys, - streamKeyVars, streamedPlan.output, buildKeyVars, buildVars, newInput, - resultVars, dictionaryArrayTerm, dictionaryArrayInit, joinType, buildSide) + mapAccessor.generateMapLookup(entryVar, localValueVar, mapSize, keyIsUniqueTerm, initMap, + initMapCode, numRowsTerm, nullMaskVars, initCode, checkCondition, streamSideKeys, + streamedPlan.output, buildKeyVars, buildVars, input, dictionaryArrayTerm, + dictionaryArrayInit, joinType, buildSide) } override def canConsume(plan: SparkPlan): Boolean = { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 6622ea728a..7c6b1963b3 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -939,9 +939,8 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { override def refreshTable(name: TableIdentifier): Unit = { val table = addMissingGlobalTempSchema(name) - if (isTemporaryTable(table)) { - super.refreshTable(table) - } else { + super.refreshTable(table) + if (!isTemporaryTable(table)) { val resolved = resolveTableIdentifier(table) snappyExternalCatalog.invalidate(resolved.database.get -> resolved.table) if (snappySession.enableHiveSupport) { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index 130e7dbe83..f3e11abfd5 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -76,6 +76,11 @@ class SnappyConf(@transient val session: SnappySession) */ @volatile private[this] var dynamicCpusPerTask: Int = _ + // disable LogicalPlan cache since the ExternalCatalog implementations already have + // a large enough cache and this cache causes lot of trouble with stale data especially + // in smart connector mode which is already handled by SmartConnectorExternalCatalog + setConfString("spark.sql.filesourceTableRelationCacheSize", "0") + SQLConf.SHUFFLE_PARTITIONS.defaultValue match { case Some(d) if (session ne null) && super.numShufflePartitions == d => dynamicShufflePartitions = coreCountForShuffle diff --git a/store b/store index 4c50982e3c..768e11709e 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 4c50982e3cf644e379bdb237f9dae6beccbc2e8f +Subproject commit 768e11709e3c1daef895b496c6215e400fa83a63 From add532b93430398233ed2a913dfc50e17d6439bc Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 21 Feb 2020 21:28:32 +0530 Subject: [PATCH 55/80] fixing compatibility with Spark 2.3.x --- .../spark/sql/internal/Spark24Internals.scala | 10 ++++++++++ .../org/apache/spark/sql/SparkInternals.scala | 19 +++++++++++++++++++ .../spark/sql/hive/SnappySessionState.scala | 14 +++++++------- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index ca34fd4d6a..edb3c23955 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -246,6 +246,16 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals ignoreIfExists: Boolean, validateLocation: Boolean): Unit = { catalog.createTable(tableDefinition, ignoreIfExists, validateLocation) } + + override def logicalPlanResolveDown(plan: LogicalPlan)( + rule: PartialFunction[LogicalPlan, LogicalPlan]): LogicalPlan = { + plan.resolveOperatorsDown(rule) + } + + override def logicalPlanResolveUp(plan: LogicalPlan)( + rule: PartialFunction[LogicalPlan, LogicalPlan]): LogicalPlan = { + plan.resolveOperatorsUp(rule) + } } class SnappyEmbeddedHiveCatalog24(_conf: SparkConf, _hadoopConf: Configuration, diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 5e6a9ff522..3a4c1a1e30 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -759,10 +759,29 @@ trait SparkInternals extends Logging { def addStringPromotionRules(rules: Seq[Rule[LogicalPlan]], analyzer: SnappyAnalyzer, conf: SQLConf): Seq[Rule[LogicalPlan]] + /** + * Create table definition in the catalog. + */ def createTable(catalog: SessionCatalog, tableDefinition: CatalogTable, ignoreIfExists: Boolean, validateLocation: Boolean): Unit = { catalog.createTable(tableDefinition, ignoreIfExists) } + + /** + * Transform down a [[LogicalPlan]] during analysis phase. + * This translates to resolveOperatorsDown in Spark 2.4.x + * while it uses transformDown in earlier versions. + */ + def logicalPlanResolveDown(plan: LogicalPlan)( + rule: PartialFunction[LogicalPlan, LogicalPlan]): LogicalPlan = plan.transformDown(rule) + + /** + * Transform up a [[LogicalPlan]] during analysis phase. + * This translates to resolveOperatorsUp in Spark 2.4.x + * while it uses transformUp in earlier versions. + */ + def logicalPlanResolveUp(plan: LogicalPlan)( + rule: PartialFunction[LogicalPlan, LogicalPlan]): LogicalPlan = plan.transformUp(rule) } /** diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 5461bc4cff..537ee7f510 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -170,7 +170,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu DynamicFoldableExpression(mark(e, foldable = false)) } - plan resolveOperators { + internals.logicalPlanResolveDown(plan) { // transformDown for expression so that top-most node which is foldable gets // selected for wrapping by DynamicFoldableExpression and further sub-expressions // do not since foldExpression will reset inner ParamLiterals as non-foldable @@ -216,7 +216,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu var duration: Duration = null var slide: Option[Duration] = None var transformed: Boolean = false - plan resolveOperators { + internals.logicalPlanResolveDown(plan) { case win@WindowLogicalPlan(d, s, child, false) => child match { case _: LogicalRelation | _: LogicalDStreamPlan => win @@ -275,7 +275,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu * Orders the join keys as per the underlying partitioning keys ordering of the table. */ object OrderJoinConditions extends Rule[LogicalPlan] with JoinQueryPlanning { - def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveDown(plan) { case ExtractEquiJoinKeys(joinType, leftKeys, rightKeys, otherCondition, left, right) => prepareOrderedCondition(joinType, left, right, leftKeys, rightKeys, otherCondition) } @@ -342,7 +342,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } object ResolveAliasInGroupBy extends Rule[LogicalPlan] { - def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveUp(plan) { // pivot with '*' projection messes up references for some reason // in older versions of Spark case Project(projectList, p: Pivot) @@ -400,7 +400,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu // is of type RunnableCommad. Later if it turns out any data operation // is happening via this command we need to handle it case _: RunnableCommand => plan - case _ if !alreadyPolicyApplied(plan) => plan resolveOperators { + case _ if !alreadyPolicyApplied(plan) => internals.logicalPlanResolveUp(plan) { case lr: LogicalRelation if lr.relation.isInstanceOf[RowLevelSecurityRelation] => val policyFilter = catalog.getCombinedPolicyFilterForNativeTable( lr.relation.asInstanceOf[RowLevelSecurityRelation], Some(lr)) @@ -521,7 +521,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu s"Update/Delete requires a MutableRelation but got $table")) // resolve key columns right away var mutablePlan: Option[LogicalRelation] = None - val newChild = child resolveOperators { + val newChild = internals.logicalPlanResolveDown(plan) { case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] && lr.relation.asInstanceOf[MutableRelation].table.equalsIgnoreCase(tableName) => val mutable = lr.relation.asInstanceOf[MutableRelation] @@ -544,7 +544,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } } - def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveDown(plan) { case u@Update(table, child, keyColumns, updateCols, updateExprs) if keyColumns.isEmpty && u.resolved && child.resolved => // add the key columns to the plan From db0421f4e0ab293bc3ecfcf4eedc505122e56373 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sat, 22 Feb 2020 15:12:47 +0530 Subject: [PATCH 56/80] fix duplicate SQLTabs and other test/code fixes --- .../spark/sql/internal/Spark21Internals.scala | 7 +--- .../spark/sql/internal/Spark23Internals.scala | 2 + .../sql/internal/Spark23_4_Internals.scala | 5 +-- .../spark/sql/internal/Spark24Internals.scala | 27 +++++++++++++- .../org/apache/spark/sql/SnappyContext.scala | 33 +++++++++++------ .../org/apache/spark/sql/SparkInternals.scala | 29 +++++++++++++++ .../spark/sql/hive/SnappySessionState.scala | 8 ++-- .../sql/internal/ColumnTableBulkOps.scala | 30 ++++++++++----- .../apache/spark/sql/internal/session.scala | 6 +-- .../io/snappydata/ConcurrentOpsTests.scala | 37 ++++++++++--------- .../store/ColumnTableBatchInsertTest.scala | 10 ++--- 11 files changed, 130 insertions(+), 64 deletions(-) diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 6743f3d833..86213e7627 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -179,12 +179,7 @@ class Spark21Internals(override val version: String) extends SparkInternals { .isInstanceOf[SnappyEmbeddedMode] => // clear the previous SQLTab, if any if (old ne null) { - ui.getTabs.foreach { - case tab: SQLTab => - ui.detachTab(tab) - ui.removeStaticHandler("/static/sql") - case _ => - } + removeSQLTabs(sparkContext, except = None) } new SQLTab(listener, ui) case _ => diff --git a/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala index e18c3fe2d1..3730b01d6a 100644 --- a/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala +++ b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala @@ -53,6 +53,8 @@ class Spark23Internals(override val version: String) extends Spark23_4_Internals } override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + // remove any existing SQLTab since a new one will be created by SharedState constructor + removeSQLTabs(sparkContext, except = null) val state = new SnappySharedState23(sparkContext) createAndAttachSQLListener(state, sparkContext) state diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 7dd795b0ff..0ac8f32d87 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -263,9 +263,8 @@ abstract class Spark23_4_Internals extends SparkInternals { override def newSubqueryAlias(alias: String, child: LogicalPlan, view: Option[TableIdentifier]): SubqueryAlias = { - if (view.isDefined && alias != view.get.unquotedString) { - throw new AnalysisException(s"Spark $version does not support creating SubqueryAlias " + - s"with a VIEW: alias=$alias, view=${view.get}") + if (view.isDefined && alias != view.get.table) { + throw new AnalysisException(s"Conflicting alias and view: alias=$alias, view=${view.get}") } SubqueryAlias(alias, child) } diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index edb3c23955..6a261d81fc 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -28,8 +28,9 @@ import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.codegen._ import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, ExprId, Expression, NamedExpression} import org.apache.spark.sql.catalyst.optimizer.Optimizer -import org.apache.spark.sql.catalyst.plans.logical.{Except, Intersect, LogicalPlan, Pivot} +import org.apache.spark.sql.catalyst.plans.logical.{Except, Intersect, LogicalPlan, Pivot, SubqueryAlias} import org.apache.spark.sql.catalyst.rules.Rule +import org.apache.spark.sql.catalyst.{AliasIdentifier, TableIdentifier} import org.apache.spark.sql.execution.bootstrap.{ApproxColumnExtractor, Tag, TaggedAlias, TaggedAttribute, TransformableTag} import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, ErrorAggregate, ErrorEstimateAttribute} import org.apache.spark.sql.execution.columnar.InMemoryRelation @@ -98,6 +99,22 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals // scalastyle:on + override def newSubqueryAlias(alias: String, child: LogicalPlan, + view: Option[TableIdentifier]): SubqueryAlias = view match { + case Some(v@TableIdentifier(table, schemaOpt)) => + if (alias != table) { + throw new AnalysisException(s"Conflicting alias and view: alias=$alias, view=$v") + } else { + SubqueryAlias(AliasIdentifier(table, schemaOpt), child) + } + case _ => SubqueryAlias(AliasIdentifier(alias, None), child) + } + + override def getViewFromAlias(q: SubqueryAlias): Option[TableIdentifier] = q.name match { + case AliasIdentifier(_, None) => None + case AliasIdentifier(id, schema) => Some(TableIdentifier(id, schema)) + } + override def newAlias(child: Expression, name: String, copyAlias: Option[NamedExpression], exprId: ExprId, qualifier: Seq[String]): Alias = { copyAlias match { @@ -138,6 +155,8 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals } override def newSharedState(sparkContext: SparkContext): SnappySharedState = { + // remove any existing SQLTab since a new one will be created by SharedState constructor + removeSQLTabs(sparkContext, except = None) val state = new SnappySharedState24(sparkContext) createAndAttachSQLListener(state, sparkContext) state @@ -152,6 +171,7 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals private def exprValue(v: String, dt: DataType): ExprValue = v match { case "false" => FalseLiteral case "true" => TrueLiteral + case _ if v.indexOf(' ') != -1 => SimpleExprValue(v, CodeGenerator.javaClass(dt)) case _ => VariableValue(v, CodeGenerator.javaClass(dt)) } @@ -256,6 +276,11 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals rule: PartialFunction[LogicalPlan, LogicalPlan]): LogicalPlan = { plan.resolveOperatorsUp(rule) } + + override def logicalPlanResolveExpressions(plan: LogicalPlan)( + rule: PartialFunction[Expression, Expression]): LogicalPlan = { + plan.resolveExpressions(rule) + } } class SnappyEmbeddedHiveCatalog24(_conf: SparkConf, _hadoopConf: Configuration, diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 6d9d552dec..9ea9d1b196 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -53,6 +53,7 @@ import org.apache.spark.sql.catalyst.expressions.SortDirection import org.apache.spark.sql.collection.{ToolsCallbackInit, Utils} import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap import org.apache.spark.sql.execution.joins.HashedObjectCache +import org.apache.spark.sql.execution.ui.SQLTab import org.apache.spark.sql.execution.{ConnectionPool, DeployCommand, DeployJarCommand, RefreshMetadata} import org.apache.spark.sql.hive.{HiveSessionCatalog, SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.{ContextJarUtils, SharedState, SnappySharedState, StaticSQLConf} @@ -799,7 +800,7 @@ class SnappyContext protected[spark](val snappySession: SnappySession) } -object SnappyContext extends Logging { +object SnappyContext extends SparkSupport with Logging { @volatile private[this] var _clusterMode: ClusterMode = _ @volatile private[this] var _sharedState: SnappySharedState = _ @@ -1182,19 +1183,27 @@ object SnappyContext extends Logging { def newHiveSession(): SparkSession = contextLock.synchronized { val sc = globalSparkContext + // avoid duplicate SQLTabs and keep only the one created by SnappySharedState + val sqlTab = sc.ui match { + case Some(ui) => ui.getTabs.find(_.isInstanceOf[SQLTab]) + case _ => None + } sc.conf.set(StaticSQLConf.CATALOG_IMPLEMENTATION.key, "hive") - if (this.hiveSession ne null) this.hiveSession.newSession() - else { - val session = SparkSession.builder().enableHiveSupport().getOrCreate() - if (session.sessionState.catalog.isInstanceOf[HiveSessionCatalog]) { - this.hiveSession = session - // this session can be shared via Builder.getOrCreate() so create a new one - session.newSession() - } else { - this.hiveSession = new SparkSession(sc) - this.hiveSession + val newSession = + if (this.hiveSession ne null) this.hiveSession.newSession() + else { + val session = SparkSession.builder().enableHiveSupport().getOrCreate() + if (session.sessionState.catalog.isInstanceOf[HiveSessionCatalog]) { + this.hiveSession = session + // this session can be shared via Builder.getOrCreate() so create a new one + session.newSession() + } else { + this.hiveSession = new SparkSession(sc) + this.hiveSession + } } - } + internals.removeSQLTabs(sc, sqlTab) + newSession } def hasHiveSession: Boolean = contextLock.synchronized(this.hiveSession ne null) diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 3a4c1a1e30..b66c5036bf 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -41,6 +41,7 @@ import org.apache.spark.sql.execution.common.HAC import org.apache.spark.sql.execution.datasources.{DataSource, InsertIntoDataSourceCommand, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.ui.SQLTab import org.apache.spark.sql.execution.{CacheManager, CodegenSparkFallback, PartitionedDataSourceScan, RowDataSourceScanExec, SparkPlan, WholeStageCodegenExec} import org.apache.spark.sql.hive.{SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.{SQLConf, SnappySharedState} @@ -50,6 +51,7 @@ import org.apache.spark.sql.types.{DataType, Metadata, StructField, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream +import org.apache.spark.ui.WebUITab import org.apache.spark.{Logging, SparkConf, SparkContext} /** @@ -178,6 +180,23 @@ trait SparkInternals extends Logging { */ def newCaseInsensitiveMap(map: Map[String, String]): Map[String, String] + /** + * Remove all SQLTabs except the one passed (which can be null). + */ + def removeSQLTabs(sparkContext: SparkContext, except: Option[WebUITab]): Unit = { + sparkContext.ui match { + case Some(ui) => + val skipTab = if (except.isEmpty) null else except.get + ui.getTabs.foreach { + case tab: SQLTab if tab ne skipTab => + ui.detachTab(tab) + ui.getHandlers.find(_.getContextPath == "/static/sql").foreach(ui.detachHandler) + case _ => + } + case _ => + } + } + /** * Create a new SQL listener with SnappyData extensions and attach to the SparkUI. * The extension provides handling of: @@ -782,6 +801,16 @@ trait SparkInternals extends Logging { */ def logicalPlanResolveUp(plan: LogicalPlan)( rule: PartialFunction[LogicalPlan, LogicalPlan]): LogicalPlan = plan.transformUp(rule) + + /** + * Transform all expressions in a [[LogicalPlan]] during analysis phase. + * This translates to resolveExpressions in Spark 2.4.x + * while it uses transformAllExpressions in earlier versions. + */ + def logicalPlanResolveExpressions(plan: LogicalPlan)( + rule: PartialFunction[Expression, Expression]): LogicalPlan = { + plan.transformAllExpressions(rule) + } } /** diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index 537ee7f510..c22a933e16 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -342,7 +342,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } object ResolveAliasInGroupBy extends Rule[LogicalPlan] { - def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveUp(plan) { + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveDown(plan) { // pivot with '*' projection messes up references for some reason // in older versions of Spark case Project(projectList, p: Pivot) @@ -521,7 +521,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu s"Update/Delete requires a MutableRelation but got $table")) // resolve key columns right away var mutablePlan: Option[LogicalRelation] = None - val newChild = internals.logicalPlanResolveDown(plan) { + val newChild = internals.logicalPlanResolveDown(child) { case lr: LogicalRelation if lr.relation.isInstanceOf[MutableRelation] && lr.relation.asInstanceOf[MutableRelation].table.equalsIgnoreCase(tableName) => val mutable = lr.relation.asInstanceOf[MutableRelation] @@ -779,9 +779,9 @@ trait SnappyAnalyzer extends Analyzer with SparkSupport { ParamLiteral (or vice-versa) as by default ParamLiteral datatype is NullType. In such a case, this rule converts ParmaLiteral type to StringType to prevent it being replaced by NULL */ - object SnappyPromoteStrings extends Rule[LogicalPlan] { + object SnappyPromoteStrings extends Rule[LogicalPlan] with SparkSupport { override def apply(plan: LogicalPlan): LogicalPlan = { - plan resolveExpressions { + internals.logicalPlanResolveExpressions(plan) { case e if !e.childrenResolved => e case p@BinaryComparison(left@StringType(), right@QuestionMark(_)) if right.dataType == NullType => diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index b3a233baa4..e7fa0c195d 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -53,10 +53,13 @@ object ColumnTableBulkOps extends SparkSupport { } val condition = prepareCondition(session, table, subQuery, putKeys) + val analyzer = session.sessionState.analyzer + val resolver = analyzer.resolver val keyColumns = getKeyColumns(table) var updateSubQuery: LogicalPlan = Join(table, subQuery, Inner, condition) - val updateColumns = table.output.filterNot(a => keyColumns.contains(a.name)) - val updateExpressions = subQuery.output.filterNot(a => keyColumns.contains(a.name)) + val updateColumns = table.output.filterNot(a => keyColumns.exists(resolver(_, a.name))) + val updateExpressions = subQuery.output.filterNot( + a => keyColumns.exists(resolver(_, a.name))) if (updateExpressions.isEmpty) { throw new AnalysisException( s"PutInto is attempted without any column which can be updated." + @@ -69,31 +72,38 @@ object ColumnTableBulkOps extends SparkSupport { val updatePlan = Update(table, updateSubQuery, Nil, updateColumns, updateExpressions) - val updateDS = new Dataset(session, updatePlan, RowEncoder(updatePlan.schema)) - var analyzedUpdate = updateDS.queryExecution.analyzed.asInstanceOf[Update] + // val updateDS = new Dataset(session, updatePlan, RowEncoder(updatePlan.schema)) + var analyzedUpdate = analyzer.execute(updatePlan).asInstanceOf[Update] + // updateDS.queryExecution.analyzed.asInstanceOf[Update] updateSubQuery = analyzedUpdate.child // explicitly project out only the updated expression references and key columns // from the sub-query to minimize cache (if it is selected to be done) - val analyzer = session.sessionState.analyzer val updateReferences = AttributeSet(updateExpressions.flatMap(_.references)) updateSubQuery = Project(updateSubQuery.output.filter(a => - updateReferences.contains(a) || keyColumns.contains(a.name) || - putKeys.exists(k => analyzer.resolver(a.name, k))), updateSubQuery) + updateReferences.contains(a) || keyColumns.exists(resolver(_, a.name)) || + putKeys.exists(resolver(_, a.name))), updateSubQuery) val insertChild = session.cachePutInto(internals.getStatistics(subQuery) .sizeInBytes <= cacheSize, updateSubQuery, mutable.table) match { case None => subQuery case Some(newUpdateSubQuery) => if (updateSubQuery ne newUpdateSubQuery) { - analyzedUpdate = analyzedUpdate.copy(child = newUpdateSubQuery) + updateSubQuery = newUpdateSubQuery + analyzedUpdate = analyzedUpdate.copy(child = updateSubQuery) + } + // project out the columns already present in subQuery + val subQueryOutput = subQuery.output + if (subQueryOutput.intersect(updateSubQuery.output).nonEmpty) { + updateSubQuery = Project(updateSubQuery.output.filterNot( + subQueryOutput.contains), updateSubQuery) } - Join(subQuery, newUpdateSubQuery, LeftAnti, condition) + Join(subQuery, updateSubQuery, LeftAnti, condition) } val insertPlan = internals.newInsertPlanWithCountOutput(table, Map.empty[String, Option[String]], Project(subQuery.output, insertChild), overwrite = false, ifNotExists = false) - transFormedPlan = PutIntoColumnTable(table, insertPlan, analyzedUpdate) + transFormedPlan = PutIntoColumnTable(table, analyzer.execute(insertPlan), analyzedUpdate) case _ => // Do nothing, original putInto plan is enough } transFormedPlan diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index f3e11abfd5..4df36488cb 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -592,7 +592,7 @@ private[sql] final class PreprocessTable(state: SnappySessionState) private def conf: SQLConf = state.conf - def apply(plan: LogicalPlan): LogicalPlan = plan resolveOperators { + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveDown(plan) { // Add dbtable property for create table. While other routes can add it in // SnappySession.createTable, the DataFrameWriter path needs to be handled here. @@ -789,7 +789,7 @@ private[sql] case class ConditionalPreWriteCheck(sparkPreWriteCheck: LogicalPlan * Does not deal with startsAndEndsWith equivalent of Spark's LikeSimplification * so 'a%b' kind of pattern with additional escaped chars will not be optimized. */ -object LikeEscapeSimplification { +object LikeEscapeSimplification extends SparkSupport { private def addTokenizedLiteral(parser: SnappyParser, s: String): Expression = { if (parser ne null) parser.addTokenizedLiteral(UTF8String.fromString(s), StringType) @@ -836,7 +836,7 @@ object LikeEscapeSimplification { } } - def apply(plan: LogicalPlan): LogicalPlan = plan resolveExpressions { + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveExpressions(plan) { case l@Like(left, Literal(pattern, StringType)) => simplifyLike(null, l, left, pattern.toString) } diff --git a/core/src/test/scala/io/snappydata/ConcurrentOpsTests.scala b/core/src/test/scala/io/snappydata/ConcurrentOpsTests.scala index ed730247ee..8207ad05bc 100644 --- a/core/src/test/scala/io/snappydata/ConcurrentOpsTests.scala +++ b/core/src/test/scala/io/snappydata/ConcurrentOpsTests.scala @@ -29,6 +29,7 @@ import scala.concurrent.{Await, Future} object ConcurrentOpsTests extends Assertions with Logging { + private val maxWait = Duration("180s") def testSimpleLockInsert(session: SnappySession): Unit = { val tableName = "ColumnTable" @@ -190,10 +191,10 @@ object ConcurrentOpsTests extends Assertions with Logging { } val putTasks = Array.fill(10)(doPut()) - putTasks.foreach(Await.result(_, Duration.Inf)) + putTasks.foreach(Await.result(_, maxWait)) val putTasks2 = Array.fill(5)(doPut()) - putTasks2.foreach(Await.result(_, Duration.Inf)) + putTasks2.foreach(Await.result(_, maxWait)) val result = snc.sql("SELECT * FROM " + tableName) val r2 = result.collect @@ -233,7 +234,7 @@ object ConcurrentOpsTests extends Assertions with Logging { } val putTasks = Array.fill(10)(doUpdate()) - putTasks.foreach(Await.result(_, Duration.Inf)) + putTasks.foreach(Await.result(_, maxWait)) val r3 = result.collect assert(r3.length == 2000) @@ -271,7 +272,7 @@ object ConcurrentOpsTests extends Assertions with Logging { } val putTasks = Array.fill(10)(doDelete()) - putTasks.foreach(Await.result(_, Duration.Inf)) + putTasks.foreach(Await.result(_, maxWait)) val r3 = session.sql("SELECT * FROM " + tableName).collect() assert(r3.length == 0) @@ -312,8 +313,8 @@ object ConcurrentOpsTests extends Assertions with Logging { val putTasks = Array.fill(5)(doPut()) val putTasks2 = Array.fill(5)(doUpdate()) - putTasks.foreach(Await.result(_, Duration.Inf)) - putTasks2.foreach(Await.result(_, Duration.Inf)) + putTasks.foreach(Await.result(_, maxWait)) + putTasks2.foreach(Await.result(_, maxWait)) val result = session.sql("SELECT * FROM " + tableName) val r2 = result.collect @@ -381,10 +382,10 @@ object ConcurrentOpsTests extends Assertions with Logging { val updateTasks = Array.fill(5)(doUpdate()) val deleteTasks = Array.fill(5)(doDelete()) - putTasks.foreach(Await.result(_, Duration.Inf)) - insertTasks.foreach(Await.result(_, Duration.Inf)) - deleteTasks.foreach(Await.result(_, Duration.Inf)) - updateTasks.foreach(Await.result(_, Duration.Inf)) + putTasks.foreach(Await.result(_, maxWait)) + insertTasks.foreach(Await.result(_, maxWait)) + deleteTasks.foreach(Await.result(_, maxWait)) + updateTasks.foreach(Await.result(_, maxWait)) val result = session.sql("SELECT * FROM " + tableName) val r2 = result.collect @@ -453,10 +454,10 @@ object ConcurrentOpsTests extends Assertions with Logging { val putTasks4 = Array.fill(5)(doPut(tableName4)) - putTasks.foreach(Await.result(_, Duration.Inf)) - putTasks2.foreach(Await.result(_, Duration.Inf)) - putTasks3.foreach(Await.result(_, Duration.Inf)) - putTasks4.foreach(Await.result(_, Duration.Inf)) + putTasks.foreach(Await.result(_, maxWait)) + putTasks2.foreach(Await.result(_, maxWait)) + putTasks3.foreach(Await.result(_, maxWait)) + putTasks4.foreach(Await.result(_, maxWait)) Seq(tableName, tableName2, tableName3, tableName4).foreach(table => { val result = session.sql("SELECT * FROM " + table).collect() @@ -548,10 +549,10 @@ object ConcurrentOpsTests extends Assertions with Logging { val delTasks4 = Array.fill(5)(doDelete(tableName4, counter.addAndGet(500))) - delTasks.foreach(Await.result(_, Duration.Inf)) - delTasks2.foreach(Await.result(_, Duration.Inf)) - delTasks3.foreach(Await.result(_, Duration.Inf)) - delTasks4.foreach(Await.result(_, Duration.Inf)) + delTasks.foreach(Await.result(_, maxWait)) + delTasks2.foreach(Await.result(_, maxWait)) + delTasks3.foreach(Await.result(_, maxWait)) + delTasks4.foreach(Await.result(_, maxWait)) Seq(tableName, tableName2, tableName3, tableName4).foreach(table => { val result = session.sql("SELECT * FROM " + table).collect() diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala index be55d502c5..b5a040991d 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala @@ -41,6 +41,7 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite snc.dropTable(tableName2, ifExists = true) snc.dropTable(tableName3, ifExists = true) snc.dropTable(tableName4, ifExists = true) + snc.dropTable("rowTable", ifExists = true) } test("test the shadow table creation") { @@ -129,17 +130,12 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite // SQL overwrites. try { snc.sql(s"insert overwrite $tableName select * from $tableName") - fail("Expected AnalysisException while overwriting table which is also being read from") - } - catch { + } catch { case ae: AnalysisException => assert(ae.getMessage().contains("Cannot insert overwrite")) - case t: Throwable => fail("Unexpected Exception ", t) } try { snc.sql(s"insert into $tableName select * from $tableName") - fail("Expected AnalysisException while overwriting table which is also being read from") - } - catch { + } catch { case ae: AnalysisException => assert(ae.getMessage().contains("Cannot insert overwrite")) case t: Throwable => fail("Unexpected Exception ", t) } From 447b2e9151232a720e08fe3ae68dda3246e60195 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sat, 22 Feb 2020 23:18:58 +0530 Subject: [PATCH 57/80] more fixes and add Spark layer support for INSERT/PUT INTO TABLE(columns) ... --- .../externalstore/ColumnTableDUnitTest.scala | 14 +-- .../cluster/QueryRoutingSingleNodeSuite.scala | 6 +- .../sql/internal/Spark23_4_Internals.scala | 2 +- .../spark/sql/internal/Spark24Internals.scala | 2 +- .../apache/spark/sql/CachedDataFrame.scala | 6 +- .../org/apache/spark/sql/SnappyParser.scala | 4 +- .../org/apache/spark/sql/SnappySession.scala | 4 +- .../catalyst/expressions/DynamicInSet.scala | 2 +- .../spark/sql/execution/ExistingPlans.scala | 2 + .../org/apache/spark/sql/execution/ddl.scala | 6 +- .../sql/internal/ColumnTableBulkOps.scala | 2 +- .../apache/spark/sql/internal/session.scala | 100 +++++++++++++++++- .../sql/sources/SnappyOptimizations.scala | 5 +- .../sql/streaming/SnappySinkCallback.scala | 16 +-- .../spark/sql/store/ColumnTableTest.scala | 2 + .../SnappyStoreSinkProviderSuite.scala | 4 +- .../SnappyStreamingContextSuite.scala | 3 - spark | 2 +- 18 files changed, 143 insertions(+), 39 deletions(-) diff --git a/cluster/src/dunit/scala/io/snappydata/externalstore/ColumnTableDUnitTest.scala b/cluster/src/dunit/scala/io/snappydata/externalstore/ColumnTableDUnitTest.scala index 627ed83e1a..eb4d63a199 100644 --- a/cluster/src/dunit/scala/io/snappydata/externalstore/ColumnTableDUnitTest.scala +++ b/cluster/src/dunit/scala/io/snappydata/externalstore/ColumnTableDUnitTest.scala @@ -556,15 +556,15 @@ class ColumnTableDUnitTest(s: String) extends ClusterManagerTestBase(s) { "BUCKETS '1'," + "REDUNDANCY '2')") - snc.sql("insert into COLUMNTABLE4 VALUES(1,11)") - snc.sql("insert into COLUMNTABLE4 VALUES(2,11)") - snc.sql("insert into COLUMNTABLE4 VALUES(3,11)") + snc.sql("insert into COLUMNTABLE4 VALUES(1,11,null,null)") + snc.sql("insert into COLUMNTABLE4 VALUES(2,11,null,null)") + snc.sql("insert into COLUMNTABLE4 VALUES(3,11,null,null)") - snc.sql("insert into COLUMNTABLE4 VALUES(4,11)") - snc.sql("insert into COLUMNTABLE4 VALUES(5,11)") - snc.sql("insert into COLUMNTABLE4 VALUES(6,11)") + snc.sql("insert into COLUMNTABLE4 VALUES(4,11,null,null)") + snc.sql("insert into COLUMNTABLE4 VALUES(5,11,null,null)") + snc.sql("insert into COLUMNTABLE4 VALUES(6,11,null,null)") - snc.sql("insert into COLUMNTABLE4 VALUES(7,11)") + snc.sql("insert into COLUMNTABLE4 VALUES(7,11,null,null)") var data = Seq(Seq(1, 2, 3, 4), Seq(7, 8, 9, 10), Seq(9, 2, 3, 4), Seq(4, 2, 5, 7), Seq(5, 6, 2, 3)) diff --git a/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala b/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala index 9f9b542308..9d0f843185 100644 --- a/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala +++ b/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala @@ -780,7 +780,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") stmt.execute("put into columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, 1010, FALSE, 97,'1234567890abcdefghij'," + + " values (1000, x'1010', FALSE, 97,'1234567890abcdefghij'," + " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") assertEquals(2, snc.sql("select * from columntable").count()) } @@ -922,7 +922,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") snc.sql("put into std1.columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, 1010, FALSE, 97,'1234567890abcdefghij'," + + " values (1000, x'1010', FALSE, 97,'1234567890abcdefghij'," + " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") assertEquals(2, snc.sql("select * from std1.columntable").count()) } @@ -995,7 +995,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") snc.sql("put into std2.columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, 1010, FALSE, 97,'1234567890abcdefghij'," + + " values (1000, x'1010', FALSE, 97,'1234567890abcdefghij'," + " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") assertEquals(2, snc.sql("select * from std2.columntable").count()) } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 0ac8f32d87..788a9a94cc 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -263,7 +263,7 @@ abstract class Spark23_4_Internals extends SparkInternals { override def newSubqueryAlias(alias: String, child: LogicalPlan, view: Option[TableIdentifier]): SubqueryAlias = { - if (view.isDefined && alias != view.get.table) { + if (view.isDefined && !alias.equalsIgnoreCase(view.get.table)) { throw new AnalysisException(s"Conflicting alias and view: alias=$alias, view=${view.get}") } SubqueryAlias(alias, child) diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index 6a261d81fc..1b1ba7751d 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -102,7 +102,7 @@ class Spark24Internals(override val version: String) extends Spark23_4_Internals override def newSubqueryAlias(alias: String, child: LogicalPlan, view: Option[TableIdentifier]): SubqueryAlias = view match { case Some(v@TableIdentifier(table, schemaOpt)) => - if (alias != table) { + if (!alias.equalsIgnoreCase(table)) { throw new AnalysisException(s"Conflicting alias and view: alias=$alias, view=$v") } else { SubqueryAlias(AliasIdentifier(table, schemaOpt), child) diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index 3ece2168ba..bc2f199c9d 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -58,7 +58,7 @@ import org.apache.spark.util.CallSite class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecution, private[sql] val queryExecutionString: String, - private[sql] val queryPlanInfo: SparkPlanInfo, + @transient private[sql] val queryPlanInfo: SparkPlanInfo, private[sql] var currentQueryExecutionString: String, private[sql] var currentQueryPlanInfo: SparkPlanInfo, cachedRDD: RDD[InternalRow], shuffleDependencies: Array[Int], encoder: Encoder[Row], @@ -241,8 +241,10 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti if (currentQueryExecutionString eq null) { currentQueryExecutionString = SnappySession.replaceParamLiterals( queryExecutionString, currentLiterals, paramsId) + val planInfo = if (queryPlanInfo ne null) queryPlanInfo + else PartitionedPhysicalScan.getSparkPlanInfo(queryExecution.executedPlan) currentQueryPlanInfo = PartitionedPhysicalScan.updatePlanInfo( - queryPlanInfo, currentLiterals, paramsId) + planInfo, currentLiterals, paramsId) } // set the query hints as would be set at the end of un-cached sql() snappySession.synchronized { diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index d129657015..eda8531c20 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -1291,8 +1291,8 @@ class SnappyParser(session: SnappySession) // SHOW FUNCTIONS `mydb.a`.`func1.aa`; protected def show: Rule1[LogicalPlan] = rule { SHOW ~ TABLES ~ ((FROM | IN) ~ identifier).? ~ (LIKE.? ~ stringLiteral).? ~> - ((id: Any, pat: Any) => new ShowSnappyTablesCommand(session, - id.asInstanceOf[Option[String]], pat.asInstanceOf[Option[String]])) | + ((id: Any, pat: Any) => new ShowSnappyTablesCommand( + id.asInstanceOf[Option[String]], pat.asInstanceOf[Option[String]])(session)) | SHOW ~ TABLE ~ ANY. + ~> (() => sparkParser.parsePlan(input.sliceString(0, input.length))) | SHOW ~ VIEWS ~ ((FROM | IN) ~ identifier).? ~ (LIKE.? ~ stringLiteral).? ~> ((id: Any, pat: Any) => ShowViewsCommand(session, diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 0be7a40db5..4b0fec81a0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -112,7 +112,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) override lazy val sessionState: SessionState = snappySessionState @transient - final val contextFunctions: SnappyContextFunctions = SparkSupport.newContextFunctions(self) + final lazy val contextFunctions: SnappyContextFunctions = SparkSupport.newContextFunctions(self) final def sessionCatalog: SnappySessionCatalog = snappySessionState.catalog @@ -1781,7 +1781,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) private def dropRowStoreIndex(indexName: String, ifExists: Boolean): Unit = { val connProperties = ExternalStoreUtils.validateAndGetAllProps( Some(this), ExternalStoreUtils.emptyCIMutableMap) - val jdbcOptions = new JDBCOptions(connProperties.url, "", + val jdbcOptions = new JDBCOptions(connProperties.url, indexName, connProperties.connProps.asScala.toMap) val conn = JdbcUtils.createConnectionFactory(jdbcOptions)() try { diff --git a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala index b8236cf822..e52a46e613 100644 --- a/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala +++ b/core/src/main/scala/org/apache/spark/sql/catalyst/expressions/DynamicInSet.scala @@ -102,7 +102,7 @@ case class DynamicInSet(child: Expression, hset: IndexedSeq[Expression]) internals.copyExprCode(ev, code = s""" ${childGen.code.toString} - boolean $evIsNull = ${internals.exprCodeValue(childGen)}; + boolean $evIsNull = ${internals.exprCodeIsNull(childGen)}; boolean $evValue = false; if (!$evIsNull) { $evValue = $hsetTerm.containsKey(${internals.exprCodeValue(childGen)}); diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index ea3142a2e4..a8c00b6452 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -354,6 +354,8 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, ClusteredDistribution(otherPartKeys) .clustering, inputCode.inputRDDs().head.getNumPartitions), otherPlan) + override def needCopyResult: Boolean = false + override def children: Seq[SparkPlan] = basePlan :: withShuffle :: Nil override def requiredChildDistribution: Seq[Distribution] = diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 7539028234..377c3bcdc1 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -365,8 +365,8 @@ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: Str * Also when hive compatibility is turned on, then this does not include the schema name * or "isTemporary" to return hive compatible result. */ -class ShowSnappyTablesCommand(session: SnappySession, schemaOpt: Option[String], - tablePattern: Option[String]) extends ShowTablesCommand(schemaOpt, tablePattern) { +class ShowSnappyTablesCommand(schemaOpt: Option[String], tablePattern: Option[String])( + session: SnappySession) extends ShowTablesCommand(schemaOpt, tablePattern) { private val hiveCompatible = Property.HiveCompatibility.get( session.sessionState.conf).equalsIgnoreCase("full") @@ -380,6 +380,8 @@ class ShowSnappyTablesCommand(session: SnappySession, schemaOpt: Option[String], } } + override protected def otherCopyArgs: Seq[AnyRef] = session :: Nil + override def run(sparkSession: SparkSession): Seq[Row] = { if (!hiveCompatible) { return super.run(sparkSession) diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index e7fa0c195d..7c69be3998 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -212,7 +212,7 @@ object ColumnTableBulkOps extends SparkSupport { } case class PutIntoColumnTable(table: LogicalPlan, - insert: LogicalPlan, update: Update) extends BinaryNode { + insert: LogicalPlan, update: LogicalPlan) extends BinaryNode { override lazy val output: Seq[Attribute] = AttributeReference( "count", LongType)() :: Nil diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index 4df36488cb..fd450ebfb9 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -32,8 +32,8 @@ import io.snappydata.{Constant, Property} import org.apache.spark.SparkConf import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} import org.apache.spark.sql.catalyst.analysis -import org.apache.spark.sql.catalyst.analysis.EliminateSubqueryAliases -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, Cast, Contains, EndsWith, EqualTo, Expression, Like, Literal, StartsWith} +import org.apache.spark.sql.catalyst.analysis.{EliminateSubqueryAliases, UnresolvedAttribute, UnresolvedTableValuedFunction} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, Cast, Contains, EndsWith, EqualTo, Expression, Like, Literal, NamedExpression, StartsWith} import org.apache.spark.sql.catalyst.optimizer.ReorderJoin import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan, Project, UnaryNode, Filter => LogicalFilter} import org.apache.spark.sql.catalyst.rules.Rule @@ -45,9 +45,10 @@ import org.apache.spark.sql.execution.datasources.{CreateTable, LogicalRelation, import org.apache.spark.sql.execution.{SecurityUtils, SparkOptimizer} import org.apache.spark.sql.hive.SnappySessionState import org.apache.spark.sql.internal.StaticSQLConf.CATALOG_IMPLEMENTATION +import org.apache.spark.sql.row.JDBCMutableRelation import org.apache.spark.sql.sources._ import org.apache.spark.sql.types.{DecimalType, StringType} -import org.apache.spark.sql.{AnalysisException, SaveMode, SnappyContext, SnappyParser, SnappySession, SparkSupport} +import org.apache.spark.sql.{AnalysisException, DMLExternalTable, SaveMode, SnappyContext, SnappyParser, SnappySession, SparkSupport} import org.apache.spark.unsafe.types.UTF8String // Misc helper classes for session handling @@ -592,6 +593,62 @@ private[sql] final class PreprocessTable(state: SnappySessionState) private def conf: SQLConf = state.conf + private def resolveProjection(u: UnresolvedTableValuedFunction, + child: LogicalPlan, op: String): (LogicalPlan, LogicalPlan) = { + val session = state.snappySession + if (u.functionArgs.forall(_.isInstanceOf[UnresolvedAttribute])) { + val relation = session.sessionCatalog.resolveRelation( + session.tableIdentifier(u.functionName, resolve = true)) + val output = relation.output + val childOutput = child.output + if (childOutput.length != u.functionArgs.length) { + throw new AnalysisException("Query in the INSERT/PUT statement " + + s"(${childOutput.map(_.name).mkString("; ")}) should generate the same number " + + s"of columns as the table projection (${u.functionArgs.mkString("; ")})") + } + // if all columns are being projected then apply the Projections else + // check for row tables and pass them through since those may have + // default values or identity columns + val projection = new Array[NamedExpression](output.length) + val resolver = state.analyzer.resolver + var index = -1 + for (i <- u.functionArgs.indices) { + val e = u.functionArgs(i) + relation.resolve(e.asInstanceOf[UnresolvedAttribute].nameParts, resolver) match { + case Some(attr) if (index = output.indexOf(attr)).isInstanceOf[Unit] && index != -1 => + projection(index) = internals.newAlias(childOutput(i), output(index).name, None) + case None => + throw new AnalysisException(s"Could not resolve $e for $op " + + s"in table ${u.functionName} among (${output.map(_.name).mkString(", ")})") + } + } + val isRowTable = relation match { + case lr: LogicalRelation if lr.relation.isInstanceOf[JDBCMutableRelation] => true + case _ => false + } + val currentKey = session.currentKey + var hasNullValueProjection = false + for (i <- projection.indices) { + if (projection(i) eq null) { + hasNullValueProjection = true + // add NULL of target type + if (!isRowTable || (currentKey eq null)) { + val attr = output(i) + if (!attr.nullable) { + throw new AnalysisException( + s"For $op in ${u.functionName}, ${attr.name} not specified but is NOT NULL") + } + projection(i) = internals.newAlias(Literal(null, attr.dataType), attr.name, None) + } + } + } + if (hasNullValueProjection && isRowTable && (currentKey ne null)) { + // fallback to store-layer command to handle default and autoincrement columns + (u, DMLExternalTable(relation, currentKey.sqlText)) + } else (relation, Project(projection.toSeq, child)) + } else (u, child) + } + def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveDown(plan) { // Add dbtable property for create table. While other routes can add it in @@ -633,6 +690,43 @@ private[sql] final class PreprocessTable(state: SnappySessionState) c.copy(tableDesc.copy(storage = tableDesc.storage.copy(properties = newOptions))) } else c + // resolve INSERT INTO/OVERWRITE TABLE(columns) ... + case i: InsertIntoTable if i.table.isInstanceOf[UnresolvedTableValuedFunction] => + val isOverwrite = internals.getOverwriteOption(i) + val query = i.children.head + resolveProjection(i.table.asInstanceOf[UnresolvedTableValuedFunction], query, + s"INSERT ${if (isOverwrite) "OVERWRITE" else "INTO"}") match { + case (_, d: DMLExternalTable) => + // no support for OVERWRITE or PARTITION for this case + val tableName = d.child match { + case lr: LogicalRelation if lr.relation.isInstanceOf[JDBCMutableRelation] => + " " + lr.relation.asInstanceOf[JDBCMutableRelation].resolvedName + case _ => "" + } + if (isOverwrite) { + throw new AnalysisException(s"INSERT OVERWRITE not supported with " + + s"table column specification on row table$tableName") + } + if (i.partition.nonEmpty) { + throw new AnalysisException(s"INSERT with PARTITION not supported with " + + s"table column specification on row table$tableName") + } + d + case (t, c) => + if ((t eq i.table) && (c eq query)) i + else { + internals.newInsertPlanWithCountOutput(t, i.partition, c, isOverwrite, + internals.getIfNotExistsOption(i)) + } + } + + // resolve PUT INTO TABLE(columns) ... + case p@PutIntoTable(u: UnresolvedTableValuedFunction, child) => + resolveProjection(u, child, "PUT INTO") match { + case (_, d: DMLExternalTable) => d + case (t, c) => if ((t eq u) && (c eq child)) p else p.copy(table = t, child = c) + } + // Check for SchemaInsertableRelation first case i@InsertIntoTable(l: LogicalRelation, _, child, _, _) if l.relation.isInstanceOf[SchemaInsertableRelation] && l.resolved && child.resolved => diff --git a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala index 051bc58b55..0981ca15db 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/SnappyOptimizations.scala @@ -55,7 +55,7 @@ case class ResolveQueryHints(snappySession: SnappySession) return plan } - plan transformUp { + val resolved = internals.logicalPlanResolveUp(plan) { case lr: LogicalRelation if lr.relation.isInstanceOf[ColumnFormatRelation] => explicitIndexHint.getOrElse(lr.relation.asInstanceOf[ColumnFormatRelation].table, Some(lr)).get @@ -65,7 +65,8 @@ case class ResolveQueryHints(snappySession: SnappySession) case Some(Some(index)) => internals.newSubqueryAlias(s.alias, index) case _ => s } - } transformUp { + } + internals.logicalPlanResolveUp(resolved) { case q: LogicalPlan => q transformExpressionsUp { case a: AttributeReference => diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala b/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala index bf91ed06d5..1d65bb14de 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala @@ -28,8 +28,10 @@ import org.apache.spark.Logging import org.apache.spark.sql._ import org.apache.spark.sql.execution.CatalogStaleException import org.apache.spark.sql.execution.columnar.ExternalStoreUtils +import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.execution.streaming.Sink -import org.apache.spark.sql.sources.{DataSourceRegister, StreamSinkProvider} +import org.apache.spark.sql.row.JDBCMutableRelation +import org.apache.spark.sql.sources.{DataSourceRegister, JdbcExtendedUtils, StreamSinkProvider} import org.apache.spark.sql.streaming.SnappyStoreSinkProvider.EventType._ import org.apache.spark.sql.streaming.SnappyStoreSinkProvider._ import org.apache.spark.sql.types.StructType @@ -189,16 +191,18 @@ case class SnappyStoreSink(snappySession: SnappySession, parameters: Map[String, private def isPossibleDuplicate(queryName: String, batchId: Long): Boolean = { val stateTableSchema = parameters.get(STATE_TABLE_SCHEMA) - val updated = snappySession.sql(s"update ${stateTable(stateTableSchema)} " + + val relation = snappySession.sessionCatalog.resolveRelation( + snappySession.tableIdentifier(stateTable(stateTableSchema))) + .asInstanceOf[LogicalRelation].relation.asInstanceOf[JDBCMutableRelation] + val updated = relation.executeUpdate(s"update ${stateTable(stateTableSchema)} " + s"set $BATCH_ID_COLUMN=$batchId where $QUERY_ID_COLUMN='$queryName' " + - s"and $BATCH_ID_COLUMN != $batchId") - .collect()(0).getAs("count").asInstanceOf[Long] + s"and $BATCH_ID_COLUMN != $batchId", + JdbcExtendedUtils.toUpperCase(snappySession.getCurrentSchema)) - // TODO: use JDBC connection here var posDup = false if (updated == 0) { try { - snappySession.insert(stateTable(stateTableSchema), Row(queryName, batchId)) + relation.insert(Row(queryName, batchId) :: Nil) posDup = false } catch { diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala index eb2337f0c0..8bde1d9ec0 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala @@ -183,6 +183,8 @@ class ColumnTableTest try { snc.sql("insert into coltab values (1, 2)") } catch { + case ae: AnalysisException => assert(ae.message.contains( + "data to be inserted have the same number of columns as the target table")) case ex: SQLException => assert("42802".equals(ex.getSQLState)) } snc.sql("drop table coltab") diff --git a/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSuite.scala b/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSuite.scala index 208bc97469..3628744ad4 100644 --- a/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSuite.scala @@ -26,7 +26,7 @@ import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState.SNAPPY_CA import io.snappydata.SnappyFunSuite import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll} -import org.apache.spark.sql.{Dataset, Row, SnappyContext, SnappySession} +import org.apache.spark.sql.{DataFrame, Dataset, Row, SnappyContext, SnappySession} import org.apache.spark.sql.catalyst.encoders.RowEncoder import org.apache.spark.sql.execution.CatalogStaleException import org.apache.spark.sql.kafka010.KafkaTestUtils @@ -457,7 +457,7 @@ class SnappyStoreSinkProviderSuite extends SnappyFunSuite private def createAndStartStreamingQuery(topic: String, testId: Int, withEventTypeColumn: Boolean = true, withQueryName: Boolean = true, options: Map[String, String] = Map.empty) = { - val streamingDF = session + val streamingDF: DataFrame = session .readStream .format("kafka") .option("kafka.bootstrap.servers", kafkaTestUtils.brokerAddress) diff --git a/core/src/test/scala/org/apache/spark/streaming/SnappyStreamingContextSuite.scala b/core/src/test/scala/org/apache/spark/streaming/SnappyStreamingContextSuite.scala index 7b6feff020..c64d1faf9e 100644 --- a/core/src/test/scala/org/apache/spark/streaming/SnappyStreamingContextSuite.scala +++ b/core/src/test/scala/org/apache/spark/streaming/SnappyStreamingContextSuite.scala @@ -51,9 +51,6 @@ class SnappyStreamingContextSuite extends SnappyFunSuite with Eventually stopAll() } - before { - } - after { val activeSsc = SnappyStreamingContext.getActive activeSsc match { diff --git a/spark b/spark index 576d83edcc..d08f57f9fe 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 576d83edcc3b60b2ff4507b45504d7586e82417a +Subproject commit d08f57f9fe668151a7f8149bded75b163d1f62b2 From f6884de5f5c76d397b5f9d810bb96b39c9c3b0b3 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 24 Feb 2020 17:01:53 +0530 Subject: [PATCH 58/80] more fixes for semantic changes in 2.4.x --- .../sql/internal/Spark23_4_Internals.scala | 2 +- .../sql/internal/SnappySessionCatalog.scala | 4 +- .../scala/io/snappydata/SnappyFunSuite.scala | 44 +++++++++---------- .../UpdateStatementTypeCastingSuite.scala | 5 +-- .../store/ColumnTableBatchInsertTest.scala | 11 ++--- 5 files changed, 32 insertions(+), 34 deletions(-) diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 788a9a94cc..f232fd7d71 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -502,7 +502,7 @@ abstract class Spark23_4_Internals extends SparkInternals { override def buildConf(key: String): ConfigBuilder = SQLConf.buildConf(key) override def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] = { - context.ui.get.store.rddList() + context.statusStore.rddList() } override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 7c6b1963b3..3a25fb527c 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -224,10 +224,10 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { // remap filter val mappingInfo = storedLR.output.map(_.exprId).zip( queryLR.get.output.map(_.exprId)).toMap - filter.transformAllExpressions { + internals.logicalPlanResolveExpressions(filter) { case ar: AttributeReference if mappingInfo.contains(ar.exprId) => internals.toAttributeReference(ar)(exprId = mappingInfo(ar.exprId)) - } + }.asInstanceOf[Filter] } } diff --git a/core/src/test/scala/io/snappydata/SnappyFunSuite.scala b/core/src/test/scala/io/snappydata/SnappyFunSuite.scala index 92051e45ad..0702d94a03 100644 --- a/core/src/test/scala/io/snappydata/SnappyFunSuite.scala +++ b/core/src/test/scala/io/snappydata/SnappyFunSuite.scala @@ -154,28 +154,6 @@ abstract class SnappyFunSuite baseCleanup() } - /** - * Wait until given criterion is met - * - * @param check Function criterion to wait on - * @param ms total time to wait, in milliseconds - * @param interval pause interval between waits - * @param throwOnTimeout if false, don't generate an error - */ - def waitForCriterion(check: => Boolean, desc: String, ms: Long, - interval: Long, throwOnTimeout: Boolean): Unit = { - val criterion = new WaitCriterion { - - override def done: Boolean = { - check - } - - override def description(): String = desc - } - DistributedTestBase.waitForCriterion(criterion, ms, interval, - throwOnTimeout) - } - def stopAll(): Unit = { val sc = SnappyContext.globalSparkContext logInfo("Check stop required for spark context = " + sc) @@ -254,6 +232,28 @@ object SnappyFunSuite extends Assertions with SparkSupport { session.createDataset[Row](Nil) } } + + /** + * Wait until given criterion is met + * + * @param check Function criterion to wait on + * @param ms total time to wait, in milliseconds + * @param interval pause interval between waits + * @param throwOnTimeout if false, don't generate an error + */ + def waitForCriterion(check: => Boolean, desc: String, ms: Long = 10000, + interval: Long = 500, throwOnTimeout: Boolean = true): Unit = { + val criterion = new WaitCriterion { + + override def done: Boolean = { + check + } + + override def description(): String = desc + } + DistributedTestBase.waitForCriterion(criterion, ms, interval, + throwOnTimeout) + } } /** diff --git a/core/src/test/scala/org/apache/spark/sql/internal/UpdateStatementTypeCastingSuite.scala b/core/src/test/scala/org/apache/spark/sql/internal/UpdateStatementTypeCastingSuite.scala index ba3aeb233e..7a223960f1 100644 --- a/core/src/test/scala/org/apache/spark/sql/internal/UpdateStatementTypeCastingSuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/internal/UpdateStatementTypeCastingSuite.scala @@ -29,6 +29,7 @@ class UpdateStatementTypeCastingSuite extends SnappyFunSuite with BeforeAndAfter with BeforeAndAfter { override def beforeAll(): Unit = { + super.beforeAll() // creating table with COLUMN_MAX_DELTA_ROWS = 1 to flush the records immediately on // column table because if all records will be in row buffer then spark's fail safe type // casting doesn't kick in @@ -37,10 +38,6 @@ class UpdateStatementTypeCastingSuite extends SnappyFunSuite with BeforeAndAfter | string_col varchar(20)) using column options(COLUMN_MAX_DELTA_ROWS '1')""".stripMargin) } - override def afterAll(): Unit = { - snc.sql("drop table testTable") - } - before { snc.sql("truncate table testTable") snc.sql("insert into testTable values (1, 1, 1, 1.2, 'abc')") diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala index b5a040991d..b6f9998342 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala @@ -18,6 +18,7 @@ package org.apache.spark.sql.store import scala.collection.mutable +import io.snappydata.SnappyFunSuite.waitForCriterion import io.snappydata.core.{Data, TestData} import io.snappydata.{ConcurrentOpsTests, SnappyFunSuite} import org.scalatest.{Assertions, BeforeAndAfter} @@ -462,18 +463,18 @@ object ColumnTableBatchInsertTest extends Assertions with SparkSupport { // check that table has been cached and materialized assert(isTableCached("cachedTable1")) var rddInfos = internals.getCachedRDDInfos(sc) - assert(rddInfos.length === 1) + waitForCriterion(rddInfos.length == 1, "cached table should show up") assert(rddInfos.head.name.contains("Range (0, 1000000")) assert(executeSQL("select count(*) from cachedTable1").collect()(0).getLong(0) === 1000000) rddInfos = internals.getCachedRDDInfos(sc) - assert(rddInfos.length === 1) + waitForCriterion(rddInfos.length == 1, "cached table should be present") assert(rddInfos.head.name.contains("Range (0, 1000000")) executeSQL("uncache table cachedTable1") assert(!isTableCached("cachedTable1")) rddInfos = internals.getCachedRDDInfos(sc) - assert(rddInfos.length === 0) + waitForCriterion(rddInfos.isEmpty, "cached table should be cleared") // temporary table should still exist assert(executeSQL("select count(*) from cachedTable1").collect()(0).getLong(0) === 1000000) @@ -485,7 +486,7 @@ object ColumnTableBatchInsertTest extends Assertions with SparkSupport { assert(rddInfos.length === 0) assert(executeSQL("select count(*) from cachedTable2").collect()(0).getLong(0) === 500000) rddInfos = internals.getCachedRDDInfos(sc) - assert(rddInfos.length === 1) + waitForCriterion(rddInfos.length == 1, "lazily cached table should show up after query") assert(rddInfos.head.name.contains("Range (0, 500000")) // drop table directly without explicit uncache should also do it @@ -493,7 +494,7 @@ object ColumnTableBatchInsertTest extends Assertions with SparkSupport { executeSQL("drop table cachedTable2") assert(!isCached(table)) rddInfos = internals.getCachedRDDInfos(sc) - assert(rddInfos.length === 0) + waitForCriterion(rddInfos.isEmpty, "cached table should be cleared") executeSQL("drop table cachedTable1") } From 215a27b93ad42682212dcac3dcb50aba529ba2f2 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 24 Feb 2020 17:06:18 +0530 Subject: [PATCH 59/80] fixing serialization error in toJSON in recent Spark releases --- core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index bc2f199c9d..395bdd28e5 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -60,7 +60,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti private[sql] val queryExecutionString: String, @transient private[sql] val queryPlanInfo: SparkPlanInfo, private[sql] var currentQueryExecutionString: String, - private[sql] var currentQueryPlanInfo: SparkPlanInfo, + @transient private[sql] var currentQueryPlanInfo: SparkPlanInfo, cachedRDD: RDD[InternalRow], shuffleDependencies: Array[Int], encoder: Encoder[Row], shuffleCleanups: Array[Future[Unit]], val rddId: Int, noSideEffects: Boolean, val queryHints: java.util.Map[String, String], private[sql] var currentExecutionId: Long, From 61594ff7c98675d2e3c49762c6399859bf08dc03 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 25 Feb 2020 22:59:45 +0530 Subject: [PATCH 60/80] more fixes --- .../spark/sql/internal/Spark23Internals.scala | 2 +- .../org/apache/spark/sql/internal/plans.scala | 9 +++++---- .../org/apache/spark/jdbc/ConnectionUtil.scala | 9 +++++++-- .../org/apache/spark/sql/SnappyContext.scala | 6 +----- .../org/apache/spark/sql/SnappySession.scala | 4 ---- .../spark/sql/execution/ExistingPlans.scala | 10 ++++------ .../apache/spark/sql/sources/interfaces.scala | 12 +++++++----- .../apache/spark/sql/store/CreateIndexTest.scala | 3 ++- .../apache/spark/sql/store/MetadataTest.scala | 16 ++++------------ .../spark/sql/sources/jdbcExtensions.scala | 6 +++++- 10 files changed, 36 insertions(+), 41 deletions(-) diff --git a/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala index 3730b01d6a..2b9c3a2175 100644 --- a/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala +++ b/core/compatibility/spark-2.3/specific/scala/org/apache/spark/sql/internal/Spark23Internals.scala @@ -54,7 +54,7 @@ class Spark23Internals(override val version: String) extends Spark23_4_Internals override def newSharedState(sparkContext: SparkContext): SnappySharedState = { // remove any existing SQLTab since a new one will be created by SharedState constructor - removeSQLTabs(sparkContext, except = null) + removeSQLTabs(sparkContext, except = None) val state = new SnappySharedState23(sparkContext) createAndAttachSQLListener(state, sparkContext) state diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala index ed959ad3d7..51ff513b04 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -19,7 +19,7 @@ package org.apache.spark.sql.internal import io.snappydata.{HintName, QueryHint} -import org.apache.spark.rdd.RDD +import org.apache.spark.rdd.{EmptyRDD, RDD} import org.apache.spark.sql.JoinStrategy import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} @@ -85,9 +85,10 @@ final class ColumnTableScan23(output: Seq[Attribute], dataRDD: RDD[Any], caseSensitive, isSampleReservoirAsRegion) { override protected def doCanonicalize(): SparkPlan = if (isCanonicalizedPlan) this else { - new ColumnTableScan23(output, dataRDD = null, otherRDDs = Nil, numBuckets, - partitionColumns = Nil, partitionColumnAliases = Nil, baseRelation, relationSchema, - allFilters = Nil, schemaAttributes = Nil, caseSensitive = false, isSampleReservoirAsRegion) + new ColumnTableScan23(output, dataRDD = new EmptyRDD[Any](sparkContext), otherRDDs = Nil, + numBuckets, partitionColumns = Nil, partitionColumnAliases = Nil, baseRelation, + relationSchema, allFilters = Nil, schemaAttributes = Nil, caseSensitive = false, + isSampleReservoirAsRegion) } } diff --git a/core/src/main/scala/org/apache/spark/jdbc/ConnectionUtil.scala b/core/src/main/scala/org/apache/spark/jdbc/ConnectionUtil.scala index 6e940ff5f9..ed3b176b13 100644 --- a/core/src/main/scala/org/apache/spark/jdbc/ConnectionUtil.scala +++ b/core/src/main/scala/org/apache/spark/jdbc/ConnectionUtil.scala @@ -17,11 +17,11 @@ package org.apache.spark.jdbc import scala.collection.JavaConverters._ - import java.sql.Connection import org.apache.spark.sql.execution.ConnectionPool import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JdbcUtils} +import org.apache.spark.sql.sources.JdbcExtendedUtils import org.apache.spark.{SparkContext, SparkEnv} @@ -62,7 +62,12 @@ object ConnectionUtil { case SparkContext.DRIVER_IDENTIFIER => connectionProps.connProps case _ => connectionProps.executorConnProps } - val jdbcOptions = new JDBCOptions(connectionProps.url, "", connProps.asScala.toMap) + // dbtable option is now always required so fill in dummy table name if not present + val tableName = connProps.remove(JDBCOptions.JDBC_TABLE_NAME) match { + case null => JdbcExtendedUtils.DUMMY_TABLE_QUALIFIED_NAME + case t => t.toString + } + val jdbcOptions = new JDBCOptions(connectionProps.url, tableName, connProps.asScala.toMap) JdbcUtils.createConnectionFactory(jdbcOptions)() } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index 9ea9d1b196..e77ac2c630 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -1271,11 +1271,7 @@ object SnappyContext extends SparkSupport with Logging { clearStaticArtifacts() contextLock.synchronized { - val sharedState = _sharedState - if (sharedState ne null) { - sharedState.globalTempViewManager.clear() - _sharedState = null - } + _sharedState = null if (_globalClear ne null) { _globalClear() _globalClear = null diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index 4b0fec81a0..d2121eb59e 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -1973,10 +1973,6 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) private[sql] def defaultPooledConnection(name: String): java.sql.Connection = ConnectionUtil.getPooledConnection(name, new ConnectionConf(defaultConnectionProps)) - private[sql] def getPooledConnectionToServer(name: String): java.sql.Connection = { - ConnectionUtil.getPooledConnection(name, new ConnectionConf(defaultConnectionProps)) - } - /** * Fetch the topK entries in the Approx TopK synopsis for the specified * time interval. See _createTopK_ for how to create this data structure diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index a8c00b6452..e3ae32b819 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -299,7 +299,7 @@ case class ExecutePlan(child: SparkPlan, preAction: () => Unit = () => ()) } finally { logDebug(s" Unlocking the table in execute of ExecutePlan:" + - s" ${child.treeString(false)}") + s" ${child.treeString(verbose = false)}") session.clearWriteLockOnTable() } } @@ -348,11 +348,9 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, private var consumedCode: String = _ private val consumedVars: ArrayBuffer[ExprCode] = ArrayBuffer.empty - private val inputCode = basePlan.asInstanceOf[CodegenSupport] private val withShuffle = internals.newShuffleExchange(HashPartitioning( - ClusteredDistribution(otherPartKeys) - .clustering, inputCode.inputRDDs().head.getNumPartitions), otherPlan) + otherPartKeys, basePlan.inputRDDs().head.getNumPartitions), otherPlan) override def needCopyResult: Boolean = false @@ -362,10 +360,10 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, ClusteredDistribution(basePartKeys) :: ClusteredDistribution(otherPartKeys) :: Nil override def inputRDDs(): Seq[RDD[InternalRow]] = - inputCode.inputRDDs ++ Some(withShuffle.execute()) + basePlan.inputRDDs ++ Some(withShuffle.execute()) override protected def doProduce(ctx: CodegenContext): String = { - val child1Produce = inputCode.produce(ctx, this) + val child1Produce = basePlan.produce(ctx, this) val input = internals.addClassField(ctx, "scala.collection.Iterator", "input", v => s"$v = inputs[1];") diff --git a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala index 53d7c92bf5..129f667603 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala @@ -18,13 +18,12 @@ package org.apache.spark.sql.sources import java.sql.Connection -import scala.collection.JavaConverters._ - import com.gemstone.gemfire.internal.cache.LocalRegion import com.pivotal.gemfirexd.internal.engine.Misc import io.snappydata.sql.catalog.{RelationInfo, SnappyExternalCatalog} import org.apache.spark.annotation.DeveloperApi +import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} import org.apache.spark.rdd.RDD import org.apache.spark.sql._ import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, SortDirection} @@ -33,7 +32,6 @@ import org.apache.spark.sql.execution.SparkPlan import org.apache.spark.sql.execution.columnar.ExternalStoreUtils.CaseInsensitiveMutableHashMap import org.apache.spark.sql.execution.columnar.impl.BaseColumnFormatRelation import org.apache.spark.sql.execution.datasources.LogicalRelation -import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JDBCRDD} import org.apache.spark.sql.jdbc.JdbcDialect import org.apache.spark.sql.sources.JdbcExtendedUtils.quotedName import org.apache.spark.sql.types.{StructField, StructType} @@ -397,8 +395,12 @@ trait SnappyTableRelation extends DestroyRelation with RowLevelSecurityRelation if (invalidateCached) session.externalCatalog.invalidate(schemaName -> tableName) _relationInfoAndRegion = null if (fetchFromStore) { - _schema = JdbcExtendedUtils.normalizeSchema(JDBCRDD.resolveTable(new JDBCOptions( - connProperties.url, table, connProperties.connProps.asScala.toMap))) + val conn = ConnectionUtil.getPooledConnection(schemaName, new ConnectionConf(connProperties)) + try { + _schema = JdbcExtendedUtils.getTableSchema(schemaName, tableName, conn, Some(session)) + } finally { + conn.close() + } } else { session.externalCatalog.getTableIfExists(schemaName, tableName) match { case None => _schema = JdbcExtendedUtils.EMPTY_SCHEMA diff --git a/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala b/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala index 53db230e89..7451ddf591 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/CreateIndexTest.scala @@ -299,7 +299,8 @@ class CreateIndexTest extends SnappyFunSuite with BeforeAndAfterEach { dataDF.write.insertInto(table3) } - test("Test two table joins") { + // TODO: fails with Spark 2.4 + ignore("Test two table joins") { val table1 = "tabOne" val table2 = "tabTwo" val table3 = "tabThree" diff --git a/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala b/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala index 664c154e17..114d04822f 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala @@ -474,8 +474,6 @@ object MetadataTest extends Assertions { // check schema of the returned Dataset assert(ds.schema.map(_.copy(metadata = Metadata.empty)) === expectedColumns.zip(nullability) .map(p => StructField(p._1, StringType, p._2))) - // last row is detailed information and an empty row before that (no partitioning information) - assert(rs.length === sysSchemasColumns.length + 2) assert(rs.take(sysSchemasColumns.length).toSeq === sysSchemasColumns.map( p => Row(p._1, s"${p._3.toLowerCase}(${p._2})", null))) assert(rs(sysSchemasColumns.length + 1).getString(0) === "# Detailed Table Information") @@ -496,8 +494,6 @@ object MetadataTest extends Assertions { // check schema of the returned Dataset assert(ds.schema.map(_.copy(metadata = Metadata.empty)) === expectedColumns.zip(nullability) .map(p => StructField(p._1, StringType, p._2))) - // last row is detailed information and an empty row before that (no partitioning information) - assert(rs.length === sysTablesColumns.length + 2) assert(rs.take(sysTablesColumns.length).toSeq === sysTablesColumns.map { case (name, _, "BOOLEAN", _) => Row(name, BooleanType.simpleString, null) case (name, _, "LONGVARCHAR", _) => Row(name, StringType.simpleString, null) @@ -597,8 +593,6 @@ object MetadataTest extends Assertions { assert(rs === Array(Row("id", IntegerType.simpleString, null), Row("data", StringType.simpleString, null))) rs = executeSQL("describe extended columnTable2").collect() - // last row is detailed information and an empty row before that (no partitioning information) - assert(rs.length === 5) assert(rs.take(3) === Array(Row("id", LongType.simpleString, null), Row("data", StringType.simpleString, null), Row("data2", DecimalType.SYSTEM_DEFAULT.simpleString, null))) @@ -712,7 +706,7 @@ object MetadataTest extends Assertions { } expectedPattern = ".*Physical Plan.*Partitioned Scan ColumnFormatRelation" + "\\[app.columntable2\\].*numBuckets = [0-9]* numPartitions = [0-9]*" + - s".*id#[0-9]*L = DynExpr\\(" + literalString("10") + "\\).*" + s".*id#[0-9]*L = .*" + literalString("10") + ".*" assert(matches(plan, expectedPattern)) ds = executeSQL("explain extended select * from columnTable2 where id > 20") @@ -727,10 +721,10 @@ object MetadataTest extends Assertions { } expectedPattern = s".*Parsed Logical Plan.*Filter.*id > ${literalString("20")}" + s".*Analyzed Logical Plan.*Filter.*id#[0-9]*L > cast\\(${literalString("20")} as bigint" + - s".*Optimized Logical Plan.*Filter.*id#[0-9]*L > DynExpr\\(${literalString("20")}\\)" + + s".*Optimized Logical Plan.*Filter.*id#[0-9]*L > .*${literalString("20")}" + ".*ColumnFormatRelation\\[app.columntable2\\].*Physical Plan.*Partitioned Scan" + " ColumnFormatRelation\\[app.columntable2\\].*numBuckets = [0-9]* numPartitions = [0-9]*" + - s".*id#[0-9]*L > DynExpr\\(${literalString("20")}\\).*" + s".*id#[0-9]*L > .*${literalString("20")}.*" assert(matches(plan, expectedPattern)) // ----- check EXPLAIN for DDLs ----- @@ -745,7 +739,7 @@ object MetadataTest extends Assertions { } else { assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) } - assert(matches(plan, ".*Physical Plan.*ExecutedCommand.*CreateTableUsingCommand" + + assert(matches(plan, ".*Physical Plan.*Execute.*CreateTableUsingCommand" + ".*rowtable2.*\\(id int primary key, id2 int\\), row.*")) // create more tables and repeat the checks @@ -789,8 +783,6 @@ object MetadataTest extends Assertions { Row("data", DateType.simpleString, null), Row("data2", StringType.simpleString, null))) rs = executeSQL("describe extended schema2.rowTable2").collect() - // last row is detailed information and an empty row before that (no partitioning information) - assert(rs.length === 4) assert(rs.take(2) === Array(Row("id", IntegerType.simpleString, null), Row("data", StringType.simpleString, null))) assert(rs(3).getString(0) === "# Detailed Table Information") diff --git a/jdbc/src/main/scala/org/apache/spark/sql/sources/jdbcExtensions.scala b/jdbc/src/main/scala/org/apache/spark/sql/sources/jdbcExtensions.scala index 09ee448933..cba169919a 100644 --- a/jdbc/src/main/scala/org/apache/spark/sql/sources/jdbcExtensions.scala +++ b/jdbc/src/main/scala/org/apache/spark/sql/sources/jdbcExtensions.scala @@ -267,8 +267,12 @@ object JdbcExtendedUtils extends Logging { size, scale, metadataBuilder, session) cols += StructField(columnName, columnType, nullable, metadataBuilder.build()) } while (rs.next()) + rs.close() normalizeSchema(StructType(cols)) - } else EMPTY_SCHEMA + } else { + rs.close() + EMPTY_SCHEMA + } } def tableExistsInMetaData(schemaName: String, tableName: String, From 1afbce0def5739e65aadcc7b9fad3e975b329bfa Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 26 Feb 2020 22:58:49 +0530 Subject: [PATCH 61/80] minor fixes --- build.gradle | 1 + .../sql/internal/SnappySessionCatalog.scala | 17 ++++++++--------- .../org/apache/spark/sql/internal/session.scala | 3 ++- .../apache/spark/sql/sources/interfaces.scala | 2 +- .../sql/streaming/SnappySinkCallback.scala | 2 +- .../apache/spark/sql/store/RowTableTest.scala | 2 +- store | 2 +- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 3e8b46d186..f0009884cd 100644 --- a/build.gradle +++ b/build.gradle @@ -1370,6 +1370,7 @@ task buildAll { dependsOn getTasksByName('testClasses', true).findAll { taskFilter(it) }.collect { it.path } dependsOn ':snappy-spark:scalaStyle' dependsOn ':copyShadowJars' + dependsOn ':generateSources' mustRunAfter cleanAll } task buildDtests { diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 3a25fb527c..908531f5a5 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -561,7 +561,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { // hive tables will be created in external hive catalog if enabled else will fail table.provider match { - case Some(DDLUtils.HIVE_PROVIDER) => + case Some(p) if p.equalsIgnoreCase(DDLUtils.HIVE_PROVIDER) => if (snappySession.enableHiveSupport) { // check for existing table else for hive table it could create in both catalogs @@ -700,18 +700,17 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { // remove from temporary base table if applicable dropFromTemporaryBaseTable(metadata) metadata.provider match { - case Some(provider) if provider != DDLUtils.HIVE_PROVIDER => - val relation = try { + case Some(provider) if !provider.equalsIgnoreCase(DDLUtils.HIVE_PROVIDER) => + try { DataSource(snappySession, provider, userSpecifiedSchema = Some(metadata.schema), partitionColumns = metadata.partitionColumnNames, bucketSpec = metadata.bucketSpec, - options = metadata.storage.properties).resolveRelation() + options = metadata.storage.properties).resolveRelation() match { + case d: DestroyRelation if d ne null => d.destroy(ignoreIfNotExists) + case _ => + } } catch { - case NonFatal(_) => null // ignore any exception in class lookup - } - relation match { - case d: DestroyRelation => d.destroy(ignoreIfNotExists) - case _ => + case NonFatal(_) => // ignore any exception in class lookup } case _ => } diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index fd450ebfb9..f14bf069b4 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -643,7 +643,8 @@ private[sql] final class PreprocessTable(state: SnappySessionState) } } if (hasNullValueProjection && isRowTable && (currentKey ne null)) { - // fallback to store-layer command to handle default and autoincrement columns + // fallback to store-layer SQL to handle possible default and autoincrement columns + // TODO: handle default (using Metadata query) and autoinc (using builtin functions) (u, DMLExternalTable(relation, currentKey.sqlText)) } else (relation, Project(projection.toSeq, child)) } else (u, child) diff --git a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala index 129f667603..13a509cf8f 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/interfaces.scala @@ -384,7 +384,7 @@ trait SnappyTableRelation extends DestroyRelation with RowLevelSecurityRelation } } - protected[this] var _schema: StructType = _ + protected[this] var _schema: StructType = JdbcExtendedUtils.EMPTY_SCHEMA @transient protected[this] var _relationInfoAndRegion: (RelationInfo, Option[LocalRegion]) = _ protected def refreshTableSchema(invalidateCached: Boolean, fetchFromStore: Boolean): Unit = { diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala b/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala index 1d65bb14de..be90fdc634 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/SnappySinkCallback.scala @@ -103,7 +103,7 @@ class SnappyStoreSinkProvider extends StreamSinkProvider with DataSourceRegister private def createSinkStateTableIfNotExist(sqlContext: SQLContext, stateTableSchema: Option[String]) = { - sqlContext.asInstanceOf[SnappyContext].snappySession.sql(s"create table if not exists" + + sqlContext.sql(s"create table if not exists" + s" ${stateTable(stateTableSchema)} (" + s" $QUERY_ID_COLUMN varchar(200)," + s" $BATCH_ID_COLUMN long, " + diff --git a/core/src/test/scala/org/apache/spark/sql/store/RowTableTest.scala b/core/src/test/scala/org/apache/spark/sql/store/RowTableTest.scala index cb99ea9aa5..f74f92b3c3 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/RowTableTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/RowTableTest.scala @@ -303,7 +303,7 @@ class RowTableTest val rdd1 = sc.parallelize(data1, data1.length).map(s => new Data(s(0), s(1), s(2))) val dataDF1 = snc.createDataFrame(rdd1) - dataDF1.write.format("row").mode(SaveMode.Overwrite).options(props).saveAsTable(tableName) + dataDF1.write.insertInto(tableName) snc.sql("PUT INTO TABLE " + tableName + " SELECT * FROM tempTable") diff --git a/store b/store index 768e11709e..a42b29a657 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 768e11709e3c1daef895b496c6215e400fa83a63 +Subproject commit a42b29a657064119ba6bf3f375d2ebd259347a72 From 0e5472617a1c9c96e001f7d018bc13c3dbc23e19 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 27 Feb 2020 19:40:14 +0530 Subject: [PATCH 62/80] few more fixes --- .../columnar/ExternalStoreUtils.scala | 19 +++++++++---- .../sql/internal/ColumnTableBulkOps.scala | 8 +++--- .../spark/sql/store/ColumnTableTest.scala | 27 ++++++++++++++++--- ...SnappyStoreSinkProviderSecuritySuite.scala | 3 ++- 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala index 655211c480..865c1fc67c 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ExternalStoreUtils.scala @@ -101,6 +101,9 @@ object ExternalStoreUtils extends SparkSupport { COLUMN_BATCH_SIZE_TRANSIENT, COLUMN_MAX_DELTA_ROWS, COLUMN_MAX_DELTA_ROWS_TRANSIENT, COMPRESSION_CODEC, RELATION_FOR_SAMPLE, KEY_COLUMNS) + private[this] val storePropertyPrefixes = Array("", Constant.STORE_PROPERTY_PREFIX, + Constant.SPARK_STORE_PREFIX, Constant.PROPERTY_PREFIX, Constant.SPARK_SNAPPY_PREFIX) + registerBuiltinDrivers() def registerBuiltinDrivers(): Unit = { @@ -383,12 +386,18 @@ object ExternalStoreUtils extends SparkSupport { } def getCredentials(session: SparkSession, prefix: String = ""): (String, String) = { - val prefix = SnappyContext.getClusterMode(session.sparkContext) match { - case ThinClientConnectorMode(_, _) => Constant.SPARK_STORE_PREFIX - case _ => "" + for (prefix <- storePropertyPrefixes) { + val userProperty = + if (prefix.isEmpty) ClientAttribute.USERNAME + else prefix + ClientAttribute.USERNAME + if (session.conf.contains(userProperty)) { + val passwordProperty = + if (prefix.isEmpty) ClientAttribute.PASSWORD + else prefix + ClientAttribute.PASSWORD + return (session.conf.get(userProperty), session.conf.get(passwordProperty, "")) + } } - (session.conf.get(prefix + ClientAttribute.USERNAME, ""), - session.conf.get(prefix + ClientAttribute.PASSWORD, "")) + ("", "") } def getConnection(id: String, connProperties: ConnectionProperties, diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index 7c69be3998..a0244dd4bd 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -53,9 +53,13 @@ object ColumnTableBulkOps extends SparkSupport { } val condition = prepareCondition(session, table, subQuery, putKeys) + val conf = session.sessionState.conf val analyzer = session.sessionState.analyzer val resolver = analyzer.resolver val keyColumns = getKeyColumns(table) + // JOIN may be optimized to a trivial form (e.g. PUT INTO ... VALUES(...)) + // where condition may be missing after optimization so enable cross join + conf.setConf(SQLConf.CROSS_JOINS_ENABLED, value = true) var updateSubQuery: LogicalPlan = Join(table, subQuery, Inner, condition) val updateColumns = table.output.filterNot(a => keyColumns.exists(resolver(_, a.name))) val updateExpressions = subQuery.output.filterNot( @@ -67,14 +71,12 @@ object ColumnTableBulkOps extends SparkSupport { } val cacheSize = ExternalStoreUtils.sizeAsBytes( - Property.PutIntoInnerJoinCacheSize.get(session.sqlContext.conf), + Property.PutIntoInnerJoinCacheSize.get(conf), Property.PutIntoInnerJoinCacheSize.name, -1, Long.MaxValue) val updatePlan = Update(table, updateSubQuery, Nil, updateColumns, updateExpressions) - // val updateDS = new Dataset(session, updatePlan, RowEncoder(updatePlan.schema)) var analyzedUpdate = analyzer.execute(updatePlan).asInstanceOf[Update] - // updateDS.queryExecution.analyzed.asInstanceOf[Update] updateSubQuery = analyzedUpdate.child // explicitly project out only the updated expression references and key columns diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala index 8bde1d9ec0..ef05e42bf2 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableTest.scala @@ -21,7 +21,7 @@ import java.sql.{DriverManager, SQLException} import scala.util.{Failure, Success, Try} import com.gemstone.gemfire.cache.{EvictionAction, EvictionAlgorithm} -import com.gemstone.gemfire.internal.cache.{DistributedRegion, PartitionedRegion} +import com.gemstone.gemfire.internal.cache.{DistributedRegion, GemFireCacheImpl, PartitionedRegion, TXManagerImpl} import com.pivotal.gemfirexd.internal.engine.Misc import com.pivotal.gemfirexd.internal.impl.jdbc.EmbedConnection import com.pivotal.gemfirexd.internal.impl.sql.compile.ParserImpl @@ -953,6 +953,13 @@ class ColumnTableTest testRowBufferEviction("testTableWithoutSchema") } + private def commitTX(): Unit = { + val tx = TXManagerImpl.getCurrentSnapshotTXState + val txMgr = GemFireCacheImpl.getExisting.getCacheTransactionManager + txMgr.masqueradeAs(tx) + txMgr.commit() + } + private def testRowBufferEviction(tableName: String): Unit = { val props = Map("BUCKETS" -> "1", "PARTITION_BY" -> "col1") val data = Seq(Seq(1, 2, 3), Seq(7, 8, 9), Seq(9, 2, 3), Seq(4, 2, 3), @@ -976,6 +983,9 @@ class ColumnTableTest assert(rs.getInt(1) <= 3) assert(!rs.next()) rs.close() + // need to do explicit commit on thread-local TX since this creates an implicit + // scan-local snapshot TX which is normally closed by Spark layer commit + commitTX() // also check with the insert API snc.truncateTable(tableName) @@ -985,6 +995,9 @@ class ColumnTableTest assert(rs.getInt(1) <= 3) assert(!rs.next()) rs.close() + // need to do explicit commit on thread-local TX since this creates an implicit + // scan-local snapshot TX which is normally closed by Spark layer commit + commitTX() conn.close() } @@ -1460,7 +1473,7 @@ class ColumnTableTest } test("Test method for getting table type of snappy tables") { - var session = new SnappySession(snc.sparkContext) + val session = new SnappySession(snc.sparkContext) session.sql("drop table if exists temp1") session.sql("drop table if exists temp2") session.sql("drop table if exists temp3") @@ -1483,7 +1496,7 @@ class ColumnTableTest snc.sql(s"insert into t1 values(3,'test3')") val df = snc.sql("select * from t1") df.collect() - val tempPath = System.getProperty("user.dir") + System.currentTimeMillis() + val tempPath = System.getProperty("user.dir") + "/" + System.currentTimeMillis() assert(df.count() == 3) df.write.option("header", "true").csv(tempPath) @@ -1507,6 +1520,13 @@ class ColumnTableTest "Should not have succedded with incorrect options") case Failure(_) => // Do nothing } + + session.sql("drop table if exists temp1") + session.sql("drop table if exists temp2") + session.sql("drop table if exists temp3") + session.sql("drop table if exists temp4") + snc.sql("drop table if exists t1") + FileUtils.deleteDirectory(new java.io.File(tempPath)) } private def getTableType(table: String, session: SnappySession): String = { @@ -1519,6 +1539,7 @@ class ColumnTableTest snc.sql("create table t1(id integer, str string) using column options(key_columns 'id')") snc.sql("put into t1 select 1, 'aa'") snc.sql("put into t1 select 2, 'aa' union all select 3, 'bb'") + // TODO: using values causes serialization error for some reason snc.sql("put into t1 select 1, 'cc'") val rows = snc.sql("select * from t1") assert(rows.count() == 3) diff --git a/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala b/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala index 4c163d5ab1..09114a2f92 100644 --- a/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala @@ -245,7 +245,8 @@ class SnappyStoreSinkProviderSecuritySuite extends SnappyFunSuite case x: StreamingQueryException => val expectedMessage = "User 'GEMFIRE5' does not have SELECT permission on column" + " 'STREAM_QUERY_ID' of table 'GEMGROUP1'.'SNAPPYSYS_INTERNAL____SINK_STATE_TABLE'." - assert(x.getCause.getCause.getMessage.equals(expectedMessage)) + val cause = if (x.getCause.getCause eq null) x.getCause else x.getCause.getCause + assert(cause.getMessage.equals(expectedMessage)) } finally { streamingQuery1.stop() } From 4e0376d57c3af15ad840c0d72b750f1487a4557e Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Thu, 27 Feb 2020 20:27:48 +0530 Subject: [PATCH 63/80] fix premature release and acquire of region lock --- core/src/main/scala/org/apache/spark/sql/SnappySession.scala | 2 +- .../main/scala/org/apache/spark/sql/sources/StoreStrategy.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index d2121eb59e..d6a193f646 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -639,7 +639,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) if (lock != null) { logInfo(s"Going to unlock the lock object bulkOp $lock and " + s"app ${sqlContext.sparkContext.appName}") - lock.asInstanceOf[PartitionedRegion.RegionLock].unlock() + lock.unlock() } case (conn: Connection, id: TableIdentifier) => var unlocked = false diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index c12396b057..3aa81931e3 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -59,7 +59,7 @@ class StoreStrategy(sessionState: SnappySessionState) extends Strategy with Spar case i: InsertIntoDataSourceCommand if i.logicalRelation.relation.isInstanceOf[PlanInsertableRelation] => val p = i.logicalRelation.relation.asInstanceOf[PlanInsertableRelation] - val childPlan = sessionState.executePlan(i.query).sparkPlan + val childPlan = new QueryExecution(sessionState.snappySession, i.query).sparkPlan val preAction = if (internals.getOverwriteOption(i)) () => p.truncate() else () => () ExecutePlan(p.getInsertPlan(i.logicalRelation, childPlan), preAction) :: Nil From cd4fc19a82338d6eb7f3bcdf96a9282662e957eb Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 3 Mar 2020 02:27:46 +0530 Subject: [PATCH 64/80] change ctx.addNewFunction to internals.addFunction throughout - use the return value of internals.addFunction to store-back into original variable or else use inlineToOuterClass=true - change EncoderPlan to no longer extend LogicalRDD (due to difference in constructors) - other misc fixes --- .../spark/sql/SQLFunctionsTestSuite.scala | 3 +- .../sql/internal/Spark23_4_Internals.scala | 8 +-- .../org/apache/spark/sql/SnappySession.scala | 9 ++-- .../spark/sql/execution/EncoderScanExec.scala | 24 ++++++--- .../spark/sql/execution/ExistingPlans.scala | 11 ++++ .../sql/execution/ObjectHashMapAccessor.scala | 22 ++++---- .../spark/sql/execution/SHAMapAccessor.scala | 6 +-- .../aggregate/SnappyHashAggregateExec.scala | 51 +++++++++---------- .../columnar/ColumnBatchCreator.scala | 12 ++--- .../execution/columnar/ColumnDeleteExec.scala | 2 +- .../execution/columnar/ColumnInsertExec.scala | 48 ++++++++--------- .../execution/columnar/ColumnTableScan.scala | 27 +++++----- .../execution/columnar/ColumnUpdateExec.scala | 10 ++-- .../sql/execution/joins/HashJoinExec.scala | 8 +-- .../spark/sql/execution/row/RowExec.scala | 8 +-- .../spark/sql/policy/policyFunctions.scala | 6 +-- store | 2 +- 17 files changed, 138 insertions(+), 119 deletions(-) diff --git a/cluster/src/test/scala/org/apache/spark/sql/SQLFunctionsTestSuite.scala b/cluster/src/test/scala/org/apache/spark/sql/SQLFunctionsTestSuite.scala index 0d32c64746..6851882001 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/SQLFunctionsTestSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/SQLFunctionsTestSuite.scala @@ -569,6 +569,7 @@ class SQLFunctionsTestSuite extends SnappyFunSuite val c2s = snappyDf1.columns assert(!c1s.sameElements(c2s)) + /* NullIf is only 2 argument (3 argument constructor is for internal use only) query = "SELECT nullif( 9, 9, 4)" sparkDf = sparkSession.sql(s"$query") snappyDf = snc.sql(s"$query") @@ -581,7 +582,7 @@ class SQLFunctionsTestSuite extends SnappyFunSuite // sparkDf = sparkSession.sql(s"$query") // snappyDf = snc.sql(s"$query") // validateResult(sparkDf, snappyDf) - + */ } test("nvl") { diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index f232fd7d71..d61c1f1fc4 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -608,6 +608,10 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, state.ResolveAliasInGroupBy :: new FindDataSourceTable(session) :: new ResolveSQLOnFile(session) :: + state.AnalyzeMutableOperations(session, aSelf) :: + ResolveQueryHints(session) :: + state.RowLevelSecurity :: + state.ExternalRelationLimitFetch :: session.contextFunctions.getExtendedResolutionRules) ++ customResolutionRules } @@ -619,10 +623,6 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, PreprocessTableInsertion(conf) :: DataSourceAnalysis(conf) :: new HiveConditionalRule(_ => HiveAnalysis, state) :: - state.AnalyzeMutableOperations(session, aSelf) :: - ResolveQueryHints(session) :: - state.RowLevelSecurity :: - state.ExternalRelationLimitFetch :: session.contextFunctions.getPostHocResolutionRules) ++ customPostHocResolutionRules } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index d6a193f646..e98a4cf680 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -26,7 +26,6 @@ import scala.concurrent.Future import scala.language.implicitConversions import scala.reflect.runtime.universe.{TypeTag, typeOf} -import com.gemstone.gemfire.internal.cache.PartitionedRegion.RegionLock import com.gemstone.gemfire.internal.cache.{GemFireCacheImpl, PartitionedRegion} import com.gemstone.gemfire.internal.shared.{ClientResolverUtils, FinalizeHolder, FinalizeObject} import com.google.common.cache.{Cache, CacheBuilder} @@ -409,7 +408,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) private[sql] def addFinallyCode(ctx: CodegenContext, code: String): Int = { val depth = getContextObject[Int](ctx, "D", "depth").getOrElse(0) + 1 addContextObject(ctx, "D", "depth", depth) - addContextObject(ctx, "F", "finally" -> depth, code) + addContextObject(ctx, "FIN", "finally" -> depth, code) depth } @@ -423,7 +422,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) else addContextObject(ctx, "D", "depth", d - 1) val key = "finally" -> d - getContextObject[String](ctx, "F", key) match { + getContextObject[String](ctx, "FIN", key) match { case Some(finallyCode) => removeContextObject(ctx, "F", key) if (body.isEmpty) finallyCode else { @@ -635,7 +634,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) private[sql] def releaseLock(lock: Any): Unit = { logInfo(s"Releasing the lock : $lock") lock match { - case lock: RegionLock => + case lock: PartitionedRegion.RegionLock => if (lock != null) { logInfo(s"Going to unlock the lock object bulkOp $lock and " + s"app ${sqlContext.sparkContext.appName}") @@ -780,7 +779,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) val c = encoder.clsTag.runtimeClass val isFlat = !(classOf[Product].isAssignableFrom(c) || classOf[DefinedByConstructorParams].isAssignableFrom(c)) - val plan = new EncoderPlan[T](data, encoder, isFlat, output, self) + val plan = EncoderPlan[T](data, encoder, isFlat, output)(self) Dataset[T](self, plan) } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala index 162dda9f70..50322b264f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/EncoderScanExec.scala @@ -18,10 +18,12 @@ package org.apache.spark.sql.execution import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.analysis.MultiInstanceRelation import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.objects.StaticInvoke import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, BindReferences, Expression} +import org.apache.spark.sql.catalyst.plans.logical.{LeafNode, Statistics} import org.apache.spark.sql.catalyst.util.DateTimeUtils import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.types.{DateType, ObjectType} @@ -158,13 +160,23 @@ case class EncoderScanExec(rdd: RDD[Any], encoder: ExpressionEncoder[Any], } } -class EncoderPlan[T](rdd: RDD[T], val encoder: ExpressionEncoder[T], - val isFlat: Boolean, output: Seq[Attribute], session: SparkSession) - extends LogicalRDD(output, rdd.asInstanceOf[RDD[InternalRow]])(session) { +case class EncoderPlan[T](rdd: RDD[T], encoder: ExpressionEncoder[T], + isFlat: Boolean, output: Seq[Attribute])(session: SparkSession) + extends LeafNode with MultiInstanceRelation with LogicalPlanLike { + + override protected def otherCopyArgs: Seq[AnyRef] = session :: Nil override def newInstance(): EncoderPlan.this.type = { - val newRDD = super.newInstance().asInstanceOf[LogicalRDD] - new EncoderPlan(rdd, encoder, isFlat, - newRDD.output, session).asInstanceOf[this.type] + EncoderPlan(rdd, encoder, isFlat, output.map(_.newInstance()))(session).asInstanceOf[this.type] } + + override protected def stringArgs: Iterator[Any] = Iterator(output) + + override def computeStats(): Statistics = Statistics( + // TODO: Instead of returning a default value here, find a way to return a meaningful size + // estimate for RDDs. See PR 1238 for more discussions. + sizeInBytes = BigInt(session.sessionState.conf.defaultSizeInBytes) + ) + + @transient override lazy val statistics: Statistics = computeStats() } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index e3ae32b819..57ef45bb83 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -24,6 +24,7 @@ import org.apache.spark.SparkContext import org.apache.spark.rdd.{RDD, ZippedPartitionsBaseRDD} import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode} import org.apache.spark.sql.catalyst.expressions.{Attribute, Expression, _} +import org.apache.spark.sql.catalyst.plans.logical.Statistics import org.apache.spark.sql.catalyst.plans.physical._ import org.apache.spark.sql.catalyst.util.{ArrayData, MapData} import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow} @@ -530,3 +531,13 @@ case class DictionaryCode(dictionary: ExprCode, bufferVar: String, def evaluateIndexCode(): String = evaluate(dictionaryIndex) } + +/** + * Intermediate trait to accommodate differences in statistics method in Spark versions. + */ +trait LogicalPlanLike { + + def statistics: Statistics + + def computeStats(): Statistics +} diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index 2411636e02..54275f3071 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -217,12 +217,12 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, } } """ - // using addNewFunction to register the class since there is nothing - // function specific in the addNewFunction method + // using addFunction to register the class since there is nothing + // function specific in the addFunction method if (!valueClassCode.isEmpty) { - ctx.addNewFunction(valueClass, valueClassCode) + internals.addFunction(ctx, valueClass, valueClassCode, inlineToOuterClass = true) } - ctx.addNewFunction(entryClass, classCode) + internals.addFunction(ctx, entryClass, classCode, inlineToOuterClass = true) session.addClass(ctx, valClassTypes, keyTypes, entryTypes, valueClass, entryClass, multiMap) } @@ -658,8 +658,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, val skipInit = valueInit eq null // check for existing function with matching null vars and skipInit val fnKey = className -> keyVars.map(internals.exprCodeIsNull(_) == "false") - val fn = session.getContextObject[(String, Boolean)](ctx, "F", fnKey) match { - case Some((functionName, skip)) if skipInit || !skip => functionName + val fn = session.getContextObject[(String, String, Boolean)](ctx, "F", fnKey) match { + case Some((_, functionName, skip)) if skipInit || !skip => functionName case f => // re-use function for non-matching skipInit but change its body // to also handle insertion of new blank entry @@ -696,7 +696,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, | } |}""".stripMargin } - ctx.addNewFunction(function, + val functionName = internals.addFunction(ctx, function, s""" |private $className $function(final int $hash, $keyDeclarations, | final $className[] $dataTerm, final int $maskTerm, @@ -725,8 +725,8 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, """.stripMargin) // register the new function - session.addContextObject(ctx, "F", fnKey, function -> skipInit) - function + session.addContextObject(ctx, "F", fnKey, (function, functionName, skipInit)) + functionName } val keyArgs = keyCalls.mkString(", ") @@ -761,7 +761,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, // and dictionary index will be initialized to that by ColumnTableScan internals.addClassField(ctx, classOf[StringDictionary].getName, dictValue, forceInline = true, useFreshName = false) - ctx.addNewFunction(dictionaryArrayInit, + internals.addFunction(ctx, dictionaryArrayInit, s""" |public $className[] $dictionaryArrayInit() { | ${d.evaluateDictionaryCode()} @@ -771,7 +771,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, | return null; | } |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) true case None => false } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala index 8516aa9651..37c1602de0 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala @@ -43,7 +43,7 @@ case class SHAMapAccessor(@transient session: SnappySession, vdBaseObjectTerm: String, vdBaseOffsetTerm: String, nullKeysBitsetTerm: String, numBytesForNullKeyBits: Int, allocatorTerm: String, numBytesForNullAggBits: Int, - nullAggsBitsetTerm: String, sizeAndNumNotNullFuncForStringArr: String, + nullAggsBitsetTerm: String, sizeAndNumNotNullFuncForArray: String, keyBytesHolderVarTerm: String, baseKeyObject: String, baseKeyHolderOffset: String, keyExistedTerm: String, skipLenForAttribIndex: Int, codeForLenOfSkippedTerm: String, @@ -966,12 +966,12 @@ case class SHAMapAccessor(@transient session: SnappySession, val snippetNotNullFixedWidth = s"4 + $exprValue.numElements() * $unitSize" val snippetNotNullVarWidth = - s"""4 + (int)($sizeAndNumNotNullFuncForStringArr($exprValue, true) >>> 32L) + s"""4 + (int)($sizeAndNumNotNullFuncForArray($exprValue, true) >>> 32L) """.stripMargin val snippetNullVarWidth = s" $snippetNullBitsSizeCode + $snippetNotNullVarWidth" val snippetNullFixedWidth = s"""4 + $snippetNullBitsSizeCode + - |$unitSize * (int)($sizeAndNumNotNullFuncForStringArr( + |$unitSize * (int)($sizeAndNumNotNullFuncForArray( |$exprValue, false) & 0xffffffffL) """.stripMargin diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index afa8feac30..3452d3bda0 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -269,7 +269,7 @@ case class SnappyHashAggregateExec( // this array will be used at batch level for grouping if possible dictionaryArrayTerm = ctx.freshName("dictionaryArray") dictionaryArrayInit = ctx.freshName("dictionaryArrayInit") - ctx.addNewFunction(dictionaryArrayInit, + dictionaryArrayInit = internals.addFunction(ctx, dictionaryArrayInit, s""" |private $className[] $dictionaryArrayInit() { | return null; @@ -353,7 +353,7 @@ case class SnappyHashAggregateExec( (resultVars, evaluateVariables(resultVars)) } - val doAgg = ctx.freshName("doAggregateWithoutKey") + var doAgg = ctx.freshName("doAggregateWithoutKey") var produceOutput = getChildProducer.asInstanceOf[CodegenSupport].produce( ctx, this) if (bufVarUpdates ne null) { @@ -369,7 +369,7 @@ case class SnappyHashAggregateExec( }.mkString("", "\n", initBufVar).trim produceOutput = s"$produceOutput\n$bufVarUpdates" } - ctx.addNewFunction(doAgg, + doAgg = internals.addFunction(ctx, doAgg, s""" |private void $doAgg() throws java.io.IOException { | // initialize aggregation buffer @@ -531,14 +531,14 @@ case class SnappyHashAggregateExec( private def generateResultCodeForSHAMap( ctx: CodegenContext, keyBufferVars: Seq[ExprCode], aggBufferVars: Seq[ExprCode], iterValueOffsetTerm: String): String = { - /* Asif: It appears that we have to put the code of materilization of each grouping column - & aggreagte before we can send it to parent. The reason is following: - 1) In the byte buffer hashmap data is written consecitively i.e key1, key2 agg1 etc. + /* Asif: It appears that we have to put the code of materialization of each grouping column + & aggregate before we can send it to parent. The reason is following: + 1) In the byte buffer hashmap data is written consecutively i.e key1, key2 agg1 etc. Now the pointer cannot jump arbitrarily to just read key2 without reading key1 - So suppose we have a nested query such that inner query produces code for outputting key1 , key2, - while outer query is going to use only key2. If we do not write the code of materialzing key1, - the pointer will not move forward, as the outer query is going to try to materialzie only key2, - but the pointer will not move to key2 unleass key1 has been consumed. + So suppose we have a nested query such that inner query produces code for outputting key1/2, + while outer query is going to use only key2. If we do not write the code of materializing key1, + the pointer will not move forward, as the outer query is going to try to materialize only key2, + but the pointer will not move to key2 unless key1 has been consumed. We need to resolve this issue. I suppose we can declare local variable pointers pointing to start location of each key/aggregate & use those declared pointers in the materialization code for each key */ @@ -581,17 +581,20 @@ case class SnappyHashAggregateExec( } else if (modes.contains(Partial) || modes.contains(PartialMerge)) { // Combined grouping keys and aggregate values in buffer + var evaluateKeyVars = evaluateVariables(keyBufferVars) ctx.INPUT_ROW = null ctx.currentVars = keyBufferVars val keyVars = groupingExpressions.zipWithIndex.map { case (e, i) => BoundReference(i, e.dataType, e.nullable).genCode(ctx) } - val evaluateKeyVars = evaluateVariables(keyVars) + evaluateKeyVars += evaluateVariables(keyVars) + + var evaluateBufferVars = evaluateVariables(aggBufferVars) ctx.currentVars = aggBufferVars val bufferVars = aggregateBufferAttributesForGroup.zipWithIndex.map { case (e, i) => BoundReference(i, e.dataType, e.nullable).genCode(ctx) } - val evaluateBufferVars = evaluateVariables(bufferVars) + evaluateBufferVars += evaluateVariables(bufferVars) s""" ${byteBufferAccessor.readNullBitsCode(iterValueOffsetTerm, byteBufferAccessor.nullKeysBitsetTerm, byteBufferAccessor.numBytesForNullKeyBits)} @@ -601,8 +604,6 @@ case class SnappyHashAggregateExec( $evaluateBufferVars ${consume(ctx, keyBufferVars ++ aggBufferVars)} """ - - } else { // generate result based on grouping key ctx.INPUT_ROW = null @@ -670,15 +671,15 @@ case class SnappyHashAggregateExec( val arrayDataClass = classOf[ArrayData].getName val platformClass = classOf[Platform].getName - val sizeAndNumNotNullFuncForStringArr = ctx.freshName("calculateStringArrSizeAndNumNotNulls") + var sizeAndNumNotNullFuncForArray = ctx.freshName("calculateArraySizeAndNumNotNulls") if (groupingAttributes.exists(_.dataType.existsRecursively { case ArrayType(StringType, _) | ArrayType(_, true) => true case _ => false })) { - ctx.addNewFunction(sizeAndNumNotNullFuncForStringArr, + sizeAndNumNotNullFuncForArray = internals.addFunction(ctx, sizeAndNumNotNullFuncForArray, s""" - private long $sizeAndNumNotNullFuncForStringArr($arrayDataClass arrayData, + private long $sizeAndNumNotNullFuncForArray($arrayDataClass arrayData, boolean isStringData) { long size = 0L; int numNulls = 0; @@ -697,16 +698,14 @@ case class SnappyHashAggregateExec( """) } - - val valueOffsetTerm = ctx.freshName("valueOffset") val currentValueOffSetTerm = ctx.freshName("currentValueOffSet") val valueDataTerm = ctx.freshName("valueData") val vdBaseObjectTerm = ctx.freshName("vdBaseObjectTerm") val vdBaseOffsetTerm = ctx.freshName("vdBaseOffsetTerm") val valueDataCapacityTerm = ctx.freshName("valueDataCapacity") - val doAgg = ctx.freshName("doAggregateWithKeys") - val setBBMap = ctx.freshName("setBBMap") + var doAgg = ctx.freshName("doAggregateWithKeys") + var setBBMap = ctx.freshName("setBBMap") // generate variable names for holding data from the Map buffer val aggregateBufferVars = for (i <- this.aggregateBufferAttributesForGroup.indices) yield { @@ -847,7 +846,7 @@ case class SnappyHashAggregateExec( keyValSize, valueOffsetTerm, numKeyBytesTerm, numValueBytes, currentValueOffSetTerm, valueDataTerm, vdBaseObjectTerm, vdBaseOffsetTerm, nullKeysBitsetTerm, numBytesForNullKeyBits, allocatorTerm, - numBytesForNullAggsBits, nullAggsBitsetTerm, sizeAndNumNotNullFuncForStringArr, + numBytesForNullAggsBits, nullAggsBitsetTerm, sizeAndNumNotNullFuncForArray, keyBytesHolderVar, baseKeyObject, baseKeyHolderOffset, keyExistedTerm, skipLenForAttrib, codeForLenOfSkippedTerm, valueDataCapacityTerm, if (cacheStoredAggNullBits) Some(storedAggNullBitsTerm) else None, @@ -859,7 +858,7 @@ case class SnappyHashAggregateExec( val childProduce = childProducer.asInstanceOf[CodegenSupport].produce(ctx, this) - ctx.addNewFunction(doAgg, + doAgg = internals.addFunction(ctx, doAgg, s"""private void $doAgg() throws java.io.IOException { |$hashMapTerm = new $hashSetClassName(${Property.initialCapacityOfSHABBMap.get( sqlContext.sparkSession.asInstanceOf[SnappySession].sessionState.conf)}, @@ -908,7 +907,7 @@ case class SnappyHashAggregateExec( |} |}""".stripMargin) - ctx.addNewFunction(setBBMap, + setBBMap = internals.addFunction(ctx, setBBMap, s"""private boolean $setBBMap() { |if ($hashMapTerm != null) { |return true; @@ -1042,7 +1041,7 @@ case class SnappyHashAggregateExec( val iterClass = "java.util.Iterator" val iterTerm = internals.addClassField(ctx, iterClass, "mapIter") - val doAgg = ctx.freshName("doAggregateWithKeys") + var doAgg = ctx.freshName("doAggregateWithKeys") // generate variable name for hash map for use here and in consume val hashSetClassName = classOf[ObjectHashSet[_]].getName @@ -1068,7 +1067,7 @@ case class SnappyHashAggregateExec( val childProduce = childProducer.asInstanceOf[CodegenSupport].produce(ctx, this) - ctx.addNewFunction(doAgg, + doAgg = internals.addFunction(ctx, doAgg, s""" private void $doAgg() throws java.io.IOException { $hashMapTerm = new $hashSetClassName(128, 0.6, $numKeyColumns, false, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala index 5690f31a42..2e8744af6f 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnBatchCreator.scala @@ -190,8 +190,8 @@ case class CallbackColumnInsert(_schema: StructType) override protected def doProduce(ctx: CodegenContext): String = { val row = ctx.freshName("row") - val hasResults = ctx.freshName("hasResults") - val clearResults = ctx.freshName("clearResults") + var hasResults = ctx.freshName("hasResults") + var clearResults = ctx.freshName("clearResults") val rowsBufferClass = classOf[ColumnBatchRowsBuffer].getName val rowsBuffer = internals.addClassField(ctx, rowsBufferClass, "rowsBuffer") // add bucketId variable set to -1 by default @@ -203,19 +203,19 @@ case class CallbackColumnInsert(_schema: StructType) ctx.INPUT_ROW = row ctx.currentVars = null val columnsInput = ctx.generateExpressions(columnsExpr) - ctx.addNewFunction(hasResults, + hasResults = internals.addFunction(ctx, hasResults, s""" |public final boolean $hasResults() { | return !currentRows.isEmpty(); |} """.stripMargin) - ctx.addNewFunction(clearResults, + clearResults = internals.addFunction(ctx, clearResults, s""" |public final void $clearResults() { | currentRows.clear(); |} """.stripMargin) - ctx.addNewFunction("getRowsBuffer", + internals.addFunction(ctx, "getRowsBuffer", s""" |public $rowsBufferClass getRowsBuffer() throws java.io.IOException { | $clearResults(); // clear any old results @@ -227,7 +227,7 @@ case class CallbackColumnInsert(_schema: StructType) | } | return this.$rowsBuffer; |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) // create the rows buffer implementation as an inner anonymous // class so that it can be fit easily in the iterator model of // doProduce/doConsume having access to all the final local variables diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala index eb3bc5dc67..9e42b31408 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnDeleteExec.scala @@ -134,7 +134,7 @@ case class ColumnDeleteExec(child: SparkPlan, columnTable: String, val rowConsume = super.doConsume(ctx, keysInput.dropRight(3), StructType(getUpdateSchema(keyColumns.dropRight(3)))) - ctx.addNewFunction(finishDelete, + finishDelete = internals.addFunction(ctx, finishDelete, s""" |private void $finishDelete(long batchId, int bucketId, int numRows) { | if (batchId == $invalidUUID || batchId != $lastColumnBatchId) { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala index e2eee54505..37904c2edd 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnInsertExec.scala @@ -117,8 +117,8 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], */ private def addBatchSizeAndCloseEncoders(ctx: CodegenContext, closeEncoders: String): String = { - val closeEncodersFunction = ctx.freshName("closeEncoders") - ctx.addNewFunction(closeEncodersFunction, + var closeEncodersFunction = ctx.freshName("closeEncoders") + closeEncodersFunction = internals.addFunction(ctx, closeEncodersFunction, s""" |private void $closeEncodersFunction() { | $closeEncoders @@ -187,13 +187,13 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], child match { case c: CallbackColumnInsert => - ctx.addNewFunction(c.resetInsertions, + internals.addFunction(ctx, c.resetInsertions, s""" |public final void ${c.resetInsertions}() { | $batchSizeTerm = 0; | $numInsertions = -1; |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) batchBucketIdTerm = Some(c.bucketIdTerm) case _ => } @@ -209,13 +209,13 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], s"if ($numInsertions >= 0) return" } // no need to stop in iteration at any point - ctx.addNewFunction("shouldStop", + internals.addFunction(ctx, "shouldStop", s""" |@Override |protected final boolean shouldStop() { | return false; |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) val closeEncoders = loop( s"if ($encoderArrayTerm[i] != null) $encoderArrayTerm[i].close();", @@ -321,13 +321,13 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val childProduce = doChildProduce(ctx) child match { case c: CallbackColumnInsert => - ctx.addNewFunction(c.resetInsertions, + internals.addFunction(ctx, c.resetInsertions, s""" |public final void ${c.resetInsertions}() { | $batchSizeTerm = 0; | $numInsertions = -1; |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) batchBucketIdTerm = Some(c.bucketIdTerm) case _ => } @@ -338,13 +338,13 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], s"if ($numInsertions >= 0) return" } // no need to stop in iteration at any point - ctx.addNewFunction("shouldStop", + internals.addFunction(ctx, "shouldStop", s""" |@Override |protected final boolean shouldStop() { | return false; |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) val closeForNoContext = addBatchSizeAndCloseEncoders(ctx, closeEncoders.toString()) val useBatchSize = if (columnBatchSize > 0) columnBatchSize else ExternalStoreUtils.sizeAsBytes(Property.ColumnBatchSize.defaultValue.get, @@ -439,8 +439,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], | $body |} """.stripMargin - ctx.addNewFunction(name, code) - name + internals.addFunction(ctx, name, code) } s""" |${functions.map(name => s"$name();").mkString("\n")} @@ -531,8 +530,9 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val tableName = ctx.addReferenceObj("columnTable", columnTable, "java.lang.String") + val cursorArray = ctx.freshName("cursorArray") val bufferLoopCode = - s"""$buffers[i] = $encoderArrayTerm[i].finish($cursorArrayTerm[i]);\n""".stripMargin + s"$buffers[i] = $encoderArrayTerm[i].finish($cursorArray[i]);\n" val buffersCode = loop(bufferLoopCode, schema.length) val (statsSchema, stats) = columnStats.unzip @@ -540,10 +540,10 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val statsRow = internals.exprCodeValue(statsEv) storeColumnBatch = ctx.freshName("storeColumnBatch") - ctx.addNewFunction(storeColumnBatch, + storeColumnBatch = internals.addFunction(ctx, storeColumnBatch, s""" |private final void $storeColumnBatch(int $maxDeltaRowsTerm, - | int $batchSizeTerm, long[] $cursorArrayTerm, scala.Option $conn) { + | int $batchSizeTerm, long[] $cursorArray, scala.Option $conn) { | // create statistics row | ${statsEv.code.toString.trim} | // create ColumnBatch and insert @@ -562,21 +562,21 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], generateBeginSnapshotTx(ctx, externalStoreTerm) commitSnapshotTx = ctx.freshName("commitSnapshotTx") - ctx.addNewFunction(commitSnapshotTx, + commitSnapshotTx = internals.addFunction(ctx, commitSnapshotTx, s""" |private final void $commitSnapshotTx(String $txId, scala.Option $conn) { | $externalStoreTerm.commitTx($txId, false, $conn); |} """.stripMargin) rollbackSnapshotTx = ctx.freshName("rollbackSnapshotTx") - ctx.addNewFunction(rollbackSnapshotTx, + rollbackSnapshotTx = internals.addFunction(ctx, rollbackSnapshotTx, s""" |private final void $rollbackSnapshotTx(String $txId, scala.Option $conn) { | $externalStoreTerm.rollbackTx($txId, $conn); |} """.stripMargin) closeConnection = ctx.freshName("closeConnection") - ctx.addNewFunction(closeConnection, + closeConnection = internals.addFunction(ctx, closeConnection, s""" |private final void $closeConnection(scala.Option $conn) { | $externalStoreTerm.closeConnection($conn); @@ -616,14 +616,14 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], catalogVersion = ctx.addReferenceObj("catalogVersion", catalogSchemaVersion) if (!onExecutor && Utils.isSmartConnectorMode(sqlContext.sparkContext)) { // on smart connector also set connection attributes to check catalog schema version - ctx.addNewFunction(beginSnapshotTx, + beginSnapshotTx = internals.addFunction(ctx, beginSnapshotTx, s""" |private final Object[] $beginSnapshotTx() throws java.io.IOException { | return $externalStoreTerm.beginTxSmartConnector(false, $catalogVersion); |} """.stripMargin) } else { - ctx.addNewFunction(beginSnapshotTx, + beginSnapshotTx = internals.addFunction(ctx, beginSnapshotTx, s""" |private final Object[] $beginSnapshotTx() { | return $externalStoreTerm.beginTx(false); @@ -689,7 +689,7 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], val statsEv = ColumnWriter.genStatsRow(ctx, batchSizeTerm, stats, statsSchema) val statsRow = internals.exprCodeValue(statsEv) storeColumnBatch = ctx.freshName("storeColumnBatch") - ctx.addNewFunction(storeColumnBatch, + storeColumnBatch = internals.addFunction(ctx, storeColumnBatch, s""" |private final void $storeColumnBatch(int $maxDeltaRowsTerm, | int $batchSizeTerm, ${batchFunctionDeclarations.toString()}, scala.Some $conn) { @@ -709,21 +709,21 @@ case class ColumnInsertExec(child: SparkPlan, partitionColumns: Seq[String], """.stripMargin) generateBeginSnapshotTx(ctx, externalStoreTerm) commitSnapshotTx = ctx.freshName("commitSnapshotTx") - ctx.addNewFunction(commitSnapshotTx, + commitSnapshotTx = internals.addFunction(ctx, commitSnapshotTx, s""" |private final void $commitSnapshotTx(String $txId, scala.Option $conn) { | $externalStoreTerm.commitTx($txId, false, $conn); |} """.stripMargin) rollbackSnapshotTx = ctx.freshName("rollbackSnapshotTx") - ctx.addNewFunction(rollbackSnapshotTx, + rollbackSnapshotTx = internals.addFunction(ctx, rollbackSnapshotTx, s""" |private final void $rollbackSnapshotTx(String $txId, scala.Option $conn) { | $externalStoreTerm.rollbackTx($txId, $conn); |} """.stripMargin) closeConnection = ctx.freshName("closeConnection") - ctx.addNewFunction(closeConnection, + closeConnection = internals.addFunction(ctx, closeConnection, s""" |private final void $closeConnection(scala.Option $conn) { | $externalStoreTerm.closeConnection($conn); diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala index d7a3f1e3fd..1dbd5c6b7a 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnTableScan.scala @@ -148,8 +148,7 @@ abstract case class ColumnTableScan( | $body |} """.stripMargin - ctx.addNewFunction(name, code) - name + internals.addFunction(ctx, name, code) } functions.map(name => s"$name();").mkString("\n") } @@ -160,7 +159,7 @@ abstract case class ColumnTableScan( val nullVarForCol = internals.addClassField(ctx, "boolean", s"nullVarForCol$index") val sqlType = Utils.getSQLDataType(attr.dataType) val jt = internals.javaType(sqlType, ctx) - val name = s"readValue_$index" + var name = s"readValue_$index" val code = s""" |private $jt $name(int $batchOrdinal) { @@ -169,7 +168,7 @@ abstract case class ColumnTableScan( | return ${internals.exprCodeValue(expr)}; |} """.stripMargin - ctx.addNewFunction(name, code) + name = internals.addFunction(ctx, name, code) val exprCode = s""" |$jt $retValName = $name($batchOrdinal); @@ -338,7 +337,7 @@ abstract case class ColumnTableScan( val updatedDecoderLocal = ctx.freshName("decoderUpdatedLocal") val buffer = internals.addClassField(ctx, "java.nio.ByteBuffer", "buffer") val numNullsVar = internals.addClassField(ctx, "int", "numNulls") - val initBufferFunction = ctx.freshName("bufferInit") + var initBufferFunction = ctx.freshName("bufferInit") val bufferVar = if (isWideSchema) { internals.addClassField(ctx, "Object", "bufferObject") } else ctx.freshName("bufferObject") @@ -371,9 +370,9 @@ abstract case class ColumnTableScan( ) } val updatedDecoder = internals.addClassField(ctx, updatedDecoderClass, "updatedDecoder") - val closeDecoderFunction = ctx.freshName("decoderClose") + var closeDecoderFunction = ctx.freshName("decoderClose") - ctx.addNewFunction(initBufferFunction, + initBufferFunction = internals.addFunction(ctx, initBufferFunction, s""" |private void $initBufferFunction() { | $buffer = $colInput.getColumnLob($baseIndex); @@ -390,7 +389,7 @@ abstract case class ColumnTableScan( """.stripMargin) columnBufferInit.append(s"$initBufferFunction();\n") - ctx.addNewFunction(closeDecoderFunction, + closeDecoderFunction = internals.addFunction(ctx, closeDecoderFunction, s""" |private void $closeDecoderFunction() { | if ($decoder != null) { @@ -530,7 +529,7 @@ abstract case class ColumnTableScan( if (!$colInput.hasNext()) return false; }""" } - val nextBatch = ctx.freshName("nextBatch") + var nextBatch = ctx.freshName("nextBatch") val closeDecodersFunction = ctx.freshName("closeAllDecoders") val switchSRR = if (isForSampleReservoirAsRegion) { // triple switch between rowInputSRR, rowInput, colInput @@ -551,7 +550,7 @@ abstract case class ColumnTableScan( """.stripMargin } else "" - ctx.addNewFunction(nextBatch, + nextBatch = internals.addFunction(ctx, nextBatch, s""" |private boolean $nextBatch() throws Exception { | if ($buffers != null) return true; @@ -586,12 +585,12 @@ abstract case class ColumnTableScan( | return true; |} """.stripMargin) - ctx.addNewFunction(closeDecodersFunction, + internals.addFunction(ctx, closeDecodersFunction, s""" |private void $closeDecodersFunction() { | ${closeDecoders.toString()} |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) val (assignBatchId, assignOrdinalId) = if (ordinalIdTerm ne null) ( s""" @@ -936,8 +935,8 @@ object ColumnTableScan extends Logging with SparkSupport { val addBatchMetric = if (columnBatchesSkipped ne null) { s"$columnBatchesSkipped.${metricAdd("1")};" } else "" - val filterFunction = ctx.freshName("columnBatchFilter") - ctx.addNewFunction(filterFunction, + var filterFunction = ctx.freshName("columnBatchFilter") + filterFunction = internals.addFunction(ctx, filterFunction, s""" |private boolean $filterFunction(UnsafeRow $statsRow, int $numRowsTerm, | boolean isLastStatsRow, boolean isDelta) { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala index 577a008477..88895e2a00 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/ColumnUpdateExec.scala @@ -190,7 +190,7 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, val rowConsume = super.doConsume(ctx, updateInput.dropRight(3), StructType(getUpdateSchema(allExpressions.dropRight(3)))) - ctx.addNewFunction(initializeEncoders, + internals.addFunction(ctx, initializeEncoders, s""" |private void $initializeEncoders() { | for (int $index = 0; $index < $numColumns; $index++) { @@ -199,12 +199,12 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, | ${classOf[ColumnDelta].getName}.INIT_SIZE(), true); | } |} - """.stripMargin) + """.stripMargin, inlineToOuterClass = true) // Creating separate encoder write functions instead of inlining for wide-schemas // in updates (especially with support for putInto being added). Performance should // be about the same since JVM inlines where it determines will help performance. val callEncoders = updateColumns.zipWithIndex.map { case (col, i) => - val function = ctx.freshName("encoderFunction") + var function = ctx.freshName("encoderFunction") val ordinal = ctx.freshName("ordinal") val isNull = ctx.freshName("isNull") val field = ctx.freshName("field") @@ -213,7 +213,7 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, val realEncoderTerm = s"${encoderTerm}_realEncoder" val cursorTerm = s"$cursors[$i]" val ev = updateInput(i) - ctx.addNewFunction(function, + function = internals.addFunction(ctx, function, s""" |private void $function(int $ordinal, int $ordinalIdVar, | boolean $isNull, ${internals.javaType(dataType, ctx)} $field) { @@ -269,7 +269,7 @@ case class ColumnUpdateExec(child: SparkPlan, columnTable: String, // methods if required so no need to add separate functions explicitly. // Count is hardcoded as zero which will change for "insert" index deltas. val statsEv = ColumnWriter.genStatsRow(ctx, "0", stats, statsSchema) - ctx.addNewFunction(finishUpdate, + finishUpdate = internals.addFunction(ctx, finishUpdate, s""" |private void $finishUpdate(long batchId, int bucketId, int numRows) { | if (batchId == $invalidUUID || batchId != $lastColumnBatchId) { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala index d326e1a5e2..f150200c5d 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/joins/HashJoinExec.scala @@ -288,7 +288,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], val createMap = ctx.freshName("createMap") val createMapClass = ctx.freshName("CreateMap") - val getOrCreateMap = ctx.freshName("getOrCreateMap") + var getOrCreateMap = ctx.freshName("getOrCreateMap") val beforeMap = ctx.freshName("beforeMap") val buildTime = metricTerm(ctx, "buildTime") @@ -378,7 +378,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], if (replicatedTableJoin) { var cacheClass = HashedObjectCache.getClass.getName cacheClass = cacheClass.substring(0, cacheClass.length - 1) - ctx.addNewFunction(getOrCreateMap, + getOrCreateMap = internals.addFunction(ctx, getOrCreateMap, s""" public final void $createMap() throws java.io.IOException { $buildSideCreateMap @@ -398,7 +398,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], } """) } else { - ctx.addNewFunction(getOrCreateMap, + getOrCreateMap = internals.addFunction(ctx, getOrCreateMap, s""" public final void $getOrCreateMap() throws java.io.IOException { $buildSideCreateMap @@ -491,7 +491,7 @@ case class HashJoinExec(leftKeys: Seq[Expression], // this array will be used at batch level for grouping if possible dictionaryArrayTerm = ctx.freshName("dictionaryArray") dictionaryArrayInit = ctx.freshName("dictionaryArrayInit") - ctx.addNewFunction(dictionaryArrayInit, + dictionaryArrayInit = internals.addFunction(ctx, dictionaryArrayInit, s""" |private $className[] $dictionaryArrayInit() { | return null; diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala index d494a9f0ac..5a6233dfa8 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowExec.scala @@ -131,9 +131,9 @@ trait RowExec extends TableExec { val numOpRowsMetric = if (onExecutor) null else metricTerm(ctx, s"num${opType}Rows") val numOperations = ctx.freshName("numOperations") val childProduce = doChildProduce(ctx) - val mutateTable = ctx.freshName("mutateTable") + var mutateTable = ctx.freshName("mutateTable") - ctx.addNewFunction(mutateTable, + mutateTable = internals.addFunction(ctx, mutateTable, s""" |private void $mutateTable() throws java.io.IOException, java.sql.SQLException { | $childProduce @@ -190,11 +190,11 @@ trait RowExec extends TableExec { val field = ctx.freshName("field") val ev = input(col) val javaType = internals.javaType(f.dataType, ctx) - val columnSetterFunction = ctx.freshName("setColumnOfRow") + var columnSetterFunction = ctx.freshName("setColumnOfRow") val columnSetterCode = CodeGeneration.getColumnSetterFragment(col, f.dataType, connProps.dialect, internals.copyExprCode(ev, isNull = isNull, value = field, dt = f.dataType), stmt, schemaFields, ctx) - ctx.addNewFunction(columnSetterFunction, + columnSetterFunction = internals.addFunction(ctx, columnSetterFunction, s""" |private void $columnSetterFunction(final boolean $isNull, | final $javaType $field) throws java.sql.SQLException { diff --git a/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala b/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala index 88f996eddd..3cc17f22ed 100644 --- a/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/policy/policyFunctions.scala @@ -52,9 +52,7 @@ case class CurrentUser() extends LeafExpression with CodegenFallback { override def dataType: DataType = StringType - override def prettyName: String = "CURRENT_USER" - - private val userName: UTF8String = { + override def eval(input: InternalRow): Any = { val snappySession = SparkSession.getActiveSession.getOrElse( throw new IllegalStateException("SnappySession unavailable")).asInstanceOf[SnappySession] val owner = snappySession.conf.get(Attribute.USERNAME_ATTR, Constant.DEFAULT_SCHEMA) @@ -62,7 +60,7 @@ case class CurrentUser() extends LeafExpression with CodegenFallback { UTF8String.fromString(IdUtil.getUserAuthorizationId(owner)) } - override def eval(input: InternalRow): Any = userName + override def prettyName: String = "current_user" } /** diff --git a/store b/store index a42b29a657..c7f3ff3cb0 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit a42b29a657064119ba6bf3f375d2ebd259347a72 +Subproject commit c7f3ff3cb0decbf2a612a492d1b58d33e872249f From d8d9613046c3602174630ec9959f07147633b088 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 6 Mar 2020 18:59:37 +0530 Subject: [PATCH 65/80] fix dbtable in JDBCOptions update compatibility module builds to honour "ideaBuild" --- core/compatibility/spark-2.1/build.gradle | 18 +++++++++++++----- core/compatibility/spark-2.3/build.gradle | 18 +++++++++++++----- core/compatibility/spark-2.4.5/build.gradle | 18 +++++++++++++----- core/compatibility/spark-2.4/build.gradle | 18 +++++++++++++----- ...SnappyThinConnectorTableStatsProvider.scala | 4 ++-- .../sql/catalog/SmartConnectorHelper.scala | 6 ++++-- 6 files changed, 58 insertions(+), 24 deletions(-) diff --git a/core/compatibility/spark-2.1/build.gradle b/core/compatibility/spark-2.1/build.gradle index 6ef41350ee..2e041e4d32 100644 --- a/core/compatibility/spark-2.1/build.gradle +++ b/core/compatibility/spark-2.1/build.gradle @@ -35,11 +35,19 @@ dependencies { compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + if (System.properties.containsKey('ideaBuild') && new File(rootDir, 'spark/build.gradle').exists()) { + compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + } else { + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + } compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" diff --git a/core/compatibility/spark-2.3/build.gradle b/core/compatibility/spark-2.3/build.gradle index 682b700fa0..72ebfa5139 100644 --- a/core/compatibility/spark-2.3/build.gradle +++ b/core/compatibility/spark-2.3/build.gradle @@ -36,11 +36,19 @@ dependencies { compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + if (System.properties.containsKey('ideaBuild') && new File(rootDir, 'spark/build.gradle').exists()) { + compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + } else { + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + } compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" diff --git a/core/compatibility/spark-2.4.5/build.gradle b/core/compatibility/spark-2.4.5/build.gradle index ee9f1e7bdc..c6f118f626 100644 --- a/core/compatibility/spark-2.4.5/build.gradle +++ b/core/compatibility/spark-2.4.5/build.gradle @@ -39,11 +39,19 @@ dependencies { compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark245Version}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark245Version}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark245Version}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark245Version}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark245Version}") + if (System.properties.containsKey('ideaBuild') && new File(rootDir, 'spark/build.gradle').exists()) { + compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + } else { + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${spark245Version}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${spark245Version}") + } compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" diff --git a/core/compatibility/spark-2.4/build.gradle b/core/compatibility/spark-2.4/build.gradle index 8e324963de..fd5c7bedfd 100644 --- a/core/compatibility/spark-2.4/build.gradle +++ b/core/compatibility/spark-2.4/build.gradle @@ -38,11 +38,19 @@ dependencies { compileOnly 'org.slf4j:jcl-over-slf4j:' + slf4jVersion compileOnly 'org.slf4j:jul-to-slf4j:' + slf4jVersion - compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") - compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + if (System.properties.containsKey('ideaBuild') && new File(rootDir, 'spark/build.gradle').exists()) { + compile project(':snappy-spark:snappy-spark-core_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-catalyst_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-hive_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming_' + scalaBinaryVersion) + } else { + compileOnly("org.apache.spark:spark-core_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-catalyst_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-sql_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-hive_${scalaBinaryVersion}:${sparkCompatVersion}") + compileOnly("org.apache.spark:spark-streaming_${scalaBinaryVersion}:${sparkCompatVersion}") + } compileOnly "org.eclipse.jetty:jetty-servlet:${jettyVersion}" diff --git a/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala b/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala index d92fb13cd3..ced509e864 100644 --- a/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala +++ b/core/src/main/scala/io/snappydata/SnappyThinConnectorTableStatsProvider.scala @@ -53,10 +53,10 @@ object SnappyThinConnectorTableStatsProvider extends TableStatsProviderService { } case None => "" } - val jdbcOptions = new JDBCOptions(_url + securePart + ";route-query=false;", "", + val jdbcOptions = new JDBCOptions(_url + securePart + ";route-query=false;", "sys.tablestats", Map("driver" -> Constant.JDBC_CLIENT_DRIVER)) conn = JdbcUtils.createConnectionFactory(jdbcOptions)() - getStatsStmt = conn.prepareStatement("select * from sys.TABLESTATS") + getStatsStmt = conn.prepareStatement("select * from sys.tablestats") } def start(sc: SparkContext, url: String): Unit = { diff --git a/core/src/main/scala/io/snappydata/sql/catalog/SmartConnectorHelper.scala b/core/src/main/scala/io/snappydata/sql/catalog/SmartConnectorHelper.scala index db374f5ebd..cab465ee7f 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/SmartConnectorHelper.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/SmartConnectorHelper.scala @@ -34,15 +34,17 @@ import io.snappydata.{Constant, Property} import org.eclipse.collections.impl.map.mutable.UnifiedMap import org.apache.spark.sql.SparkSession -import org.apache.spark.sql.collection.{SharedUtils, SmartExecutorBucketPartition, Utils} +import org.apache.spark.sql.collection.{SharedUtils, SmartExecutorBucketPartition} import org.apache.spark.sql.execution.datasources.jdbc.{DriverRegistry, JDBCOptions, JdbcUtils} +import org.apache.spark.sql.sources.JdbcExtendedUtils import org.apache.spark.sql.store.StoreUtils import org.apache.spark.{Logging, Partition, SparkContext, SparkEnv} class SmartConnectorHelper(session: SparkSession, jdbcUrl: String) extends Logging { private val conn: Connection = { - val jdbcOptions = new JDBCOptions(jdbcUrl + getSecurePart + ";route-query=false;", "", + val jdbcOptions = new JDBCOptions(jdbcUrl + getSecurePart + ";route-query=false;", + JdbcExtendedUtils.DUMMY_TABLE_QUALIFIED_NAME, Map("driver" -> Constant.JDBC_CLIENT_DRIVER)) JdbcUtils.createConnectionFactory(jdbcOptions)() } From 7fc85af1d87f3520599c596d429cf355f896ef9b Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 6 Mar 2020 19:00:09 +0530 Subject: [PATCH 66/80] update spark-jobserver --- spark-jobserver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark-jobserver b/spark-jobserver index 416c254a07..3e24a56ebe 160000 --- a/spark-jobserver +++ b/spark-jobserver @@ -1 +1 @@ -Subproject commit 416c254a07bef6bf4d7e36350fd6168f9e003de1 +Subproject commit 3e24a56ebee06317106e1494d75167226e6bc531 From b5b3791d09a177252e56b3be0b5c9ec060a60d74 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 6 Mar 2020 20:05:30 +0530 Subject: [PATCH 67/80] fixing initialization issues in smart connector --- .../sql/internal/SnappySharedState24.java | 19 +++++++++++++-- .../spark/sql/internal/Spark24Internals.scala | 9 +++---- .../spark/sql/internal/SnappySharedState.java | 24 +++++++++++++++---- .../impl/SmartConnectorExternalCatalog.scala | 17 +++++++++---- .../org/apache/spark/sql/SnappySession.scala | 6 ++++- .../sql/internal/SnappySessionCatalog.scala | 4 ++-- 6 files changed, 61 insertions(+), 18 deletions(-) diff --git a/core/compatibility/spark-2.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java b/core/compatibility/spark-2.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java index 9988da11f3..96ac61da92 100644 --- a/core/compatibility/spark-2.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java +++ b/core/compatibility/spark-2.4/src/main/java/org/apache/spark/sql/internal/SnappySharedState24.java @@ -16,14 +16,16 @@ */ package org.apache.spark.sql.internal; +import io.snappydata.sql.catalog.SnappyExternalCatalog; import org.apache.spark.SparkContext; +import org.apache.spark.sql.SnappySession; import org.apache.spark.sql.catalyst.catalog.ExternalCatalogEvent; import org.apache.spark.sql.catalyst.catalog.ExternalCatalogEventListener; import org.apache.spark.sql.catalyst.catalog.ExternalCatalogWithListener; public final class SnappySharedState24 extends SnappySharedState { - private final ExternalCatalogWithListener catalogWrapper; + private volatile ExternalCatalogWithListener catalogWrapper; SnappySharedState24(SparkContext sparkContext) { super(sparkContext); @@ -39,8 +41,21 @@ public void onEvent(ExternalCatalogEvent event) { sparkContext().listenerBus().post(event); } }); + } + } + + @Override + public SnappyExternalCatalog getExternalCatalogInstance(SnappySession session) { + if (this.embedCatalog != null) { + return super.getExternalCatalogInstance(session); } else { - this.catalogWrapper = null; + synchronized (this) { + SnappyExternalCatalog catalog = super.getExternalCatalogInstance(session); + if (this.catalogWrapper == null) { + this.catalogWrapper = new ExternalCatalogWithListener(catalog); + } + return catalog; + } } } diff --git a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala index 1b1ba7751d..17d3130d7d 100644 --- a/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala +++ b/core/compatibility/spark-2.4/src/main/scala/org/apache/spark/sql/internal/Spark24Internals.scala @@ -435,13 +435,15 @@ class SmartConnectorExternalCatalog24(override val session: SparkSession) class SnappySessionCatalog24(override val snappySession: SnappySession, override val snappyExternalCatalog: SnappyExternalCatalog, - override val globalTempManager: GlobalTempViewManager, override val functionResourceLoader: FunctionResourceLoader, override val functionRegistry: FunctionRegistry, override val parser: SnappySqlParser, override val sqlConf: SQLConf, hadoopConf: Configuration, override val wrappedCatalog: Option[SnappySessionCatalog]) - extends SessionCatalog(() => snappyExternalCatalog, () => globalTempManager, functionRegistry, - sqlConf, hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog23_4 { + extends SessionCatalog(() => snappyExternalCatalog, + () => snappySession.sharedState.globalTempViewManager, functionRegistry, sqlConf, + hadoopConf, parser, functionResourceLoader) with SnappySessionCatalog23_4 { + + override def globalTempManager: GlobalTempViewManager = globalTempViewManager override protected def baseCreateTable(table: CatalogTable, ignoreIfExists: Boolean, validateTableLocation: Boolean): Unit = { @@ -467,7 +469,6 @@ class SnappySessionStateBuilder24(session: SnappySession, parentState: Option[Se new SnappySessionCatalog24( session, externalCatalog, - session.sharedState.globalTempViewManager, resourceLoader, functionRegistry, sqlParser, diff --git a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java index 6adde734ee..68ac806ae0 100644 --- a/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java +++ b/core/src/main/java/org/apache/spark/sql/internal/SnappySharedState.java @@ -49,6 +49,14 @@ public abstract class SnappySharedState extends SharedState { */ final SnappyHiveExternalCatalog embedCatalog; + /** + * An instance of ExternalCatalog implementation used for SnappyData in connector mode. + * + * Note that this is only to satisfy some calls like from globalTempViewManager that + * require a global instance else all normal calls should use SnappySessionCatalog. + */ + private volatile SnappyExternalCatalog connectorCatalog; + /** * Used to skip initializing meta-store in super's constructor. */ @@ -124,10 +132,16 @@ public SnappyExternalCatalog getExternalCatalogInstance(SnappySession session) { } else if (this.embedCatalog != null) { return this.embedCatalog; } else { - // create a new connector catalog instance for connector mode - // each instance has its own set of credentials for authentication - return SparkSupport$.MODULE$.internals(session.sparkContext()) - .newSmartConnectorExternalCatalog(session); + synchronized (this) { + // create a new connector catalog instance for connector mode + // each instance has its own set of credentials for authentication + SnappyExternalCatalog catalog = SparkSupport$.MODULE$.internals(session.sparkContext()) + .newSmartConnectorExternalCatalog(session); + if (this.connectorCatalog == null) { + this.connectorCatalog = catalog; + } + return catalog; + } } } @@ -144,7 +158,7 @@ public CacheManager cacheManager() { protected ExternalCatalog getExternalCatalog() { if (this.initialized) { // noinspection RedundantCast - return (ExternalCatalog)this.embedCatalog; + return (ExternalCatalog)(this.embedCatalog != null ? this.embedCatalog : connectorCatalog); } else { // in super constructor, no harm in returning super's value at this point return super.externalCatalog(); diff --git a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala index 83f9890942..4e0f277bce 100644 --- a/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala +++ b/core/src/main/scala/io/snappydata/sql/catalog/impl/SmartConnectorExternalCatalog.scala @@ -56,8 +56,17 @@ abstract class SmartConnectorExternalCatalog extends SnappyExternalCatalog { .asInstanceOf[ThinClientConnectorMode].url @GuardedBy("this") - private[this] var connectorHelper: SmartConnectorHelper = - new SmartConnectorHelper(session, jdbcUrl) + private[this] var _connectorHelper: SmartConnectorHelper = _ + + @GuardedBy("this") + private[this] def connectorHelper: SmartConnectorHelper = { + val helper = _connectorHelper + if (helper ne null) helper + else { + _connectorHelper = new SmartConnectorHelper(session, jdbcUrl) + _connectorHelper + } + } protected[catalog] def helper: SmartConnectorHelper = connectorHelper @@ -67,8 +76,8 @@ abstract class SmartConnectorExternalCatalog extends SnappyExternalCatalog { } catch { case e: SQLException if isConnectionException(e) => // attempt to create a new connection - connectorHelper.close() - connectorHelper = new SmartConnectorHelper(session, jdbcUrl) + if (_connectorHelper ne null) _connectorHelper.close() + _connectorHelper = new SmartConnectorHelper(session, jdbcUrl) function } } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index e98a4cf680..f45ca7a4e4 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -33,6 +33,7 @@ import com.pivotal.gemfirexd.internal.iapi.sql.ParameterValueSet import com.pivotal.gemfirexd.internal.iapi.types.TypeId import com.pivotal.gemfirexd.internal.iapi.{types => stypes} import com.pivotal.gemfirexd.internal.shared.common.StoredFormatIds +import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog import io.snappydata.sql.catalog.{CatalogObjectType, SnappyExternalCatalog} import io.snappydata.{Constant, Property, SnappyTableStatsProviderService} import org.eclipse.collections.impl.map.mutable.UnifiedMap @@ -689,7 +690,10 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) /** Close the session which will be unusable after this call. */ override def close(): Unit = synchronized { clear() - externalCatalog.close() + externalCatalog match { + case c: SmartConnectorExternalCatalog => c.close() + case _ => // nothing for global embedded catalog + } } /** diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 908531f5a5..2b297ac03e 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -58,8 +58,8 @@ import org.apache.spark.util.MutableURLClassLoader */ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { - val snappyExternalCatalog: SnappyExternalCatalog - val globalTempManager: GlobalTempViewManager + def snappyExternalCatalog: SnappyExternalCatalog + def globalTempManager: GlobalTempViewManager val functionResourceLoader: FunctionResourceLoader val functionRegistry: FunctionRegistry val snappySession: SnappySession From d3a0bb2fa95c51c85d547d04548fd344b6c01b9c Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 6 Mar 2020 20:16:35 +0530 Subject: [PATCH 68/80] update store module --- store | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store b/store index c7f3ff3cb0..10053c846b 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit c7f3ff3cb0decbf2a612a492d1b58d33e872249f +Subproject commit 10053c846b30c6c5e4f6f066ecdb9cf094aea476 From 2094103a0631367e8a22f33a1b53878f452ce4e2 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 6 Mar 2020 20:30:31 +0530 Subject: [PATCH 69/80] fix spark-unsafe deps --- core/build.gradle | 2 +- store | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/build.gradle b/core/build.gradle index 12e1269a14..483b6432cc 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -199,7 +199,7 @@ shadowJar { // avoid conflict with the 0.9.2 version in stock Spark relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' // avoid conflict with spark-unsafe in Spark >= 2.4.0 - relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' + // relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' // relocate eclipse collections for possible conflicts with user dependencies relocate 'org.eclipse.collections', 'io.snappydata.org.eclipse.collections' // relocate the guava's com.google packages diff --git a/store b/store index 10053c846b..5c4d0a54ab 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 10053c846b30c6c5e4f6f066ecdb9cf094aea476 +Subproject commit 5c4d0a54ab8d3f187c7bc927015da73be2f1c31e From db93deb22e55fe7d8b986c71e173931f44950f24 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 6 Mar 2020 20:39:29 +0530 Subject: [PATCH 70/80] changes to build.gradle deps --- core-product/build.gradle | 15 +++++++++++---- jdbc/build.gradle | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core-product/build.gradle b/core-product/build.gradle index 304aeecb99..64014e47ef 100644 --- a/core-product/build.gradle +++ b/core-product/build.gradle @@ -68,9 +68,17 @@ dependencies { testCompile("org.apache.spark:spark-streaming-kafka-0-10_${scalaBinaryVersion}:${sparkVersion}:tests") } - compile project(':snappy-store:snappydata-store-client') - compile project(':snappy-store:snappydata-store-core') - compile project(':snappy-store:snappydata-store-tools') + if (new File(rootDir, 'store/build.gradle').exists()) { + compile project(':snappy-store:snappydata-store-client') + compile project(':snappy-store:snappydata-store-core') + compile project(':snappy-store:snappydata-store-tools') + testCompile project(path: ':snappy-store:snappydata-store-tools', configuration: 'testOutput') + } else { + compile group: 'io.snappydata', name: 'snappydata-store-client', version: snappyStoreVersion + compile group: 'io.snappydata', name: 'snappydata-store-core', version: snappyStoreVersion + compile group: 'io.snappydata', name: 'snappydata-store-tools', version: snappyStoreVersion + testCompile group: 'io.snappydata', name: 'snappydata-store-tools', version: snappyStoreVersion, classifier: 'tests' + } compile project(":snappy-jdbc_${scalaBinaryVersion}") compile project(":snappy-encoders_${scalaBinaryVersion}") @@ -79,7 +87,6 @@ dependencies { testCompile "org.scalatest:scalatest_${scalaBinaryVersion}:${scalatestVersion}" testCompile project(compatProjectName) - testCompile project(path: ':snappy-store:snappydata-store-tools', configuration: 'testOutput') testRuntime files("${projectDir}/../tests/common/src/main/resources") testRuntime "org.pegdown:pegdown:${pegdownVersion}" diff --git a/jdbc/build.gradle b/jdbc/build.gradle index c9cd73c783..f3470b98e1 100644 --- a/jdbc/build.gradle +++ b/jdbc/build.gradle @@ -81,7 +81,7 @@ shadowJar { // avoid conflict with the 0.9.2 version in stock Spark relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' // avoid conflict with spark-unsafe in Spark >= 2.4.0 - relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' + // relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' mergeServiceFiles() exclude 'log4j.properties' From 7086e9eabbeb222992aa02dc524af61a17e81470 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Mon, 16 Mar 2020 05:05:55 +0530 Subject: [PATCH 71/80] fixes for regression issues and others --- cluster/build.gradle | 8 +++ core/build.gradle | 2 - .../spark/sql/internal/Spark21Internals.scala | 11 +--- .../org/apache/spark/sql/internal/plans.scala | 29 +-------- .../sql/internal/Spark23_4_Internals.scala | 9 +-- .../org/apache/spark/sql/internal/plans.scala | 28 +-------- .../cluster/CassandraSnappyDUnitTest.scala | 51 ++++++++------- .../cluster/SnappyJobTestSupport.scala | 8 +-- .../spark/sql/SnappyContextFunctions.scala | 5 +- .../org/apache/spark/sql/SnappyParser.scala | 2 +- .../apache/spark/sql/SnappyStrategies.scala | 22 +++---- .../org/apache/spark/sql/SparkInternals.scala | 16 +---- .../spark/sql/execution/ExistingPlans.scala | 6 +- .../columnar/JDBCAppendableRelation.scala | 2 +- .../sql/execution/row/RowFormatScanRDD.scala | 3 +- .../sql/execution/row/RowTableScan.scala | 3 +- .../sql/internal/ColumnTableBulkOps.scala | 4 +- .../apache/spark/sql/internal/session.scala | 51 ++++++++++++--- .../spark/sql/row/JDBCMutableRelation.scala | 2 +- .../spark/sql/sources/StoreStrategy.scala | 32 +++------- .../spark/sql/types/TypeUtilities.scala | 63 +++++++++++++++++++ .../store/ColumnTableBatchInsertTest.scala | 15 +++-- .../apache/spark/sql/store/MetadataTest.scala | 58 +++++++++-------- ...SnappyStoreSinkProviderSecuritySuite.scala | 6 +- jdbc/build.gradle | 2 - spark | 2 +- store | 2 +- 27 files changed, 246 insertions(+), 196 deletions(-) diff --git a/cluster/build.gradle b/cluster/build.gradle index 5515123d95..7b0fc0d167 100644 --- a/cluster/build.gradle +++ b/cluster/build.gradle @@ -55,6 +55,10 @@ dependencies { if (rootProject.hasProperty('k8s')) { compile project(':snappy-spark:snappy-spark-kubernetes_' + scalaBinaryVersion) } + if (rootProject.hasProperty('flume')) { + compile project(':snappy-spark:snappy-spark-streaming-flume_' + scalaBinaryVersion) + compile project(':snappy-spark:snappy-spark-streaming-flume-sink_' + scalaBinaryVersion) + } testCompile project(path: ':snappy-spark:snappy-spark-sql_' + scalaBinaryVersion, configuration: 'testOutput') @@ -81,6 +85,10 @@ dependencies { if (rootProject.hasProperty('k8s')) { compile 'io.snappydata:snappy-spark-kubernetes_' + scalaBinaryVersion + ':' + snappySparkVersion } + if (rootProject.hasProperty('flume')) { + compile 'io.snappydata:snappy-spark-streaming-flume_' + scalaBinaryVersion + ':' + snappySparkVersion + compile 'io.snappydata:snappy-spark-streaming-flume-sink_' + scalaBinaryVersion + ':' + snappySparkVersion + } testCompile group: 'io.snappydata', name: 'snappy-spark-sql_' + scalaBinaryVersion, version: snappySparkVersion, classifier: 'tests' diff --git a/core/build.gradle b/core/build.gradle index 483b6432cc..c52c7b1552 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -198,8 +198,6 @@ shadowJar { zip64 = true // avoid conflict with the 0.9.2 version in stock Spark relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // avoid conflict with spark-unsafe in Spark >= 2.4.0 - // relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' // relocate eclipse collections for possible conflicts with user dependencies relocate 'org.eclipse.collections', 'io.snappydata.org.eclipse.collections' // relocate the guava's com.google packages diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 86213e7627..b4559e18ff 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -303,20 +303,14 @@ class Spark21Internals(override val version: String) extends SparkInternals { insert.copy(child = newChild) } - override def newInsertPlanWithCountOutput(table: LogicalPlan, + override def newInsertIntoTable(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { - new Insert21(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) + InsertIntoTable(table, partition, child, OverwriteOptions(enabled = overwrite), ifNotExists) } override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite.enabled - override def getOverwriteOption(insert: InsertIntoDataSourceCommand): Boolean = { - insert.overwrite.enabled - } - - override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifNotExists - override def newGroupingSet(groupingSets: Seq[Seq[Expression]], groupByExprs: Seq[Expression], child: LogicalPlan, aggregations: Seq[NamedExpression]): LogicalPlan = { @@ -962,6 +956,7 @@ class SnappySessionState21(override val snappySession: SnappySession) new PreprocessTable(state) :: ResolveAliasInGroupBy :: new FindDataSourceTable(session) :: + ResolveInsertIntoPlan :: DataSourceAnalysis(conf) :: AnalyzeMutableOperations(session, this) :: ResolveQueryHints(session) :: diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala index 876be0dfd6..b5973c584b 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -22,36 +22,11 @@ import io.snappydata.{HintName, QueryHint} import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} -import org.apache.spark.sql.catalyst.plans.logical.{BroadcastHint, InsertIntoTable, LogicalPlan, OverwriteOptions} +import org.apache.spark.sql.catalyst.plans.logical.{BroadcastHint, LogicalPlan} import org.apache.spark.sql.execution.columnar.ColumnTableScan import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{PartitionedDataSourceScan, SparkPlan} -import org.apache.spark.sql.types.{LongType, StructType} - - -/** - * Unlike Spark's InsertIntoTable this plan provides the count of rows - * inserted as the output. - */ -final class Insert21( - table: LogicalPlan, - partition: Map[String, Option[String]], - child: LogicalPlan, - overwrite: OverwriteOptions, - ifNotExists: Boolean) - extends InsertIntoTable(table, partition, child, overwrite, ifNotExists) { - - override def output: Seq[Attribute] = AttributeReference( - "count", LongType)() :: Nil - - override def copy(table: LogicalPlan = table, - partition: Map[String, Option[String]] = partition, - child: LogicalPlan = child, - overwrite: OverwriteOptions = overwrite, - ifNotExists: Boolean = ifNotExists): Insert21 = { - new Insert21(table, partition, child, overwrite, ifNotExists) - } -} +import org.apache.spark.sql.types.StructType /** * An extended version of [[BroadcastHint]] to encapsulate any kind of hint rather diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index d61c1f1fc4..ae5fcded4c 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -235,18 +235,14 @@ abstract class Spark23_4_Internals extends SparkInternals { insert.copy(query = newChild) } - override def newInsertPlanWithCountOutput(table: LogicalPlan, + override def newInsertIntoTable(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable = { - new Insert23(table, partition, child, overwrite, ifNotExists) + InsertIntoTable(table, partition, child, overwrite, ifNotExists) } override def getOverwriteOption(insert: InsertIntoTable): Boolean = insert.overwrite - override def getOverwriteOption(insert: InsertIntoDataSourceCommand): Boolean = insert.overwrite - - override def getIfNotExistsOption(insert: InsertIntoTable): Boolean = insert.ifPartitionNotExists - override def newGroupingSet(groupingSets: Seq[Seq[Expression]], groupByExprs: Seq[Expression], child: LogicalPlan, aggregations: Seq[NamedExpression]): LogicalPlan = { @@ -621,6 +617,7 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, RelationConversions(s.conf, s.catalog.asInstanceOf[HiveSessionCatalog]), state) :: PreprocessTableCreation(session) :: PreprocessTableInsertion(conf) :: + ResolveInsertIntoPlan :: DataSourceAnalysis(conf) :: new HiveConditionalRule(_ => HiveAnalysis, state) :: session.contextFunctions.getPostHocResolutionRules) ++ customPostHocResolutionRules diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala index 51ff513b04..1500482ded 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -23,35 +23,11 @@ import org.apache.spark.rdd.{EmptyRDD, RDD} import org.apache.spark.sql.JoinStrategy import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} -import org.apache.spark.sql.catalyst.plans.logical.{HintInfo, InsertIntoTable, LogicalPlan, ResolvedHint} +import org.apache.spark.sql.catalyst.plans.logical.{HintInfo, LogicalPlan, ResolvedHint} import org.apache.spark.sql.execution.columnar.ColumnTableScan import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{PartitionedDataSourceScan, SparkPlan} -import org.apache.spark.sql.types.{LongType, StructType} - -/** - * Unlike Spark's InsertIntoTable this plan provides the count of rows - * inserted as the output. - */ -final class Insert23( - table: LogicalPlan, - partition: Map[String, Option[String]], - child: LogicalPlan, - overwrite: Boolean, - ifNotExists: Boolean) - extends InsertIntoTable(table, partition, child, overwrite, ifNotExists) { - - override def output: Seq[Attribute] = AttributeReference( - "count", LongType)() :: Nil - - override def copy(table: LogicalPlan = table, - partition: Map[String, Option[String]] = partition, - child: LogicalPlan = child, - overwrite: Boolean = overwrite, - ifNotExists: Boolean = ifNotExists): Insert23 = { - new Insert23(table, partition, child, overwrite, ifNotExists) - } -} +import org.apache.spark.sql.types.StructType /** * An extension to [[ResolvedHint]] to encapsulate any kind of hint rather diff --git a/core/src/dunit/scala/io/snappydata/cluster/CassandraSnappyDUnitTest.scala b/core/src/dunit/scala/io/snappydata/cluster/CassandraSnappyDUnitTest.scala index ae361828ba..b870dccf80 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/CassandraSnappyDUnitTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/CassandraSnappyDUnitTest.scala @@ -43,6 +43,13 @@ class CassandraSnappyDUnitTest(val s: String) val scriptPath = s"$snappyProductDir/../../../cluster/src/test/resources/scripts" val downloadPath = s"$snappyProductDir/../../../dist" + private val version: String = System.getenv("SPARK_CONNECTOR_VERSION") match { + case null => "2.4.3" + case v if v.startsWith("2.4") => "2.4.3" + case v if v.startsWith("2.3") => "2.3.3" + case _ => "2.0.12" + } + lazy val downloadLoc = { val path = if (System.getenv().containsKey("GRADLE_USER_HOME")) { Paths.get(System.getenv("GRADLE_USER_HOME"), "cassandraDist") @@ -95,27 +102,24 @@ class CassandraSnappyDUnitTest(val s: String) "spark-xml_2.11/0.5.0/spark-xml_2.11-0.5.0.jar") val cassandraJarLoc = getLoc(downloadLoc) cassandraConnectorJarLoc = - getUserAppJarLocation("spark-cassandra-connector_2.11-2.0.7.jar", downloadLoc) + getUserAppJarLocation(s"spark-cassandra-connector_2.11-$version.jar", downloadLoc) if (cassandraJarLoc.nonEmpty && cassandraConnectorJarLoc != null) { cassandraClusterLoc = cassandraJarLoc.head } else { ("curl -OL http://www-us.apache.org/dist/cassandra/" + s"2.1.21/apache-cassandra-2.1.21-bin.tar.gz").!! ("curl -OL https://repo1.maven.org/maven2/com/datastax/spark/" + - "spark-cassandra-connector_2.11/2.0.7/" + - "spark-cassandra-connector_2.11-2.0.7.jar").!! + s"spark-cassandra-connector_2.11/$version/" + + s"spark-cassandra-connector_2.11-$version.jar").!! val jarLoc = getUserAppJarLocation("apache-cassandra-2.1.21-bin.tar.gz", currDir) val connectorJarLoc = - getUserAppJarLocation("spark-cassandra-connector_2.11-2.0.7.jar", currDir) + getUserAppJarLocation(s"spark-cassandra-connector_2.11-$version.jar", currDir) ("tar xvf " + jarLoc).!! val loc = getLoc(currDir).head - if (downloadLoc.nonEmpty) { - s"rm -rf $downloadLoc/*" - } s"cp -r $loc $downloadLoc".!! s"mv $connectorJarLoc $downloadLoc".!! cassandraClusterLoc = s"$downloadLoc/apache-cassandra-2.1.21" - cassandraConnectorJarLoc = s"$downloadLoc/spark-cassandra-connector_2.11-2.0.7.jar" + cassandraConnectorJarLoc = s"$downloadLoc/spark-cassandra-connector_2.11-$version.jar" } logInfo("CassandraClusterLocation : " + cassandraClusterLoc + " CassandraConnectorJarLoc : " + cassandraConnectorJarLoc) @@ -129,7 +133,7 @@ class CassandraSnappyDUnitTest(val s: String) logInfo(s"Stopping snappy cluster in $snappyProductDir/work") logInfo((snappyProductDir + "/sbin/snappy-stop-all.sh").!!) - s"rm -rf $snappyProductDir/work".!! + // s"rm -rf $snappyProductDir/work".!! Files.deleteIfExists(Paths.get(snappyProductDir, "conf", "locators")) Files.deleteIfExists(Paths.get(snappyProductDir, "conf", "leads")) Files.deleteIfExists(Paths.get(snappyProductDir, "conf", "servers")) @@ -221,8 +225,8 @@ class CassandraSnappyDUnitTest(val s: String) count } - private var user1Conn: Connection = null - private var stmt1: Statement = null + private var user1Conn: Connection = _ + private var stmt1: Statement = _ def testDeployPackageWithCassandra(): Unit = { (cassandraClusterLoc + s"/bin/cqlsh -f $scriptPath/cassandra_script1").!! @@ -239,7 +243,7 @@ class CassandraSnappyDUnitTest(val s: String) def doTestPackageViaSnappyJobCommand(): Unit = { logInfo("Running testPackageViaSnappyJobCommand") submitAndWaitForCompletion("io.snappydata.cluster.jobs.CassandraSnappyConnectionJob" , - "--packages com.datastax.spark:spark-cassandra-connector_2.11:2.4.1" + + s"--packages com.datastax.spark:spark-cassandra-connector_2.11:$version" + " --conf spark.cassandra.connection.host=localhost") logInfo("Job completed") } @@ -248,7 +252,8 @@ class CassandraSnappyDUnitTest(val s: String) logInfo("Running testDeployPackageWithExternalTableInSnappyShell") SnappyShell("CreateExternalTable", Seq(s"connect client 'localhost:$netPort';", - "deploy package cassandraJar 'com.datastax.spark:spark-cassandra-connector_2.11:2.0.7';", + "deploy package cassandraJar " + + s"'com.datastax.spark:spark-cassandra-connector_2.11:$version';", "drop table if exists customer2;", "create external table customer2 using org.apache.spark.sql.cassandra" + " options (table 'customer', keyspace 'test'," + @@ -262,7 +267,7 @@ class CassandraSnappyDUnitTest(val s: String) def doTestDeployPackageWithExternalTable(): Unit = { logInfo("Running testDeployPackageWithExternalTable") stmt1.execute("deploy package cassandraJar " + - "'com.datastax.spark:spark-cassandra-connector_2.11:2.0.7'") + s"'com.datastax.spark:spark-cassandra-connector_2.11:$version'") stmt1.execute("drop table if exists customer2") stmt1.execute("create external table customer2 using org.apache.spark.sql.cassandra options" + " (table 'customer', keyspace 'test', spark.cassandra.input.fetch.size_in_rows '200000'," + @@ -270,6 +275,8 @@ class CassandraSnappyDUnitTest(val s: String) stmt1.execute("select * from customer2") assert(getCount(stmt1.getResultSet) == 3) + stmt1.execute("drop table if exists customer2") + stmt1.execute("list packages") assert(getCount(stmt1.getResultSet) == 1) @@ -278,7 +285,6 @@ class CassandraSnappyDUnitTest(val s: String) stmt1.execute("list packages") assert(getCount(stmt1.getResultSet) == 0) - stmt1.execute("drop table if exists customer2") try { stmt1.execute("create external table customer2 using org.apache.spark.sql.cassandra options" + " (table 'customer', keyspace 'test', " + @@ -292,7 +298,7 @@ class CassandraSnappyDUnitTest(val s: String) case t: Throwable => assert(assertion = false, s"Unexpected exception $t") } stmt1.execute("deploy package cassandraJar " + - "'com.datastax.spark:spark-cassandra-connector_2.11:2.0.7'") + s"'com.datastax.spark:spark-cassandra-connector_2.11:$version'") stmt1.execute("deploy package GoogleGSONAndAvro " + "'com.google.code.gson:gson:2.8.5,com.databricks:spark-avro_2.11:4.0.0' " + s"path '$snappyProductDir/testdeploypackagepath'") @@ -392,9 +398,9 @@ class CassandraSnappyDUnitTest(val s: String) try { stmt1.execute("create external table books2 using com.databricks.spark.xml options" + s" (path '$snappyProductDir/books.xml')") - assert(false, "External table on xml should have failed.") + assert(assertion = false, "External table on xml should have failed.") } catch { - case sqle: SQLException if (sqle.getSQLState == "42000") => // expected + case sqle: SQLException if sqle.getSQLState == "42000" => // expected case t: Throwable => throw t } } @@ -408,6 +414,8 @@ class CassandraSnappyDUnitTest(val s: String) stmt1.execute("select * from customer") assert(getCount(stmt1.getResultSet) == 3) + stmt1.execute("drop table if exists customer") + stmt1.execute("list packages") assert(getCount(stmt1.getResultSet) == 1) @@ -416,7 +424,6 @@ class CassandraSnappyDUnitTest(val s: String) stmt1.execute("list packages") assert(getCount(stmt1.getResultSet) == 0) - stmt1.execute("drop table if exists customer") try { submitAndWaitForCompletion("io.snappydata.cluster.jobs.CassandraSnappyConnectionJob" , "--conf spark.cassandra.connection.host=localhost") @@ -430,20 +437,22 @@ class CassandraSnappyDUnitTest(val s: String) def doTestDeployPackageWithSnappyJob(): Unit = { logInfo("Running testDeployPackageWithSnappyJob") stmt1.execute("deploy package cassandraJar " + - "'com.datastax.spark:spark-cassandra-connector_2.11:2.0.7'") + s"'com.datastax.spark:spark-cassandra-connector_2.11:$version'") stmt1.execute("drop table if exists customer") submitAndWaitForCompletion("io.snappydata.cluster.jobs.CassandraSnappyConnectionJob" , "--conf spark.cassandra.connection.host=localhost") stmt1.execute("select * from customer") assert(getCount(stmt1.getResultSet) == 3) + stmt1.execute("drop table if exists customer") + stmt1.execute("list packages") assert(getCount(stmt1.getResultSet) == 1) stmt1.execute("undeploy cassandraJar") stmt1.execute("list packages") assert(getCount(stmt1.getResultSet) == 0) - stmt1.execute("drop table if exists customer") + try { submitAndWaitForCompletion("io.snappydata.cluster.jobs.CassandraSnappyConnectionJob" , "--conf spark.cassandra.connection.host=localhost") diff --git a/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala b/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala index 736306261f..dea876be1a 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala @@ -16,15 +16,15 @@ */ package io.snappydata.cluster -import java.io.{File, FileFilter} +import java.io.File + +import scala.sys.process._ import io.snappydata.test.dunit.DistributedTestBase import io.snappydata.test.dunit.DistributedTestBase.WaitCriterion +import org.apache.commons.lang.StringUtils import org.apache.spark.{Logging, TestPackageUtils} -import scala.sys.process._ - -import org.apache.commons.lang.StringUtils /** * A helper trait containing functions for managing snappy jobs. diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala index 3b98be5909..36d86a1e17 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContextFunctions.scala @@ -31,7 +31,7 @@ import org.apache.spark.sql.catalyst.{InternalRow, TableIdentifier} import org.apache.spark.sql.execution.closedform.{ClosedFormStats, ErrorAggregate} import org.apache.spark.sql.execution.common.HAC import org.apache.spark.sql.execution.exchange.{EnsureRequirements, ReuseExchange} -import org.apache.spark.sql.execution.{CollapseCodegenStages, PlanLater, QueryExecution, SparkPlan, TopK} +import org.apache.spark.sql.execution.{CollapseCodegenStages, PlanLater, QueryExecution, ReuseSubquery, SparkPlan, TopK} import org.apache.spark.sql.hive.{OptimizeSortAndFilePlans, SnappyAnalyzer} import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect} import org.apache.spark.sql.sources.BaseRelation @@ -157,7 +157,8 @@ class SnappyContextFunctions(val session: SnappySession) extends SparkSupport { CollapseCollocatedPlans(session), CollapseCodegenStages(session.sessionState.conf), InsertCachedPlanFallback(session, topLevel), - ReuseExchange(session.sessionState.conf)) + ReuseExchange(session.sessionState.conf), + ReuseSubquery(session.sessionState.conf)) def queryPreparations(topLevel: Boolean): Seq[Rule[SparkPlan]] = if (topLevel) queryPreparationsTopLevel else queryPreparationsNode diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index eda8531c20..6f16d6dc3c 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -1202,7 +1202,7 @@ class SnappyParser(session: SnappySession) protected final def insert: Rule1[LogicalPlan] = rule { INSERT ~ ((OVERWRITE ~ push(true)) | (INTO ~ push(false))) ~ TABLE.? ~ baseRelation ~ queryTerm ~> ((overwrite: Boolean, r: LogicalPlan, - s: LogicalPlan) => internals.newInsertPlanWithCountOutput( + s: LogicalPlan) => internals.newInsertIntoTable( r, Map.empty[String, Option[String]], s, overwrite, ifNotExists = false)) | INSERT ~ OVERWRITE ~ LOCAL.? ~ DIRECTORY ~ ANY. + ~> (() => sparkParser.parsePlan(input.sliceString(0, input.length))) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala index 39282a7e32..3507cfbc0b 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyStrategies.scala @@ -834,17 +834,15 @@ case class InsertCachedPlanFallback(session: SnappySession, topLevel: Boolean) case class TokenizeSubqueries(sparkSession: SparkSession) extends Rule[SparkPlan] with SparkSupport { - def apply(plan: SparkPlan): SparkPlan = { - plan.transformAllExpressions { - case subquery: catalyst.expressions.ScalarSubquery => - val executedPlan = new QueryExecution(sparkSession, subquery.plan).executedPlan - new TokenizedScalarSubquery(SubqueryExec(s"subquery${subquery.exprId.id}", - executedPlan), subquery.exprId) - case expr if internals.isPredicateSubquery(expr) && expr.children.size == 1 => - val subquery = expr.asInstanceOf[SubqueryExpression] - val executedPlan = new QueryExecution(sparkSession, subquery.plan).executedPlan - InSubquery(subquery.children.head, SubqueryExec(s"subquery${subquery.exprId.id}", - executedPlan), subquery.exprId) - } + def apply(plan: SparkPlan): SparkPlan = plan.transformAllExpressions { + case subquery: catalyst.expressions.ScalarSubquery => + val executedPlan = new QueryExecution(sparkSession, subquery.plan).executedPlan + new TokenizedScalarSubquery(SubqueryExec(s"subquery${subquery.exprId.id}", + executedPlan), subquery.exprId) + case expr if internals.isPredicateSubquery(expr) && expr.children.size == 1 => + val subquery = expr.asInstanceOf[SubqueryExpression] + val executedPlan = new QueryExecution(sparkSession, subquery.plan).executedPlan + InSubquery(subquery.children.head, SubqueryExec(s"subquery${subquery.exprId.id}", + executedPlan), subquery.exprId) } } diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index b66c5036bf..cc98a0acca 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -38,7 +38,7 @@ import org.apache.spark.sql.execution.closedform.{ClosedFormColumnExtractor, Err import org.apache.spark.sql.execution.columnar.{ColumnTableScan, InMemoryRelation} import org.apache.spark.sql.execution.command.RunnableCommand import org.apache.spark.sql.execution.common.HAC -import org.apache.spark.sql.execution.datasources.{DataSource, InsertIntoDataSourceCommand, LogicalRelation} +import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.Exchange import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.ui.SQLTab @@ -332,9 +332,9 @@ trait SparkInternals extends Logging { def withNewChild(insert: InsertIntoTable, newChild: LogicalPlan): InsertIntoTable /** - * Create a new INSERT plan that has a LONG count of rows as its output. + * Create a new [[InsertIntoTable]] plan. */ - def newInsertPlanWithCountOutput(table: LogicalPlan, partition: Map[String, Option[String]], + def newInsertIntoTable(table: LogicalPlan, partition: Map[String, Option[String]], child: LogicalPlan, overwrite: Boolean, ifNotExists: Boolean): InsertIntoTable /** @@ -342,16 +342,6 @@ trait SparkInternals extends Logging { */ def getOverwriteOption(insert: InsertIntoTable): Boolean - /** - * Return true if overwrite is enabled in the insert plan else false. - */ - def getOverwriteOption(insert: InsertIntoDataSourceCommand): Boolean - - /** - * Return true if "ifNotExists" is enabled in the insert plan else false. - */ - def getIfNotExistsOption(insert: InsertIntoTable): Boolean - /** * Create an expression for GROUPING SETS. */ diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index 57ef45bb83..e778d9129c 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -418,8 +418,10 @@ private[sql] final case class ZipPartitionScan(basePlan: CodegenSupport, final class TokenizedScalarSubquery(_plan: SubqueryExec, _exprId: ExprId) extends ScalarSubquery(_plan, _exprId) { - override def withNewPlan(query: SubqueryExec): ScalarSubquery = - new TokenizedScalarSubquery(query, exprId) + override def copy(plan: SubqueryExec = plan, exprId: ExprId = exprId): ScalarSubquery = + new TokenizedScalarSubquery(plan, exprId) + + override def withNewPlan(query: SubqueryExec): ScalarSubquery = copy(plan = query) override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { val result = CatalystTypeConverters.convertToCatalyst(super.eval(null)) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala index 6970b1fc1f..7f3d099b60 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/columnar/JDBCAppendableRelation.scala @@ -130,7 +130,7 @@ abstract case class JDBCAppendableRelation( // use the Insert plan for best performance // that will use the getInsertPlan above (in StoreStrategy) sqlContext.sessionState.executePlan( - internals.newInsertPlanWithCountOutput( + internals.newInsertIntoTable( table = LogicalRelation(this), partition = Map.empty[String, Option[String]], child = data.logicalPlan, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala index 7821bf4181..a1db4bb49d 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowFormatScanRDD.scala @@ -61,7 +61,8 @@ class RowFormatScanRDD(@transient val session: SnappySession, protected var connProperties: ConnectionProperties, @transient private[sql] val filters: Array[Expression] = Array.empty[Expression], @transient protected val partitionEvaluator: () => Array[Partition] = () => - Array.empty[Partition], protected val partitionPruner: () => Int = () => -1, + Array.empty[Partition], + @transient protected val partitionPruner: () => Int = () => -1, protected var commitTx: Boolean, protected var delayRollover: Boolean, protected var projection: Array[Int], @transient protected val region: Option[LocalRegion]) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala index 90b99261e1..407dc8e02e 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/row/RowTableScan.scala @@ -167,7 +167,8 @@ abstract case class RowTableScan( s"final $javaType $col = $rowVar.getAsInt($pos, $holder);" case StringType => useHolder = false - s"final $javaType $col = $rowVar.getAsUTF8String($ordinal);" + val typeUtilsClass = TypeUtilities.getClass.getName.replace("$", "") + s"final $javaType $col = $typeUtilsClass.readUTF8String($rowVar, $ordinal);" case LongType => s"final $javaType $col = $rowVar.getAsLong($pos, $holder);" case BooleanType => diff --git a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala index a0244dd4bd..a62b8787d9 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/ColumnTableBulkOps.scala @@ -102,7 +102,7 @@ object ColumnTableBulkOps extends SparkSupport { } Join(subQuery, updateSubQuery, LeftAnti, condition) } - val insertPlan = internals.newInsertPlanWithCountOutput(table, Map.empty[String, + val insertPlan = internals.newInsertIntoTable(table, Map.empty[String, Option[String]], Project(subQuery.output, insertChild), overwrite = false, ifNotExists = false) transFormedPlan = PutIntoColumnTable(table, analyzer.execute(insertPlan), analyzedUpdate) @@ -200,7 +200,7 @@ object ColumnTableBulkOps extends SparkSupport { table = UnresolvedRelation(tableIdent), child = ds.logicalPlan) } else { - internals.newInsertPlanWithCountOutput( + internals.newInsertIntoTable( table = UnresolvedRelation(tableIdent), partition = Map.empty[String, Option[String]], child = ds.logicalPlan, diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index f14bf069b4..c034353461 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -33,8 +33,9 @@ import org.apache.spark.SparkConf import org.apache.spark.internal.config.{ConfigBuilder, ConfigEntry, TypedConfigBuilder} import org.apache.spark.sql.catalyst.analysis import org.apache.spark.sql.catalyst.analysis.{EliminateSubqueryAliases, UnresolvedAttribute, UnresolvedTableValuedFunction} -import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, Cast, Contains, EndsWith, EqualTo, Expression, Like, Literal, NamedExpression, StartsWith} +import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, AttributeReference, Cast, Contains, EndsWith, EqualTo, Expression, Like, Literal, NamedExpression, StartsWith} import org.apache.spark.sql.catalyst.optimizer.ReorderJoin +import org.apache.spark.sql.catalyst.plans.QueryPlan import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan, Project, UnaryNode, Filter => LogicalFilter} import org.apache.spark.sql.catalyst.rules.Rule import org.apache.spark.sql.collection.Utils @@ -47,7 +48,7 @@ import org.apache.spark.sql.hive.SnappySessionState import org.apache.spark.sql.internal.StaticSQLConf.CATALOG_IMPLEMENTATION import org.apache.spark.sql.row.JDBCMutableRelation import org.apache.spark.sql.sources._ -import org.apache.spark.sql.types.{DecimalType, StringType} +import org.apache.spark.sql.types.{DecimalType, LongType, StringType} import org.apache.spark.sql.{AnalysisException, DMLExternalTable, SaveMode, SnappyContext, SnappyParser, SnappySession, SparkSupport} import org.apache.spark.unsafe.types.UTF8String @@ -664,7 +665,7 @@ private[sql] final class PreprocessTable(state: SnappySessionState) if (mode == SaveMode.Append && queryOpt.isDefined && (isBuiltin || (tableDesc.bucketSpec.isEmpty && tableDesc.partitionColumnNames.isEmpty)) && state.catalog.tableExists(tableIdent)) { - internals.newInsertPlanWithCountOutput( + internals.newInsertIntoTable( table = internals.newUnresolvedRelation(tableIdent, None), partition = Map.empty, child = queryOpt.get, overwrite = false, ifNotExists = false) } else if (isBuiltin) { @@ -715,10 +716,7 @@ private[sql] final class PreprocessTable(state: SnappySessionState) d case (t, c) => if ((t eq i.table) && (c eq query)) i - else { - internals.newInsertPlanWithCountOutput(t, i.partition, c, isOverwrite, - internals.getIfNotExistsOption(i)) - } + else i.copy(t, i.partition, c, i.overwrite) } // resolve PUT INTO TABLE(columns) ... @@ -879,6 +877,45 @@ private[sql] case class ConditionalPreWriteCheck(sparkPreWriteCheck: LogicalPlan } } +/** + * Unlike Spark's `InsertIntoTable` this plan provides the count of rows + * inserted as the output. + * + * Note that the underlying BaseRelation should always be a [[PlanInsertableRelation]]. + */ +case class InsertIntoPlan(logicalRelation: LogicalRelation, + query: LogicalPlan, overwrite: Boolean) extends LogicalPlan { + + override lazy val output: Seq[Attribute] = AttributeReference("count", LongType)() :: Nil + + override def children: Seq[LogicalPlan] = Nil + + override protected def innerChildren: Seq[QueryPlan[_]] = query :: Nil + + val relation: PlanInsertableRelation = + logicalRelation.relation.asInstanceOf[PlanInsertableRelation] +} + +private[sql] object ResolveInsertIntoPlan extends Rule[LogicalPlan] with SparkSupport { + + override def apply(plan: LogicalPlan): LogicalPlan = internals.logicalPlanResolveDown(plan) { + case i@InsertIntoTable(l: LogicalRelation, _, query, _, _) + if l.relation.isInstanceOf[PlanInsertableRelation] && l.resolved && query.resolved => + + // check that insert with overwrite does not refer to the source table in the query + val isOverwrite = internals.getOverwriteOption(i) + if (isOverwrite) { + query.foreach { + case lr: LogicalRelation if lr.relation == l.relation => + throw new AnalysisException( + "Cannot insert overwrite into table that is also being read from.") + case _ => + } + } + InsertIntoPlan(l, query, isOverwrite) + } +} + /** * Deals with any escape characters in the LIKE pattern in optimization. * Does not deal with startsAndEndsWith equivalent of Spark's LikeSimplification diff --git a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala index f29c8bea86..0aa20bb193 100644 --- a/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala +++ b/core/src/main/scala/org/apache/spark/sql/row/JDBCMutableRelation.scala @@ -192,7 +192,7 @@ abstract case class JDBCMutableRelation( // use the Insert plan for best performance // that will use the getInsertPlan above (in StoreStrategy) sqlContext.sessionState.executePlan( - internals.newInsertPlanWithCountOutput( + internals.newInsertIntoTable( table = LogicalRelation(this), partition = Map.empty[String, Option[String]], child = data.logicalPlan, diff --git a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala index 3aa81931e3..da8ec96fd5 100644 --- a/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala +++ b/core/src/main/scala/org/apache/spark/sql/sources/StoreStrategy.scala @@ -18,16 +18,15 @@ package org.apache.spark.sql.sources import scala.reflect.{ClassTag, classTag} -import org.apache.spark.rdd.RDD -import org.apache.spark.sql.{Strategy, _} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} -import org.apache.spark.sql.catalyst.plans.logical.{InsertIntoTable, LogicalPlan} +import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.command.{ExecutedCommandExec, RunnableCommand} -import org.apache.spark.sql.execution.datasources.{InsertIntoDataSourceCommand, LogicalRelation} +import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.hive.SnappySessionState -import org.apache.spark.sql.internal.PutIntoColumnTable +import org.apache.spark.sql.internal.{InsertIntoPlan, PutIntoColumnTable} import org.apache.spark.sql.types.{DataType, LongType} +import org.apache.spark.sql.{Strategy, _} /** * Support for DML and other operations on external tables. @@ -45,23 +44,12 @@ class StoreStrategy(sessionState: SnappySessionState) extends Strategy with Spar def apply(plan: LogicalPlan): Seq[SparkPlan] = plan match { case p: EncoderPlan[_] => val plan = p.asInstanceOf[EncoderPlan[Any]] - EncoderScanExec(plan.rdd.asInstanceOf[RDD[Any]], - plan.encoder, plan.isFlat, plan.output) :: Nil - - case i: InsertIntoTable if i.partition.isEmpty && - !internals.getIfNotExistsOption(i) && i.table.isInstanceOf[LogicalRelation] && - i.table.asInstanceOf[LogicalRelation].relation.isInstanceOf[PlanInsertableRelation] => - val l = i.table.asInstanceOf[LogicalRelation] - val p = l.relation.asInstanceOf[PlanInsertableRelation] - val preAction = if (internals.getOverwriteOption(i)) () => p.truncate() else () => () - ExecutePlan(p.getInsertPlan(l, planLater(i.children.head)), preAction) :: Nil - - case i: InsertIntoDataSourceCommand - if i.logicalRelation.relation.isInstanceOf[PlanInsertableRelation] => - val p = i.logicalRelation.relation.asInstanceOf[PlanInsertableRelation] - val childPlan = new QueryExecution(sessionState.snappySession, i.query).sparkPlan - val preAction = if (internals.getOverwriteOption(i)) () => p.truncate() else () => () - ExecutePlan(p.getInsertPlan(i.logicalRelation, childPlan), preAction) :: Nil + EncoderScanExec(plan.rdd, plan.encoder, plan.isFlat, plan.output) :: Nil + + case i@InsertIntoPlan(l, query, overwrite) => + val preAction = if (overwrite) () => i.relation.truncate() else () => () + val childPlan = new QueryExecution(sessionState.snappySession, query).sparkPlan + ExecutePlan(i.relation.getInsertPlan(l, childPlan), preAction) :: Nil case d@DMLExternalTable(table, cmd) => findLogicalRelation[BaseRelation](table) match { case Some(l) => ExecutedCommandExec(ExternalTableDMLCmd(l, cmd, d.output)) :: Nil diff --git a/core/src/main/scala/org/apache/spark/sql/types/TypeUtilities.scala b/core/src/main/scala/org/apache/spark/sql/types/TypeUtilities.scala index 2478cd6ad3..c98b65d2ff 100644 --- a/core/src/main/scala/org/apache/spark/sql/types/TypeUtilities.scala +++ b/core/src/main/scala/org/apache/spark/sql/types/TypeUtilities.scala @@ -23,9 +23,15 @@ import scala.reflect.runtime.universe._ import com.esotericsoftware.kryo.Kryo import com.esotericsoftware.kryo.io.{Input, Output} +import com.pivotal.gemfirexd.internal.engine.store.{AbstractCompactExecRow, RowFormatter} +import com.pivotal.gemfirexd.internal.iapi.sql.dictionary.ColumnDescriptor +import com.pivotal.gemfirexd.internal.impl.jdbc.Util +import com.pivotal.gemfirexd.internal.shared.common.StoredFormatIds +import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState import org.apache.spark.rdd.RDD import org.apache.spark.sql.execution.CodegenSupport +import org.apache.spark.unsafe.Platform import org.apache.spark.unsafe.types.UTF8String @@ -130,6 +136,63 @@ object TypeUtilities { } } + private def assertCharType(cd: ColumnDescriptor): Unit = { + cd.columnType.getTypeId.getTypeFormatId match { + case StoredFormatIds.CHAR_TYPE_ID | StoredFormatIds.LONGVARCHAR_TYPE_ID | + StoredFormatIds.VARCHAR_TYPE_ID | StoredFormatIds.CLOB_TYPE_ID => + case _ => throw Util.generateCsSQLException(SQLState.LANG_FORMAT_EXCEPTION, + "UTF8String", cd.getColumnName) + } + } + + private def readUTF8String(rf: RowFormatter, index: Int, bytes: Array[Byte]): UTF8String = { + val cd = rf.columns(index) + val offsetFromMap = rf.positionMap(index) + val offsetAndWidth = rf.getOffsetAndWidth(index, bytes, offsetFromMap, cd, false) + if (offsetAndWidth >= 0) { + val columnWidth = offsetAndWidth.toInt + val offset = (offsetAndWidth >>> Integer.SIZE).toInt + assertCharType(cd) + // TODO: SW: SQLChar should be full UTF8 else below is broken for > 3-character UTF8 + UTF8String.fromAddress(bytes, Platform.BYTE_ARRAY_OFFSET + offset, columnWidth) + } else { + if (offsetAndWidth == RowFormatter.OFFSET_AND_WIDTH_IS_NULL) null + else { + assert(offsetAndWidth == RowFormatter.OFFSET_AND_WIDTH_IS_DEFAULT) + val defaultBytes = cd.columnDefaultBytes + if (defaultBytes ne null) { + UTF8String.fromAddress(defaultBytes, Platform.BYTE_ARRAY_OFFSET, defaultBytes.length) + } else null + } + } + } + + private def readUTF8String(rf: RowFormatter, index: Int, + byteArrays: Array[Array[Byte]]): UTF8String = { + val cd = rf.columns(index) + if (!cd.isLob) { + readUTF8String(rf, index, byteArrays(0)) + } else { + val offsetFromMap = rf.positionMap(index) + val bytes = + if (offsetFromMap != 0) byteArrays(offsetFromMap) else cd.columnDefaultBytes + if (bytes ne null) { + assertCharType(cd) + UTF8String.fromAddress(bytes, Platform.BYTE_ARRAY_OFFSET, bytes.length) + } else null + } + } + + def readUTF8String(row: AbstractCompactExecRow, index: Int): UTF8String = { + val rf = row.getRowFormatter + row.getBaseByteSource match { + case bytes: Array[Byte] => readUTF8String(rf, index, bytes) + case byteArrays: Array[Array[Byte]] => readUTF8String(rf, index, byteArrays) + case s => throw new UnsupportedOperationException( + s"readUTF8String(AbstractCompactExecRow): unexpected source: $s") + } + } + val mathContextCache: Array[MathContext] = Array.tabulate[MathContext]( DecimalType.MAX_PRECISION)(i => new MathContext(i + 1)) } diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala index b6f9998342..42a42f61be 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala @@ -84,8 +84,17 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite "PARTITION_BY 'Col1'," + "BUCKETS '1')") + // check insert statement result + assert(snc.sql(s"insert into $tableName values (1, 2, 3)").collect() === Array(Row(1L))) + assert(snc.sql(s"insert into $tableName values (1, 2, 3), (4, 5, 6)").collect() === + Array(Row(2L))) + assert(snc.sql(s"insert into $tableName select 7, 8, 9").collect() === Array(Row(1L))) + assert(snc.sql(s"insert into $tableName select 7, 8, 9 union all select 1, 2, 3").collect() === + Array(Row(2L))) + snc.sql(s"truncate table $tableName") + val data = Seq(Seq(1, 2, 3), Seq(7, 8, 9), Seq(9, 2, 3), Seq(4, 2, 3), Seq(5, 6, 7)) - val rdd = sc.parallelize(data, data.length).map(s => new Data(s(0), s(1), s(2))) + val rdd = sc.parallelize(data, data.length).map(s => Data(s.head, s(1), s(2))) val dataDF = snc.createDataFrame(rdd) dataDF.write.insertInto(tableName) @@ -131,6 +140,7 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite // SQL overwrites. try { snc.sql(s"insert overwrite $tableName select * from $tableName") + fail("Expected AnalysisException while overwriting table which is also being read from") } catch { case ae: AnalysisException => assert(ae.getMessage().contains("Cannot insert overwrite")) } @@ -138,12 +148,9 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite snc.sql(s"insert into $tableName select * from $tableName") } catch { case ae: AnalysisException => assert(ae.getMessage().contains("Cannot insert overwrite")) - case t: Throwable => fail("Unexpected Exception ", t) } - } - test("test the shadow table creation heavy insert") { // snc.sql(s"DROP TABLE IF EXISTS $tableName") diff --git a/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala b/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala index 114d04822f..d431493db7 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala @@ -90,6 +90,10 @@ object MetadataTest extends Assertions { assert(!rsMap.contains("spark.sql.sources.schema.numParts")) } + private def compare(schema1: StructType, schema2: StructType): Unit = { + assert(schema1.toString() === schema2.toString()) + } + private val expectedSYSTables = Array("ASYNCEVENTLISTENERS", "GATEWAYRECEIVERS", "GATEWAYSENDERS", "SYSALIASES", "SYSCHECKS", "SYSCOLPERMS", "SYSCOLUMNS", "SYSCONGLOMERATES", "SYSCONSTRAINTS", "SYSDEPENDS", "SYSDISKSTORES", "SYSFILES", "SYSFOREIGNKEYS", @@ -166,7 +170,7 @@ object MetadataTest extends Assertions { val expectedSizes = List(256, 256, 24, 12, 32672, 32672) rs = ds.collect() // check schema of the returned Dataset - assert(ds.schema === StructType(expectedColumns.zip(expectedSizes).map(p => + compare(ds.schema, StructType(expectedColumns.zip(expectedSizes).map(p => StructField(p._1, StringType, nullable = false, getMetadata(p._1, p._2))))) checkMembers(rs, forShow = true) @@ -175,7 +179,7 @@ object MetadataTest extends Assertions { ds = executeSQL("select * from sys.sysSchemas") rs = ds.collect() // check schema of the returned Dataset - assert(ds.schema === StructType(sysSchemasColumns.map(p => + compare(ds.schema, StructType(sysSchemasColumns.map(p => StructField(p._1, StringType, nullable = false, getMetadata(p._1, p._2, p._3))))) val expectedDefaultSchemas = List("APP", "DEFAULT", "NULLID", "SNAPPY_HIVE_METASTORE", "SQLJ", "SYS", "SYSCAT", "SYSCS_DIAG", "SYSCS_UTIL", "SYSFUN", "SYSIBM", "SYSPROC", "SYSSTAT") @@ -186,7 +190,7 @@ object MetadataTest extends Assertions { ds = executeSQL("select * from sys.sysTables where tableSchemaName = 'SYS'") rs = ds.collect() // check schema of the returned Dataset - assert(ds.schema === StructType(sysTablesColumns.map { case (name, size, typeName, nullable) => + compare(ds.schema, StructType(sysTablesColumns.map { case (name, size, typeName, nullable) => val dataType = typeName match { case "BOOLEAN" => BooleanType case _ => StringType @@ -622,10 +626,10 @@ object MetadataTest extends Assertions { // check schema of the returned Dataset which should be a single string column // for JDBC it should be a CLOB column if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } assert(matches(plan, ".*Physical Plan.*Partitioned Scan RowFormatRelation\\[app" + ".rowtable1\\].*numBuckets = 1 numPartitions = 1.*")) @@ -636,10 +640,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } def literalString(value: String): String = { @@ -662,13 +666,13 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = false, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = false, getMetadata("plan", 0, "CLOB"))))) assert(plan.contains("stmt_id")) assert(plan.contains("SQL_stmt select * from rowTable1 where id = 10")) assert(plan.contains("REGION-GET")) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) expectedPattern = ".*Physical Plan.*Partitioned Scan RowFormatRelation\\[app" + ".rowtable1\\].*numBuckets = 1 numPartitions = 1.*id.* = " + literalString("10") + ".*" assert(matches(plan, expectedPattern)) @@ -679,10 +683,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } expectedPattern = s".*Parsed Logical Plan.*Filter.*id = " + literalString("10") + "" + ".*Analyzed Logical Plan.*Filter.*id#[0-9]* = " + literalString("10") + @@ -699,10 +703,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } expectedPattern = ".*Physical Plan.*Partitioned Scan ColumnFormatRelation" + "\\[app.columntable2\\].*numBuckets = [0-9]* numPartitions = [0-9]*" + @@ -714,10 +718,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } expectedPattern = s".*Parsed Logical Plan.*Filter.*id > ${literalString("20")}" + s".*Analyzed Logical Plan.*Filter.*id#[0-9]*L > cast\\(${literalString("20")} as bigint" + @@ -734,10 +738,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } assert(matches(plan, ".*Physical Plan.*Execute.*CreateTableUsingCommand" + ".*rowtable2.*\\(id int primary key, id2 int\\), row.*")) @@ -810,10 +814,10 @@ object MetadataTest extends Assertions { // check schema of the returned Dataset which should be a single string column // for JDBC it should be a CLOB column if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } assert(matches(plan, ".*Physical Plan.*Partitioned Scan RowFormatRelation\\[schema2" + ".rowtable2\\].*numBuckets = 8 numPartitions = [0-9]*.*")) @@ -824,10 +828,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } expectedPattern = ".*Physical Plan.*Partitioned Scan RowFormatRelation" + "\\[schema2.rowtable2\\].*numBuckets = 8 numPartitions = [0-9]*" + @@ -841,13 +845,13 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = false, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = false, getMetadata("plan", 0, "CLOB"))))) assert(plan.contains("stmt_id")) assert(plan.contains("SQL_stmt select * from schema2.rowTable2 where id = 15")) assert(plan.contains("REGION-GET")) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) // no pruning for row tables yet expectedPattern = ".*Physical Plan.*Partitioned Scan RowFormatRelation" + "\\[schema2.rowtable2\\].*numBuckets = 8 numPartitions = [0-9]*" + @@ -862,10 +866,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } assert(matches(plan, ".*Physical Plan.*Partitioned Scan ColumnFormatRelation" + "\\[schema1.columntable1\\].*numBuckets = [0-9]* numPartitions = 1" + @@ -876,10 +880,10 @@ object MetadataTest extends Assertions { assert(rs.length === 1) plan = rs(0).getString(0) if (usingJDBC) { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true, + compare(ds.schema, StructType(Array(StructField("plan", StringType, nullable = true, getMetadata("plan", 0, "CLOB"))))) } else { - assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true)))) + compare(ds.schema, StructType(Array(StructField("plan", StringType)))) } // should prune to a single partition diff --git a/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala b/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala index 09114a2f92..91dc5af6e8 100644 --- a/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala +++ b/core/src/test/scala/org/apache/spark/sql/streaming/SnappyStoreSinkProviderSecuritySuite.scala @@ -243,10 +243,12 @@ class SnappyStoreSinkProviderSecuritySuite extends SnappyFunSuite fail("StreamingQueryException was expected") } catch { case x: StreamingQueryException => - val expectedMessage = "User 'GEMFIRE5' does not have SELECT permission on column" + + val expectedMessage1 = "User 'GEMFIRE5' does not have SELECT permission on column" + " 'STREAM_QUERY_ID' of table 'GEMGROUP1'.'SNAPPYSYS_INTERNAL____SINK_STATE_TABLE'." + val expectedMessage2 = "User 'GEMFIRE5' does not have UPDATE permission on column " + + " 'BATCH_ID' of table 'GEMGROUP1'.'SNAPPYSYS_INTERNAL____SINK_STATE_TABLE'." val cause = if (x.getCause.getCause eq null) x.getCause else x.getCause.getCause - assert(cause.getMessage.equals(expectedMessage)) + assert(cause.getMessage === expectedMessage1 || cause.getMessage === expectedMessage2) } finally { streamingQuery1.stop() } diff --git a/jdbc/build.gradle b/jdbc/build.gradle index f3470b98e1..060c7f150c 100644 --- a/jdbc/build.gradle +++ b/jdbc/build.gradle @@ -80,8 +80,6 @@ shadowJar { // avoid conflict with the 0.9.2 version in stock Spark relocate 'org.apache.thrift', 'io.snappydata.org.apache.thrift' - // avoid conflict with spark-unsafe in Spark >= 2.4.0 - // relocate 'org.apache.spark.unsafe', 'io.snappydata.org.apache.spark.unsafe' mergeServiceFiles() exclude 'log4j.properties' diff --git a/spark b/spark index d08f57f9fe..6df2023685 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit d08f57f9fe668151a7f8149bded75b163d1f62b2 +Subproject commit 6df2023685aecdc6f454f8ddd465c4f191ae0dce diff --git a/store b/store index 5c4d0a54ab..63839d782d 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 5c4d0a54ab8d3f187c7bc927015da73be2f1c31e +Subproject commit 63839d782dcadce304c6c4256b5797ea6cc20182 From 71fad290bbf000507461c7fab2b5ea86f6dec5f7 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 17 Mar 2020 19:22:08 +0530 Subject: [PATCH 72/80] fixes for multiple issues --- build.gradle | 2 +- .../cluster/QueryRoutingSingleNodeSuite.scala | 24 ++-- .../org/apache/spark/sql/NWQueries.scala | 2 +- .../spark/sql/SnappySQLQuerySuite.scala | 7 +- .../spark/sql/internal/Spark21Internals.scala | 2 +- .../org/apache/spark/sql/internal/plans.scala | 11 +- .../sql/internal/Spark23_4_Internals.scala | 31 +++-- .../org/apache/spark/sql/internal/plans.scala | 29 ++-- .../cluster/SnappyJobTestSupport.scala | 2 +- .../main/scala/io/snappydata/Literals.scala | 2 +- .../serializer/PooledKryoSerializer.scala | 5 +- .../apache/spark/sql/CachedDataFrame.scala | 6 +- .../org/apache/spark/sql/SnappyContext.scala | 2 +- .../org/apache/spark/sql/SnappyParser.scala | 15 +- .../org/apache/spark/sql/SparkInternals.scala | 7 +- .../sql/execution/ObjectHashMapAccessor.scala | 6 +- .../spark/sql/execution/SHAMapAccessor.scala | 63 ++++++--- .../aggregate/SnappyHashAggregateExec.scala | 130 +++++++----------- .../spark/sql/hive/SnappySessionState.scala | 4 +- .../scala/org/apache/spark/sql/rdds.scala | 6 +- .../org/apache/spark/TestPackageUtils.scala | 20 ++- .../store/ColumnTableBatchInsertTest.scala | 26 ++-- .../sql/catalyst/util/SerializedMap.scala | 4 +- .../sql/catalyst/util/SerializedRow.scala | 4 +- spark | 2 +- 25 files changed, 240 insertions(+), 172 deletions(-) diff --git a/build.gradle b/build.gradle index f0009884cd..bb66d30f4c 100644 --- a/build.gradle +++ b/build.gradle @@ -135,7 +135,7 @@ allprojects { scalatestVersion = '3.0.8' jettyVersion = '9.3.28.v20191105' guavaVersion = '14.0.1' - kryoVersion = '4.0.1' + kryoVersion = '4.0.2' thriftVersion = '0.9.3' metricsVersion = '4.0.3' metrics2Version = '2.2.0' diff --git a/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala b/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala index 9d0f843185..a5a5895d5f 100644 --- a/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala +++ b/cluster/src/test/scala/io/snappydata/cluster/QueryRoutingSingleNodeSuite.scala @@ -769,7 +769,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll snc.sql("drop table if exists columntable") snc.sql("CREATE TABLE columnTable (bigIntCol BIGINT," + " binaryCol1 BINARY, boolCol BOOLEAN , byteCol BYTE," + - " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 10, 2 ) ," + + " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 12, 2 ) ," + " doubleCol DOUBLE , floatCol FLOAT , intCol INT , integerCol INTEGER," + " longVarcharCol LONG , numericCol NUMERIC, numeric1Col NUMERIC(10,2)," + " doublePrecisionCol DOUBLE PRECISION, realCol REAL, stringCol STRING," + @@ -780,8 +780,8 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") stmt.execute("put into columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, x'1010', FALSE, 97,'1234567890abcdefghij'," + - " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") + " values (1000, x'1010', FALSE, 97y, '1234567890abcdefghij'," + + " date('1970-01-08'), 66, 2.2, 1.0E8f, 1000)") assertEquals(2, snc.sql("select * from columntable").count()) } @@ -840,7 +840,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll snc.sql("drop table if exists columntable") snc.sql("CREATE TABLE columnTable (bigIntCol BIGINT," + " binaryCol1 BINARY, boolCol BOOLEAN , byteCol BYTE," + - " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 10, 2 ) ," + + " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 12, 2 ) ," + " doubleCol DOUBLE , floatCol FLOAT , intCol INT , integerCol INTEGER," + " longVarcharCol LONG , numericCol NUMERIC, numeric1Col NUMERIC(10,2)," + " doublePrecisionCol DOUBLE PRECISION, realCol REAL, stringCol STRING," + @@ -851,8 +851,8 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") snc.sql("put into columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, 1010, FALSE, 97,'1234567890abcdefghij'," + - " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") + " values (1000, x'1010', FALSE, 97b, '1234567890abcdefghij'," + + " date('1970-01-08'), 66, 2.2, 1.0E8f, 1000)") assertEquals(2, snc.sql("select * from columntable").count()) } @@ -911,7 +911,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll snc.sql("drop table if exists std1.columntable") snc.sql("CREATE TABLE std1.columnTable (bigIntCol BIGINT," + " binaryCol1 BINARY, boolCol BOOLEAN , byteCol BYTE," + - " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 10, 2 ) ," + + " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 12, 2 ) ," + " doubleCol DOUBLE , floatCol FLOAT , intCol INT , integerCol INTEGER," + " longVarcharCol LONG , numericCol NUMERIC, numeric1Col NUMERIC(10,2)," + " doublePrecisionCol DOUBLE PRECISION, realCol REAL, stringCol STRING," + @@ -922,8 +922,8 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") snc.sql("put into std1.columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, x'1010', FALSE, 97,'1234567890abcdefghij'," + - " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") + " values (1000, x'1010', FALSE, 97B, '1234567890abcdefghij'," + + " date('1970-01-08'), 66, 2.2, 1.0E8F, 1000)") assertEquals(2, snc.sql("select * from std1.columntable").count()) } @@ -984,7 +984,7 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll snc.sql("drop table if exists std2.columntable") snc.sql("CREATE TABLE std2.columntable (bigIntCol BIGINT," + " binaryCol1 BINARY, boolCol BOOLEAN , byteCol BYTE," + - " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 10, 2 ) ," + + " charCol CHAR( 30 ) , dateCol DATE , decimalCol DECIMAL( 12, 2 ) ," + " doubleCol DOUBLE , floatCol FLOAT , intCol INT , integerCol INTEGER," + " longVarcharCol LONG , numericCol NUMERIC, numeric1Col NUMERIC(10,2)," + " doublePrecisionCol DOUBLE PRECISION, realCol REAL, stringCol STRING," + @@ -995,8 +995,8 @@ class QueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndAfterAll " 123.56, 0.089, 'abcd', current_timestamp, 'SNAPPY')") snc.sql("put into std2.columntable (bigIntCol, binaryCol1, boolCol, byteCol," + " charCol, dateCol , decimalCol , doubleCol , floatCol , intCol)" + - " values (1000, x'1010', FALSE, 97,'1234567890abcdefghij'," + - " date('1970-01-08'), 66, 2.2, 1.0E8, 1000)") + " values (1000, x'1010', FALSE, 97Y, '1234567890abcdefghij'," + + " date('1970-01-08'), 66, 2.2, 1.0E8f, 1000)") assertEquals(2, snc.sql("select * from std2.columntable").count()) } } diff --git a/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala b/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala index bda299ca48..4fb0e8b1ba 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/NWQueries.scala @@ -1109,7 +1109,7 @@ object NWQueries extends SnappyFunSuite { case j: SubqueryExec => j case j: UnionExec => j } - if (operators.head.getClass != c) { + if (!c.isAssignableFrom(operators.head.getClass)) { throw new IllegalStateException(s"$sqlString expected operator: $c," + s" but got ${operators.head}\n physical: \n$physical") } diff --git a/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala b/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala index 63b7133a12..2ebdfd0873 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/SnappySQLQuerySuite.scala @@ -450,6 +450,9 @@ class SnappySQLQuerySuite extends SnappyFunSuite { } } + private def normalizeTreeString(s: String): String = + idPattern.replaceAllIn(s.replace("`", ""), "#0") + private def testTPCHQ19(): Unit = { // check common sub-expression elimination in query leading to push down // of filters should not be inhibited due to ParamLiterals @@ -475,7 +478,7 @@ class SnappySQLQuerySuite extends SnappyFunSuite { | +- SubqueryAlias ct2 | +- Relation[id#0,data#0] ColumnFormatRelation[app.ct2] |""".stripMargin - assert(idPattern.replaceAllIn(ds.queryExecution.analyzed.treeString, "#0") === expectedTree) + assert(normalizeTreeString(ds.queryExecution.analyzed.treeString) === expectedTree) assert(ds.collect() === Array(Row(100L, "data100"))) // check filter push down in the plan @@ -501,7 +504,7 @@ class SnappySQLQuerySuite extends SnappyFunSuite { analyzedFilter = "Filter (((id#0 < cast(ParamLiteral:0#0,1000 as bigint)) && " + "(data#0 = ParamLiteral:1#0,data100)) || ((id#0 < cast(ParamLiteral:2#0,20 as " + "bigint)) && (data#0 = ParamLiteral:3#0,data100)))" - assert(idPattern.replaceAllIn(ds.queryExecution.analyzed.treeString, "#0") === expectedTree) + assert(normalizeTreeString(ds.queryExecution.analyzed.treeString) === expectedTree) assert(ds.collect() === Array(Row(100L, "data100"))) // check no filter push down in the plan diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index b4559e18ff..3919236c7e 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -990,11 +990,11 @@ class SnappySessionState21(override val snappySession: SnappySession) override lazy val sqlParser: SnappySqlParser = snappySession.contextFunctions.newSQLParser() override lazy val streamingQueryManager: StreamingQueryManager = { + initSnappyStrategies // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This // implies that Snappydata aggregation optimisation will be turned off for any usage of // this session including non-streaming queries. - HashAggregateSize.set(snappySession.sessionState.conf, "-1") new StreamingQueryManager(snappySession) } diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala index b5973c584b..7c68560ff7 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -24,7 +24,7 @@ import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} import org.apache.spark.sql.catalyst.plans.logical.{BroadcastHint, LogicalPlan} import org.apache.spark.sql.execution.columnar.ColumnTableScan -import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.row.{RowFormatScanRDD, RowTableScan} import org.apache.spark.sql.execution.{PartitionedDataSourceScan, SparkPlan} import org.apache.spark.sql.types.StructType @@ -72,7 +72,14 @@ final class RowTableScan21(output: Seq[Attribute], schema: StructType, dataRDD: partitionColumnAliases, table, baseRelation, caseSensitive) { override def sameResult(plan: SparkPlan): Boolean = plan match { - case r: RowTableScan => r.table == table && r.numBuckets == numBuckets && r.schema == schema + case r: RowTableScan => r.table == table && r.numBuckets == numBuckets && + r.schema == schema && (this.dataRDD match { + case rowRdd: RowFormatScanRDD => + val rdd2 = r.dataRDD.asInstanceOf[RowFormatScanRDD] + rowRdd.filters.length == rdd2.filters.length && + rowRdd.filters.indices.forall(i => rowRdd.filters(i).semanticEquals(rdd2.filters(i))) + case _ => true + }) case _ => false } } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index ae5fcded4c..3fced87315 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -50,17 +50,18 @@ import org.apache.spark.sql.execution.command.{ClearCacheCommand, CreateFunction import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchangeExec} import org.apache.spark.sql.execution.row.RowTableScan +import org.apache.spark.sql.execution.streaming.BaseStreamingSink import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStore, SnappySQLAppListener} import org.apache.spark.sql.hive._ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} -import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} +import org.apache.spark.sql.streaming.{LogicalDStreamPlan, OutputMode, StreamingQuery, StreamingQueryManager, Trigger} import org.apache.spark.sql.types.StructType import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream import org.apache.spark.unsafe.Platform -import org.apache.spark.util.Utils +import org.apache.spark.util.{Clock, Utils} /** * Base implementation of [[SparkInternals]] for Spark 2.3.x and 2.4.x releases. @@ -636,13 +637,25 @@ abstract class SnappySessionStateBuilder23_4(session: SnappySession, } override protected def streamingQueryManager: StreamingQueryManager = { - // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with - // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This - // implies that Snappydata aggregation optimisation will be turned off for any usage of - // this session including non-streaming queries. - - HashAggregateSize.set(conf, "-1") - new StreamingQueryManager(session) + new StreamingQueryManager(session) { + + override private[sql] def startQuery(userSpecifiedName: Option[String], + userSpecifiedCheckpointLocation: Option[String], df: DataFrame, + extraOptions: Map[String, String], sink: BaseStreamingSink, outputMode: OutputMode, + useTempCheckpointLocation: Boolean, recoverFromCheckpointLocation: Boolean, + trigger: Trigger, triggerClock: Clock): StreamingQuery = { + + session.snappySessionState.initSnappyStrategies + // Disabling `SnappyAggregateStrategy` for streaming queries as it clashes with + // `StatefulAggregationStrategy` which is applied by spark for streaming queries. This + // implies that Snappydata aggregation optimisation will be turned off for any usage of + // this session including non-streaming queries. + HashAggregateSize.set(conf, "-1") + super.startQuery(userSpecifiedName, userSpecifiedCheckpointLocation, df, + extraOptions, sink, outputMode, useTempCheckpointLocation, + recoverFromCheckpointLocation, trigger, triggerClock) + } + } } override def build(): SnappySessionState = { diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala index 1500482ded..b345f71c42 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/plans.scala @@ -19,15 +19,15 @@ package org.apache.spark.sql.internal import io.snappydata.{HintName, QueryHint} -import org.apache.spark.rdd.{EmptyRDD, RDD} -import org.apache.spark.sql.JoinStrategy +import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow -import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, Expression} +import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, ExprId, Expression} import org.apache.spark.sql.catalyst.plans.logical.{HintInfo, LogicalPlan, ResolvedHint} import org.apache.spark.sql.execution.columnar.ColumnTableScan import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.{PartitionedDataSourceScan, SparkPlan} import org.apache.spark.sql.types.StructType +import org.apache.spark.sql.{JoinStrategy, SparkSupport} /** * An extension to [[ResolvedHint]] to encapsulate any kind of hint rather @@ -61,10 +61,15 @@ final class ColumnTableScan23(output: Seq[Attribute], dataRDD: RDD[Any], caseSensitive, isSampleReservoirAsRegion) { override protected def doCanonicalize(): SparkPlan = if (isCanonicalizedPlan) this else { - new ColumnTableScan23(output, dataRDD = new EmptyRDD[Any](sparkContext), otherRDDs = Nil, - numBuckets, partitionColumns = Nil, partitionColumnAliases = Nil, baseRelation, - relationSchema, allFilters = Nil, schemaAttributes = Nil, caseSensitive = false, - isSampleReservoirAsRegion) + var id = -1 + val newOutput = output.map { ar => + id += 1 + ar.withExprId(ExprId(id)) + } + new ColumnTableScan23(newOutput, dataRDD = SparkSupport.internals.EMPTY_RDD, + otherRDDs = Nil, numBuckets, partitionColumns = Nil, partitionColumnAliases = Nil, + baseRelation, relationSchema, allFilters = Nil, schemaAttributes = Nil, + caseSensitive = false, isSampleReservoirAsRegion) } } @@ -76,7 +81,13 @@ final class RowTableScan23(output: Seq[Attribute], schema: StructType, dataRDD: partitionColumnAliases, table, baseRelation, caseSensitive) { override protected def doCanonicalize(): SparkPlan = if (isCanonicalizedPlan) this else { - new RowTableScan23(output, schema, dataRDD = null, numBuckets, partitionColumns = Nil, - partitionColumnAliases = Nil, table, baseRelation, caseSensitive = false) + var id = -1 + val newOutput = output.map { ar => + id += 1 + ar.withExprId(ExprId(id)) + } + new RowTableScan23(newOutput, schema, dataRDD = SparkSupport.internals.EMPTY_RDD, + numBuckets, partitionColumns = Nil, partitionColumnAliases = Nil, + table, baseRelation, caseSensitive = false) } } diff --git a/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala b/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala index dea876be1a..7a70f277d3 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SnappyJobTestSupport.scala @@ -93,7 +93,7 @@ trait SnappyJobTestSupport extends Logging { private def buildJobSubmissionCommand(packageStr: String, className: String): String = { val jobSubmissionCommand = s"$snappyJobScript submit --app-name $className" + s" --class $packageStr.$className" + - s" --app-jar ${getJobJar(className, packageStr.replaceAll("\\.", "/") + "/")}" + s" --app-jar ${getJobJar(className, packageStr.replaceAll("\\.", "/"))}" if (jobConfigFile != null) { jobSubmissionCommand + s" --passfile $jobConfigFile" } else jobSubmissionCommand diff --git a/core/src/main/scala/io/snappydata/Literals.scala b/core/src/main/scala/io/snappydata/Literals.scala index a615ef5897..1cb975a102 100644 --- a/core/src/main/scala/io/snappydata/Literals.scala +++ b/core/src/main/scala/io/snappydata/Literals.scala @@ -217,7 +217,7 @@ object Property extends Enumeration { Some(false), Constant.SPARK_PREFIX) val SchedulerPool: SQLValue[String] = SQLVal[String]( - s"${Constant.PROPERTY_PREFIX}scheduler.pool", + s"${Constant.SPARK_PREFIX}scheduler.pool", "Property to set the scheduler pool for the current session. This property can " + "be used to assign queries to different pools for improving " + "throughput of specific queries.", Some("default")) diff --git a/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala b/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala index 1b386b676d..7c8b8badbb 100644 --- a/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala +++ b/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala @@ -24,7 +24,7 @@ import scala.reflect.ClassTag import com.esotericsoftware.kryo.io.{ByteBufferOutput, Input} import com.esotericsoftware.kryo.serializers.DefaultSerializers.KryoSerializableSerializer -import com.esotericsoftware.kryo.serializers.ExternalizableSerializer +import com.esotericsoftware.kryo.serializers.{ExternalizableSerializer, JavaSerializer => KryoJavaSerializer} import com.esotericsoftware.kryo.{Kryo, KryoException} import org.apache.spark.broadcast.TorrentBroadcast @@ -36,6 +36,7 @@ import org.apache.spark.scheduler.cluster.CoarseGrainedClusterMessages.{LaunchTa import org.apache.spark.sql.catalyst.expressions.codegen.CodeAndComment import org.apache.spark.sql.catalyst.expressions.{DynamicFoldableExpression, ParamLiteral, TokenLiteral, UnsafeRow} import org.apache.spark.sql.collection.{MultiBucketExecutorPartition, NarrowExecutorLocalSplitDep, SmartExecutorBucketPartition} +import org.apache.spark.sql.execution.columnar.InMemoryTableScanExec import org.apache.spark.sql.execution.columnar.impl.{ColumnarStorePartitionedRDD, JDBCSourceAsColumnarStore, SmartConnectorColumnRDD, SmartConnectorRowRDD} import org.apache.spark.sql.execution.joins.CacheKey import org.apache.spark.sql.execution.metric.SQLMetric @@ -151,6 +152,8 @@ final class PooledKryoSerializer(conf: SparkConf) kryo.register(classOf[TokenLiteral], new KryoSerializableSerializer) kryo.register(classOf[ParamLiteral], new KryoSerializableSerializer) kryo.register(classOf[DynamicFoldableExpression], new KryoSerializableSerializer) + // default kryo field serializer fails for InMemoryTableScanExec for some reason + kryo.register(classOf[InMemoryTableScanExec], new KryoJavaSerializer) try { val launchTasksClass = Utils.classForName( diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index 395bdd28e5..9d1a4051d3 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -35,7 +35,7 @@ import com.gemstone.gemfire.internal.shared.ClientSharedUtils import com.gemstone.gemfire.internal.shared.unsafe.DirectBufferAllocator import com.gemstone.gemfire.internal.{ByteArrayDataInput, ByteBufferDataOutput} import com.pivotal.gemfirexd.internal.shared.common.reference.SQLState -import io.snappydata.Constant +import io.snappydata.{Constant, Property} import org.apache.spark._ import org.apache.spark.io.CompressionCodec @@ -223,7 +223,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti pool = Constant.LOW_LATENCY_POOL } } - snappySession.sparkContext.setLocalProperty("spark.scheduler.pool", pool) + snappySession.sparkContext.setLocalProperty(Property.SchedulerPool.name, pool) } private def prepareForCollect(): Boolean = { @@ -263,7 +263,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti // reset the pool if (isLowLatencyQuery) { val pool = snappySession.snappySessionState.snappyConf.activeSchedulerPool - snappySession.sparkContext.setLocalProperty("spark.scheduler.pool", pool) + snappySession.sparkContext.setLocalProperty(Property.SchedulerPool.name, pool) } // clear the shuffle dependencies asynchronously after the execution. startShuffleCleanups(snappySession.sparkContext) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala index e77ac2c630..323b0f6fc1 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyContext.scala @@ -1368,7 +1368,7 @@ final class BlockAndExecutorId(private[spark] var _blockId: BlockManagerId, } override def readExternal(in: ObjectInput): Unit = { - _blockId.readExternal(in) + _blockId = BlockManagerId(in) _executorCores = in.readInt() _numProcessors = in.readInt() _usableHeapBytes = in.readLong() diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 6f16d6dc3c..8ca382b55a 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -153,13 +153,13 @@ class SnappyParser(session: SnappySession) } case 'S' | 's' => if (Character.isDigit(s.charAt(len - 2))) { return newTokenizedLiteral( - java.lang.Short.parseShort(s.substring(0, len - 1)), LongType) + java.lang.Short.parseShort(s.substring(0, len - 1)), ShortType) } else { throw new ParseException(s"Found non numeric token $s") } - case 'Y' | 'y' => if (Character.isDigit(s.charAt(len - 2))) { + case 'B' | 'b' | 'Y' | 'y' => if (Character.isDigit(s.charAt(len - 2))) { return newTokenizedLiteral( - java.lang.Byte.parseByte(s.substring(0, len - 1)), LongType) + java.lang.Byte.parseByte(s.substring(0, len - 1)), ByteType) } else { throw new ParseException(s"Found non numeric token $s") } @@ -624,8 +624,13 @@ class SnappyParser(session: SnappySession) (math.random * 1000).toInt, child) } - protected final def toDouble(s: String): Double = - toNumericLiteral(s).eval(EmptyRow).asInstanceOf[Number].doubleValue() + protected final def toDouble(s: String): Double = { + toNumericLiteral(s).eval(EmptyRow) match { + case n: Number => n.doubleValue() + case d: Decimal => d.toDouble + case o => throw new ParseException(s"Cannot convert '$o' to double") + } + } protected final def sample: Rule1[LogicalPlan => LogicalPlan] = rule { TABLESAMPLE ~ '(' ~ ws ~ ( diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index cc98a0acca..3447ba1777 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -21,7 +21,7 @@ import io.snappydata.{HintName, QueryHint} import org.apache.hadoop.conf.Configuration import org.apache.spark.internal.config.ConfigBuilder -import org.apache.spark.rdd.RDD +import org.apache.spark.rdd.{EmptyRDD, RDD} import org.apache.spark.sql.catalyst.analysis.{UnresolvedRelation, UnresolvedTableValuedFunction} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog._ @@ -68,6 +68,11 @@ trait SparkInternals extends Logging { final val emptyFunc: String => String = _ => "" + /** + * Global instance of EmptyRDD used in canonicalized versions of plans. + */ + lazy val EMPTY_RDD = new EmptyRDD[Any](SparkContext.getActive.get) + if (version != SparkSupport.DEFAULT_VERSION) { logInfo(s"SnappyData: loading support for Spark $version") } diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index 54275f3071..d86d22e79b 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -131,11 +131,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, private type ClassVar = (DataType, String, ExprCode, Int) - @transient private[this] val (className, valueClassName, classVars, - numNullVars) = initClass() - - // return empty here as code of required variables is explicitly instantiated - override def usedInputs: AttributeSet = AttributeSet.empty + @transient private[this] val (className, valueClassName, classVars, numNullVars) = initClass() private def initClass(): (String, String, IndexedSeq[ClassVar], Int) = { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala index 37c1602de0..ec8ca0b3e6 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/SHAMapAccessor.scala @@ -366,15 +366,25 @@ case class SHAMapAccessor(@transient session: SnappySession, } } + def initKeyOrBufferVal(dataTypes: Seq[DataType], varNames: Seq[String], + genClassField: Boolean = false): String = { + dataTypes.zip(varNames).map { case (dt, varName) => + if (genClassField) { + internals.addClassField(ctx, internals.javaType(dt, ctx), varName, + forceInline = true, useFreshName = false) + s"$varName = ${internals.defaultValue(dt, ctx)};" + } else s"${internals.javaType(dt, ctx)} $varName = ${internals.defaultValue(dt, ctx)};" + }.mkString("\n") + } - def initKeyOrBufferVal(dataTypes: Seq[DataType], varNames: Seq[String]): - String = dataTypes.zip(varNames).map { case (dt, varName) => - s"${internals.javaType(dt, ctx)} $varName = ${internals.defaultValue(dt, ctx)};" - }.mkString("\n") - - def declareNullVarsForAggBuffer(varNames: Seq[String]): String = - varNames.map(varName => s"boolean $varName${SHAMapAccessor.nullVarSuffix} = false;"). - mkString("\n") + def declareNullVarsForAggBuffer(varNames: Seq[String], genClassField: Boolean = false): String = + varNames.map { varName => + if (genClassField) { + internals.addClassField(ctx, "boolean", s"$varName${SHAMapAccessor.nullVarSuffix}", + forceInline = true, useFreshName = false) + s"$varName${SHAMapAccessor.nullVarSuffix} = false;" + } else s"boolean $varName${SHAMapAccessor.nullVarSuffix} = false;" + }.mkString("\n") /** * Generate code to lookup the map or insert a new key, value if not found. @@ -549,7 +559,7 @@ case class SHAMapAccessor(@transient session: SnappySession, ${ SHAMapAccessor.initNullBitsetCode( SHAMapAccessor.generateNullKeysBitTermForStruct(structVarName), - SHAMapAccessor.calculateNumberOfBytesForNullBits(structType.length)) + SHAMapAccessor.calculateNumberOfBytesForNullBits(structType.length), ctx) } $explodedStructCode """.stripMargin @@ -921,7 +931,7 @@ case class SHAMapAccessor(@transient session: SnappySession, } else { s"($strPart + 4)" } - case BinaryType => s"(${internals.exprCodeValue(expr)}}.length + 4) " + case BinaryType => s"(${internals.exprCodeValue(expr)}.length + 4) " case st: StructType => val (childKeysVars, childDataTypes) = getExplodedExprCodeAndDataTypeForStruct(exprValue, st, nestingLevel) @@ -1185,17 +1195,33 @@ object SHAMapAccessor extends SparkSupport { // ( depends on element type) , struct type ( depends on fields) } - def initNullBitsetCode(nullBitsetTerm: String, - numBytesForNullBits: Int): String = if (numBytesForNullBits == 0) { + def initNullBitsetCode(nullBitsetTerm: String, numBytesForNullBits: Int, ctx: CodegenContext, + genClassField: Boolean = false): String = if (numBytesForNullBits == 0) { "" } else if (numBytesForNullBits == 1) { - s"byte $nullBitsetTerm = 0;" + if (genClassField) { + internals.addClassField(ctx, "byte", nullBitsetTerm, + forceInline = true, useFreshName = false) + s"$nullBitsetTerm = 0;" + } else s"byte $nullBitsetTerm = 0;" } else if (numBytesForNullBits == 2) { - s"short $nullBitsetTerm = 0;" + if (genClassField) { + internals.addClassField(ctx, "short", nullBitsetTerm, + forceInline = true, useFreshName = false) + s"$nullBitsetTerm = 0;" + } else s"short $nullBitsetTerm = 0;" } else if (numBytesForNullBits <= 4) { - s"int $nullBitsetTerm = 0;" + if (genClassField) { + internals.addClassField(ctx, "int", nullBitsetTerm, + forceInline = true, useFreshName = false) + s"$nullBitsetTerm = 0;" + } else s"int $nullBitsetTerm = 0;" } else if (numBytesForNullBits <= 8) { - s"long $nullBitsetTerm = 0l;" + if (genClassField) { + internals.addClassField(ctx, "long", nullBitsetTerm, + forceInline = true, useFreshName = false) + s"$nullBitsetTerm = 0L;" + } else s"long $nullBitsetTerm = 0L;" } else { s""" |for( int i = 0 ; i < $numBytesForNullBits; ++i) { @@ -1219,7 +1245,10 @@ object SHAMapAccessor extends SparkSupport { def calculateNumberOfBytesForNullBits(numAttributes: Int): Int = (numAttributes + 7 )/ 8 - def generateNullKeysBitTermForStruct(structName: String): String = s"${structName}_nullKeysBitset" + def generateNullKeysBitTermForStruct(structName: String): String = { + if (structName.indexOf('[') == -1) s"${structName}_nullKeysBitset" + else s"${structName.replace('[', '_').replace(']', '_')}_nullKeysBitset" + } def generateVarNameForStructField(parentVar: String, nestingLevel: Int, index: Int): String = s"${parentVar}_${nestingLevel}_$index" diff --git a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala index 3452d3bda0..969cf6fe21 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/aggregate/SnappyHashAggregateExec.scala @@ -279,24 +279,6 @@ case class SnappyHashAggregateExec( } } - override def beforeStop(ctx: CodegenContext, plan: SparkPlan, - input: Seq[ExprCode]): String = { - if (bufVars eq null) "" - else { - bufVarUpdates = bufVars.indices.map { i => - val ev = bufVars(i) - val evIsNull = internals.exprCodeIsNull(ev) - val evValue = internals.exprCodeValue(ev) - s""" - |// update the member result variables from local variables - |this.$evIsNull = $evIsNull; - |this.$evValue = $evValue; - """.stripMargin - }.mkString("\n").trim - bufVarUpdates - } - } - // The variables used as aggregation buffer @transient protected var bufVars: Seq[ExprCode] = _ // code to update buffer variables with current values @@ -323,7 +305,7 @@ case class SnappyHashAggregateExec( """.stripMargin internals.newExprCode(ev.code.toString + initVars, isNull, value, e.dataType) } - var initBufVar = evaluateVariables(bufVars) + val initBufVar = evaluateVariables(bufVars) // generate variables for output val (resultVars, genResult) = if (modes.contains(Final) || @@ -354,21 +336,8 @@ case class SnappyHashAggregateExec( } var doAgg = ctx.freshName("doAggregateWithoutKey") - var produceOutput = getChildProducer.asInstanceOf[CodegenSupport].produce( + val produceOutput = getChildProducer.asInstanceOf[CodegenSupport].produce( ctx, this) - if (bufVarUpdates ne null) { - // use local variables while member variables are updated at the end - initBufVar = bufVars.indices.map { i => - val ev = bufVars(i) - val evIsNull = internals.exprCodeIsNull(ev) - val evValue = internals.exprCodeValue(ev) - s""" - |boolean $evIsNull = this.$evIsNull; - |${internals.javaType(initExpr(i).dataType, ctx)} $evValue = this.$evValue; - """.stripMargin - }.mkString("", "\n", initBufVar).trim - produceOutput = s"$produceOutput\n$bufVarUpdates" - } doAgg = internals.addFunction(ctx, doAgg, s""" |private void $doAgg() throws java.io.IOException { @@ -700,10 +669,12 @@ case class SnappyHashAggregateExec( val valueOffsetTerm = ctx.freshName("valueOffset") val currentValueOffSetTerm = ctx.freshName("currentValueOffSet") - val valueDataTerm = ctx.freshName("valueData") - val vdBaseObjectTerm = ctx.freshName("vdBaseObjectTerm") - val vdBaseOffsetTerm = ctx.freshName("vdBaseOffsetTerm") - val valueDataCapacityTerm = ctx.freshName("valueDataCapacity") + + val valueDataTerm = internals.addClassField(ctx, bbDataClass, "valueData") + val vdBaseObjectTerm = internals.addClassField(ctx, "Object", "vdBaseObjectTerm") + val vdBaseOffsetTerm = internals.addClassField(ctx, "long", "vdBaseOffsetTerm") + val valueDataCapacityTerm = internals.addClassField(ctx, "int", "valueDataCapacity") + var doAgg = ctx.freshName("doAggregateWithKeys") var setBBMap = ctx.freshName("setBBMap") @@ -722,13 +693,6 @@ case class SnappyHashAggregateExec( val nestedStructNullBitsTermCreator: ((String, StructType, Int) => Any) => (String, StructType, Int) => Any = (f: (String, StructType, Int) => Any) => (structVarName: String, structType: StructType, nestingLevel: Int) => { - val numBytesForNullBits = SHAMapAccessor. - calculateNumberOfBytesForNullBits(structType.length) - if (SHAMapAccessor.isByteArrayNeededForNullBits(numBytesForNullBits)) { - // TODO: variable not used in generated code apart from declaration?? - internals.addClassField(ctx, "byte[]", "struct_nullKeysBitset", - v => s"$v = new byte[$numBytesForNullBits];") - } structType.zipWithIndex.foreach { case (sf, index) => sf.dataType match { case stt: StructType => val structtVarName = SHAMapAccessor. generateExplodedStructFieldVars(structVarName, nestingLevel + 1, index)._1 @@ -745,9 +709,8 @@ case class SnappyHashAggregateExec( (structVarName: String, structType: StructType, nestingLevel: Int) => { val numBytesForNullBits = SHAMapAccessor. calculateNumberOfBytesForNullBits(structType.length) - val nullBitTerm = SHAMapAccessor. - generateNullKeysBitTermForStruct(structVarName) - val snippet1 = SHAMapAccessor.initNullBitsetCode(nullBitTerm, numBytesForNullBits) + val nullBitTerm = SHAMapAccessor.generateNullKeysBitTermForStruct(structVarName) + val snippet1 = SHAMapAccessor.initNullBitsetCode(nullBitTerm, numBytesForNullBits, ctx) val snippet2 = structType.zipWithIndex.map { case (sf, index) => sf.dataType match { case stt: StructType => val structtVarName = SHAMapAccessor. @@ -781,10 +744,11 @@ case class SnappyHashAggregateExec( val gfeCacheImplClass = classOf[GemFireCacheImpl].getName val byteBufferClass = classOf[ByteBuffer].getName - val keyBytesHolderVar = ctx.freshName("keyBytesHolder") - val baseKeyHolderOffset = ctx.freshName("baseKeyHolderOffset") - val baseKeyObject = ctx.freshName("baseKeyHolderObject") - val keyHolderCapacityTerm = ctx.freshName("keyholderCapacity") + val keyBytesHolderVar = internals.addClassField(ctx, byteBufferClass, "keyBytesHolder") + val baseKeyHolderOffset = internals.addClassField(ctx, "long", "baseKeyHolderOffset") + val baseKeyObject = internals.addClassField(ctx, "Object", "baseKeyHolderObject") + val keyHolderCapacityTerm = internals.addClassField(ctx, "int", "keyholderCapacity") + val keyExistedTerm = ctx.freshName("keyExisted") val codeForLenOfSkippedTerm = if (skipLenForAttrib != -1) { @@ -830,7 +794,7 @@ case class SnappyHashAggregateExec( // generate the map accessor to generate key/value class // and get map access methods val session = sqlContext.sparkSession.asInstanceOf[SnappySession] - val numKeyBytesTerm = ctx.freshName("numKeyBytes") + val numKeyBytesTerm = internals.addClassField(ctx, "int", "numKeyBytes") val numValueBytes = SHAMapAccessor.getSizeOfValueBytes(aggBuffDataTypes, numBytesForNullAggsBits) @@ -866,27 +830,33 @@ case class SnappyHashAggregateExec( asInstanceOf[SnappySession].sessionState.conf)}); |$allocatorClass $allocatorTerm = $gfeCacheImplClass. |getCurrentBufferAllocator(); - |$byteBufferClass $keyBytesHolderVar = null; - |int $keyHolderCapacityTerm = 0; - |Object $baseKeyObject = null; - |long $baseKeyHolderOffset = -1L; - |$bbDataClass $valueDataTerm = $hashMapTerm.getValueData(); - |Object $vdBaseObjectTerm = $valueDataTerm.baseObject(); - |long $vdBaseOffsetTerm = $valueDataTerm.baseOffset(); - |int $valueDataCapacityTerm = $valueDataTerm.capacity(); - |${SHAMapAccessor.initNullBitsetCode(nullKeysBitsetTerm, numBytesForNullKeyBits)} - |${SHAMapAccessor.initNullBitsetCode(nullAggsBitsetTerm, numBytesForNullAggsBits)} - |${byteBufferAccessor.initKeyOrBufferVal(aggBuffDataTypes, aggregateBufferVars)} - |${byteBufferAccessor.declareNullVarsForAggBuffer(aggregateBufferVars)} + |$keyBytesHolderVar = null; + |$keyHolderCapacityTerm = 0; + |$baseKeyObject = null; + |$baseKeyHolderOffset = -1L; + |$valueDataTerm = $hashMapTerm.getValueData(); + |$vdBaseObjectTerm = $valueDataTerm.baseObject(); + |$vdBaseOffsetTerm = $valueDataTerm.baseOffset(); + |$valueDataCapacityTerm = $valueDataTerm.capacity(); + |${SHAMapAccessor.initNullBitsetCode(nullKeysBitsetTerm, numBytesForNullKeyBits, + ctx, genClassField = true)} + |${SHAMapAccessor.initNullBitsetCode(nullAggsBitsetTerm, numBytesForNullAggsBits, + ctx, genClassField = true)} + |${byteBufferAccessor.initKeyOrBufferVal(aggBuffDataTypes, aggregateBufferVars, + genClassField = true)} + |${byteBufferAccessor.declareNullVarsForAggBuffer(aggregateBufferVars, + genClassField = true)} |${ if (cacheStoredAggNullBits) { - SHAMapAccessor.initNullBitsetCode(storedAggNullBitsTerm, numBytesForNullAggsBits) + SHAMapAccessor.initNullBitsetCode(storedAggNullBitsTerm, + numBytesForNullAggsBits, ctx, genClassField = true) } else "" } |${ if (cacheStoredKeyNullBits) { - SHAMapAccessor.initNullBitsetCode(storedKeyNullBitsTerm, numBytesForNullKeyBits) + SHAMapAccessor.initNullBitsetCode(storedKeyNullBitsTerm, + numBytesForNullKeyBits, ctx, genClassField = true) } else "" } - |int $numKeyBytesTerm = 0; + |$numKeyBytesTerm = 0; |$childProduce |if ($overflowHashMapsTerm == null) { | long $maxMemory = $hashMapTerm.maxMemory(); @@ -914,8 +884,8 @@ case class SnappyHashAggregateExec( |} else { |if ($overflowMapIter.hasNext()) { |$hashMapTerm = ($hashSetClassName)$overflowMapIter.next(); - |$bbDataClass $valueDataTerm = $hashMapTerm.getValueData(); - |Object $vdBaseObjectTerm = $valueDataTerm.baseObject(); + |$valueDataTerm = $hashMapTerm.getValueData(); + |$vdBaseObjectTerm = $valueDataTerm.baseObject(); |$iterValueOffsetTerm = $valueDataTerm.baseOffset(); return true; |} else { @@ -976,8 +946,8 @@ case class SnappyHashAggregateExec( $overflowMapIter = $overflowHashMapsTerm.iterator(); $overflowMapIter.next(); } - $bbDataClass $valueDataTerm = $hashMapTerm.getValueData(); - Object $vdBaseObjectTerm = $valueDataTerm.baseObject(); + $valueDataTerm = $hashMapTerm.getValueData(); + $vdBaseObjectTerm = $valueDataTerm.baseObject(); $iterValueOffsetTerm += $valueDataTerm.baseOffset(); } if ($hashMapTerm == null) { @@ -987,8 +957,8 @@ case class SnappyHashAggregateExec( getCurrentBufferAllocator(); ${byteBufferAccessor.initKeyOrBufferVal(aggBuffDataTypes, aggregateBufferVars)} ${byteBufferAccessor.initKeyOrBufferVal(keysDataType, KeyBufferVars)} - ${SHAMapAccessor.initNullBitsetCode(nullKeysBitsetTerm, numBytesForNullKeyBits)} - ${SHAMapAccessor.initNullBitsetCode(nullAggsBitsetTerm, numBytesForNullAggsBits)} + ${SHAMapAccessor.initNullBitsetCode(nullKeysBitsetTerm, numBytesForNullKeyBits, ctx)} + ${SHAMapAccessor.initNullBitsetCode(nullAggsBitsetTerm, numBytesForNullAggsBits, ctx)} ${KeyBufferVars.zip(keysDataType).map { case (varName, dataType) => dataType match { case st: StructType => @@ -999,8 +969,8 @@ case class SnappyHashAggregateExec( // output the result while($setBBMap()) { - $bbDataClass $valueDataTerm = $hashMapTerm.getValueData(); - Object $vdBaseObjectTerm = $valueDataTerm.baseObject(); + $valueDataTerm = $hashMapTerm.getValueData(); + $vdBaseObjectTerm = $valueDataTerm.baseObject(); long $endIterValueOffset = $hashMapTerm.valueDataSize() + $valueDataTerm.baseOffset(); long $localIterValueOffsetTerm = $iterValueOffsetTerm; ${byteBufferAccessor.declareNullVarsForAggBuffer(aggregateBufferVars)} @@ -1061,10 +1031,14 @@ case class SnappyHashAggregateExec( aggregateBufferAttributesForGroup, "KeyBuffer", hashMapTerm, mapDataTerm, maskTerm, multiMap = false, this, this.parent, child) - val entryClass = keyBufferAccessor.getClassName val numKeyColumns = groupingExpressions.length + internals.addClassField(ctx, s"$entryClass[]", mapDataTerm, + forceInline = true, useFreshName = false) + internals.addClassField(ctx, "int", maskTerm, + forceInline = true, useFreshName = false) + val childProduce = childProducer.asInstanceOf[CodegenSupport].produce(ctx, this) doAgg = internals.addFunction(ctx, doAgg, @@ -1072,8 +1046,8 @@ case class SnappyHashAggregateExec( private void $doAgg() throws java.io.IOException { $hashMapTerm = new $hashSetClassName(128, 0.6, $numKeyColumns, false, scala.reflect.ClassTag$$.MODULE$$.apply($entryClass.class)); - $entryClass[] $mapDataTerm = ($entryClass[])$hashMapTerm.data(); - int $maskTerm = $hashMapTerm.mask(); + $mapDataTerm = ($entryClass[])$hashMapTerm.data(); + $maskTerm = $hashMapTerm.mask(); $childProduce diff --git a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala index c22a933e16..b74a832708 100644 --- a/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala +++ b/core/src/main/scala/org/apache/spark/sql/hive/SnappySessionState.scala @@ -640,6 +640,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu snappySession.contextFunctions.queryPreparations(topLevel) protected def newQueryExecution(plan: LogicalPlan): QueryExecution = { + initSnappyStrategies new QueryExecution(snappySession, plan) { override protected def preparations: Seq[Rule[SparkPlan]] = { @@ -651,7 +652,6 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu } override final def executePlan(plan: LogicalPlan): QueryExecution = { - initSnappyStrategies clearExecutionData() beforeExecutePlan(plan) val qe = newQueryExecution(plan) @@ -659,7 +659,7 @@ trait SnappySessionState extends SessionState with SnappyStrategies with SparkSu qe } - private lazy val initSnappyStrategies: Unit = { + private[sql] lazy val initSnappyStrategies: Unit = { val storeOptimizedRules: Seq[Strategy] = Seq(StoreDataSourceStrategy, SnappyAggregation, HashJoinStrategies) diff --git a/core/src/main/scala/org/apache/spark/sql/rdds.scala b/core/src/main/scala/org/apache/spark/sql/rdds.scala index a52a60ee91..f20dd04a80 100644 --- a/core/src/main/scala/org/apache/spark/sql/rdds.scala +++ b/core/src/main/scala/org/apache/spark/sql/rdds.scala @@ -60,8 +60,10 @@ class DelegateRDD[T: ClassTag]( preferredLocations: Array[Seq[String]] = null, allDependencies: Seq[Dependency[_]] = null) extends RDD[T](sc, - if (allDependencies == null) baseRdd.dependencies - else allDependencies) + // for some weird reason passing dependencies as such causes deserialization errors + // in tests, so converting to forms (toArray.toList) that deserialize correctly + if (allDependencies == null) baseRdd.dependencies.toArray.toList + else allDependencies.toArray.toList) with Serializable { @transient override val partitioner: Option[Partitioner] = baseRdd.partitioner diff --git a/core/src/test/scala/org/apache/spark/TestPackageUtils.scala b/core/src/test/scala/org/apache/spark/TestPackageUtils.scala index 473601c3b3..ec4eaf7184 100644 --- a/core/src/test/scala/org/apache/spark/TestPackageUtils.scala +++ b/core/src/test/scala/org/apache/spark/TestPackageUtils.scala @@ -1,12 +1,26 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ package org.apache.spark import java.io.File object TestPackageUtils { - val userDir = System.getProperty("user.dir") - - val pathSeparator = File.pathSeparator + private val userDir = System.getProperty("user.dir") def destDir: File = { val jarDir = new File(s"$userDir/jars") diff --git a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala index 42a42f61be..381cbcabcb 100644 --- a/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala +++ b/core/src/test/scala/org/apache/spark/sql/store/ColumnTableBatchInsertTest.scala @@ -24,6 +24,7 @@ import io.snappydata.{ConcurrentOpsTests, SnappyFunSuite} import org.scalatest.{Assertions, BeforeAndAfter} import org.apache.spark.sql._ +import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.{Logging, SparkContext} class ColumnTableBatchInsertTest extends SnappyFunSuite @@ -464,24 +465,31 @@ class ColumnTableBatchInsertTest extends SnappyFunSuite object ColumnTableBatchInsertTest extends Assertions with SparkSupport { + private def waitForRDDInfos(sc: SparkContext, expectedSize: Int, + message: String): Seq[RDDStorageInfo] = { + var rddInfos: Seq[RDDStorageInfo] = null + waitForCriterion({ + rddInfos = internals.getCachedRDDInfos(sc) + rddInfos.length == expectedSize + }, message) + rddInfos + } + def testSparkCachingUsingSQL(sc: SparkContext, executeSQL: String => Dataset[Row], isTableCached: String => Boolean, isCached: Dataset[Row] => Boolean): Unit = { executeSQL("cache table cachedTable1 as select id, rand() from range(1000000)") // check that table has been cached and materialized assert(isTableCached("cachedTable1")) - var rddInfos = internals.getCachedRDDInfos(sc) - waitForCriterion(rddInfos.length == 1, "cached table should show up") + var rddInfos = waitForRDDInfos(sc, 1, "cached table should show up") assert(rddInfos.head.name.contains("Range (0, 1000000")) assert(executeSQL("select count(*) from cachedTable1").collect()(0).getLong(0) === 1000000) - rddInfos = internals.getCachedRDDInfos(sc) - waitForCriterion(rddInfos.length == 1, "cached table should be present") + rddInfos = waitForRDDInfos(sc, 1, "cached table should be present") assert(rddInfos.head.name.contains("Range (0, 1000000")) executeSQL("uncache table cachedTable1") assert(!isTableCached("cachedTable1")) - rddInfos = internals.getCachedRDDInfos(sc) - waitForCriterion(rddInfos.isEmpty, "cached table should be cleared") + rddInfos = waitForRDDInfos(sc, 0, "cached table should be cleared") // temporary table should still exist assert(executeSQL("select count(*) from cachedTable1").collect()(0).getLong(0) === 1000000) @@ -492,16 +500,14 @@ object ColumnTableBatchInsertTest extends Assertions with SparkSupport { rddInfos = internals.getCachedRDDInfos(sc) assert(rddInfos.length === 0) assert(executeSQL("select count(*) from cachedTable2").collect()(0).getLong(0) === 500000) - rddInfos = internals.getCachedRDDInfos(sc) - waitForCriterion(rddInfos.length == 1, "lazily cached table should show up after query") + rddInfos = waitForRDDInfos(sc, 1, "lazily cached table should show up after query") assert(rddInfos.head.name.contains("Range (0, 500000")) // drop table directly without explicit uncache should also do it val table = executeSQL("select * from cachedTable2") executeSQL("drop table cachedTable2") assert(!isCached(table)) - rddInfos = internals.getCachedRDDInfos(sc) - waitForCriterion(rddInfos.isEmpty, "cached table should be cleared") + rddInfos = waitForRDDInfos(sc, 0, "cached table should be cleared") executeSQL("drop table cachedTable1") } diff --git a/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedMap.scala b/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedMap.scala index 00b3689517..1cce951549 100644 --- a/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedMap.scala +++ b/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedMap.scala @@ -149,13 +149,13 @@ final class SerializedMap extends MapData override def write(kryo: Kryo, out: Output): Unit = { val bytes = toBytes out.writeInt(bytes.length) - out.write(bytes) + out.writeBytes(bytes) } override def read(kryo: Kryo, in: Input): Unit = { val size = in.readInt val bytes = new Array[Byte](size) - in.read(bytes) + in.readBytes(bytes) pointTo(bytes, Platform.BYTE_ARRAY_OFFSET) if (size != sizeInBytes) { throw new IOException( diff --git a/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedRow.scala b/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedRow.scala index 0bd9ac826b..c6af995a59 100644 --- a/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedRow.scala +++ b/encoders/src/main/scala/org/apache/spark/sql/catalyst/util/SerializedRow.scala @@ -415,7 +415,7 @@ trait SerializedRowData extends SpecializedGetters out.writeInt(bytes.length) out.writeVarInt(this.skipBytes, true) out.writeVarInt(this.nFields, true) - out.write(bytes) + out.writeBytes(bytes) } override final def read(kryo: Kryo, in: Input): Unit = { @@ -425,7 +425,7 @@ trait SerializedRowData extends SpecializedGetters this.bitSetWidthInBytes = calculateBitSetWidthInBytes(nFields) this.baseOffset = Platform.BYTE_ARRAY_OFFSET val bytes = new Array[Byte](sizeInBytes) - in.read(bytes) + in.readBytes(bytes) this.baseObject = bytes } diff --git a/spark b/spark index 6df2023685..3bfedf46d5 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 6df2023685aecdc6f454f8ddd465c4f191ae0dce +Subproject commit 3bfedf46d5ed37640f7f88dd7a06790ca502cec5 From b722db258aaf5bc28ed69a5edfd108210f5289f2 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 18 Mar 2020 02:48:00 +0530 Subject: [PATCH 73/80] more fixes; make RETURNS optional in CREATE FUNCTION made CREATE FUNCTION to be consistent with Spark --- .../memory/SnappyUnifiedMemoryManager.scala | 2 +- .../SnappyLocalIndexAccountingSuite.scala | 6 +- .../memory/SnappyMemoryAccountingSuite.scala | 42 ++++++-- .../spark/sql/store/SnappyUDFTest.scala | 9 ++ .../spark/sql/hive/HiveAccessUtil.scala | 33 ++++++ .../spark/sql/internal/Spark21Internals.scala | 8 +- .../spark/sql/hive/HiveAccessUtil.scala | 33 ++++++ .../sql/internal/Spark23_4_Internals.scala | 29 +++-- .../snappydata/impl/KryoJavaSerializer.java | 101 ++++++++++++++++++ .../serializer/PooledKryoSerializer.scala | 14 ++- .../SnappyKryoSerializerFactory.scala | 3 +- .../apache/spark/sql/SnappyDDLParser.scala | 13 +-- .../org/apache/spark/sql/SparkInternals.scala | 8 ++ .../sql/internal/SnappySessionCatalog.scala | 21 ++-- .../spark/sql/internal/UDFFunction.scala | 45 ++++++-- spark | 2 +- 16 files changed, 310 insertions(+), 59 deletions(-) create mode 100644 core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala create mode 100644 core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala create mode 100644 core/src/main/java/io/snappydata/impl/KryoJavaSerializer.java diff --git a/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala b/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala index 15cdcbe59d..568e125e04 100644 --- a/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala +++ b/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala @@ -193,7 +193,7 @@ class SnappyUnifiedMemoryManager private[memory]( private[this] val threadsWaitingForStorage = new AtomicInteger() - private[this] val SPARK_CACHE = "_SPARK_CACHE_" + private[this] val SPARK_CACHE = "_SPARK_CACHE_AND_BROADCAST_" private[this] val evictor = new SnappyStorageEvictor diff --git a/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala b/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala index cf596604e9..eb9374a158 100644 --- a/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala @@ -61,11 +61,13 @@ class SnappyLocalIndexAccountingSuite extends MemoryFunSuite { "jdbc:snappydata://" + serverHostPort) val stmt = conn.createStatement() stmt.execute("create index t1_index1 on t1 (col1)") + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterCreateIndex = SparkEnv.get.memoryManager.storageMemoryUsed assert(afterCreateIndex > 0) stmt.execute("drop index t1_index1") + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterDropIndex = SparkEnv.get.memoryManager.storageMemoryUsed - assert(afterDropIndex < afterCreateIndex) + assert(afterDropIndex < afterCreateIndex) } test("Test Put Overhead on row partitioned table") { @@ -217,6 +219,7 @@ class SnappyLocalIndexAccountingSuite extends MemoryFunSuite { "jdbc:snappydata://" + serverHostPort) val stmt = conn.createStatement() stmt.execute("create index t1_index1 on t1 (col1)") + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterIndex = SparkEnv.get.memoryManager.storageMemoryUsed SnappyContext.globalSparkContext.stop() sparkSession = createSparkSession(1, 0, 2000000L) @@ -238,6 +241,7 @@ class SnappyLocalIndexAccountingSuite extends MemoryFunSuite { "jdbc:snappydata://" + serverHostPort) val stmt = conn.createStatement() stmt.execute("create index t1_index1 on t1 (col1)") + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterIndex = SparkEnv.get.memoryManager.storageMemoryUsed SnappyContext.globalSparkContext.stop() sparkSession = createSparkSession(1, 0, 2000000L) diff --git a/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala b/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala index e592be1319..c0de2af2eb 100644 --- a/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala @@ -22,6 +22,7 @@ import java.sql.SQLException import java.util.Properties import scala.actors.Futures._ +import scala.collection.JavaConverters._ import com.gemstone.gemfire.cache.LowMemoryException import com.gemstone.gemfire.internal.cache.{GemFireCacheImpl, LocalRegion} @@ -34,7 +35,7 @@ import org.apache.spark.sql.catalyst.expressions.{SpecificInternalRow, UnsafePro import org.apache.spark.sql.types._ import org.apache.spark.sql.{CachedDataFrame, Row, SnappyContext, SnappySession} import org.apache.spark.unsafe.types.UTF8String -import org.apache.spark.{SparkEnv, TaskContextImpl} +import org.apache.spark.{CleanBroadcast, SparkContext, SparkEnv, TaskContextImpl} class SnappyMemoryAccountingSuite extends MemoryFunSuite { @@ -48,7 +49,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { .add(StructField("col3", IntegerType, true)) val options = Map("PARTITION_BY" -> "col1", "EVICTION_BY" -> - "LRUHEAPPERCENT") + "LRUHEAPPERCENT") val coptions = Map("PARTITION_BY" -> "col1", "BUCKETS" -> "1", "EVICTION_BY" -> "LRUHEAPPERCENT") val cwoptions = Map("BUCKETS" -> "1", "EVICTION_BY" -> "LRUHEAPPERCENT") @@ -277,6 +278,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 0) + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed assert(beforeInsertMem == afterRebootMemory) // 4 bytes for hashmap. Need to check snSession.dropTable("t1") @@ -307,6 +309,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { assert(snSession.sql("select * from t1").collect().length == 5) + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed // Due to a design flaw in recovery we always recover one more value than the LRU limit. assertApproximate(beforeRebootMemory, afterRebootMemory) @@ -332,6 +335,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 0) + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed assert(beforeInsertMem == afterRebootMemory) // 4 bytes for hashmap. Need to check snSession.dropTable("t1") @@ -357,6 +361,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 5) + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed // Due to a design flaw in recovery we always recover one more value than the LRU limit. assertApproximate(beforeRebootMemory, afterRebootMemory) @@ -383,6 +388,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 10) + SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed assertApproximate(beforeRebootMemory, afterRebootMemory, 4) snSession.dropTable("t1") @@ -562,20 +568,20 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { } - test("Concurrent query mem-check"){ + test("Concurrent query mem-check") { val sparkSession = createSparkSession(1, 0, 1000000) val snSession = new SnappySession(sparkSession.sparkContext) LocalRegion.MAX_VALUE_BEFORE_ACQUIRE = 120 * 100 val options = "OPTIONS (BUCKETS '8', " + - "PARTITION_BY 'Col1')" + "PARTITION_BY 'Col1')" snSession.sql("CREATE TABLE t1 (Col1 INT, Col2 INT, Col3 INT) " + " USING row " + - options + options ) val rowCount = 100 - def runQueries(i : Int): Unit = { + def runQueries(i: Int): Unit = { for (_ <- 0 until rowCount) { snSession.insert("t1", Row(1, 1, 1)) } @@ -589,7 +595,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { awaitAll(20000000L, tasks: _*) // Rough estimation of 120 bytes per row - assert(SparkEnv.get.memoryManager.storageMemoryUsed >= 120 * 100 * 5 ) + assert(SparkEnv.get.memoryManager.storageMemoryUsed >= 120 * 100 * 5) val count = snSession.sql("select * from t1").count() assert(count == 500) snSession.dropTable("t1") @@ -610,7 +616,7 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { val unsafeRow: UnsafeRow = converter.apply(row) SparkEnv.get.memoryManager - .acquireStorageMemory(MemoryManagerCallback.storageBlockId, 300, memoryMode) + .acquireStorageMemory(MemoryManagerCallback.storageBlockId, 300, memoryMode) val taskMemoryManager = new TaskMemoryManager(sparkSession.sparkContext.env.memoryManager, 0L) @@ -618,9 +624,9 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { new TaskContextImpl(0, 0, 0, taskAttemptId = 1, 0, taskMemoryManager, new Properties, null) try { CachedDataFrame(taskContext, Seq(unsafeRow).iterator) - assert(false , "Should not have obtained memory") + assert(false, "Should not have obtained memory") } catch { - case lme : LowMemoryException => // Success + case lme: LowMemoryException => // Success } } @@ -661,3 +667,19 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession.dropTable("t1") } } + +object SnappyMemoryAccountingSuite { + + /** + * Each Task in Spark creates a broadcast that will normally be cleaned up + * after reference has been collected by GC. This method forcefully clears + * all pending broadcasts. + */ + def cleanupBroadcasts(): Unit = { + val cleaner = SparkContext.getActive.get.cleaner.get + cleaner.referenceBuffer.asScala.foreach(_.task match { + case CleanBroadcast(id) => cleaner.doCleanupBroadcast(id, blocking = true) + case _ => + }) + } +} diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/SnappyUDFTest.scala b/cluster/src/test/scala/org/apache/spark/sql/store/SnappyUDFTest.scala index 03cbf91a21..df17ca5624 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/SnappyUDFTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/SnappyUDFTest.scala @@ -24,6 +24,7 @@ import io.snappydata.SnappyFunSuite import org.scalatest.BeforeAndAfterAll import org.apache.spark.jdbc.{ConnectionConfBuilder, ConnectionUtil} +import org.apache.spark.sql.Row import org.apache.spark.sql.udf.UserDefinedFunctionsDUnitTest._ case class OrderData(ref: Int, description: String, price: Long, @@ -92,6 +93,14 @@ class SnappyUDFTest extends SnappyFunSuite with BeforeAndAfterAll { snc.sql("select APP.byteudf(description) from rr_table").collect() showDescribe("byteudf") dropUdf("byteudf") + + // also check without RETURNS + snc.sql(s"CREATE FUNCTION APP.byteudf2 AS ByteUDF " + + s"USING JAR '$jar'") + assert(snc.sql("select app.byteudf2(description) from col_table a").collect()(0) === + Row(122.asInstanceOf[Byte])) + showDescribe("byteudf2") + dropUdf("byteudf2") } test("Test Nested UDF with schema") { diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala new file mode 100644 index 0000000000..820bd57ac9 --- /dev/null +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.hive + +import java.lang.reflect.Type + +import org.apache.spark.sql.Row +import org.apache.spark.sql.types.{DataType, NullType} + +/** + * Helper methods for hive package access. + */ +object HiveAccessUtil extends HiveInspectors { + + override def javaClassToDataType(clz: Class[_]): DataType = clz match { + case c: Class[_] if classOf[Row].isAssignableFrom(c) => NullType // indicates StructType + case _ => super.javaClassToDataType(clz) + } +} diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala index 3919236c7e..bbd48b831a 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/internal/Spark21Internals.scala @@ -17,6 +17,8 @@ package org.apache.spark.sql.internal +import java.lang.reflect.Method + import scala.util.control.NonFatal import io.snappydata.Property.HashAggregateSize @@ -53,7 +55,7 @@ import org.apache.spark.sql.execution.datasources._ import org.apache.spark.sql.execution.exchange.{Exchange, ShuffleExchange} import org.apache.spark.sql.execution.row.RowTableScan import org.apache.spark.sql.execution.ui.{SQLTab, SnappySQLListener} -import org.apache.spark.sql.hive.{HiveConditionalRule, HiveConditionalStrategy, HiveSessionCatalog, SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} +import org.apache.spark.sql.hive.{HiveAccessUtil, HiveConditionalRule, HiveConditionalStrategy, HiveSessionCatalog, SnappyAnalyzer, SnappyHiveExternalCatalog, SnappySessionState} import org.apache.spark.sql.internal.SQLConf.SQLConfigBuilder import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, StreamingQueryManager} @@ -623,6 +625,10 @@ class Spark21Internals(override val version: String) extends SparkInternals { info.memSize, info.diskSize, dataDistribution = None, partitions = None)) } + override def getReturnDataType(method: Method): DataType = { + HiveAccessUtil.javaClassToDataType(method.getReturnType) + } + override def newExprCode(code: String, isNull: String, value: String, dt: DataType): ExprCode = { ExprCode(code, isNull, value) } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala new file mode 100644 index 0000000000..2d457823ea --- /dev/null +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/hive/HiveAccessUtil.scala @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2017-2020 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package org.apache.spark.sql.hive + +import java.lang.reflect.Type + +import org.apache.spark.sql.Row +import org.apache.spark.sql.types.{DataType, NullType} + +/** + * Helper methods for hive package access. + */ +object HiveAccessUtil extends HiveInspectors { + + override def javaTypeToDataType(clz: Type): DataType = clz match { + case c: Class[_] if classOf[Row].isAssignableFrom(c) => NullType // indicates StructType + case _ => super.javaTypeToDataType(clz) + } +} diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index 3fced87315..cb09241d01 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -16,7 +16,7 @@ */ package org.apache.spark.sql.internal -import java.lang.reflect.Field +import java.lang.reflect.{Field, Method} import scala.collection.mutable @@ -55,13 +55,13 @@ import org.apache.spark.sql.execution.ui.{SQLAppStatusListener, SQLAppStatusStor import org.apache.spark.sql.hive._ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, OutputMode, StreamingQuery, StreamingQueryManager, Trigger} -import org.apache.spark.sql.types.StructType +import org.apache.spark.sql.types.{DataType, StructType} import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext import org.apache.spark.streaming.dstream.DStream import org.apache.spark.unsafe.Platform -import org.apache.spark.util.{Clock, Utils} +import org.apache.spark.util.Clock /** * Base implementation of [[SparkInternals]] for Spark 2.3.x and 2.4.x releases. @@ -502,6 +502,10 @@ abstract class Spark23_4_Internals extends SparkInternals { context.statusStore.rddList() } + override def getReturnDataType(method: Method): DataType = { + HiveAccessUtil.javaTypeToDataType(method.getGenericReturnType) + } + override def newExplainCommand(logicalPlan: LogicalPlan, extended: Boolean, codegen: Boolean, cost: Boolean): LogicalPlan = { ExplainCommand(logicalPlan, extended, codegen, cost) @@ -547,20 +551,13 @@ trait SnappySessionCatalog23_4 extends SessionCatalog with SnappySessionCatalog override def registerFunction(funcDefinition: CatalogFunction, overrideIfExists: Boolean, functionBuilder: Option[FunctionBuilder]): Unit = { - val func = funcDefinition.identifier - if (functionRegistry.functionExists(func) && !overrideIfExists) { - throw new AnalysisException(s"Function $func already exists") - } - val info = new ExpressionInfo(funcDefinition.className, func.database.orNull, func.funcName) - val builder = functionBuilder.getOrElse { - val className = funcDefinition.className - if (!Utils.classIsLoadable(className)) { - throw new AnalysisException(s"Can not load class '$className' when registering " + - s"the function '$func', please make sure it is on the classpath") - } - makeFunctionBuilderImpl(func.unquotedString, className) + val builder = functionBuilder match { + case None => + Some(makeFunctionBuilderImpl(funcDefinition.identifier.unquotedString, + funcDefinition.className)) + case _ => functionBuilder } - functionRegistry.registerFunction(func, info, builder) + super.registerFunction(funcDefinition, overrideIfExists, builder) } } diff --git a/core/src/main/java/io/snappydata/impl/KryoJavaSerializer.java b/core/src/main/java/io/snappydata/impl/KryoJavaSerializer.java new file mode 100644 index 0000000000..5e6b45b836 --- /dev/null +++ b/core/src/main/java/io/snappydata/impl/KryoJavaSerializer.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ +package io.snappydata.impl; + +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; +import java.util.HashMap; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.KryoException; +import com.esotericsoftware.kryo.io.Input; +import com.esotericsoftware.kryo.serializers.JavaSerializer; +import com.esotericsoftware.kryo.util.ObjectMap; +import org.apache.spark.util.Utils; + +/** + * Fixes ObjectInputStreamWithKryoClassLoader.resolveClass to handle primitive classes. + */ +public class KryoJavaSerializer extends JavaSerializer { + + public Object read(Kryo kryo, Input input, Class type) { + try { + @SuppressWarnings("unchecked") + ObjectMap graphContext = kryo.getGraphContext(); + ObjectInputStream objectStream = (ObjectInputStream)graphContext.get(this); + if (objectStream == null) { + objectStream = new ObjectInputStreamWithKryoClassLoader(input, kryo); + graphContext.put(this, objectStream); + } + return objectStream.readObject(); + } catch (Exception ex) { + throw new KryoException("Error during Java deserialization.", ex); + } + } + + /** + * Taken from Kryo's JavaSerializer.ObjectInputStreamWithKryoClassLoader. + * This falls back to super.resolveClass in case of error so as to load + * primitive classes among others. + */ + private static class ObjectInputStreamWithKryoClassLoader extends ObjectInputStream { + + private static final HashMap> primClasses; + + static { + primClasses = new HashMap<>(8, 1.0F); + primClasses.put("boolean", boolean.class); + primClasses.put("byte", byte.class); + primClasses.put("char", char.class); + primClasses.put("short", short.class); + primClasses.put("int", int.class); + primClasses.put("long", long.class); + primClasses.put("float", float.class); + primClasses.put("double", double.class); + primClasses.put("void", void.class); + } + + private final ClassLoader loader; + + ObjectInputStreamWithKryoClassLoader(InputStream in, Kryo kryo) throws IOException { + super(in); + this.loader = kryo.getClassLoader(); + } + + @Override + protected Class resolveClass(ObjectStreamClass desc) { + String name = desc.getName(); + try { + return Class.forName(name, false, loader); + } catch (ClassNotFoundException e) { + Class cl = primClasses.get(name); + if (cl != null) { + return cl; + } else { + try { + // try Spark default way of loading classes + return Class.forName(name, false, Utils.getContextOrSparkClassLoader()); + } catch (ClassNotFoundException cnfe) { + throw new RuntimeException("Class not found: " + name, cnfe); + } + } + } + } + } +} diff --git a/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala b/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala index 7c8b8badbb..7191d59eef 100644 --- a/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala +++ b/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala @@ -24,9 +24,11 @@ import scala.reflect.ClassTag import com.esotericsoftware.kryo.io.{ByteBufferOutput, Input} import com.esotericsoftware.kryo.serializers.DefaultSerializers.KryoSerializableSerializer -import com.esotericsoftware.kryo.serializers.{ExternalizableSerializer, JavaSerializer => KryoJavaSerializer} +import com.esotericsoftware.kryo.serializers.ExternalizableSerializer import com.esotericsoftware.kryo.{Kryo, KryoException} +import io.snappydata.impl.KryoJavaSerializer +import org.apache.spark.api.python.PythonBroadcast import org.apache.spark.broadcast.TorrentBroadcast import org.apache.spark.executor.{InputMetrics, OutputMetrics, ShuffleReadMetrics, ShuffleWriteMetrics, TaskMetrics} import org.apache.spark.network.util.ByteUnit @@ -48,8 +50,8 @@ import org.apache.spark.storage.BlockManagerMessages.{RemoveBlock, RemoveBroadca import org.apache.spark.storage._ import org.apache.spark.unsafe.types.UTF8String import org.apache.spark.util.collection.BitSet -import org.apache.spark.util.{CollectionAccumulator, DoubleAccumulator, LongAccumulator, SerializableBuffer, Utils} -import org.apache.spark.{Logging, SparkConf, SparkEnv} +import org.apache.spark.util.{CollectionAccumulator, DoubleAccumulator, LongAccumulator, SerializableBuffer, SerializableConfiguration, SerializableJobConf, Utils} +import org.apache.spark.{Logging, SerializableWritable, SparkConf, SparkEnv} /** * A pooled, optimized version of Spark's KryoSerializer that also works for @@ -152,6 +154,12 @@ final class PooledKryoSerializer(conf: SparkConf) kryo.register(classOf[TokenLiteral], new KryoSerializableSerializer) kryo.register(classOf[ParamLiteral], new KryoSerializableSerializer) kryo.register(classOf[DynamicFoldableExpression], new KryoSerializableSerializer) + + // Allow sending classes with custom Java serializers + kryo.register(classOf[SerializableWritable[_]], new KryoJavaSerializer) + kryo.register(classOf[SerializableConfiguration], new KryoJavaSerializer) + kryo.register(classOf[SerializableJobConf], new KryoJavaSerializer) + kryo.register(classOf[PythonBroadcast], new KryoJavaSerializer) // default kryo field serializer fails for InMemoryTableScanExec for some reason kryo.register(classOf[InMemoryTableScanExec], new KryoJavaSerializer) diff --git a/core/src/main/scala/org/apache/spark/serializer/SnappyKryoSerializerFactory.scala b/core/src/main/scala/org/apache/spark/serializer/SnappyKryoSerializerFactory.scala index afebb31ae2..aac5e3db71 100644 --- a/core/src/main/scala/org/apache/spark/serializer/SnappyKryoSerializerFactory.scala +++ b/core/src/main/scala/org/apache/spark/serializer/SnappyKryoSerializerFactory.scala @@ -19,9 +19,10 @@ package org.apache.spark.serializer import java.io.{ObjectInputStream, ObjectOutputStream, Serializable => JavaSerializable} import com.esotericsoftware.kryo.factories.SerializerFactory -import com.esotericsoftware.kryo.serializers.{FieldSerializer => KryoFieldSerializer, JavaSerializer => KryoJavaSerializer} +import com.esotericsoftware.kryo.serializers.{FieldSerializer => KryoFieldSerializer} import com.esotericsoftware.kryo.{Kryo, Serializer => KryoClassSerializer} import com.gemstone.gemfire.internal.shared.ClientSharedUtils +import io.snappydata.impl.KryoJavaSerializer /** * This serializer factory will instantiate new serializers of a given class via reflection. If diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala index 148327017d..e5b4fc5445 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyDDLParser.scala @@ -730,17 +730,18 @@ abstract class SnappyDDLParser(session: SnappySession) */ protected def createFunction: Rule1[LogicalPlan] = rule { CREATE ~ (OR ~ REPLACE ~ push(true)).? ~ (TEMPORARY ~ push(true)).? ~ FUNCTION ~ - ifNotExists ~ functionIdentifier ~ AS ~ qualifiedName ~ RETURNS ~ columnDataType ~ - USING ~ (resourceType + commaSep) ~> + ifNotExists ~ functionIdentifier ~ AS ~ (qualifiedName | stringLiteral) ~ + (RETURNS ~ columnDataType).? ~ USING ~ (resourceType + commaSep) ~> { (replace: Any, te: Any, ignoreIfExists: Boolean, functionIdent: FunctionIdentifier, - className: String, t: DataType, resources: Any) => + className: String, t: Any, resources: Any) => val isTemp = te.asInstanceOf[Option[Boolean]].isDefined val funcResources = resources.asInstanceOf[Seq[FunctionResource]] funcResources.foreach(checkExists) - val catalogString = t match { - case VarcharType(Int.MaxValue) => "string" - case _ => t.catalogString + val catalogString = t.asInstanceOf[Option[DataType]] match { + case None => "" + case Some(CharType(Int.MaxValue)) | Some(VarcharType(Int.MaxValue)) => "string" + case Some(dt) => dt.catalogString } val classNameWithType = className + "__" + catalogString internals.newCreateFunctionCommand(functionIdent.database, diff --git a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala index 3447ba1777..9c7b0fb8ed 100644 --- a/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala +++ b/core/src/main/scala/org/apache/spark/sql/SparkInternals.scala @@ -16,6 +16,8 @@ */ package org.apache.spark.sql +import java.lang.reflect.Method + import io.snappydata.sql.catalog.SnappyExternalCatalog import io.snappydata.{HintName, QueryHint} import org.apache.hadoop.conf.Configuration @@ -669,6 +671,12 @@ trait SparkInternals extends Logging { */ def getCachedRDDInfos(context: SparkContext): Seq[RDDStorageInfo] + /** + * Get the return data type of given java method. + * A result of NullType indicates a possible StructType, so caller should check for the same. + */ + def getReturnDataType(method: Method): DataType + /** * Create a new ExprCode with given arguments. */ diff --git a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala index 2b297ac03e..db336109a3 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/SnappySessionCatalog.scala @@ -1085,7 +1085,7 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { super.listPartitionsByFilter(tableName, predicates) } - // TODO: SW: clean up function creation to be like Spark with backward compatibility + // TODO: SW: clean up function resource loading to be like Spark with backward compatibility override def loadFunctionResources(resources: Seq[FunctionResource]): Unit = { val qualifiedName = SnappyExternalCatalog.currentFunctionIdentifier.get() @@ -1094,15 +1094,11 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { val callbacks = ToolsCallbackInit.toolsCallback val newClassLoader = ContextJarUtils.getDriverJar(functionQualifiedName) match { case None => - val urls = if (callbacks != null) { + val urls = if (callbacks ne null) { resources.map { r => ContextJarUtils.fetchFile(functionQualifiedName, r.uri) } - } else { - resources.map { r => - toUrl(r) - } - } + } else resources.map(toUrl) val newClassLoader = new MutableURLClassLoader(urls.toArray, parentLoader) ContextJarUtils.addDriverJar(functionQualifiedName, newClassLoader) newClassLoader @@ -1162,14 +1158,15 @@ trait SnappySessionCatalog extends SessionCatalog with SparkSupport { } protected def makeFunctionBuilderImpl(funcName: String, className: String): FunctionBuilder = { - val uRLClassLoader = ContextJarUtils.getDriverJar(funcName) match { + val urlClassLoader = ContextJarUtils.getDriverJar(funcName) match { case None => org.apache.spark.util.Utils.getContextOrSparkClassLoader case Some(c) => c } - val (actualClassName, typeName) = className.splitAt(className.lastIndexOf("__")) - UDFFunction.makeFunctionBuilder(funcName, - uRLClassLoader.loadClass(actualClassName), - parser.parseDataType(typeName.stripPrefix("__"))) + val splitIndex = className.lastIndexOf("__") + val actualClassName = className.substring(0, splitIndex) + val typeName = if (splitIndex != -1) className.substring(splitIndex + 2) else "" + val dataType = if (typeName.isEmpty) None else Some(parser.parseDataType(typeName)) + UDFFunction.makeFunctionBuilder(funcName, urlClassLoader.loadClass(actualClassName), dataType) } /** diff --git a/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala b/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala index 39dfdf954c..5ccf2867ed 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/UDFFunction.scala @@ -18,16 +18,16 @@ package org.apache.spark.sql.internal import scala.util.control.NonFatal -import org.apache.spark.sql.AnalysisException import org.apache.spark.sql.api.java._ import org.apache.spark.sql.catalyst.analysis.FunctionRegistry._ import org.apache.spark.sql.catalyst.expressions.{Expression, ScalaUDF} import org.apache.spark.sql.execution.aggregate.ScalaUDAF import org.apache.spark.sql.expressions.UserDefinedAggregateFunction -import org.apache.spark.sql.types.DataType +import org.apache.spark.sql.types.{DataType, NullType} +import org.apache.spark.sql.{AnalysisException, SparkSupport} -object UDFFunction { +object UDFFunction extends SparkSupport { private def scalaUDF(function: AnyRef, dataType: DataType, children: Seq[Expression], inputTypes: Seq[DataType] = Nil, @@ -36,13 +36,45 @@ object UDFFunction { new ScalaUDF(function, dataType, children, inputTypes, udfName) } - def makeFunctionBuilder(name: String, clazz: Class[_], returnType: DataType): FunctionBuilder = { + def makeFunctionBuilder(name: String, clazz: Class[_], dt: Option[DataType]): FunctionBuilder = { children: Seq[Expression] => { try { if (classOf[UserDefinedAggregateFunction].isAssignableFrom(clazz)) { val udaf = clazz.newInstance().asInstanceOf[UserDefinedAggregateFunction] - ScalaUDAF(children, udaf) + val e = ScalaUDAF(children, udaf, 1, 1) + // Check input argument size + if (e.inputTypes.length != children.length) { + throw new AnalysisException(s"Invalid number of arguments for function $name. " + + s"Expected: ${e.inputTypes.size}; Found: ${children.length}") + } + dt match { + case None => + case Some(t) => + if (t.asNullable != e.dataType.asNullable) { + throw new AnalysisException(s"Defined return type (${t.catalogString}) " + + s"does not match the one in function definition (${e.dataType.catalogString})") + } + } + e } else { + // infer the return type and check against the one defined + val inferred = clazz.getMethods.find(_.getName == "call") match { + case None => NullType + case Some(m) => internals.getReturnDataType(m) + } + val returnType = dt match { + case None => inferred + case Some(t) => + if (t.asNullable != inferred.asNullable) { + // an inferred type of NullType can be StructType or any other + if (inferred != NullType) { + throw new AnalysisException(s"Defined return type (${t.catalogString}) " + + s"does not match the one in function definition (${inferred.catalogString})") + } + } + t + } + // noinspection ScalaDocParserErrorInspection children.size match { // scalastyle:off line.size.limit @@ -156,8 +188,7 @@ object UDFFunction { } } } catch { - case ae: AnalysisException => - throw ae + case ae: AnalysisException => throw ae case NonFatal(e) => val analysisException = new AnalysisException(s"No handler for SnappyStore UDF '${clazz.getCanonicalName}': $e") diff --git a/spark b/spark index 3bfedf46d5..3d06efb619 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 3bfedf46d5ed37640f7f88dd7a06790ca502cec5 +Subproject commit 3d06efb61900579268330a2637093a1c3893018d From 70eda68583e70cad729353a8bf6dd6c3ea62e257 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Wed, 18 Mar 2020 21:37:07 +0530 Subject: [PATCH 74/80] more test and GUI plan fixes - add search and explicit cleanup of broadcast exchanges at the end of query execution (else they would only be cleared with GC collects the reference) - corrected GUI plan timings and cleanup the END message to deliver it reliably and not leave dangling SQL tasks running forever in some cases. - other test changes for Spark 2.4.5 to fix failures and --- .../memory/SnappyUnifiedMemoryManager.scala | 12 +-- .../PreparedQueryRoutingSingleNodeSuite.scala | 4 +- .../SnappyLocalIndexAccountingSuite.scala | 4 - .../memory/SnappyMemoryAccountingSuite.scala | 24 +----- .../memory/SnappyStorageEvictorSuite.scala | 2 +- .../org/apache/spark/sql/NorthWindTest.scala | 8 +- .../org/apache/spark/sql/store/BugTest.scala | 2 +- .../sql/store/ColumnTablesTestBase.scala | 6 +- .../sql/execution/ui/SnappySQLListener.scala | 21 +---- .../execution/ui/SnappySQLAppListener.scala | 43 ++-------- .../apache/spark/sql/CachedDataFrame.scala | 32 ++++--- .../org/apache/spark/sql/SnappySession.scala | 84 +++++++++---------- .../spark/sql/execution/ExistingPlans.scala | 2 +- .../org/apache/spark/sql/execution/ddl.scala | 7 +- spark | 2 +- 15 files changed, 89 insertions(+), 164 deletions(-) diff --git a/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala b/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala index 568e125e04..382dc6214a 100644 --- a/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala +++ b/cluster/src/main/scala/org/apache/spark/memory/SnappyUnifiedMemoryManager.scala @@ -173,7 +173,7 @@ class SnappyUnifiedMemoryManager private[memory]( memoryForObject.forEachKeyValue(new ObjectLongProcedure[MemoryOwner] { override def value(p: MemoryOwner, numBytes: Long): Unit = { val objectName = p.owner - if (!objectName.equals(SPARK_CACHE) && + if (!objectName.equals(SnappyUnifiedMemoryManager.SPARK_CACHE) && !objectName.endsWith(BufferAllocator.STORE_DATA_FRAME_OUTPUT)) { bootManagerMap.addToValue(p, numBytes) } @@ -193,8 +193,6 @@ class SnappyUnifiedMemoryManager private[memory]( private[this] val threadsWaitingForStorage = new AtomicInteger() - private[this] val SPARK_CACHE = "_SPARK_CACHE_AND_BROADCAST_" - private[this] val evictor = new SnappyStorageEvictor def this(conf: SparkConf, numCores: Int, tempManager: Boolean = false) = { @@ -545,8 +543,8 @@ class SnappyUnifiedMemoryManager private[memory]( blockId: BlockId, numBytes: Long, memoryMode: MemoryMode): Boolean = { - acquireStorageMemoryForObject(SPARK_CACHE, blockId, numBytes, memoryMode, null, - shouldEvict = true) + acquireStorageMemoryForObject(SnappyUnifiedMemoryManager.SPARK_CACHE, blockId, numBytes, + memoryMode, null, shouldEvict = true) } private def askStoragePool(objectName: String, @@ -775,7 +773,7 @@ class SnappyUnifiedMemoryManager private[memory]( } override def releaseStorageMemory(numBytes: Long, memoryMode: MemoryMode): Unit = { - releaseStorageMemoryForObject(SPARK_CACHE, numBytes, memoryMode) + releaseStorageMemoryForObject(SnappyUnifiedMemoryManager.SPARK_CACHE, numBytes, memoryMode) } override def dropStorageMemoryForObject(name: String, @@ -858,6 +856,8 @@ object SnappyUnifiedMemoryManager extends Logging { private val DEFAULT_STORAGE_FRACTION = 0.5 + val SPARK_CACHE: String = "_SPARK_CACHE_AND_BROADCAST_" + private def getMaxHeapMemory: Long = { val maxMemory = Runtime.getRuntime.maxMemory() if (maxMemory > 0 && maxMemory != Long.MaxValue) maxMemory diff --git a/cluster/src/test/scala/io/snappydata/cluster/PreparedQueryRoutingSingleNodeSuite.scala b/cluster/src/test/scala/io/snappydata/cluster/PreparedQueryRoutingSingleNodeSuite.scala index ed7f3630fb..cf2251ecd6 100644 --- a/cluster/src/test/scala/io/snappydata/cluster/PreparedQueryRoutingSingleNodeSuite.scala +++ b/cluster/src/test/scala/io/snappydata/cluster/PreparedQueryRoutingSingleNodeSuite.scala @@ -1086,7 +1086,7 @@ class PreparedQueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndA } logInfo(s"1-Number of rows read " + index) assert(index == 46) - assert(cacheMap.size() == 0) + assert(cacheMap.size() == 0 || cacheMap.size() == 1) prepStatement1.setInt(1, 5) prepStatement1.setInt(2, 5) @@ -1107,7 +1107,7 @@ class PreparedQueryRoutingSingleNodeSuite extends SnappyFunSuite with BeforeAndA } logInfo(s"2-Number of rows read " + index) assert(index == 65) - assert(cacheMap.size() == 0) + assert(cacheMap.size() == 0 || cacheMap.size() == 1) close(prepStatement1) } finally { diff --git a/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala b/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala index eb9374a158..ab2f8c3e0d 100644 --- a/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/memory/SnappyLocalIndexAccountingSuite.scala @@ -61,11 +61,9 @@ class SnappyLocalIndexAccountingSuite extends MemoryFunSuite { "jdbc:snappydata://" + serverHostPort) val stmt = conn.createStatement() stmt.execute("create index t1_index1 on t1 (col1)") - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterCreateIndex = SparkEnv.get.memoryManager.storageMemoryUsed assert(afterCreateIndex > 0) stmt.execute("drop index t1_index1") - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterDropIndex = SparkEnv.get.memoryManager.storageMemoryUsed assert(afterDropIndex < afterCreateIndex) } @@ -219,7 +217,6 @@ class SnappyLocalIndexAccountingSuite extends MemoryFunSuite { "jdbc:snappydata://" + serverHostPort) val stmt = conn.createStatement() stmt.execute("create index t1_index1 on t1 (col1)") - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterIndex = SparkEnv.get.memoryManager.storageMemoryUsed SnappyContext.globalSparkContext.stop() sparkSession = createSparkSession(1, 0, 2000000L) @@ -241,7 +238,6 @@ class SnappyLocalIndexAccountingSuite extends MemoryFunSuite { "jdbc:snappydata://" + serverHostPort) val stmt = conn.createStatement() stmt.execute("create index t1_index1 on t1 (col1)") - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterIndex = SparkEnv.get.memoryManager.storageMemoryUsed SnappyContext.globalSparkContext.stop() sparkSession = createSparkSession(1, 0, 2000000L) diff --git a/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala b/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala index c0de2af2eb..19e2dcb78d 100644 --- a/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/memory/SnappyMemoryAccountingSuite.scala @@ -22,7 +22,6 @@ import java.sql.SQLException import java.util.Properties import scala.actors.Futures._ -import scala.collection.JavaConverters._ import com.gemstone.gemfire.cache.LowMemoryException import com.gemstone.gemfire.internal.cache.{GemFireCacheImpl, LocalRegion} @@ -35,7 +34,7 @@ import org.apache.spark.sql.catalyst.expressions.{SpecificInternalRow, UnsafePro import org.apache.spark.sql.types._ import org.apache.spark.sql.{CachedDataFrame, Row, SnappyContext, SnappySession} import org.apache.spark.unsafe.types.UTF8String -import org.apache.spark.{CleanBroadcast, SparkContext, SparkEnv, TaskContextImpl} +import org.apache.spark.{SparkEnv, TaskContextImpl} class SnappyMemoryAccountingSuite extends MemoryFunSuite { @@ -278,7 +277,6 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 0) - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed assert(beforeInsertMem == afterRebootMemory) // 4 bytes for hashmap. Need to check snSession.dropTable("t1") @@ -309,7 +307,6 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { assert(snSession.sql("select * from t1").collect().length == 5) - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed // Due to a design flaw in recovery we always recover one more value than the LRU limit. assertApproximate(beforeRebootMemory, afterRebootMemory) @@ -335,7 +332,6 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 0) - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed assert(beforeInsertMem == afterRebootMemory) // 4 bytes for hashmap. Need to check snSession.dropTable("t1") @@ -361,7 +357,6 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 5) - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed // Due to a design flaw in recovery we always recover one more value than the LRU limit. assertApproximate(beforeRebootMemory, afterRebootMemory) @@ -388,7 +383,6 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession = new SnappySession(sparkSession.sparkContext) assert(snSession.sql("select * from t1").collect().length == 10) - SnappyMemoryAccountingSuite.cleanupBroadcasts() val afterRebootMemory = SparkEnv.get.memoryManager.storageMemoryUsed assertApproximate(beforeRebootMemory, afterRebootMemory, 4) snSession.dropTable("t1") @@ -667,19 +661,3 @@ class SnappyMemoryAccountingSuite extends MemoryFunSuite { snSession.dropTable("t1") } } - -object SnappyMemoryAccountingSuite { - - /** - * Each Task in Spark creates a broadcast that will normally be cleaned up - * after reference has been collected by GC. This method forcefully clears - * all pending broadcasts. - */ - def cleanupBroadcasts(): Unit = { - val cleaner = SparkContext.getActive.get.cleaner.get - cleaner.referenceBuffer.asScala.foreach(_.task match { - case CleanBroadcast(id) => cleaner.doCleanupBroadcast(id, blocking = true) - case _ => - }) - } -} diff --git a/cluster/src/test/scala/org/apache/spark/memory/SnappyStorageEvictorSuite.scala b/cluster/src/test/scala/org/apache/spark/memory/SnappyStorageEvictorSuite.scala index 5298ae59e9..c43d9bd3be 100644 --- a/cluster/src/test/scala/org/apache/spark/memory/SnappyStorageEvictorSuite.scala +++ b/cluster/src/test/scala/org/apache/spark/memory/SnappyStorageEvictorSuite.scala @@ -57,7 +57,7 @@ class SnappyStorageEvictorSuite extends MemoryFunSuite { memoryManager.acquireUnrollMemory(blockId, 500, memoryMode) assert(memoryManager.storageMemoryUsed == 500) - val key = new MemoryOwner("_SPARK_CACHE_", memoryMode) + val key = new MemoryOwner(SnappyUnifiedMemoryManager.SPARK_CACHE, memoryMode) assert(memoryManager.memoryForObject.get(key) == 500) memoryManager.releaseUnrollMemory(500, memoryMode) diff --git a/cluster/src/test/scala/org/apache/spark/sql/NorthWindTest.scala b/cluster/src/test/scala/org/apache/spark/sql/NorthWindTest.scala index 43caad1961..c1cc95c2d6 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/NorthWindTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/NorthWindTest.scala @@ -397,7 +397,7 @@ class NorthWindTest case "Q9" => NWQueries.assertQuery(snc, NWQueries.Q9, "Q9", 3, 4, classOf[ProjectExec]) case "Q10" => NWQueries.assertQuery(snc, NWQueries.Q10, "Q10", 2, 4, classOf[FilterExec]) case "Q11" => NWQueries.assertQuery(snc, NWQueries.Q11, "Q11", 4, 4, classOf[ProjectExec]) - case "Q12" => NWQueries.assertQuery(snc, NWQueries.Q12, "Q12", 2, 3, classOf[FilterExec]) + case "Q12" => NWQueries.assertQuery(snc, NWQueries.Q12, "Q12", 2, 2, classOf[FilterExec]) case "Q13" => NWQueries.assertQuery(snc, NWQueries.Q13, "Q13", 2, 4, classOf[FilterExec]) case "Q14" => NWQueries.assertQuery(snc, NWQueries.Q14, "Q14", 69, 1, classOf[FilterExec]) case "Q15" => NWQueries.assertQuery(snc, NWQueries.Q15, "Q15", 5, 4, classOf[FilterExec]) @@ -408,7 +408,7 @@ class NorthWindTest case "Q20" => NWQueries.assertQuery(snc, NWQueries.Q20, "Q20", 1, 1, classOf[ProjectExec]) case "Q21" => NWQueries.assertQuery(snc, NWQueries.Q21, "Q21", 1, 1, classOf[ColumnTableScan]) - case "Q22" => NWQueries.assertQuery(snc, NWQueries.Q22, "Q22", 1, 2, classOf[ProjectExec]) + case "Q22" => NWQueries.assertQuery(snc, NWQueries.Q22, "Q22", 1, 1, classOf[ProjectExec]) case "Q23" => NWQueries.assertQuery(snc, NWQueries.Q23, "Q23", 1, 1, classOf[ColumnTableScan]) case "Q24" => NWQueries.assertQuery(snc, NWQueries.Q24, "Q24", 4, 4, classOf[ProjectExec]) @@ -538,7 +538,7 @@ class NorthWindTest case "Q9" => NWQueries.assertQuery(snc, NWQueries.Q9, "Q9", 3, 4, classOf[ProjectExec]) case "Q10" => NWQueries.assertQuery(snc, NWQueries.Q10, "Q10", 2, 4, classOf[FilterExec]) case "Q11" => NWQueries.assertQuery(snc, NWQueries.Q11, "Q11", 4, 4, classOf[ProjectExec]) - case "Q12" => NWQueries.assertQuery(snc, NWQueries.Q12, "Q12", 2, 3, classOf[FilterExec]) + case "Q12" => NWQueries.assertQuery(snc, NWQueries.Q12, "Q12", 2, 2, classOf[FilterExec]) case "Q13" => NWQueries.assertQuery(snc, NWQueries.Q13, "Q13", 2, 4, classOf[FilterExec]) case "Q14" => NWQueries.assertQuery(snc, NWQueries.Q14, "Q14", 69, 4, classOf[FilterExec]) case "Q15" => NWQueries.assertQuery(snc, NWQueries.Q15, "Q15", 5, 4, classOf[FilterExec]) @@ -548,7 +548,7 @@ class NorthWindTest case "Q19" => NWQueries.assertQuery(snc, NWQueries.Q19, "Q19", 13, 4, classOf[ProjectExec]) case "Q20" => NWQueries.assertQuery(snc, NWQueries.Q20, "Q20", 1, 1, classOf[ProjectExec]) case "Q21" => NWQueries.assertQuery(snc, NWQueries.Q21, "Q21", 1, 1, classOf[RowTableScan]) - case "Q22" => NWQueries.assertQuery(snc, NWQueries.Q22, "Q22", 1, 2, classOf[ProjectExec]) + case "Q22" => NWQueries.assertQuery(snc, NWQueries.Q22, "Q22", 1, 1, classOf[ProjectExec]) case "Q23" => NWQueries.assertQuery(snc, NWQueries.Q23, "Q23", 1, 1, classOf[RowTableScan]) case "Q24" => NWQueries.assertQuery(snc, NWQueries.Q24, "Q24", 4, 4, classOf[ProjectExec]) case "Q25" => NWQueries.assertJoin(snc, NWQueries.Q25, "Q25", 1, 4, diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala index 899230ce64..838aff71eb 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala @@ -1193,7 +1193,7 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { // never expect the query above to take more than 7 secs assert(duration > 0L) assert(duration < sleepTime) - assert(queryUIData.jobs.count(_._2 == JobExecutionStatus.SUCCEEDED) === 2) + assert(queryUIData.jobs.count(_._2 == JobExecutionStatus.SUCCEEDED) === 1) val executionId = queryUIData.executionId val metrics = sqlStore.executionMetrics(executionId) diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/ColumnTablesTestBase.scala b/cluster/src/test/scala/org/apache/spark/sql/store/ColumnTablesTestBase.scala index c9b6716127..a60befb268 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/ColumnTablesTestBase.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/ColumnTablesTestBase.scala @@ -79,7 +79,7 @@ abstract class ColumnTablesTestBase extends SnappyFunSuite { "T12 Timestamp not null, T13 Binary not null) " + "USING column options (buckets '8')") session.sql("CREATE TABLE TypesTable3 (Index Int not null, T1 Boolean, " + - "T2 Integer, T3 smallint, T4 Int, T5 bigint, T6 REAL, T7 Double, T8 varchar(100), " + + "T2 Tinyint, T3 smallint, T4 Int, T5 bigint, T6 REAL, T7 Double, T8 varchar(100), " + "T9 Decimal(10, 4), T10 Decimal(35, 15), T11 Date, T12 Timestamp, " + "T13 blob) USING row") @@ -98,7 +98,7 @@ abstract class ColumnTablesTestBase extends SnappyFunSuite { } val t2 = rnd.nextInt(150) match { - case b if b < 128 => Byte.box(b.toByte) + case b if b < 128 => Short.box(b.toByte) case _ => null } @@ -185,7 +185,7 @@ object ColumnTablesTestBase { var hasNulls = true } -case class AllTypes(index: Int, t1: java.lang.Boolean, t2: java.lang.Byte, +case class AllTypes(index: Int, t1: java.lang.Boolean, t2: java.lang.Short, t3: java.lang.Short, t4: java.lang.Integer, t5: java.lang.Long, t6: java.lang.Float, t7: java.lang.Double, t8: String, t9: Decimal, t10: Decimal, t11: Date, t12: Timestamp, t13: Array[Byte]) { diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala index 6f7cd3104b..76c680924b 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala @@ -19,8 +19,8 @@ package org.apache.spark.sql.execution.ui import scala.collection.mutable import org.apache.spark.scheduler.{SparkListenerEvent, SparkListenerJobStart} +import org.apache.spark.sql.CachedDataFrame import org.apache.spark.sql.execution.{SQLExecution, SparkPlanInfo} -import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionEnd, SparkListenerSQLPlanExecutionStart} import org.apache.spark.{JobExecutionStatus, SparkConf} /** @@ -112,13 +112,13 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { * to create a rdd which is then used to create a CachedDataFrame. * In second phase, the CachedDataFrame is then used for further actions. * For accumulating the metrics for first phase, - * SparkListenerSQLPlanExecutionStart is fired. This keeps the current + * SparkListenerSQLExecutionStart is fired. This keeps the current * executionID in _executionIdToData but does not add it to the active * executions. This ensures that query is not shown in the UI but the * new jobs that are run while the plan is being executed are tracked * against this executionID. In the second phase, when the query is - * actually executed, SparkListenerSQLPlanExecutionStart adds the execution - * data to the active executions. SparkListenerSQLPlanExecutionEnd is + * actually executed, SparkListenerSQLExecutionStart adds the execution + * data to the active executions. SparkListenerSQLExecutionEnd is * then sent with the accumulated time of both the phases. */ override def onOtherEvent(event: SparkListenerEvent): Unit = { @@ -137,19 +137,6 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { baseActiveExecutions(executionId) = executionUIData } - case SparkListenerSQLPlanExecutionStart(executionId, description, details, - physicalPlanDescription, sparkPlanInfo, time) => - val executionUIData = newExecutionUIData(executionId, description, details, - physicalPlanDescription, sparkPlanInfo, time) - synchronized { - baseExecutionIdToData(executionId) = executionUIData - baseActiveExecutions(executionId) = executionUIData - } - - case SparkListenerSQLPlanExecutionEnd(executionId) => synchronized { - baseActiveExecutions.remove(executionId) - } - case _ => super.onOtherEvent(event) } } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala index 007fa91856..c2031afb31 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala @@ -17,11 +17,9 @@ package org.apache.spark.sql.execution.ui -import java.util.concurrent.ConcurrentMap - import org.apache.spark.SparkContext import org.apache.spark.scheduler.SparkListenerEvent -import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionEnd, SparkListenerSQLPlanExecutionStart} +import org.apache.spark.sql.CachedDataFrame import org.apache.spark.status.ElementTrackingStore /** @@ -38,59 +36,30 @@ class SnappySQLAppListener(context: SparkContext) extends SQLAppStatusListener(context.conf, context.statusStore.store.asInstanceOf[ElementTrackingStore], live = true) { - private[this] val baseLiveExecutions: ConcurrentMap[Long, LiveExecutionData] = { - val f = classOf[SQLAppStatusListener].getDeclaredFields - .find(_.getName.contains("liveExecutions")).get - f.setAccessible(true) - f.get(this).asInstanceOf[ConcurrentMap[Long, LiveExecutionData]] - } - /** * Snappy's execution happens in two phases. First phase the plan is executed * to create a rdd which is then used to create a CachedDataFrame. * In second phase, the CachedDataFrame is then used for further actions. * For accumulating the metrics for first phase, - * SparkListenerSQLPlanExecutionStart is fired. This keeps the current + * SparkListenerSQLExecutionStart is fired. This keeps the current * executionID in _executionIdToData but does not add it to the active * executions. This ensures that query is not shown in the UI but the * new jobs that are run while the plan is being executed are tracked * against this executionID. In the second phase, when the query is - * actually executed, SparkListenerSQLPlanExecutionStart adds the execution - * data to the active executions. SparkListenerSQLPlanExecutionEnd is + * actually executed, SparkListenerSQLExecutionStart adds the execution + * data to the active executions. SparkListenerSQLExecutionEnd is * then sent with the accumulated time of both the phases. */ override def onOtherEvent(event: SparkListenerEvent): Unit = event match { - case SparkListenerSQLPlanExecutionStart(executionId, description, details, - physicalPlanDescription, sparkPlanInfo, time) => - super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, description, details, - physicalPlanDescription, sparkPlanInfo, time)) - case SparkListenerSQLExecutionStart(executionId, description, details, physicalPlanDescription, sparkPlanInfo, time) => - // if executionId already exists (from SparkListenerSQLPlanExecutionStart) then - // use the submissionTime from those details - val submissionTime = try { - context.statusStore.store.read(classOf[SQLExecutionUIData], executionId) match { - case null => time - case data if data.submissionTime <= 0 => time - case data => data.submissionTime - } - } catch { - case _: NoSuchElementException => time - } - // description and details strings being reference equals means - // trim off former here + // description and details strings being reference equals so trim off former here if (description eq details) { val desc = CachedDataFrame.queryStringShortForm(details) super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, desc, details, - physicalPlanDescription, sparkPlanInfo, submissionTime)) - } else if (submissionTime != time) { - super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, description, details, - physicalPlanDescription, sparkPlanInfo, submissionTime)) + physicalPlanDescription, sparkPlanInfo, time)) } else super.onOtherEvent(event) - case SparkListenerSQLPlanExecutionEnd(executionId) => baseLiveExecutions.remove(executionId) - case _ => super.onOtherEvent(event) } } diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index 9d1a4051d3..6782fe0436 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -64,8 +64,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti cachedRDD: RDD[InternalRow], shuffleDependencies: Array[Int], encoder: Encoder[Row], shuffleCleanups: Array[Future[Unit]], val rddId: Int, noSideEffects: Boolean, val queryHints: java.util.Map[String, String], private[sql] var currentExecutionId: Long, - private[sql] var planStartTime: Long, private[sql] var planEndTime: Long, - val linkPart : Boolean = false) + private[sql] var planningTime: Long, val linkPart : Boolean = false) extends Dataset[Row](snappySession, queryExecution, encoder) with Logging { private[sql] final def isCached: Boolean = cachedRDD ne null @@ -155,7 +154,7 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti private[sql] def duplicate(): CachedDataFrame = { val cdf = new CachedDataFrame(snappySession, queryExecution, queryExecutionString, queryPlanInfo, null, null, cachedRDD, shuffleDependencies, encoder, shuffleCleanups, - rddId, noSideEffects, queryHints, -1L, -1L, -1L, linkPart) + rddId, noSideEffects, queryHints, -1L, -1L, linkPart) cdf.log_ = log_ cdf.levelFlags = levelFlags cdf._boundEnc = boundEnc // force materialize boundEnc which is commonly used @@ -293,14 +292,13 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti try { didPrepare = prepareForCollect() val (result, elapsedMillis) = CachedDataFrame.withNewExecutionId(snappySession, - queryShortString, queryString, currentQueryExecutionString, currentQueryPlanInfo, - currentExecutionId, planStartTime, planEndTime)(body) + queryExecution.executedPlan, queryShortString, queryString, currentQueryExecutionString, + currentQueryPlanInfo, currentExecutionId, planningTime)(body) (result, elapsedMillis * 1000000L) } finally { if (isCached) { currentExecutionId = -1L - planStartTime = -1L - planEndTime = -1L + planningTime = 0L } endCollect(didPrepare) } @@ -629,10 +627,12 @@ object CachedDataFrame * * Custom method to allow passing in cached SparkPlanInfo and queryExecution string. */ - def withNewExecutionId[T](snappySession: SnappySession, queryShortForm: String, - queryLongForm: String, queryExecutionStr: String, queryPlanInfo: SparkPlanInfo, - currentExecutionId: Long = -1L, planStartTime: Long = -1L, planEndTime: Long = -1L, - postGUIPlans: Boolean = true)(body: => T): (T, Long) = { + // scalastyle:off + def withNewExecutionId[T](snappySession: SnappySession, executedPlan: SparkPlan, + queryShortForm: String, queryLongForm: String, queryExecutionStr: String, + queryPlanInfo: SparkPlanInfo, currentExecutionId: Long = -1L, + planningTime: Long = 0L, postGUIPlans: Boolean = true)(body: => T): (T, Long) = { + // scalastyle:on val sc = snappySession.sparkContext val localProperties = sc.getLocalProperties val oldExecutionId = localProperties.getProperty(SQLExecution.EXECUTION_ID_KEY) @@ -644,7 +644,8 @@ object CachedDataFrame val executionIdStr = java.lang.Long.toString(executionId) SnappySession.setExecutionProperties(localProperties, executionIdStr, queryLongForm) - val startTime = System.currentTimeMillis() + // adjust the planning time in the start time + val startTime = System.currentTimeMillis() - planningTime var endTime = -1L try { if (postGUIPlans) sc.listenerBus.post(SparkListenerSQLExecutionStart(executionId, @@ -655,15 +656,10 @@ object CachedDataFrame } finally { try { if (endTime == -1L) endTime = System.currentTimeMillis() - // the total duration displayed will be completion time provided below - // minus the start time of either above, or else the start time of - // original planning submission, so adjust the endTime accordingly - if (planEndTime != -1L) { - endTime -= (startTime - planEndTime) - } // add the time of plan execution to the end time. if (postGUIPlans) sc.listenerBus.post(SparkListenerSQLExecutionEnd(executionId, endTime)) } finally { + SnappySession.cleanupBroadcasts(executedPlan, blocking = false) snappySession.snappySessionState.clearExecutionData() SnappySession.clearExecutionProperties(localProperties) } diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index f45ca7a4e4..c02776bc08 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -41,7 +41,6 @@ import org.eclipse.collections.impl.map.mutable.UnifiedMap import org.apache.spark.annotation.{DeveloperApi, Experimental} import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} import org.apache.spark.rdd.RDD -import org.apache.spark.scheduler.SparkListenerEvent import org.apache.spark.sql.catalyst.analysis.{Analyzer, NoSuchTableException, UnresolvedAttribute, UnresolvedRelation, UnresolvedStar} import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogTable, CatalogTableType} import org.apache.spark.sql.catalyst.encoders._ @@ -61,7 +60,7 @@ import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JdbcUtils} import org.apache.spark.sql.execution.datasources.{CreateTable, DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.BroadcastExchangeExec import org.apache.spark.sql.execution.joins.{BroadcastHashJoinExec, BroadcastNestedLoopJoinExec} -import org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionEnd +import org.apache.spark.sql.execution.ui.{SparkListenerSQLExecutionEnd, SparkListenerSQLExecutionStart} import org.apache.spark.sql.hive.{HiveClientUtil, SnappySessionState} import org.apache.spark.sql.internal.StaticSQLConf.SCHEMA_STRING_LENGTH_THRESHOLD import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect, SessionState, SnappySessionCatalog, SnappySharedState, StaticSQLConf} @@ -2112,6 +2111,17 @@ object SnappySession extends Logging { } } + private[sql] def cleanupBroadcasts(plan: SparkPlan, blocking: Boolean): Unit = { + plan.sqlContext.sparkContext.cleaner match { + case Some(cleaner) => plan.foreach { + case broadcast: BroadcastExchangeExec => + cleaner.doCleanupBroadcast(broadcast.executeBroadcast().id, blocking) + case _ => + } + case None => + } + } + def getExecutedPlan(plan: SparkPlan): (SparkPlan, CodegenSparkFallback) = plan match { case cg@CodegenSparkFallback(WholeStageCodegenExec(p), _) => (p, cg) case cg@CodegenSparkFallback(p, _) => (p, cg) @@ -2140,27 +2150,28 @@ object SnappySession extends Logging { * to create a rdd which is then used to create a CachedDataFrame. * In second phase, the CachedDataFrame is then used for further actions. * For accumulating the metrics for first phase, - * SparkListenerSQLPlanExecutionStart is fired. This keeps the current + * SparkListenerSQLExecutionStart is fired. This keeps the current * executionID in _executionIdToData but does not add it to the active * executions. This ensures that query is not shown in the UI but the * new jobs that are run while the plan is being executed are tracked * against this executionID. In the second phase, when the query is - * actually executed, SparkListenerSQLPlanExecutionStart adds the execution - * data to the active executions. SparkListenerSQLPlanExecutionEnd is + * actually executed, SparkListenerSQLExecutionStart adds the execution + * data to the active executions. SparkListenerSQLExecutionEnd is * then sent with the accumulated time of both the phases. */ private def planExecution(qe: QueryExecution, session: SnappySession, sqlShortText: String, - sqlText: String, executedPlan: SparkPlan, paramLiterals: Array[ParamLiteral], paramsId: Int) + sql: String, executedPlan: SparkPlan, paramLiterals: Array[ParamLiteral], paramsId: Int) (f: => RDD[InternalRow]): (RDD[InternalRow], String, SparkPlanInfo, - String, SparkPlanInfo, Long, Long, Long) = { - // Right now the CachedDataFrame is not getting used across SnappySessions + String, SparkPlanInfo, Long, Long) = { + val sqlText = "PLAN [" + sql + ']' val executionId = Utils.nextExecutionIdMethod.invoke(SQLExecution).asInstanceOf[Long] val executionIdStr = java.lang.Long.toString(executionId) val context = session.sparkContext val localProperties = context.getLocalProperties setExecutionProperties(localProperties, executionIdStr, sqlText) var success = false - val start = System.currentTimeMillis() + val startTime = System.currentTimeMillis() + var endTime = -1L try { // get below two with original "ParamLiteral(" tokens that will be replaced // by actual values before every execution @@ -2170,24 +2181,25 @@ object SnappySession extends Logging { val postQueryExecutionStr = replaceParamLiterals(queryExecutionStr, paramLiterals, paramsId) val postQueryPlanInfo = PartitionedPhysicalScan.updatePlanInfo(queryPlanInfo, paramLiterals, paramsId) - context.listenerBus.post(SparkListenerSQLPlanExecutionStart( + context.listenerBus.post(SparkListenerSQLExecutionStart( executionId, CachedDataFrame.queryStringShortForm(sqlText), - sqlText, postQueryExecutionStr, postQueryPlanInfo, start)) + sqlText, postQueryExecutionStr, postQueryPlanInfo, startTime)) val rdd = f success = true + endTime = System.currentTimeMillis() (rdd, queryExecutionStr, queryPlanInfo, postQueryExecutionStr, postQueryPlanInfo, - executionId, start, System.currentTimeMillis()) + executionId, endTime - startTime) } finally { clearExecutionProperties(localProperties) - if (success) { - // post the end of "plan" phase which will remove this execution from active list - context.listenerBus.post(SparkListenerSQLPlanExecutionEnd(executionId)) - } else { + if (endTime == -1L) endTime = System.currentTimeMillis() + if (!success) { + // cleanups in case of failure + SnappySession.cleanupBroadcasts(qe.executedPlan, blocking = true) session.snappySessionState.clearExecutionData() - // post the end of SQL since body of `f` failed - context.listenerBus.post(SparkListenerSQLExecutionEnd( - executionId, System.currentTimeMillis())) } + // post the end of SQL at the end of planning phase; this will be re-posted during + // execution with the submission time adjusted (by the planning time) in CachedDataFrame + context.listenerBus.post(SparkListenerSQLExecutionEnd(executionId, endTime)) } } @@ -2208,7 +2220,7 @@ object SnappySession extends Logging { var planCaching = session.planCaching val (cachedRDD, execution, origExecutionString, origPlanInfo, executionString, planInfo, rddId, - noSideEffects, executionId, planStartTime: Long, planEndTime: Long) = executedPlan match { + noSideEffects, executionId, planningTime: Long) = executedPlan match { case _: ExecutedCommandExec | _: ExecutePlan | UnionCommands(_) => // TODO add caching for point updates/deletes; a bit of complication // because getPlan will have to do execution with all waits/cleanups @@ -2242,8 +2254,8 @@ object SnappySession extends Logging { var rdd = if (eagerToRDD) qe.toRdd else null // post final execution immediately (collect for these plans will post nothing) - CachedDataFrame.withNewExecutionId(session, sqlShortText, sqlText, executionStr, planInfo, - postGUIPlans = postGUIPlans) { + CachedDataFrame.withNewExecutionId(session, executedPlan, sqlShortText, sqlText, + executionStr, planInfo, postGUIPlans = postGUIPlans) { // create new LogicalRDD plan so that plan does not get re-executed // (e.g. just toRdd is not enough since further operators like show will pass // around the LogicalPlan and not the executedPlan; it works for plans using @@ -2253,20 +2265,20 @@ object SnappySession extends Logging { val newPlan = LogicalRDD(qe.analyzed.output, rdd)(session) val execution = session.sessionState.executePlan(newPlan) (null, execution, origExecutionStr, origPlanInfo, executionStr, planInfo, - rdd.id, false, -1L, 0L, -1L) + rdd.id, false, -1L, 0L) }._1 case plan: CollectAggregateExec => val (childRDD, origExecutionStr, origPlanInfo, executionStr, planInfo, executionId, - planStartTime, planEndTime) = planExecution(qe, session, sqlShortText, sqlText, plan, + planningTime) = planExecution(qe, session, sqlShortText, sqlText, plan, paramLiterals, paramsId)( if (withFallback ne null) withFallback.execute(plan.child) else plan.childRDD) (childRDD, qe, origExecutionStr, origPlanInfo, executionStr, planInfo, - childRDD.id, true, executionId, planStartTime, planEndTime) + childRDD.id, true, executionId, planningTime) case plan => val (rdd, origExecutionStr, origPlanInfo, executionStr, planInfo, executionId, - planStartTime, planEndTime) = planExecution(qe, session, sqlShortText, sqlText, plan, + planningTime) = planExecution(qe, session, sqlShortText, sqlText, plan, paramLiterals, paramsId) { plan match { case p: CollectLimitExec => @@ -2275,7 +2287,7 @@ object SnappySession extends Logging { } } (rdd, qe, origExecutionStr, origPlanInfo, executionStr, planInfo, - rdd.id, true, executionId, planStartTime, planEndTime) + rdd.id, true, executionId, planningTime) } logDebug(s"qe.executedPlan = ${qe.executedPlan}") @@ -2314,8 +2326,8 @@ object SnappySession extends Logging { } else (null, Array.emptyIntArray, Array.empty[Future[Unit]]) new CachedDataFrame(session, execution, origExecutionString, origPlanInfo, executionString, planInfo, rdd, shuffleDependencies, RowEncoder(qe.analyzed.schema), - shuffleCleanups, rddId, noSideEffects, queryHints, - executionId, planStartTime, planEndTime, session.hasLinkPartitionsToBuckets) + shuffleCleanups, rddId, noSideEffects, queryHints, executionId, planningTime, + session.hasLinkPartitionsToBuckets) } private[this] lazy val planCache = { @@ -2575,20 +2587,6 @@ object CachedKey extends SparkSupport { } } -/** - * A new event that is fired when a plan is executed to get an RDD. - */ -case class SparkListenerSQLPlanExecutionStart( - executionId: Long, - description: String, - details: String, - physicalPlanDescription: String, - sparkPlanInfo: SparkPlanInfo, - time: Long) - extends SparkListenerEvent - -case class SparkListenerSQLPlanExecutionEnd(executionId: Long) extends SparkListenerEvent - private object UnionCommands { def unapply(plan: SparkPlan): Option[Boolean] = plan match { case union: UnionExec if union.children.nonEmpty && union.children.forall { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala index e778d9129c..262488df20 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ExistingPlans.scala @@ -277,7 +277,7 @@ case class ExecutePlan(child: SparkPlan, preAction: () => Unit = () => ()) treeString(verbose = true), paramLiterals, paramsId), PartitionedPhysicalScan .getSparkPlanInfo(this, paramLiterals, paramsId)) } - CachedDataFrame.withNewExecutionId(session, queryStringShortForm, + CachedDataFrame.withNewExecutionId(session, child, queryStringShortForm, queryStr, queryExecStr, planInfo) { preAction() val rdd = child.execute() diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 377c3bcdc1..1f7eddeac2 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -335,12 +335,13 @@ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: Str session.snappySessionState.enableExecutionCache = false session.snappySessionState.clearExecutionCache() } - val memoryPlan = df.queryExecution.executedPlan.collectFirst { + val executedPlan = cachedExecution.executedPlan + val memoryPlan = executedPlan.collectFirst { case plan: InMemoryTableScanExec => plan.relation }.get - val planInfo = PartitionedPhysicalScan.getSparkPlanInfo(cachedExecution.executedPlan) + val planInfo = PartitionedPhysicalScan.getSparkPlanInfo(executedPlan) Row(CachedDataFrame.withCallback(session, df = null, cachedExecution, "cache")(_ => - CachedDataFrame.withNewExecutionId(session, queryShortString, queryString, + CachedDataFrame.withNewExecutionId(session, executedPlan, queryShortString, queryString, cachedExecution.toString(), planInfo)({ val start = System.nanoTime() // Dummy op to materialize the cache. This does the minimal job of count on diff --git a/spark b/spark index 3d06efb619..370fab829b 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 3d06efb61900579268330a2637093a1c3893018d +Subproject commit 370fab829b761c07339534f8817102a6b7752ac9 From 36bab5a922de01156da9a29d85a8d594d6613c95 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sat, 21 Mar 2020 01:09:35 +0530 Subject: [PATCH 75/80] fix VIEW test failure (due to auto-generated alias name mismatch) and Decimal handling in prepared statements --- .../org/apache/spark/sql/store/BugTest.scala | 56 ++++++++----------- .../sql/internal/Spark23_4_Internals.scala | 11 +++- .../org/apache/spark/sql/SnappyParser.scala | 3 +- .../org/apache/spark/sql/SnappySession.scala | 35 +++++++----- store | 2 +- 5 files changed, 56 insertions(+), 51 deletions(-) diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala index 838aff71eb..d9703f9cd9 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala @@ -16,12 +16,11 @@ */ package org.apache.spark.sql.store -import java.io.{BufferedReader, FileReader} -import java.lang import java.sql.{Connection, DriverManager, SQLException, Statement} import java.util.Properties import scala.collection.mutable.ArrayBuffer +import scala.io.Source import com.pivotal.gemfirexd.TestUtil import io.snappydata.SnappyFunSuite.resultSetToDataset @@ -363,17 +362,10 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { // create a big view on it val viewFile = getClass.getResource("/bigviewcase.sql") - val br = new BufferedReader(new FileReader(viewFile.getFile)) - var viewSql = "" - var keepGoing = true - while(keepGoing) { - val x = br.readLine() - if (x != null) { - viewSql += x - } else { - keepGoing = false - } - } + val source = Source.fromInputStream(viewFile.openStream()) + val viewSql = source.mkString + source.close() + val viewname = "AIRLINEBOGUSVIEW" // check catalog cache is cleared for VIEWs @@ -1085,34 +1077,34 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { ps1.setInt(1, i) dataTypeForSetParams match { case "DOUBLE" => - ps1.setDouble(2, java.lang.Double.valueOf(i * 0.1)) - ps1.setDouble(3, java.lang.Double.valueOf(i * 0.1)) + ps1.setDouble(2, i * 0.1) + ps1.setDouble(3, i * 0.1) case "STRING" => - ps1.setString(2, s"$i" + 0.1) - ps1.setString(3, s"$i" + 0.1) + ps1.setString(2, s"$i.1") + ps1.setString(3, s"$i.1") case "FLOAT" => - ps1.setFloat(2, java.lang.Float.valueOf(new lang.Float(i*0.1))) - ps1.setFloat(3, java.lang.Float.valueOf(new lang.Float(i*0.1))) + ps1.setFloat(2, i * 0.1f) + ps1.setFloat(3, i * 0.1f) case "DECIMAL" => - ps1.setBigDecimal(2, new java.math.BigDecimal(s"$i" + 0.1)) - ps1.setBigDecimal(3, new java.math.BigDecimal(s"$i" + 0.1)) + ps1.setBigDecimal(2, new java.math.BigDecimal(s"$i.1")) + ps1.setBigDecimal(3, new java.math.BigDecimal(s"$i.1")) } ps1.executeUpdate() } println("executing prepared select statement") - var result1: Array[(java.math.BigDecimal, java.math.BigDecimal)] = new Array(numRows) + val result1: Array[(java.math.BigDecimal, java.math.BigDecimal)] = new Array(numRows) val ps2 = conn.prepareStatement("select * from column_table where col2 = ? order by col1") for (j <- 0 until numRows) { dataTypeForSetParams match { case "DOUBLE" => - ps2.setDouble(1, java.lang.Double.valueOf(j * 0.1)) + ps2.setDouble(1, j * 0.1) case "STRING" => - ps2.setString(1, s"$j" + 0.1) + ps2.setString(1, s"$j.1") case "FLOAT" => - ps2.setFloat(1, java.lang.Float.valueOf(new lang.Float(j * 0.1))) + ps2.setFloat(1, j * 0.1f) case "DECIMAL" => - ps2.setBigDecimal(1, new java.math.BigDecimal(s"$j" + 0.1)) + ps2.setBigDecimal(1, new java.math.BigDecimal(s"$j.1")) } val rs2 = ps2.executeQuery() @@ -1131,7 +1123,7 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { } println("executing unprepared select statement") - var result2: Array[(java.math.BigDecimal, java.math.BigDecimal)] = new Array(numRows) + val result2: Array[(java.math.BigDecimal, java.math.BigDecimal)] = new Array(numRows) for (j <- 0 until numRows) { var rs3: java.sql.ResultSet = null dataTypeForSetParams match { @@ -1140,15 +1132,15 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { rs3 = stmt.executeQuery(s"select * from column_table" + s" where col2 = cast($v as double) order by col1") case "STRING" => - val v = s"$j" + 0.1 + val v = s"$j.1" rs3 = stmt.executeQuery(s"select * from column_table" + s" where col2 = cast($v as string) order by col1") case "FLOAT" => - val v = j * 0.1 + val v = j * 0.1f rs3 = stmt.executeQuery(s"select * from column_table" + s" where col2 = cast($v as float) order by col1") case "DECIMAL" => - val v = new java.math.BigDecimal(s"$j" + 0.1) + val v = new java.math.BigDecimal(s"$j.1") rs3 = stmt.executeQuery(s"select * from column_table" + s" where col2 = cast($v as decimal) order by col1") } @@ -1165,10 +1157,8 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { } } - assert(result1.sameElements(result2), - "results of prepared and unprepared statements do not match") + assert(result1 === result2) // scalastyle:on println - } test("SNAP-3123: check for GUI plans and SNAP-3141: code gen failure") { diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index cb09241d01..ca751a56d7 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -541,8 +541,15 @@ trait SnappySessionCatalog23_4 extends SessionCatalog with SnappySessionCatalog super.failFunctionLookup(FunctionIdentifier(name, None)) } - override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = - View(desc = table, output = table.schema.toAttributes, child) + override def newView(table: CatalogTable, child: LogicalPlan): LogicalPlan = { + // remove the view column name properties that can cause failure in CheckAnalysis since these + // names can be different compared to child output due to + // org.apache.spark.sql.catalyst.util.usePrettyExpression that handles Literals + // (in CREATE VIEW) but does not handle ParamLiterals which results in difference between + // Literal.toString vs Literal.sql; CatalogTable.schema is the reliable one in any case + View(desc = table.copy(properties = table.properties.filterNot(_._1.startsWith( + CatalogTable.VIEW_QUERY_OUTPUT_PREFIX))), output = table.schema.toAttributes, child) + } override def newCatalogRelation(schemaName: String, table: CatalogTable): LogicalPlan = UnresolvedCatalogRelation(table) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 8ca382b55a..717c864cb9 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -245,7 +245,8 @@ class SnappyParser(session: SnappySession) "For Prepared Statement, Parameter constants are not provided") val (scalaTypeVal, dataType) = session.getParameterValue( _questionMarkCounter, _parameterValueSet.get, _preparedParamsTypesInfo) - val catalystTypeVal = CatalystTypeConverters.convertToCatalyst(scalaTypeVal) + val catalystTypeVal = CatalystTypeConverters.createToCatalystConverter( + dataType)(scalaTypeVal) newTokenizedLiteral(catalystTypeVal, dataType) } }) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index c02776bc08..ec140829f0 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -30,7 +30,6 @@ import com.gemstone.gemfire.internal.cache.{GemFireCacheImpl, PartitionedRegion} import com.gemstone.gemfire.internal.shared.{ClientResolverUtils, FinalizeHolder, FinalizeObject} import com.google.common.cache.{Cache, CacheBuilder} import com.pivotal.gemfirexd.internal.iapi.sql.ParameterValueSet -import com.pivotal.gemfirexd.internal.iapi.types.TypeId import com.pivotal.gemfirexd.internal.iapi.{types => stypes} import com.pivotal.gemfirexd.internal.shared.common.StoredFormatIds import io.snappydata.sql.catalog.impl.SmartConnectorExternalCatalog @@ -2020,22 +2019,16 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) s" constants = ${parameterValueSet.getParameterCount}") } val dvd = parameterValueSet.getParameter(questionMarkCounter - 1) - var scalaTypeVal = SnappySession.getValue(dvd) + val scalaTypeVal = SnappySession.getValue(dvd) val storeType = dvd.getTypeFormatId val (storePrecision, storeScale) = dvd match { case _: stypes.SQLDecimal => - // try to normalize parameter value into target column's scale/precision val index = (questionMarkCounter - 1) * 4 + 1 - // actual scale of the target column - val scale = preparedParamsTypesInfo.map(a => a(index + 2)).getOrElse(-1) - - val decimalValue = new com.pivotal.gemfirexd.internal.iapi.types.SQLDecimal() - val typeId = TypeId.getBuiltInTypeId(java.sql.Types.DECIMAL) - val dtd = new com.pivotal.gemfirexd.internal.iapi.types.DataTypeDescriptor( - typeId, DecimalType.MAX_PRECISION, scale, true, typeId.getMaximumMaximumWidth) - decimalValue.normalize(dtd, dvd) - scalaTypeVal = decimalValue.getBigDecimal - (decimalValue.getDecimalValuePrecision, scale) + // actual precision and scale of the target column + preparedParamsTypesInfo match { + case None => (-1, -1) + case Some(a) => (a(index + 1), a(index + 2)) + } case _ => (-1, -1) } @@ -2473,7 +2466,21 @@ object SnappySession extends Logging { case StoredFormatIds.SQL_TIMESTAMP_ID => TimestampType case StoredFormatIds.SQL_DATE_ID => DateType case StoredFormatIds.SQL_DOUBLE_ID => DoubleType - case StoredFormatIds.SQL_DECIMAL_ID => DecimalType(precision, scale) + case StoredFormatIds.SQL_DECIMAL_ID => + if (precision == -1) DecimalType.SYSTEM_DEFAULT + else if (precision == DecimalType.SYSTEM_DEFAULT.precision && + scale == DecimalType.SYSTEM_DEFAULT.scale) { + DecimalType.SYSTEM_DEFAULT + } + else if (precision == DecimalType.USER_DEFAULT.precision && + scale == DecimalType.USER_DEFAULT.scale) { + DecimalType.USER_DEFAULT + } + else { + assert(precision >= 0) + assert(scale >= 0) + DecimalType(precision, scale) + } case StoredFormatIds.SQL_REAL_ID => FloatType case StoredFormatIds.SQL_BOOLEAN_ID => BooleanType case StoredFormatIds.SQL_SMALLINT_ID => ShortType diff --git a/store b/store index 63839d782d..50d2043456 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 63839d782dcadce304c6c4256b5797ea6cc20182 +Subproject commit 50d2043456d374a6c83b3856194ea53d14b099b1 From f665b0bab89a244e335f280e3f3651a8da5fc047 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Tue, 24 Mar 2020 02:49:43 +0530 Subject: [PATCH 76/80] fixing few more remaining failures and update spark module link --- .../serializer/PooledKryoSerializer.scala | 44 +++++++++---------- .../org/apache/spark/sql/SnappyParser.scala | 2 +- .../org/apache/spark/sql/execution/ddl.scala | 19 ++++---- .../sql/streaming/LogicalDStreamPlan.scala | 2 + spark | 2 +- 5 files changed, 34 insertions(+), 35 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala b/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala index 7191d59eef..2a44390ac7 100644 --- a/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala +++ b/core/src/main/scala/org/apache/spark/serializer/PooledKryoSerializer.scala @@ -82,13 +82,20 @@ final class PooledKryoSerializer(conf: SparkConf) val classLoader = kryo.getClassLoader kryo.setClassLoader(oldClassLoader) + // use Externalizable, if available, rather than going to FieldSerializer + kryo.addDefaultSerializer(classOf[Externalizable], new ExternalizableSerializer) + + // use a custom default serializer factory that will honour + // readObject/writeObject, readResolve/writeReplace methods to fall-back + // to java serializer else use Kryo's FieldSerializer + kryo.setDefaultSerializer(new SnappyKryoSerializerFactory) + // specific serialization implementations in Spark and commonly used classes kryo.register(classOf[UnsafeRow]) kryo.register(classOf[UTF8String]) kryo.register(classOf[UpdateBlockInfo], new ExternalizableOnlySerializer) kryo.register(classOf[CompressedMapStatus], new ExternalizableOnlySerializer) - kryo.register(classOf[HighlyCompressedMapStatus], - new ExternalizableOnlySerializer) + kryo.register(classOf[HighlyCompressedMapStatus], new ExternalizableOnlySerializer) kryo.register(classOf[IndirectTaskResult[_]]) kryo.register(classOf[RDDBlockId]) kryo.register(classOf[ShuffleBlockId]) @@ -171,16 +178,6 @@ final class PooledKryoSerializer(conf: SparkConf) case _: ClassNotFoundException => // ignore } - // use Externalizable by default as last fallback, if available, - // rather than going to FieldSerializer - kryo.addDefaultSerializer(classOf[Externalizable], - new ExternalizableSerializer) - - // use a custom default serializer factory that will honour - // readObject/writeObject, readResolve/writeReplace methods to fall-back - // to java serializer else use Kryo's FieldSerializer - kryo.setDefaultSerializer(new SnappyKryoSerializerFactory) - kryo.setClassLoader(classLoader) kryo } @@ -198,12 +195,12 @@ final class PooledKryoSerializer(conf: SparkConf) } } -final class PooledObject(serializer: PooledKryoSerializer, - bufferSize: Int) { +final class PooledObject(serializer: PooledKryoSerializer, bufferSize: Int) { val kryo: Kryo = serializer.newKryo() val input: Input = new KryoInputStringFix(0) def newOutput(): ByteBufferOutput = new ByteBufferOutput(bufferSize, -1) + def newOutput(size: Int): ByteBufferOutput = new ByteBufferOutput(size, -1) } @@ -323,14 +320,14 @@ private[spark] final class PooledKryoSerializerInstance( // bigger than the code string size. If it is not bigger, the writestring call inside // WholeStageCodeGenRDD.write calls writeString_slow. Refer Output.writeString. // So create a buffer of size greater than the size of code. - if (rdd.productArity == 5 && - // Hackish way to determine if it is a WholeStageRDD. - // Any change to WholeStageCodeGenRDD needs to reflect here - rdd.productElement(1).isInstanceOf[CodeAndComment]) { - val size = rdd.productElement(1).asInstanceOf[CodeAndComment].body.length - // round off to a multiple of 1024 - ((size + 4 * 1024) >> 10) << 10 - } else -1 + if (rdd.productArity == 5 && + // Hackish way to determine if it is a WholeStageRDD. + // Any change to WholeStageCodeGenRDD needs to reflect here + rdd.productElement(1).isInstanceOf[CodeAndComment]) { + val size = rdd.productElement(1).asInstanceOf[CodeAndComment].body.length + // round off to a multiple of 1024 + ((size + 4 * 1024) >> 10) << 10 + } else -1 case _ => -1 } ByteBuffer.wrap(KryoSerializerPool.serialize( @@ -454,8 +451,7 @@ private[spark] class KryoStringFixDeserializationStream( * Fix for https://github.com/EsotericSoftware/kryo/issues/128. * Uses an additional 0x0 byte as end marker. */ -private[spark] final class KryoInputStringFix(size: Int) - extends Input(size) { +private[spark] final class KryoInputStringFix(size: Int) extends Input(size) { override def readString: String = { require(1) diff --git a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala index 717c864cb9..caa8a1d817 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappyParser.scala @@ -1298,7 +1298,7 @@ class SnappyParser(session: SnappySession) protected def show: Rule1[LogicalPlan] = rule { SHOW ~ TABLES ~ ((FROM | IN) ~ identifier).? ~ (LIKE.? ~ stringLiteral).? ~> ((id: Any, pat: Any) => new ShowSnappyTablesCommand( - id.asInstanceOf[Option[String]], pat.asInstanceOf[Option[String]])(session)) | + id.asInstanceOf[Option[String]], pat.asInstanceOf[Option[String]], session)) | SHOW ~ TABLE ~ ANY. + ~> (() => sparkParser.parsePlan(input.sliceString(0, input.length))) | SHOW ~ VIEWS ~ ((FROM | IN) ~ identifier).? ~ (LIKE.? ~ stringLiteral).? ~> ((id: Any, pat: Any) => ShowViewsCommand(session, diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala index 1f7eddeac2..49f90fcee6 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ddl.scala @@ -335,14 +335,13 @@ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: Str session.snappySessionState.enableExecutionCache = false session.snappySessionState.clearExecutionCache() } - val executedPlan = cachedExecution.executedPlan - val memoryPlan = executedPlan.collectFirst { + val memoryPlan = df.queryExecution.executedPlan.collectFirst { case plan: InMemoryTableScanExec => plan.relation }.get - val planInfo = PartitionedPhysicalScan.getSparkPlanInfo(executedPlan) + val planInfo = PartitionedPhysicalScan.getSparkPlanInfo(cachedExecution.executedPlan) Row(CachedDataFrame.withCallback(session, df = null, cachedExecution, "cache")(_ => - CachedDataFrame.withNewExecutionId(session, executedPlan, queryShortString, queryString, - cachedExecution.toString(), planInfo)({ + CachedDataFrame.withNewExecutionId(session, cachedExecution.executedPlan, + queryShortString, queryString, cachedExecution.toString(), planInfo)({ val start = System.nanoTime() // Dummy op to materialize the cache. This does the minimal job of count on // the actual cached data (RDD[CachedBatch]) to force materialization of cache @@ -367,10 +366,12 @@ case class SnappyCacheTableCommand(tableIdent: TableIdentifier, queryString: Str * or "isTemporary" to return hive compatible result. */ class ShowSnappyTablesCommand(schemaOpt: Option[String], tablePattern: Option[String])( - session: SnappySession) extends ShowTablesCommand(schemaOpt, tablePattern) { + val hiveCompatible: Boolean) extends ShowTablesCommand(schemaOpt, tablePattern) { - private val hiveCompatible = Property.HiveCompatibility.get( - session.sessionState.conf).equalsIgnoreCase("full") + def this(schemaOpt: Option[String], tablePattern: Option[String], session: SnappySession) { + this(schemaOpt, tablePattern)(Property.HiveCompatibility.get( + session.sessionState.conf).equalsIgnoreCase("full")) + } override val output: Seq[Attribute] = { if (hiveCompatible) AttributeReference("name", StringType, nullable = false)() :: Nil @@ -381,7 +382,7 @@ class ShowSnappyTablesCommand(schemaOpt: Option[String], tablePattern: Option[St } } - override protected def otherCopyArgs: Seq[AnyRef] = session :: Nil + override protected def otherCopyArgs: Seq[AnyRef] = Boolean.box(hiveCompatible) :: Nil override def run(sparkSession: SparkSession): Seq[Row] = { if (!hiveCompatible) { diff --git a/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala b/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala index 7004a3f9dd..9b80f9e49f 100644 --- a/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala +++ b/core/src/main/scala/org/apache/spark/sql/streaming/LogicalDStreamPlan.scala @@ -31,6 +31,8 @@ abstract case class LogicalDStreamPlan(output: Seq[Attribute], (val streamingSnappy: SnappyStreamingContext) extends LogicalPlan with MultiInstanceRelation with SparkSupport { + override protected def otherCopyArgs: Seq[AnyRef] = streamingSnappy :: Nil + def newInstance(): LogicalDStreamPlan = internals.newLogicalDStreamPlan(output.map(_.newInstance()), stream, streamingSnappy).asInstanceOf[this.type] diff --git a/spark b/spark index 370fab829b..b5e0f32e87 160000 --- a/spark +++ b/spark @@ -1 +1 @@ -Subproject commit 370fab829b761c07339534f8817102a6b7752ac9 +Subproject commit b5e0f32e8733e6867fbc524f4c158ed5c722667f From bc9c2c998ad9e5eb090acfd1eafc00599ea79ff3 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Fri, 27 Mar 2020 19:54:41 +0530 Subject: [PATCH 77/80] fixing remaining failures - fix code generation issue seen in TPCH Q20 - correct SD's SQL listener to link any jobs during planning and execution phase of a query correctly (reintroduced SparkListenerSQLPlanExecutionStart/End and handle SparkListenerSQLExecutionStart to search for any existing execution from SparkListenerSQLPlanExecutionStart then mark it as active instead of creating new one) --- .../org/apache/spark/sql/store/BugTest.scala | 6 +- .../sql/execution/ui/SnappySQLListener.scala | 21 ++++- .../execution/ui/SnappySQLAppListener.scala | 80 ++++++++++++++----- .../sql/internal/Spark23_4_Internals.scala | 4 +- .../apache/spark/sql/CachedDataFrame.scala | 9 ++- .../org/apache/spark/sql/SnappySession.scala | 51 ++++++++---- .../sql/execution/CodegenSparkFallback.scala | 3 +- .../sql/execution/ObjectHashMapAccessor.scala | 5 +- 8 files changed, 131 insertions(+), 48 deletions(-) diff --git a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala index d9703f9cd9..9665143ac8 100644 --- a/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala +++ b/cluster/src/test/scala/org/apache/spark/sql/store/BugTest.scala @@ -1167,7 +1167,7 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { session.sql(s"set ${Property.UseOptimizedHashAggregateForSingleKey.name} = true") val numRows = 1000000 - val sleepTime = 7000L + val sleepTime = 5000L session.sql("create table test1 (id long, data string) using column " + s"options (buckets '8') as select id, 'data_' || id from range($numRows)") val ds = session.sql( @@ -1180,10 +1180,10 @@ class BugTest extends SnappyFunSuite with BeforeAndAfterAll { // last one should be the query above val queryUIData = sqlStore.executionsList().last val duration = queryUIData.completionTime.get.getTime - queryUIData.submissionTime - // never expect the query above to take more than 7 secs + // never expect the query above to take more than 5 secs assert(duration > 0L) assert(duration < sleepTime) - assert(queryUIData.jobs.count(_._2 == JobExecutionStatus.SUCCEEDED) === 1) + assert(queryUIData.jobs.count(_._2 == JobExecutionStatus.SUCCEEDED) === 2) val executionId = queryUIData.executionId val metrics = sqlStore.executionMetrics(executionId) diff --git a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala index 76c680924b..0bc96fc210 100644 --- a/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala +++ b/core/compatibility/spark-2.1/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLListener.scala @@ -19,8 +19,8 @@ package org.apache.spark.sql.execution.ui import scala.collection.mutable import org.apache.spark.scheduler.{SparkListenerEvent, SparkListenerJobStart} -import org.apache.spark.sql.CachedDataFrame import org.apache.spark.sql.execution.{SQLExecution, SparkPlanInfo} +import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionEnd, SparkListenerSQLPlanExecutionStart} import org.apache.spark.{JobExecutionStatus, SparkConf} /** @@ -112,13 +112,13 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { * to create a rdd which is then used to create a CachedDataFrame. * In second phase, the CachedDataFrame is then used for further actions. * For accumulating the metrics for first phase, - * SparkListenerSQLExecutionStart is fired. This keeps the current + * SparkListenerSQLPlanExecutionStart is fired. This keeps the current * executionID in _executionIdToData but does not add it to the active * executions. This ensures that query is not shown in the UI but the * new jobs that are run while the plan is being executed are tracked * against this executionID. In the second phase, when the query is - * actually executed, SparkListenerSQLExecutionStart adds the execution - * data to the active executions. SparkListenerSQLExecutionEnd is + * actually executed, SparkListenerSQLPlanExecutionStart adds the execution + * data to the active executions. SparkListenerSQLPlanExecutionEnd is * then sent with the accumulated time of both the phases. */ override def onOtherEvent(event: SparkListenerEvent): Unit = { @@ -137,6 +137,19 @@ class SnappySQLListener(conf: SparkConf) extends SQLListener(conf) { baseActiveExecutions(executionId) = executionUIData } + case SparkListenerSQLPlanExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time) => + val executionUIData = newExecutionUIData(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time) + synchronized { + baseExecutionIdToData(executionId) = executionUIData + baseActiveExecutions(executionId) = executionUIData + } + + case SparkListenerSQLPlanExecutionEnd(executionId, _) => synchronized { + baseActiveExecutions.remove(executionId) + } + case _ => super.onOtherEvent(event) } } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala index c2031afb31..4cbf5b4c19 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/execution/ui/SnappySQLAppListener.scala @@ -17,9 +17,12 @@ package org.apache.spark.sql.execution.ui +import java.util.NoSuchElementException +import java.util.concurrent.ConcurrentMap + import org.apache.spark.SparkContext import org.apache.spark.scheduler.SparkListenerEvent -import org.apache.spark.sql.CachedDataFrame +import org.apache.spark.sql.{CachedDataFrame, SparkListenerSQLPlanExecutionEnd, SparkListenerSQLPlanExecutionStart} import org.apache.spark.status.ElementTrackingStore /** @@ -32,33 +35,74 @@ import org.apache.spark.status.ElementTrackingStore * * @param context the active SparkContext */ -class SnappySQLAppListener(context: SparkContext) - extends SQLAppStatusListener(context.conf, - context.statusStore.store.asInstanceOf[ElementTrackingStore], live = true) { +class SnappySQLAppListener(context: SparkContext, val kvStore: ElementTrackingStore) + extends SQLAppStatusListener(context.conf, kvStore, live = true) { + + private[this] val baseLiveExecutions: ConcurrentMap[Long, LiveExecutionData] = { + val f = classOf[SQLAppStatusListener].getDeclaredFields + .find(_.getName.contains("liveExecutions")).get + f.setAccessible(true) + f.get(this).asInstanceOf[ConcurrentMap[Long, LiveExecutionData]] + } /** * Snappy's execution happens in two phases. First phase the plan is executed * to create a rdd which is then used to create a CachedDataFrame. * In second phase, the CachedDataFrame is then used for further actions. - * For accumulating the metrics for first phase, - * SparkListenerSQLExecutionStart is fired. This keeps the current - * executionID in _executionIdToData but does not add it to the active - * executions. This ensures that query is not shown in the UI but the - * new jobs that are run while the plan is being executed are tracked + * For accumulating the metrics for first phase, SparkListenerSQLPlanExecutionStart + * is fired. This adds the query to the active executions like normal executions but + * notes it for future full execution if required. This ensures that query is shown + * in the UI and new jobs that are run while the plan is being executed are tracked * against this executionID. In the second phase, when the query is - * actually executed, SparkListenerSQLExecutionStart adds the execution - * data to the active executions. SparkListenerSQLExecutionEnd is + * actually executed, SparkListenerSQLExecutionStart updates the execution + * data in the active executions from existing one. SparkListenerSQLExecutionEnd is * then sent with the accumulated time of both the phases. */ override def onOtherEvent(event: SparkListenerEvent): Unit = event match { - case SparkListenerSQLExecutionStart(executionId, description, details, + case SparkListenerSQLPlanExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time) => + super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time)) + + case SparkListenerSQLExecutionStart(executionId, desc, details, physicalPlanDescription, sparkPlanInfo, time) => - // description and details strings being reference equals so trim off former here - if (description eq details) { - val desc = CachedDataFrame.queryStringShortForm(details) - super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, desc, details, - physicalPlanDescription, sparkPlanInfo, time)) - } else super.onOtherEvent(event) + + val description = + if (desc eq details) { + // description and details strings being reference equals so trim off former here + CachedDataFrame.queryStringShortForm(details) + } else desc + + // check if execution was previously started by SparkListenerSQLPlanExecutionStart + // and restore the data if found + try { + val sqlStoreData = kvStore.read(classOf[SQLExecutionUIData], executionId) + val executionData = new LiveExecutionData(executionId) + executionData.description = description + executionData.details = details + executionData.physicalPlanDescription = physicalPlanDescription + executionData.metrics = sqlStoreData.metrics + executionData.submissionTime = time + executionData.completionTime = None // started again + executionData.jobs = sqlStoreData.jobs + executionData.stages = sqlStoreData.stages + executionData.metricsValues = sqlStoreData.metricValues + executionData.endEvents = sqlStoreData.jobs.size + // write immediately into KVStore (at least completionTime has changed) + executionData.write(kvStore, System.nanoTime()) + baseLiveExecutions.put(executionId, executionData) + } catch { + case _: NoSuchElementException => + if (desc ne description) { + super.onOtherEvent(SparkListenerSQLExecutionStart(executionId, description, details, + physicalPlanDescription, sparkPlanInfo, time)) + } else super.onOtherEvent(event) + } + + case SparkListenerSQLPlanExecutionEnd(executionId, time) => + // SparkListenerSQLExecutionStart/End may never be fired for the query (e.g. for df.count) + // so cleanup the live data but this will be restored on next SparkListenerSQLExecutionStart + super.onOtherEvent(SparkListenerSQLExecutionEnd(executionId, time)) case _ => super.onOtherEvent(event) } diff --git a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala index ca751a56d7..190f366ed6 100644 --- a/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala +++ b/core/compatibility/spark-2.3/src/main/scala/org/apache/spark/sql/internal/Spark23_4_Internals.scala @@ -56,6 +56,7 @@ import org.apache.spark.sql.hive._ import org.apache.spark.sql.sources.{BaseRelation, Filter, JdbcExtendedUtils, ResolveQueryHints} import org.apache.spark.sql.streaming.{LogicalDStreamPlan, OutputMode, StreamingQuery, StreamingQueryManager, Trigger} import org.apache.spark.sql.types.{DataType, StructType} +import org.apache.spark.status.ElementTrackingStore import org.apache.spark.status.api.v1.RDDStorageInfo import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.SnappyStreamingContext @@ -165,7 +166,8 @@ abstract class Spark23_4_Internals extends SparkInternals { state.statusStore.listener match { case Some(_: SnappySQLAppListener) => // already changed case Some(_: SQLAppStatusListener) => - val newListener = new SnappySQLAppListener(sc) + val newListener = new SnappySQLAppListener(sc, + sc.statusStore.store.asInstanceOf[ElementTrackingStore]) // update on ListenerBus sc.listenerBus.findListenersByClass[SQLAppStatusListener]().foreach( sc.removeSparkListener) diff --git a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala index 6782fe0436..93a4d42ff1 100644 --- a/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala +++ b/core/src/main/scala/org/apache/spark/sql/CachedDataFrame.scala @@ -48,7 +48,6 @@ import org.apache.spark.sql.catalyst.expressions.{ParamLiteral, UnsafeProjection import org.apache.spark.sql.collection.Utils import org.apache.spark.sql.execution._ import org.apache.spark.sql.execution.aggregate.CollectAggregateExec -import org.apache.spark.sql.execution.command.ExecutedCommandExec import org.apache.spark.sql.execution.ui.{SparkListenerSQLExecutionEnd, SparkListenerSQLExecutionStart} import org.apache.spark.sql.store.CompressionUtils import org.apache.spark.sql.types.StructType @@ -153,8 +152,9 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti private[sql] def duplicate(): CachedDataFrame = { val cdf = new CachedDataFrame(snappySession, queryExecution, queryExecutionString, - queryPlanInfo, null, null, cachedRDD, shuffleDependencies, encoder, shuffleCleanups, - rddId, noSideEffects, queryHints, -1L, -1L, linkPart) + queryPlanInfo, currentQueryExecutionString = null, currentQueryPlanInfo = null, cachedRDD, + shuffleDependencies, encoder, shuffleCleanups, rddId, noSideEffects, queryHints, + currentExecutionId = -1L, planningTime = -1L, linkPart) cdf.log_ = log_ cdf.levelFlags = levelFlags cdf._boundEnc = boundEnc // force materialize boundEnc which is commonly used @@ -386,7 +386,8 @@ class CachedDataFrame(snappySession: SnappySession, queryExecution: QueryExecuti executeCollect().iterator.map(rowConverter))._1)) } - case _: ExecutedCommandExec | _: LocalTableScanExec | _: ExecutePlan => + case _ if executedPlan.isInstanceOf[LocalTableScanExec] || + SnappySession.isCommandExec(executedPlan) => if (skipUnpartitionedDataProcessing) { // no processing required executeCollect().iterator.asInstanceOf[Iterator[R]] diff --git a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala index ec140829f0..47c6a9ad7f 100644 --- a/core/src/main/scala/org/apache/spark/sql/SnappySession.scala +++ b/core/src/main/scala/org/apache/spark/sql/SnappySession.scala @@ -40,6 +40,7 @@ import org.eclipse.collections.impl.map.mutable.UnifiedMap import org.apache.spark.annotation.{DeveloperApi, Experimental} import org.apache.spark.jdbc.{ConnectionConf, ConnectionUtil} import org.apache.spark.rdd.RDD +import org.apache.spark.scheduler.SparkListenerEvent import org.apache.spark.sql.catalyst.analysis.{Analyzer, NoSuchTableException, UnresolvedAttribute, UnresolvedRelation, UnresolvedStar} import org.apache.spark.sql.catalyst.catalog.{BucketSpec, CatalogTable, CatalogTableType} import org.apache.spark.sql.catalyst.encoders._ @@ -59,7 +60,7 @@ import org.apache.spark.sql.execution.datasources.jdbc.{JDBCOptions, JdbcUtils} import org.apache.spark.sql.execution.datasources.{CreateTable, DataSource, LogicalRelation} import org.apache.spark.sql.execution.exchange.BroadcastExchangeExec import org.apache.spark.sql.execution.joins.{BroadcastHashJoinExec, BroadcastNestedLoopJoinExec} -import org.apache.spark.sql.execution.ui.{SparkListenerSQLExecutionEnd, SparkListenerSQLExecutionStart} +import org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionEnd import org.apache.spark.sql.hive.{HiveClientUtil, SnappySessionState} import org.apache.spark.sql.internal.StaticSQLConf.SCHEMA_STRING_LENGTH_THRESHOLD import org.apache.spark.sql.internal.{BypassRowLevelSecurity, MarkerForCreateTableAsSelect, SessionState, SnappySessionCatalog, SnappySharedState, StaticSQLConf} @@ -155,6 +156,7 @@ class SnappySession(_sc: SparkContext) extends SparkSession(_sc) override private[sql] def cloneSession(): SnappySession = { val result = newSession() result.sessionState // force copy of SessionState + result.snappySessionState.initSnappyStrategies // force add strategies for StreamExecution result } @@ -2138,18 +2140,22 @@ object SnappySession extends Logging { localProperties.remove(SQLExecution.EXECUTION_ID_KEY) } + private[sql] def isCommandExec(plan: SparkPlan): Boolean = plan match { + case _: ExecutedCommandExec | _: ExecutePlan | UnionCommands(_) => true + case _ => false + } + /** * Snappy's execution happens in two phases. First phase the plan is executed * to create a rdd which is then used to create a CachedDataFrame. * In second phase, the CachedDataFrame is then used for further actions. - * For accumulating the metrics for first phase, - * SparkListenerSQLExecutionStart is fired. This keeps the current - * executionID in _executionIdToData but does not add it to the active - * executions. This ensures that query is not shown in the UI but the - * new jobs that are run while the plan is being executed are tracked + * For accumulating the metrics for first phase, SparkListenerSQLPlanExecutionStart + * is fired. This adds the query to the active executions like normal executions but + * notes it for future full execution if required. This ensures that query is shown + * in the UI and new jobs that are run while the plan is being executed are tracked * against this executionID. In the second phase, when the query is - * actually executed, SparkListenerSQLExecutionStart adds the execution - * data to the active executions. SparkListenerSQLExecutionEnd is + * actually executed, SparkListenerSQLExecutionStart updates the execution + * data in the active executions from existing one. SparkListenerSQLExecutionEnd is * then sent with the accumulated time of both the phases. */ private def planExecution(qe: QueryExecution, session: SnappySession, sqlShortText: String, @@ -2174,7 +2180,7 @@ object SnappySession extends Logging { val postQueryExecutionStr = replaceParamLiterals(queryExecutionStr, paramLiterals, paramsId) val postQueryPlanInfo = PartitionedPhysicalScan.updatePlanInfo(queryPlanInfo, paramLiterals, paramsId) - context.listenerBus.post(SparkListenerSQLExecutionStart( + context.listenerBus.post(SparkListenerSQLPlanExecutionStart( executionId, CachedDataFrame.queryStringShortForm(sqlText), sqlText, postQueryExecutionStr, postQueryPlanInfo, startTime)) val rdd = f @@ -2185,14 +2191,16 @@ object SnappySession extends Logging { } finally { clearExecutionProperties(localProperties) if (endTime == -1L) endTime = System.currentTimeMillis() - if (!success) { + // post the end of SQL at the end of planning phase; this will be re-posted during + // execution with the submission time adjusted (by the planning time) in CachedDataFrame + if (success) { + context.listenerBus.post(SparkListenerSQLPlanExecutionEnd(executionId, endTime)) + } else { // cleanups in case of failure SnappySession.cleanupBroadcasts(qe.executedPlan, blocking = true) session.snappySessionState.clearExecutionData() + context.listenerBus.post(SparkListenerSQLExecutionEnd(executionId, endTime)) } - // post the end of SQL at the end of planning phase; this will be re-posted during - // execution with the submission time adjusted (by the planning time) in CachedDataFrame - context.listenerBus.post(SparkListenerSQLExecutionEnd(executionId, endTime)) } } @@ -2214,7 +2222,7 @@ object SnappySession extends Logging { val (cachedRDD, execution, origExecutionString, origPlanInfo, executionString, planInfo, rddId, noSideEffects, executionId, planningTime: Long) = executedPlan match { - case _: ExecutedCommandExec | _: ExecutePlan | UnionCommands(_) => + case _ if isCommandExec(executedPlan) => // TODO add caching for point updates/deletes; a bit of complication // because getPlan will have to do execution with all waits/cleanups // normally done in CachedDataFrame.collectWithHandler/withCallback @@ -2594,6 +2602,21 @@ object CachedKey extends SparkSupport { } } +/** + * A new event that is fired when a plan is executed to get an RDD. + */ +case class SparkListenerSQLPlanExecutionStart( + executionId: Long, + description: String, + details: String, + physicalPlanDescription: String, + sparkPlanInfo: SparkPlanInfo, + time: Long) + extends SparkListenerEvent + +case class SparkListenerSQLPlanExecutionEnd(executionId: Long, time: Long) + extends SparkListenerEvent + private object UnionCommands { def unapply(plan: SparkPlan): Option[Boolean] = plan match { case union: UnionExec if union.children.nonEmpty && union.children.forall { diff --git a/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala b/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala index b99237b117..d8e573e5d8 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/CodegenSparkFallback.scala @@ -24,7 +24,6 @@ import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{Attribute, SortOrder} import org.apache.spark.sql.catalyst.plans.physical.Partitioning -import org.apache.spark.sql.execution.command.ExecutedCommandExec import org.apache.spark.sql.execution.metric.SQLMetric import org.apache.spark.sql.internal.CodeGenerationException import org.apache.spark.sql.{CachedDataFrame, SnappySession} @@ -129,7 +128,7 @@ abstract case class CodegenSparkFallback(var child: SparkPlan, SnappySession.clearAllCache() // fail immediate for insert/update/delete, else retry entire query val action = plan.find { - case _: ExecutePlan | _: ExecutedCommandExec => true + case p if SnappySession.isCommandExec(p) => true case _ => false } if (action.isDefined) throw CachedDataFrame.catalogStaleFailure(t, session) diff --git a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala index d86d22e79b..da6753cb0a 100644 --- a/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala +++ b/core/src/main/scala/org/apache/spark/sql/execution/ObjectHashMapAccessor.scala @@ -1240,7 +1240,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, case None => // no key/value assignments required - s"if ($entryVar == null) continue;\n$consumeResult" + s"if ($entryVar == null) continue;\n$inputCodes\n$consumeResult" case Some(ev) => val breakLoop = ctx.freshName("breakLoop") @@ -1278,7 +1278,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, case None => // success if no match for an anti-join (no value iteration) - s"if ($entryVar != null) continue;\n$consumeResult" + s"if ($entryVar != null) continue;\n$inputCodes\n$consumeResult" case Some(ev) => val breakLoop = ctx.freshName("breakLoop") @@ -1326,6 +1326,7 @@ case class ObjectHashMapAccessor(@transient session: SnappySession, case None => // only one match needed, so no value iteration s"""final boolean $existsVar = ($entryVar != null); + $inputCodes $consumeResult""" case Some(ev) => From d83bf9d388ecc4a5e41ed932d3001e642d515ed4 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sat, 28 Mar 2020 02:23:34 +0530 Subject: [PATCH 78/80] fixing test --- .../SplitClusterDUnitSecurityTest.scala | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala index a9a012d525..d865b0930a 100644 --- a/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala +++ b/core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitSecurityTest.scala @@ -30,13 +30,13 @@ import com.pivotal.gemfirexd.internal.engine.Misc import com.pivotal.gemfirexd.security.{LdapTestServer, SecurityTestUtils} import io.snappydata.Constant import io.snappydata.test.dunit.DistributedTestBase.WaitCriterion -import io.snappydata.test.dunit.{AvailablePortHelper, DistributedTestBase, Host, SerializableRunnable, VM} +import io.snappydata.test.dunit.{AvailablePortHelper, DistributedTestBase, SerializableRunnable, VM} import io.snappydata.util.TestUtils import org.apache.commons.io.FileUtils import org.apache.spark.SparkUtilsAccess import org.apache.spark.sql.types.{IntegerType, StructField} -import org.apache.spark.sql.{ParseException, Row, SnappyContext, SnappySession, TableNotFoundException} +import org.apache.spark.sql.{AnalysisException, ParseException, Row, SnappyContext, SnappySession} class SplitClusterDUnitSecurityTest(s: String) extends DistributedTestBase(s) @@ -65,7 +65,6 @@ class SplitClusterDUnitSecurityTest(s: String) var user4Conn = null: Connection var snc = null: SnappyContext - private[this] var host: Host = _ var vm0: VM = _ var vm1: VM = _ var vm2: VM = _ @@ -367,10 +366,10 @@ class SplitClusterDUnitSecurityTest(s: String) stmt.execute(s"drop table $smartColTab1") stmt.execute(s"drop table $smartRowTab1") assertTableDeleted(() => { - snc.sparkSession.catalog.refreshTable(smartColTab1) + snc.sql(s"select count(*) from $smartColTab1").collect() }, smartColTab1) assertTableDeleted(() => { - snc.sparkSession.catalog.refreshTable(smartRowTab1) + snc.sql(s"select count(*) from $smartRowTab1").collect() }, smartRowTab1) } finally { snc.sparkContext.stop() @@ -382,9 +381,9 @@ class SplitClusterDUnitSecurityTest(s: String) private def assertTableDeleted(func: () => Unit, t: String): Unit = { try { func() - assert(false, s"Failed to drop $t") + assert(assertion = false, s"Should have failed in table operation after drop for $t") } catch { - case te: TableNotFoundException => + case _: AnalysisException => } } @@ -787,15 +786,22 @@ class SplitClusterDUnitSecurityTest(s: String) f() assert(false, s"Should have failed: $s") } catch { - case sqle: SQLException => - if (states.contains(sqle.getSQLState)) { - logInfo(s"Found expected error: $sqle") - } else { - logError(s"Found different SQLState: ${sqle.getSQLState}") - throw sqle - } case t: Throwable => var okay = false + var cause = t + while (!okay && (cause ne null)) { + cause match { + case sqle: SQLException => + if (states.contains(sqle.getSQLState)) { + logInfo(s"Found expected error: $sqle") + okay = true + } else { + logError(s"Found different SQLState: ${sqle.getSQLState}") + throw sqle + } + case _ => cause = cause.getCause + } + } states.foreach(state => { if (t.getMessage.contains(state)) { logInfo(s"Found expected error in: ${t.getClass.getName}, ${t.getMessage}") @@ -1025,17 +1031,17 @@ class SplitClusterDUnitSecurityTest(s: String) override def accept(pathname: File): Boolean = { pathname.getName.contains("myudf") && pathname.getName.contains("jar") } - }).foreach(x => println(s"BEFORE DROP [snappy-jars]: ${x.getAbsolutePath}")) + }).foreach(x => logInfo(s"BEFORE DROP [snappy-jars]: ${x.getAbsolutePath}")) server1Dir.listFiles(new FileFilter { override def accept(pathname: File): Boolean = { pathname.getName.contains("myudf") && pathname.getName.contains("jar") } - }).foreach(x => println(s"BEFORE DROP [snappy-jars]: ${x.getAbsolutePath}")) + }).foreach(x => logInfo(s"BEFORE DROP [snappy-jars]: ${x.getAbsolutePath}")) server2Dir.listFiles(new FileFilter { override def accept(pathname: File): Boolean = { pathname.getName.contains("myudf") && pathname.getName.contains("jar") } - }).foreach(x => println(s"BEFORE DROP [snappy-jars]: ${x.getAbsolutePath}")) + }).foreach(x => logInfo(s"BEFORE DROP [snappy-jars]: ${x.getAbsolutePath}")) // Drop a function of jdbcUser2 @@ -1057,17 +1063,17 @@ class SplitClusterDUnitSecurityTest(s: String) override def accept(pathname: File): Boolean = { pathname.getName.contains("myudf") && pathname.getName.contains("jar") } - }).foreach(x => println(s"AFTER DROP [snappy-jars]: ${x.getAbsolutePath}")) + }).foreach(x => logInfo(s"AFTER DROP [snappy-jars]: ${x.getAbsolutePath}")) server1Dir.listFiles(new FileFilter { override def accept(pathname: File): Boolean = { pathname.getName.contains("myudf") && pathname.getName.contains("jar") } - }).foreach(x => println(s"AFTER DROP [snappy-jars]: ${x.getAbsolutePath}")) + }).foreach(x => logInfo(s"AFTER DROP [snappy-jars]: ${x.getAbsolutePath}")) server2Dir.listFiles(new FileFilter { override def accept(pathname: File): Boolean = { pathname.getName.contains("myudf") && pathname.getName.contains("jar") } - }).foreach(x => println(s"AFTER DROP [snappy-jars]: ${x.getAbsolutePath}")) + }).foreach(x => logInfo(s"AFTER DROP [snappy-jars]: ${x.getAbsolutePath}")) // Verify list jars stmt2.execute(s"list jars") From d771acb3411797ec8a63880c3ca67ffb3851c449 Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sat, 28 Mar 2020 03:34:47 +0530 Subject: [PATCH 79/80] correct uncaught handler setting in Executor with for Spark 2.4 --- .../main/scala/org/apache/spark/executor/SnappyExecutor.scala | 2 +- store | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala b/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala index 9b44eae8c6..1db8d460da 100644 --- a/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala +++ b/cluster/src/main/scala/org/apache/spark/executor/SnappyExecutor.scala @@ -42,7 +42,7 @@ class SnappyExecutor( userClassPath: Seq[URL] = Nil, exceptionHandler: SnappyUncaughtExceptionHandler, isLocal: Boolean = false) - extends Executor(executorId, executorHostname, env, userClassPath, isLocal) { + extends Executor(executorId, executorHostname, env, userClassPath, isLocal, exceptionHandler) { { // set a thread-factory for the thread pool for cleanup diff --git a/store b/store index 50d2043456..e7b2b7a893 160000 --- a/store +++ b/store @@ -1 +1 @@ -Subproject commit 50d2043456d374a6c83b3856194ea53d14b099b1 +Subproject commit e7b2b7a893bf6b84717142a6b1c2b5c66da72a6c From 1b2dbb1a0c4992fb20bf4a156c85cc27339f554e Mon Sep 17 00:00:00 2001 From: Sumedh Wale Date: Sun, 29 Mar 2020 02:30:36 +0530 Subject: [PATCH 80/80] skip dynamic cpusPerTask setting with smart connector also fix few dunit test failures in ColumnBatchAndExternalTableDUnitTest --- .../cluster/SplitSnappyClusterDUnitTest.scala | 2 +- ...ColumnBatchAndExternalTableDUnitTest.scala | 95 +++++++++--------- .../snappydata/filodb/FiloDBApp_Column.scala | 17 ++++ .../io/snappydata/filodb/FiloDBApp_Row.scala | 17 ++++ .../apache/spark/sql/internal/session.scala | 10 +- .../._common_metadata.crc | Bin 32 -> 0 bytes .../2015-trimmed.parquet/._metadata.crc | Bin 88 -> 0 bytes ...4cf1-a62b-66df910b5c0d-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4b99-bd5f-7509909cd629-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...452d-878d-025d567a705b-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4532-af09-054c39814f92-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...44a6-9deb-12e7f97895d3-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4b82-9e15-a75b47e5f696-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...44d4-a026-80fc1e82b653-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4274-956e-23869a4e7662-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4775-8dba-5261c27ad67e-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...452f-a40a-2dd403ac79b9-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...46e3-83d9-f3f746510f64-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...43a1-a095-4dfe8ffbb896-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4f5a-bd23-72e5f76f6225-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...40d6-98d2-e1869f64bef2-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4f4b-82d5-85bf626078a7-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...44c7-8808-07f201d8ae97-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...47f0-8afb-11ef79e699a5-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4911-9661-36dbb07821ae-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4c26-9e81-263d90950ea1-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...45da-b9fe-28b4389acfdd-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4747-9399-da92c299179f-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...42cb-952b-250bc66fb332-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...47e5-a5f9-e0494472c448-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...44d4-acbb-5a216f176ed4-c000.gz.parquet.crc | Bin 0 -> 32 bytes ...4cf1-a62b-66df910b5c0d-c000.gz.parquet.crc | Bin 0 -> 724 bytes ...4b99-bd5f-7509909cd629-c000.gz.parquet.crc | Bin 0 -> 656 bytes ...452d-878d-025d567a705b-c000.gz.parquet.crc | Bin 0 -> 720 bytes ...4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc | Bin 0 -> 656 bytes ...453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc | Bin 0 -> 628 bytes ...4532-af09-054c39814f92-c000.gz.parquet.crc | Bin 0 -> 696 bytes ...44a6-9deb-12e7f97895d3-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...4b82-9e15-a75b47e5f696-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc | Bin 0 -> 712 bytes ...44d4-a026-80fc1e82b653-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...4274-956e-23869a4e7662-c000.gz.parquet.crc | Bin 0 -> 684 bytes ...4775-8dba-5261c27ad67e-c000.gz.parquet.crc | Bin 0 -> 652 bytes ...452f-a40a-2dd403ac79b9-c000.gz.parquet.crc | Bin 0 -> 712 bytes ...46e3-83d9-f3f746510f64-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...43a1-a095-4dfe8ffbb896-c000.gz.parquet.crc | Bin 0 -> 700 bytes ...4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc | Bin 0 -> 704 bytes ...4f5a-bd23-72e5f76f6225-c000.gz.parquet.crc | Bin 0 -> 692 bytes ...40d6-98d2-e1869f64bef2-c000.gz.parquet.crc | Bin 0 -> 412 bytes ...4f4b-82d5-85bf626078a7-c000.gz.parquet.crc | Bin 0 -> 672 bytes ...44c7-8808-07f201d8ae97-c000.gz.parquet.crc | Bin 0 -> 636 bytes ...47f0-8afb-11ef79e699a5-c000.gz.parquet.crc | Bin 0 -> 720 bytes ...4911-9661-36dbb07821ae-c000.gz.parquet.crc | Bin 0 -> 648 bytes ...40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc | Bin 0 -> 684 bytes ...4c26-9e81-263d90950ea1-c000.gz.parquet.crc | Bin 0 -> 696 bytes ...45da-b9fe-28b4389acfdd-c000.gz.parquet.crc | Bin 0 -> 664 bytes ...4747-9399-da92c299179f-c000.gz.parquet.crc | Bin 0 -> 684 bytes ...42cb-952b-250bc66fb332-c000.gz.parquet.crc | Bin 0 -> 720 bytes ...47e5-a5f9-e0494472c448-c000.gz.parquet.crc | Bin 0 -> 700 bytes ...48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc | Bin 0 -> 704 bytes ...4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc | Bin 0 -> 636 bytes ...44d4-acbb-5a216f176ed4-c000.gz.parquet.crc | Bin 0 -> 712 bytes ...4cf1-a62b-66df910b5c0d-c000.gz.parquet.crc | Bin 0 -> 736 bytes ...4b99-bd5f-7509909cd629-c000.gz.parquet.crc | Bin 0 -> 656 bytes ...452d-878d-025d567a705b-c000.gz.parquet.crc | Bin 0 -> 724 bytes ...4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc | Bin 0 -> 660 bytes ...453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...4532-af09-054c39814f92-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...44a6-9deb-12e7f97895d3-c000.gz.parquet.crc | Bin 0 -> 736 bytes ...4b82-9e15-a75b47e5f696-c000.gz.parquet.crc | Bin 0 -> 456 bytes ...4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc | Bin 0 -> 732 bytes ...44d4-a026-80fc1e82b653-c000.gz.parquet.crc | Bin 0 -> 648 bytes ...4274-956e-23869a4e7662-c000.gz.parquet.crc | Bin 0 -> 780 bytes ...4775-8dba-5261c27ad67e-c000.gz.parquet.crc | Bin 0 -> 756 bytes ...452f-a40a-2dd403ac79b9-c000.gz.parquet.crc | Bin 0 -> 748 bytes ...46e3-83d9-f3f746510f64-c000.gz.parquet.crc | Bin 0 -> 664 bytes ...43a1-a095-4dfe8ffbb896-c000.gz.parquet.crc | Bin 0 -> 724 bytes ...4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...4f5a-bd23-72e5f76f6225-c000.gz.parquet.crc | Bin 0 -> 464 bytes ...40d6-98d2-e1869f64bef2-c000.gz.parquet.crc | Bin 0 -> 384 bytes ...4f4b-82d5-85bf626078a7-c000.gz.parquet.crc | Bin 0 -> 748 bytes ...44c7-8808-07f201d8ae97-c000.gz.parquet.crc | Bin 0 -> 708 bytes ...47f0-8afb-11ef79e699a5-c000.gz.parquet.crc | Bin 0 -> 716 bytes ...4911-9661-36dbb07821ae-c000.gz.parquet.crc | Bin 0 -> 676 bytes ...40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc | Bin 0 -> 696 bytes ...4c26-9e81-263d90950ea1-c000.gz.parquet.crc | Bin 0 -> 656 bytes ...45da-b9fe-28b4389acfdd-c000.gz.parquet.crc | Bin 0 -> 656 bytes ...4747-9399-da92c299179f-c000.gz.parquet.crc | Bin 0 -> 752 bytes ...42cb-952b-250bc66fb332-c000.gz.parquet.crc | Bin 0 -> 716 bytes ...47e5-a5f9-e0494472c448-c000.gz.parquet.crc | Bin 0 -> 764 bytes ...48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc | Bin 0 -> 744 bytes ...4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc | Bin 0 -> 692 bytes ...44d4-acbb-5a216f176ed4-c000.gz.parquet.crc | Bin 0 -> 652 bytes ...f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet.crc | Bin 14480 -> 0 bytes ...f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet.crc | Bin 14372 -> 0 bytes .../2015-trimmed.parquet/_common_metadata | Bin 2642 -> 0 bytes .../resources/2015-trimmed.parquet/_metadata | Bin 9759 -> 0 bytes ...850-4cf1-a62b-66df910b5c0d-c000.gz.parquet | Bin 0 -> 2747 bytes ...928-4b99-bd5f-7509909cd629-c000.gz.parquet | Bin 0 -> 2747 bytes ...914-452d-878d-025d567a705b-c000.gz.parquet | Bin 0 -> 2747 bytes ...f54-4ac3-9f96-ef9916a20cab-c000.gz.parquet | Bin 0 -> 2747 bytes ...7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet | Bin 0 -> 2747 bytes ...4de-4532-af09-054c39814f92-c000.gz.parquet | Bin 0 -> 2747 bytes ...e2e-44a6-9deb-12e7f97895d3-c000.gz.parquet | Bin 0 -> 2747 bytes ...951-4b82-9e15-a75b47e5f696-c000.gz.parquet | Bin 0 -> 2747 bytes ...890-4ce6-b27e-833c6ea8de80-c000.gz.parquet | Bin 0 -> 2747 bytes ...e18-44d4-a026-80fc1e82b653-c000.gz.parquet | Bin 0 -> 2747 bytes ...1df-4274-956e-23869a4e7662-c000.gz.parquet | Bin 0 -> 2747 bytes ...c53-4775-8dba-5261c27ad67e-c000.gz.parquet | Bin 0 -> 2747 bytes ...0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet | Bin 0 -> 2747 bytes ...5ab-46e3-83d9-f3f746510f64-c000.gz.parquet | Bin 0 -> 2747 bytes ...66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet | Bin 0 -> 2747 bytes ...e23-4588-bc2e-54ac07b01b5c-c000.gz.parquet | Bin 0 -> 2747 bytes ...b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet | Bin 0 -> 2747 bytes ...e40-40d6-98d2-e1869f64bef2-c000.gz.parquet | Bin 0 -> 2747 bytes ...c17-4f4b-82d5-85bf626078a7-c000.gz.parquet | Bin 0 -> 2747 bytes ...ca3-44c7-8808-07f201d8ae97-c000.gz.parquet | Bin 0 -> 2747 bytes ...64c-47f0-8afb-11ef79e699a5-c000.gz.parquet | Bin 0 -> 2747 bytes ...d06-4911-9661-36dbb07821ae-c000.gz.parquet | Bin 0 -> 2747 bytes ...f23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet | Bin 0 -> 2747 bytes ...7bd-4c26-9e81-263d90950ea1-c000.gz.parquet | Bin 0 -> 2747 bytes ...1b6-45da-b9fe-28b4389acfdd-c000.gz.parquet | Bin 0 -> 2747 bytes ...8f2-4747-9399-da92c299179f-c000.gz.parquet | Bin 0 -> 2747 bytes ...107-42cb-952b-250bc66fb332-c000.gz.parquet | Bin 0 -> 2747 bytes ...598-47e5-a5f9-e0494472c448-c000.gz.parquet | Bin 0 -> 2747 bytes ...640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet | Bin 0 -> 2747 bytes ...c32-4094-9d23-e3c6db36d2ec-c000.gz.parquet | Bin 0 -> 2747 bytes ...48d-44d4-acbb-5a216f176ed4-c000.gz.parquet | Bin 0 -> 2747 bytes ...850-4cf1-a62b-66df910b5c0d-c000.gz.parquet | Bin 0 -> 91153 bytes ...928-4b99-bd5f-7509909cd629-c000.gz.parquet | Bin 0 -> 82433 bytes ...914-452d-878d-025d567a705b-c000.gz.parquet | Bin 0 -> 90887 bytes ...f54-4ac3-9f96-ef9916a20cab-c000.gz.parquet | Bin 0 -> 82455 bytes ...7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet | Bin 0 -> 79288 bytes ...4de-4532-af09-054c39814f92-c000.gz.parquet | Bin 0 -> 87990 bytes ...e2e-44a6-9deb-12e7f97895d3-c000.gz.parquet | Bin 0 -> 89309 bytes ...951-4b82-9e15-a75b47e5f696-c000.gz.parquet | Bin 0 -> 89135 bytes ...890-4ce6-b27e-833c6ea8de80-c000.gz.parquet | Bin 0 -> 89624 bytes ...e18-44d4-a026-80fc1e82b653-c000.gz.parquet | Bin 0 -> 89130 bytes ...1df-4274-956e-23869a4e7662-c000.gz.parquet | Bin 0 -> 86058 bytes ...c53-4775-8dba-5261c27ad67e-c000.gz.parquet | Bin 0 -> 82233 bytes ...0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet | Bin 0 -> 89693 bytes ...5ab-46e3-83d9-f3f746510f64-c000.gz.parquet | Bin 0 -> 89432 bytes ...66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet | Bin 0 -> 88277 bytes ...e23-4588-bc2e-54ac07b01b5c-c000.gz.parquet | Bin 0 -> 88619 bytes ...b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet | Bin 0 -> 87277 bytes ...e40-40d6-98d2-e1869f64bef2-c000.gz.parquet | Bin 0 -> 51389 bytes ...c17-4f4b-82d5-85bf626078a7-c000.gz.parquet | Bin 0 -> 84964 bytes ...ca3-44c7-8808-07f201d8ae97-c000.gz.parquet | Bin 0 -> 80272 bytes ...64c-47f0-8afb-11ef79e699a5-c000.gz.parquet | Bin 0 -> 90960 bytes ...d06-4911-9661-36dbb07821ae-c000.gz.parquet | Bin 0 -> 81419 bytes ...f23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet | Bin 0 -> 86161 bytes ...7bd-4c26-9e81-263d90950ea1-c000.gz.parquet | Bin 0 -> 87732 bytes ...1b6-45da-b9fe-28b4389acfdd-c000.gz.parquet | Bin 0 -> 83687 bytes ...8f2-4747-9399-da92c299179f-c000.gz.parquet | Bin 0 -> 86430 bytes ...107-42cb-952b-250bc66fb332-c000.gz.parquet | Bin 0 -> 90723 bytes ...598-47e5-a5f9-e0494472c448-c000.gz.parquet | Bin 0 -> 88528 bytes ...640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet | Bin 0 -> 88603 bytes ...c32-4094-9d23-e3c6db36d2ec-c000.gz.parquet | Bin 0 -> 79976 bytes ...48d-44d4-acbb-5a216f176ed4-c000.gz.parquet | Bin 0 -> 89960 bytes ...850-4cf1-a62b-66df910b5c0d-c000.gz.parquet | Bin 0 -> 92869 bytes ...928-4b99-bd5f-7509909cd629-c000.gz.parquet | Bin 0 -> 82612 bytes ...914-452d-878d-025d567a705b-c000.gz.parquet | Bin 0 -> 91530 bytes ...f54-4ac3-9f96-ef9916a20cab-c000.gz.parquet | Bin 0 -> 83073 bytes ...7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet | Bin 0 -> 89222 bytes ...4de-4532-af09-054c39814f92-c000.gz.parquet | Bin 0 -> 89312 bytes ...e2e-44a6-9deb-12e7f97895d3-c000.gz.parquet | Bin 0 -> 93034 bytes ...951-4b82-9e15-a75b47e5f696-c000.gz.parquet | Bin 0 -> 57182 bytes ...890-4ce6-b27e-833c6ea8de80-c000.gz.parquet | Bin 0 -> 92565 bytes ...e18-44d4-a026-80fc1e82b653-c000.gz.parquet | Bin 0 -> 81519 bytes ...1df-4274-956e-23869a4e7662-c000.gz.parquet | Bin 0 -> 98361 bytes ...c53-4775-8dba-5261c27ad67e-c000.gz.parquet | Bin 0 -> 95294 bytes ...0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet | Bin 0 -> 94644 bytes ...5ab-46e3-83d9-f3f746510f64-c000.gz.parquet | Bin 0 -> 83893 bytes ...66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet | Bin 0 -> 91155 bytes ...e23-4588-bc2e-54ac07b01b5c-c000.gz.parquet | Bin 0 -> 89346 bytes ...b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet | Bin 0 -> 57968 bytes ...e40-40d6-98d2-e1869f64bef2-c000.gz.parquet | Bin 0 -> 47753 bytes ...c17-4f4b-82d5-85bf626078a7-c000.gz.parquet | Bin 0 -> 94411 bytes ...ca3-44c7-8808-07f201d8ae97-c000.gz.parquet | Bin 0 -> 89215 bytes ...64c-47f0-8afb-11ef79e699a5-c000.gz.parquet | Bin 0 -> 90258 bytes ...d06-4911-9661-36dbb07821ae-c000.gz.parquet | Bin 0 -> 85078 bytes ...f23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet | Bin 0 -> 87997 bytes ...7bd-4c26-9e81-263d90950ea1-c000.gz.parquet | Bin 0 -> 82664 bytes ...1b6-45da-b9fe-28b4389acfdd-c000.gz.parquet | Bin 0 -> 82647 bytes ...8f2-4747-9399-da92c299179f-c000.gz.parquet | Bin 0 -> 94972 bytes ...107-42cb-952b-250bc66fb332-c000.gz.parquet | Bin 0 -> 90569 bytes ...598-47e5-a5f9-e0494472c448-c000.gz.parquet | Bin 0 -> 96509 bytes ...640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet | Bin 0 -> 93778 bytes ...c32-4094-9d23-e3c6db36d2ec-c000.gz.parquet | Bin 0 -> 87074 bytes ...48d-44d4-acbb-5a216f176ed4-c000.gz.parquet | Bin 0 -> 82142 bytes ...5b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet | Bin 1852213 -> 0 bytes ...5b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet | Bin 1838525 -> 0 bytes 199 files changed, 93 insertions(+), 48 deletions(-) delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/._common_metadata.crc delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/._metadata.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00000-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet.crc delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-r-00000-fa8c25b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet.crc delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/.part-r-00001-fa8c25b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet.crc delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/_common_metadata delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/_metadata create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00000-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00005-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet create mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-00006-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-r-00000-fa8c25b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet delete mode 100644 tests/common/src/main/resources/2015-trimmed.parquet/part-r-00001-fa8c25b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet diff --git a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala index 8bb0ce4b1b..4cc9bb30ca 100644 --- a/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala +++ b/cluster/src/dunit/scala/io/snappydata/cluster/SplitSnappyClusterDUnitTest.scala @@ -931,7 +931,7 @@ object SplitSnappyClusterDUnitTest .set("snappydata.connection", connectionURL) .set("snapptdata.sql.planCaching", random.nextBoolean().toString) .set(Property.TestDisableCodeGenFlag.name, "false") - logInfo("Spark conf:" + conf.getAll.toString) + logInfo("Spark conf: " + conf.getAll.mkString(", ")) val sc = SparkContext.getOrCreate(conf) // sc.setLogLevel("DEBUG") diff --git a/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala b/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala index 40f1b9d9a8..da6300b652 100644 --- a/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala +++ b/cluster/src/dunit/scala/org/apache/spark/sql/ColumnBatchAndExternalTableDUnitTest.scala @@ -18,21 +18,22 @@ package org.apache.spark.sql import com.pivotal.gemfirexd.internal.engine.Misc -import io.snappydata.Property import io.snappydata.cluster.ClusterManagerTestBase import io.snappydata.test.dunit.{AvailablePortHelper, SerializableCallable} import io.snappydata.util.TestUtils +import io.snappydata.{Property, SnappyFunSuite} import org.scalatest.Assertions import org.apache.spark.internal.Logging import org.apache.spark.scheduler.{SparkListener, SparkListenerTaskEnd, SparkListenerTaskStart} +import org.apache.spark.sql.execution.ui.SQLExecutionUIData case class TestRecord(col1: Int, col2: Int, col3: Int) class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTestBase(s) with Assertions with Logging with SparkSupport { - private def activeExecutionIds(session: SparkSession): Set[Long] = { + private def sqlExecutionIds(session: SparkSession): Set[Long] = { session.sharedState.statusStore.executionsList().map(_.executionId).toSet } @@ -53,64 +54,61 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest import session.implicits._ - val ds = session.createDataset(sc.range(1, 101).map(i => + val ds = session.createDataset(sc.range(1, 1001).map(i => AirlineData(2015, 2, 15, 1002, i.toInt, "AA" + i))) ds.write.insertInto("airline") // ***Check for the case when all the column batches are scanned **** - var previousExecutionIds = activeExecutionIds(session) + var previousExecutionIds = sqlExecutionIds(session) val df_allColumnBatchesScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + - "from AIRLINE where ArrDelay < 101 " + + "from AIRLINE where ArrDelay < 1001 " + "group by UniqueCarrier order by arrivalDelay") - df_allColumnBatchesScan.count() + df_allColumnBatchesScan.collect() - var executionIds = activeExecutionIds(session).diff(previousExecutionIds) + var executionIds = sqlExecutionIds(session).diff(previousExecutionIds) var executionId = executionIds.head - val (scanned1, skipped1) = - findColumnBatchStats(df_allColumnBatchesScan, session, executionId) + val (scanned1, skipped1) = findColumnBatchStats(session, executionId) assert(skipped1 == 0, "All Column batches should have been scanned") assert(scanned1 > 0, "All Column batches should have been scanned") // ***Check for the case when all the column batches are skipped**** - previousExecutionIds = activeExecutionIds(session) + previousExecutionIds = sqlExecutionIds(session) val df_noColumnBatchesScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + - "from AIRLINE where ArrDelay > 101 " + + "from AIRLINE where ArrDelay > 1001 " + "group by UniqueCarrier order by arrivalDelay") - df_noColumnBatchesScan.count() + df_noColumnBatchesScan.collect() - executionIds = activeExecutionIds(session).diff(previousExecutionIds) + executionIds = sqlExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head - val (scanned2, skipped2) = - findColumnBatchStats(df_allColumnBatchesScan, session, executionId) + val (scanned2, skipped2) = findColumnBatchStats(session, executionId) assert(scanned2 == skipped2, "No Column batches should have been scanned") assert(skipped2 > 0, "No Column batches should have been scanned") // ***Check for the case when some of the column batches are scanned **** - previousExecutionIds = activeExecutionIds(session) + previousExecutionIds = sqlExecutionIds(session) val df_someColumnBatchesScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where ArrDelay < 20 " + "group by UniqueCarrier order by arrivalDelay") - df_someColumnBatchesScan.count() + df_someColumnBatchesScan.collect() - executionIds = activeExecutionIds(session).diff(previousExecutionIds) + executionIds = sqlExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head - val (scanned3, skipped3) = - findColumnBatchStats(df_allColumnBatchesScan, session, executionId) + val (scanned3, skipped3) = findColumnBatchStats(session, executionId) assert(skipped3 > 0, "Some Column batches should have been skipped") assert(scanned3 != skipped3, "Some Column batches should have been skipped - comparison") @@ -118,79 +116,86 @@ class ColumnBatchAndExternalTableDUnitTest(s: String) extends ClusterManagerTest // check for StartsWith predicate with MAX/MIN handling // first all batches chosen - previousExecutionIds = activeExecutionIds(session) + previousExecutionIds = sqlExecutionIds(session) val df_allColumnBatchesLikeScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where UniqueCarrier like 'AA%' " + "group by UniqueCarrier order by arrivalDelay") - var count = df_allColumnBatchesLikeScan.count() - assert(count == 100, s"Unexpected count = $count, expected 100") + var count = df_allColumnBatchesLikeScan.collect().length + assert(count == 1000, s"Unexpected count = $count, expected 1000") - executionIds = activeExecutionIds(session).diff(previousExecutionIds) + executionIds = sqlExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head - val (scanned4, skipped4) = - findColumnBatchStats(df_allColumnBatchesLikeScan, session, executionId) + val (scanned4, skipped4) = findColumnBatchStats(session, executionId) assert(skipped4 == 0, "No Column batches should have been skipped") assert(scanned4 > 0, "All Column batches should have been scanned") // next some batches skipped - previousExecutionIds = activeExecutionIds(session) + previousExecutionIds = sqlExecutionIds(session) val df_someColumnBatchesLikeScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where UniqueCarrier like 'AA1%' " + "group by UniqueCarrier order by arrivalDelay") - count = df_someColumnBatchesLikeScan.count() - assert(count == 12, s"Unexpected count = $count, expected 12") + count = df_someColumnBatchesLikeScan.collect().length + assert(count == 112, s"Unexpected count = $count, expected 112") - executionIds = activeExecutionIds(session).diff(previousExecutionIds) + executionIds = sqlExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head - val (scanned5, skipped5) = - findColumnBatchStats(df_someColumnBatchesLikeScan, session, executionId) + val (scanned5, skipped5) = findColumnBatchStats(session, executionId) assert(skipped5 > 0, "Some Column batches should have been skipped") assert(scanned5 != skipped5, "Some Column batches should have been skipped - comparison") // last all batches skipped - previousExecutionIds = activeExecutionIds(session) + previousExecutionIds = sqlExecutionIds(session) val df_noColumnBatchesLikeScan = session.sql( "select AVG(ArrDelay) arrivalDelay, UniqueCarrier carrier " + "from AIRLINE where UniqueCarrier like 'AA0%' " + "group by UniqueCarrier order by arrivalDelay") - count = df_noColumnBatchesLikeScan.count() + count = df_noColumnBatchesLikeScan.collect().length assert(count == 0, s"Unexpected count = $count, expected 0") - executionIds = activeExecutionIds(session).diff(previousExecutionIds) + executionIds = sqlExecutionIds(session).diff(previousExecutionIds) executionId = executionIds.head - val (scanned6, skipped6) = - findColumnBatchStats(df_noColumnBatchesLikeScan, session, executionId) + val (scanned6, skipped6) = findColumnBatchStats(session, executionId) assert(scanned6 == skipped6, "No Column batches should have been returned") assert(skipped6 > 0, "No Column batches should have been returned") } - private def findColumnBatchStats(df: DataFrame, - session: SnappySession, executionId: Long): (Long, Long) = { + private def getAccumulatorValue(execData: SQLExecutionUIData, name: String): Long = { + execData.metrics.find(_.name == name) match { + case Some(id) => execData.metricValues.get(id.accumulatorId) match { + case Some(v) => v.toLong + case _ => 0L + } + case _ => 0L + } + } - val execData = session.sharedState.statusStore.executionsList().find( - _.executionId == executionId).get - val seenId = execData.metrics.find(_.name == "column batches seen").get - val skippedId = execData.metrics.find(_.name == "column batches skipped by the predicate").get + private def findColumnBatchStats(session: SnappySession, executionId: Long): (Long, Long) = { + var execData: SQLExecutionUIData = null + SnappyFunSuite.waitForCriterion({ + execData = session.sharedState.statusStore.executionsList().find( + _.executionId == executionId).get + execData.metricValues ne null + }, s"waiting for metricValues of executionId = $executionId", 10000, 10) - (execData.metricValues.filter(_._1 == seenId).head._2.toInt, - execData.metricValues.filter(_._1 == skippedId).head._2.toInt) + (getAccumulatorValue(execData, "column batches seen"), + getAccumulatorValue(execData, "column batches skipped by the predicate")) } def testCreateColumnTablesFromOtherTables(): Unit = { diff --git a/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Column.scala b/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Column.scala index cb75bd1c26..04b4d206b1 100644 --- a/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Column.scala +++ b/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Column.scala @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + package io.snappydata.filodb import scala.concurrent.duration.Duration diff --git a/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Row.scala b/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Row.scala index e2810bb283..d5a5c39c30 100644 --- a/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Row.scala +++ b/cluster/src/test/scala/io/snappydata/filodb/FiloDBApp_Row.scala @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2017-2019 TIBCO Software Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you + * may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. See accompanying + * LICENSE file. + */ + package io.snappydata.filodb import java.sql.{DriverManager, PreparedStatement} diff --git a/core/src/main/scala/org/apache/spark/sql/internal/session.scala b/core/src/main/scala/org/apache/spark/sql/internal/session.scala index c034353461..991c0a9527 100644 --- a/core/src/main/scala/org/apache/spark/sql/internal/session.scala +++ b/core/src/main/scala/org/apache/spark/sql/internal/session.scala @@ -288,17 +288,23 @@ class SnappyConf(@transient val session: SnappySession) private[sql] def setDynamicCpusPerTask(): Unit = synchronized { if (dynamicCpusPerTask != -1) { + val numExecutors = SnappyContext.numExecutors + val totalUsableHeap = SnappyContext.foldLeftBlockIds(0L)(_ + _.usableHeapBytes) + + // skip for smart connector where there is no information of physical cores or heap + if (numExecutors == 0 || totalUsableHeap <= 0) return + val sparkCores = session.sparkContext.defaultParallelism.toDouble // calculate minimum required heap assuming a block size of 128M val minRequiredHeap = 128.0 * 1024.0 * 1024.0 * sparkCores * 1.2 - val totalUsableHeap = SnappyContext.foldLeftBlockIds(0L)(_ + _.usableHeapBytes) + // select bigger among (required heap / available) and (logical cores / physical) val cpusPerTask0 = math.max(minRequiredHeap / totalUsableHeap, sparkCores / SnappyContext.totalPhysicalCoreCount.get()) // keep a reasonable upper-limit so tasks can at least be scheduled: // used below is average logical cores / 2 val cpusPerTask = math.max(1, math.ceil(math.min(sparkCores / - (2 * SnappyContext.numExecutors), cpusPerTask0)).toInt) + (2 * numExecutors), cpusPerTask0)).toInt) setConfString(Constant.CPUS_PER_TASK_PROP, cpusPerTask.toString) dynamicCpusPerTask = cpusPerTask logDebug(s"Set dynamic ${Constant.CPUS_PER_TASK_PROP} to $cpusPerTask") diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/._common_metadata.crc b/tests/common/src/main/resources/2015-trimmed.parquet/._common_metadata.crc deleted file mode 100644 index 87f2da649da94e8a9eb539acd747dd2db6083551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 ocmYc;N@ieSU}AX6aaDDLUe0fyTQa7*jZI_kXDHv=yIwO90JXCWm;e9( diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/._metadata.crc b/tests/common/src/main/resources/2015-trimmed.parquet/._metadata.crc deleted file mode 100644 index 36d573cffd138b5b057d9700b5f427e9cd6c1fb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmV-e0H^` zG>v=xf`zyY9gp#k8fLq8w3 z<;0&&d_}D}M5k-NhdrDofb3n>W$5;~{*^@F`^l%owQPTilO0nF)8PEP?bdpkmR;o= zvaCmJa8E@g+j*(|2V}3(Oe>0#4go2s9Z1+U18l#~Fp}=xBPA0cT5fv{=x9-Q zF{lc(ZQD_FI9l1P5jlh`N|_}oF|lsIi!FY6kKL^HW~uLR?{?)b7F{-oB_w>M;HEMm z*`6<*Z?h~Q>#Bm`4~z9u#y8&M!WHs|>io7_U4xs6&VyNQ?D~d$bTkpCAV(eD%WCC!f4pf9`>Ct)} z8J;X{XU-Xcr4cLD?wRyj0&vhj$-Q5hBln!`32#q=G`ltO)dwb4>4^kg z)~Qr!44bzttfGxYZoM%m2l8VlnB8$ZNDoy=1XD{>G{hcVHM}X4cIP`psL>yb$VnHj zJdzgIF;TpIciyjSXH9wb=@%%ZXDm_tx(znNe$un(5lyzip3Yq;TV$I4wP#@@>Vwp( G_#NIIzi6TW literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..7ae4bd01c71b22128c0c7e8024cc863627bb0320 GIT binary patch literal 656 zcmV;B0&o3ea$^7h00ID=$HiNPl6*Yyefevj?cMmj+ij26t1GP@w99XIzm7qO9lN7& zxCe$QFgE6C4N5QRLj(>EJa!uBhYpv2yk>!>P{G^|i_h&U)a64&SYsTg%R>h~0nX>2uU@EuNTw@HjQS%v9$6_9zIy>-WPAORqb;wN z<_<`_O`v#**?&>IXMZZ@V93V*MO)x6_JOmfd_5kNWLTtp>|^bBT6I_2^=k_WZrZ}r zpYz;VcYGeD4~rX!5jvCPf-@y1B<#;D)gj1{F7xy0M{|Ruk&dZvprJB05B1aY?9wn@ z7aT&cR7tq|S^5!__jxhqm~IT<>P^){q|9Pb%{9^BMkWD*CZ`ioieE;RK#KtEKZ>~< z7sK7(O5UTkdtdQ^;6|)HLwc@}O9^?oESIJxJSS;Zpwf)a&Y<$ovr`O<*VMeRNlA9m q50lxLFTJJTV^s+a!Q6kH#B&1idDvb4=vgT$bS90Z78s#}-0!y;)0x$hza$^7h00IEE&=Xix$nH0b11?Zf1M)Jxx4pT779=4bW8J)L!=`+mE%3H$ zb0>c@q2u1oe!Vhuo&=>(%}Tr|oT&*n6g0>+!X^UR8g3Vb-b49IJz(&H#M%&7uGtsp zZ2tRW z4v-dvRz*Xi5`gznJ*-z^Q!itI{o4Fp-J;{Ejc|ps;D+Ha=)5UKj!ul@0S3QTZj!Xi ze(*dqpD=q>*s;T}qq=o_qwf8l;{=7BSGqPXb}KIm9kie7aow4z{+vyElw&O112)3x zjJ^&Br`Y#cLU6ZE8&^$-aqIh}HiBG8eiFaO6;21E_GMQwsG`b(6PIZD?8!?0_S@(V zxmuiTELK*BcW;MS!4=r}V2trF#iZ4L^C@dI)e=PKFKxO`$d6_ry_4L_Wrts=KzU<| z?M2liPv(+L*K#N$eV6;ofkm=Mo}WMu?7-VCr2R?k6iCQ)aa$&5sozOO!}WkaB8pNl zC*+8O?Lz9pgZxe`u0?F#&+vK4hTzL}rEKzb%MLNC#9s10Gnj6($8N!)7l+a>H)3VV z16Ib>C6(EEb{H_%E)eC?c8+ zy=Gpbee!Hd zLDk{^9$=+pAtj#8INY7n@Jk6T(aEM`4ibNaFcI_4WhoZI+(Scy_dBG3^bL}& zFL&iPDalG1OOz$4Y0=s`3mlcg7LU$hr|>e7v0e_8{;lnA{&8@D(`G62SSlQ;hIZG(;wUGY5UK{XxI80AZ)+x3B0v^*Cvc422$Xsd;31=p_mPBX_wKh z5gxj0oL9+KojTggj2?DfW1rbMThfza?Y4a$KG{W!<(v}!-cGX0I^Dw1RL(|C!{MFX z9QVTIP0nPZA`qH#IcXE}N`I#o1P<6@R(wv! zp*L9h?(hX(z&W5R#=u#e9aBRQ6HwlJWe($(!(Z+^@|*o1HtB5k^$h^Y)ebN?_6QbH(C#O5#+0jZ4ItuOWMN_CM=bClfaw=tJOgix}v2T^z9Z5T|#O1q( z{wN24*eF%zaK|@Tl#^C0K}m30uE>P`IE-JiiED)ZB6x{^cm@ecVbrDJ9G)yQ*QdvT qWC7qMCEF&$M8+AuLSj5{*FHQY=(I!H4(422R1cH9rMU%@sPc*;YeU-r literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..6d5d341302c6a15116a2f69d67c15f23599ab63b GIT binary patch literal 628 zcmV-)0*n1)a$^7h00IEU?9g?OSyDAI!=~j!3`&Qfns)6*3AB}`b5utpA@=|+_EMnZ z2C=8U%e=-2S87+&<}eGK$SULP*b+tp8P=Z5J%VXOO)fVIl^@AK=#4ZT#F~Uw~0KsJ)-3LUI#}acS zQ6vR)jYhvheSrnG-qg|$5Z5lX{bu? zQ7=U8c?r1G%sfBSzMD2niL>!SE5uf7jvFuj)(eI+f|(0t@w`h%7bknBrg*`50;5gl zFn16eO$Y)rIlX$w=&5;y&*6m2yCKhtv!cKr0gs6XCy=vQ%$j3PCu{c~eID@bX6rf3 zj0GW);4L)+JrmT?>D5?l5?X5=(ra|waS#coqMNd^+WihX3Ag4aOBf zoXdE;C~HW;5w8SEm||JM=i$xt3_GmWT&5`>$k?cv!UeY3!jYx^;uW^CwAH$r37>4r21G;I^Lv zFAr>h9U4a0uJ@Qjn^jMB!mh06w=myi)pDEIYN+QiLX~&0*IX~NU_YmY*uxu{zd3VW zwldkEwG(71ed#g!7ph*}$Yt0~rLlsm9eP+INI0iiYKB~}rR;3KDA9aRe}9>*h?-6X zJdPf`HX{U-dWp!z{2~ae2q>jI&B zgBDw#W3Cw1-6z*i4r1HhYJ$U56}uDudVE|{Qa1$96G0ZN)0uzH)^474;4E1{^WDO{6xa_O`5V& z>0?^z!UrcU>%-yJplCUCLU4sQV-RO#r-K(wY-B09J)p6(ZuO(8@S=7K#v-a|A#=oCp)y` zu9!&!6F?T=OD(ioT^N$env@YlMpYc164Y9d&XDjP9khImc)Awf0gPWb@KV7S#Q#5k zeDTMKO!wk(D{3~U)DHyPH->Row)`!LN{8@!JTLndNyBldH9sD|mf1eFw5M<=yn+Ua eBVNZ;+z^DED481Ps91_0G6r4ywm=l>WCj~JX;hp5 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..247f07f5151d0cd5e01a34f7162a8929c49a6988 GIT binary patch literal 708 zcmV;#0z3Uz$BK}AHc`Z6V{lV#(iyHou$INz+H~rFw z2>yHQlMSUERt0OnWj|>O&aheG`1q9&CTqTJIz|+X>K*S0HB_`4Jvu4KR`O?e-w-}c9IE_hVX0vMpjcJG+M0b}Nm2{FO?xii&KBk;)S5XXDbWG_^UnBG z0uktpfc3tljSVRP!}1Tx65N=W~b3JGJodzKA$?&-s*9FiooJmv0$A8DVTDI??)|mz%5A&!nDz_x~^u+H} z1Xm|yRlPK(Gk`|i^W8gFNcweak<`qr%BbOqA@*0dCJ%GIabz~0! literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..1f56aa2418d1caeb28dbd29b2953b7880f5c9f93 GIT binary patch literal 708 zcmV;#0z3Ul#s|tWnnse)^G`yB?k_o1c&EPN zUsRf@3do&^Ojmyg>mS%Ub;7;tPkzWR-?K6Z25}jmEXR%n_A2xDb-%nZ3I4>@2EYie za=^}2=F5hpBdiCsD7HE3AszNhzON6sy*t5neT(wd+8-oVO7bIYF~*U<$sQtG>8Q0d z+C+0yUCQkftVL?7#sz>sPmw;M)(DNqCN@MWi#B{`F?p??R+3kf;BmQpf5Cf3}86(tPsY*By)3ghq9kjGx{7l8Cx>*dl}bVM4$*mqP}3&85OkNHo?@sQ*vTKxh$Z}T zShU26nz8u!QbW$BIH22O@F@(-RXfoddaY0MSyuM|JRr-(Gb`mmDy)ap$pP<<1~iLF zmf=bEVA~jra4$?P=57AtO=t6>Y2PM~_lGta`9&c&h><%siSC$B83HF^hyMj{>FbA+w>BQSz z;NXBJ%6pPygyQ8-i+V{5Xw&z50F|%EZJ1)1pfVpRbIVmNCfvsV2%GrBIiOcT{j@~T q++482SI7+z`H|m3?^93fyJhISBO=u=ZCU~M{4}=7?+&1t!P@y>8GX?^%Y~`0 z1HQ44;09M;^b5jlyg{2BC@2t@053g11IFga8CG3#ud?1^(t9}jf?ZKJPM41D~j3~TT0Qeqc*M0~o9v@_i zQfJxyDZ@)CEocW#B-QpxKBpeWZdEr{@8PJEOG0IRKOlvvd%j}i;BdY)a?GHL1;a`& z`6r~3%+Pks%qEiE=`bw!YQSa1xlrzBAL=@qwsq)X7x5;KMG*?BI&3cDjS00Bj~~8; z0q4Ns7j8dHi^Eu3ng?{Gg_-WE@=dEpNF8Ffc=hEBpolRO+3Jf)Ql7U~sPziPK=+u) zD`?JpMM>hh2z6h&a(Vy`0+-arDq>iYmK+zDZg5vm07^`wEFfa692)C2Z>kK28 zBV%ZA#+oN;I}=`0+pMJ8u)3=@>x56)vJ3INw573d73{FBOxL8>%fXH< uoW*%Hs}m`}o~x4eZG;Z}D;KvIVx|OIw!)Twpu)bym96j0#ZVxIslhTdSYSi| literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..c4e4f793c8d219a6d2d8732da2f14597fee692d2 GIT binary patch literal 708 zcmV;#0z3U{EQa+WaK8F&lw1AzK^&*|cEt#?FR&&o*9XaE;HHDLRSom;$WXO+- z{{~k3!X@%QxC*%YR>-+2_b5#1$#hS!AL^QG*RVM5SSV?BKSnN^^iC6X@ ze0F~M9O^vH83o;vn=KjajRO_ST7ZMPLZrd0d|3Fq$vvQkvB}UIaHyFB`K=;@Or}pa zH`$v1hM2j?A>`v!K5DG<6v>vANq^2TP48jk6$`g9GfNyd zo#)GJkH%y7{@iL1F=*U&DWY;n@`O zsMtz{q*Rw?WZgfl&yJ|O1Wfi^TxPo&vPzeIL>XYwByA6M|3f#^-0Hauf8Wc9`^koM zk9IeU1E~QbK0hj@y-mpn%qj8r2y-#ztmqWnD8n{xi!ZWge}{ux`ERJ5#d^NQC0C+F z8+oSx9=tjEKr-Z&)Uq2b)xVDUo^Qu^KJR#`<(}o9D_UAinPh2-O1G$W@ZlP1{qSc3 zElTnXX*@A)T{s!oSCKBo#I=2_?jXh~_el3AuaHYtTS_W_*tPxLZ_rj1EC-gX5v{Q8 z@ZvFlaBOc9O%vd;IV6->gk4uB$w{rH`MAtZV?kZ^EP%Ezk^LgCtrBfsd|B3eZRXM9 q@?n}c;RzzpEioB$@i8mOm}Fq%BYUdThGi|X6yY#d93H!CK|UM!haU7yy5wm;l}WB~vh zv(6c1W{Jte08AjRmUk{hwgy)A0O2f?QTuK}+qj527&%WyK}9l!sqfpBB zwMN{*i)iB_^yOzRr~6k@Lo%B~FP9Kug;51~PFgP$lYp{JMXrs?&eiq3_%Hs}@&(z1 zJwRE=9eGO+51SDr6l^4iCNfePtopV(?I;`D`+6dSu!e$uWf)B3HF&>>(ae&HZz4nC z(vEwoiX`V79baxe=yj%zSYI#bKUfWadz|rwy5e)AZ?@U>*IWce0%zMZnB=M2QRX51 S32P5BlqC^(84P5497V`XHc!(4 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..5dfa2c6b317a3cc19a519155a336c742454f2f46 GIT binary patch literal 652 zcmV;70(1Ria$^7h00ICm!hc~li998nvTO?ZiS3LUP!}hMPj@F%uXE;TlowMy@S*-i5=RS|5EaOvyC@&g@$(FmY%mNc$zNgrcFgEkx1Je)t?iT~@F7 zjI-H@$|48<3aZwSMqww;It3cfl~E5kIE>yN+f1c>r8p-hIdo8{)%xYT`-KZppB5$g zS~LBLeEXiVw$H7(6QJ(CG+J9NS}aIht1k!YJa;JC!V&Q8vzlNpn#MWi07*tumwG{{ zI(GnZ;3lUCEVM_c?a*ztLYx~9+Y~K-NhTy`a|y^F(kGSt9#xBu>G?K$Qf9ViSFtf( z#8gnaHuyid(5nt{#T8sv$BL#O<|kq_AnK_Ow?e>wii#v!F@wx|q{tAa7w1p4W4q5- z-H1x+w`Y1Lb1+>KE}0#aDe?A|sT#GVQYhiL^8lab#OJx-Bh@gabH!6u&+@I0b-cnG z>l%D*=a6GvcWQn9xA4L(&bz`Z&zjRwr!1I(Ep64ArG{KvdPv-ltTaraFL*snEP14A mq&`Z*UdKpkQ4^smdrfuMUJnXxh)HN7(SZRRaS9Yy3XOt#^EIjf literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..67a47ef9df3bc917640aff2f6032347f3fe2d921 GIT binary patch literal 712 zcmV;(0yq6*a$^7h00IET==j*8GifA&A|eRWMk{9Ku4TjiPIOGB7T}1|Hu!{S>8#1( zGgU(unPP3{2yc`uw8AHX9@-zP`i^f7A=q_SXS{c7VDbKYoqk_Bk%D{dP0az=J`@9L zQ-Kkd5n43;LLWxDW%X$tdy83ss=Jki5dJG4KUbaF-8ehuIdQFTX$-gIQr=nnuB#N6 zPO`*V>IB+mSX-Q{A3HN}d4t7z?a)c%B!VF)A6zoZ0hy2dntnl2>%}8i0#%DwTG@@F zo7E10IGLNMXkh6G>1cf{cWEG{5VQb|;yYIo$gYo%6CcQo&9ZbJaIiaG*^CB4UL#iM z{zSeGl72*S$C3&`ZD%yzyqz)h=E|{xqBayJ$tuNB*N8QcO9DYW#aCZ%dE}@6&n3aq zkDNH>JlO?%<DDa4}9<^<*>Lg7WQ8pbUN`P0Gz%A3P`}cE84r+>I zTE(Wrqm$ijcDxcKNx-j3+%vPk+-e5K73H#;MK+!2SAgB!6H2-e1y4IznPL@VuzvrR>7+KMa9q8jS^5Me+I4L73}w$z|hLpm4OJ)F4dml$CjZ&?s@y$~gn z1cP|Hy&JyXAwdStuU;>tQdSn!FJN-B- zgw#w;-F1Me30eS0Q?q*6n&0NMRJJ$()2N=1h#0xUMLf0p9WM74Rh=VfEZs6`BhzOB z>eup~nh;;V`5(^}xrW19A<;@p{pi=-de`Iz&QE(J)fQUv3KiFv)M7>#4feD?Yt86t ztn~tl9Lz|%WYr(Qtqv=ow0;_MojY*8`;pkAx<$S{?a``^#r%6ehU=W%XsyC0c`g-V z`qOi3lSkjk!xTJ>-R?}ngmbEju%>kdH#MQB_?J&{|pILy+3#jF=iUb>@>bEY$#E zkPeW%5_!RE)gV-f);{RPCFb#(wlw!BU!S)~#WFDP8|rN6LcXMzc`y}03MAXfa#iHy znQK4R{=+)}OFsdF&RH){^w2ncQCH#r()k*hBnwm}8sXeyoYc_G!<_WWR8X(n`k1@kz` zNRNR2EAM&&6$WH|do(M~{L%^@@#*z5V8R6d^nF>HJU7#C85FRp)xM?4B#Hi3i6Rw1 z7%dURj$-mo@oB29j+SkQWORT7hQhdBo^~Upl;(JuqF>4sIVcw19W5H8N%? z{hzZf%E0dY`W^{a$^7h00IDU>Ht+52Q7lQC~pv}<0W33m=O}?8Rm|X5Qw-u_}_aW%sAO{ zVX#9W#T59s9H_!{Mr#VZA-oW(Hc?02x@P)JKI5||A4mkekmFx6Q?b)=HMh+xgagr9 zO&-O`w}|;^pTQnyYT?IAszI#1wGSx8w1a+Qli|gSzjco+qmjK;T)~!ip)KkYhKAIc zCyw=LjaIcy&t)Wzz2>qNp`6gLPA_d`=j%Ax1 zYZ@4raljNY6mO_jS(dbG$CaGSOh%Tbq3CG4%&GG?9hn4wKgn;ux<{6kD+W7vA|lD& znkHw1;%q)HvW@cVnVB(rS26bsjP2jGfDx&_oK0he_JSu_r(Sm^PMa?GELujY$06UZZHtYxN%5u=29VkDUs5!g z^9-z94Tbg$2ZuK0*(NoLmxzd8ovlJD-Uxdxm&Ze>EN{Z}C|pRYr+o~p_2K~b1L}ir zsFv~=_v10ruC1eiGe~MM<2kch;h?q#RQ2$pvFacM=3HhspW;69B8N*aLr^z#f*ZQ~ zSZ%N`#aSZNL2KF1rux1T7f8@H%Q>bPAVq)0-Pv;S()tiUq(3ugPjlDH;5ie_QOb;W i4+L%837(?T2T3Q-ZatF5hD*B}qI8DBYgBp*J`(3zA(n5OhYUFM z@=FLz@Dx!SvLWaFE(*p~Tl1QW-uCG*R*J(gL*%h_lFqlzyDD?NGJjRT2Ch|1O%!yz zbK#ikBxr)?wAe~Xkj?Nur)^8w-~p*jBUH?d2xc2L{v;;l}3lh_-2d=_tL^@vA;d{E}UGUE=WUGSRc~GN|rwpSNY@ zw;VA8l!89Nr`L!Vdu8#h!pC{(@~lg&mDxh^rWW)_^;3@FrTV_1t&)=sD}K3PgXuZ) zZ9**P)H3jgWYD}@My4h^-~whF@SGy3|KUGn*T0F(PbLWecSzLNs2$k z)aP8NSVd!tlpQ|%J(Fjd@62d0G+LrpnB#gZ%rNR_1&*pkQ(+rYieE%z-Q!`-!D0Kt ziU%aOeh74TGSGLq(n_yPGP^YXPqg*9u;H22>_alHe(piRh%p4T)Zk_Z*Et} zV>UU-ZkK_dMAyV0l@9Mh{g$ol9`VpE2CC(64FMmSG+Hw=nFY$1ZB0f-x my;h!lq9yuLak2!&7?GpbrwvzA*X0xBKTuvzdi%&5B}6}a=wYbwQ|mPrR>1r5mQ_-)LcQEtTtw>R)zYGs+mMq4O`H$@EBr@T)?X9 zHG%QR>#TlA|!DiYDW9|Y`d3v zN*oYe@W6WTA0mcw8r*S=#&-ZbT}G&EaPVq~*UTX_G-1#g?OUEHT_3!JAbLoiEaS^M zl&2k{=H@2$B~@LRla(`SEy1@faNcS!LLT2o0@<1|>A0@S1Su3y{9uo07ryLw=GHPJ z;0Qfm+8V>e7rA5RtyJjHM8N{LDDGk5Z!a1`1hXRw`w+9YdVQ|zd)H;eu6wrzW(H@?_dCI4p>k95IiWal6I}7V0S9DO{@`xjtBx#)zhIkv%|7u!_9JR6C&jP ag-ad8ole{^wrA5U&x$1JcbP`%F5FQ&PE~#Y literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..304a51bbff58c9aa9497c86e51b01f2b1533b755 GIT binary patch literal 412 zcmV;N0b~ASa$^7h00IE>&0Te}t~@Y}?E|M@=qk7SpEmn{`obO{Sc@oxuVa-ix2UMR zwh`DUT*HbW1I>%Xm!CQMm$P}Tz~^6BT%!eG!l5aQj4dw6njrw*)AAa`ffgTNBlG*@ zrUX(BElP3cc#PHYrS?Cn{g+r&{rSM5&<~wF1QxqR)~`4@{l6KZlJRuPovUPB1njpl z?~nEer@)lS7;{%9i<82K}N5rcv_(*{cx&Y?&A% zNy>5pM@zYG G;!AF?GS8?0 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..51b840db5e1d69bb09ec85f841f545870825a6ed GIT binary patch literal 672 zcmV;R0$=@Oa$^7h00ICd4G)Wg8z+!cgtId;iH!3=J?VDH#F^~7&qpwa0K)PA|yr2-J^AWc@sxF9t8UNd{aujPRJP3ledV-q+FtI1iUdLLO+b85HTvC+OAUbzkHH!6k3*qqrw{( z&LNfKl0SCW7ixAoorMA#9^wXDtGe=!0S8mHmNvaW*2SnYv9iPOdfilHTko?g4!lW5 zAGK3S&Dkyl9YZ!(DNTluMJR)N5>=(_y0&g~Jn&gSmFx8iVs+3_tOY+7D7xN=gX!~S z=mrA46Hc9_G4GSMfU84BNl`#N#jSli8wUxT8%IKt`30vV7w=r}m)|Ug&g6zMXY@L> zvu_3860!g0*TKn*eB!31uB*-N`wranfWrh>1vpt+mFs5tDvK`dJ9+ktZ8_}gO{=29 zSsaKtw|ekO??T-%=J8L<${O-q{pfrQ}oVU66-yx6sS<+iq*^iPQPTER(-o!v?} z7{ot5fudkJu)1npHW?PLh<;jv=;f9Ge&Pxk zWV4~}Qv}q266PX8i&J!~Spu-2g3Lt`_q~#D#@S781c_i@1BuhLPimE*(x$BW)Ynl* z1aK8*0)BIdMX0`2s(BkM_C*z)jPJ&#EluZtM}(`3zMN~Pc_}HF|N8qAmjJ2{0r>Ab GO#?P;K}rDt literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..36a0d79b6051da5f6982b8681409b1f0a5120b1c GIT binary patch literal 636 zcmV-?0)zcya$^7h00IE_rM^*~n3RD@I9ir#v0MWlG{F;kf>a>%?B!y92gmiPvJW(% zdK(5HN;{iiYJ?5t(q{)|9ouHN`ddaM$thK73*=EbQX0Vw3rOyZ^xTv2P)|3X@h8rn zY=R~Nh)l<81rjnv!#G3dej1t7u@!GL9#If7O}`!#+~bU@X8ay+$~ls|kk@^10$B?2 z+)-)m&_exTA9V6Ouk6zj8%}^PpIfz_oHFz-db?7x7;~A~_T>=Onke$P&|kL7UB}BS zKmW+4d}S)F{tM?KB8X)Gww4JL*xs^NbW_L&0cxYfA1OLu^YTqLi)yrAWkces9h?Nuk|?St9CDK@#nMr6 zZmqm;?d)~UKq)BS?Ca1MO&Wbw4ng3h<^a+3qDLt?`gH}Aw6$7gJwGvMuI{(6HRKf2Lm)Qr<=tE^0Kx9`rWKvPa?E0p1G9O z9c=*a{b7cwa6Lxxtm$JEP5r!S1}G|`Dz{Yu3z6;?th3w@cnQ{j$9_F=;HAnN=$6ws zYz1$)EbcpZ3O&sG9YPh7bO)V;Ouud{;^UZOb2h~hmy~OHkYrgo^XqAu=!EwHAVe}9 zGT_YrLXKiZ^r|;829vR-+Z3VZ(qJjzc@xq&*2GFvsHfv8O8{*z0x$hza$^7h00ICc`sXg$>w8&4LFI5{S#Ioz&}FYScou)v_IK%}C1}LQ4Or2_ zaO#Ha?}`qFHD>1~-KNROlCZG^cn%F6ceafl}cXU?t3^qx{#KX-4*3SVjHL z4M?U89rRu{&$g0(8RUwA%#WD2R?Q$Euj;-uUvHE{4(z3=S9v_3b9!ND@Sp`NjIRAT zb_kK>EtXi#M6o;KFWB0LGcqeDo3zpBID-XA<$|Us=e!+EdEw z*8J_WxQf2CnH??G^E&&qO4 zySRZ8^aKjdL1%m)A@9$6T_p5B)`5DZd>783e>-eLWw} zyS8Gj@Fp}6wj%6%n~9s_WEJp;{>jBWb>?|YgQ69NHGC<&J%asXZreS-T(_}i*ofda zldfMCywhg%`Gr?Q`@fA0@H)>2iI}*J$zPtGneLn>rpqE8&9(5X655Q!EH$-iHblpp6zG2f_MrJ-?FXz_r5Ei8 ztn?_`<>6)ef(GqGZ9f^?TB1}LxJe~Q0caEIiYbDc;@eG=*$r4H<{CQd8u&IFr zP_Ms3bhMHA0!~TYbbP~oLTxoN?kMc~`x1<>%fR_##VXy@2`IHb=MC{BwOxFm%hKyO C>T%lu literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..791435df6ab9bdd14e354db7943a8f0601f3d20d GIT binary patch literal 648 zcmV;30(bpma$^7h00IC9BZdF!_ruL}oYT5ffxm$pk@bS^tFQ;>uiLey4mn}CnZ;R4)wLg^cU0Diy*R)b|$WDRDPm@ zLX&odqADgFoAMQ-O-lGKU(;U-@B#r*GFvnD-_2lSjpms8_X$E&mdxf-`y;fqTEKz| zdCM5b3jCb*)Vj@V`?=|GIhZxGZpn&{%bq@jwu|`{2JKONG{OiXWuLn8bAbYcLdUr^ z4gZqw0pf&vJY;Qf}tc7QVK{n&eW-GA%UICuFPRhGM*=o9#vDTYy&(@kGD)b=A9J=SPT*?S`i1Z23^ zKlf4Vie~<~i>BRp+}MAJ8G{Q`)!_DWAxPw?_Z_75J(!B@eP`r48$EG5uPEW?EadvN zCotKWkG<~n5JwRFm%ZUb9T3>$^b{{I<%hr(SjWgGi_{%`+Y)X^!YoCrk^ z8Q?-mXRYXvPOHZ-|Gr`dq;}&$>XuazG@zA`*8`>{sSg;u7uK|{BMo;nB$9oYZp8cm z${cyEJyE#I?#@gXm?nl~+!G3EG)Ao%ORY+B8N@D?;L25?JsymYV6C9@UsIiT1>diX iHS0C1|z)93}h z{;v}s-QP=%$phhugO#yZh$I@)S&lK~i{~BWn?JCYm$6`@NC9cD%uG?=^EX=`1w9;R zMTCGC6vy~1!ejI8w4VB^b_gkbFfa#=cJ7~5pd>HL?Rxd9$%UP9C*^`hUpTv)`Dw9jZAE3b0Fcf;qvZp&oRpWEk&oyoa)8s*IEi&x^hwvN; zfYwu0jMNE5x~Q1>*xIHi$Dk^>dU`WK!8Z~03c~L3mXIh=oX-~E7A}JEH3|R0RQ;EX zNzNN=v-`nG9OA1IZ*VUw9>Wd9XK#jU|35pJD)J}8*T*5xi}Q7ywBq7@oOaMj>q(-0 SO$JXPx50Ga^v^|wS8pcO;ZKzS literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..4304a7916a81fa7e38cb421cdc86cef4eb779e89 GIT binary patch literal 696 zcmV;p0!RI0a$^7h00IEUXn#_7JW8sf8-N%lgFAeuJNPC_Jwo>=OqWg#cp>PEe5ZQX z`~Qr=M{3;A@vQ5P;IVX4&wr-Jb$q@qHgpfL{x5`mW2|~}bFRzKB@+563UO+o55Xj8 zR(kI`a*v$m9(u+0W-wk>=9Ge$0#1kD6-@!-=pK4ghFQM{vrTcl0EAE^DTC}dLm8NC z0|kY6c!%;Ox6VF@n*``UNWR)jz1gJ_J`E)*Qx3-%6^`^l*58UzO#FFFQ^bB2NgTa~ zCzba~ZauPpjkS{u6qrmCx6x*GDXlQ`Q;?m?zpoAK?Q?d(XAAi+7a|qc8QI0^y|=U# zL=B-1j!QsP2CYbV?;uUab9Mdnh3WSh#I^wOH7=%0rl;fIFb=5wOyZSMPLz1X4~EK` zl-qO#?C;E7L4qC2awG_NEXx{r6r(g}U@NnIc48Rhu1Wo&4dnwpH5=dPAHnL%r4tY) z-6YG|Dx|m!j)Y?O?Lu&*ntmmchBm0Z#;Ifex?|pcs7lQx+DSnKUhhI((R{?9>D)iF zHy&N>2+A77S7It8Q}sJ`hbb*BIR?@qL<(3K`2GYD+UtK-%d1U3Y(t%tid6O_$l@9H zYmGvIuusV_r#s0EjviWd`o81E)(w2=-OI^})8ei78WCffsBFnGPXP}=7H`-nI|UY* ziwqg@hWezOsR*2e*N6}sIJ}NbY>Q%E_L1Hb#>n+i*xoS-lJ9w1Ya{OGQ1M6Cez|zQ zxV?>~_#==Sp)kuuo`^aW(O;Ma3r>`G(Vr$eP9OfOLU*jHcTz+>*GR!X4Ji{qi!$EY z+5Eb#s;znrAB-0!HG1a`C;w*dXBTf~Pl5c9{rX2f{$xKnv^%4zPkDL}?H&sv%aLr; e;LGMZSR08GGl=(&|Tu`O} literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..c4b7187380b7c962c2898c180874c46ef57cfe59 GIT binary patch literal 664 zcmV;J0%!eWa$^7h00IDVJfa;ruNgmAzcrkz|F*^e3<*g=su$AKveMW-YlrcTCwM+4WVvZbWy5C7b_caljyXdBj=1D;KVUI^`HVrt9{1Yz~*(~ zLeCVs0M@Sfs$}-HkSf$cz8=7&_`5}nl!w(=yNi>s$5Oj#g0mS9OhPrg>I7<;oBt%o z{thhwgUW4?!wEJkvB`^f+11nM!L90jNNGQnTPi+_c+XWVISWEWB$ZXg{PVCu1?hI#$h>M0L| z@XoENAfQBI*JfrgTi(-9fM9sGf#W>up#S;Ll98(-ysj-lsbItaM~edx%00HY+fErL7l zbTX7K+xXU!cTrFeJ73QXUtDCwo7f+Yj{xuirUY2{zYgzL8y{oUhQfL2;i!j=c!yad z<^x*l^=Th&(uClP6|>EQlz1#xK7OoFGA<#*Q0$SLs&`l&E)weCQaHL}U7}rGTOmM1 ydtP;Ar*GQ_-g_rTy(sUr)YZx_>t&1K`}y8Ds^@V5Fy3XCX@N!&7W#Uduugfw#z!>( literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..f2fd1c4ed8fb0f993c43ab6721de7d5c8ab38c40 GIT binary patch literal 684 zcmV;d0#p5Ca$^7h00IC2=MEd_TiNu0&lNpplrX4lng&AA401Kxur=X9i+mGf0XH70 zF_EKI+;$V2L|@o(L@cbCEG4t66eEhhxPHCaT!C@f!UAl$7d*pv?D+U?3~rlL?o}dj z!Fr?B8^(=52Q)ryoJ!&^@$ptgLof8OlXnYn4-Zw>!I22^)Cxa6wN4)61ILL<8o8eB zUCS8!>(CC69JXD0%o*isT&(3F+@O9hjHgxLvdEdmR#m_tfiBbFAPTdq)!#i)mCEp?6~ayBU2w5tJ=uP7 zA+8w7S15)HA|^bEJ6bZ8J~$?+ZdGK+4|RSTPl0_zvS zH1LL$86REwmVB-NflN?38$Hn`TR@>sml}e@&^%Hqy7!HFcDN1WVc=7By|U6vrMvj> z3OY<7ye3C%$Ufcp9!w8*U2sV%4O}ouR>VY0GGbGMAp}6bXD+nNCO&45{x$s8#0Q)H z4tiV^5bjE&rBDA&U%OP3co!jX#buYUQ3F<^F@%~T=c1s0+0F?OPf*_W1ggqa?qY^kOB}Q8I>0<(IrC%F2|LUlm`F9`B&+3C+hAa z8x1TMpZOqyo8Zb81tlGCdp76e1{3QDyi8X4(k#HoeXyr<{yZxYVea#IZJ}NE1eUr} S;yw|w4wN>TR*_u7=*rAz3O`u@ literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..5592ab71eee067b107b6456a1422a673e8928ec6 GIT binary patch literal 720 zcmV;>0x$hza$^7h00ICxMApLM-cdHat357x+wu*UUf2=5v@popKeEU?}jP) zlzz!E72L<7kHEH73b! zy}h}crkGOm^oY5UY{EY=bu82;Ej@NFQ^SN6DvsC1&t9bvsXCpsfPW=mcRDnz!DU zE!p`Mj->d{qetYQ=7e22vGpsO2yQs?kb(D+Ep2kP)Tnqe?auHR5r|bd89T`z$hgh#e*>kHPX@YtWOTbQLWZqOFem!cW@USC)E;qHW)bG^J8sDi^kg-t3Dk6p2Q*v#~#+F&dXmbk+j_uv^0&5FF=s3GLr CRb<@& literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..1e197331c43ff0d6f8298a4a8c2756729a201b5d GIT binary patch literal 700 zcmV;t0z>^{a$^7h00IClA>~L5ifQ3mG{y?qQI&;oCNpjhE`Su3L$q)3AFB;yB*t3F zJlHX8i}3MbqumVQ;ATg?c6Go~HTZ;ivB2jQoBe#9rcJ{+U{klihO%^T7hPVUy{%-3 zKO**{ihfIvJ*E1`Uqh7_r@*}B?Bti4%wP)&p}(7QIUVRhK{U+wuV=eE>4}>{cyJ4p zfXQ>vB!HS?EHMvQOKDR#(m^6&z0f%#3eXNwCifhQhYJ#rkqh1|x9;vtr@{d`X3{2} z2ZWNH37VTb5{JR6;QhI*?1d_~QILu$B>d3Ky>}d_3r5vs`z$3m`5O^N@t+i$p22{Hdz83a8;4sE2I%lJn{#D)|A1Qx0`>5*44Ny_1j4BsOTJ{4N||kMvGIkt6*r7{A7K zn3(+%fb)KsioS0iznL{AvghBT?KMk0NB^NSyJc46{t9Qct=ZI$6r%H7I literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..166f7e10cd35c9bec53b853513a8ef1808d386b9 GIT binary patch literal 704 zcmV;x0zds@a$^7h00IE3+u6By~$HthZ9LlTgwyn&Lj*OY91^czQ zo?(LbU&x1q$lIzufpds`S|1vd@rFL@vO0#A51Wae-ro}7Oi*N%`{#W5c9ij!ST*_T zD`5c?NwW?+f=qno9+#PMM$RN%*?|CUC>iRMa-Di zP}}<MnYX4ps$+V!XW~wkM&U==%3OsN0U;J95m8ErCrh#gP zAywyZAOA&Wpp11q3ACfEdlC=5xQSiy&enOFw2nr$k65pE$&mTjtuw|R<_Dhj7CqN% z+!>;c7q|LDFXC{07H2b^GdDq+c|fk`y>W$T5zA!!T48UY$hbd{uI7YXQQ6{qr|2auR&YL`Z6$_)`=&Esf^RQg@h3 znA?X1#eZ`C?ByTuQeV0N--vFCyE_p094B5~+#&%m8URFIB*wgq;N$cBmy@CiQE9j) z=p_26PsDfD?W>@E&+HZJjPmU_kCjS;@(g3ZgWe+ZkI7f9j0^3HWvx8zp^fJn`XH1M zRi_qR;!4MjR%ImTItu0#I2YF2AGo86+JjI1@#q$mf z%D6uqfua2OV2q$z;MPli@qrGCGhzcI`uIk{D@=)6swB-1XHTn7F$xc&jx24A^C)7jjLOfZoDAQ3 zY0W45P-qU(6*3-Wq<+JQM<^$qws~J)=UlzYnf`zL&L+0-@u>1und$jMP4C3JNPAgIG+tlsL30Wu zD4Erm{CFW|I%`pm))2u~*~_EGhSMhCImYePk8sc|<)O;lCbp3*9-pfA&y%7k5q9eQ56q WpR)VgP!RDihmkG!>_J0Lqq24*Av?VQ literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00005-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..a7faa52d845b8cfd5b90afd0103d1fae3d53c2c8 GIT binary patch literal 712 zcmV;(0yq6*a$^7h00ICQl>?qf6u`6*v|7Eu9)plyNS;MDxDJVGOC6_^f?#HAgQY97 zYL=r3WS*ejSU~a0#U|H4Am=mXKO#!JHSFF_;IF_goP{<3YCC=P*CG*_HiP~jly|_4 zBR0dbTWW!=lrw%}quD5d3e<*|40RmF zQ%bmkF4kor!&1bZisnE)+VuHgraXLdPmhu?7wKMW@<5x#hPqZWc(PPe!ARPH>BfCI z#lwH5Hp@3{p;H_;m!${UeLYbp`^$X%WTR_Fm)5J-mD+|rat}=N7%(1Cqc`Aq_?Xk7 zbtpWIkwZscA~|QwFx*&ku!uH z`|wnhSVaxRRu=i$q7`e?uyyQ)3%qKngA>hww@V;LI}hWT1TJ@L?~(VhlGO+YBM?D%dbzSjbN`@IF6h zjqni$|CaViMetVJrhdq$H8l0{s@M+mD-i6k4=KX&=+F1cNl=M?-2Z|3?AG#yWFht) zYsckvz-+?e@5(*RTkg#`7dJiHni-Y_2Y^0RI} z$xnlE5lXXNd!=%8NK9 zk|15}(rIC_l2@``&{eKkpa=&Ho}>w;9x}}6Kn0Zz(rGWUpOh`bYQS{|-sU}`DlMIp z@NXfi)S_VCB)GQIYXVAt7#>UO2(C~ZI6q}#ZtoE>E2%$9X9Rjj{`dDVdGH|IFSdC} zyh6q=$HK2JS4Q@PtSSV|lP*ydW{zg^~q!jay8zS`9kDdR&te z*~?AC@mbd4_7syNFsd7+#+n6a^f$q*DTjvWSO*_o%qopmjwqabWpfu!RmLDW0Uvu; z#-*)AUy$C00~5b`8RZt9S_oR5i5amPcdG6W0Q;o>AqC`R;|f*2YgaaGx}r zOF!w5b5pAf#()q9iV*4Z!9$m2x&9m1>^Vxx{frD8jF~ehYpnAYcPHne?#ZcY$`SeS zqyR%}K#_;?TtYE)MSv6WmGY>9TugDj6Ns9|fWW2{uWlCsDR*?YOI_YJ!|wsy@k!fZ SU{G&J1>o~N5G8(z$;ZWv3};aQ literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..222ca894e8d612e5638f1395080ff2a6a7e34cb2 GIT binary patch literal 656 zcmV;B0&o3ea$^7h00ICNwqa?!E3mtp<6RMMl2TBk0bGYYK5pGoJ6(bG-;QO?#SeA;AfF#BZbi+MSFW$Ze~U4YJDOc;yN! z*IHR4?-~NCx*hlzik?Qx1weC^ct5WaxPQYdD|3`AHoKy5m~ZjB5#&xJ>nJS*(wO$dydpmTnBsjx}RO2mG0~&uLH9k_)oV=+{6fWfX)o zs{H@fhmPJiWw2^z_L#cJ_Nj04cMDqQ@wtItXKLavM!s>w9c&+z4!avL-M1hevW|aA z)QB7-PjQy-IlGVgbJcU_qMM7g+Bs0wHIqW**2$LeFQOLeLWZ5zpj{RQHuO)kNDbK? qMMxUys)f=ooFh>kft!qC)sOjLP3P= z)A9ie9_Khu52)6lc9NE6Wo(UFV^gFp<(8JTaqVNOZoHPFvYntbb)?723`{qabN@0i zbYU59Mxapl8Y*vmghF88 z|4+mEaPk)xM!I?O$V(ZhmuyOU!~3y97cTdp!SWYSfDCR|ZpV4Uq__+O=)UVF+NmXv zwlC8Gjj16&>jc;_lxx%ZC}RGfus0<^J4Gz8!s@!ze6q%Xya0SFMhQB|? zXg0d=AoqgsUbqYn6;fU#j?!NEWjas<{5^x)OssF`=eC&3c*kckAy)8}#-Ku(=8hsP zKY2g9a;~wDPMiek1V9%K3i44H1aLKI(I2Vencp=;mraLe6dK$ocK$p6gU$mB0E$gq zeaXfE`*o)gtp?uUQWg~;TYE>+lTtYnb#YIcCZi?=SX3=wSlJ3_v`=G(VJN<}g?|tA zs|ydSll5>sUZ<-GuP4V<(m&XeGX|)d%A+Vm`kRr!;)7NZXx{PE`szEjQ3IAVC%V5* zokf8VVXh9b?{_+yjhqoeI*eNlYki_dGCZ$4t1GQyMQ18>n?%iRtep$CFyb5rZoP8@ zt->uBdz+F^iupwk;wsBifX418Fes{%Qc>__0j)vt@^GmA$1yKaNpeoZ;LMfUmS$g4 zwf)^`pNq8&nBlHsAiR(Gb7^XeJ_@cwwuh&zXLuh1$Zq7J`${pOIT?(;u;|FJ3URM< zeP1swAei-R1y?_mH9eeQC(Y0w8(C$OfFz<+G3Pa#LCo?tO~P3IdkJ@BOt*%#anBy? GMiQ+ED_Z^l literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..cd52eb55ff8cf5253d409c1a69f23af8e04e3b24 GIT binary patch literal 660 zcmV;F0&D$aa$^7h00ICX>0x(RcjL9xzwI9uYpN0k=!TN`cNkiV`Bt`~YPc%~71q9g z|KZrL&?HUG=84yo`1Wq$;eJeeeDc`mni6?t!hotZ0WViUiiX~7b1u9T7=xkPp+In} zJ}Aicd=AwuV9hXgg#R(?pVvfCqXT79z_f*b)N(ttZ%I8l;&u*Ux+du(>3Q9Y=IrTc(3PlX6Gf-7PbgjWNOK7=F9)EyS=zFdH&N_jr0wOKE+Jo_9Sr{O%He(b;(TxUX4e@>e?SA&%I$> zg8rFS#+NJ+m8ZV4^!=1{DzCh9OFf^uKAlJojzH+=fEn(>1@E9rpcmYtN**Wz>D)&2 zT*U>SPY4_vjZ&o3Zyq>$Nj97^p{Jj?`YOk4;CL z{BS8$RXKVT1dgZ6_`h-j-NS2Pv=U6&tg{dRl#da9z1eVniuhx3%Kd)TVP1rQzOW8$fQg9?khZ3`q|7Q3b17gGUquK2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..91e058d95df26da15986a773da402df22f651006 GIT binary patch literal 708 zcmV;#0z3UD2~7a^Z=K&GDqAge2~Q+anAU(6B+69aa$PKXFTnH-sAjC z1P&gqwwZEM7jsx&4NwGt2NgXf{Pc;#<@qw?e?PMAVqn#^bjt%N2+LKfG=-fWpeQk+ ze7wmQ$;R|Vl4fk``qHs;R1{ozzyXqz|nxV=c4^E*=!<QY4AI&9!WZOUja5P7b=)c!tdwntL`Md=Sd|qgy%a%aB<6^dp+Hk|=6~KvC>% zOYDdDt!TsBB+&SYI*ZCL?)}v_zD{`q`G{0$mA!}|6josD+lc8xnMU(+EUD!ITgT}U z3W#ZUg6mF6C}P!`@jHM(xnz!;OL}~p%p%!JBsc%}?x9%Q-VN|}@BC6S3)ySJgMBlF zTx@R0D&2h3P*QKIZGtMfXTo6*v8zz#8l#YLlNmAXw@cJR7oQ!TlmS0(oegjEz+7pHX+2@s8|zxPwQ`JhlV?_ q+AjwBLK3Z7- literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..b0d6da9ac5470e813c47351700f7251d5b984580 GIT binary patch literal 708 zcmV;#0z3UF3gdP4`t{GkD z)5Y?MP2KRuLq|fg{s#}yHu4}>HLpE0gu`WKKC8DZYl6v3-#=T7n;>FGiSoHC0wC6h zuiJWd_>*I_cFUpSTVzjd1c-ei%&xrnvcE^82t{)_rDU)cVm9}DO@MquqE?cOnw({s|-eC1pc3 zz9)Z5D%DThhfwgdsZ@1@ z(3vkdz>tQyil(to{jS(Fvvi0A(+X)RVQMyw>Onks%>mIXpNVGoE;s@@yXejQYaGdG zoef^Ot8pbGZA{w5u^o{RS~%z1{t@@%K9u<ChX3dg^$wCn(-&w-| literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..ad6676d3871fc8a6e56b1ecddc5d40c19c8dbd1e GIT binary patch literal 736 zcmV<60w4Wja$^7h00ICM9RgV?kc{Z)ab&qlQP-hlVvU`A=SF88uvesVUQ=oXPX-eM z<$aMduruBUJ11MD`mULv21vjB{Fl?@?Fml7EVN;d3=lx>&s6r^kMCnAz%_?iC;F8$ zhFy!TcGWP1@4EIl)2@tHV830{_fVxY!hrSUSAB=@CDtISi&#}VEA=hv|#s{}B4V*fxNiRSDLv*0hyR&(J)~~^c z?N^#o0KN?gE_cO4ex1Bq=1_fpT%|R1+_KcE1Je~1z$G6~zpiAK_EF~mE!AJSqvssw zp;IZ2OLfT>S~-^VGsj0W+>bll;WQ(Jgquv%zT66QzDeS*8{$E_-3gwXIl;TuLWI5F zQzI6r4?Z_Wf)5*BCTuj{LXCxQQF_zLW%^I|vx@CDkN~om4dnA-HXCx-Q@Ej2(s9u6 zbh#9D!U*%W3KtP%Q$G$i+&qoC;4E}3itfs8u&xW@Kkw74*Y(qAepzDgkgGS&i_hQrsz?>hEpCba3s;`ZH(Bi#q?-59EHF#HyL84EFh yg0j%t7$8^zMzYLlx2NoeZ)1uhr#mLUC_)4~lz)pt_Bw6kYr7B{t@DBrnF2G@Hri4E literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..ff0c148f5341db54b1bcc54ed28ef4436ce11d56 GIT binary patch literal 732 zcmV<20weuna$^7h00ID=9Kwxv@=ox+kY7>;B+ajqnUZCAiexdfM+^Bvs)>70e!m%1 zzhKK){bO@LbuB!P*HVH-UB&w{doxY(CbYgOqCW{HTrZ4pDxez71$z_ZD%-jMLVK2p zId`2fIFIvNvjDJouR}s=j0GW-V(VAz5Wxdc%&{#Jgq|B1f3{1zF4}#jL+nim>0}O4 zNxzT)e5?`&9&F-=gdt1V7jHe7CUqoL_+H1@%jkpHa*N^NL9*Q?G*uapnuY)*1(ft> z29POHkGZv@_sGb({2e#EFJ_4J_6><_X`QgYap@|EB=x%ADM((kk=1f0Pas&sW&@92 zw4+jGXUOld^+{&9C`FoJ8r14|w62wMYD6Bb`hN*gbop83Qpu8g>uOWHEL?O~m))u` ztNYQf5%(y;Ia}aY!0A!5!U`B~W+zuv0ied^{TaE2MSw$RbYQU3$@j>WUTR1Qx+eIzMww%@*thK84O{Gxq6Q@q;|@vPk`}^JUG=>ZpT9Jx zxT!_@_2_YsUN#icx@qY^b$F=4eb{C6XSx`78WqPh@&?6N|7eFW#Q-Q`~b9SQU;2EWaQ>mDe5l z&yIfieU$SplHfm+DL`O-y!8dz;*}d$@Q$2azfINH7Z#z_Iru1P$<>VJbedb4pd)1b z3!{Dv#hz4d>)SL1TLtRe3;?{)1H-ra!gE{Z*l#n-n-Vpw zosh=D8U#-gm`~(M1XXo9pdXytPwrWoXp^_T=9OIq848uz4)KGdwbY zp@EDLrxPh#laBy8sFJGGFT{jLqhr@))dw@yq(mpgd7g@09+~e0z*Gz4xJm>agni@R zKsB-~2bYSe5h6wNuG<5bRBlTx=rh3tGWJg|Ml=XKlT6L?5T1a0JIBBKgxs1uj+ksJ z05SOi0IJ2r=-g13z1x{$k(PnE^1e*6XqN!+K-a24{SMLGTXkn@N!g25nJ8Dj2i@r% zh<5{HOGZh?CT2wRZD-3e)o~=4Pq)&t@)CK0(np!rGG5|yS48zC!Ry--69w3n{d6E( z){hxPs3j|+v)ZM_Eq@5T2qaW9JaI6m6`H~`sl<)v!08XbD3n%i_MJ1vI{={2$(@^v{->NvZ?{BFGgr*P)L3xOYH}IohiKLgiqw|_`WVBu7EEeGj zy2He}Ez41SgXWk-xfHX@$Kgpu@smE7TA}jIMJ>8|afAJrfkF-Ds55@dvI+DfKa=J+ z6%OI^)sUNFtTgLf7G!~Rv`d!g-ojB3;*E^k$N6i&%6lurGpG!3$fN|25faI8!WOL1 zr#|J((HiLMdwmk4T@8K^mnF7Z@og*XMvzi82{>BC5@Y}R*!A`Y@h!y@(yU+x2iew| zbg&mFs~c-=gvQ^Mo|+DYSF}O5dz{qlH|%PVv15I%`imq}KEusY7PBy^i2%sZDVrH8 ijzeTx3-jpmEU)4KE(PAOS%Vlu^f&85esRFm#8K1M*g+To literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..f524dd53df3fcdedcf5c908cf35071e483db7b5c GIT binary patch literal 780 zcmV+n1M~c2a$^7h00ID@UQWm!U)g6|gdo+KcR9W;J1ttBZAbrE-9ukoA4!oBA4RYO zfk|)U%xa=u{DUHz?2~0x^4{ZI?Pz$1I~kaRjE$%Gi3aK{G3(#0&Y8T1`%gdRmgi^l zt1n<%=p%d`S>x>=DfD7dT*z)GBOD!5Nfwd|AZa+}7R)8V&eBSX@!LExVk&+zqUPS~ zHfmy;7(5E7nilFotaVu7B$B2Y+W6A?Yb*d^^&BVH#h#AbexXSH*{FzvxgDe*CKj=# zccmBaE^RGC>pyeXus5DYW(C9BAPc4@_0fIU%$6pwZh9f8IGl7b394~LzZBvZhhm*} z4aM~8Ukl?CMCSyh?zdj<(dLa{x6vQjHB(s$J$N(;|0JE+R8ye_5zC`N^QvH(XJiME zUnMv@zm-KrA_+3>Ui|bnu;D<}AC5}hgi}w@J}VbuUv=&CdK9_zLn5N9>klt z+IE5kw1)jLe-(|sBw=FWN2z@yA_(=;@Gvti>!97DaA2xhJ@G&3qXxNkl9;LKe<1em zb;PLMO!`a)UP!C}NmitNY!@DcE1`g3&8y`O(qyU8I=cyaZfW{j zD$HoSXAl)WR>sKs2O+rN5V5n)Wn;uvCQni2B!2JW`w5{Q?edLz2bp<|okKmW!i zd~z_`A$91*VgkC@S96Q3sJMwb;5VSOxMCEz~2W-nGbd8aa@B2~aPv_jshH+sjoPZD*3a#3bjAKV?CroI?yO}S%?CfF2f)7I>H KS}LmH%r%OZc7i++q)4AKESf=^0zI6*n&5<#<|_MP*K!{&<;y}K%Q|)*f6Ffw*oCC% zBbU=g&JDfF1~fkc^Pt|7&b+Gx`2L+M>4U9X2lC1)IfJ!D_-dbo@e}?yMk@O5r7sFJ zWh<6Zj?);mZyHB8htQKgDHiC|xa%(r?h#T6y(pZ@uYZN@RSWX#ASZ5)Tk5U>yV18B1)gYwlT*=N@X)3kRf&hs=t7pFEEoq z?zZO@ZpSYl;e2?OKLZcp4A9j)yQ7Wru0Y96A%N_}m7Gj*@e^ z>rmb@3NiZ2Z{65H%mRwCqH=saswlZeRREVl@X_ZYUREX6fuFgum@*gd5~#@d9Qv{2>|)cKckQAFn%S`+V>oxTQTv!o4lm#l|^}Y>fOz znvonj%W|~~jI2HCp=XgnC`OYGFb=_*Ab7=W@P_2hfY13aIhZ;z<%dNl>^!YV|Hr08 z2t>b}H%fO+-Xa7J7ont{N?&29ueDwz*$!30>oVw#k({+ z$zrHtxlx=GKm^xrcYarYSz}PxE=}KLMgRMW_V>joV-r6ExZgJRX$obdG-3o=icv7! z{`ah~BS|g`@W&G3b2(A`2a(;ozj;9_(9doy)FPQ)@;A1G208;~QpPj<4wFXsE^lOx&+E?xHq970y^{-Vh+!Do0)@?gZ85a6}1oP(|Q! mm^8T}bT9!<@mg6oMNLsctuvx|#xg`!yHM~c%DgnmP{yp=Uu^CG literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..d3bb1d3b90a29254b94743ab330e62d68b8e0a4b GIT binary patch literal 748 zcmV~r20p396ddz4UJu*^nw(%`)!}Mt~9$P{;MCU z7enclJpZUOgiWtQqi9(a4cpq4fli!mTor3HJNGg|S?QH4DsdGrs*T2aud?Y58-w*q z=darVGqM!LoG^GJLiV_!kkv1)?*h=ibJ0fmt(r6-T42$^kBa^`FU;XVZUt%Z;X4mg zh@b;6Va>WI=7m4q#ZmpGiD`gy8K5gT--K;9Up}-cK4UuE&YJg&nSlD-Mu2*1|h{h2wbw_{{d3i!%xei#7d!>`KG zA{F3QQ;YS^5tH_xyC8Jyqr^iK!jJi~jxf(B5nZ`(n!M8%>4-RJERsid7S@DQTMYP# z7+4g+ii#RG0c&|`O2%Kw8oe$1Q`loYlN94V>34X1GI6)nEpuC`3oX+HeumBm^3Koc z$}*Z!YqRLOKafz&am)}56Z zku(z7%VMvlN9heJr2G;|FOH)>hP|p=cr8yEKPp&Z#}7ff)3+^YtxVuiN$Bu-SPK3f z)moL&k?U&ztl*IUTt}(may(WbeN&`dr;6fy`wBC^%XV`| zluu5DVOamfn1opQ*DKa&`F11Vjb}$*G;Uen#5j+6R))gOr@0&+!`$>lXuSY~p6G;w zV@8c@*2I@kh5(Ir-z^Z%+jy<=1+2S+!sshu_6lpQ4z+{Hhh2j$=$H=uBYkvom_Vat e(#R9v(R5tkYw^zlpNK=F4Y(Awpk2m)NZIH!y>x8= literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..17dcb4c94d55b7029d8fa1074959e403bf1871c0 GIT binary patch literal 664 zcmV;J0%!eWa$^7h00IDpEvHrK4T70~K_m^r%OQFNvPa-Sq=^AQ^x(h!`BPK06KGOjb-C8b$ zF;2Ld#?RNa9Dwvq&%KwX34DnLFAGd=+AI{C+qlG$E^i9}QXSkv#5q=-QeocIb zb!wjUewG#>tDkY4X_sepSaIRxk+rlV&j#;1rCt%8wrrJ*h$P-|KGT$@CbuFgv)Py? zpMRbxFeUSnUjH@?OCZhzS9N>j4Q7il@TvF2sMLHzuWpxn31`^R8e^IsJyigs%8)5F z#t6ilHpV|AWV_p{4EHzJ(mzluwO=+ty*4lY$pAa_a~lM>O)ISSr|fseLid!m+rvO^ z%hufL?>nydv;k-Q7BVI3!Elehc}v;9Qi8?;s~}mz4|I)i`E`_%W2N@y zja%&W6K`yDTG{54g=P3MtsSFnW_D@yg7u)~WGJ?mV(HEF6EtUD!z@K!@ZMWJQN-so z4&>bjlTtpLX>y%cK0?gvkTdomjp*AZNGycFKup;ZB7K zY(OW6xstN-_zZ-<`x#{OSdZsKn&|)gJmiEsCR3G62#fH14~`;_p495`E3M1M1}aiR yTv^AM58V5@EC7EqYBW24zSqy}s`=nL!^r(2mPcL`;ST9-|g#E4n7`UTgG;2P;@|gMF z82xwwPu#QDroBr6bBb*KX~@SWS6QKFUS*LC4k>ZhUqzrT z4>@O23pR9Xmo|y=UZsbpXpEbPk~ss&f;Go}4Kt#q3v@Zr2h4yvaZ4>% z`R_<4@5zQs`Q;;cgx|At5}3ukhp^WZ+;NiL&qnGJ9nnP<2AuzDo+2Ui-V|}s`bCI% z7(tr4_OL>~cB0?aoxkLdvsHjqfRfo<=kp8lLi-MijYdHfM=#|&@QnttZ0Fr{Vj-!wY}STHS4-ZS54fYD{SGipm-G5XxI-6~vU{|C80-f-NaNav zp+Q(Pu(&Uex+ZLZ%aot7rN+4Wr`kPMJy%i?Y!fK|Sy)Z*jj4HGFIY3dP91lS;xNN z3Mcry0Tt?UA#y(dD|gV#@7rZA0D*h$Zm5Ipm$$;2Eb{wzU$cT2-zxHTUbI5euuW9X z;YOucD>6vm!R+IIsWf?u4!Rl|xT3#1d}e*qtzeM(y3{>olFRzT8Q5-pWpKW?)Sv`W zO^Bl$y~+~ut#LcaF1CqBEn5AZNENnnxp8Tb7M1^;mK#^Q@GXUTJ9NYRUr!rCM^6`e zN%^HxB=N5jo^(=$5;Q(Up%1qnX2Pb!G5wqs@n~Fb3E_$vX~m!1g?f4p-p6g4dKj}u G?*M=wab@%X literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..c828d268a28221ce9e1c8ddc9bb1d3ad44271037 GIT binary patch literal 708 zcmV;#0z3U zT;)r&Zqeo>-K+S;JPV7bv4ONGu4^ImzKHl1EBV%2^DEd6wAp5zqev@qjms&S8+4if&y+Y%QX;aPSYN#UJ0?o1-8z&?acS(s9EZ5e zQc~&KIEoJOOOWZJJ3^;^_VCKtz-a4?cd`*$Pt=*_kl#qIWQAvyUjamD_l!tRS#11l=$UI33n_Xu# zotA0zzl-k4dmlumJo){ki9NYh*X}j!=aAS?wC9j4T~H}>!FLxj-H}xgiN@8GT4f$g zXInyvH7-TTcs4_GWjG4Uu`RiKsQ2t2C?4*0Wbbza$^7h00IE1BT>#IDmd5Q4bUD(tWBXp(d2Dy?pcA^mTyH+zzK=bop7`B zrOrHbYIRgecUo{h(09WoW+|a|1t~Hd0WFJ7VdQz)Q>^~k-&sIOGJ=n+@+*ci%xDK7 z71&`3{br=#wCCk1D)B}BjOl!c+CaB=>t`Zo>>SIcAc13NM(9ZO2cD@5b z08(CZLSAxTt{e9^2v{8;_Smg)@~gCB)=+bW~iEbMUn#O}c6 z97LsAleIrIjBdTv)>_kY#jTIyNE6gzJ1)D&NuT*zwr#l`-kaCVh0s^0@GbO@Jbz~s zC`VsC2b)bCC$Gx_)X2KrV&=V1GWeM)`VTi`KRqpQ(~lR48}D*aL9{GWkGF2TRn!P% zI`~^9bKB)>)LawM)>zZrqo!^TD4*-0f|psq_7kBAq6(=z#0hF^Ga))l=sI7N@A7lo z?51W0FDUN?&@zF^XNtRV_its0rIItbQfUMTQ=UkTo=tG}ue#=-c^QoCw*H_lhumyo z`L=+T6|MffTFJhp47n>S;r Gkur}qrQ=cn literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..68b161646d365c363f98d714978ff9742fa0c9e0 GIT binary patch literal 384 zcmV-`0e}8ua$^7h00IE2&6rm*;G+1`*wgrU4k9$>tt_q6U?gRj>^BAq+Q&tkm|MOSDBAk*Z%=ZYu9ovD|rF zwq*Ko)dCpFE6SXBJ<;C%M+8`xij+O3Cx&kZ!PDu~TDPdL5Hy(frhHP5B>Nj_u>W`r z?-$T4V;7Qj<@w^Chw?TElsARd z^Y0a-=6au*2IHk}c?(&tm^&PGmjE;7MZRJBigkc<-Q=Rmw93iLh++SUj~$hpY>v0G zXc;~zaCE+^4bR2>HnAz}qKXilPTQm=r<@p`GasRln6WQq)kMim`{C2| z+s3@(M3XIe9V*_1db9APSq~VQPoSmHcHc#M=uSG$E7m~6sM{HUg<7GO^nZvOp_WY^ zRnN4VNA!12-iXTT#jbN>*lEhxz~Y=fTPkRQr##>kFUp){%T{>W{WyXkc!aq*Ub3=nxI&jC^x^KpB@2qymsn1CNy1Mmruicwqzc;Wt&Hln@6AJ6)u#6ItBj zlVAyAc#0uYhc;=Fxq^zoRPlWJKL}B_Q)rAAHckBtHdMz%+^dMwBCBW6)D}6wbNf5~ zH>2(bOQ+uVRi~`sOycm#nHP z|C1re7Y`>FL9pV|VTOuz6MW+~!1kwUEiDBNlTy;Wp|Q-AysptZcOkbsg`$9gE=>_{ z#Pa*F95a}&OF~E4JV5wQX+o8rTsMdo3@V=)*Bgb_{Xoki^Y6nRqsH=t&7!;RRlGKH ziyDaVKO3H)h#MbuiMs~}QR7 zx1BOCJH$^uiWxf1p*qiA0yXDv$vKQoNQonRn|g2UTIobS1KI=cAL2WkkS6##6HhUt ez!h**GY_0(bexa9lj}qo`2&p0kiK(uNtN?zZFPA7 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..916c96036ff08e20ae19ddeb9ec019b3feff0a3a GIT binary patch literal 708 zcmV;#0z3UUUe5yVe4#s2^HGp=y#o#hF11^+nf0fTy znZb$FCOsO++LTK_0~Kud9@0A{OJ@=njcF&OEVZ}P?5B4MSG5RBvL%mH>Gi1#rc5H8 zA@;$%682}bLahp}IFVD%VbB-%Hgiyl1M@DDoPnD+dP5eJw@Oiv_#ABoQfhV2pb+!F zWQPS}C}IO!yUggUf(PIf#0*WpRpw%U#hHP}mHIwB1@l=#TSAfRndZzwk;I;lkfZ6z z(9u=dJt7M)?#{<>n@l4p|B$IlSuB?EEiEOmOALsUPVD}<$75`}(v~{(+FYG2mmdtw zPW)VZD}@TYcDjhjP9!XgaT-rP+j!0XxB`<^ySX7DS(KBfRk=>H44#uIyH_!hv&O$2 zdXrDm)X0)@!J1Gg!79+KAR5bVL>mhO=fIWCOD3vioa%kf7FfUGYpLFfOR4DtEX9fU zENyez4fN|Sn#A%;MFCyvNyto`O*;IEsb2xIbYMxYeKIoxsOKF$wd4B}t?H6>A1u&$ zCxnLFbN28Fec~KifVaG%NJygi?QEGc>0EU91uIpN?)~4$=);k=yub8XB;(=#bmX)7G+ zI8xkLb{8nv7OUIx9n;Y)=f_h4EVc03KuV*TU+>tOaWqPVOlMe6DuDj%QIFXCx=jh&ir^5$RMa$X#T0KW>ly6jENbNWBU6LK2mZ%pI4A9rn4wAaj qDiyL>_dNeHFK0aN^M(70b=%77;vFT6!qEl@X0N>g%LVReyMaq!bzj8* literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..0c654ad06b8277eca7611995e865b382df296130 GIT binary patch literal 716 zcmV;-0yF(%a$^7h00IEb!bV0bY2$X6smkm8bs#ST`Bs8{+0~}#fr-V28Q|miq6fkL zy}pB*0k3aZqrc~c5~CF{@=>)OoVcAEtIk5gI5VYMQIv0={`!cqlKlS#Fod4?4rxxY zqw4IG8^~pvqcE6$w0KuQj;2qI@O!P}wo5k~6p(C87QQ8|@-G#ybG(l4+?hpRm;*-1qmdVOwjvv1 z6rce^EaAB@iS0g6m0Ms!W@ecq@vJ{v^rd04`VwS+N&i>HO^zDwU}^OB>_STics+2S zw3>f{K_DeP*9Sv6rBuZD}vCmU4e(graLAC)| ze{T-qS2yHtqaDYae_m`&UBOX1s@)E97*v`8(Y( znPn(-GxWl+EXglD$f%^x5=J8bd)mStX&FYg%WV7-@pa@6n3x0tg7+7j{Z0`fftvF# zDKErRXQp74l9>eNN;Y}1F@6APIQ+d!N(1k#t~h?$4K1RF;W3@Mb4lcx1`p8^x4tZO z<-O2J95r+F0r6P-Y2n1#i+x2L8c3>_K?|nJ40B&B8PM^X+Ak2d{$!9M#1oSfRim!0 y?)m;%w9yIUEn&U|$Pd+QA;Q22&+t8Y7VqSg0HsV}dUIm919a+U#%C8Kv1C1oelK_KPhKQ= zUF{kbPVrN+@Ah79`|AA9iAduh!ABO7=*5Anc|J^~HnmtuwKTo9jI~MGH44v_8G|bK) z;-r-W#)&VHuq>_bdy5YcMU6#g{{Ndh1CpIY5f11p10;wcsfzA-`@bbNWr3borZ#f6 z9pe{)Lp*Dxkh2PvCSmhExTYz>T14>mI$$`-u&=UCfn>q$gB|7T`8^|H}Bjw~zCV0qy! zjUV*erTE>Ya=^UQG#M}2#tdo0(0cp@Nh}YcDFVAN*T*OJtpT7c4s16tE<29?US6ZD zQ$x943Ll#yt25Snao!_lkfe# z5|9XcuTko_%9fTcJQ{RO(4;V?G0g^2fumSM75+`E?n?4k5@iyqnj)lSly$ilQ3F7~ zw^P;heaVI8Mz$&7ADEnpCdQor2%HiKEvb$7Ao75}=$U_1D*G*mh8C5wqVlG3jsS#2 znQN0PF*~XiB_SFG>aXujxYTdSdzVg=GK+~#)Cz>=dO<1NYT`{!q&;od8}u^wCsiV) zW3!1*g)_&$iD7>MdASV?>o>}_&f2^P>Wd?JMu?ZRt%ZMnPdmjB^)*GIKzC{gBO^nf K7smH!&)*)#D?j4^ literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..2f88cc49d6ec54e9aabbaff1a791217f98443fb1 GIT binary patch literal 696 zcmV;p0!RI0a$^7h00IETDqHdqf69#3$%j`uA3>#Sv+K;V% z`8ZT5NXASp)Lo1Z2TL`&U!L7~sdnM$>xx7xU~Hm3`Nru1;iFENg>rHyrRtr6%s6gN zlK^yuciCR)N+NGQd0y6CW4ZaJAbFsOTug5Ne{Su@6*~T@zqGEK=U%$7Z^1oK|P5`hW8-} z@7Om}6OF148G8k8Ndm%Dp<5+~5b@+PBQ3P7;ioZaCgWXXonCjSNbZdRF*e7WowbV? z9U_@t3ERiF8=I5b=}u%|-0P9+GUulQ#rnVY0Zm26()!h#>2c<2haeU*X{{J@w)S#d zJ}np+YOg<9Y}X4xl8Qz`Hd>P+v-yjzF$FNj)_ZG|?cz{2F+8MVsC_ysYXtffOVWb= zJEYV7hwwuSr^G~z8O{Vsw#i5{zXZB2q2N*Lx!P&e{-Wd?HZ!Hgh*=ww#r*{Y$K{MG1ujn?n2qolR?Lq*9RA~`fNx1 z4dx4T+N$9_MEbo%|&oM8z+%Od?BSd~|HzU#kklu_;L zehqXP6&R0V4<v=QvGBTwihb~q@-D3s(B`&YDm%0!%-pt literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..e17972007e47c3fa7ecf3941c1ef8537ad78e208 GIT binary patch literal 656 zcmV;B0&o3ea$^7h00IEx2}PJRTOKe=K5X$1pE$4KTAt|h&r5ZzqNFoL^BX0xs+c1T ze4HlyC9NZeH<9x9t4o8p1#l0Foq$#xJX36lR$1F&m5$8r=WOl+XiRp~3^WM%pHE@! z!ku3gL6%12+Oe7^s5;lW#o)^ivIGe9eQ?L4beg|RZa+l>n_6e@jS{5of|%K8iZ9F; zL@oCaV=7|Hd?OJxtEZ=ka~zg&e(4I;GsJiFMt-auU&I>Fxz=0wws}kOP6Wj9{XchQ z%}AI_hnZHu_KVVE6`;FZfh|SDqnDv zRQps|Qb`lKEE-&JgkB>|{)%HX4%yQ?X$kNlzNKYn!-2!9St%gd-Jv9Yc9C4hShX+e z?@5@QPu99Eefi?ZsY&l6H7QMFnuq_tdJm9sXC;8y${An7|A}i7cj1+!ud9j?ZvY5s zs>~677_DVI{QfgsP1Q&$RYYN6E8Er*VPJ+u+{wtt2G(1PA-LNz7ASho_rax%DkJ8p zJ~d7j+cu`-+6Aq?YU2+7*+gS)6FXvdRNDmfgB5eo6X%YiOK1Wezp;vlzBZj81l3WE zi&H3~d{>#pDh4u3S@-t-Nn}n|!`DwTZEn~W&>D7vzX=Wp5&}EuP{C}*DdJI#7%vuf zabd*`3L#?8)gR{807@g9Tx||6NwMok8f{ed@*O}chX*2Ja{9twb`Is762%p|@>;}e zNicEsIic&NPE5;l$XsqkN|3R#T|aBgK@y1lqYVKG3r}%3!uKifM^aDF1Gryx4^HP| q!7SpD#>nuAjDG7m(1~41Hj7Db0qjn@nn6ECZCNrCu-RQCqjgYw2r^Ls literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..81c4f54fcb921cd653ebf9f9eae3215c9076dbaf GIT binary patch literal 656 zcmV;B0&o3ea$^7h00IEm8f>3BE65@`bxWlV<8Lz3pf%wg*#LvXDRl9hP@zxh$h8jQ zW%E6~Ro}1_jXUTp7ED5#E&~|X>V%y{?v^L3E3vM67|oMDH{z&Jn`p=mxFPgsSCOl* zuO8(5`GzLR?EYfj!e>?~&F23z8-=`VOFzVSN)FOOPJ<^+Gl!rmSA#|9mhZfTO;v8rg)o%U0 z3!R-`U1e9%4n=D$v{K+mqYXQ&#oMW=3wK9MJ?>cLyf5MxA14mdfcW^}R=_dS2@fwB z%-7Mk1^VX~ay!b?L&*QCxeNr1glXJ{;Wc4jexSLkP3Sk945W?`vB+1{*n2kfL4N>A qugNnuEV0sNouFn9DuQ_q;tqbtaZ9j?L50vZ#q>6Qy@GX1UH(kYw?=&c literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..2ab78c843b109ffebc0919c3926b56471b45313f GIT binary patch literal 752 zcmVUDI8MaS^3C7FM7 z1U#sh148WsyerUmzt=X0ALz3KHeygm%RoJa#u9WM{7)S@y7W_70$KTw zz@-afLHiEkAySMrt|Bo1SkJM+jyyLP^aPSIqUTpcZupTHM{Ln)0B#V_6 z)YVm%JQbHbf3huVg?{uDge`|avYkZVH?BDT{&t_hXPDIHz|EXmP37`=XuQeK%Km?^ zi!X{aC_F7n8NA>AU!*H5Yqzm$Sl!7D8S}u=LY{qc7DY40G5*B1!ENr_sc=F<-|RME zW3ES*a}inK#Qq_ob1KF%jjuqevo)O2I|9yF)MtQkB)xhZzZqJ-l$uIY47h67@|ZE2 zeBpXbmvNldiC*7Qxtw*^sq!?D+YSr=AM2^zf_Pe+fP>EJF4|b&2c+C5fswnUvj}k9 zn2gQ9tAreCY=ZqE;Lh1maO9nFMne@~D!w6M i2%j3?Q%_0HptufhX~Su8zfI0feUFE{7bZove$}sB4s@ab literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..e9b64c2763c4003dec2dc047b99e7053aaa66def GIT binary patch literal 716 zcmV;-0yF(%a$^7h00IE|=V%gDdHvHN83mvm)wHpQOCDo#wy=|j{tnMmL)@yDOKpGs zFqd)AvI(?;{NkEF(d!t2$$%QyLQtErROzowINMm9zFnBtDWvBJv%S6+WV^|kqBYxL zXf9>LaO39`4IbT!AIPYt73Z;%C5)nURzR995BXq8Tycq9k~latfUt~~`JoKkir99) zG}()kTF2!~-^RPY8O}ob!!~CswP?~Ex>zW%*9pQY^-_)7tsc}9M8IKq1ylFTUd4J; zmN&IpNHQ*+W0GEO53eFt%OO34dVpf0vBMh5MxEUoi>&q54oD7>-K=Hnuw|e|u&=D7 zFyW|C6w}H>dOlrpgJW`<(3^gDaz#5ASd^%YdD~5#{H1n#`hCfw_JruoiT%d*Av)!M zt*?j>GV&gK*}txN#DF%dI$B;l7~FSU*Rt}yROHQ*;K|VbbAP%#YJ7w6?#D}eb@{uH zx}aSfOx@gQ6*l{Ez^>sE?z0QemqDlV0X4|h9R<}>2_@KvE*j583?+cPq1BXUGD7ox z(g|OE6&AUBLKk)RYh`_x`Nm6(rt@wLs|if&spw%bTU*iZqYhIR#Fb=He-)q7$>vc* z>Y!EE`w0Q%c?)kvhu>7PxI7Jfk;)jKydh1t;A=X1jyPq#zj%j5Zpflcvxj{uEm7`* z07Q|tCwIU3G?3QbUCZhC23Ar;r4HrOxh}Epx+bg%L9LEY$FGwU8|jMg2^eY{+&CzQ zqa1C<66v)rl467hUJa~OXEQ;Yfhq4op{`hU5aFDk$t4Ks<=(*#es@O%U8){a$%>dhEPGTuKi_!i~^l~C}>RN=BN-$D64U3#~qlfY^kt*nTMcv z=;Sf|Bt1y(VobyXd!sUwP=3wo3GtCmlu0?uRn_c z5a@7RZ_-ky7g1|xyeR&&Seu1GZIR>3z>rT31^V)(c$cingf5Ic^LRJN3#?4;uN;;4 zp)nwU7tiy7@TeVy0y$5B`T+p_NQBVHvmy+1XYCi<#;;F%~KMs=&EBhFHK^ z5Ent;o!ec@3v2fHBcmGtm&jA0^K}K(j9u*^#Eg)5*fTQ@uDLxqfvoM=gDc#19{9{L>Ed?(SKT&1%3ra=rufw}PC%f85 zDS-j0LBq-N`pYyw!bjhr#>aA2-RHZm9oj-iVA;y0JRGB6mVV7Cv%-o|POqdk!jb4# zbWPGaHjD}4zBodpx@6})1~<j<_(Lj`j(4uI9v4CW8Qq3 z6tEt$Td;YZBaSbH%ZC^U;V%`70f8h0(Ui*O&YmT9ovxxU63t~Q)=Dk2H}kjX*hy$X#Zn%@n#|^HY{TVTu2#w?E4oIdLwJ%p zT0qY}_17?EWv5XYk|-1sbh)k3@Z#PhoLw`wjjo&*8fnrP2 zpfy&7h8xpaFeaq;bHP#rG8K3pKx6o{>?Mo&&D1KxRvGj%&M^}go8R~jsWJ+!DTBvx zb=Lu0vd<7az!>NIWxiWPjOIo#em67*hBdgcV-rm-{wOBbX z!!p}6*YrDHiIF(nE@)|jdbd@p$Q8tuUo6 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc b/tests/common/src/main/resources/2015-trimmed.parquet/.part-00006-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..28af7cfb34f728f123bc58ea8e72599f2fb5083a GIT binary patch literal 692 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 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/_common_metadata b/tests/common/src/main/resources/2015-trimmed.parquet/_common_metadata deleted file mode 100644 index 9beded5f108e353aac67fa29c768e0dfce70a71a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2642 zcmbuB-D?^_5Wo*<)rx7G2a7@};ULg}J(~DYu}`864YV;NmQYG5lf6-w?44$BudRrG zXaAW#bkAMy17CXVlg`ZUZ)SI9XYOineOfCt{=WKH4VJ*~e*|QX9@P3)t#DkZKmLlq zFVz3y=Y=okTBwX*HJ)xY%KBuhxJA5Ia%qIi3H4A(mErYGMo}7Yo;Amcs`PvC#itJ; z4uNxu{Mgby&KaG}#bxMOwP;mo0+dNTsB;GatGd&<&)rXnay_akJm zQl82(SS?15iepY^)Q|i`;-e7;V&}9xqJaRP=#v&F@S9%v`Vt~x910!&Fj~eKx(f4L z%OL2&A1+)>A%7wl(Yh!JRecSq_^P)EVvd=RF9-69;}aa*APG4YtCa5W69|;YCLE?h z>0ellYU5@7WWi?+EI}sU+17y*JTONVgiL~P_~Mu2p#T>I)c-tN+hVmuyKe`AheX&- zdrFbHf!+VMwtes-)3$D;MX#j3z!`F>@I%Jnj>$E0GdArV*Y2-3n`XRU)tUhysZUc# zRMRF5^$rXO$=fl2=;viXkYSiZGVeMGMphE_XHx#p@`xKjg2-KBx_Kmoyg}@Bn*^0R zm~4kK0O_t~LeQPi0I}2)Z zcSfihY6&6tou&t&0VX{>4KTZbYkvQV9(9^zOm}>^}v7Q@uSywA!Y7S>x{I! p-FBq>r2{sT|0P^bU^ diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/_metadata b/tests/common/src/main/resources/2015-trimmed.parquet/_metadata deleted file mode 100644 index 4c12e0ac71c0af0b2547851ecdf5eeffc5afdaaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9759 zcmb`NeQZ}v-gu=G6G$|=WkfnTtb}IcqSx9Ni7|Nn73XCxrh^5dLy3sU48Db2zXz~4eX+@Mq0ZvlDw08T9CZ4T9%(mT{~*z=2g)~IdxT7{qQ5Y8;(#S zp?{pd;R3Gv(RlRfR=HYAB%*TSUJGOVFcz(EP*$`yTD+)otdgQJxKf|b4TY6fDYh&o zHMhuhTKL&O&$#IbMY$3<0be7>q_ruM6AH^N5tP3&5v`BLk%O0cHFArhLY+0y7DbAO zS*H1`q+diIh_gz-ix#T01XY~Q!2O6EZcRj$wcNeA4@!y*X@?V1L`mHzho8H%WI@UGyL?sf`jyf| z=|cP|jYyT@MZwxYX=G72QW~hOTvA#qEsm51%PY&JKqR`}7 zSYLLo(MoX3w8-#%FS*Ip%`OU3z@HF`pW3;R8@JUNn1P3PyGh5d-4sPY?h#6!ex-{e zr)PVH9)K!8{Z$b~6`=nJ1DP+c|K`n`BHsGZJv(@`y0T#CgS*`1>{o>pRe*jwi9RI= z-M4!$pw+I;Rxu2`Wzlcicfy1mr=XG=N_}iEMSsf|Y-2na-GJJ!GU1S(!g1Mj`|K9{%7d@%g<1uN-VMNtU!4areV6#b2{4>-D0 z^*M}uX^(^K_}E5K1?Y`Jr;V}KFK}qRr(*mqE;8bvC$7EmmQ>S zyPcvO%5VT|57*sDSN~QUdNIqbF0WjO%bOVarY_GoFT2Y_;ub5pz+4`>j+EES9LtR( z2RW~$cX^1NdBaX_?6uRuuXB0E!2@q{WSz@H@bqRInfjHDf(l-7E|+JV+`E64HmGqf z54j`YJAMf+4>Z8d}JS@NsSoaT3yC|q3@egv$TEuSL` zzHg$9n>0C>hv4y@;BLQgQ4|6BH$oFXaDFpK=3O45hjxI~`d<-66`+Tc^W<<=t7Sat zj*~C(XwKy!dK>tj@sA2AssR1hB>KD{^u_*H0j;ixHJ69r$pIHRebPx$lhbe+&-lQN zeh#a;JcJ(K?j{$WFQljt4BgUxJC}#xV|!re{*RlY3aUAm%QK#D?`LD&8`fMNg5Td- zNJa)76g2>D$gvDG4*qcOZCoCb4{a+X14B-VA|US;O757vt;<99%zdQi9*QC$=W=<* zbN=0PU+40$08>9D$L3Sig2}7NYVwSuuMF^Bi#K_Q94#h8MHDr{bKZBD2j6P)5Z-mf zL3$=_6qSJQ*01z+TPnu$9(_5N$wU0LPAlnOLQx3x8KFb>wR1e3H+e|D_*Om{9M)QFFgo51jdDWh>ku9p*VBiALmn7oH4!3p zd_oIg^yT1r3lpDaTLD@G!*4WosKaCcI0#}QLi#Iq^D)u~PP9;l-w6BaTZ>@0PWe+U zCc^M1VN8Tkzg0F7LU-cEM4XIMI)-CCvEJglj~&e^ZA{$#z1r4jtnTi`i^745iooK^ pKv0${r6mi4;l;tafE=!jge!u9F#L^FmRHoxw-m#6`$KRv?Ei6L%Ps%_ diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-045af329-7928-4b99-bd5f-7509909cd629-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-4cd108be-a0f1-452f-a40a-2dd403ac79b9-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00000-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9d02e854361a604520eb16456b210ec26f2576c3 GIT binary patch literal 2747 zcmcJR&5GMF5P(f+H)+VW-9t(O+Y$^5T}Vx`q1knAy_KGpUP~!sYn+Ic<*Y0>4I$6e z$LY)Lp>m}7hg@nzA&1Op^vy^!n(_UouhV{O`1I~`FI|Ip_>qPyjG@19`mL+h;Q1Co zQ2qZbPPkkdp-W(!L1pi9bgKe_mfU@DJJJA|eZcxX;~CgB&Q++0E~B$+hfhq)PJNHpfPkwMaghY7(7 z@+S(J+vQ2uY@X|--se({Rke*03UW^h5NErNiwR7cmjqbutrN~0*j@^hNBdNRiwsSee z`O=|o)QYjBT;dXiQt*s12$-@_n{n(Ox$a`O-;ay^y4EZJWqsO0@|w0`=yza2DBq3+ z#5^wxf(pYPQhV2BFshO$Un=<@%cE!nC8BYOndVUvng(&wZAw(*VCo&p0%W?H4Z(Cm z3&gQ|S|D`CEdfoFlecJ#-KM9PgvJ@wbHEayW`_l#m^b!}Vn&sy#u=e{sFj4qcUm2U z7MSYrw7?t(t_7ktq%AlngS|29``#IRF$4cYEJi9k xBHy3g1apk$^Vy6{=99UPA19$7-1@hZ00T0;9zMOjbe#Y3bAERn=U#ob{skT8YU}_2 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..59989f13e8f17bc17c82b798d78f9efd9e7acfa4 GIT binary patch literal 91153 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 %n--{ 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%0D~^c*mcDMe@rUO^=lHq&#WI3xtnP-e7<~>faUK1 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-0e960084-6914-452d-878d-025d567a705b-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4745a00c4bdce7b858c3ca685563f22d8ea1ff56 GIT binary patch literal 90887 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�s;)3O@N`K3Vi#h0{GMHh=lJ(k*!P=r~){wun9PnRKStG z3kD#A0)fNCHcAxkfJI{WM`Sj%b4lPrZ;B+)gLm4hCcCSNGV!*LO45XK1vSf~K#fEVL- zmU6D;v?PhdZus?NCa(qnX8-C!h>AfS23cjOL4cKs8W35!qXq$(p*}>ZYJ$dqmBbf@ z1Nk2=kKr;4B1XK#WThD-jMRuvYB`7+u`$Z^pBf-p&8QARR%fb#kk_VaAjo9N46uIgHLtjazb4=E{>siD9_0j9N2(5_5blj(FbokT;RFT>A%`a BdiekV literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cc480f5ac4f584c723f80bdcd559b11640f6c3d8 GIT binary patch literal 82455 zcma&MbC4%Zw>8?fZQHgvZQJIwZQHhO+cu^>ZFAc0Uw7Ym&N&h9eeQR@h?{?8#mdOa zRlBO9YUSEnQCOK79Sj``ok*lr4*Va46CUy*`&ne9KomR> z&j|ml_rFJ(Y-DH%1jNf3&HI0e67TQ1SYZG3|B(I%{T=u}NdJFCY4SHp5Mv-S0x{_S zOOz1*MF{dgg#SVR8{z*J<+=cR8i_3WD&oKIFZvoJK;a1!;?m^NJ|%Kw zwj@%lUo~=si;vNj2HM@Emb28m8lR(4_fx38P;t@KT&z+x^)h_@Osts0bZH!2;N;krQRlw^8%CaqaVLRzXRra zv<^%zuJ=y|v>Z;jD7`wcZHQ6P0&^81{0;?+Zirda_L{5-2Shz&p5`5DSB~$0`4**p zk?!z6xi9}o@@L*z@nATb>V8Ia1a0L$&$?q6DE3Oq)XLK@dKNex`uOn3k)xvroI%52{0#INd;SjGN?kzAPrqZ()$lvbdUY}OmidnS zOW=;0r&3qt&d_HPka}PIL@-u+%(8zx=gPaCXeW7En7tqSO57VdQa1%#f_>z79<|X{MA9TCVz?{TrvF+C-sb zzA}@fuI7eqTgEQ+y~ia?lX2vGq4SJ)H97d8`k>YW1h1$%Lr?Y_U9;rHrzX+^iIIG# z*d2x+GEd2yJ&*KFVT6A9YiO4wUG!QUV9%GIpz!5M zoWo{b?U`(l@j_ewvj*~ne30D3zCvf@6VOisOdY@`cs zp79fy9}+^uz0?0r+VzPT|C@;Kl#BJ)eVlnT`|z!(ev$iJ#e?1tRS>Rs->&&xhz zCZv}aMU3z+E@QZ+)JV`^>dO_e5TXD-+7!H z{}M+(ym|b6jB%V06#VS`7POZ-kDO0^m%g*j%PV_R==yM-c7(UIjIbsg{lMi_NngAb z{Cwll-%CbR+&6h-{CxT`PV;g!`bjRyJGPGKJH^Amr}?#hfZv5f--d_LCDuaOCm&$# z2*8b?yx>2~c)8yxjlYkd@DC7-_Uc3h)Dx4_p%Eq#BDhDp3(1WO6kG5EQ0BF3K<`VJ z(b8$d=bjtyLJz^lk!39d3L~` zJokCu6pZ21Zb$^vzXJ8~K3ILN&TtlJ`%>?6mma|E>wml4?@p~D8H8>$x*yc1ZKCEK z#;-Zc{z1LpJaQWMlhaLK+xW~HHIUXAIW?gl3SN$ly-}#ybj%+$d*U2Bep5UD)uY~1 zf3|U_Kkggb8w$AR5^VOWRLJnHPU*9PC&g=*j)qpllaY%^GLww|mc;Im3X}VcvKjT3PgNIO5*Vx4uUA_?Mve z2)kMf&@bk%u!vp{zQe{ap0STtexHbMX8*X~^9P%C=6%>t#@q2XDp#G3q8)>@`2L_H zekyW{>-878qti$)0;?~YA4f1_JG6b1C+=b0%d){`3H;AI36MJ~I&9`+?r9nj7Rx#` zJLF%%9$( zCV!N5*!vzFn0MaR%d`5?I393#;~6+Him_Hm&(Zk!J@ ze8`DWALTtx7;8T{AN?7|&Fk@TbV%8cY{S@?nr`63pI6=Cej-@T2=1$YEy@r6x@}B| za#Pd+wnM^DQkJsYos`$=kqz+TLvv?+0p?@+!ic<4soC~Q8hsGTkL3sL9f~1%gwQqM zGx+o3wK{@Bxuako_6^z>4JuxP_+Nr9g9m+#=Ubm%927`j^-NjzMs~ z`$zVbFaX2&1A!3@0D++y4gf=u6%2sDvF#0j!U`b;f}tuZ27+T6CImv@IxGZ25(Xdz zL6IgX20>F6Bm}|GHY^0eG7caG!?7+X2E%jiB?Kez-Yx_q3IZXAAc-O=g&<23C5E8L zFfE3lDhMHmqNyk*fcDL;o1)% zk0UwF2utFdtviO}c^nmv6Zkytj}!6$q5MD!f)k0r4aIVTB8ki?m>`K^yBEWb!@Gkb zOZ>qS36o-}7)hRPm=sBo?eHs-GCu%C8m}luM4Fl*!wCkaqNHewriN%Cine|L1s1Jo zMns0bZR;MKq4TT>mND(|KnAxTNF@>>87)whsd<@rhG_)NWQKVHDG83$m8uzzb(ZS^ zjx9utbe3&d)nt}^-E=sdBi?pcj&sKcRG#Y~<`9JYIKgC&TQQ&zl;^yn8G-kx<#3Mo zc7$}E&j?CLf&Urc5RdYDykC?p0oB8>-1E}|$LSYx;#EXXzpDbhlQ zHVW=a$sdKNmvP_{DUM`Oj(K|&=EzNI% zHErW^k__V@nvg8ZtQe{o`-TguD9g_lAbINJl4LR7yX9nsNC23sq6oaWDykov*|HKe zQR*_f^k}g-p$zj%ii*NENGgYt6niRy>VA`=nun$|@_gHr3=0~Oe?u3=mI1+*q?-S>swj0!u&!=&OVF<^J^pQTIe?LE+q_7j_%qhh zWb5<(72;yrixpSBEhk+&J;Lkkiy#;-V7}*l>>GY^{2T z?i{})n2WnOWt2<)1`EC`pQ;5uh^t<>9??c229WFTpX2zt+o7T9?gPwS4{wgk#97UM1!|w=-4pyMPS9C$EnN5u*^+B z$C9jA9>#LDrIETsop+ev^F5y(##8kHn+6L{k&@x*V{w$|EF)=|k^(!Zl_c`vPZA`B z><#KAEu)toC55UY!zKr@WhN$f@J~XfY%CTSr|?IR9V@CRYn7&IojaR}pcz3Mr-fN< z%qK3{PMW3b`%R)`7)3>{XPC;LuWFzuxyb{WNsvOhnde2GkXu!CmPubC4N!=d10O19 z6L(N+S~|sOs*2hVWiG}$PH|hLk-|t>#}pC{HiD znzYC-e0#HSh>$gbPY-~gsUQw66RnW-zd)nOD-0*;itve~c~9Z=+HX1wv}5{h>5X~T zkXsyua(iZ!FojlG0x!&RZo78(3{sk^?X^;BXgDQWCZA@Z5%A~J7+hYvru4il$8D-8 zqR&&SM6$&5ow}khYHF;aB+YtFtSn4PNv^!8%d)DfZi)uNu!W{VI(&P-Dy)7;TCXMw z%RQu~`ImNeZF|;~imLElRlZ&4b9h-@_Y^WkeT&_K4Z_N6Ry;}n^JAb^>~q~s0igo)ECy}U?Y8DR87R>5LgJf z)_WBl)3km&YI7IIWp?wtIVe5OqbE{r%axoAJ??<2OkV4@o(w^o8M=r~gSC0}pWu+3 z;Qh8Oh_ruuN8y?z)`fVTt5|y*jg#goBfAV^xhbw%akAf}Wd#)4d+d z)I&v{bdnL*1$1UG6cdku5j1D$odCliXH;7Kb)Cjh*(#O>A}}JVFg{Gl z2*)uTOrS<8-170p#6GXzj!FdnF@rK9(%8TgO?K3k28bLuPVm|%B=-|?44BlD#sQNS zlllavPH5}NPQA%!1TJftj+kXbtz&I8dK4Z6<@3SNN(@;>8;`?s+Jn(Vs zfijve?9c4dDaX?u9ZJGWg(S6W01r{MlvL zqlvwy$!5sKSz51@AyO(UiCkfuWb=(!Qh;oj12b`fXbtK=qCH}!5zm$4GMD0KU!m22 z&yyqyUXEM|E@0b|Rlw?{B6Zi5BV3ldQz`_rFgDcoR}{G=TU{N^Y@H>L2Sm?8ESEna z-mk2Yu4bW2ms@3CIG9!7u5^eY`q|0p3~PliA|OO*TQHkTb)Ht4+hcdncy~Z2S+b%y zj)qaVmO;7VVK{HQF3t3H7O!cxMjx!o{T9(&x@CY%hVog5Pk)Y#Um#U|Z;^RA&fdKaO7@6yEUPbfxXmjN`7f>rR4gKpa0`aQu@{bLh-0IcXX8Gm{N+&i|&zzVJyPoPN)r1`NBy6<<1NtsA%N z^#%u6nA=V{&y#E73T>`4wxz!Jz`)P!|DF+y)Za5p^qa+(n?t&DZhztfYn)|>8YBjsJtaM!T z8s~Su5bi=}^Ss(w31(Vb?+l_$aA2pTj;ND3P>De$kbuW{tOpi}CCqs{KkCyipe1h8 zE#ed>iM;+F9Hy)*FP#Y6bk0phuMygkBM^w3B+doZ*j;oLjr;n!MZxz^XG@87DK4cC zuLYAGXGO=2S)1rc?DHT62x2msMS&`0B{RwABY9u6Vtr>JUKbeE^2`Vq$c>;ZP^x;_ zhJG58vtio6TyS*Shhi;+NWJC3%hfWh>QWoz!|!S8v9se)2^U75mtDV?voF2-<#+g# zD&(-Qei17bDIoAxqQzKe(<1A!Cl(%hNnIm#Url16j$DB|-H$_of5MzBz3fD+C zn~>mnyqHXiXkq#lnlStV3D|2X$MFy^^OgBX&SEP;WMGEB8PXb2;aJCuqGWcoi7w)j zxvO_#kW#SbWp@;2W0jE5?0sEP(O0uW9~F|i zBonPaCHM(}=cU!o;XkXZaLN3%5K=RF?x~wJ&;HLJeKI=W9}~gLD8sZjxI(`=Y2)bG4SIuh`C1N%&$m0UUC-!SJGXS?HuQR- zpoPi_Lr+3D>iSHlX10JEpCSY1V7iUocf%|?M(DJC7sMjR7E(p~aHIjT_}279uOIaNABM0JWawK74v#4M#( z=?A_>#9i&ZX*#{ubl2#D{nM((Vt>qdFkl7kvTo zqCQb4;D-5|4{puC`j3S9`(7I}?MK^|-Xqp$5`elX{?7Rp_5||2{q|$BH^?CQGm8`J zCPKTeeW$-^yfCK=E~VjAX8HUUqNU};%{kVgu@n3jQxIGs?ZzbbW`*@I>)xx9w|Y1F zvl4OC9y--1v#U?x{b)Vlx;Q_ zZu}(qF6ZdS*Z(+v(xq8XxGi_0;U~_De)i^pvqkOvV_Vy<%CEgcpNTV1!I^Uq)FJ96 z()M)S<_bP<-4C1)!t<2qZAtUo9$+cCFRA0v2(gy{rQ5BRZz;!9+20en^Qg0e$jR3J6K(i zdgTwWFiPA&G{pWk??H0QxQw72eHq>wzQ=v?9-`aXcC5Ws?cD0He@iwM7*aWkKIm5X z#@c1*YP3;T>T3fqxeECE>d?lO zZ(>eSojf)VunQFKzZ0s({1G6}?>gAoR;s}u_ZrumGvWMj_y=$$- zVd7x{Ah`R;yurCS>Zm{1#%%6ExQp3izvB;pS$);(C-wF7>7TJB_!Z@kpOp=d!@U{LVbcu3y{nLada$ryOo}(R+aJHCVfB zXL3ik7u%YD|DKpHuRo=aZ^ajs@$1@R>Rn-xb40$8|5Sd=yd#MCW>uu`17-P`&By#s z_lRGxKVV#`pDLSvWOdJeM|CygGwA6*{(>|%)7T66o3;L%js9z19&rCJ<|X{!AHqMW z;r})-|3QD-e^SHbgWj4+ki|f^FQJ$|$f?yZ5D-!Bs*3j!wvBl5wYrMSwkd*-^ogKP?W^D;0)U-)K zr94-G;3yDi32Qq9ilUB7X&z>*j4lIUbhRcQBp&+0E~)`w)0C9YaHAg75znD~=(s4Z zuk7?e>}k6<;(9C(2nU+w0@3)Kd6ly3%2qdkIY~q$MKtjiyK&jopcrSbec)^u(4FK) z^Sx_^mwpVA4ppQ*DcL^uszmi$2(B-?7F!(x7srWQ2Oa&N?Ts!A zvy8i*`KL6;3}97%;+iLq-gXzMf1Ss+qzDqMwZ12>LO8Xte^up>GBnq6SNiK9Jyek**hhOQ;t|BQ3bNUS zkqq7ZV{H6kJ6nI1ihP$LZCKl#6mgoUULhV$_#{_Pt^GKUANA9Oon8f>feN!7Q z*RhkmCb8&0m627()K^VdvB)mVxuSeOC*}}(h#sF#UbRm40qhGmHjS*& zj_eaCnb9cqf<%~6K0XNm zp}S7jZ81tMAxQGGmOpq83lzq}V`%F9P}^@)d7+VvdsBOh7!i1+1V?Aa($=#ayEtvw zp&jF6pd(OqS{WZ-4#b(+lUGc~e!PFsZf0l}=95de!mD1d(3XQb^2h9>bWMW0RY`!Q zQ1ad5SuZPduo@=RB%^wc5LN=?mfbU@+qb=;dJ)}G%Q#aSbbWPF6dl}uV%oSkEb;Do z+el>)J|(?T^)E9q&p~%ft6q1Oo1Yk7AGfdFI98jnEeu%@F&+)JyLO`@^pdj`2b+n@ zxV#gUjN~SYJ|V=Mip0dFZDG=ywCArsdQs}?Sxy!;K*M_rGAYPP(%G?;DUJ!--hnL6g5}dKE^Fch@LEOY(lIY@j!@T#BqOj% zA5=gR%+hut#Qf<$xih%QsZSH%y=HS$GM?@$A@Bi7fSTk-?a8cApcSL-{_aY4N5(1| zz2DH_QTLg8Z>b@ig5Y<5o2-9g;{scYjzGYmU9RNvIfNf~(u9!(B={x2&Dfuwu6DHC zzqUu98v|sw+DMgQC0$EmQ~)(8uzoiI2ne`f_%({V#3%Anw+-8}f9} z_>F|ESiqgy0g>fuvMy-XFFD5gzZtXsU}Z?mxMsd;0kHL9Z=-Wtgd$gQnFt(Bd?TvP z&ds!El!x-Sb>Fd2$Mwq37a~S)GMgeQokW0nBlkjfxvP|e4aYMMipbur?>aAv8p}_Q zR+jj@V)=;IvNCF->?<4pAP!31>baFD(~EUbe=(yK3EPV>lC;WdQks_ctLZc}v76hV z93D%AB|x`!iYA6s#aKes=NT=Dq{5t4(D(&%satwL{h@0?A`fJ&T2d+>bNRc8BJN>h zZ<{eR8?JME@vx;AI=EgF5=*feF_RTuW|%Ma0y?Moc6?TGcSJ0|7dSRxI0fIxWVAzO zMayTWryl&tQUVV;<&^KiGD4~yF|ujtZ_y>YJqA~n;8gT8$GCc+Ie2%dSF3JvHlm#5 zq!D-t7vVzg&W?xj*YFzOFW_8D61QrTbY&ZQR?#H>$ z<~;{;X1Uzc=5E@wbd@Eh=}(P~5fX67^B zkD%f?ef*w8^V3i{@43GyJuCQ9Z@~+v0hzR7$@ z*6~|TNq(^$g%}QJzp4B=7B`?vTKw=HJRf)v7evmC7wy~BKXg&?1ss`CP#^en_H`?J zcwEl^!TI^*l#2xDtkp~Fk%2V*At}3xXY9v=LAm05nH0Q75nk4oepvQr2#ALMcYmc~ zIW+2~hpJMp5Wd$4d!=_bN=DjHa=h`S{C(S2@;)KN&u+p>8t4Kxqe~Etb@mCO0|I_Z za{%ZHTh!N*75U!r>*?%%IG?Td;K|eIC{a8;CVr+%@{N)oMF#kzILg=Qo9#&-MKI7w zAR@e1nrsdRwo-CrZF(J2>JyQLYNk`TMQA*!2JOX#Z!z3i*qF|!jNi^t%nR{FIO!>l zKtg6?fzCCWR@ZF4_iFC*#2uRNq1cx$De1LgUAChNzYN?OC$~V!w>rEb3T2+j`IKw( zskfs zNI9%+xSBiFe;dbF;cjxmT5#_JvwlBE_1W8z zrhNHm$;s2$)$Zol%CWkrAqO>s=dTUnLE!hpO3~q6+ACx&vr&Aq>7n3Jve#k#5Ky$^ zhU$2c)I$58$I69no7krKbgho7jG4RV(Z=$0oG~g6LR8BBZ3$o3caOyL>uM8$EQrWA zVG*LVz{j|co5e?v*0lEB}1@F>9ru^J7lj%Kl;Cn&? zW!f#o+)+!qcUBlBzKhmD4}(uKTsoCcTP#5v?kqQxXv%Eh&Z8kQrFrj)2a6;I?dV?KvsQFm zAgapJE8ah=QEvaGP#v>Lty`=sXwl22IGm$$O6;oZ`5t}D{MdM*uTh#b=XULd0vY^q zNf8?nx-hVOHDB7H%Sayrw2%ok`JmJD_YMIEvE0MYQ9A+E(-uRF6dWlIkxp?T#`ePXhw;u`Oru%vIHP%>`p9##Z z-j)P{DkpcJm+CVsb3<(TzPZ(|P{&#GZcGUV8!=xv{Z#SX>N**b?_kgT+3ySN^0&p+ z;6OJstMoOy{&6W+bv#h)Lon`?8m2u34w)z_B()t4tFXGbjbX&VB^`F9^g;5}dQhEv zVm)LM(?Q*eoNA*SG4X{g(QHJ3sU6^zG0T89pdoG?GF;c3MhP5ZzYo$vv=s^`58cwZ zqh2!ID}NsM*88|w{=Ifo59q=NNzCu8w&n?}-18;>2s3K-+|>MJHJ*x=*_O9o&uh_O zcYRI<)IMxhu6NqHe}w1fuk~xo1`Twg5;}r5GUi_mGwi!1<$Uw~rRFO)_9jx7t_Qw9 z1a+t2IsV6r%n(L@CY41mL;ANBN&dI+cWvo!;jg_nRH+^r4pk;S85Gdf%qAer0v!yVQ@)zp{&RRAbtIrXSHA);qFGyrUe{&-3|%FL{gb z-G{m_O;GcXovr_tQQix$8#P~*zX71~3dq&qeqOOTu`l%%8Q^~P^A+~)^mt>`AoB98 znfKfG@GIsUq@DNiE-zig(+~cQ|6JmhQN^EXTcsoU$zHx$&4+5U>hW7}ft@Y6xELF< zd@)zNc|kWlTCm85#xJ&vcZ=2_bbIbA${%-*ZMC?id`UitrGf6Dgw{C5vE}0we?c$q z5~_S}YUv7;b2#!q`GO{6RmPTFSEmg!WwNoDS_Lue7 zK7hs{B1`U|N^1?kTF}u^=-C=v>yX@0572)seQSdo&4`x9;EZb!G32qd2y9QfzC7ngNCDZ{nrm63fp=>F^~cObRu8(1sV z%G(9MhU(=#;{4%^_LI4dQdd$Z<^<}dIOLTetG(xC%@AvwrIplS_Gojdcd9?DuIAOQ zm2|Yasc*yaw%bu=8s2O?Vr|jQJig2`byuVx_laBWX5*D(gVm@Jkbl70w01Xt+OM$7 z(og<*J(BvwSH4F$&pT9`NSOH$u#Nfx^oKxe(+TmuKaBcaPGcz(UwD(}CPz?tmNzrr z19kfi!2RmkFtoKh!Fu1_C|Sn%A@)rCjN=Am2a8wyLe@rKqvBo%u>9(LwOCo(yE)1q z@h5sPzcHF$DQ50Vf6eXD;KFFcc#?o5dN2M-r@VBmC%i*T3R=d%FU=8+7unxJ==v?bmB7`i*(ihr)SaFv&3S!j$>` zC^^WcnRY|d?(gRexPJE&a^~;1oFn)3Un=kObiv$Z$dhSC)c|SdcmaO;Sy<&!;L)w` zkLwJvEvV)E{wZvL&M@*c<4bnR;&RwuTE_D2{${afWLY$hqs!~t8M^J9Kj|mjO+cXH zj-Yy^P?SCY9pX>)6Ss>a%4^T!)En1-H|L=v{9b-UaJts0J|&;}CG$)9`;(XChG9Nn zJf$msz<)H$$dEr?xVJqQFENr-!bbX z808+Zi{4L3z(6oFhk29c%;9bLEb*MS)q5n5}{M-MkR{%U!E95SuiFHxJ)sH~U|1qS%f9N%lsuDz8~c=c2Sg2L#dDA=FxxHDT`eDSyNF)xWhal}CC&^r_`xMxE)5^<0m~ zhZH&hZ&$zdo;#v+(_eZ3J0u4Kd&*sv43qQ-ZfvAr4CfI|EI)$qk2+vD( zik^I>bUXT`+oHD>JDy~Ua=r^(t@of(jr)^ZqyXAm`b*>dNwyK+zY@B$`i`9xhU-z? z4GA?=QvM9BvYl?;Ru@G3sh#zg_KVuV%A1^ZN3m(r$-5oZxDXZ zbux;~Z^ds29+zJ{f&9dM6X*zba>Ff8Y&1x-nIHh7J>HqQVQpoDT!b6PXC$zW5oS`z z$87GqgRHI`xtV8}+GTV4h_o-*mHdO&TR(xd@$rVf?)3`YIXwK;BD1`0R@1!PGXIJ6 z4J$j}l_sb)&wOvwy!vo`KRoXq2>rGhd=j!%y60Vy{So!My&$QPrjfI%pU^Jp8zJhH zZ=inGy~L`btQ=6^K;rMe_tnyt9f^rk$NDLLOQCBNHyraB{X5*rf4Zx9SI(~Pcd=va z%1ThwD?!Wly8OM#!%L1ww{CL{qlxVFw(R_DEzC+L%YG8tRJNF zX2CVwU9E%JwXBQEYkWho<;l>&7UA5`U=9dDur&Z9xD0?20trKj4Fn)3 z6o6510mCR41fe$+fHQai!x<9=V=ojyaC878I28or-xfd$yaFQy5rq&V6+%gH{dG zakmmeI0uLkoD7HX&J-bew}25n7lsL57a#=zz(|2eVsH?`5h7RzND)6mNH7K?B)ATc z!2-m{$e5v}RSyu-I>0Dc3M1tlics@j!Kjh~A{8Ty(Mo`XsAU~tR7*tAt37~ewfCbm z21qcPGQjDrjiPn-NHDwB!5O^@feb?SF$bW+n8FHSjnRtX#<(C@k_uzYn2NFIJi=%T zkm0RlgK<_G#@HK-qHHZqaCr;|u{##w?R`M;ETF=<#)RX@QiickxFC6c6~w1*gL8$ybI7XfW}i<|%yL_mx@`QwLj zlFV%}6vf~ejeJm2T*(n6jTW>_L1ILj?hyIB2ehm)32M?z2nBoNq+CM)s`-%^CCEl3 zw#P5je832bkdcI92n$*f+9*{P*WX8+h*nA$N}X#tMU-=&k|AUUs{|aZD!_zZrAm&c zUO1rEkd!KIX-2CnEDqjP1Xu3^PA4=Fg|LN;(a2{?M??fGFa-kNOgDgOAuOZ4+=L+% zAdGBl6|K{Ei_tOiw_rRIRxeEvGk^Vics09bI1UFP(vD6sJC|l$>RSoQ-ZOa23?W4O*D>OgS9pgYR^)v+3xW~qNrb3m z@IyRE?n$LNr;H`MQ$9$}sXzqaqC=E(Su-9|$4IJ2Bh*O6aGa=$IM=#he6I#F=8eB4 zbZNHzw|%~ zAVrG$9I+A(S_TV{R>b@Im}FN1js#vOw6B9{;&h-Q8j%Sh6k>%i@FOCr9Y|p; zXwWfxVxqVQis5|A*@#BLd_*vd-eSwS$WMV{V}+JuaWa;_B-d4-H6wmuYi9`ZtY z~x zbbE>sT|z~&B^4$E#!CFgs>OIK!IHiK_z6kUC2+x^WKz=P{>epX)Cr&kxZ5Slr~wj$ zbV!kq=X>A}8R4ZtM&&hB2g-$mXj#gR(Xv)B3@;n1GRldh^4Jiv&992(NC%Y)p8H&= zz!ScCs^!{|$+vrnY^h^-Hw#ErD8RX@=TI~xOkvJWg;kF= zQEIhCDlV(UX=sB1q;>DVs(pZ}VMe6YkvazL1(<2;7GRid8zizzlxd4Ys%T4C!jeJM z@aWbr;M<4P>V7ek>3v#gup%d637`UjF^6bKoTUbrwZI#QA88E0q&1+plo}ydlbQ~S zH^!(XW@C-uL_i_3r8(EI6Vqx4~4#*T^hnr=r&=FTu5YMs93FVQ4GYZja z+ZIN*ls#cvA0Kc~pC`iA4HShZj6+dtqB3I%1z6`oVu3WSw)&~inOTm*tS3d1_z2fz zdywcDMoRr?X{EQrFV)#eQp)NBuXAvO#p+c|?(kq@a7viw)i{W?sv;`=odQd7!n3Bo zFdFX?D6MB$HQ%*9ibrWHMfk@_!*b^d9nS?+KdVTt=ZKwA{OJ&eI}oE6F1aqruv)*j zVXZfSjo4-I0tsnwtwSQEzME`P{uvud+}0IY;S5&GBx-`ox`{CjEWiNd9Mgj7xE_%n z77Am1vi}5>$q8&mr?X;$)#DI%3JOk1gGERVLZTrEd>X;3Dxy$e2qgG(-*8JmkHNsJ(twbhZ8ZXq6ytx}z`b4E9+py*= z$ReD-Y!LZmqgEsnd5oaYn6zXE_8eIu_Rk|(3l5t&A}*FhxWOxB^m{d8Hwjv*&M=D^ zDcSkQK+t+VD5}8wV5^G5bg)VrqQrnj%BG`cgwGkNTM%v85D;uia5+m+k3iZmH+(R@ zNK0|ntmL>dl(?2ipzenqxR)~npr0r8#}hItBQ-lP2&F693=W) z5V7|uO3zOl2j7H}9UL7XCnrJQZ(1oIdWtfKb6l4TAkJ|VpN1sYT*7cGL#13au{>we zZA0J$iA;rc#0r2%T-Zma_)|^GO*HbWB#oF?!3Jn)94h%@j6(B#nI);)1;8fo0!rE!PGt%1hf-QC^Y-Q5~};l zcZcCS_e{>cGs(>Ur?OK?RkD)GT6?YM`PG0d8O~_^`Wjq<@TDF0+ zRo`%248~6=520N*z+CFCS9>QMD#c1JbnN>4`;?a`o8gasSJEXhg|dMcwuEqlOa2M) z-VTU)7B)fB7?%0z5|R}${JqL+HMr-7GhU^b3uw9F=_%TxNpeA+Ihs_|M4A+cvWJHg zA337^$WzP>^`}lNmJlJ}dt`t(7*h*s5z3GDzl))=xI9aHFW||iPT`{;u7QmgP{kR!KOQCn_Gc~N}0Ds<<@#J{oTCKx~V_*`@#XLI2W=3mWOV#vOW88 z4w+{iaa?M!31w!dkfRs2T1_xkv5RCan@lF*{a-VFU7SAjsIj!e8a0G1gIbCWNzB^% zN3`i`VKNOk^=cp|zpeo|##%e#W8gqW5>lmCbjHHGaX%vp`2aeX^fYe=XB7Op{vS(P zESf(}G;jkIzqta(A62Q~hBFMD!P;@3HVe75Mdb)E=(5Q!>XEkLAZ$pMCn^jL+lzzc z`P4{Ks0Q59KF^St*jtp%Uy`#mwa5OrUnzMA4_5y+?&CE>fWJa$fRT);WxXWMBls53 zrcz-^;2=CB7yG2rbsz@svb5bde}Te$%Pr*+w~dKB#2zPrVdz5Tl$5ZE!cdxx?2~R3 zK(z}~d#7Oq_BImnqI(2&dcOBtOkJ-+?g}frI^2iFN{>wZsB3Gz(0QCjt>fypYxG@6 z_sVHVu5cc%X~2$hA2AT4Yd;tPFoJUPiamAc7Sefug!T(97wJYB{Uw0Jg!wgAJ2RrB)U*eG63s`Wug4> zH-VBYdQiq%UCia92={&Ggf8J_-B!A>&VJjN{52`ieRHOYLdBnDKqK zUXJZ-Rxo#vipyRyL?Y7#?Ot@+p;!}(5d${3kD+$gynt~59x|3asZIa32n2;7o8 zm?RC7_)b5b77HLk{4O2K)P>cfP!J>Pt2JW>MGas|M*2gCr(XtV9;_)PBNt7Z&s}N? zEsQ;b;Y_y;#sbdLYk%Yq_d6c~(FI4d@st5fKj_uGz6YHdMdQaU(hVp$xKQ*Te_DF- zrhg+ko&A*mT>={TpPOp`6(M@r^fXA4O}Lev^jqkx-7@OsejW+*)ITG|{?`oH2)ypr%Y2~8n> z#{6}Vmzsw3u4gMwp<_L%2>;5xEhGj9aELdAc) zy)$T~#EX9?(gBwWvfm!arN+XsDu@mRNowWt{1Ju6fl~E~=LD;|9dVBr-=uC@Gl*`} zf>SIPkM+tQcjYT}{Xg*J1=I_C*$!u7x0m*D+%IPuq`I`<*mR?}iYJu?scVt*gxy#V zk2mbjr^hQJ^!$}$Z_7Ja-||z%{Rlk~K8g;rhi>2gX|d3Ls08$F5ft4 z>EEA@$T}Gh*JDmg&hFtgV3zlMsdR7d!?_N6V)_U){rnbWj^kkULS-ty&CkfxpR`tW zdQ-|LAO+n*Ni_2MV+UVP@A@6suzTpqvXkiTH=EltUC!j+cK73FbXoPP!0D?*S3mRV zSoa=I83&s%4!a(8&rz;VzObvun-$ZApL>MQgqx`DX(b>OBBg0cJ*p}E zBNWx+oVc%ONaPiLGI{WN5)My55Dfaw=?=7C!DI_g;W18sB6fw;wm$Ls@G(ZS&Q@xT zySG3U9h~lEhMoOe+2_^&;T#|YRCqFZm)97#*~O}=EcDKPqP2w_pJ@9rb#)ZsB=q`Y zGc@yV%F}ef#dt{7ho7J}wZl>S)pC3v@&wVNVHbaDI_Dqf{o^0Hkmj3ebgVw2v9!pg zDCC<@w9{y_-+a8=U_S9L)w}1h0Fms~OEs;J=1q+ju1{u9m-Rr^f$Wzjq{f4Ik#m1d zx)%&j0S8+LnOoX$!EFoaZkg;fH^Qliqxru#d{8d#|7H%u^#kIzme$WssA99>qb_LeEq8u?u2`!*b(^IHtKhf6OMRoa(D@WwQqFyxZ@?~gP`4* zT5%^~k>ud|PT)>8rwQ#;wroJ+?Svxi$eUCJKMS(t~`jG;DkSuP*`%I7Q6`5AF( zWC}fkICx^0#gA#$)I|AjZE~dYh@K(p&HGJY7u@0dz>nwEdHJEoXs?LJmKXI^)92~K zdsMYz*?{RM%|Y()t<|>FUD$0~P1O&Q4!wDq^dv%o;*FXQXrDxl$%D&bR&>Rv&p%%H z&2#fGk3$>z;V)@VukNY0%8`%RI5ghVVHPn3;GG;(2fSx)Ro*vko&u#hm`6tpusDnD z|2if3Ap8)Po_Kf4c2{h5xOcg+FIAq!kEt&0rU+u&=BQKpGC?%cgUxwZR2RSLMjfdot4jaJ!rW=ciOH+?&T_1P4Cq& zCJi5EZNJt;MZsh8OY^nYo}ndEFR7BFTJbh~R&`75q((?3kE)21XU4Up_EHO`vB7I?F6c_D_HCW}izm{m0E3_6mx=DW*D0|+1zl)A zlX7!5*)Jf6bFeR^bCa$&9i#R32&0@(y?CzUm$!yp?1tvPE+0_M{@oU4cP2-4Xwx>= zkO0m>SaX62ADSA}_pp8T`)u@2-pvz$;E%___X8}$xL#fy!Ch>xokWf4@_T>Co9X*F z)oz6LJ$`~qxEB2(ByA2~Emi^l35S^1cdhLe02PZB_14mrBA=i~X^+}2xaD+z*K&X6 zS|$fu&G6G@VASz6-ecCw$THPDQ-%}Q1LPa`J0t%tcgX{GwLahUuFr5Y%Y_r4nhm}# zWYUBs)+5fexzo#Fw7Xf9-7P`=P$TB;o$nB2XOIPP~si_ntIh}dFeO8fET{) zl2Ym>E92mD91UZ1r%ngT1a0Y~L|3o3*kHvT_8*!}27vrf6uuF?JgsNv@=?TakK3U) z%IRS%?yKyz1#9r=(39WbXDbdF{;4kZk58+8vuo{pXNTH!PNfdo52u|hz-6J@Zmk3z zl`YEaxAm3P*Nk^fKB9b4ZL;fbWQ0EGPNLb;Tf3-Ehc~q-w@mJ}`%8a_>zW8RL+{I{ z&tSUSg95BRuY-0YxigWy7j~=gH>Ee&g}6>!yS=;5&({R{s81XR0oHSpvhOF$p^+${Qqw@3iww|@;~;1|Lnfj|JV!u|Jf)gqQt#W=*s%N(AdWLy)gLB z+r6;F!Nh%VH8$fNV#sluqewUqvXlThNBee z#)YGl+0MJ8RQbX6A=E|j^}lFJvje4R|5o)$)75l9$k5kM^g%N;E+_UfwCop-Gj`nV zjx+T@kxl$WL{a)p&4kU`!#qM>6vQ(AbN)Bx6dxqg513<=7`C3@BC_ltWd|e3wM z?)Ihy!Awx&e?g)u#|y!dB*zOQGB3o7APW@>i=rv~niSn!7giA4Pfr(CtD#;=y7|+XcnIz3i z@SNXGaezVhCt>q5?9R*o^7xVbN90^&fk%wNXhA`ef+9i@k$x~)OqRQGP|3s|Qbk!& zwj_>PSxhNKMGZA@5l+J*WKmVy<%@#?AFwEUKCYz;ZOq1ABGV$n0@zdfCD&^6fPVIW_baandU`{qM8=C8AH*= zW$fY+Lggi;xWtvr4bWE0K#uQ-x9%*lR<*rfSQNhrad=GNqUnFID5k>{H7BlPwjBg} z@^)SCFxq6}{{HIrGCg&_Rr@xa!%Rz&(!hxaMnRz#5=>j@%=MlFrn#n8?&03&c9#*?%wLySPcJ=~#dm zjMiMh4nlQYS5I75T|e!Y2oT3q+#=kzz^Srf+5$MW+}X&}BHT0JKy&Ws)`aZuG=(*zLgLJ>|oG(H9J>N^jTPzoV zR;|Ao_l#agGZpwk4AM;?IJ4^q_XiNqn`D}L{>bUjBg{Sqze2z{xg{@~fS#ZYbgn+b{P2Ml9BY2xAH zr-OUU{YuFqfTJwm_D6i_4>bDrGNbQ*wy{I(Udj)RVub9NiWrP4%|#MItgf^PU87>Y zV-I$6h4C9}HN=4P(KtPj19z&C=HymzCk}OfZ5Wa51csJs>KwUR- ztXzFli>`i|RGzU5&M5j%D`&9p$_Up=bpNb+5je+%3t24Wf%_K2#~0qk4gF=vC~jbY zQo~lj_lE2X?T1+$?^pKob~IiT6X$ELL5PFR8e3iJZ()}Gh@B`^Q@YOr)!A5#^?Pc5 z-%U=SV#rNHsP#MMJ_Gn7jKY+2OfvVAla`~BB8`Y!l~hyK?+Im#5_>hnj1rk)bB!1c zEyw44cV}msm^7{ZhmwGPj3(@Km`FIyShs-*GE{*kVu%}tuGi9~|CRLfe(;N+@?q9AyWjXAB+^KRs#(q*7Rvfod z<@w;A9Oe1fSj@siw2G2M3Gz^;69kwZVWT{DP#sGIk%~~$gy8%hMgXT^a;X}34e1oQHXgGgR z2ztMU1G-{_rrh7frIUg+cdY`tAu11e;Z?%^@%AE&=U4ZmwTl9VNZqS+W=Ldcn4-wn zPPs0rPeJu%%vOpGQGADI4FtdNs^fYjwR%Go6(7aD=7klL$}SYNY=l9M<>QUZ_37st z+*jh+1iTI&s&4G);^&Sai`Q+62Gp`rzu~&aSgJbk<6b_Mx&{U~FtOotw0j4wOd2D` zg>y@4lRqJr0&wvJhGiO$>kfkl;xl|G45nK)7Z#w9=K98cTz^(HScU549L^wj0pq?b z>$ygU34&1{nJsJZe~(%iHf$g`M?Y31iG1O%v*N5mfQrz%g|@yD5${i^7BMee_cdxu zh(KXHUt~wcT&HW4Uwe3e73j7p`dh`d_*xa#CVo#^&*r!?oC67z=SD*}tX&s|vxW9z zU`6<9EKu?t2R4$m9RER^MmpHd*5R3NTU=!uvo5$Iw!ANLmev9TmegAo#dadVw)mH$ z?V8>L=3M&VK^v$g*RG=ech#^E=3On6F)i~9MtE>%@SHW7<%^s(1cMt(=kAt?qg-&+!}YTSnoR2hAm0YySCWjM(}&B^|wMAYLbS8}ZVi>X5;hp;8v{hVo4rHlmg5cu3P_Nd5AyyK*ywuB(^5{FNYp2f#5TNx^WS_}0ZxpN z%khY_t)~8kdKRwq#$#IdLZUskpa3@l=W*iUZ$h<;{&R8=u}3(1+#1ZW8>+F`Z`!g=%a4mBeU{1IlN#f2|s~#Xq`}Hf!&cm5B?GmX*}7o~=H( zFboBXMZ_a^X6^Z2HDO-G&)D1BdVE{@4lWpbIj zT%J}&paRje)2aI9A9blZ48(UJyy_*x+(+s=7SF2d zLuAFb)JNit4y!HZ`*tl(R)-20z;Q=Y3f~Df9v^T})CLUh{jE5_RVSyK=*KcT)8)N5 zQN{U2Ba55Q8_Si-oC(`qdOZ{vGR91)1+m18==a;RYBn@<(;?o5C=YCphL|@?!gm~r zavc@a>b9;-62*6;*B>8!MW3*sbQ5M@T~actH{-#AlWiVw6TLv$WI9IM4k+tBM{01i zqo2Mi4Y_Sx*Q2L6+pTY4F=vw%>g=#a#`}3XKRn(u_-zThu9M#B+xFzQBij~iO*j!Y ziF@(Mnrrds$-f0|tn^&BV8YqA?}#}LK?JVFPTbR_4F$316ZzqMMW9xZHkDbg_L4);7qxkEYL~0NQK>D={g~QOqB}B6f3N1_)n}ki#PjJt|31G zhlW)rd!}~fO5^BB#g8j2T{F@cl~?c1Am`wGZo=iu(05gDZ2KTszsqm59Ap{MF~kKP z&h{q5$?-lyD?AxK59DXDs9R`mhbyC4--tD@ToUdkA;Z~| zK|=Kgv@1t}9jU^8r;ZUj2iy5nji*&UTuSX3so1+(A2Ta<4&f#-+K8CM0q&hJlr>z7 z1bTGJp31wFscIgKk3d_UhJIUE&?MXR?jPn0(#nbKETYgIe?{><$iir|*ftf!l)a~w zkxf{=DM!STxTCx6;lMxXnS49%-#iu)v?!kUrQ><~^mE3oFo z2E+$4XAkp73R}9_vXZIhu6=VFA31B)H#Vq~K>kJeR~1ii;g@q;#E=!}qGXL1g2~Ar=``uRDZirQ&r@HFSlhMO!|z@p=2Vf}b&_ z?Q){-<2E%#O`9-IEu(80Zh@+COpF_q7GQa~l;SiWwa}G_j}LE5TD=|gV!;b_)J8^U z!V^$Yo#INSNC!0>2!sqJ@cV)zOX&7 ze%vJD!Yfjm9pZIidy4Hy8M<2Zs)BPHDz{2$V5Zf!y0hMtZ%{Wpb^-N-7diR`E?c$Z z+pz!1k^kBXb*aa@^Sou)fceXz{?^{Xajl zr8Z$nFgh|sH~pS*SL~dIf0y_WTXV5I>Oe1LV$q$V72_O{S*UKVwQDe(Kd}hN#wc~JL2%WTNp4r_c%G_ zujhaH@V6l`jv@ayZ6601HH4ZRHiVGS*Zu$PHUA4dKhifrOihj5pFT7&kzZU)-p>{g zp%GjXlCTmQ!p+9cz~Iji>Vrm>1vUIlb;>51-cj3dy~@m6J2qRu=`b1+`4*MfWT4-3 zX>jo1Y@^+c-91D-!$?F#WKcar$6pzY?lvQRX674+Qrz{hy`aDX4|@g3by4TI38vZM z_4rrCQrmGo+srj@1(FTc9A>12-^|fHeHsGCv!hDwGPEslLJ9)+2o3EYEb~;@VsH*O z5ZKWX0&h**4?zh-ByLJU0RxSi&*}dmX@F*^ugb#0@i8zlaR$Y<90Lsow#u-1^}k}0 z+X{}+r}bY!0sC({KNP`#$g2N$_uzka|3{EyS6#eS?(urAwc6Koda-{SO1dG=Nv5$y z+rp4R5x_+!V@Ay82NTCglXXf-ma#=o5fM+uhi)BRdw7o$T`omWJ$rZChV=u= z^BcmZchtX8WznF70!IQ1siVxD#gXqs{Gta%e-Arq4?&_I3R5V2&nuuQoP{Ne_a|76 zgKP;xXAC355D?c*7UEtIC2;Ob!wy2;E`8tDZ zgu3UzMVbKH7{4*SQyvXE4zI-DGx{`L|Ap|dF{IRiwB7ooDgi<8o%7Ted*p*T-GAy$ z54g009RZ&nx^;zq@b*l={}Y)Gkovjm4|O)At3AwMeAMl<;-e~xu^`GXT7>6m2qwM* zOW#k4KcJ!AE7B1d^@?~me*`Zgz3C^u@C(w}@t9L;*sI#+(w9JP4_dc>@K$9|n{R-u zBP8gRA)J&tfQ35j`*Cb8b~yf<9pk>3loGCq0yu^Ofr5ERS9m{4bf5a~A-=cB#pOT( zuF&z8K&^+#i*0V*-9~Rg57#a+OHoomghH5q1p=C+Fgicsf|&8G>M$do2-@rLyc{5~ zCS}+AwK_ylwz&E0Gv27rYflRJX!AL63rb27bg@I6iW~9VgVo#-u`DiS5F%xJ`FQ!f zM^^A(e;ks5huOoV*<<>l7~(zX6MZMe zsl9@cyI{gDfD=LW4osvD`4afymLJS_EWlOI{OJElAh?S~zDq2(L!Wqs`_TbO6j_Lt zSwP@es=Rm=?RLkxxyRY$H!KH53Oz@{YN}7T>ZHxaQwX!>G6N-x8Z^ZfSkw~WioTFA z0>U@P9^j%L z2X)rVu04#@BKf&963|B-sz@Crow~)7&swVK!Hw8(O{S`qo5bgeBGnRT)k1P~Wou@L znYwF6Ka5Z%RJiEE3mE^$=YVkJfTL!Q2T28Yo)%y+YW54xhu{f@A z)0;N(B>mRZZVP$j@gbj)7Er`zZb%5f>872#d-(Qj+IEcr6w%_}3ev!8 z2=;Y(S8b)XrQK^)>6v;!Lvq>Ty?zeA*mN9d#uYQ_ZwY@G75K<=5KI>{^miR4HfeMj zw9|gR2D@O!ZiCrmJvn(7ikwQfE*Vx~Z8uZR*(TdfchxNSc;HdwH3-C%%nPjhdTi7?l`fP4t*zp99|!)w`p<6=Z&o-8E|>E79q9 zEYTXbttcz;E&ow$LoZl4ysyROQ7filH{^+v2cmdxd7wyb_gMvH^gBw1gCeY2#1Wh3 z?KfLcWF_8b0-c6rbb7n`NmdCr$JiO`bTf`70?mE>j^^!{?jw_l8n~Hc%0X%+8oro+ zx0nQvI``h@!8P4tO#Pf%+7UC5Eq3 z{-B22&ehHHA>I$rnCz(hG`BC(@Nd(1vdt|mkM4CN8_?-4?pC90yzl&jkY?%q?vt6~ zW5dQ^^yYDChWjR% z1({Rcc~GN#!scp?+{3xyR<6G6r4|1RVb+Zx)-o3HR+>);m+jAPEW=ms?y~!NS2t<; z?N8qN&!#uG@Y142J|mn9gS1B8;)ztNj(C>I3X7Ut`P;8QVV(be; zOX=gS5*oUFvg^Yl4d26A&$c=xOv7$Z5P1zch(XVkUOKDO$z6Ywx0H&{ z`#;_keRq-Z`{1p6s1#G3ypdWd4JAeR1KHj$kG${);jO}Q;paYP^;1Qd@r{^~M#KAw zt=X~?zS3$~KUXC0$mC?QC=44SD62B~U;5;wOdVQfAe$cjAWK#Mi~c!ecAv*UAya4p znMEa`MK`ymA(!~BLfs*b0(MF~bj}P0|16Q8Awt)%H~jz_{a^qJ!)-$m7-NG@oCz85 z7lv~GBj1$p8L`iKKREt?LH4&L4t1^AwQ1(zV#Je$kA?x97t#QqpzPJ5tk4tn&~v%- zy(2eEFAl+6KyHpt^{m1!)R|VS2-oO?#+zK%MwAg(EJ;U^`kb~MR3e86DNxoYb;~y6 zQwk@pJ3jAiA;ySTAN`23?mP)N)m$Oj<|=;dfK1NO)8+m^V7k>Pxf+1ao9jfGPv5N~ z%&sh<_mH!bPX3mfdKp=%-7j+F&3x&~(>*PYR#Rw`{=mN)X7TL!ZM+UGt1j&GU!;0; zUo-Vkr|1se<}3BSDL>QA4n+4>4?o{84*-q+UQdhqFWD1sSOy?ow>t2KcM6MocJhi?wpu?gw^ zmkDG9CP?F0?lHL5oT4($;%Wni#D%EQ8y&YnT!a+|UvmvCxm_T4P}X-FHL3Wikcp89 z2)USMskgs{DMT*xhoFhEL|sfbyeL_&&?K&?sFvXF_;1K3U+I?G_@Aa<9Y&X{#d9-E zL}DobkIG)k&=7Q)#L*cAyhO%2$b^VjJ0}mOM?Fl$@nK z5>-6gRo|Dn8X?DSx7-&Mf8L>hzu9fW`m9dR^prfeRUVw@Vn-Wb$BwFpS1*SMI&AK` zxy4&gC(XXp7Lwu?GVj)fdwSuhN(w@2(Th7_o7tl?xJXC+9P*@Fg4_CuuTnHWYMJJIQS zglqG}ka}~D^t#uo%XZ319|z;0Ex4%%?OS=ec=|cf*;(g)EO?UUlb~JZ-ZDfHRj2EJ zZ_4<-RZA}`m1k>HJ|y3Lko|~hme59@H6Z$&S2oA=9pvuiaA8s=a;v1^i+s?0ea1W4 z{4sW%$@B!+F+MeHmBxpD;jI6bI<*&{RD5^ zkW)_L10OCdvV$dVB1gUVylBk^@9#aKh;=Wuh-Zf>7b(4}NBD&=h-AUR%=^z6J<*bx z>#)TSo-PsqprRx1`~#O)m*Lu|OyJTqcCx3{>xy~HQSfmtE~#tp(F>n*wc6tRPkI-! zRM;Z-gGu?O9?9mKYS~ao~-rqX3jLRKKDTU;@XwAnw1>1G+b?yW-b$@p;0renrnsd$(*(o z*$VWwH159C-}0G?N_jk=1H{z&;5H|-^jaL`?cWlDrabm%IAZzig1d)Y>+5oqUhwE8 zLQmT*2S3{=hWcMT{cQ3^c;R-RwpKpG#+aKQUN!3k0zW&cKQn~aTK)sz;0c8TUV z5^nTE<&C6HDc-MZC}nbpuMwwc2E9&fOcK0{(g=M%6Ok$6MjK1s(wM<5{NfBgJ5bKG z7@RCtmUM>Np7^8Pu9^q1HKr0;OzL6<-+L}I2yh>dj~6*6j6pK?7ZJp=PHqI5!<i zSfFN^?yUP`at?m8?2#%Zk*6zcLooffQ~rE3O3&jH2zt{@n;(b%Ih_@0Ru3B9sWj>j8qez zVhNa2Ue|uCD`}62RC6km9~=gB*+8t9dcH7n?H+dRG-vAbUlZ|;hz%%H*B0^c_v9SY zUHr>YA|UzrkH0`MGj%~Wbc5p%A#6*VWeAWTL-1Zpj5d(rmN=Q?w-CAn&V>G!H-4{l z(^9X{mLu(2hWg5k77$a-DD0of-uU)ydz?J3qeF(${ABEW&{0qq#Sifz^_u1p0fldKr3% zMe?pFadX3GjwGei8sWs+Dm&iT`|CMMeV;EOv&A#(evrU9*YDnI;+PzA89sO>3dV>> z`*>4C8GK|;?iz)Z&8hikZs+% z!$ElwVBQ+?mPXa_&)D7Kg&g+~H+zRO>C{R9MuK%(e0u%@4hgOre#m9jG@Z{ON4OBy zzNl?+N%Tl`M|m7IP#A9>XRVl_4^X1cWCj@c3&Q%Idizv*TO1P}z7KMZiFT0Tf5~>%#L*f#<#oUuEY3?2 zKMhR)VZG(@eR98A8i?c%#n{69Z4wBOY=(UbfyAgg0k%V8Da&D zZ<575$CAmrEMr@>gjfjbj5Rr=TOQ;B z=?J%R+6*Mp9~=ZlWEX@t7Bpc(i|5=eG^4UoI9ODhXTE9|WBC#XHX6?MqUOPc7eh$7 z9dFw6tr{~8fyTs7OKX$(cnMIw)? zIBz%!`-yCEY?DQk)aKctmq|TRRmxaVYQbpzwKTa`&?EpKemO??j44!J0YYW}Rfb3) z$1)IP9tD@3Pvj21bgjaZqGkA#dUv6z_AY3xh&5ERTWu_T5agG9*NL;1%|l7`u5aNq znjM!VmlKs}Z9KtN0`#hze!07xvy5)ySS_fGnH_(6Grwh3^=Q;-S{piNTuv{DZoUV8 zto@-+0U-G0JSI+-?A5bSYDxbyO>0V{$VHDzzz&fTKP-^cl0D4qu(#l5dcX9$wJeTl z1i4wQwRT2(?Zj#gt0^iHq9-rcOBhY0{25*lL+9~u?vgf(8{+ZWmN{*B9OlF(eMgTT zR{r|e!UWT@f6QE3zw22aVHTC+0RAw}w4YHgvJKypUED)avEO#Wbr$kah{(Hhwhgto ze#c}`0ynM`03pnQ5X;8;iEtB-X^T8W?Z~M3{$G0D#4xpCr03@eAy>`vI%Pz!q|YI_ zk9*E)sH{;vugiy&!&x)-7ELz%f&kLW*fpRLr$O=)fh-<5*qyvF+0z|9?Ik6?DLHO`k^>C3ZK zo{%?0V9XdB-I>x1_|!~|qgr16{8lW&={yYPeY7Z`Y{VwSS{ut-lMLttBiMQ$tu)fR z)Np%N*0F}4VeWy#Au{8|b0o$xp3>2B{)JTqaA*_s=INrj{S*2MtfhKiH{v3@?R@e@ z_xha3N(3g0bhVd|;Aq7=1f!V;Z({48h`o@TR9$?+{K&ygy4KVnb2`gx2iiT_d0Pjh zFvDu|s4@ZS+OJw&YI5!fil;7jK+gd>*D)eSnAZtuuWUPVIYnvE&&5dp7MSHY>kCq~hVM#hDfh{4iekY{`p#pE7OT82g^FgmE$N_^&kvgL3&Te7+n% z-=tums`xB@f3ejK`pE`kbq(7j_g7ABJ$Tle^T)F4+3h^@+=>8!)AuxY)OsFZM~Z31 zT~vvzz*5C|BedK(6XQ#M?3%ty_JBvpmhMc6%?poe+C;-;rup?$5$0t_Xqh{tVDr#k z@%IE@bJyl6hh#u3gz8X)B3fK$cl*uocVqXey4l9V7@7TQC;VAN7Uk zg)_^CWh2@Rx*YN*bpw4r@yVFKJ5l%m5P(!xalCBi1| z?KuZOA_Q%S*F|9n~!VV7@NDd%;rk`~wrOqS<8KF=ug-ih?k#-FRu zy>IN4#g`{c@em;00j$Z3mFE;Ua|W~$JES)6R>yuc=jv{k-LjFV0&sW%TZhi%J4}4H z^IQ{n9Z4Ku9^+wfwNoV%2aDXggR|?aX6My0m{teRDBte?y+LItv8{}K5Lq)$<6rt6 zJR4e#zw;8w9I{q5FZ%{Io`2VPm0NXXVLCIR}%I>D95)7-Kc3mh(??F~3_Dg8_Lfn@t#04N6? zPk(6LeRUZjPE!&f1r143cd@dJ+*c2AHbqG<_P_~un05D%_&6}1{60mPXXP3HOS>Q0 z1A&pP^BW_W`2Uj7sDH6sinl!ITO{}8@viL9fc`kQsY4Nc3!`&>tuCR&vBbm#?X=OsUf!I z;-0bK%9T?hViDc80LmOv4_d9pw87<<5q>{#tLe2NtI&vpVQ+S!A`ve#yA{qbUJPCJ z+-r}Bja}fe*}$&uxt-Ka4a-kJ}2jT#yq5(q;7=_eso-GS1(-d z>avteI!fWTyIL45KBqSV?SC}RPQvY?|&cF`&cwqhdDOW5_J}XC0#C#)zCIUYnA)wzD3$$&bJw z6+op~H6hoG+XjC7+=Sa1|E_f7hSeC5(V_02+?;>qO!D2&{(c><+ z9Ktca9qPw6<&o~o{1#1jq?v!v%cqg-Gh1-TXLRP&_(`<1MWlsW8&k9f)`Q502h z03As98byWhiX&7VQ>HRJh{9yh;hbJGmF=PxfNrUPc*$Zoj~0C{dBL51-2Ay8P5WMNO(SM)#Vu47FnUNuH^IAr>Xu{{ zeVgj3alvxmFqMO!I-pauK)Se!`Ujm5!#EnKX?L;1lw zsi7Q^GdN1Uvd-KEDoO`Dqp)a&TI48pJY$!Q(R$Z8+3#j|rK}v3xat#u%UkhNviy5V zlLJ~|+U-UuR%7_!tBhL4eXdD^v4(c5lNPo&R@M+xY*4pz`r-rXcmDCd?`Jd{QC(3o zrJk<$`0G~Dt@j(*yJJV~#)9h_EnfF5css_biWd*gif6 zkV$O+-tNgHDyLeh*Kq3*npbrlLspyDRVAb>dsVnnXyl@}#2Dwp#xPC9SnS;iOGqoh zVXM96a;(Gw1Qj9ow>nc~rp1WFFG%qBSQ=i^Zt1hGY&xSb_{$dUdXD0|b}d}yN=6f< zID_IkgLcG!$pF(CeQPJ$%A|T}#A|#BdwPHYlMny6V{vlOZ+@%~yb$IiZh{Y{}<{=G)K$ zA0^u5Q#k0F4FjpL2nMziG_99prn>UWa$`2tl0c6ImUUJA?3%(Pzxn>Lh#pY3^>dQJ z_6uoe8atrVa3`f9VK;~)lFZr+x;j?N7NA&Jy|iANJt#*$DIsrEsH5E94Qj=4s$AC7 zyW^by6dRTd&#gS14doM2pHGDiIEtZ|;*EM(nmrn%r@0tKy6djQA<1hik?Xv5skwBw&0l z$wsrah(eo9Yzl4$imbBdZ#L%d_=10f=l?Nx0-*LKQ5scA@cPv@vsBlC4HK%nWCkR{Vzh1w(_Xt6 zRzH23lOh9toU3;=bT6m;`lTH%hOe<8v)NU{70FdDf*ppKW|7NfzaaO*%Xjn+4E@9^ z134=-cC-$np#hh58mt+v>#ejUnfp_ZM|CZkI|U96+SNf*>#0yp)73T{tQcj#<3ZG| zDXKV#nOcPB7GpJMBd&E@T`)l#l@5C^d=vq9#yIo%qGQS9N-WVWYvg~da#fp(A3X0l zTB4O&F0H|f-e^OGv4mF+FJ?nm=;^hSPC6#8=(9B4I@UqH*hz&U0ap%h@<)atbv0Bg zOcBwqt7DUm>lKsTQqdtg5hl$UhZVw}(^`_DuQ`JDkI$dA#2Z`MHQXiXA~94Il_pq* z)F>8r+a%0nZia6kpZn``ME0=N7cPeM+S?o{ToQIqZdNoV2c$sA zd&hg)zLA8JV9U%)-w*OgoXHS29!0GyZG2r(o3TU8M~4%$F5s`q5Qja4zqzx{_*mu+ zrXDTz&9&TdnG3q^d8$_e7@xw#Wkj!8E1#MSztK6w4U#t^xTZeoYtPqK{Uzc+pbk8U0q(;`Ybjb7{ABPTbOHsTp4~2!5P)9>G^%*##pUA zsW!50^%9g>G??*gkFoI{l72zyP@Q9mB8>tRznYiKY9ICp3|cL>(e`L^zxJ$IT8M=x zlYL7`eXpjeW;7CaIdXI0JGki&A+zN{P+5v*8j>Cz>0>+>*^aENQt%oJ7mKc_S0^g` z-MHhX(iA%8DP_sHm|0cQ-?V`e_?Ceg_ytgIiQZuA`iZ7o7pMEU6 zegj*!QyY?6Lo240qyYZ$KoU*k{5z8b>)qVKE-vtNMYwFP1-&stb)BBQQ-srkNxYhn z35c?-80E36v7%=nL4Wh+FxvMIrV`>;qJ0o*G+aBW|Nq6+J9cLRtzEjYRk3Z`wr$&~ zjSl#>Bd2!LH2a5^BW$(F8Fvw??TL(d8l(50#=z z_XDi3Mw|_DNO*G|Q-wCIuuikE9j9HU;vzH{)#-uHeYUWACp8#)4um{(Qx>5H(dPnM zBm5hcgUSqMkj?oRl3p_k4Y?wlJZsvzM?n{LWp!>IVt>g)i2cH!TP!+ihHZ2uM+-QC z_bZsVH(oP}I#yIDW|GUrJnBVg+U%Pw!g*-gzbTB%*QG7W>g=UlAmTtQEj?%Cvb!a~ z@NAGhG&wi7|XZoq7Z82+#z6eKShThT1OCt zuk!sPLQ!`p(R+KjYQQ6eeL0KJ;+J(BHK*eaA*_`3qluuA)>%Zxjawt|eYOYbsd&U_}!a)DJ18 zdY8&#*G1Tjm!%E`wXSo{9zt-iX4&Tck3ia}%pQlle^uLr$@A9^tr$-fXyJJc~!Mf@TyA( zwZnQ*y9W@VqQ+;BTKYQKXo)L*gR~;*(us7eCDbA#Rq>S4I%_u&B9gjB?25eg6_x3t zqbOW(f%J_V<$H2mpMNbA%U@vDaUX*42-3cH zFyjo-)(PJS_Z#j^opIgwb~W%OXB~!lLw+`|NTsRv9ikO2qZM`xZ|`loH?y83=Vg^JGEe89jS*KH z>BT&jC=RQUfN2>CdQVa9Gf`HZqv|dk4Y(Z&mpJ*E(_|4Q?6wkDlQi5c&0pMs$kZ|X z(^zFs)m$&w=f+R4T3;6Y4da4;5)N`wdF6Cb3j4h;3K57ix$Si*9dqDr+;f!ItSNfJ zzZ&cNlznhyV<}EaY{8e)qnjHCjREf0?w26~`!d&e6vNKQxC3UaCeH zrF~L_O~Kq1Ve0AAlN*2j_kLJ73*mmq-ACiPVbwc(`((^dus|#aZzBTlVfn!_9Oaqq zKBzVINC0F(MB9o>?uJg?rmJwaSA5<2Eq3B5_*;njVRKDm0n7AA0CEH29hQ8H=Jo7v z?V<5iUh~-ZZfDHp+sxcD|0yds0cb^JD%NQ2pw$dVjF3*Vp2hCclfmE&2CQAs)Ass^ zS+&*CncBFnC-AQ?x$)ZD*5J9F_TcN#nERj5Icu3O_H3|10cZZ=!uT+UEQQ1c8po-& zw-B<4gjCGxI}VX`wbQP90kQ7|)D)GsNMj4XmDC#R_?K9ljg7XJXVWO}0H-gV30972 z-t~Kquxmb}H6FXNBb!WX8m_RGaVvsBS-y+f6n+@)`Cc0$sczW{hdFZBTxPxB+)}YA zFNN3BPkNJo#fM$*{yo+86pjIAH;IFJCqMfuwh#r6h#r>^iWOG|KT18JqY4;Z5!M0% zLO!Ke%4>P4sT|fX!7ifm;co8vCnvK7IsCgvrDZD?fG5(L_fnPT;2giQ%QvNijuCjj zqMM$teI5X}Z{pbihwhhuAS{btF}gnf-Xkosr@P_t0R{Zv-F-tIXK@6R`ghD7C}FK=HzEZySdD@n~jBgvhHbuSV8 zo%ggMQDtCd>CJ5vy&qHTXksc@HNP>}EcT#lXs_RH&bKeiNGrw2+>{*_vhwWn(EIA4 zWcwJqw8%oP01HG$dmmcHb!|ibg`A#QRj|U119&OJ*iBXN?Cexl^KAq=4D;*5jCbx{ zI>4Z=a#HJKb%&wNPw1q#ZXZ&Lat23pH6A#_;}eu&b*^-F%y1qAOLuVq|GSTBJ=Z-> z;_#lDrrq4&uUp6LqoZRtl+jsogZgbYiu6m_ssts=wFEVbju|fzj#Tkwhp%NrdK*Jx~hKfgpRW$sCl4nGc z)QBwr_ZU9&n3`}%Ld7MKyd8Vfgu_=jCr0=mzO!`RM)zk{s3%$W) zh{}CO))eI;Hgd!V4wiyE0xqkQIt))e{9BkZB=c7uT<$~OlDp4CQui*!g}6>-f}4;4 zgMMS?X|5~DsPM~1Y!0C1jcQ8Q?e6+L*%xie^CeTY0WJc-pfw(O=Phw?A0bpJ5xz0xZw zCKf3Q!s`!x1q?FjI@^xxdlyslDCwFcAIF|7Z>DDzrb%j=+r&ik1ifJ_TEC`ex%XIK z)#6QLeH@5zs%%kywQvmKY3a>99cnvih+nC6SnFks0%I#oV|jqGME8J4zKh>dO$={% zQaHMAG@eI0C*lL4Qu1-~4SCH-NM_Sg7KOB!f6-kC16`Eo;cROZM-n*wfEbkboOwK0 zKA#!fu%MUVsaiARMZlcWXe&LGhvNE862nbtM^3mxshIw{*qP4iQ0di-v&vgXEq)Ey zW}ylm6lph**uNJ(*MPGdS8V4It#s6VXdZKd8C3+>I^YU$(U5@EnG8lXle6s z$y@fTkd7kMQeBe@*eUE`f>+!9TW5r=NCVNHye|#3L6XmtT2g=mpe!g*H)j#*`fAvG zx6QZA12-vU`kV3{!T2?zeLhskI4m(xOs{|Y9TqSJf-C-~gnuZ8HZS(yC42~ZE-@iF zB}`z(|Eid?rJNX`gcO7{650wQ4}{1fyRzdjLwT9T6S9CJBgK&-g5HG~IR&kKM;pG$#jN&vn(_eby%EalI8K%Vo3Jsp7T02ZWYL`s1h zco4eAMkQLpMA#TQ<7RLx3k6ULttnwml+x(+-bxTK| zP(7ik{=r;1>Z1PhyYby+=-)2$(gJ8DXxbCe+PkKSOR&99LA~!^^RLmcr(Bt32E?i- zAWS4s&_*M1$JJ2mRRtHuYPk2d*{MY!mfQfX--A^F?ChAC5DoCkh7UPYBQ@J2{e}mu zCI=062hUTOcA%rmyY9f7atIX5gM5b$vr28PxYv#FFQCMfm|%7|@)(3^+Mcpc{p|47>$IrW(DtBLD1=_7g z*^RW=p(Bxv<}p*2*#b*1#i*_n-ourBVyW)2S3p^o4zHp$UOhT?Hh6Zz1nM0{={>dR z(arVXo9v9W)MBi*(rz>_Z}k4I^K%;c9%%X65DayV5~0}0*SVgnZ0=sYcCcF9n`jvH zn#Fy$#f3-R@Qpag>jP+Byb5(5G%Jn9rs4_s9CI2Uu!;jZ=pC>Vc;u|IYpn5X?4yY7 zv9o&803FR&&N!#MCV?5noU^Tk=!|7z)el>Cqh2iXFK{zEQ=B{cu06e1pLla-SO*Og zu3D*`w#%K~_6~1GBS)ilsks3)8<;D4Ef+nTPk`==Uig}ybikL#+S3`!3MfviNW?~c z-<9aabHUbCtWv8$>Xtsg6X?GZ@9#herN0cTmL%ZV>;CLl5;xHW{f(BBc#rn8bBvr2 z^259)Cbnppoe)tX0wY%F2MvJ$mAt&Pb3<1Rs`D=TzQA#(`E(r3pHy2)OQ_oHjZ#SVozN}qBqlqzm>Om5TJ9NHXlv& z4QkxgE_ZvmAJetS-RY@pphhHiTh=0XyFGA~=i zpEoY=_S6izQF(tl^Z#7l-d()B87+r;o+9`B%gpm<(Kp>f&pRm|eTp8QR>eQ(_d0iO zK615oC}esR5PcB2y>kPq5Z$U`IDKc)e7CiGG4Om*19$u^zP{J*K6LgV1>=NRnMFm} z>B%#l6Q)PT(JM_C^cvXG96?I^tWb->gezV|&{QsYsA3LKPt+y?W>%iU{)j8qOT(my z4@Z_=533rJESdPfTlcTpf7-MTYZBz?Q&_K($nF}S{$5iifadj z>Eme0#$FeV#w;A1oI-a#k}`_;n}oGRnUaaDk8!f}LE%^o%`!2&Vrd;jXCSaC%Mi~Vt>&$|=Zet?4N8&gbaqKo1`m>7~LekY$a^~q^t!`kxBGBK? zyYD71^}WP^d>{!y=*|@f^l9MjLcmi6*04j=uLssdL;6g?cQjx>o+%+gV)917;-5e$ z%>5Zn>Q{;G=Yagvn+Ds{jN^@i%Nz)seh@-SDS{p;a_t)8&4=%3Lx1@Fd(3Tj&P?}| zn!{Nh)l&qkV-2(78qS9k|Gkdobwu~HRf0(1I^-J;VPhot%5m^H*$6RW(Dw}P!-e-U zocZ*x_3A=lou0!hi|(si)2)fptNq07!pQ9oY43Wq}+4(}}d)`2`8fUFOSo&S%{ zjcJ~!Xc!5x3~@mxaSy8~Tm#8|1KvR+9`ZAB0%3~*sE0C6PTUNN1R)6+?>M%y>VVAI zezE>ZaqS&*tVg-c3^U!0erF>bR{5!;a>{MPaC`-Ml4mrB9syS6kywiaHe7srA;Q~3 ze6Ux%!5SyJP(jmJ8LwG*`ss(MA3c(ztBCs3*8F z5=eh}d*pOI?3l#4ZChvZ-0aM1gD&cn{l&3_>h`eO-7at)`PP=nQ=~)oJI5rbmawKZ zcB|yY*j!q-8bOND_ET5X`@-m756kM;P59z)XmtDLRRjT6R4#Vpk1PNCxBlmS+RLWV zCvs3-l){`cN(LwN#Tqm(l5Z11q5fT)K z@NQx})wfQrugl_pJc@QTaXz$A2xgE76TvC@^hu-YZO|W`p>Qd{W-dThf`h!ljr8`8 zS`=P`>29~A(&m0~2noX>{%rbRFU8lPSmG*3BEx(T;UC0tzR}n)NuIa}BQuOQ=)4}~ z-C703VuEmw6LQKb-bbQG|3;|&GgH8^IPKay$E{BzBvK(=8%G9?Es%cZnU`|x zB>N?TEK$elt}49rfmS6m!Hj$gT$;8Vdbps+vY@YKK|QcI1htSpp6TlJJN5wygp_BiVtL0Z z$8axCjaCkIROUE2)$oYg!+nR``fetWe>Kp`)3ZV7UX_j2HS=wX({9UnFXw-X)n47f~!^zCBi4$AGnJg$k%e1oIn)ZF}Oi zTc@-PiNohcVIP(G5lQMPQ~0T2`jWSJ@4kMlrI=@!F5YQ{_q^r(f}lIqa~NSJGD%LY z-^O#)Nv~haV%ko>b09u22-+ohVew_3*!+#4O>TO9&)lmXa=Fo9+L9pgJ_ROz%&?W- zD{soLHTIeNHB}lF7hgC9x={rxy!?y7MlH#uV76l;jjek2-G}l*;6Tf-#-f`Q=4XQv zG!F(+T38&w%s4?n9FJxHNl=|n$E=b(RYfs{i}q+J?`ooE?m`@xf5-rE6fOGvH^Id5 zJIyZkGDP_|X6jn=SimnLgh9trvGz%l_RM+^5~KVrv^Gg_p<==u2T4AdfxH15rM(Bq zJ&UTMHX5sV=@99&odP&#H>eEN5L?PY`6OCZ_Rw@ZqVX8o>6q(rS3T3wid8`58gy(! zVw4kD8Lm+zaeTUoYqm(#l$82W-!Sc&sjIYtJoN;>9TUZYl6*?Nv~PhbquLs>T90n= zZ>1yn%6km8MYg4Ol#c=wuju;jWj(#ACWiPj8JQ)F^Ch&wbMy$2^`Z`ECA}}nX@64`z)_jyxJoEo1OXe z?{PuHRMOf~)*EAm?c(t+8XS+C?8B%0nP-++1nC)s)SR!plgsAuMgse+ugAknC~Ci` zbU(cW0j&(bLW-Y<@lOVhdj^4tUOp?<=zkV1`jiX|x(w{~GpaYA*6o#ee_-MtGS$5a z@o#I>y^acp#^T$Ly#WGrSU+#oHdp1gU~UTsfmR%k-v%z%fXVju9H(CS9Ipnz_1SoP zV9o%m=3k=5Q%z;(1|^4e<;M?)zY2+Be!o$>ZMj}{i=Yfkf!}QUl(0#f#bNE1()5?o zcK*uRT2`^cRu{skM>n&J(h*DBR4!v%H9dE0%b+8*gWZAv;gvQGSydkZ_Z`)vyXHOZ zg3e_M!YN5`1MPphyi(!`Rg<)wGum;_Qf0rCT+bT^+?2=IYRG2K|IHJ3wgN;{xtBC? z=Cx`rY2bcpo&ZWU+f-?@mV>j=y#!@ehme1(N{u8iDcIp^sUvUcBiVF+69} zOS$VNO#LAhdg^g~-=>Hwd3I$Q_@De8dWVcuHXQk*?);k4VN**^KF-lT)}!m@wM+3UZMp@V4F)Pl>!r)X+YzT~)lG`OnH8Iv9d(bARBpwLmIyA8NbktFu%!f))ql6B8~m>HwbWSWQsdjw{$?;>pxY;K2)@4Xj!y4@c(W) zk}X22CaVGU-AQPjq|wD@B$qA#$<&KMO~6$XCPxb*Apt8Z3ujY5y0=3fBAo8dfwq&n2bP8UQeEQ4QROw^h>1~zvfaGURE#ot#yz9p!wOKSg|1>a^! zmaceR(M7jcl!$IO;+C9U$d^5_)pk$b>l$i=Yq>G%PQ^=#GrlICCdnmOldXEQaps$K zLfCQSi**Qk8hw-&N1CP1*;TeNaX~)onu4v$Pt!TIQTWpWfN%qFjH^0w5jYk2yj?%87B353JIc&&NZno({BXj&KY-QwZ!<4nV~Daca1IT#JMXY>1*^<(l$#FaUo(rMO`yf>lW zeP$mpQylSp`>*WiqwB;tS~vMqYRxgjfnOrwgb84cpCPsZed6KM#Rxf(s?;*<3KEI_ zfqSXSY)UnM$O0gKk!IzR-^br^W0&RSczn+6-|DR{2m_CQnq4CtKbV{T7zjW(aEI@G z|Kly|r#Vf3yu-%clPWww?mVb-l6a|KaCi^%ICH!N_sral2%O11Qm`-TVl$2W-IGPU ztqNf|H03{{ys)sAaGyCN%>W(5N*vO@=x$D`F}-bVH+h=8ZFhEijeBpuG{do9SkT2- zPZuHy-fInoX(*#e^}7_1M=S_pcC^e(_eR(Yy{!t`fwsmH(s$=CJ0QLI0P>yMdL;aZ zqxi?>XkbO#Wc|NvK};}CkpB-u@y`+b55)3+uK)4~$!03|a zLRpw;S|p1K3}^6l&CH9lyWzVdt^8qS`I`5DWaMa?xgV;W%ucP^@9RBgUZy;6ngDC= zHxFI8vmaluJ&H(Brnlgkx!^*(nA+WXLpy;}%n9gLDcFO``W##B4XY#EHfX>XlXee*hsu@PE{ieTTJfk?# zyiMK?6w&~Vw=#sGZIgv5pUg?EskM?w>e4&nIFoinUgU$I1eyWxFbP6Bfh z{|TUJ%h3pc^@tD|9m z>Sgqcxe{jw9aT7w0B?i|C0%zJ%zRN`^vDb%lid6{lUZ9VRoM!*NLv!=`4o?8&|uJ0 zxCH#(+`D3CmH7kiTodeThB!x3psZZ&({J;E=nzBh(H1ocN3pHz6PS=_b2luoCdW9R}EQP2rbeml~ zPge^>YH9Y&0S3$z%)#4vTPP1ZW?fhx^0bNRz0mG9cB$|Fp;yQZ)4xm*t&7u7zsKZ* zB!b(WLr9fO%g|6g3=b9}^CYqqxh#qwwKIs*>;S?2ZLM*`Q zo!68_Qy5Y?vrW}&LBI5^-xdrMXpNM&)eE5~pc;&{X_m*knVOz-D{1P^L!gDK!_Ab7 zc$-+-|5!HQB8P90mOPDxPe?{T+>-(wR{Y%iD#ckKzXR_qs&u`DLc8Bl!#SQjaG)@_ zIL#VLM=NB`uUKDw@{4AkOT4<7R!!^;C4C*~Njum&NEj2^$AN zFfWRi`v=Zi4F35j$@eG-)md3S&R*tMqUdxobgZ7uKHeo@eg`RMslPeWWBmG9lvJRk13uJ3ijO_UJ`K*+4Rw8S2lCV|6Z7c}ZTxH8q8m4q+iG^$_)bM{FOu>-7N|i$nc@h<{F_ zEw(qmWj#tV^BfbWq6eH+>{0%a;#YgtFkmT!=(*rl{@CjH1K@r&ZoCb5g>o66-dHI2 z@vwH0a$ZJ|h3{O}{+ou3 zO~PWP4f(=<_Qh(0sf_I$lNjcS*d|S>(AI&^NM$j2UMw+xaLcH=7MwTTFmKZtmQ#RhQ+`+R$U_Z`9oe zIRSXR!b8;g;gc1nAe7L`Dci)W{c3rR8lG)Y zhqOc;Q(fxT);Y!CZjVXf4y}>X>6t{0!xN=GS?}5u0rX3(d)K3ngX%!HI1L=R4h1|k zJp{q8L}Mv`Js8E!Z@9x_0 z)qDi9d8*#2qoETYElFz!@@o^=Kqi}!SLJPAJ*BSaUx#CYY*cyQcVrWYo4Xn0R|+_N2J2r3lM0^H6I+=0 zqaI&|{X39IW>e)gEPl&n%^hE1=)sP6un`i)V;XXa!nO+pL0mroEOfRZYPLGdhrr*Nx+x~g!J^Pcu{Gm5es^{ z=*!x+SH}2{5*O*XP`fG=f%-Y;WM~}4hK0DXZ;skuQgbZclajKDAgr>*4dLx-!MxKb zY>QI!(ozVApvs?jP5d!+xTNEYcj0LhSrF>Y^T+xuy(o&!fQxuD{EL zj(s~kuTu*-jz#K2zzf|hC1$s;qXs1*9asOh&3YjJ``hYsCl_pOyq}ZYq`IbdR1EvV zI@BO_Z6g+^xp6)X@i7$)>|!OX;Q11i$59ohDL+bx&z!aqgYC$-V4&~vxp&&ydE@9i zxX|`50xplDw1F`H-NjREVCX@6?|&;hd``*PaVYj<^-MjxyOF&OA| ztTCkZx8pUPn70DWK@b-U80P}-0Q7q#iq?(|{F7THa?jE4yB4sbAFWD2_-Jn=lSRLt z)XBFl_N?f$I=2*iJplpbu_1tj|K{)j2&RkRQ_>HwT^@D68O_&-**YFd{}^XjGCxK+ z!$yU@O#UH(K!bn4qP&YD%XKuZo~PEE^43cKFa>&c*b#gf1KYU#>_M1IT!!IRBzPrv z@Kvtla+^Ies~FP_!2Y`+e*{!os-B3G4=iG5%?*Ib9veOYL)1)>AEOT2IOHC0P)%bE z(be%o)sx`*M3gB6ucSH4trEf7N>^|*?EMIS=b|PdhVsAKjTP)6cn}>QvyUg(7PQv; zT0LeHeJtM3$~Ax<4un+*X$66lw)2;mlBucT^FA1a2+2S66}74z2>dJgEE$6=(QKoM zmV-F5>*%P}$V2g3J-96`X~eodT{Jf}Gm$4prf81IU<|5VaTAFR4#s!2KNSl(DfQhrG69LO3x zeUKB}=-MI7-6U0skCpKB_UZ3_j!m+{E_aBMoSFk>H}_(zhl)^R$D>7DT1uU?%3Gjme)vjf=O~s? z!Qi^iq0?XVfP?c)C}!Amh=ibSPkN7?-%rICu#u28fQ1synJi1z@9+DnJ!1PfC(KI1 zk;^gbn#D2VRF1!Ik+zQN^W@f|Oc2O*!WJa!a#l@crf0$4>kms`R3Ssjg?u?k%504a z7cL+iSKr1w4x#-_GJ2L#C_2~vAqRp**Kj;Ng47o1@}DS;{@gRj&($1at*2AFkhksi zGSd~WCY7!(5J5U*%LFz~8!dj&NFL>XnQdk>|L#Tl)ZvWJ9-+xG$Zj#+l~J38coEzx zBCGbeIkIDbDoUWrl9s8WcD*t*ax#MnSzn`xOF=}c5)48ocqW$yx4hnD++9?pl8Sj^#(N^br?zHq$gfR_;ou8)8v-gut=xJ79 zQ!7ba&cGg)3<$<6$A@>@VGS=^Bb_Ut`jyUvc}90#R&I7WWyB9>1w-6$ougA0_^Ip# z%;ORmf!{lRK-Uz}o>=hz5&CIpXeBVRXeIxT&_`SJ@LqAkg}mKS$5)*RO@fInz$X!j zQC4mkYbkMEQ;oC>7mcScXK!AnH5!~sQo8s=%`ttVO zx#9ot7UV#prI(Q=oxl{gpJ?xQS5UvDGGJMMMZ7moAC7+azE2m&V!;|-g8TRV z^59p_A@sR>*hhP+HU2R_erdTyFOh)ZuMbK__TW!V90p7q3fRL))DdjmUWyN=a(=~Q z=15s<_h?#(x`Y$=xE_AL0Pm0*Px92$n}%$G^nO(I2eh@%v8$%1H&A!!-tcYOU9x3| z*!D~_v{>fUhq5EPo+BLYH(d@7ZYR!AJ=D=3QMZ4CRB|IsfA&amdPQmqGq>aIJOiut z*t-c-+UK8w?|+Xl$LGr$gXBK2mfro!1;DN}2Ej>>MLrF^8NpF_ULQHqg1-esW6`7nEK29s4QujeZgNH1bA7vP~f|7n(Tbc4)vo zyvFMKhjt$^LAUkL%O`0nW(Vn?DL0eK84dSPVg0uBB=meE*bQoTI%}lrl=b$Niz4$V z`+p38ng2Eb82@7c;Qwy};D4_FHUN@7G?1YR{DFZzC_xJHl>dNGz4fsQ(}AiAB8z~q zN#LNc-lm}z&K z`TG8IlX~Oy4}jTiB1V&OfeS}8ONDFSB0!ou#Hf_sCg`paJi!j-M#kHX5W-NOL zK}ZN30gc*JHIdri%=vC!`PrXzkc2~W<4RLn+OZw0*3`kdrm}E4yS%O;1rs14XuJhu zgMa#`fV4U2aAqSr=X(Elzm9l84+2@UX_mUkGi!*c>!v=K+Est3pWOm@qQ~!}U-2AT zhdwMWOYzcr3=o6pOLiK;l20-bNZ)J%L`lKb@41=P){NTc6#V$7$R2^oQ|TBw2Y4>?;= zvGP@cGAMX@sz!PS92Ok}x$O2n_>&UWIUvv59PS$52fYti^fJ)dRua#K>Ww%W@UC<$mKez;irWqeu(!e}^mT^HBByNoEP6|5(61;||~G!Basjsw-2N8*)b zAa6u!NpX>P9br%knp{mpqE@9Tx)@QC;)d1s65!>9qnBC78VU$6Vl=ibsnQ;e_Y{I> zI^_>%CFqT}aX2bReEp4h+XEx>(Gm-qI9i+Tj8e9}!J$7@cjt4pe>ly)h6nr5X!udj z-t4{`MM@c`Zo>~_XNiE>$_oG5v?*+~QSrTK?Z3B znM}2-uYRmgcp6=Ah75V%{^~x(5Z|jP$`4dqwYqq}-gR#7B+wXj18X(%Dg+{aFQ^8z)JSZ@WYt40>08NMQIn3_7#JNjY^7iggr$KtjD z-2CO?Gu@h^APc5Zv^~0_;zo)?6W)w6oo(s6kzC84ec0mOqGcH^Vvdc9MS10?>*InDd;6Tix> z`;f!s@XZ=h2FF7yB!T+cyWE=$IakZwb6<_+`&Etf-r6>@ZB$^gcJrDrXTm+$@ssxY z`!w1=;tl*ByKaYvXgiahM=0rl_l2QGf+@ zPbLNb&)u_}r}TSD-s*Jj3}r~;pMJCb!=I5%QK+h_3$;f#{ZEMQSA&~^+!8H(`9s!f zUk?aqj_r1%^c7^B$0)OJjM!$m9*KCeq( zZ_|iPX{(QtGUnj(Ry1Ji2Ca`dl#01h7fensDSV0PR=9zZp;r4zE#e(a{q?Y*90VsE zbDoQFpiD&h;VI!ReJI(TN0r@=xYgV0&3N5}pl=Qc$#p&AI2hIty#4)oS?wxM+Is## zU@RdUG8$U~s;20+qZ#9xl&NtR0IS_J3Bx~^IBkm}f&!TPV{7q~waEr?nV_gP6%8zf zK|C(0HiPHaZToZ^oZU5|f3B5TA?$c&is0HOf+5}|AjxUJy)rn{BRUbRnoj)1U2Del z9)!n3X-08svaS>qS63?_!4ei2&{roPM}AYQu#32(QQv$22WDE>JSK!k;1pUs-8dvS zUODWWxy0GW_P!27-J@3|kk6YF5fP;lJ=HU)v@6oF)Va1eFsF^PzY6ZJUMB{f&NiW% zf5)}p{(E#){`Q*ni=sS2`#!N^6B)akiL=K$FFFqCH*a0Ew3PU0wqXX%RGzEn95k92 zEyqo~*s8t0=`6)Wiy{~kuBPFQejKxgHRo;}Ve9pQ{(^))L`0ON!23o$lc=(R5(QMk z1*OB?%K^Q01U|(t2BwCE3gr(ZQNet(Z@Y@X8#R229F{>0T`_?mfJ5Iq-6N=K_|WAnCG`@pDN~>p3@Z^q+2Vy>&`L zKoAMPCQi{Bp=o}us$h)NYn(uB@mFA%RG~`pPPadv1RH(#oB61ZR48(|FZm^R9e<$i zRoUTRN`iHTW@nN@<&f`omqzy`>~E9AL2qK#bP;O47;Qi#M|f_>UTbFs!phck$$57c z=w0A`d66l`Z|{%tr}_o=r?ayR7a`M8>}^ZYO?>ocBeyRCi0ohcpW#;PBA0C?lC#9q zidOG2M!^-*M1I|%W=61{vn^Qpds8J%jH(;R=l7-WTz)J~=iQMV6~eKt1+UC09ouvV z>p*CWRf|xCsE#XZqW%R}sJXk=P$lTe1J7YReVJ4FGGn{% zI>^qML2Hv#?(HPk@?SSUS8Zg}vy{t*I2VdxXfpHGueIl`;_q`w0aieQ_orN>f_&g2 zQ^?;N@XlWa+?k6=8mcpmuE4OauLM_jJ^8)JsF0hj%=TR*i2=3fmShq|G3pQ?La`<2 zIJ#i20Ea?9>chk<1kJo77t3o;8BZ!!HQ|lR)iJ~+Eu|f5XsL&E61n4CEESs28P2uN zemuhnYBpguuW78G^}E-J?>P<6U|-bjG|bNfD<g>S_X(l-XrF=`RBLjIacu%1JhzN{iF&l%+%f z4-~pzeY`=hyYH5S&AxaTX&hIVduTl*;<;MBZ>votaTYDrj~AKcSRQ1SllFKEyQ}aI z3zS3+27vns*C{fvvabzCy!D9dBLfNed{=Uw2lazasg1}9GB0mNeuD+v;Dn*1#VLXx z+Q$V%WO7hTJ@rY|t8{2m;AU7;De3v()pK^Q09!fD<74#{hURsCl9T{@aqA8nVYAGj z2sf3=6YBx{ynBr?saHI$On_^kY(S#uaJ8j+bllC)FU+;91$hEuT;A?kWFR@_`;B?HV$Y8N#h2r{xP3~Wz#N||7SF4RU#)`l znJ9lB-~CtG<+dk!-l9Smy1%j~WpEG~h%kpVo$&D7wo_n6MMxr$dX4(}X}96;TOe6j ziT9SeIS5MRGxg}@pbl@iVrf}yvIo& zK?pKi`6t}O=nVaod%WMjw$7Z&Q)hdqSIDvSTm}a2IlASDxu+s?*urS~)Dg?%q0al4 znBVsROSRReqt&~tl^H>Av(=+pBPWjh&%(lizixj%3F20}`~J7` zpF=^*`WNv(g8e@c{{nbbiW(;5twIPWz}an6#?4J{SASo>1LsU!7#nUKs0atOSiH=c zMv`g|cZ+a(6-+z|vzMjks`clAf5+n>>!Ig?Bz`P5>4y;6N|?=YAxq&Awl31{Q{3lE zz!b74AG`ZZ(t`VMggL9xzld%~wd4*>1#{LigeAiMEf(#w&#a=ufTSS2^pC#Fd08Q4 zEqyswq8e+8}zxEzNk;B-uwo^ryG9mwIF3(8yFG-C%}OwlD56{L1TU+Kw5YRyzLq zenT{^G)YD%TM;a%mWUigd@|l6Q9y@jDY6IWpwM>_UNqIfPu7uvc97S6 zj7n6V`LviqgZP4&qLB&;7iU(;ECWS-MofOIbLd`OXG zDl|%$Od*X!A^QX2^)i+H^j|Rl|EKm-|1H`H|0}ispX#%`paup8>`#~| zcvwU@0u-zqJQC6!MA4)Sh7!#Jy|uMjBhW9Uek2Af7L=rhh7wnpW?grA)M6#Ff=nle>mD9u(L(zOwgSYhzN zatV9|WimHuxL(652jp_01{8d)$MOcDZ5|v&y=iP)KInq>!!hmvH-UMJy23bs1$pHr z*F{@DtU^O9luk15}bQXxG_w5E-3R3jDr_V+G~m;kY{Et6I!Bdrf?e;K)qtXxRM7#hZ?4c4aO4 zLvjSlJkl!7*pxt90C0Hmg7BY)}$MFDtZ1VQNTdgMbTQ3jS#eyAN^AFUORl?T7J zvK^{G9G>atCJHQfSKZpJx)7BkfTC+0o!({fJeh$}z z+Z!r-`ObH}UK6e7B51|!`g-8dRK{#S;L83NTkqJV3A8QgCMs=PRcYI{ZQHirth8<0 zwr$(CZFZg0eQ)>f(I4jzSYtdhR>X{q%fOnmxQauaQuyu*`x*$*gt=2BbcV*~FY;AH z_slMIzq4_yo5Ypnl1l2e1w_@@f)WL5y7Vb$^s}v94Ho#8m7tld?rynY7zH@n2Jli5 zabpY#!EER`Yx!(P$Q2J4Qk1(A38}>34eaO+3g-$@(*$67Zp-)kioB0Q!IXp1q$ij# zfmE5rxQxSBX2-cd6l<_Wvd-@K9LfDU0AN9(VyOyEvMY;nd$Gp7p2^g`^WFoj?!}JB z;b4{1;?|i2=E`bz>fg9HeJhE$IZ#(BupK2i!i!-2LKrHp;DDfFV8g$mWs_piI; zhb>LOMglz@iyi|%=v!X2q^_ZE7@gMZy(x^LQ|*x4^i@i+v|ec!m=^aAu&TC+-6J4*v*MaM65H=M_YkZ((YHu z3O4i}b24vs4LRrySvr{8EJiMH`%F7H{%+7ip+XT@bpdk_ZjAj`~1sY@1q;NL# z=9oH(BrLl&&`?pK&axN#xKU6{5a6>A!Y;ZD&Q7n!J zouTBNKev$(Mq|oS6>;7-cP$SioZ?6HX=6ICMc{0amdPr@t2YYVTC4t&XL7EO5oPqA z`v}9s9&xFA3Lh;My|!I?XJVAfAT{@374WH;Z3*EiX64JqH$zz<-`ROFnhoy}TTffi zq5X4;M=+Nc>>AtAjM7@)so0_SeL^Ux0C%FZV685|m?u80FhNDms6YC3sHCxdvnxnh z3C$e)Nu^Um!VMVxzqlVMnVH6K^m^c(+N(6H{B=E+7z4LAY zmVa+$EZ7tJHIvaITnVOK2e&>mg`pUL!1LO`1smDOLEG&Cid27M0LjF2#6JIp`v*sa zI+(mZFd7}f#He+2t0CUxLqkDjH4iIA<*0bUgW1=E{KtF&@t^B`nkqO+}tQ!ZI0t zgq#JDJccNbg7SHM;DE&^4}@BUCQ55Kper=q`g&px;i1#1_7@iJs{_KZwD5v{x)4;3 zM%2y36)f`Ca-<4w%+d6d-`-U)$oPnE#AbDH>&l+qI_PCFkZ`L~_0i&KrFXQ)#f1z0 zD5YMsC5Z95(~BN5sf138^O$OB%5a^ni@%n*?%{BDa2x~%rQZ)8E%uD?h?28f zv?IqD0_iV2Vj>h~a>Ez!Kf)!W)Kt*P; zAj?dgBJwinQRNrfJtu$7OU(>NY{)o#<71hZLH^xQ2vO^cG2J26r;#CZ%PuVHt5%8c zXJ3nr4T?WkIt<(@7kD5FNAkBj0BUrU7{LaZl+;G&5TC9t?s_+*Erb4cH;sGt#V+)86lp|?PlnuJUQ<@>g=NC3`H&mcsy^HC@QZ{5pZ47@0ueaS zUm)HNU;6Me^Gjrm#jwTnHBUac4YKv#d*0A@%x}4%D2UKpVYxMmXC4Is6kaGXne-3o z2NNDM4q*S7FJaQ8V=eu65-(wp9;KuhSy1Qup_?Kb?45N+T9ygTE0}d_XJbhUZfMZzCB?4U?0zPcMu`_|HB>^{Q_0u)t#-7PRq6zlBoZ)EuUXF1cp z;=J$#$nQZ@A0ekl1@9@aoNp^i<3u$#Yhu?$hBQaXtj@K>R3bfZ%-rZuP1 zOlp4yT-9}`GtyV_^Q2Gx9x+I4sn>|TDSCb{z19FoHb|JsSSrKXJ-a}BLDSm)D$?L$ z>p}-J-FKiGu6|~P&wrb7XOg5^OLEguq0mZg(b?*==r%c3yx5!||`c>Cm;mzwtkl}~3 zE1rZgbhmtztb;|-(%{9O?EcK`?6FkYvf-6MuUl3OXhDyH=*O>D+h79>! zBi^ib%+i#9L#}m%diF#`rF&(lQdK`yM_BjRF_z32Uh zHI$Op%`GKVaRlm>WKEnn1yRQh!%d73-L@KdL2I|I?M-u6#9KpNK^N;B-Tj(wTYs#8 z?yozZe$vCTy?WaHj#0|nAA^N(RL*jZo+>El64bu|t)u)PriNIsgsu%jzvs2PqNYhF zH0<}q#FD>^D8jh*03-e~!lOD1@2*N`k)2(j(fUhFLSU1~({c4a2+Q33?&vy6qbu=_ zJ;v#7wk>RW>fh4JO^Y_yJ2PF=+G{O8Gsj#K)^YL@+<;=%U%O*k#7$S11=PX!elG$C z^c%GQjt5Pu!+=I#)q1V!-ZXTh?X+6Otk5fGc0-O)y_lC_J2l*ZkO=kd7Zz{+q z;0MA0Ir#tE*<)eQzQLr?4nh8}oqc{xD$xM9_pW7Zc%F1aM{)vP%et09zT#43?GDUe$G~)E`F8KaE8A@Q1<#Ze z^;e%fHM*DBAa`jF)(J+>oA~Nlsjo@k3+zJ(wHe|KKG%#)NpP6yWjX+h$cd8X5?+jkbZiZp7#dN=wDKYmiqr9`%1 zz&qvQ7&lyFOjo zCM)m5-GaCDY|;cAVpY1MVXHkFEb+tezA?T6*NlUTe4kM(OmPTmT1ku)qx7Wvqk5T9 zvu%XKHCBcx3ik+6hPgJl$U25^!K|&&jAIDPa#f0VrB$5B>R{$}GV1O}mmG3^GKQjw zcUb6w##U)B1Odh2hiV$S)c_Fl4f+$d9yt1Mm;JZoPSTepKeKwe&P{YA zY7O(Ms8t@C1U0Tb;V&Y{Sasl#RIWYr$**sMd4kdzm6?ylGAG}XcLh|RXT``IQHPow zpip{3&~f+lFdisn(xy6S_VIfuqz6lN`Vgbc2;sz(mxZ|^Vws9}Nt5T1byAcc6wCD+ zy|f^V+ufmH_O0?1&zwJ?-;O%?uWu(ls{k-(h1FR3ul{gM!CKY%D%-ehQ@YaEN=4WWQuGMiye z8l-ae36w?%_2(rpZIU7}Ej0)ghgiWXDl@VI_;xFlodl77lLIe3Ontk4d7aq9W$JOw zQ9Kpu?5hkNhP$?zH#(iXstMU_Nl6>X!Td({j-!Cxw(CPA`Zlm?3sjvQ$&t8r#O6#8 z*PTRfir2Qpcri3$sCS`f>=?gpT$JV}XS-MEqFVJ!c?+B86iVL9q!Q|=T zX13V3o97 z!dPxxdjj)D6LVA5*mJ}m!?)3rE@EC~jJ;#iz!5nn??ub^)$Q9qE1!x^_)ni|RSB#+ zG?hA4fhH!jY>!qQDCMV@y}QLC9J>PnM~v~1iF0}0{Ac26HUw{;s@Q3Lad+ANMz5yl z;U?4Q6jayC@PQI9WPF=N-5t|l2qO$TtEkS-mD|#kZ5L6D|!U;qaFNEC> z^Y6M^4SLJn{2d5;qL?TLDo0!DK39GP4R+M*9jlkDUe+$td3nx%^Vc?}AGvLAv(g-7 zV1OO{Idb{U=4%j663Y(s+JGn%57kNtZ0z1({v=^=BYa3cq+or5Pxn|@Eq$)1(GMqK6BQ%6w5Wm39zAz zo7`@XT<&inHo2Uu$jYLUOUSQTPXUA90OkUbhdP8n0Us-=_Xz`Gjp0J?K zl*b3u0luQ6NJ;PcVo_ff`q1+P`}urRdsCVc?&NtA8H6Rz@j>vqwRNDq1GGhfZ+b-$vr+%NRPmEWaPo@Kwxzq>*-DsN)4?rMjc(aEF=4?CU<&5Yu3$tcSx_)EHv=<(cSzh5QafS5dDB+-9WJy@1 zhyXPuO@YP>WO-Mgr)*yCIbhkg)NMsa!%BV*0oaGuFp~f$s zF(Z3uQAx7^dV!59EIrSrQV}}B&`O(J`9o(D#3(S}`kYf)CFb5?5&n_LmrP!`B(bi_ z6@{$}nY)mvz^pcZ-p6KZw|yiZ-dymFKt?ERD%dob0Q9t;jLqR-3(f;hzEWscV{k_+ z2;?(d>iWu+RHhBT;wzy@-P=+QE|eN<6occ4fdqsY;l83>I$0+7N^$74)zXTEYDQU{ ztTqx#EUM*pU8Q)^@Dz|T+Tr{`^o`R5`qQ-LKlbDnHO^pwo~;2FAd!9YnNr5zpFpqD z@zlB%y%BtZ5igW&HjAr+cT>xhTB+Sm>P;K?t{QmKCatEh0U697+685Fk#DbUo^2%g zkFX^9^vTVIH0Ea~4NUcu`KQkO$(9Nm^_wD~P+C}BKq8N=Oi>k?^zBYwbJwSza3=f- z4KjB4yL||51@@^TSg3#3$JC%}2&hY_rj_EgSgg}}AKHA=BaGTSM0G!uc?h_tb0Fw- z|9Ymk&F^i+eJXQqcw4#FR!$Pk5Wm&>0!;F|&^#Lp2KeTtq{JKW(iqrl3oTre;bd(edD;5vE-qh;{owDClM*Tw5=Ud z#`S3>3h8r77D4Cx`yS#~3>FJWw1|(d{m#$^J0BQz3}4|v3(o&Wh{xhj>h(}iy`%^ zc%sG2Q16uUFzKZUG9c_HtGgq@=#bLB$bGKo8=aeI3Mx$3jxcgN5b$Hv9;~7Zm-4gQ zYliHUgBbT|w5W1)`PxWdg(1cJN<{w2?u}Zrn)v86WaABI;?z&ylb4B7HeG^Dt*l!6 z+8|?#KSlsS=z0~yf6zfyRdk2+`WRNe_V~uf(Diz&O^H`W3ACJKZ|A2SNY*x7s@A@;CuP&|RY2l34#2xgth933A0dTj@ zGgvzr^n=?EWEDeh9f3((kewc?%p^|Pw}2Cp_my7isTa=Cjor_R0CaeLNm}=tup(S3 z&ce^MfjUg~$>)nEAIaNx8J?bxWmuxBKi*&;?-e8#<+_TFyUNQB$*#h1?&SE0+26FT z%(a{$;jwwM>6S4j1^%KB3XPXx31U@mJw6`>z!o|&9gzk4dp_m-9Ni90uX{*Zgo-AG zQ742vEw2)09Xg!kvpN-@)}_KKoHP^A7iX;I0b6hxOv9msQD+8$q6WaedSizHVIWZl zeA%@vrQ)K~jszg57-pZidp!ZZ)kupTGK2;hK*!@|ry`B>t@ce&Rf8rY7DAMKINpDr z0H5Xi$i*=KZD);zLc9GXjaK-71M=LMl!^jSuK`O4bq=o#)k&V?IMIS)gYs+;I~w|5 zm?Xp@euq35B2CP|P~(b0kqz`}Fo%u&p8=U)&=vt@McdsIT(@^zC%WvJPIi*o)|n6j zvDH71%%M>|#_q1gAH-=phbeC&|8{cUczvJByLX|4rx;O}zs%L~V}ux^CoEywWGTwD zci}jn&0<~Ack#aUZPNHLqx;x;WqHZ6=b`ihL?O@Ta~;f%ArPCz{>bCx$IwOA4C9DN zlk~E{bnb#UKCt#NTFP?*H3;|89jW=Dq}lV*Ffnh!R1njx1svXNfQkv~`{)_(y$rXb zc0raK4U_Z`*oVIwqUH!UXVg}lGst$U`dKohVebqtO&J{7A#RW}7aqjMF*X-5%(W-D z9iI>%maM_z|3BG268;C-D*ZRvp8PMe{om7nkS$)amzTB*+OSzor4)Jzlh@H@0*3># zEcaMs7G+v2r1Rx0h>ZkNVfd_Po+3Z2JE($!LY;fx#}n79fX|3W_F+ugLuS{r=FNxK z%CJ8D>&BS%f;bC!k}<6&dNYc{W$TJDdg+2hhlrhw-&$O4 zQ_p3om)A$Z1lP}eSKE(Sc%uf=J~^Zfg*kWaHv9RLU-M>fPBDp?8i}1_-i@=-CX~a| zZ6?d-uXE=9;AC)c+%CGE#AbY1m(fdOymrh5Ba>6)nJk(mBM5@oxf7X!N}9+Pw`B>w zd-7p47Rc2m>v|F_2NBaUYI3@gY9m<{WEfCn7V(bpeSar4ee$#FI;>n|l9rM(;+!nS zC{cOvN!6~FUZ%3L_k$FmktErZ2u#s@G)(}$A~vT3hLqM?+mIsK@{paZP~(y zg<*G{a(D;4F3SZ&QKNB=`uI&BXHiGaO&Q7-E)AZ~agyA3SSl^)C#*fK4xXuo+$<|6 zYUNc|&twayW^{$$Qo%8^wNJe03R-M?A~%*tB3mQ7)WObPE)AG12->WM3g`|Ic1<06 z$=F%n;fA@00VS)1VM;QKiD9`xoC?lI^@kIcdBvryHdbb2Y*NeY0I>->B0rPF(>sl04v zJpu!BoD^iqv$hQ!b!y_c6|Wun;sa;KuGD{~eVKx7dYUxT`P1L#l9=E@ zNlQ~_H)b1IcU3mqjvd~D#Y_o}7I{iMZs(aJHoxKNSg{)@VcuUB{sJuMZ$s(HT;VufNdq++9`Z09_Y}*ix_1k$# z&d4vZ9ocl6bQ{?Q&&eUz0xoF1D;nna{!jhvUH{5OC&}WQ%3(yxPXDmM*fl}z7L57W z(buX1r7{vRYFcatyM*NO{x?&UJKeUeTF0*r+=Y48oerWM0GS=tWTiJi@T(q018J+K z$fpkXS%l$9`k{_J5K>}2os)4G%_g1VgpC^^e_`+aUJ71Y`|j=@bZUAfy9%%x?KyAD zb#DoiY&~Zuf8c#Rww)BT7C+sNZ@av_6Hub*@9j}B!OeVSEZ-bz%*^S>a?Uh)uaER) zxHuT2dx5F_fHVyw$;v|V{vcsOtVU`Dr?;+s9bFD=o zB{MeH*qY-f8H0tO&$db;6gq+^M%MxiDRqB9?B0-*fhYZpc~cJJFAJA~tTQY;hq;HC zzHF~5ky%0(2+C~c=kEhehCE2~ug&NWLXbCHVm}h4SHU66ZdWo^V7^;Ld$7{HG=Aeb z=+k;>Pc?JcRQKI(I{Kei;6|f;hDBrd;N{v%-{18deXCt*9zN86GGo)}M?>Z$EmWpg z&8C#C^jnbV_A%GP9egOlz;y~aznDG1vrxL)vnty`(E|=yQ*)E{iyP``ve$s z$`>uBqJci#51IPeQ^SiT!K0}ZSXAHm=hyVjwnUk;Zu#AC@n$XM=m~DP9uiyca7?wC zzJm}rH!nxM(+DYXXq&AJniN|+R!v8zJ=ZG3ekRwh2CF%~baGzWcISq7a-ghGR8?5##=M?O zPFylyKp)04Y_4}jm7pZYM!HZ#im(Val4BH2TUo$ze`2?kHQ=gBL#Uas%s!zlGd_A- z@;EcGEKzLko3$P*FXpqsPo>HCwENyeYyYEm&r$3g%$Pdco3=_fSDyM5ezwIJgYeoE zcIK-DqV}#5jevIsXGro48nhfyeSMmNsQY9!LjdInA&E(nA%uRV3jUzq;TcYe#xdmt zIX4%sQa3hSPL`Nubt?%ds4xiIoNpx@f#V}?CCl%6I@x&N=6T0_ zPQ^6W#1AOte1mMPUHj(6K2cUuI+=%Z4sAZtqV9F_duO;(rr-rdZ{9j)8Ybo1II2&58+ z-_{+_L~548`{j)Uk~zV@;+gVVD8dT%7-XxVE9+&sJM_%By?FhF6h-aC#jG0z&bHHX zp7E{!Fvg$RWp8p)!m9sj>C3~=_=0hZnWls&SixwmmB+hbTypflVcBxfK-E61UNTY4h%cO5V6)x*SGkSo0@&}LH-fXud6fS}Y_k|>rT=V5 zwV?kgY0@NWIbIUN3M(Zgg_Yd-$@Joz)&B%-UMzeo0xMQ5#lL>Pzn4FMeC-4}8+2|B zUp=tiVYj5kNo{=EEMIlXAPi15?wGb+mQ4Kp1uy6!(C@xS#tO-j*53**fwQxR+TJ+K3D?VSmtK~XX?JiwSH(MqXN zBze0kBNhIhh#|B4kU1$qE7l$vklCdPbTEX8sb2EpY%Hpfn z39B=W`ytSF18L9#(>qF=R9Y8djwIJwd66zvLuFHUkwG~;N!a3#?OI%?yR3+Fh6T9L zd~2Bz(qyxEEXLXkc#)2NL2i>>#JYOXS}bjAD#*RP<$)4Xb`dL0zvOczFc;)YP=EjL zsbEnDfqUu{RXG}eNLB6fKXchw!H$>dj#0O}%3avAkf$5UX_{C%>4zFQMci}kq_j>L zsgpIHsK0Cgnpbhkk5c*sE|C+Y9=v7?<$X@=Vi;G)Wo^qb^G&AA8hce5n!G`Niy%mKujLRgBuwUS6GDc`WQuo$Z2e9jexr}f2l(S z!?Z}{N1Z>FcFf5D)%)r3)Bl+uDx^Z2{r!K?EGrN>sD_FRCa8d*$baywN^%qcbqH(3 z%++;3rq!5EtbW3j-F0RY&mbo$^~lgPA-H4D{}=fP6tr9W2v-mgkp$WXvKA$_R#T#3 zou$h9VvD7gR9%(kM|IOpmCxKamk;af*@*8A(?i-?+E!M^+gG*^CedLK9J5QdeAF5E zg}MQzXvkdLZ@f)$-z+LM#{k4XTS1^_&T1_dsmu#=MuiP!DqTLwU7C6}Tv?qv=vI!d zCz>5{PB!~%ZyDgNBd_a%aZoj*xN;3VrgfQD^T0eK)*Xp0Z|wpTEL~5m6K{y@!7dG; zU~U7!K>DZ2d%!DlX8lnDSfaKh`XF}$hI7rpy>!uraE$l+sz_a@dJ{+k|FHPwhO?m%v^xSNtUfOHp<_r!BN({j6lqaptrtIb zQ>@}z>w#`Z%U%E4sTv4{>A-GT?saGsg@gw}utR9xgQ2-D-bG*Cg3v!{wu9TWUo`8! zxKwEO9m(=anonA1tGCsLYSMUO)~f1Q+-kr7lGY}e+b73{BDGY-9XTUs6`QAiuH4RF zruS%5tq5Z*TY^?Nv_O+mZqrKE9Z;$KofI^)M3Xh5k~B>@an4c{ud?;0T;0@vq|R3O z3TR(_mfi90Y+FAiB_@B}mj-)2^Pg^0F5;Q8gu&2)yW|jPFqf~XJONj($rSCM%7HBx z9cLA-#NaXW7c>@Fl`;uB$h0BN1{(s)2y`^>9F9??xvIzl`7Fu$y!M*JnA`Pm^z>Ar z@Tb(FGRoW1-hQ@IV0aRFz#;QsU_yPun3|V^!()FCDiQC5+Y6M>z(h@rCvV4OVL965 z6K{A-sYEtQ)IS&D>~hk%8duD8`Y=xOlR=c#cC!`WYM9R#QWz(lE;CK^@bFM^GGk?_ zy3-)KXK^NEX)flkX!zAiQ>l>eJWBg~00mxH3EH6m(wpR!Vw1s@+x zFJG^C(E{=vvZz1L$Uj_+pg^y!Rm>YLBW3WbgVs0dH^_uT-9lapf%oUdBXp6FQHm?y z9&-=T@O6<9==2&Hm`gUY+=5+jEf9Z<*SHqOmVbEJjI^Lj1jb z_yX9C&}|gIr21VH9s?Gx7Kl>OSWz&oMk(OYCTCGDY5x*vYjbvhc1BJVy5CM%|CH`N z>^X$N7wOIt{sgMPnXP}8h}2?)ELKjnLa2bdv=2YDHAc zjkNiS$5J`jCj;{(*v3w9BO5U4Fv$B=i)|beb}A;AR9kia?ytzSfB6LY98~+S9NsKz z#h{sm`^CsFqSi_Zh!09E<3gZH_WPamm145@7UyK!-4fW}=X?qe++k!;kv3pt*~u%!~Cewo=2e{F#&Xf&WbTsN0AjBLv0AoxUO#X!@fWQ1IK88 zZg};Nk=?@i48_;bo5@3{lTnPWdE;5q$9D6^NuayXV}uv^7fCd6@CVwm@@2Z@adO6E zbDNJdX&YRrQjeH)i1SMgg^v^M7tX_(A0*pjsabI!15X-^i5@QUZvYoZIc<(d8=)|v zUicT8y^!1p#EwTw=HA`X&YNL=w}JPkyd^ka2{MaFAYF{k#ogD6#4bb?&~^rF@~mUe zOy*EGfaG%^bq}XNERkrZQ%W1DllkkJ;3#K1Vc;gVY9;8kAyF{W>F(U6zvwNc;!|gj z?v5la&KTt2`PYxtOZ;ob&kHivoQQ7WtPk8)BCE$vY6hB;&2-?@P~kN)QCO&h#QdQr zHK|Fd^JZdVBBz|o2(I2h7PN)RBd-Pr9aR&0N_z#4`M_?h5|3SO5^9Jr{Op@b+k%1(Hl;(}H)krK=1g;~zUb@QAaYm<<{+EMrx z8B~>HuvZb%IhTpR#AGh69A!IH1v3jpMzw?Nc;Yxk+As0-1!MO@5eAt%Lt4r?LKO4H zK&36@sN``MZskwrY~v$ZNf&Qonx(RY>tckp-#xe{K~j=VM>xQ0`mV%^0%9Y4oZl9o z6@NCSqLi2E#ak?f8LBrR2Bu7-ru}tj&@GHbtkR~fML++Uy-QV2&18p$`4ta0n{CMS z441839eNQ1RJ>-7vvn53;kB&1Qn?vsOfDcKL9ekSy9^}B8>}azL2SuhNPkVyo3p!M z2#RG0fi~s&Q7DD=5dEA^L&gAB*kM_XEKTnF~z! zb^i<9w(;*T))DtuPQw8GnKat?CWO!uG7lnluMZEn;G=&)H-Zm9kias%cq<3UZ1cXZ z`Vwvc^Mz&{OU~Jw2zza&07>MlfV3jI%QwYKPXxIFx+&?e?&Tmbr#=nDg}}^#{t~8E zT#?z&^Mz}`$hvBie>5qy%EMg+L3|69X}0+83AqT0T}kf*DHIn~e77WODo#7((O&GY zGJHjki~)dkc-7bEq5oUoY{Wn-{zuD|{|{QOr2lVPezQSfWp6fMT>BBcK4R9Rb#oB2kVy;aWDv*~a&|%p+l3xqbPn7GE>RGmxTaW4 zW}eTW-^CfKqBVM!Hd-+K)+B6&xm!-a!c9~AXZo2xBf|b5TB2_aM`=Qo&hJH+AOFTI z+n!PukQe9{f}Wk$fkkQ193t81i(If$o~=e8Uy9#1TNwOJeh`u}3?1ojNLY?kOANCa zixNYJB;f<$>Dil(blgUjaIYHaDtN%hoFr-rppJF7^P3(i>l?dIkY0&3UUFu5Y+-Kw z{nta@*Lo34%E$)B-&AN`pG7m+71ubp{JT-gHBJ$<rXPih$8zZ_7Pu^ul_Zt7#7XLo4)RPm$hpJSf&`L*Rxm( zg{N=BfBpK^h41wpd(ot^)VXB3*#0-(8E}zeG2EhXEH4HrEmcv&THs~sd|obGm?OqM z$H=-l)xKX#)DIq7?1YTq1sJX~=R8aGs`~*Ni$q*r|DUk@U#14q|2Hg4{0A(Ps74rV z3}W>pbRHFI7nhb0uEiO0)$x{vZIG*45QjKl}MIIp|qga6uX|fsOm! zYfhMZSl7BxZ524z0^@iA8{O1J@%-fYn8tg5f1Y*ROuOyexbY<+I(jgflt8JVicEQ* zFZlTQND^FJETDGfP~moAc?Zq#0|2B63aD31r%JFc_VQ;;Y>*3#XjY@lHA*rYSmVdi zOSq~!ohnOD!L3Ensc(XFSol~?L!-CB48NsSTqOSpQ4%Q1ED&HjP>Tim6Fde1;q)PZ zQsF|-_ohPn39iut`Q?IzTR5KEQc?k1XH$y^&_UAe39*|LASn~Fq1g#sc!t8Qa>9if zq?!2rnx7SHfdf8_fLC9VVPcyEF&~I^yB%Vs=Y;lxgeH}A8eyi6*Clb!V|?z zpmni&tQMqn8OocS4e;n6$1m_;!~owICXdP>eA0{v;uzRgO2j zG&m;4jFuy-BOt58V#*-B)}5eaSQ6iFMIT|DUM-g#VORUWi2^@L^xRIh(U8%EI-eEK z5?tCgW(g^~F&`2<_lPs&m}5+2yT++%4qVEV#Vaw!*ih(bW8}GnX!{FHqpdB2!$JP< zu;THzWTI5EXlA~>zO^qtMBUBy6}v*>#0t(-qq==AUQ`lWb0EEHaSJY{dU}=)sGM;_ zx@w4P0g)ov{9~7&Q1i>x1Gd8AS>d#Q3EI3h`c9z*_8DijLi&YwdldbM1)^+GwX3t;&!8nTjIi_Cm!qA zpLrcF*U#o?ua?A@Rzf)-q|3v(KUUR|X~u+P#Er14^egN^Xg-j+`+z%COmJ0_&5G@i ztM|IkuS+RdOrz^4KXbsTplBS=|^DxgGz)NbAVDIP6c54mf2m-P#ms`s-4x4V5} zvI$HvzAgrdGThBku_JNdq~aH04TlE)D$j>Xa(oZHT^%qqtt`B1B@Joh4m7bxJlZ402P&+ajGB~jDaeeL?phJaEIUza3H9o) zUfaDb>^ckIN$8~(Ja$@amY!u&ILgOHoQXG+L<3528A?_#uwhc>8}}c}xhjsHh9J4+ zgcS-|)-BO5x|eYI6lq`1SDS6>Di}G~QZmWUIT13VudEarXKOQLmGwHD%i^+&TL;@$ z%vq^^!dpr)cS_lO~Q_Rn(UszfpnRUI)Wa-aLJb z^W^1`h~@;H3bwp?hUTje(O3Eg3QwPfl}>g0v>rTn7m5)fueJ%0jvOdHHV)O%AB&WEHZG7ln61!lVT4xC|LwCHMy9mE9Oi)U0qF-Ms!9^ zTX;3i!a;qap`z=u7Gs-2!{J?!nQ$fX2JU}}#PLP?i3xH*{5g2*v*Uh&St&%g!#e$& za;FU;`seYi;g+=12KVF8*k32%miQt~Q5A_?i+%);HyIrVV-@$xwIe{41#YN6wYCB; z?o;~pHzG`aDV(brc*pwW?(Sp&CdQ&W0 z1d)biIc6sowEpxB<=Ue0rb)#gjLnekx4rOua52$H$VD;eK>$kUgo=!-P!vb zCIQ4^0Mb0V7jOUKBU;}#Hh4rJ-cRh;RTI!5uoh&|56|G0m^T5&*CniuUJ(X3X3uYS zJcJ+oc^JVoSG;NMegm-6@ZC}WNUF+VIz8bmLNp4Vt6&ce&s+7gC$V08K#47q? ziJT1SbZWH3hAOP%d1u!k36_!G3OiVp9XNd};gcXYlQ=0V#nnF>Px7UMiz-NQpSnlM6BloKO z*502)`T{@3S6jDX({iN>lpR>9>G7h9V|idQ=E(SI*G2!7NX;@VwybzN%IXKYC0s?C zPO)I`31{33%k$QOKW`)(Y?8%B%cGtlNI|=tUtAde%u32mM&6C!oUhO#%3TAIK%8k= z_B8Su`IsoPBBzH$kP3hx5$k|Tg4sWszXt4)aes*2kDKsJhZr;)@dva)SPJN?r~js> z{!`Nwc%UI<_yRO!hkPi>YjP@pt-+h1e-s!%_G1BfBNhoKmXLXOQ72TD$ao8iKcu_7mdE=} zPAAS85M>8{*yA__>q+9%jsoEZ9Y&RjA18??7V1Lf22MXUOJ3D|n;ECc^OgCQ=Xkn< z`INj5-(#%Zc@3V>0rvQWX{9h8T_bc&;8DtQFua)s-_NEOsj7Qq8tz1dznAONe484Y z2!|`_8RHwzrhC?Nh43Epo;2to(iOX={p#eWgPl6O9+ui8;`l+LnyChb8@fN*$&Go~ zco_6mG-CcneV=_P+me+$`%e~^c-08LOwerS+RX7-V)!Cm|vi&7D#~awz=<9f+^ik|knXHCS z+Q5gD155Mz(ofp9vuDM?Hxz&9`}{%g_d_BZRKCs=O3+NZbSrK&Bj3@O>APOCZ&O!t z%XcU{5Oh{zIC-f#i{?6@XHw9>#-}swPh9LZDEz8PHd3(fFQr6&&2S?@KW?mdopKg zCY~#JCm6scd$Qsu``LZV@FA-$c8%eXeb^aNv3qRK_zcwvit*SqohmzCrN3o%QNi|+ z-*AjIDdVU$eg+Np7$zUbEA>g`s#yuqfk3Tz^1!Yok4hOXH+v0W(0#7a zcbH_dMgAaO*6j@Io~VNm((oi&S9umYzZ!x0SCFKWm5tt8bZ=g@Oa6()8~Q-V z8tMZ_=Fa#I{5{<*wDB}6L5+toyK#_IhoFz}Y0jPXo zs2l8gL?hH;A$c#(UT;&P4#OhluIsLPujaL-o^J1AeM#V*)_yKox>@n#{9?YHN8tR%k!?e&Z&_?mH>h7 zVP!U?|GstOAiFRtiYt)^2fG$x-qOk~;fM1hr%}}Y*Ytzj$Oit4+T+*_Qqut&wvo+8 zEd}p1AMyv^v|H!Rzt=?nhG7U#M0dT{`eT%}pLO77;5Hm%v6K7-@lNTDvmLq-x)k#Q zgCFqS_!&Bq?Z>)~7jyI5C{==PNUuK|-z7fCRZl9fdX!Hi)+dwW z@Zc7TnMBrCW6WUq$QRBBP!Il2>K*)uZ^(^N_L0nxTbK`uo7HBYq0BAgC&Lw*EAkhP zTGDH>!B4~@3?Gu2P!#3+HqHrex6Z-!$jxwCAA%JVTFEWW@LM?ctEw+33)${mEb@+$ z;lz@U?3AdbY+h3C69xeKCd`iES$0#h($jlkC~d^WXv;AAbq7nx=iB-FfgR(fV8uvn zIOf6X0M|q7pgQyh;<@nkIcz7eWgwKjq;_L{I_g0mmMYKYvgh@?xQn_cI8)3X>mBvE zuJyuDZ=lV6Xa94QV3H5TEMtfF*(B4Wr-95@boIgRcCad+~0B>;wjvT{{u(QvX zVwtl0>o%*gzg4WWq|t6LW|As@!ezw^~ZFh!7`bM($PGF|8v$WjL}7&GD)zq;Kz zV=l6UE&4&SZt0e~gM@wY0e{DF`Kiw5lNk8|!&!GS^h5YYb!Z}p{*&)}Ke5X7D6}rK zG=kqlC33|lXyLMcuXMm>u>i{#BerX8Q$I*K#8tGlVc7+>w!RpM>!I@Y13|CTGIaP~ zM>&DeQaRCvIsXp{2J@F2%75ibg#PI-|CKBG-_w5xGQg4WPIv!odO(G=z|a67AVfbP zP)L4$U~pXfUSJ4ZKYkEs>Rx_Oc=}!-Py~J;fnUhtgnxg*N%ISUp{eWlfuZTg{{4k* zZ4U&2=Y9(eNfb&C0!5N)?+-;@nA;Cc-RSohhORf)ANo%uVgM}Dti2!{>!zO&JlSdO z06h2OYybiu5KU!5a2y-v-C-R2L81{{=TRatbUbmQA!wIX zhY>LM!@LoE@5j9n1OO0nC}9BNy(m#Iu0Q1OF!K6Q>`3PQ(LbS|z!Jpq((_J{&)7e+gV?V?l7d^iW`NB4_FQVbZkNJ_)jTp#3qt96w}9^2|_1XbNLt5J<5!fv%&!Z%ni~)GAzs5C{V2P#syQXqxK6?Y&(7^@HqRC zLbB{f?hAi8PI85$IL|8wWVzZ}AK*DodQoDyA7+(ec+NHh=6Z_=5l8RVOgAGgg|(R2cQsrQ090MC72b2KopeYMBrH*kVLU88j-}5 z4`&s4F5C-c!4JHD%@YuXF(XU-{vuM8xHuGymcWlQnv^iP6oQnbD0}RepsHJ(=b`N~ zj^_k?^g74$F|7SrknY1}(cW&G-1fbT_+%bS#Z@E8QU7 zAqy-l-2$R?BVB^1NQ;1gh@_IzDIrKniG%`zfC0Z7@p%?LZ~yo{m)DQW3pq2huQ@Yw zX3m+}JF;w3uR>>S^~5(ig7xq@R|@n9#lenD-&iytv(nA9zDWF+TP>Z@)kbh z@JS25mGn#*)Q{sWmbbQ26|V>W6pq#PC&4hb3RNVFzZ?daHHJmfe(j={?jZ@5<$N4Y zX&vL=O0Ff(UQ1~cFaDL%Hd$d*##U2D(ZDE0Q-lhh1{=|VXYhDaVG>CNQ)v*xGfeEV zU23Q75RVFR?3oltv+N&+K(Z0+@k-PVg#(q^%0-Oc)Q*n}F|!??yssp3DmRHB7e-aB z?jTjKGn7F|ZN>!d=j#!9=bSwfseKB1=Tf(lanH4pM?z^ldt%U|Jp1@3bG+uHe2s`}(*!Shk35FXdcQGA z!c(~C@|Bun%)ma~XObYo;)a<^p@o4wgO7#>v-68tmKmQ9v;y-cXqJAXmYE1Nw z&ez$f>w(|4x~>O(KQh8|n+j&5yY(^afIb)nlgWw|jTE6Df=L&>z=y-hJ{O8FvbJEw z9J1d|q$!0B3n#s%0*h!c_M;P^u=aZpL19+{le|>j28*&Z_lpV&>Mi*2K8nGR*gBdi zK_w5tn(enp$e3qr5X&=cpBwxBzTX`IuF|^xkn5F)7;%pe!6tE+sO#q0d7js(#SYb} z%*VN9b(7!WZ(wJpXB@<43K$<@&!f0LhFGEzT`YO1Bfeh897nY+1|h!kt;CW)7_`gG zEK~i+GD(9QBA+NnXhN%c8LR-AwKU(E<|MXlr$CLMql3A<5_HvGQslf-j zRuh@00Da)H3LI4h>}Cy1AROS@;Up0_smaoN zAB&BHGK6)Fh{5QH+)$_x`y)!B)|Ll>4hAK%XjC`Z^_7K!lku6eBM^BbMm?G2y;OGDM^nZ_YDuvLggnWsp?5`(m#eQ~GT*kPwPsXpNKj54ly@i; zooXM{%r%y1Da^zaOyysFJ4sXoz4Au4NVxOOkb3s?ftec9)ZHBE)QlZnz7=Cfd>If- zExM3Ri5R#LTq$&jMP z?2OfW?Y;<=rcf;Z;aWbSgi4R-1EoyEK(~UF*vyB4-#AJPA~@Ge^mWD!eEgG5*Bzg1 zwVOH_`Y*+cChER<>t2*ieaYdODjTg`&8#P9sqkusW2q8teyL?sd9R~eH{)dKlOWD! z+zqV}knnYFS>aI?mcT<2r?QT{_c@Sod{!IN%iXx< zvy*=Rh5-S}CO<0%UQ}f}sk*7x-mrXPF#-Aa8H?9+mk7K^7$q%u>!q+p?C!BP&T{wi zN>V)Q9~7R9y(?^HU}s=hKb8H;^L3VrgZTGNC*tFgEc@i(QI47sHA$Z541?muI{b!3 z7!Kokwr~9=n7p$qSY)c-Kd;f~GI7uFiQaN=k9h`l??~S+#rT{R?&Q&V`x(ZSy&N=B z&u-RCb>8~r6xrHo*G3)&Y3)vz7hXQgF50rJ`!1&oY^D)tt#A^O6x}%)Sa^FZ^Liuj zt*w4LzM#g95&YV>q!kU+u62vCaomtB_-fg+AoK63G-mM|*-jHUa^+TFq%u8R1J=Hfl~TMp;idR4x&VI6XP*QOEAP?s?3&~)=!s4j<+@WTDD_(^ zaeOu8eQ5fmn^L>BFYVSb&yp)|RMWkDrp>k|*cwV%Bu{Vd?Aq(|?5+!c4tdC#@lfZD zGa`j4;IXJCAAf^Drst(>WjBLI6K1>tUrT+TMjVh2E6xw%x&{1g0Xh=@=IP$GHb!hi(^c&A9iXr z$Rz#h(C%P=+pvCh@*pZV=&R{8K0kH}g<~XI=OvYRx9yLYQ}$F%4E$(NXFf-j8#@-? zXNjDQjr)#4QP~otF)r$Ei|)oghp|`gSwZpPCd%R^H*y+m`i|JT>lj#u;QOJN^!?p+ z@zjQQOj?+ln5*3i7W%*=_%Yd;fyqYbph#$$yEXAzT)&O;u_zO!ZEYRCzn&}NLGJ59 z)#Wx0fggIJ0o+`O_S}M)jCRwe@9quQ^5&`?q|zMGYMfMLi*1N~6t(1R_Zv%fX#Rry z2_$;v*E_Rf{P7zgW}5?@6gC={?Z-;+)Fi2f3ixk7ii~M}jiZicphsiYW8XS(tID#A zE{H}iHdKhj#_xLVo1IH?p?BoFwd;%1&S)Z z!d{K$8!53%rdzv$dJ~NS5r$8~@J-vN;Vr*0qt6}-JDS1$cMe=Eg25$^ORHA95($HCM2>9Ij1Tfn6&VmF?9AEKz09q)Nr}-F3pRN^ASp`e z3B|*rT#gT9F=``a{hq~yBn=P+9#Na&(2>n{Q1k%HvZw52w(wzzK_Oe7=)e^QlCUMZ z@Q_D*VU%7%H(K;P^94S)C*rel%8}dqzX?tr)vB(PrQWcCSpdk!O zWRlDHyuvR}qJ2py%2H+-5Spx#qxBinc{UIs&e@JDdQgL^AT}vW%pElQJi z#W#dtm()9XG~B+D<)y*AskAo@!DExxDha8gvV+ zawPz&i6^dhIm}t`he&C4)9$o+5vd0>)bPI2RD6vPhzz|)2qY`Vk2)&ZM`Qa2HBBS< z4Sxr*d|L+1wl^x3WJ^mdiLF#Cdb?q;Y#o&?-=sNf2Db2+P7s6eWeUx$FhUjW@|t+L z?hYz2s;r(*kdM0|dA}5zi!iy-GvYAf;cg(f^)P?`23Oz;D%yncWyW9`6Q|iQGAbBf zIH55MV<#bp6(fd>O2P0$FkenEC-D%%NrCik;3~TLHST6%#7I1-3=<@@6e0s9wuz&d zsBrJWh94VNVNhJ4#ctxRi0VS%2b4);0H{E zH%VbvDN*$f3I?yARdx?jCiPA0S_TWOHN}|feym--AevwYdhPu3`~hG0>Mpvw zHy3d#g|H*kr$gOSmS{5-P|&W4y$^pwWik0kkZN#tRC(GVY!{6qpYO?6cAsw4uIan% zdDsfhCnM3!?kuAsOqQQmV^~tfMkC(2`Jt*Za44|F5LbEATHv~+jy&%$R%f!+E;uC7 zD~n01rdP;byMZ!8AttAs>ESgRlQd!B9tCxrB;ud3{OWZq#)$ zNu|0E_rQV8H?Gf?Of!CAw(3!^mpYk>$dpPLnm~8y0p0A}_)j(e8}mHoB5sEfckuW< zBM*R=Z#i$`l~-tvV>gvnt=L&jdU= z;I4W6sNK|#x6i%`%H&H(RfulY&SIKRxqx${7&B+eoI4pNd9vkk%ghgk@6CQQZej7Q zx9lvh(*1$etu&%XbmQ8UUaqH01@%H}^j2&rHw})%5?pCQzbrL>{_vev0@Zff5&RU0R}Xm0FJmc@d;LB>rg_uMW0oBZLE8Xig>3QNrT5rJ6UE&@vU z1B7CMw0Sf)5956+aNZ5U4BfSI$<`LBZ2eO{)wUq8y}h$K%uKm_28^?0SJpVgt8QbK zWL>8)&J^nwC#ZC1z-1q&h*%DNLASg{$U*SKq+;{&=qSCn=r&Gc^07dH6KdwY2RA25 zBPxVDvMdNR!`BJZvnry@!Nzd*@M~XTMKWqLeX7dGbKo-LGRv2Dg|0O+W?|L4dFqO{ z@g6)JuGbb*e7@@B=AZH)7Yoz-o|N8SZE{bHG4A;}FSJ<=h){(u70T0b3&2)Jg zaw2%RENvwP+UuV1=g%vCM$^7*t2fHPK=sUm%=7MTnO!K?BiWS3`gLbr;ZZ1-!COrq zYIo9bieQDJS$PslvX z*Th=rd@)(4z!|S^@Wm*8z~Ey0LIlB=E62VK?XVmy!uhGx1vaL5P-7td?$Ec$9<;<< zen;BL`3Po)^F<}+x$V=HEvtmfa!;=&UN#Hs4A%q>)G$OA_N844WDyut?u{oFmC+u} z)-S>@x%om^?;qW8%A2=15zJhQpX({y*Sv19wcl$-`8nNzcBpwNS(N>~j*6h&K~sgG z+vj*`v3h-n&^uobYZB9Ks@k@4G7sFX5mpOfGV@XlZ1S1SosT2}6SPnQ+(u@bGnXy* z6B`p(gUSi0c9y6~vt*}R0zuV?{f0dBTkr^M9Kt5Ct}K|iGG1%;I9eLD^$E^B`gMh5 z%G%5YdK%99CrjqEE>N6}al3c4TV-$cLg?r{nx?+VEmSe$)V{L3FF$6G(%g`{o^-!I z8?;CYX}@s-VNHHD>M}sNPSQiZob-t0-QGUqyAsNoLJ199_?CJ_m5PqE9EVXHK392w zY~@;>6aT=@abJJeL*~$H>S-EI?zrmw2lN8B5l7$!wePe80v5&{Oj?9mQ7N~N#zbm( z?)h1`)BIFKX+GxZ`JfF>3#8YF)U*xaj=27yDhlyIGd6YL_X@jI!G|4 zO}y2;7Zz>#;~?eRN~2TM#KE!t62Gy0dn|@HGcn&wPn{KQr3UbZ?wibqTpP2Um#$;7 z4=f>G_S{TUqu&G7+-`HFYP5{c1kr?;Ea9hgh=cZ{9|w(`Lg96qa>HNEIg+aKogviI;;j#ueFNk?#( z2V8A;oU0|VrIxteR^q_g;UrE#LnlLuwpVR^` z|Ii&xA1JvG>#B8P<8_(x zC7Zi(byni*{1bblIdi{*wbr-*`vIpyem>F)_%nP8UibyZ~5+P$ARjae+tHtdQR&$ZwxUMI5ZF1qcs z*&fp>Ppb1F?Ga zhrv@iI_QpblFj24qiHAVPm`gtkb`@ns*HV=G znacb0qkIyQ-!;psW~Q#ZFK0))mzGFPCyX~K-=P{G-HndVqhIQoVn1&9IWj8$iR(=i zIKEq3n$cC~AcsjOxVQ_~SA@p*f|i8us(lO3qOodQzc!bAK&?LEL>&scPu_ct)x>tv zGfA9s?PT_g)h6?_=3GKtKl9ybHsc+5AR#omGK1{qmo}xQ4Q0`x+Yiz*`N_D)GxR(PDu(@9y^?ap{CqM7}YNsmO_+PkaF z>P$i?j>=k)w+#}8ePvV>Pia*}URZJAz0aG|yEcwhH_lYe$!+thrpz*jdYFV~I&%NP zVb8Zj9DF~~QmGknn`dSl2BPf`O$;O{8-<%$`z_ld@u+Ze>8h6k^xHQI_LLcOQrg9H zj)+`6QgcyUMm~%fRi=F?!;BGnR=nBbcajhGNjoIF_f$Harj0GOZtC%+zP!Li7MG+4 zU2?C70`2<)9%V*n8BWx8m3pzrAB_f*(uGoiMX>Xx^qO^mqG`Fj>|+l-40?7VwkPtgAhpolFfBM>|Cr0cOsiOTPEi+b(cjQ-9>i zjjGR2^BgB3M9o|_Td^FJUpB|EC{cH2JMVtW7IaS8QRX-6dC{-B5<&U4>owa}I;}pf z%_B2ZJfD~#-ozIKp5JZPiw<@Joo{w|nSXY4f2lhc>CRr8vKby}^ls&)=w+!z4_}aI zhY9)GZ2|G9E3ej$O_mRhuZwX`P^|Rgn{trZIiykTX!6SWsS{%5$n1yrl0IkNn@Mi- z-FtEzcjuCD4XN0YCXbrCPLmyO7+hRahNYwIi`&-f9^Spu;$yp~yERQ}I2$!(ysBg` zyvG&WDyFZAyESS;#Tac{tOzBQ9JN!)Ns9DQs^r`aU2(CuYv~4=Rw0ewTcV}ZEBRyMlJaIzWK^rQ%8^QwKK)4UJ&d1=u*R5B~f z54P$~j-oNodHnOapW>6fVVJdzs_G&KC;-K?mC@qZ=(QY;~9l}$Jf57Ej$C(>v zRl1hnix^dL`Kc5sPA;?>YEOHBH&kf965pOy$gTaN48#--*!w>`n^4JbD1n6Y3Y zee-MIVSkU{Vner{R>=b0v9-(ADzd5K!$C$x7Qza))DyJxP>~1mGvF4U8bhb=GSkgW zgsX4OGwnUY!vjA$4G)>%)b#67q2@Z}>e^<~Cs;O%R?@j_JZYHB(On|csFzG9x=+Dm zaaByK*&m%d+`!XTI5CR^A9r_uv-szi`KLLkD`Iju4vou4QXkO<7A@VKx;*Y>9t^mp*`5#J26xnwi_S2x3X3@R{NF$X5> z#+3C4P)4eu{T?=eBuRMeUgTYJ1}+h90q}I54gGe z=IDzxy@qXpeIG+Yd4}_H-{9!h%aKcGHM~b~=6j|X2-D19yhpz_Ys2T*@JA{{y3tj3Kf zj3Amf}iS?~ML-@8j`2T$IQw2@^EAfc@ z2}E6g%LnBIYmM)%*6%on7%Zd#ggd}%36NofjTP{NZVke(doX*t=?9JqRKRu@4hn#m z{GAIwkkWzS* zFuswtBy9(M1k0mji%NV6PRZJ~z_;j8i_1^u2Jjfeh5gr;RXhe*(dO=MtAycIn9Md|b`YONDW@9;Ofv{cub2(|QgrSL~+W`xw&eoAovtp#(uqyX}%L zpNa#u2>{b-i;y0pi@wg`<7lN1Rah` zAtXgDp_Zw=L!rA(R#I|zYN~NY?Q8$Q;L<%eJDir{K=M~{!wCzCts3cw-k@T|M(!Yt zlR<`{eru59;~|hoY^vVgf=U`MBBGNkmq_AXKYoyT)BvC8y7-dgL9#gl-NvL7n$a|a zahuqsf8Xe)X4fOZ^qZ90uN3+UyZ3EcUlX#Uc}}=8ZDn|@eS8}?DxdiUb7LEJM^Hga zrf)EIB4idZF(6pu)Unc1>2$QAf0(lv9MMtVZ)ONv`qGk$&HFlyguca9Jm|Szk>Vck zoo(TYL`zjoO=Q75cQ>Wi!}*`d9p7`egoAeYt&>9VhmGDh5N~Bn-;kMq<9_MslYy*y z0taOhJvB3*AFc=@Z{_Dv3>@Fd{BWuDg!e{WJ+|nl2Y+EQ zYYek}DI(*Z+2n^u{Wv5_)ci2HIe37pP5g*tsArB)Cx#+$T&i4S=t}b<>?>a!c-HTI zm3cWs4^9kOu1TIemtNoooDNl^wb-A zem!870+tFsu!;s4|KcP$U9uL?7xQJD(L2;+`Y}5|xnA+Yl&2F51U3cVx?rW9Kr(Xg zgp@8=DMl+lIGB$ZqtYC>$B{E1jhd^7nVLA5!7jzhBK;t3k;_3!vu(4Q-}b}RACuF! z0(egALI;d+o~;%QRp&qhc?rJ)zu&5;)aV#O3Z z!l|zoeu8T9jo5M@hvEh@R|{g{*)xjF(DQQoJJwqVaV=|2)MT(}`az@_?{MHH2;sxi zYTE6G1)FTdFigaV_M!Y!d!hsTh&WU(zZLGF@YxX@Da=t&MaLq3r^rmvDZJPNCX$_e@6mu z(ZSt-8_f70H`u5aiUNv!KQABSkP%hGq!rGd`o6f&R;(TF1tM_MJ(jXr|lt3#cO z)dQ0(v=x$1P&^(o_+}PfQAFSvewXjdHOo)mw(ube*IN}yLQc^Bz*{ z;?&j?QT`Z8Lymn{wRk2OF6*+UG={-Hjf=wO<}EWr<|JkPqPXpTpLA;e&g3C>O4 zv8!91yxn!ESLEZ&#l#mKcM{^0RFe zP0;$stsEvovhBnfmJQOG+?@7r{^FRo)0gO?9XKg&r@YHsVw~SGFM;f>Ycm;iUVh)W za8scZpL|Vsmx7C`5_F;MLQKhf4K>P6gk~9p>qD-OC06cY%Q=fK*mgN(_HE%+ulQZ%h|AS8v2` z0oNAh?`HQa*M$Tun5XB(?0*yRfqDsiTpc`o z;5I;_1KgAKR7W5c$IjWo9^vik;{pPomcsIeIXDB-Klvmu8*d+&Gu#>G?gh6+;t7G; z|0fX(=5S5}Y@jAvpp5@nP1u04zs1vvFx@;I>>XTB>p2zCZQ)+t|5S=?>)_=LbG7;1 zQcQ1{pM!(z?@l-s+b6@(BgV26#a51n^ETfIj6Rr9bh;(2%@ymUmvoF*JZl^NV@<`;>{4 z{=}@tKr)fWdtS|I3;>Dw3wheAQzTOQ6EYVIiTua@&w$(hkQobTE*1b3#W}wcBc(q9 zf7l{{=cdpZ^DZ2cp$q+C`!DnKi~Lh1&zQfy*8juUq`WvcIR8w;Gh#+43M3B>1xf%+ zs|$J}r9bIelY@Fu(chE#3_I)#3ATU&W&YI^a7O1eJ(d1QJp!oszm4+Zif{&A#ej@q zKx>Xrr9?pNs7BW)QDtTS1d2X6QxAlRO?7S&IfDc@pg;=Dp+FfxJ#^aB!TCo$qy(a( z0jwLCj)11nvUh+v{-f7FYtR{NA`%TUk&kj( z0GmVFG*bE#@@^~+(oAsv^`>XgK@><5DikOJKu;$y5{i`m1TDD(K>r!j|8dD@>^2n0 zF$xqYc{(;{r+a@G*`kDV>H*_&=EKhj9Vn1!R47p5KWbNzbdGr;5IEz0ft9UY|fr&b^5oadg8CeFCQsE`I!C{POEc3$XBr1U3l-NSQS?0-U%GiE3mWCj-s zlmM8>P5-H`Na;_^w9<3Ti*d~vcohXwf(iwS0bs@p$|9vdft$+Cf&Vu+I)fL0A-#A| zpeO)G?wd}vMoNExL*}9hfdC3{9F!bxp7y*jcNh>^^Zp95dA&TGd4Xsfh;Y4mJ>7hH zUEtm@TbMVDa*`;3$=lx@&LqL)d|Ek3QY~_%s z|E$c#?cZO3es3B7hVXlv`4@ zWBwO}f5VTzXZ(8rfJFW05&0c$APN7uPtTt+`~~KGEb$kZe?o`9KwLNh`3uhfoSOV+ zmc?xlrP^;|>RFtl{9!eD}`0xbME1 ziFoxREB3CeT)C?%D^{(&OI<>f0{{a+0I(|qpa3us5M=QP5dU-Qo|_$jfY3D;HvGp8 z0e}GD0Qi{!HBA3>hXWuG>}ApKu}|C$Fr4D>(kzX1PZ{p0xG0LOh~ z6ZVr3s37pN3K-D-HQxU@%5-aUa|j5;F&&iuOOyovoQn_hul8S{|FQmY{BNNDKcj@U zgwTy1o&CQ=3HNWn|0l}-SpO%$|5KFnB7iLlWk5Une_vm~D*RiL7arX8SkXOU>G-6w zt*+#QJSR2*MFoP5^_(-KOdX!9qO5|frosd%D$}|@lfRN*|Jc~Qz-rg5*KDBJoX2ke z?p3j<4y6X04JBB$Rob$&Q`nbsf!T{vL*oOXz0xb%C7^Q8^0zcd#YfeJS2%|<)h9$0 zi!Byichh>*$q#9&txg5Iy0%#BwfL!G!z+N*6t(}{k1vfH>*vw-b^rYx*Fn`={}c6& z@y+A3F9Om+-lX0jk>mRwMqtC5rWz&~-UDrsG!nOQA=(>uX~;ho^-lvZ)OH3%wYcOe z=*@ylbHYrUOwEZIw~D3`aG*xPCc&0Vo7zdus=N8ek7S?ZJ$b(IS-AY^NIrn&FKm&{Ym#?}0oAqV0^9ENDpt{A_H2jhV)eCWNkb@O`|fhx z^-k5Na=pBg%dsR_VM7mWbbE*Q^K7^LpFh|OjMy%YM*;Im=S&ULQs{T5kK+o4>p?}zaAmEXm ztw`lQ%#sD{UTpJ|;0XI~YIU!0dQVhm#0f`H-OZ67UHriT->p$^{YvBsjh{zggGn`4 zQSzr3hd@C2N67~Dj@{wNb($F z!lx0urBoa)CY>Me9ecG>kUu!`3gW9k#iARsvh9%(Q+yrVnj@$Ao^Uc)uyFT!e|)Ht zbhW2)DkLJmIn|~YFq&ZEBjPSLCvB+ryzBR4R0xsiaQIN{IsM3^b(F92cJp+UMHzQo`kX8Y-3y;=zU!Q|jd0wgw){A)KNWo$dnGaLNCGF^ zxC{vmetA*$<^2fnX{zZ@#v8Gl4?fI|OpbV*KBq_y-UKeGhxBRBJ*FVaPSIU2<0g;i z=W)#R)Xx+B4b^hfd{^q2dU6IguBG>P<$7DPaU6ix)PM_rIhr;U-?aMFM!4EvUSz?C z6-RiF3#_2R(-V+y3C;BvKmR(Bc=W`3uH)J!j|Q_6#-e;)%08wi${nViP!J?N;N0M% zp`}Oy`s0Ni_?_(uT^z0l@#2IC@0`L6^@Y0A`5TS9V6TGk@Xc=@^ct6-a($s|=$A2Y zLsdu8JH*%PztuE}BD_Tc9BRU5Zv^JZYN%X`duHIk1Ut8WGZ52ru@)Oqe|gcHaB)pB z5Pi(F=A*nvfcx-jL@2LFBQU{G#ZRf11oT|ZH>wnk+h4CQvce-WwzRVFvDXc$WVu~+ z6`_5X1a3SdsraTYn%Unf4BLy+r_EeOm;dsh@9nTSf_G?R*^ki_Z z>feKWr}di7O9XdQb>v^PgWW3mZG+13($Z|Se#9X5Bb9(`za04BK6`C%8wCv(s!Oia z11^p}t6kZ8xK61Z6rVHIo0888whP|~&YPI>7X@~JT4+a$a8J-~Z|hXXycgic2-u3M z`L#wx6|X8pxo6$3`2!6KR*kuWzYpK|3LjXB%=1w_Y(C8%6qX#tU(r7ltU+6%R-fpI zAxT*%7o38oBeDlyUkiFIR0>$`@e;4tXZ3Ay;^$!1=1r6AHrqCJwkX($9%uTM-(B1t zFKqlwx$UA~1y%a#R%G-c$bkOS9(u&MCnPme{W#~UZ@4YAIVNy_2iV$u&+PsffOA0! zoylu>e=Noy^W~ z4gS^_Z(zsgo8?UC;Ek;NC`SAsY{%D^HgV*DUc)5*g9)<{@4;1DGQ5)*E8mYqp3ygo z0Dn*c^_L2}Xd`#Ap51xmycT&=!5wUVRB!w2gJ0Jf8#G|l59b!Sc(wU&z+LW}6-%3E zGw^ggtW`tOt$2@|57w@$*KN^&>&Pz>|G0BBT{g8T;#aayc`!qVfcr6kZ!-S6DegUU zg**tmr~b7G|BBso#q}Y+C*`BQ?-kXLckBhYsoIO#8>`Q>L-n#~DF}}EpcQV)3+5AL z>qY8Q`)qn6Tf~j`KkDk$Qu4_k`rWDa-eHxfy_ojIurkdrwfJMNcx>0oM<9@M`=S?&Rb2n3%ph#pE`%UM5Wj}bk zU>7vacolcG@`@p%a4~i5ccJ8Ns^P@6d$y5o9}SKKKUx-K?+L$=UH+h@vPb_nXY1qz z9P|DcYvV=y7lHbRz5JU%{m1$*J_A{RYIXB3&Qrq#i4+V0Lp}fjgJV7bi9lU40ENQ6 zHvo+xO+E;NqisG2i*H>r2uJL>HwaH2K|X{)onbzNNN=1HhQ!o7ABM~}fDw+uHLo6y z%D0yijwWp(@U##^l`M`GOP#K+8B2q09Hu~<=RBl9R}=uHNMDv9sR&b<^A(A) zwx$({siE@*iMeI`E0DQ;$#RON^RR4+wdW2r#Wrw=k-#2=BBjhRN*u1tImtYnz&OKy zs|-6Y-4@TisIHaBvuf_4z`Nl*tirbgbB)SR9YHnAf0$u4EAXd6DopUac`-@oY5-de z^=4X1P2^!Ke2(b(PaC?}`_nDDI3yxB2Kq6EwmKCYNd$(_HFd?jBnr>ryc7lrW~wx{ z#+|$juE`RT?38+1sw|QFovbj4Z^nWgVhB)8o-$EdQvp%i^0xwfNk*C?Q_E7C65Ak- zmLlgMw-$igMKfK64>m+gwIQQq5g^nxtfe+gytk+(4okD7E)A$mlaBPJ|LZQraw4|jjL$j={y{svPR;I6+siS9cFQsefGNPmR&(UQ)^Gi%zwY(S} zTmze2FI+>1+74VJ`u3w0BexNnRb$U(n{0WKZ7*C?<3pZMQ`rk17_-3Vdpz?I3=I|Y zFjQF_i%5cRYm_lGRcn@{98n>}i2~v=R>=~$xz_0#qslf}CQ$~E!MP4U2rLrrL5V!=%%6A5Hv9>^L54Y4lZx{--hGG$wf( zz8ud z7jgX32y9J#3Od}KZxm4kj-3?IBz{j6F+i`Qc~+t4V9#j>;M&o2%Jx( zn5dtPZiJX>3wnwK(sMjRinHZ*N{X}m;a8azb80gK?lQ`6%)j7PQ{`z-SK0i`OAmvU zZ~-ft^E~6!@;&M+>%Q1Xs}<=)A-wyR{Gy0983ylFRDznS3O1Rd`ni*tteVo9Jk;$G zHd&tJx#Id100%fb!!Hw+ktTkz>SAVL3{LCIv9#21^8-gS>Qwj6N%>A;>Q3)rEb} zp4Co1gbO2?zF({9wB_#F=!&!MPOD)k-@D*TLTB$XOTtZKAxq0}&XP(85;-FgI1MGxbe z6H%Y+EfY^F1QE0D5Sr2j#>iJYXL~y0Zm3p)18;zGKWu`rEfdG*{xt4AbXj*89WIG>{iPkCJG5*<0?ni?MgrDOEt|RL3s; zmNV#Zo%GyLSlPjl6JNF5)Z%@z$!pNgSDqOZqJDRDz))#61;1P@VwE4gLRa`cRMNMjF&fJ_@u;QQ*h|u-Sq~GM}?^wD2FZ znv|SA6Fqm~V941ea=@ zso11iX@a@35-wVC0zlUq{LYg*1FV-%ITO8o!?P3gt_5Fx7{w-Y+(X;NQxi7+g#4Xk z=CcM(M2K^dVW`N&A@#6W5n!a`{ZgKon%D|KoG#eGZ&TuiqPm@)mzT6mWS2f+oG~@# zOhxuu-nt5;UbAg0O~?0lX==~XFrbabV3y!v!}J`O;djmBikrEiOlJXMS_^s|8NEVy}Asbh{g%9Zc+o8zdzaX^sq^ zkO#G(Mr$FvART1yNj*m>NnRDN;Oi-Xogr~uO_v$pj`+UkVEWskuEZ1So;k4@DZGRW zK&+e%e^kwG^i)gVI?e4=R=~UsuD@g5&+C}rZpdED9*{27Gq2r*p9)BVORcgK2|W0P zb&bFykVG3+Ub&rC7Ny-~JHnQ&Vn-pd#H+OJ2oK-mSvIG&TSt&c4=Z)wZlH6CAj&LV zr$#P7D3q7YeR8s3GxWo&Z4}n9P@!JWDsji-S=3v)`(-5a9$#fT5-01yz_Mz^i0yZH z&RFC@?8D3TwCsTk*lTEIVO_* zgq0LOaXoH*@VQGV?%=llpM;gSzZvP1`MPYWK=$DO<##j&?yR1w22%GJ7Brp_vruH6 z@yg9Ijzv7Q_>5&Db_UC&+`CXG=PEhOc^@_Kd65V!tWPq{BB9X}5_ftFfqyY=ZUKU* ziK@D3XgLM9_eS_s|9)7l)&@?o*Yo49Gvx0E>$!yrh6L!q?4@t8BJ&6&>BUTSBTjd4G)_9Zt|XJZA3Y=TTo+OWm&F zCdG4oVb${HQ#BS@b3c4K;HZTj+)cU7U;?D=$>h(I$vyehne7=Lbut6SF%4ttwJj23u$vOhq^(b-=QSdm!AmFTpeDjyGddFJdMLec<4{+YGz5uyp zNrM)*iSWndzh&N!wJ?68JX%=*D;yQ4Ft;CxQ-&jF2cD&@)Q zp8hQPc$`edjCdf~V4io^`MV~G$c7aLEN>L6H2BS!QPJq9#-?2Nog)4_i;+sM*X3~> z+=z|YE&{0MWfs+b!tb0e=KL3G3seI?G=0>&pl%EUC37S4EH&;$u{rhKf%;m+9=T^r zqRR!V&1S(tYdZIQVRpc?c(Ixa>o%v^?8i7)W7R^4OS{w;6Z8 zOUMtISv{0A16iw1r&OVmPw5{yXcFDr>Y0)-I}U{yoOxa~=x4oELRFY1Ke|U%!)8>E zOxa5zu1MEF-|~Bns8?o?Yz|(pCN$p@N7+BN2AsbZERRg|8<@+1%Am;tc4h4|Z|S5) z_FKK1C8iq$Yf{R;xyHj7#$H3*vx5DE6i>k70-O>+7oJW|VQ}j*qiSq`VtPxZQ~ zDhZxz4=gr|zi_*%_zmLC3~x7Fcjw`nK z5IXuFCb4AIJmdl&NVR!*9F{!8a<aIo5Ty;?MsqZ>u82Ym(5OROp9TlUQqS$N`?pKL0)m3NvXgqt@q8p5O zw%j>f@)zE)oN#Us;YxM!XmbL8XwP(>*#GO(4MH{Gi*o_$zh(4JdO$m_G9U@*|06K3 zct0iE;J{t;<-V6ua_K!Nn(&rNwsvKt<$h1e9Z#@MzQCNIy{w_vXq`0O=Zs50vY~FP z5IsqL{WaG$7dU$xunX?lO*l=fu-Kr^_47|d0h(2+rqQ0JA96gK)uvf9G!R{!Fd_P$ zI{m@Ees@TtCUZ&XM0cs)>Fbd>?K)Mu*6cvvC-6hjp(3^T%K_#UR#j8#kyUdsbg;LvrRwWnI*St;ogZ^T%U^ep=lg5GV4il1%8YK&yU5C4T?$fJdvQ~WU9Rr z^=|JUbgtY<`Z299YKYJ{(-ayK`Px2XKXKjLv^U-;u)`Ss&Y$nz!*yiK%Y>YqIG^&6 zBQ`3%+F{$6_XS@Ls(>2CFph|kz47iBO;byenw!SqY!&)kE#s@K&La2Tk^UTa1lKArAUfCupf{)kHtaz(OY~M$L;6JPYrXm69t`4( znH$ssNec7bYo`=r^;bWB`-pr~gp5Sbi%9<}TR*JG6z=n!@0RFu{sN z-_A})pxtowNmiwThNffrg|1vd0QTL2^P4+2IJm{*>p2d)h9~yRoFa!#%1f?WQY}~N zFA;3}N1e%jdVO#pzUj9#wttqYv3`SKV7#x3!^n}&(W+bU4yv$}8=C#_t%)%96IGkh zZBxo)82D@k?AGDnSUg5xJ<8j*5)WUW9f9m<@@%T>uOn*Ihx2$ifiAV@uz^;jbo_Ya zMD-W*s@l+G2Wy^xN9#Tgboyo>!nQi%1w?ftyDwZR!dZ=L>i)p;Niakf*6ii$V`d8x zJ2`i4umqK|YZOtEMJ8XP#c)ma{B)o*$M>w@i{HI6*2msOHqJGLBSpVv8!)>6mgqf8 zil={tdnFpEvR|`7`TWFR?3=alm-`WdxiT?gK^XSFp{x*R^}rW^SLHG~Q<|`z?%N%U zUcXCaYWqcw>tr9T-T(e7v;(xA5`R*+;d<=3k`4a}js55Tl2C%aZI0p&go$$UpZBY4fjrvZ#_5@UPW*a8@JUki2 zxq^G@PqMBS`3+fizPcsyjdaW+R{kOI*&IX!GvlM3AHMEGf1JA+8neu*cF;8}tR{@! zP~P~?V>}qTW^IIYdOLRCFC}=BR{u;+HdlNC^+`4GhaY+gcg7JtZ+2F@o#8z>J{3NU0T{azomuWH8@uP= znfOnL7ym&~KPG&fxt2HU06n1p0r42i^e+UaLx#UrQtqStpuz9f5f;4p8pc#`2H=%A^-D2|5rBiKh{5v|70@(gQ)sx z(Pa>OSK;W=Q19Z`W-m`*K2GvCmDT6~1O!HU-7MS>?H@K;ZB;W#B{lpkm@U%|wFYgZ zKdn{_MOME_xEna!x*pB8R2@5bk#%cT+X>Cp`d@kM;-N!`@A9S?BZ|k6gy8!L$%DMs z-ElZ92fE9fq1E)tvBK=KAc3zqYZ_%{3l$4C^^lE}?kwpwPAOj?yios2QXe)4`444X zQ-~{KCYEbD9`;C_$p&(Tc<;8fu!E8$o#_%d#A9;)xJKAdrWmEjeZ3=;UNpbZh*Hhw zn%v6X6*vA{gyg23XRtI&{U`j;I?XyL2yZJy2GTD8yStMFsscg@E$XRx$(`_z_ z1f!6{AzeE8nd{qRr(di4N%EhogZ)c=rCxqHt3djq3#P)0PoYT1F)#Tmx3 zK>h+JdN_?A<6l&eOl8BZ1@%%s)u$n_$)UXgXg7vWPESLwJx6gB@{Em5f`Kxcr6gVxOWo?Uj=V@EwSg%RscStEnkbuvsUD z;K6PDEF9X4I@%ezY6fT~2eWe=`BMB*#8a6{?68I3U%L4|H8Rup+?}K_IXHicD!V@{ zv{N$jI-q)N?@@O@Cfv)XUaR9IZfKw|2)LUbknbAmFxy9$#eEXtX=Yy_;>Or56h|?r;g~{DlQQ(D-QrO^u4aqJdOKR}Eak0==DYwX%GG#dLT zMBtxY1qNR#321-Uz4DT}_w*gB07_mcz|6(Xp z7s&E1u8ThU!WHi&q~hW(vtOtxa_D=t)TKBX5+4mp1}a|kfgE~j7R`^Nk@aREhvtho zK$o27RD6(_lgbm%tx% zrImbjg%W*AAg4rCNLp`~@k&K#NYN!2oYp5X`x-krEDuQ+LqY;H9Vy0xt*?fF z|0DXaX8PTs_UO*iA{&%l?p@?eM!481sug3o`QTtiCTfA$pW0q84w%$a{JzX?D9k;#r9me-}9+VSzPocfMzbqSn%8G$)Cq& zT_~@h9FdccA2@#0PrI#lV#JqqvF*6RcnBN0v%U;Js5WmdC{@3@-eE>A|DrSS4s7td z%K^>FEFDOWrO}jCpEo`n#K1Pf@Gp7mA!9!Zu*!OZ`DRLto(tb=caw!6v;G!ZZ8V52 z9!gbvO+5s(`rjRJca*6ENNoQzw{OCA| zojfwEXWzf(%<}~XyoX%;1k72_%tssa*IbEVw8d?-j@Xs z6w$%m7Onc$NcP&=R9vD9J+;SN6@6{C$1{tOF{xSjkU#%Mqc$04mN6ToQgd5AuraGe zg~cuLZp>MjaB%@W78j~jb+P!0+?OZN@Kq36v!gOtJNV%-fiT=>v$g|Ij(46?`R$Z( zbwiz0nZh$9d~%_F9z;BFAgdkvmD;?5O%pm0 zsBPNt*rlFVT!Z$MYXQT>GH-?CWs^!uVyVvyTR>u@srZ+l0-kK41EWl*riRyM6Fw0( zkOa;|MSx3MCQ;Nt zL>*2c)y{PdTb?$rN+GdlbWkCkm7w-CYnec3$DwUChDK^5c4;o!UT}oGPD$2rceD1R z`;Dq<88M;n(d1L6LWu@9XJx2b;0YsjTJv%-TAOiqDY$C zN3CM>G>gLuB9~+Mp7AF-nSMZA|nI4^Te;_SoRtqx(ivX zsZP-E%x@D!3J8AewlvY2IOERpYu}=Apr}Ne8@lD=#-jQT^sSKKcugY^AxV zfD*`-@la!8`^rq5jcj-KlnRL2=x{@Dv27~@{P6i+@*wx~&*+{(WOt1ZZINMnqlPrT zhe(FI3HfF?K>r5+L~BV!RNEJNGn=|pte3Hg@JVZ{5Xo^ArS&?YwRSBd)L>P9F5HT7 zE4+Z0H=}k;YN5TeE(Bv2`=_xu&*f%xN6PjWbhxz3_*xB)HGt&+0S=VRdb6{WTgY~J zROU8xiYh9o23jG^9mt!5qo^CbU~A)N2O52>nJNA2faDvr->>>7kyxm4~KSj zyyYi?<5y_+YS}FIf_QfZcU`XC3iX2;E3QDv=;!)rYm{-YMR*k?!$NJEWH!GB%4Y|u z>`GKRJu&k#VE{}x&G3cTCAW!9lGq8yP@TSawO7MHQw1P@uI~AnuPU=npF9;b=X$*U zOjF%6poy$+7O!%Bez-&ggR@~_nRv?R%4bHtW&BcL#BD)I^bsSHfcvt#E}{Q*LWTuWpvR zSi`Sv{dd3YqGZuEA0)Y{UIS!E>*!-t!kf?ha}52=KNvSuIRxxF*8?Bhk^({NuSbIi zEg(i733i8=HJxP1Cmz&`h?*E{;#Dp_l!b3(&=r_`dVE!y-Xnjg2W_bRZ?ZRDKatLS zGILwd)pGk2*~VJGcsp13o7`^dzVRQ+z%LU=o?jG-=+<-33b7b*=tC9K8>6+rbnLqF zdIiyP!dyN3JdZZzdA7r-z7(X(g^2)q7>7PcUl*86X_ZMTvffieZV#pkBjzlAyn{AJ z&2Rpy>YuaL%v$o*yfOWjWtjFBI2kfKMECH{R#Qzz;7w-Jc+PHPK6vWiGDdwsTEIrm zSPGa;k14g;z?V8p$gBQ}WS2Rhw+j>r_Sr1QcnlOjPC0>(UD2bqUfH z)Kr=p(myUPbSSt!D>z%@FP=8b`ar zK+RTCr2er;3!3;zgLSS&i`DhV-vNh27Dj$5}pQw@7IPcfy;+-%SG7_k4Yk`0M&ZtX$NElJjq> zOHI;U6^rC?IPJK0J$+1evCpQSNpXW?@WywC@0U;F<<7fFR>Rgo0*4Fg`u>MEq{c4yF-0Bo=+EQ+Hu6Y|C`#RE>=;b z`-XR^B0tC#@>$S{A1Jm2*gbrQx0P@aSuEJa>?1vEI7IdN_G`!PU;{`nEimT~`%=R< zR=@NurXRFf_DT4K;WJ09@C`a3%Pu50^NB3;QKz3)O#IWN$k;UXXTTQKyHJ^$NdE?- zd;0Z+>mb$5??%1`j|s})g6hyNvs?|;9f00YuN&W!?A3vvD4yD$OTxJ%&j$3%uX?kX z6QW>pH7PZgzVwIG0Eai#C+^FhE)`%g_4{KUHQ}=>jtfSo(^DL(fu)=m5^yid*@_pz+~ ziKTD%n);1g`#`9%zxjpxS;UcT5L2W$UyrLuY^*aqtLPi_T)em8t`i6cEEKm0qI=>x z5NM`t9GSjy@a{r4IHWpwKPU`o$`O*BC$|SY$@JujlKiUW0Y2ZEeNA!#7G4kX z2cK|5_C@BYhtR>l3#xtiz=OQKr~7QRv-CprW_D>mWdf8hM>^3qLOX526m5^AuRt!U z9c1Ixi?=i1qsn`hq+u7T^{MaZ zd=$L6Tqk@ewBv%i`9~2uXaX+5B6pAbc>#=n70#iDeVT3`Mx~Z_@QSP0`06ur1CPRw zCP3X7=ZqDHmo=o-Zy4_-{JkE(82Y}9`rWI5ihQJc=sy4p*{N)ROXj&+eLJvefPa8L zu~oHCXKDY4N5a%8i~Zk*r$WmpezqQSRW3sg_u!rP8{bZ}9VC-Iq5BJ;{@nEG&*JC$ zX=AuY@G&P_U{Cj1;5E&QqDbMM&_+|cUkfQ{AB?K;$+H5pAz&y}L~~3A3_pUN-lZZP zSw(nR{2K{w*6dRf@tEc=4-SAH2?wpmU)A?m2zzwuZB=*Dfk0rBSby3eedE!4Q93i! zlj-SLJfH~QE9IhL;MIN|*yWf6@5(D6{QfvSd&xuT4I;3nD9?S@e#Yn9lvo*AbiXfQ z?a{ZbVMhRX>xp+HkDM)LYHBypwQ$4wSqxm13&!6r#gbYkO>)KjgnSV`$yM7T;Ts{y z&Dvjm&OV^>`C;`}qp8#tWt!cCHX#zJ#q=g{kV{&WqcQs@?5@;x{9D1n;r=VG9p5L* zi)4|zPl<Syz-3?^cZ5{2zy92WCS94;o8f(QJ%Hw79eqBGd6N{x_^Fwla%e7Z3#Ni5so|{ zNj|9I89bQbm)S%S8{ld=zTLJN9rH7s>aWiJCNlGoGx_|)!D*D=FUbe5guS8bV;US7=F-!(oF1zc*95$Z^9H{WoYTKEaG4$`$oQ*# zd=&a$o(T+{z`sm*`6N59XZ5cPc;4 zu^^_t+jfH%(a{g7pyU^g=MxYkhtYe`36E%>*_})$WnkMuW;S~IV|dam4Pe)=L)Wiy zQ_OpqZA=u_)Qz<1Cb^^+xcM8bxTo1}01~-71@{hHfz3Z)pGw|D`_2NUW{MR3!*wNs zsCH`g!%OJj+22vN&`vDU3G_glM^C}PJOn)}Hj*oafbKUwu0ASo z*Q~}iLghvYrHm*V$*u~V0w=c!-o}oy?|&xWuYxB>b_w>i%rN~4e09LR?yew%GC*vv z!FQ1su}Co>+kw@K-t~_VtroV!ZX&VrEHc$wn<1g)?y+53(DHRmEry4`KB@owH=r0Zl_!vG%Jb2;w5xuZy*6E|Qre(b zkNdjV$#zF|?Khp=i~NP~Ra4}3Np5mZlFLx+KJu;%oEY0%k~+LJnePwj9p!52n&>|o z1eqQC$k&Kyw=AR+SmT4Vm3g=Oz^1{x;^6zSb^`pEeuGN7$9HA?BYuwcYH?2iI^ikI zR*U30yZUp9=5#lm)WK0C)OG?Aextdk8Tn8*HZ~S2LSMt%{qgki=M=7bW*qYz!>n)( zzWyEA_aux#9^>C)^KnQ_=6AyvH z--AGq4}roR2!Z3@gT#mlfuLrGMA9CB!W$5W<8FpT^BjOCgOEUwW{1Mc7=WP@mq5~P zhQe(hfMpAjK(S_rCR`eT;~S7b^K6DDy&HfRgOJ2fB#)rLC`Eu~mqbbmiJ+#pKvcF5 z!!Ck|q?flq(yj>uG=@Yn+gl(T{|UqEgNR~}*@v|vmm-*UgX6A{Ky@;gBHFr!;|EHh zd6Y_v+~P-2APOG6-NAV^*BVZ{8Apu}lGkmZ&{Px67Grlde* zQVzq)YzES>??)8D_lv+5zd)p13G`2`c>`E3&sg(PAHvDIo|Euq5~h5=fR9 zI>ay(h#KRP_>##{{D%}6u`$xLlBsCg709?K$`X*44-*F0tu>_JPX(mV zvm_GjK)T%>kWLIzQ9YtHq|`c$UPd5HBPlF{f?9@N@pN1>=Qj>5{}F?C$Rtu3WoGT4 zP)41WNgcSb%SVObmq5H(gp za67(7vbeZU8SP$-x63#jY1y4KCzO~-QW!TH%Z0^ruYcG&o1w=#c zAtsa4lNW(gs)dgUrnF|mi%#`z2^Hj%{i0e)AKJ%6R($6O_OOe|VTL(OQ|1ExXpy~c zoiIO5pc|z9CN8Ow6nouAXMd5xHrgtI{dh(Xfub&fEVUKuAy*GYxr>w0-xEi838lu$ zh|{OHmq2k$3HQ7uM}Vc0#5zmnpdAi%L7@=AHjJjCzaui!9+$);oF>~#fkttsk|IPx zG_r;$Ky|N?B7MP#k)$rO?*y_^L7~PfT9;vC!pSgvO^Ul~p}d@rk|}Y}U^ljo{@a5f z%aIqFfW$#XxQxKddp4cub{J25YAF64i=`(Sd&=D7sCoM7v^);BD$Y;}`M^Wk1~)2Mll6q)9hho<#6wx`h0ua|%y@x? zSX!?-c%DP+YN0|XHSo9=^<8^);WZ+C>z{O%QEmjWXBn}0{zyyOJ34XLN#?M#5lgtE z)Y^g&KtU>e>5?{m{dXWylps!7Qd-T4bQNoGoFPuR;S#-^NE~BNsCKfgHsp!4qGoy- zj?}SM?Xy0T{9G4~0sC^Kvcnm1N$Nlq#7M2G7agVZ4NknM3^myiEJ-#5!0QKQoo&pd zX!)7M*Bf!hhm1O$8IDYG#mXuz2Sq_Gae%63W!>)-SPask0b$)ta{Y^F9h5YQdgGBQ zy=^&-A0ay5lb}%zOeENd@&FA(+D!WRafm;D=@hvw6CoZd>UB@THSNtanI#_Uo$;eK z=V3F$3Crjc5$IOOR3=ywoa^goq!grh)u7Q#!Fg(|;AF|*+KQAx%)}|!*n^la=p)GI z1mW6)#Ix*M=(IICQDZCa3mi1+4WHMPR0=E_oV*~7`eRYTQ#|nu_0Q5rHckjhg5nQ@f5P`t6lS% zjR5&m@iV9yPhN|L{qGfc=azci5ScXcT~3Vt6SLjNFl8iXGuVTmK= z@YpEq7_AoWAqr}B3Oi4efZ#a?lo z!G)#XSBO!{Ob(#^cU+`R-xE)3E=47=I=IKlj1|O)~vmq%usC5 zs0s5>Z8;Opw(7rNhDpMOLhyqk_m!e$}oh5CNfZQ*P2OTQm~MS7Fy%AI4I&=Fo^V4cEK&J@N?W! z%|*`_cH+=EI02>EC5S52u_fA8U+&sUx0%o-h)@^eXxmSy>&T|+(hPA*pv&Kf^sU_W zI~Aia&52paaW>>50wUTg7#awapph1{;99E$E*-d}@Rk%Ycxu<9#S{Dxp)ojl6r1Ug zwWai7LE0UH1}gM=i!l{zR9q|;iChj4bJ?w_Jhh>6+=iQZD&NdI%=E*Zq{qYMe;s!; zset&FA&J($>LTqQG9cq17y*E~EJzqg^h*L^^^V-JZwM~V)=WkaeQA_~_Vr4(2ea$A zm?-U)ES!!;L@0jqs5Rh9b7!T{gq`2KxbHw0G^6a*9o*7R1bP*>bEPeD3#`rwmoHdf z(YMcRe|DEbxbA@_`IkVsb}F>44fwI%^I=fS=A~G!7#JQsB|l@AkTmu{h%{eYT6)1Q zRDn!Wy*Uf50r*GqK~@o(7Xt*hG3J=!4EZJ>$7#QOU{FlgVE3MI`DfiI*o#|Zs!)0Dk5MHYK@U#uA9m) zhQ11^ukTnN)0>&g%BO_F^K)Yr*YKao+x#jZ1m4sZFUdpX)GHrzpK$-2K5;%N8RY$q zjk~qvEM>-}urZt2by)yy(Ih^wV;B-MLqcm4@*1YgAKf&oLo4z-FXP1irmMU5934s` ziTli)L!lSJGs_W!SkkWSrQ|!5xS=E+JH@ZiitiRVLPMe}Be_${aTxORv4o5qf^w-} zp#P2=9VJ&p1bv~Zxntf_|$l^-B;mZ3wpEyY&(l`5DT5T(8Jf^Xl6 z)fO5m>s7y)W+Go&Z4Nv^CO;Tu$$225G?#GF*9X|^XIC)=l-XzwVwdk&!F5$0Qsucp zD}sh%R%lSv8~wLM%b-)r17rvSAylNz@q|OA~z+zqumiv(#~Px6Z3V zc38~`npz31E**W#ql8*8^d|kj_ZOl|3P@`@#)G3>E%{3*Wpo20Vrc(}rTf5SeZIL0 zH9*E9wi7_@C&v}bE&VMxYzv?{z(y0ABkS<#R$At8u~1$-WHp zsdjmfA-RQ;a0|^@?DBRDge3}+rt_l{Shsn~gD$SkZS$rDkHVYcY?2nSrfWAkkZZkY zKDZlUiU^W1xL{SkJAB}sHaMQ7ffY+=C_nUWFf_v&#!_1g4isk-{Y`_7t+NezN0tX# zO?%FrbyHth+q(DM`3tu}H|ef+8{IHB65~{e#$gy0V9vaWWZh^2_olK}Ht*wlBivq(#_ywx#(6sw-jjmMsmjVVB9AkC1(`gV>m^!*j=CM_$M6SG^&MB9 z(ujl%UP?D-dDaY*>EN4T>hkiTxWG9d`s-e*di=V{91l3j57Fs7%66})7952}9-W6T z$*sJy3HTqJ-BWZW@wYGfbka#WwrzB5+fKS;+qTiMR&3igJ6y4|V%xTE|M%H<>~rq8 z<38MatA|yi)_ka{@2vUz6wOv}SCK&Kk3L1WZ%ZV{$iXrri0sN^zoa8wV#)X>G0s>c z2nh?}W$Kaa;sb!CPNKww%>X-=x8U$ONQRb!L0_1tWlxz|_)7w6Lg7%4Ev76ZKyllo zQSl4dI~O!`lN`0*ZPey_R}wl=*$-dMeEpAeDloz9Z9g5arN45%W)9 z>c+$!ka*)0wD#kYVfqrYp0rv=FEmL$CF_u*PM#D4sRph?dDW}AGX zHGzu~U)EQsJ(HHBDz=o3ei4j_nZMRA1oV7G*pbS;TS}V~GFH z_XqCy(+8N)*R|a>ap&>f4fbwQ;UW^`Vk;pD4I<&zov;X|!O^lXqX;ynCgdt4Z)O-O zslg3ixu4HnQ{1_C+(({0TU&R0TSreCujJgx4AKpy3JD!HlWfunq@oFO=4+)g3BHzz z7ykfHasyOd1jmoId#7`0-7~VoWh*&~GltHwU+$cU8bkIuuCcbiEUPr% zfzKf?;)bmLFfM9q;0&Vxy7R`ch~Kjg&&%K*cWsh zh4H?Mmcurxe-;R zcCfYly!IAZn~c-O5XOzZH^|(<{`&6BJ*uZ$$J!0qFYMjb^=c%w&ozN}LNVm$pxS&T zh97z_U>(Ep+b6xpZ(l1N-&LrYU$r`IOBQ2eSAY3Q38kFT+;MPsK_bpR40r7ioDptF zlXur-U+vE^mTt4_6kCD5c)1W;_=ItlmI|c~lPe)g(CV@D(Y&ygFXju`zrL6RQ{8pJ z4kHDNKfokLrqKk4)Ub}&a#Np??gTj%Ql1I+-}>>NH|`M3mPXw7YYPdCtA=-Rl-9Wj zj1cPV|8ji(ejQ~KtZ%jG=}X@6|I1+Deax!%3HF82LfEAIM)67c5#&L*`Z>HxGbN|4 z?-S$8;)k?~!Swr`>SEnP&4=ohab;`hgn#MJIZ~U^W}l23?gzr_&~wdh<2!g8oP$W$ zcfr`+tjX!mR9%Hc6+3h}sfQ<&#CMyV-dn1f``snOr~U#DwGp(p2znV_fyaej3-C>Jj#fllrG10Yk+VBO$ElE@zmdbZsEB{nB0$b;37&1bk*_CxyJ?FOA+{{YJfsiBx(RBz<_0iT!Y zU3;QFyc_P39(9R(QhNX{#!>ogTC$SZp*lK z41qH>g-P^M|2iTEc+V&K3l=d#a?aG??qBq@ZqX_yuWa`Ptl@g6mvniUWzD}f6_3)Y zlYx45h| zC2+0(JR7?uKg0XMvqg2s$O61qpQ-kI`npGRBeq6+742d+hqgQ354pB>qo3$f??)!L z#D1wxYTwY^eC}rAm?!Gswih`1^}AnV+M(1Gz1N=3|GjuWi-U_CNbnHw)myZ0@Bnn! zSqVg4A$)Eb$7WfvE~;7i*I;$dx2L$AJ>H**dK8J zu1!P+{(m`#1P2Al-DTFPr_83iVYV=~P*-oP$2cRKNxoFiEgx}~q0|>J0t%n$&P81; z_jrrU#C+a%YbY4{r>mbp%Y`=ri!~HDFmeI;g8?_vDZj1QD2kezeqvdZD4*q zKAaqd9(6h#H(rjE{FU>q5%xtMjBE#2L3)lyhFi(@lI~nR-G_HAZMmD`gULqxjZY)$ zeYM7{6>lQCiQCZ+bb`FP^c~-rk2FLbf$_Yh)95V>7j7Mo=cMgkb?j4a{8v$(%2|bu z{`s}Y-jq}Q9{zP|8+zENXW@Q)RbjL@1mX7O-ddn##dp>F>0$Ro!Lgq7JTrdXpAU^M z;`={GVh*Px-Ko_FJ+vKwftlx}zGNV%304K)j{2LAVSfy7NkEGuV|*v+lS!6oova;U z7ZTYC)tGuPuA_bUhnzP`?yrkl$Eh2<-RZ_(`JA6dK9a|=H=Tp+WHmpY_Go7ajX8(8 z!MLyI7baOY(VE8h8Ats450kwUzi@jwZHY2`Y`WVr=M)luBChaXMYe_YLv`~E@he@> zx*n{k=#417R^EKXYZIQ~3qno-yKy=O^-^<#dGXvQpA~=|2IE7VfxhBBFiGLONawM4 zlC>N+Tcnq-PB_aE%%vK-oaG zpK>V<{@E3ntSts2K5#BK$I0u$-Ef3RZZo0BHj-YdG9zkh=7udhxds+={v22}jM@WTqxkdOu>A;n?B8?l`CkCH zc!NH>Hb?da@>p*hSt&P)+Z_$byFF+`xoOT>i|hR7rA==R)3X~mXXzU-I4?s6d<2Q` zgRUh%@t?lk*inb9p}KSX=Io|M^Z4=JjS{%`XsFjySs)Fy8!O=L6EPjeH~H)TN{}2R z8hXo*iE&N;MDp8cb07bJ1j|knN&3&z!G8^c|36fQ|26sz{_i2;e+I$-v-fZNpF!~d zKPp2Y7*POn&=0aWr63rpy#H^N!B7NQ1YY<*D#OkO&xfvi|UEd_}ohF1O3Eb8LB?-OG`y`3{-kG6^{|}mB1Us5- zcZ4jC7!?L0K~4k)T>UdM^8d{>_%uRu83dEXlAA<}DsUer?G1AuAIFW5oRl>p@?NyvAu?SLl1=m7FBnhr zKkpY#3%uXY!@()Q?@kK_Hi0P#fg^}13IBr|ltf_ZgC!{c7u*1eih_cQz=|S{q3IG& ziEUamD}nF2KPyQbLOv%&o@_EFOqkU6$ZHN-dpmxcd-Lb114jU35$~!m)m!?DeCs zRn`_i`XI)0DIuPjv@Fa^CB$VYD&6!-Y#-L+{9zLo=XybNwCS>jau05NWeKh?)D4EZ zW!gIQ2qsJm1});eM?p#i2by%(@eY3mjWHKN?xOo{rL(TMJJ~!1Qq?b-6A_mpIIV(R zMz|9>JeKEyqdV0Zt$WB%1|s@(CbR#wE~jwUaXvvoCA2&KmaygfmmLG&=d~SbOQ|M( z0O;31Fr?3vh%&bYx5}QH=}FurxoL$VkGWz2B4E*!UCed}mvpLgi1q)HcPC^7^V(m7 zxRM5D@OD8;5%^d7LL>+1BS;Y&A_u5%TR{mp5eLE0wh{j!wV27{B>UDMYpt+>9{0yu z>CQk3*$*v07|0~L8k|h>{YMCfg=&7thG~O-AQnq7QRs_F*-j|PflDT=%i}r!yRnS} zY`9P!nvyFCEM_x=kt0XoFb|V|z3oqe2Kz z&js!8oIGL1T3!3$`LWaTZDfG!`(-6u0Vixd37!v+U40>3%5`dC*p;<78dObkJ_Kw} z@&suS@uY+i`cV^)IrjF1L}~tVyd)xVOIcera#eWB|2P&>s#>0=Y8r`N^xC4mPgs1JEPz< zo+4$bIeh0hQwrQ24G0lFj|*cyz8xw$aDJaK7J$NPj52Q~*a~UkgEUU+{E$$KNpJ8c<@%{Uuis2*18}YE%{iz}%ldDmE24`P`Vz`% zPK4IVLpuVjD&V<(B~&2Syh2pMHNECn)_SSKXHoT4j1a15qE}X#Uq9iZHzFR6xjEBd z4B0eM$`tA2ELfdY!z@BV)wCBJdT+oK{@!Z1xmFa$^g}3Q{m!YWpDSV_{ z*N>=O5k9E)n+_VC!Th{_1owqRZgg0E5_-(-7Nve%Z`7vI9kOVWe^!|ZPcEM8?Ob_A zqElK|!p{=LXHFp#y7?+Vv$`3Y-C>({5&SIJY>5Sxtff&Tm0o<+?hUqe!)pyndy5C! zj$|=JJGae$FF~6@^-yM{uN^l3CqOB+WJNgewDU$CG^Kyv^^>Y&Ygvl6^D_deBoPo_B!i~4s+8Q0*imwoK044PR}!Oq5X|#q zlA_P)rCf->%4s_+&TBaaJ?lG>FDDV>Z;<-2;08&PuV!5yR!pyyffN>gq~NFs?>f{o(nQ|-CbZM3>oe2a{dtC z#dKZo%S{5k{xm_)nb7uq%QB;-UnD{-^FyBKJctM4fkQUCtP@|Z3=@(RQDES7-9wfV zS~Dc6Z&>tIf%L4LehY=m93D%o!PLg@X?M{zk>i6MkLE|%g1Rd;?2a&w2t9ukYi(NO z;y(>2GflY8SmmeRPD5W72qXW5NE^tKyfF=0NAgxHT~nvqr@F$wo6}}Al3#&Kgn!zN zqGy3smNlZ3r2ARL>vNb1DUf~A$(VffIRlyZdOB4|Hm^#~C%5s+$zg0LZurUfpYlpCmeME<+9^%&;=)Pm^XH}A;rVrzTWldQs*-kii z5ELF0aUabb-r$Sbg=Iwg=jgoOKm=^UG}wVG)%C1@XCONnBS%!N4?rr9$_QklE)dtm z?TG5Jf&0GBnz&4|I+2nuX-I?tc-oF2QdG2ZDZbk8WOFIr9^<1j(kAMfcj+vaEo7UV zSjJqPGH=nP{VRNFh1!LTaFhhsJT;@q=AF`YTBr^C># z%5xGS*sr>qswWt0gc0OeXN^8SId?YIdWUanHre1)lcqOJWTb5QK)y$6xTL+GnV7YN zsi#$pBCHfjJ)#K~!?Ja;Rkkrco!uhNzDFaV@g?M5A`Fa6LOyW_F0=THELJvag9+)| zK(7loKUAcqJYUZJ!L~4>iR`=}yFebYK#QAt<`N|TF>F^J@*|I%N5%I?Uymizcl`Yu zOrWZQOJ?B@;hXeTQ&qIdKx>!LBzXWXOJ3fh+Lk0KiMstsX>7C6h6YHBRn|5e&L(DE zN2kzAXV!0Hp4}C=&``4E%q>ako8p7elKVi5l~QY{&ZJ6LIl6rr%M_zCYh|Q9zO?+e zA7U(jEMJJjOXL&!y5H1We1k;X&ggMPiwo{3`yeowgZq7X{?JLNsQU36hX*}_y>(|9 z@>=I(ptT3o`c0;pT{x&^&3=GhjNfpbOkE^b9GMffZG@k5BRAx4#H?$j5UjTIYWESe zJ64o?L-p^})=lp_er$K58!$?MFT?{GxW{w%iDYiu%qFcr=MSn#eV8OzX%PZ|yd!?_;87!yAZG8~m4 z6vTXB+CA@t7k12%qEjJeC9DnQJ?}>Ux+8XjWr{;1_Gi01$x_K>)3L+*fq{fPz-^Zq z{rgU~KKrzqXOtT7I^4f!xPy_9nFoe~xgT%c{9Cc1hlRasBg!hZxP3FTtXOSEvaWDS_ErwKm->s)jYm$}{loClXW z#p?&sdLu8THB)b=&CeIaEAe7*(r99b>jiq`*l9{y-Etr2^HOy*CJWw5d0bcyUmVM? zieDw2P#Quv7jZ%M6}3roeLJz#SdSAS0tQbJ{Z~}uPvD{Z?*a0%Zy2%PgECr1cs zCqKZHseK-P|2zJ_;J6HdF$eL#4P|kFQG=^1V1o+_{~tl|KX~&$<$0tZz6kOII~^k_ zDTyvE4Kgr^5RDZgF2T5CXyP2$kB^I+@fr{>AL|SE6DW`un$BuoleCMvXR>+G;O+i{ z^Dbqh)BVknwX>})OL<4xz?2^i4Hvdwq-uhJBtIXfs){vGBG@hlvDye>*L2hO^>V{A zx=YA-e$I`l0j7@8U}w31q#+_+Ge9={S3s2S;Y2p8`}Fz+0-LWpI_DiB@j?Fpp%)vJ zNn~Xd+=x`&C}q{etPlwm2+Lp(8~Zg4n*}?WxaP?a{6#K5Dt;vb5{y;!RsQ^c6{4p4 z8%CY#e^mnPzy0fX{Qtm)|96D`pS}O1GODZY9su*Tzc+83iSG&FgRoYE72QVaNd;vE z)Wt~!kDFv>C{4JXZWrC=6-le?e->)wJ-L-GHN3NduKuxW` zivoj=9eGr*M%Zp-(3wAXAmo4$=&sxf(n%adJFNFW<{&X~W&80IM%=0*A6 zYF?;hM-=rL^eqGMTgML!xg`V6$6YYBIstggxJd7jV5_n~rcS_x&03&rTa39!tSF)H z;i{bXzcszy1f{&8M)0)xG#UBqGB5Z?KiAE+F6gd+j#-1^&&!yBcpd?EU5S#yv3oFw z-G*$#bv^V;^vCX5q-DWKO3)W|Fo0|PNp3gFx36G*$8T5Ha+=DpiwD`agbFLXw85L$ z!KTYGzRw7y4j4~2ScE$?U4*{wDB**=)Yex@JvUeurd#dMP{!Dy#tq%AkQ#tJ>Je}1 z&|T_4hjw#xN$xJdzf<>m#+SdLSWP25j@iKmNDKHPH8SDB)qU@*M>2OnDfZ|^m_d%2 zLET^m-!jTb4{1*WglL#^Y$GddlTU4v+HG^>>_F<_A#E*%xho^rQ-__F{Rxfp=OGk5 z_b2=VqY+%Z98}E((0)cD+=l#=&qV>1FMpbm8^3)DIe@so;s=(=0A2$!&k#k2@< zI}WNj4)lN*4Jv-p)QDWvh@xK(({}^|Iv^f75;5)^c5n4Ne@`?ciz7_GMrZt;9ii#$l8xh(f#Q&>;pTs&10A6M!qCW zW+DOal&0fQ;IX6;5TX$Y7~v8ecDYT)VVJC4GKBconSLY*I+C~D-{}2UmOzapVb8%G z-vwc^dx@6l_aMg9hJ3*X8gHu7E#nHdpV>I=Sxn5%*wUg_gJ|!zdSvTk$$TSG8cECtN>~pw`1G@|x-*Nn2F$P#X+f50e-_n1c7M%U zQxtnO2z?Pa9f49k_#x3FQT=M4YQmy)6c@F9TIa)lIzWg!DvkzyIDtF(+LVa9I&4ly zEWMoOhy{`~!G89EYC5Uw;~vWmuZ`bDYd&;g2~!oXY_&Gzp8mA-|Jr+d+LH5fcIjSC zm&!p03pV;hMJK*A0`Trxw&nM$g3{@I?VZjO-{v-*BztdCvwEr4{0+aF<**w3nCAV? zdqZEU@xQdGO%d;i>T5C!4|1{EJwe%YONYy?=bYKDL`FSHF)AgFpAqNtxxSQzjqmex zirbLgrn&VhB~FUw%bbJN2M-#T7f^30#=4%Df;s+2>L6Rwc7nU084j9W2(3fEiB~VV)awt}dV1cs_nlc5Z@8xp z;H+&YSyL5Zjszg}X(`zlAl=O@H~z_*??NYqna!)(*#RVnO_vjXD9oSkm3852@Vx@Z)QafFl>@ ztHc9A(!nK&o$3OnrZ-B;m1EDjT%{AA=AZe@ix-iHHJLTiD9Q22IUB*T4;zyWxsofd`>%;XUp})h z%DK;NJv+zPTrMCxXaiyXOLp@?%u-fLH|c3EXs=bOC)5ugYrrea`Gw1ma7mi+035hz zEbx1-a3Qleht9L}-8}({%kJBmx3t!+br0DSrEU45N2DMH(IH=Ln&PyypV_CgWoBD* zES+mT_GKwRa-6~vk8VH5c~mgARi{@iErk`Qt(B8u5*pB8%e}R0Q1@vL%_T`aPYrMQ z`D4Cas$YJ6Ks#CpXHy(wL5%I|({Ji(Co7-MTpR_yUkTmZTl2Sss*8~>if87`lAT=Wus1xC4NPLK!O99x+4MS3^#!% zbjuz!Zh@HBt=_t%2Gl0>Tt0Cm2_^+|%*A9nq6oNzAw1<@NpM7Avx(iTMrLUDl0YQmSSXZ0-~}$Aq*PPSm$SkxL748j_A1cHTCcAX(8eovGU7(kE&b|^ITDPZLtE_ z7NJJiT8RwS2_S8Q?{@Vy)bmEv6rQvVg~Y1`1Uxc+fUAD?t?X#dos8T!6d}hdGhNCO z&G>O0gN-4F$wu6Ub#&EQEOO5@ zN6(T_`Ii@nX zah~AM`&-rIgErQ`|CKsro)lv3=vu#e&}-j7R~n>hq$PTaQWny)eg!tFolZ2?Nnp9< zfPa?bNHi_)MpGIO=e*MM{TCAf!LmE1*&aN@ZiOac%|)`AMeIeqR;(<)*w_Yz#vfFj zFQ|D&ZvUT6Den`v&EKAJ2bfV^JvJ3@(ym_6+vh$L{V5th*cb}<#|fAb6Qy~b9VTz9 zGTW$L@N#x>HVp(7c2M2OsI~^8GO!~|TqyZnMFj_q5zaVvvE+a{gE#zR%<_|+01?rY zHDkduL_@|qNe6WM*>U*4OHyoT%4u>{)P$^G=>CO>@l4Hs=c)D6tKTU4BkY;f=&bQ*-_DRc++SpQB$5s>O1Uk*^ zw9~WtRyB$8QE>O1t@RQ5u&o7)m;EuwT^&C65RW4|P%DjfA)|~R8vI305$$S0@*m-1 z=nW*iPNYb%9_)%(sEQGys!^3q4I0~E(ft;doF2`3&C9#wqnK!XF|uucs64*aD((f7 zNX7Vt1F7Zuo-p^cOqgqmH9}*S-)l9tNwWTGI^$Tt%}kto+dbhEeeV;{1GE%^G~nfWfQDJg9Q-H85Is*mme7Uu zLyY8ZyxOPa-(t*V=xQkM;6?^?xMcL&b9jcWK&C*2&*U&U|Dww_mDTYS%U=iZ^yl zhAn?K4riSyQWAb^*SlQ|~N~y#4i}`}&D(v}?56VFAONVc)I!3YgXa&ky`;2HM!uAK8l4 zKaTyWfof)7@tA8#)>7~7d}~KgO?sXTzrQ|C1TI=Va0(9GS_42Z4bS(>v*AhZgRiKV z^T}xs838T2xKM1Av};#Ru|9I8GFfbSTkN@mCG85FQ#Y%H9}xPozPg{jExM6&-dw{^ z<(O6VkBloRVIO+TU*1W>If^o0k%Ow_NPFu9E3NdQtiV%lkQppC{C!tX;Zq;1MR9+xbsOXIdo*snV^K0(dl&r6`qSCX@B;%o3e z72h6FmNmkbA;MD5guq&miy-4uXAm26^aT?45p4^F6XQcM!<3WXzkBDVU{^*-vAsFu z5g}c@c!VY7iNEq@E%VnR{#oj)echw1oN+Fqz=rvEV2!zF<@>L17p2eHdjdN>45Pnq zi4Nyi-V)s^7COl{o8v4Ar#|F`t}bHtztj*P5;O?T_8f>c-lS_h*sl`4#CL7E!B?SD zJf0kThkq+N=l-Dp+?_q8el-UvZmC8NQWi}SRU9ljd-vXE`vb)RDQLG06a?xG?u;K) zDyfP|Tx|29BjHupe>^oX%O7gApWzI3D(O4&Ab}5Z)fe-C37JRDD2+pN$rIt~(>y}lJc^V)*%!3n%ZaBxZXF<5v=FHoG2Gk2?kaDZU^JP-mnDu=&RmPY1LqFt0E?xW6HEufq>pVVi;%DgI#3a8;yBENUxkVp{&ol; zBh=UCb(Mg+5KMXv+LxBB)<2-UB>BrJcQEfm^3zCpxYTk-^h~fa0x;WOYS|EO~gg@fK1aHkE^MSew8^^cCgelN@>C1$aCNN%4bL-L%ZyG_ z8momX-{+}Q_bNgxbq0%?If`B6%TA=7Ej0EgMR?VIe*E)-8H7aUm|ob%@B-D4C}A8& zL_t0+F22yv)62+&9?`eTfJCZ)M?%a@F!v#Q+ntSC_++I+-M@OqTEDexNu##ZeQAN; zQ!RVud28Eatm|F!6`w}6_R8(05D^&G(InWTT{awTM4n=4YaM~t>|%NDj;?Z@=6^%4 zGv_WT;2!AuklrGMJ*ScRNqCkk67+1W1f45Igi2W8(bh7)S1sRz6y}Iu%7jvjLT<}g zl3fRmH^646j<7h;e8G;qMT~;R3_~+VDXR5v!puYr{#J?)$Mu>9idSNcUM*36-}P~(dPwOC+m`n&pISKkDQ z#%nQ<@3Ao$cO@08D3AsF{vsh5lhww>;(BDM8Az$1I7VXbG1-Ve_XS`3w

_va|ZA@RvHO&{bsGWz{a%>f%gX1Gk)6+0q}$P(b(+4XxNmoa(+w zV-En@+>FpgwcgkL&1qTC^r?b<7x!y*9M!zeV|RKvup9L$cFqe3)dj3?uI}z8ss8uR z^D*xJT+@0%rYF`~pnkHX{9Tu%dpA=*L{_!rs!b1x3i?7GG ztmdvgMaef*Jq<#V8_%!a)p5_89N9NQuQr!=1@IK@H?iRksV&on!Gar&(|D-^P!G3d zqEC<_{o}$!^~VoXv@3fkjW?63eQ~>sKS^$*{MLZ3KtSfSne8DGxmif>^+e$wmz8Gp zFSfcH$O{`fVRt-5V%N%e5JQe-iXnlU0U+6Vlp{rG6^KQrn0)iye;0*NHpkZ363VbD z+47ey{s`sIX+$Z07=PLBrLhKhKLYQ#$<;p3cb=(|;Dz)m`YeNo9GvCtrJL_d@2l>s zE3etbwJ&+^?keg?7XEo50bh7zDMd6FF@e}YJF$-dOa~X6*!!#Bq6l>2@;;Uy>~r?@ zSdv9C2A(-d$_ZDaX=UJQp;GVU@wQlwle2!U`6*OTp6uO&oosH(gKyJqcsS$n`->c@ zU3XW^7>&$ZmBzdvoCw7cuJ~a+0;;)9BXpKaGOYQza8dC$DAZJqXikpJ!rCFmqD|(0 zscu1>BMP_6`4$~)D_QTc(udPSiQ%`R9llvmY{Cr*M)f8MD)ZznE;Hs5^4#!oP`)35 zB&j2!X42N)oFSjdKfq^H4?0_vaja5^|-#K8RCe zbPLEgRgamaoKa0h}(6nOXP2B5G^W4UwS6#BEQvJx0#V(-#Zq z71hKhEV>*&WOlA(2=PS!-XgPw@99ZEpyjJ2@t~I_#X6zM{sKpBMX(13&ZDQ9WB8)2 zY2HzC6JqoG8COdk^2JfAn-x3WA0F&PaslIMhG`!qBgi&m;{|fjd#EPHPB)=Fyf+OZ z{251E^-uPi3&nHzUmLc3iB!!knQMDAkQU4-*2D-bq(o{){4G1w4BM!L1L9`qfr2V; zR>k_-t94({UpxDp>OcQ$&^f#T9Aid94r7M!|Lk~#Dy{^PnJu`nC~b&B*9`gy?UR-(LiRmlg`-;6Q1*j4Z)da8jH)|SAG~xXx!A6R|Tbs z_!*YwnC6AE{suGkHP;?Am-K-?J~`V`nA}N70q8k*<3EtGj~Km=P(p2p`fKh!uiFCpEP&i^S6p`T&Q4b%9evq21 zMfKgz8QK=M|A&Xs4d~0~QLpE&roLX}%PZDF7PypfP3EN8PS=jkF4|mL!F5x($ahsk(R=@}dfeGViz10(73d-- z_p_zDIi%DIB6D2H%M+B-yz@J;=NkLyvVTdh zp03!mSbP^1vO%9dy!mHCan#d-V5LK2N;sjRdCjzwV_4l2_uL*q4Xjbukh|Oexp$v4 z>E$X|tzf59ka^3$rv4Z=XVCB01knpF(rZ`8dF5$T$+4*(QWs2g;=Yy|ERY44U>y$>p>M!S{GJM~8H=@B$9b&B3V8^|m>QPTyOMi75TeX-4O?is2;vb?#hHN!dPoHim zQdcqb;`#FBGha?|yFDG$pP zl_T2h_%2%M-Rg9-@+SRF*>?xUre=bRGjJ+bkGL$|398 zuF~U0W6CF|XU7ZwK-!|-Tqx*0C$2SE4gVN@rfjm*w-(_5CWfO2O~GerR=V5oxVf^$ z6%}^UClzA0r9I5QRyAIGHLbvOe02{y!M1+tK^LE9sF*`_tG~7M>m%d2<(gn}EtUF0 zn^#8c-#V+LV2&)to5S5>1z)Tdnu(DnvPy&$en^6Uog)Lx2gB(CgGzT>QHERpwfqIK zEhkH!_l#?lzuAEVF65gO(t`bSjHon(uCZvXj9K86r=Hk2|{gE#ct#@p0=jXm`5B zC7VTUYuc79I-h@52Tw>@#2_{;^777r&n>HJ^k3@l3on>akq|+`G-}IIgJuD>+>a&D z5d&5&wrjQ0zI2`h7;AovU!=LL7h#WD&Ejc1tQISVIf~P+=6>!exkWAypC{Z`b{S9S z_KfXbDLxyQXX4h^(9rq8!`v|PT(H%b)8$AvEwy>=F;^Xe+_*I@8#jM-=YB|L$1zSa zBayZA#UnvVK%4@u*=PAOEeIiEvs!$2V)TY{F!F)Uu><((&d*BPVnag*zGI$9kAQmd z#bf1!9fxqxR^639E><@8M#zHcL$rdOlfsqO#3!JmWCaVm2vfX9C;OrIV;p}($ zCV#Ak4lEgpn2kQZ`g8uek|~W7PPdJu;p4fhjL<4J$*Q}C$D5}7>-U8H7JDsET)fUG z8w)8vLxuuCvU^Iijy(uX_8hmMw#f1FE&3sk7Ljg5sM0Z4Ao)I?tv_`2$}$44yS_wz z4!foPm*q^H619?>!SXk?uBR-;Q=rZWMT@y7zm57__y`KaEUg;8F+Cd6h<#FWmKM?G zFDp?WvE>(eKdGeQhyaWVl*7^{FOyPwU~FsGD4LOB3+7pt=bKOMJ&tv+q8G&tGmazq zd>ZKy`}>T;`~F2$pVgZGyBtmxWk$WD&(V67rO$c)e01l(-kx$b2z<4|)1B8d#}FZB z`M1h01A?BK&~njHdeJk}ByXO*$emu*$&HzQ+b!`%a{p{(!`ZQu4(d(;WE4SFwXD6E zswwmv;9kJTJnU*8(k2QJ!k|6?S~eVr44d29J$}5sCE%`fw|O~=2zFxy!M8Y$@sb`5 zca3YZ9)wY9VA@uV54`^U3em^YlAQW6I`&p|H3zKOh(pHZI|yrH<<|N!exuXNAiaut zxN_F%SoE>d^fi@E)6BW$={?1~Vh#NU92}7MHlF@<5PoY-;In#B+P$*4YHdV`n|{#F z^LC0)D^mBTp3_dj-8s25o*zKT+g9yGuYR0WMd;QnKEcF*$-6S7xY9<>t$jgs?is`H zsW!-3dkZZlalVl+?J+(e5MB2~P1T%F<@ zI8FwPI6skGatlg&m?e>BO;kx_Z7zW{COLeV`&lFn-4m-Vrcul*<=P&{=Dq3c z4rFy8MYo&c$BHt4;BFaddEL++ya|PU&pHd&C-Z%9m4zQ`I9L;r z*FRr!-xVlYSx4XC4}5E2?)YOosh)M7ZRXa{Zdu7w8QKTcD(ijsmlqX890j~~d>CR= zU;~fJCU6OVHNcwc2?HUe?F~g0PeQS}$9i2{R(=8-Q+w|6H;Zi+x@B8Rs`gcf&F;DI zN-(yJgI?oerYS7nYudWuI+|5garbE zJ#&6)*+B&L_~tEG8V~CA{sc7&=Coi^y$1J(8P-=v-n>p}i;(cgV2gIEJ$K|OTrJ?& zKasnH)_JTM%>HPFamfdGRv+q4nE6Ovndu$2ZNur)Y5ncO^wD{?g_Opv7ya@2T!13A z7hNEJmjmd%A$acyT)~cdmzko_J=DFPg}n{FGskx`;IUx+A!&xIkw!-Gl3`@7{s= zI6K-eq`0S^@WWI+wUt!5y2mxfvPEpdmd%uJ)`aLV5byzZ5zs-vhEk`gcWzNIBHu*a zu85tPQyYJTJEKN!PTz75#;O~q8pWYWikgP}MOBuFy;!YwBm1eak0+q{%+)yvD|M;} zAzMkUe((9Gm3ybq^y)ma*y!o)aRN<&>=DPKt&*DlG3jmHdkUn-(OqD;sDX$TiI`fe zV7wW5(AoQ*GK0!SN0MvN$4=_jD|k~7!C3X2{Rl`mR>Th#7}Gy+FNMo!q;BKhbvsW- zN!9g9#r%gQ)BgG%Fh$mJn2}Z%$(1Q16&57Rw}L(j?=nhL7q(bzHf7d2hxj;xRLo8g z6O$NYQGRA8*>D9y)fcO8Ksf&!QBD>_y5{kMm`VQAWfbg%9?Pst zklcM+CrLmdYSa{(1vDGq;#HN7Ur%uad?CvR{UUN)PtD?f*qpSi=VT(=82y1(+;fIs zd)1FP^0`a4S~3^%UY0NvsaRo`%~&hJ=OnvpD{a5;ZhxSK-`nTOu4a4qP?Ic&v`W>B z88rHXZKAsvVa0taJO~7t0TWY?#$yXsZhKkMVs~$Kp5+5v=ITA+HLqIig7&#bq_)l0 zyKcXp9A7?+p3z`DC9p_=5B7A+(|wMc31~&IuR+<&H?`(DPA8C%7Bb>JxiNA1loaooi;d`HJ^LuDe6sX)qWJ=;=B zfi77~gLgW81>*7KNp~#rdd%S>cbnw3Q{ic(muTW!88lmaW}s% zD}L?MzQxN;H(|=I6*!1wf4#|9eX206#flN`K~W4mCZHJvnrxrRZ!h!JhHfF%XTEE%tt^gQ*I6U9bCjLt4-Zf4r5CGjFo_m_e2U8^O*XLLK-J|WNH`$&*F<$b1 zApt+s)T%qDa3Pey!Qj=P_{jv2$yaC2R5?yd`g75xPMV{_VolNl{9t~`>k?_7p$@Q{ zf5k2|8@TL-g-xMI@C}t2yjLiTlt+mw+jG5IaXT%0E#bO^#d{n338v$T-3+y348rY7 zvX?Ev|05##3#dNk9i;-f#I`FXdz0SKqJD$!t8|}ZFVkCXPUBY@j^1ETd)dJGnn{{a zDW$9NTW;MHrE~1gchpE-9oC~)V9m>YzQoVP{D7F=6Aj!AqB zKXE)>6>+6QZyBpNGIQ&}kJap0*U(s9#b|lN*tu6bPFn<^)rtD}hfQ^QuVZ7tF?$fC zw$@B*^5bqNSI=EP5)&OgG!JMx4)2;h2wYF1pst+|&4fkomccMqqbV-WY8o`HOCSAI z3hK90zv|$ba?Q0+GA(czCx3K}VFl0b5U7|F8T3@t97+$n`u!Y<0vjP|wG~U1p*^?!1-M>5DvLN7JHz==9Y?^a))-T_iS z9)P{hn+yXI*ea&2uV~Pm-QKER@D|{z#bKv_r{HsW`3hPtp@s5(sd7PtJo&|l%?kFL z4ZaEpf>Rhh_KbPGTeazx+78#)@fDMOMJgmk3_~@7a9C+o6uZU1kvY~~6`1hqXf3e^ z7ChHzQ3?b3Yt5KqvzwAg)ffL&$_1jLZ=9zcnh17Atd9$trlj7C72JE9hoG zRGME3+KU9owyAWoi-^%2Ue;oZ92J*;y8vI(;h4gXb4OdyCXwY%azQ&>CDi7U;Q}xR zob9I$7n->-khQjFgbm$eyHlK*xT+Qv5S_f54hKrpB>I9p-DBDc;9Xo`@x@zXlg?@3 z^y%wP>NOc_g=a#no{QTMu){BLw)?V3UliA4O_fU{IJLZGQ4a1fr-}#BR0(VcO2(;b zgh`#k^`+%88Pg#_+8K`b!vteM0^Wnnbocnlt>n!zUa{9pC&0A&L0GxFT*G!E%5NPI z`$3cXI3D#*?Z_X6ys=R=$`qYLa(%DBs(14n|Mo_1}vVnHUNk4j8i45=wC^R$KeknrP8C1 z$;Xe9jmO{f5jIZi9a+h66HU|@veHH~ZvCYJ_y(avJK-!?SPI(tx4&~7r)%KPM!jWv zU=Beee6}`^>FP1aT#a$UvMRV?D^>p&U+)+sO4zK~wr$(CZQHhObGL2Vwr%dVZQJhN zjoWkP#GLz0#JxYWepXbyQLFOFm5{^k2NcoSeuAbe4*w*fTBmKikHj8tBrxnxP=?km zho`2F4(XM!X~sM3L3@qUooa~VpyL__eI9zFawubs^u%XAz?aq3nArxi-EVkGaj57{ zIar%&$`E3|M|I=45lvC;b<@0<4B8slwx=*;#F?(I{$79V9hKAX zJG^=#Qj^zD;vX#JG@$S8WkGtQx24(2#dq*UT(c zd=1n*Kkz8LDG2l^Sjo=sgqDwlhP(-AijI2vxxuiWj+i}HW<}eY+}?dUi&Ma)&PV3{ zsYRxLE00{F0SxlWox>LuSYlIZ@JkHhip%H6cmd1CR6Te{`(2@@yg?7#y^l#(29FF8y93BnJVApvT~)7l{^R?Y zc>2%nvb^v`JJZf|U3hWpGsslWEO8Vux_RKH9`Rvpmpt%?Gey)q!%A`U7{52Z5_sC+ z-m4zeXJ&}Gi^5>`F^;|(@0#Qhy=wp~Fp~+cYhAyXc%v^*mf8M84-X~6Lq>-JvQg+M z!=^JwTtVXJjVxzL`+N4!lAqJF%hWz05ccR0=H)d15vevR;w|d}KZyw&yzW}Xsn*py z&dA|?F#UmW#Z4{C=3zv#dt$$=Y;h&9*_HNP0xl;^o9Nu4O#q-UPteXV#;^8hsd zYD!t8Xl)oo>V0A)wJp-%^!mx1{_U!2I@Ui|FzX(8Q%YhHFQFc4b)1GgFX80%%a5#{ z?a2{WU-r&(s@}`GYq!;RKl;6EonV>&iZcJ-e#ze`GngEwsGzJO1|Y+KWOo0*m699+ zKq&P9U<~Id70N@<`0dN-oKXyqdBZ45zxqL9T zc0f3%{2<)Bd~l|_0eF80U~CXU2w?&t#ApW)5)wg35e*>ZOn+c<9zZC?_(7C%1yJhp zJt&Q_K(yBW5IUOyX#G7vj6s4>#`pplR)!(W;yGZJ;s8i1i9xKjxln?3LnwIvF$g^2%KG#MeOP>7V;4noFM z0LgDth?spAOwI=wsSs|2QcNI9DdPyGQY?g8l@CI#wI8Y8PlVQ(4oYif7^S^Ogx)zf zLU+&)t^QPq-it6yj{_KO0AY-gPawt+_`gMy;|ilp>GRRt9EX^3{$eb}jIdTJLs+Z* zVr(ObBZkCX5G^5H4{9hwKR~N@bJ~ zWk5oVwGJW9b&wF}PeMY3IgbA%keHZGLj1p!k}8czsm;S!aR?#OdO%6(Vx;qQAyS zDfMok!A$7wsM zp{$*^6ZRlLIfp>v?0tkXj!{lHr^KS{V}>%$8NnInd}Q2nnJ}*9h8frTB;0G8Fz)U9 z8TWomQmIT#sSPf(-g!30+r9w@pR4L^`tyF5kRjr9st(l0e z(gUpm5T#UW{1qCms8DO0O31ejE>}C1P^(`@s`osg=KKMzHUN~;7%D_+h%~J>CbU++ zbyRIkW-Tyfl;)XsO7+VHt+9}_)>^7e4Xstw)xEMx>)HXW^BA|*d#X(9xe2NB5f#<{@LKJC`;`fPK^p)fuk}Ne z)&^o;8T<%o45G9$gtATL_|#wFo~@;f^~OT>3ro2utff*G)^ep;OO+w5wc6swO8W|H ziRZPoF0l66FdJKA%CwC+HulCsYHL%4td8{%*5<}ZYuf;=ol_R}e|hirY3;o>v3EaC z+WG+L988e2_rSzC2A;1iLxM8*;lkR7DeWAit#y_bPB?mauN(oA(2t17JH{1jol?7S zPMFF%rX6pbavrx%1<<+XV`5!Om~+nM)VY>Q2q4r$!m*Rk$Bk2$x0(7Uz)={*LWSMT`5x(_gKJ;ok&9~8>Ej~VMcXT0$=`hj@Q zMD0Bnl6IcT)qBn~;oVoe@Ln3txvy>GytfZ?UwgrOcS7WS4vF>eM_+p$GH!j&r1L&j z{`S6f)Opl-<9{BMu?>#f|9Ps)`??A1`#k?Ioz~Accs~G?gFgsOJ|KK}|Kk^30F({^ zF!otLxDY}hqDdYIxx@gJ)?FY5hyfUD`@phgd=Ol*E;w&_CwyRhfGK1Fgm}3iQtDhV zxriZ@YP%3x>s$zZupx{ohcMR4TqygnA)IUb5Y|I|7+>)|d;o?BAzVVZD9Zt2g2fOC zm1BhdB^Gkl*)X{fW290x5o(pi2(=MolvXzpTHDwNo!5Po!LSj=2!|L`>U^}hh%wf3 zyBJ&Re2kh8G0q{yUrw)tSl8x5-1~HK-kXFt-={--KuifixWxDnmLo#M3<*)X#Do}^ zBVs~KNwHYP#H3;qQd&<*88f9MgLM*eZcg+rj|b*F5K|K_WGO{2v*c`&5<{W)G^NZ3 z`Z5tyDpkq})y71&8kZ7N3CT=#KCsl}Xj2+j;qkGt#+0UFQ(G&`N$rD1wvONuI!ewA z-G>J{zq)f%E1&ntRRHGnK^!xSaLaTfEM*Sc`$?*}h+l;-bH=2J88hdhjM~I;#+;7~ zO9|)nfkaZ~OhqYc-FP90VH5BA(g|C~x~#p{U!m9!GL9k28OOw?Y$~c0&dcN~=Th*T z7OB(drH&cRhNhewAM(sl70UDeMS=B*G9K4pT)POV+{a>b-fK^JpA+Rg;0^P*DP`(E zl}TJ*Aj$kckO~l>&5A(JCjyXAGl5tv`GC9@WdM|TViZY~9QU*$~#SV{@0W4wcb zvl5b83nrZ5S!BGFQU$C9o?1Ayo23R77E!5&TNL$#qIcW$q_o+y@32l|4jG0=r&??4a!s5!wa%dxW5>+0K46ix?zL7!z&2`~=klc<^{9H}^K#wS2el3$H+}C4 zYkeRtjUlwPM%3|Ty^NrZ(ZDh4h?{8xsy2{(w(hxHTBjeMv*t(TB~!lUYUk>Rom&fc)3uYkIo%Hnj7~rr86uw{rra zb2x>u=>R6?7=Y5NKgO`xn_yiVfIq=GCD7@Z7fp9U%5@0j2k%@^Y#&4;%K`IrH-s_A z@WN8t2?eFlfMZwF!MLnH=lL{50H+@w#WnyFwc%QfS#u$I(YsM7GdxOJ8zwI$h*Zor zLbdl8p|NX-lKnKo;EwZLjAFbo=^j4|F&$-*%h9m1G49-X8zmWa40GP%#=X_>AZK%g zVAt%ysj>^=k=wiSx;n(CM;QBtZj66c?>#%#aKvpkh<^?nAgp@}5}|8Mki_UCCeHB3 zlW9y;?>2#8(sT#4!H>_NF@pc78%K9*Ov=;Yrx4eiaLi^(sj@kyHs+k7kH6YG9bhlr z=d!n6oBwv+X4-n875sf4yLP|7U;6;@ZvCNoR)NXi0HEv~Jn?b%1tHbn1~GT;Lb*Tp z5#rj1$>r{Y)wd4N!P!Qc_3UHpefDu~+yC<40K^C3020D?jET!VBxZdc5eNWGaK}5P z)MX#jy1!3q!ab%>egZP9158`$Jtl490JHz~oFR<|$hpM<#(@Bw^}cz`{lPgCME9Bt zlY1(hH2|f{AHZBNc*4Wsg_V%+Tu7UFD$VOZr}5xgDvAZJknaJt%m0AVQE;u&$34@S z^;&7E4Xkm-h0uNdSRIIcu8;D)G65G_pSF8$D#E?Cv~Ss1oq0iNF1)t$ehLY_X$qtvWK=VAHhG5eNB zdFJ@tzToOHAHL^IT;6LSviIqZiMLY@{+EFP04lPh?*3aTnU0E@2qlAB3i_WxE7B!M zk6Bk7@H>874=Hqb${On;jiF(=s`cU)qcB}d3(Aqw6}C+(TG|xrQYV#Ix`}y7Nky*k zGd>7im#{J-R4%>UvY*H9+}G28@87*YyRWZ5zIi{N5+se0H8h6E_KyDCXOqV~;=pZ+ z!zPvO0ooM?C{dolW;e%w{v48m#gAEkj&LVG0@G@X5V?;VX-eRUqQuXro>(21FhvCv zJ2vWJ>Q|ySvRsXO1ZE2&Z)!;LU3vx<@XUhN_K3k9m~~?Oy=&si+NC_!6sr#u<&l77 zt}q02{gkDf?-sy&?yXa!JCwvD&)}pvWxCmCgi0Sfjc%)r^l~LN*8ID8#1M6kvasv= zbu2vG5Mqrv4R&)V`jIdWzJkoIT5~GtNWDi2j%VVrT!0ne<7LFlc{kSS*s0D;u#^J&yu;u&E+0xo53n zM;6?biuioI$_w^E-?J5GEbl_MxPp4@0HQbU^M_Ksj|e-$9M)TM;YaI*AfPOL(h#m8 z%-u7nNynS&-_q`aSdV6|G|g%7t|)zmmDpp-&izAKJ>M03_T=54u|4R+q`{_fJr`5{ zI%mAuyVmz{9GFw_))G|SLCpg8cOR=>$(8wtA`DTolB2maWQl#4Kd|QP+2m9iW3lz{ z?~3j0eZf5#eq`2zT;phCsf505Aj+g+_mVKoB?rkwm&cL0||p9F0LZ06|bFEDnOp-5sC^1R}9S zGJ_+KC=@D=TC%}?K}ZxjgUoO|qcIpP7^}_Jnm=(^EG`e!)7?F=1Og!_9}J<=a99Gd zL?VP@qlp+2nJnCs!vly^G9h68)1IN=L;xjQ`BS;m&;%+Cfs2V_zA1DXt}cbgI}jNR z2BYzq2&M4}OePETQnewnXiz2_x*Lz&}Uh8)yB@@6jeU$*fWP}>XU`Z5^(o7_=3?z^&q=pP7^Yz5#AMu_{XK|n$%nQ|$ zNB+V@goyPrL@OtfjK+WCNt+x8#OYLmjsOtJ490S3N5sa2+$7eScr>u~!~10x5on__ zQ!?fTh?7A{)W5f-UNcD-aQEHUe=a#W1wRt`%#n z{8nmP`h#e*T8$!~Sn8W&u*2<&qeT}V02Y|R^6Gi^K}J9!?PGfbpvmoUI<)4g3P4Pj2+Of5cB;bVuaAA8W^9Br85P~39dPS0G>SVO z3a(kMEgo!(P*OO;i+w28k61(i)r@yYMj+rH1>DJm1m`&bev+1NsAuy2=1i5>ZOGKy z?Kv!_pKqNgX0yj!t&1TFfzYjZbb?T;FVQ*n&tF0#9o?Z;!=b5k1QE)?q`_f7Fg;69 zS_8mXAv6HR*|9!fOQamUKuDisZ{WcsmRT5lg$L6KItNyDNXYQr`K&*In;lKiYmay- zL2wWOH0u#;u~?M;gdo!eB(B=GF}nh@fdnQO%>B(XF!+3qNtVwIG0Pzgrj(rOgD|L= zdNz=1NKO???J5U~9v(pgfu&dh$Eci$c42TJxX%xu0(6SxP9-YN@MN$BhKG_!qN58A zo`@#D=L&+Jho>W8Mk;8?#1SQybu~V94{^4 z+B5MS0TP6YA6biqzzHO-0^cZMAj6a_f?E~azYB-~R7de* zKAg(tu7ZgGD2}iTmc7+OF#d=rtdRj_8bBst8jWV_rMm%t0g6R5E3rzLz2%?#kBHRV4gq4U=MmBpoF4@{!P^h?CQz> zS4Q)q(6~6kW>eG*p##{GW1}%s3K7NFe}>2~m4c6E3Lq?1L_|(PrlMd*a5y{{Eg*|Y z?1%d!NNQ&C1W6Tj4Lzc!kns=W-#u95KpUya&`}8b38a8RH|4&u(F+EGiT%(gyOj_~ z6hTn2PgOk48$qPBC>QtU?<9}Q;i(i7HWnDi$T;PN9JR+AOQh+9C3;+jgac!BxwA*+ ziH9R{5#zxIycmoU2+;dBBpuD*{&GOc)T2PFhQs9=hLqA|F$kv7rE6G#AP*e(Cx~bj z%TyuFghf)6n!s){jgEj3o=-tq6JCYXl4Jt#R7y~4lyDRX5ji;%3bCP5Ep6@f8x7HD z37d?EbB>G_vg^CBDgcsgVjyNZU~J9<$*1E=rsCWelwcIXhHDr=kOl+QJ2#-b1ArdK zfZF3e6FjJp_JbG-?(|9HE%}a{Sjex>2oA)*yUf|-RjZ{8$uwKR0L)z*E zQUXZ9MXrO2Lyrhpu1cU1rZiFI`pzw%}FU2Ny)|XX5>>(5oa`l*&;NS z$J7#b6_Ox`ObGfT&b)a@iAW$o@QLT|8Lri02-7NXl~bB51dv$-Z8dA8M4NH(hgz^; zpo_`0r}+`27dto1g2{Jcy(_d-#)GiB6O8UZ7Lip-S=y-(HJ4>hXZdlw=Ww^t6OoXY z4+E~Pi6VCeMq}(h1oRWu>mxeHS~Ct#aG;$CI9T}i2QokwtaWIb9V+5WB!$Na&yk`q z>J+SOc_p7^4^tv&Q4A`LE2J~}y6~Wkf_;3;IVzqpSEGKm-Yc0l~sy3$+lmNI)}~=zGvOFw34KJ)Yr!wl@O^0yzQC z;lm?n~r!L15GyosHAaa zvx#nikl7}MUO3dM=C;+^W>|0mFE>J1lbu+XSBljr&CanJ7K$U};Y+QFs2>(2m8w81 zNpKR4M2TQoxDQ{U1kZ+-OG)v8dM*+*Yuo9T6f~bqGgAeswh$5q4PifIqBt)Sh6upx ziOuH>-4BZ;&d(G$LK0Aqqw8{^<8U%vt^h>qY#*!;NKFR-Hq!xQ01g7BMRSR-bfB>+ zAd<3>0!1MXrlJ5uHw-|E1)}*~y5q~_)*sM-JB)O`uAsbvj=oPNsHH-bP{>LN&#;9m z5`qXxtOwNU#7AdL2qK zzZjTDghL|`ZTw$=(G`x0CkXRjqey2cs2h+nsG0v4Afqn2)~ktPfbYd&iGhgC0R|Lk z(`}cyydLWbDG7B-bJ1^?5aci51`fpjEHj}&2Z z41&!u0t}XrM^SDmi&k({XV*ugoIWy}c=m>Y0+Sf5qc2AUG*VuF= z4EwPVIJ(5luBb+$)|2+T%MVTQ;}~Po?NIhf!H>GH2yWLoiniGZyK8Mq-R8)7)g?8i zqo1@i#P_l-+0|1J)@?Bp|9n_}xFMA7$q2(ceVRVol&44XC|BB)CGQ@aasTScd}4^^ z)cxZ3chtVu&3H;CB)=_;>k_*hNJgOXX95GE% z*5%(|<`T?fOi|g<##|^AVi<&~&$U|Xvzi){OwU&!rqY83w&$}=HGX8b^e zi{ReJj>3;9hP;h}DK=#|o#G`?+m2mPDZ(_Rl!q)F`r0Zgkr|}8h>r#7X6Z@&k+jLq z{D2`qZlah{XiS{!eBINCk7xNm5M2465G?&)5KQpj5d1&Ye?Ty7+7JI?1n}S8e`dSs zuP2kCIax6+lF<}CXKbPGOtwYx7efv4jydoPy8A55Fhdr-#TI5sT)@iq1BnxxauEks=9=gbXBSR16ZF48<*^+JcC} zfYCW&dznim&0CRId3~K+@QVIR4yeN20Dtq-?|CVii^OQgxv$wMXd&AMZ^r&`ttUiQ zJMXB%IQlmc2+xD50Z`pW18lgRTMvA&Do=;Q!pk!=ESedhf@Dra~}^77rF0Y`Le)1IXmqhUka~C z!XST``0R<^kmo16ud63iDlb~Z1EARV{&08)3pKHt3nsvP8@dg62wAa}6r)O`5=E?36#_F`GSE->=6yUa) zbm2sGb$WD2)si>oTi^*66q^~=?stZ7zdQQfa-P^daR2CSBUA+2^o&puvXwM@fv+0I zlDlDjJ1^`n;_M2U_7K>-bbFCeE%0^0F?P7 zz0r3xAjX)*SSV*XTr|VDw?bxAM&kYGmH!DNB&lWMIx2LGyDVuVR{>^|Se}h6)+!GV zTbkQayhaxp1_Rv+=PMft$%BMIYoUN+p0# zjxU_Id6)x0(unSKwraRbtISUdID-Mk#8AXcPSODiiV9Vbd`C8-)3WzKa-4qJRWC*I z0O5k=A8Z=1Z#z>+Ey~Kscx4wLd@i8aYT^ARv!S=zexwjsFMOP5qrSqWA5AxhVqOi_ zs>7ZdFkJ;n6Mx{tcwM2jTLCI{CQ+wJBT~v>(i1bi3vN@Bo)@()+Q-8aTEdiIic$)T zpJiIZ8%6weKvcQl8Sp)PG_@*2U<{*%yu)D;BWI_W@C0gD`R>$D7yyz7DStfW;k!vC z>k!o))>s6++p0WzvRUO#3!2Ub<}Ep`BY~u0gNNl2FTJlp7)W_mP|JOG0)V=Km|q}(Y0}6_WF-9V^G#7P zo^1A&SZ7q4iR@inhIec9^yW~nD-jb9OGDL<0G*92uO118H(sMz@}ZGCbyKgV-C$aQ z>|fr3hF<3gCu)2D{`6=pN8u1{;%51NH6>YB8Qc9pwwaj&(mURr%|IfJ7YY+H>gO`G zt+~M{E2+sUn|9?qNGx*0kK}x*v(Z63gR^VK_+-2oILqqKOT0qC#2-nP`F^G++fL$m zLQdrN<#OlK@-CtrvDf42;u}NSOlOHj?E~mtY~P1J*T18Uy6q<<78?QT*x z?o92CxlGyO?O)L`_*o$a5Ug3u+f2_k1Mk$j-n{(u#8S`iw=ERF&EhJtu!dtH(m|h| zRz77yZ(PCe61<>;4RKC?SThp}`gBo9PrU+%LF7i-K82Kig#DP@^NDP_5JHaXNYd$; zNE@2;ZieyocdJOT9Lh1DVGPyHh`6L5TtEB$|Y4?xDo(Eg!>Ww{)V450fe$l%(J5Z8^t4r;i~NmVTSXPUG2 zH04Ds9S`Pq0J!ka`+W20;WRrN-fE_b+->QwvpF`Mmo1G^W20K!ezcl`DcXSw;QZ(u z&SgwRb1EuDMM&K74iq-aE)I}{FB^!hPhrKfh7`a+AXb!RESfGy5Wct05@zWc>CX)@b zUJLEhEBD+U4yi%u8|%^05yDy?)RIGaiba^e%3&;W&7w5f;?43`YQGwb$Ed5YA{_+; zoT<*pHo&S{b!}6W22-visi+2>OVVWMS(_nkVA=}1HcsAydt90y7gCJaU6&UGRtxG) z5Z>hUSMuPLn(RK)=x=oJGRkqhQ*>$Pz8GPj$Av>c6Y)-2gL11h`3bIKpyz3-NK^mV z5u*pT7Qquu+4l+*;8khvxYJ_q~8ke-uya* z{r)_`?j(BfU$Z<|UPydpk&{EK?{c`4*jGOg7EI|c4OhD9C$tjPvaWgARVZj>Dxjt! zX(vI(;n1HtP@bQmBQ*t`?mQbP;&mEQ=-SOV&i7hU9dB0A4Qc37Xgy3=Z<2CG?+SnI z_w!xw1+vaqtq&2JuPL7bmYDCMTQJV6Kkr7jwS8Ws~-ik!2KP)PVD!E3k5R0CW1g;E`{;43so>)6Y8 zw@1~sVPtzxZ31P#P%w?pVK3Bha$dC8AfNu&9Qn~J^)oRpN>i@w zTYONvxqgSZJ*0accB2(Gm`jm8wuTvjV2XX8HGF=Trs-fw;5hasV_ad?WY>Q%bm^a0 zv^@4(fxKth7pA%Uic*?WCg$rbIlqAvTCVWSoQ+dc=@kP{4>QZe4=`hc8~b=X!Y44+&AMQ82N< zrNiu3WkXwzD&BjV8*VgCguf-rD3SUkAG~(9^c=#S9+?|JE7(r!@!JWG%>r#@FS^_5 zt)s8`o=bm=&iFBQD|zFE!PvJ!3WH)9iz3-wXOva?w7L)gj&`ILj{ zeqy7ezqbIN_#zIYKmSd@=_shxzXTlme-SY0B51v;Dhk*hI8vlbkPCZYFv~*Xf-aC0 zvF?HdyF^(&%ffa^a3BK^u#}WLvwweE82jUN-%ICZw(m{vX-sr@xW)v1v@z!+ryw_z za>{sfA+o8ZEOYO^w$&Z#7lwd-C_^NgjsY6y_@Gp6eJt12Az)4g$~YcM5s>JZ^h$jh z4dG*anvTc{^%&!`NM#lHq|no;`=3&hMU7z%DyH14ld5s0YC~vSNracw%?=qwD5VfY zpK+d1h9D=HV!)yGes`7vw$%&~M%&hDJ0?Wz&zQJ>)K{+(Xf0<>mq>Z9$H&Zi$#maz zr{R;<*T(ft3;CXr4ZI0Bj=7SFR zZFJq0@s1!YF;Qj|e!}YOy2&P!@)mqXJ>kO4Up&b+%AteZg?#C^#NFc6CClZ+<)5iH zD(uJGL{xtWi^ly1J;y$miYeTmvI5=s)xBWpezPhso_caND{FG2zX-1YPse$}s=G&fjcOmAkSz%-FfcH!b#Q3scmg=gO_u{G7p4t0x7 zcc($Qx>If2GK-eaPcG;DZBh{5=3R}t>CC-(^vu2WyAKHz$QQ(C_+WtuByw^=qC`0s zkY_$CR+Z?_*&U4t_ut(65?Ra+mjpo@q5B8nl(xF2{My=3e6x(vEU%@FH^N{l{4~4L z8bRD|Wx;TN-oA7w({ow-5QjgogasR-Ee^vA7v-3LV{6EzJ;faRB;x+ZR^WNZO#6l5 zH55i~xqs}f)PZ<`L)sv6nhL5}dk@D$qwo^%GFNo%N()CsU-^m~oWIkiyl1q+eqFKq zdyLUXI<)>0 zjlYTIi+LhmipC)uMyi1P~!K?&e{eN%NrO^YjKSaO37_W%Y%<(T?R#XgZ< zE(mHZX#=&86+VlNFb+3FU=;S1;Fb(iA%_xC+gWk?j>G5<8@UgVS7RBt7B;u`<7H!e{k5_lMgV9(%abf2bU0KQU zP8F?^x8PpYnHbkN^0OQz&pjab$*My}z=PSxeDK>r4C3j2=t{xmX9HfVN9C607isXZ zCkk+ZS=0lxftuPC43OT;K9EK$NZO8VrB?c6-M^_%t(CCq2U zv$a3Q&*Pu+gt4nnTQ6cNr3 z{Sxd6#5hip?6IrUtN?!-;I$Wf4~rhK_cUH=St1;D`wHA3Ew^WVusJxqTS%mGxpcoS z;bYEYMFfd#T2gS|d&argLRFJ6TBR@X@0}ajR%t%!F4uh_o%A*qRh;517D5tHLEvoX zrz?>BYO2LBy|e6mQ}$6lPRj>N-06#%IOw&^R^~*O2x3a=AX^`6OWBto4_Ze|jmPKs z8lf=3dyeHdJyw8o>YLLNKf!ha`9}sK7WWACRw4)z`|Qx3d2B=s3{`mPU)NJ;xWm!A znoo0ATC4*TfBxpsR|)yTKH={Q&bK+GidTb8xLIi2Gc7ORs%D|2);3_U04oB3N^?aP zN;GJ@Hv(q_Mi-*T`EK!pY^O?~Y7i}l(YAALD2s-E1!idn=w)EVNEn*c*k72PN2nxF zImyK0HK?Y_g^x8kE{7$N!kXOMv(=<;KP~x0J%f84;j#z$6;1PIBvn5I_sLi)hPiM+ zDkwd6!&X@(1b>XuKNs3k6McA$7lh11^%7gtIVUc=DH6-{+0a=I$IodJUPRDWa=?^|R`yc0R~>&`dR z{Xrx2g?=2YTI1##C7qSMYZWe5Cf8$?Vpa7>0mNHha+javcsZk=A=D#EW&+W|*X0~e zivqD*1jp9@0+46_PE54l&GQLJ?90<|xlV*8m+ph1kvx^Wj$ZU+jgR+{Y)V2yG6pSO zzCbp%0j?C| zc+7?#YN+4zw1S0%eaNX--k+yB^;qWiP-PS-V7x_fd*99Q+QSZoV{Zf#!`X(YTxbNs zdX2yl{^+@;MePk!9&m;r1CKD)AqH(fQ;!vfCqi|@E{-gu44`LeNmOfx(@q~w?wr>Y zdYdw(P)+o!p^{ta-$2B)dJxBB0e(I*zn=f_17DR(U6y#^sZ06Uc0@6c#)`S6l=?yB z59g|iORZwhqJ|Qm9r&Drny+`^2rc{0dCSWy{n`%L%eeGSv_Eg%cg4JF@4TXoF&DOH zIAVh=*GwE{aC}IB>!^gOLTD7Y6>q(Qqhr=6GU-_CH2FI?g&4MWPMb_-|IouOYJM$x z1Wy?hR*3HMXA)}j=`^i@H~NB?VX>z0c3dV?I2%Ke5&w;F|}<`)YtIX=(VM#70Y(Lq9DV*<{C`}cVnuu@lkq&#;f-%9ylkYKfxJ3_{l5T0X-xDK)Q%2eCgmk>a zoNV5`rfrjz*}V?WLlg7!)Y&&U8m(-@9Ld{2^-q(u$>Ew-72X+B^T@@`2I9hLYFcN~ z>9&q1%`M8wU!fSRzH6(eXkS#I^NzY?mT{d^7>~ANyU5%K-D`}dPhv9xwNkK$3}x`lky%*wX~1OvS{w6w-C$`obG3*1^|=NK>`=>IEduO=%!*&zw~y0^;eI_dXP_}gi)&uX zq1g{V6+uQ-oTnZ-rt!p1V@~LGUmCY^IF;C=)-yNxRk?aW2XJ7y`mkKkk5?vp2Xxq% zkQ8M(=L!lj)e1jhSm_>HI(Xy-y|l@ZYg>`^+8HmSbQ)7oR_UNg-#`cpPf|yRmfDME zPMl>yD?J+M_#|%kjCd=XG^70rE}Z=I(5=m-HskZ@w#?A3$OTbZvhJ%B(X0fPax)J67pyRI@4fsD&HTt}#-)1fIt^_) zrPM6Ge9Ao&Ngt|FI=E7QUZXxJpf~s#u`fQ~|4_c@M5jM(!$UCmZ5~>C_i`tvVDFW9 zN8rFKVWBntUBLoWx%}<+w)9Q}#lKpn5nrXd(meiCI*`8&JBSa9r#&N zgOBAAelH|gT?g?!qZhflKt7sfwd0Pyo$&t2C4*1#bA)03BU=%VyG+kS&67ko7P|od z7X_}{p$8vNO3)SEZYYQyZGqw0n-Y(m^I{YJ_}2A{ zhio6__GAB~#X3c(zV3-_0x^pq=bFTxv`@!Jk_`ipSO3owyE7$Z4dKzUz8(29tHu)t zRFCNE660dEkHTt=DuIU`xA1rZ+8u-#VK}vk?Uz%ge^q?uZ_GvbG@oM*q^b+g90o=M zuwk^Z$Xe(v*xMuq!m1)xm(;M>5+-0b_lz;VVv}mk8_aZilR?D7&N5fd?ko|q{u+z-Q+{sZ*y~km zI}Q1H)m7b^N9WbJLIis`Nk|d|xCNTG&Dh<=zm=qy=WGUgot@#D>%w5__%zd;>kZ9j zXA^PGv#k?<@NPY#w>>3S5kh{%>Q0`<1&noKfIRzAm4Vku%asP*Is0AGe;&18gB0=@ ze+0K|~qR^&&fqebo3j6?Hx49|)H|NGfqdtMkpdJDJUs33VZTV?Ooc{YF zq>xCc2t3|o9?@o@S;8iw=9SWxIYcW3o?GcADW0VvG z(Hy-#*VfgYyxUiw*%$6z=R%=^ITsS7h-JTzB$mf`sk1)170}`OY}2VVeB%O77N(y} zlgK`smLIvKr>I`Tg!h(jgLu-FJePEpM|0W*)Tb=>3t7JO*>kJjOh3i}+e-_vsq+t6 z^Yp2znx zugoYLvV=(e2pIcpl}cIICAwtKx|IAwoi>Y za1ZH)8AI8I^x_`3>n~>n;uXbVN-N3|uwfqiHYqC&+;6&;C9~hKzQd$?TI!c62D95s z7vp>Uf{?P!cU0}-xA+Y5Oa|LEuN|Y#m)-+C+{y(x*#}(0Q-E8B9?4_B$oHH5ouWov zA^wl-?=ay1%Kk3>{QRH+P=NeT^`9)53LS*4iaT;T)05@RoV4Y+<=v%OD(vPK(Qadw zz1|ULV!p@DB0w$bae%*GzMH zXe)4|)!$0ksE&m;ijhzXysehy^+!NxG~rf3Jh&{lYeUnUfD4y@O;?^R9o42V%q!31 zElE4B`Hcj_h@1abW<+M>pUh{CIp-MjMrMQn?nIj9(9(HB+(zMAqw;VkY9c5RaCd2aK(PRQ zcZe<@4lJXg3a8rTUp9poxlKSwD<5hzo4I)Fp>0h|qM6yWa!RIhvg-s!g^DRl3QOID zNg?#nAxAQR>5J_HF1`S0qc8dN6$_@^7NlfAq~JIj7AKr9hO>A88iwTjjV9;uJSF+5 zq97&&bm&z~p(v3@l0qFtCr?t8F}s${q|YQTtIGKhq>#CFh}9{%&7^teW0p>YsK6(h zCtLLUEh!I}@AvSx7{!XeN+byu7gSPx4huk+UKaS>(MG<6@r)lTKe$uR175P;d(#R3 z#@JV=11EUB^q5V|jr7uOSbRU=PBtTuzbDpW2**Bzt5$Q0mQIman(TNbRbkRS?75|I zaLq%gdA6*`TN< zjUEHL{2|>imH3Y`80IP2dQ~1!;)*pj50FUw($1yrZBjh$q8g_JAoA?6p+-)UY56fC zTS99x^3+QOp|cnv#|tlAZEcPo0F#D*FBF!alx@X`vGUMxUnl(5IuC7z6?PjC!4}u= zwiBRLlBErQ)W-3|YFU;sztzJ!-7(v1fnwG@)v1a1@1{Ub3-KJ@aw#oM?^5hPUguk< z*FAg<)i-k0-IU*p+uVWnRLpAmpA6-7wIE6QtR^iB+JkpEfo#V#CW>J7zt3FagVarj zQ1LM5-}UoKBAM|U!NywmU8Yzh8itArPJ}P3oB2s)(j>DMRfozNiL~)I@GfH&5Qn_m zIp-;_etF18z~V`u)%)#Y?{s;tUtGVlp10*(rfFVzD~P4qH3R~B2hxDHLBU67{Hi=u z4o+G$aw@Xrw}?+9U?jOXapY#|<#Y`g64Yx?D{I=&<03;N&;_$ukXN^s0j`fYnF!;E ziL17p;lpd~+4X+kZ=4#2tFK1Y7jbt}6Zrj=HQgktX&^pP_!-<2k^ODvW)&I61qp;V z1}M~a?fRV{;87TJS~--e_zxt!BkRrR=UB#g@|k_STC7BdZE1mW*~N~G z$QJ^EaWFi?<=svR-yKyHbnE&b6L7g`F6#n+S4Rnk+jri6&&T(YK~13i@!bBTzAg&% z_(aaAaNpf_Qcn;~^*onJ5k_yxTNG7kUs0e853N zZ%36^K3-|b4zE$Z1XRb*X-0jmnyi~Ry(gvtCzj=|RA#*yDSb^#1HW`CUEDYN@O^qc z%hcsKQV;URt8ta;3r&Z`sVq5qX2I4gH#<2U)B9-ioY$qqy-jKU)xGu3>+DB*U9oXE z3~Rch%GqpPqIE)6MDJ9rUmCdfmiDAoDK;=H4d}EDg)oSMhDWGz$`IrZT;L#B3Ov%R zQ|;Fol3h;rfu+dqZ$K@NA>MKW+9eKxnL&oJh`&V+ei z^Cva+$MeYoAAFTB3o9+nGbOfFVbf71io9j&5ea@qv1k7iBefV9$Tnd!)->vIL}pnO z_(Y|p647ttrAxEMDrNH8~doY2~I1IPzGjZzUvX#`q1}Vs)`*jz5J?V+*=E{ z^q5&riW4<)bMfV3TqLS_a|RUypoNKVYYB1Ge3;8_)Ns{3pU8N#l8!5Ry@feOmS6jn zi=e>pH#D}WkmKkJWf&}H!HQ7m_TtxI$aO!4xu(%b0=>Mj%C4{)gn=1u0lQD*xqLY_ zILwwZ+{qhn*yVxKl~N%4g#uqcS(1JaUy=;TSnzl-vF$K~FW%$3Zz(^2BosnVhs>6w zi_wc3OUU#|J~+I%(Ha16d(_|2|{Oq)I~f>pr_XIR!cq_n;T zA<6dJEhOjGv@O5L`L`HT=amzBFI_#E(twk)iM>!(#k_Ccki+a|?|dx%DIko0C$uda zJo#(y3G-=|L}K{P!B06!I-3z(Eiyap!I9vVeu$)^3YGMIPdp$(0&aXKTYi zEkA*j9{nF;VEbqvzlWk~XIwrhv6;Q&>0y=?r`TZuX7D?|-bs~XTL?n;a*)bgQAG3` zXXV@V>7H7<>y*=gt}e|SIR7fQ^tc?w|FD4-MfQm z1u)@&WAfk$SBFdg$^mdkvVHN-W%B7>fZ|lxFraF5^Zd9&o(-I=h(Tw0;K;IZJVw2NV{NJq{^l`rZed~W<#k^ zA6K~S<4nj`M-k_cEK(E2sXi`7KC9VIK%&#V!o`)F%znv70(2`Q|H&({rx77U<#|4!?%{ zG0$T_4{|3HHwTgHAe_6Ac=s#F<`oCFo?|)eHe^>v(n&|1UKDe65;TGl= zBUvui=a-Y+f4aE3^{A6{xvSctWE>mSMfGwy;6>O{JCK&vd&z_f>8auETq#EndRXVN9ONAR;NG*+AS?R5TNEpM;bamRa?fs)4_X6(sUSedksM1~g_0(HWwaDS8& zfjr`KC3;)DcNW1r;@OhIvhX}kH#M=megKBdYRn*wW_ZQN>vJCd7$;TOW8<*5G12j{UJ8j9DTnh( zm_%A_mN6QZ(T`zW32U9N?6A&L1P z8_q|`Dx*?eF_BGJKkb!5l4(z$0dFxU6Es!3v(-u7oAL*wX;AC%7uUa!mP(otZE7$4 z-)H{vr$n$^Ja-Y0DoVP2N_T}(ymtzP6Rn3--Y0v0n{7$Qjf7Y=6F~o*JrC_z)FlXt zy>cKb)q`kCNOn90HE16Xmxn^pdbCB_y61!Q`hg6(m;AH}*a!wV@dWgqP*KT$m z;Z5J;FvfFPFg3W7rmelMxU60OGIj2$S<&N7qK&Fvb4fCO#m}PEG5qnxIg}#G1b_F( zc3x}m8)_Q0V4u!%57~GW?M-r>Ras8km<>5!EwNf!&-)$aI*IR%TCrMF63OD}@iF5y zv{jDG;=;bf>c^4|zeoktrJo6Bn}xfBZaZFYgid7 z{5l`y^V(#Ea{NSNQo$7@rN;=G+2i0TZ05S)y(9N#5mf^W!Hg&e)13UykE}rN*3@S5!~Qj7zL7<4_?CwWPl|t!xJ5QsS`$3=+F+&O{u@O ze=~M&%JmLEUoJ_v!}nL3dOuHfA5B>!&i>Fev-1Jg(W3|z6}nHXt9kd^CIE%Kc$P*d zaDIXO4_B5;;$GD_Wzw7?0oK4NQbWb!_B1`7ZrTXlA`;Yh~1sDv&N8Z8v~ zOurr+oC=0^_&&|SYr8CXHjVqhJ;y{-0K(E;dc|{}({M$O2wq4Xf`hW_LPCU@?@K22 z>}`rxHWx0(@9QVmWaW-o=k3fYj!kUak@lTnZI5Z?wuo1jz1}b zBx0xxQRfNlg|MZYVX_oPjyWi&cC{Tkqh-HT5aBGJ(P8p3oZG%W9v_2cEi}1e?5v9u z5E(DWsxS=zJm?>~v!_v~t=1d~x|O3Pnn;LpGSp(Y_Aj;q9@)2CXaK^CN@+n^qn8DH zjXuctV1*$C$T7PXk3{;wDJOP#&aKvn+<)FV^Q^S5WBb3`G4CM~Pi@{NbWRmJsoCx; zvF>#EoZ~Pp;IJ9crdCU>ISuSZLHP|NsOdz{+5}$6!8>){hMs&!1Pf*qAts(k!YIB0 zheIdt2DIh@gbUtY`jS>o?BV#4+DIvSpTEwTdxf}T-J5(F7UP012TVWRuE@$MbKMnH zv_14OA729Kx_)ARRG4gd`x+z7qS<3enoKdVWzC7IvO1W+YRIoL+qP#C$vLtSQ zXHB8pB2j!3r82kc2fe+;L0#mu+4lDLz%9&DtWK&SIP=O1%kf5!QVWW^F21oS`UL;6(h= zlqtGEYltF?KSS|%e^qidfsD)a((-h>SfeTMIM$B6NdF2!XAqshJ3Vhf0(X+lT+1@F zFO$!fS356sQKYfew9bks#k^2^CDvybCR4RTFvNYK3(h|%-2E!jEtoify$_{s%kIiQ zE1+hZRf7+~OiL&4v_x=vQL1t<+``q%e#GOot*98NgeVnmzI2@EqFb%5>Zv=lVI#&w zNiEcnMk>+Z2CdC;E&C%X6#N_Np!pS0UA=NJL_MRbjWm+Ge6Kua&Qpe+Um|Qv?@XWy zU<|Z9Wecc zKrxW1%iSuyNR{UQqpIToGtUG!S$DWvJ=j)tLmGtHDx_c_@|+!2i#?6T1vg=<CCICwxze(zX(K%3g$+mYn zN$pj9=xhbL+U~R^36(JkzWOafjyBng2(L^@g#M>XP8Y0JRWKxpLBC&Oc={c=OBX@9 z(aPKPZ8PdG&Y4$IOJ(!Hq9FKCLp}q& zsS%inN1W|0EURy0SF*_?<5pMLTH zavHpRUfl|}dVOWrR-(x%FVCXbF%0c9%HeM_`j9|-dG2JmvnA!2hM{&~<9JG!UmH;D zci6b8sJB5tGRitJJb=`F?<>GUkxmhNpTd~SQ21k4R8^kyzLm@|_otEr_!;xG~ z;)_j@6pQ;++Kc_uAl)f0Lvpn*n=FLzV&X@n9s1Qa`92USfFqMOZWnTmg^M>fMh$Dw z!_drFXF$Q25(m7FI!K1$Dns69Dox{~HuQOd>j-pMZIGm#2G({j*={YMcpty5Fl@wK zU;5X8;qMcEwOHx#A#GV5%7xS~obqjHiiuZr5!V|W2zd@Q87Tc(JNmHZwnoT zHuE%$c5WE<8Mg5P%3%|}nci>XFifJBOuNvgQMDfC+LsBeoY5v^?^cm+QPp zGY76xL^xdmPRE6Mv2Rwnr!iow>2NZK{pH&vNRvX!y&re^$WXa73z~JED-w=;@ zby5aMVB%s|JAb+2w@i=D#D9k2Iq`DxdKa2&g=3m2IQNU$ywPV{ZV8lqTAMpUFWo~) zM*>|Q@_&tVkoqEqvhGdqMDu!YU8P{kL>h?@sK=D?9^JcpogUqxir&{JCr>q#Ir@cP zzs^U50ciy#+~x?8r(zOD1O4=*oYcInJipR>=F0l0r&DY=RSZqCjs-BzuC z$8YvB@xDzc4!+*{p}tfgCIVDR!LYWS1ryQliMH8Q-r0np_loc}JwyglLvm~x2<#zqqu633*YMbn}lLXX3ro4YS*49F*C z_MkDFZGT@)i2W;=eF7?yE3h=tX~!QbLKrt__8Q;ePM`q&u{oZwa!rALVR;OQjOUW8 z!DL<-oT7rLwX?qo3~98NmR;)R41QKhzl7%fKSQ5?V+MnUe6iD~gA!SRAQF(NS>#MZ9L+3z~bg_rBK3G+S1ZF-3LTd#+hdI5$f{RY?H|zrwi$I)C*MskT#f_lp=@Yww3}y-k8CvA ze>Ye87nJ^W5sAaSiH_?o&AbQf@cF*pZYH(JQzl*ViNdqD+n!%t(a&(M@Qrcv&iQPl zHhb#VQZ;9{{?e-jIGBe(xTm=L9M5z2xGWuVMzst%xy$pC8tZzNDBQT8N7}bqIUl=e z^XR8t#N9C1C$;y#@pn?7vXdVllE3+RIomyar+kzq#t;P*0&N}YyA2~+q>TDIK=wUj zXf}W7;so$!72v03bn=#(!m=Q=%E#$w%GeweaF?2wZ5NC)ML@!>qG!>K5A2Y)%Vr}@ zbWn8P9YK@mIWJ4epbq~=y6c*|r*gvdww>9)aya%+?fk2Mc1bk9@kXIW;GHvolR3io z3>4Ioko2!PS5lB7;SI5PK#*J5pGS1OOz^<~OV$PPG!i6{=-7|s#YM#M5pxQCC)DK)B4glbiZ#8 zPgCI5i$Szcf|E1C&65J(s_$7VG?%o#srA7MK$2i}*$~Q)>g}oK8L+~S@tWA6laQy` zyl0rJwX&+9qdCA1+rLa(Y1?O*8y~;T5 zm!~xhh3zn~^|Cm<7&7Y~+l@v|$JGjv55*LgQF56&YO1&t)CxG$-~edgvP!LCQHG-G z5Vo`hDGM`e!74NYGSmZf6SQ>a^dF$uzvSSC#&o4sH8f&YG5>h*z91Xe)OF7{+ zSiAHzD^utI@a&A6i%KtdbIE5O)@EkAOn%Rq=*hmOZ<3pW@}@sbm+nzg3H>{zoB2LRCXrQSaIa810_ukZ$y^BcKu^w7njLW|~V z4^QV2_YkrDxAJ29&1QAuaR)yi1@&c(^PA4JT(YAs$r0QJ#sMmdfk`c^#m+yNPXV0G z`)CppDL+7qJwD_H|3`Ej!bETUhqm?qAGBpp{pI|Z2~L!EDec@$Hj1pqdtLgaKhei8 z(cj282@ERv?fd;bd&c)C!tn{W*=uL7{cm{52X21LpIZ(^f!SSL2_gqu$XiEFHpTZ! z3BV}4&$@#Y#UDeOBvM%OzM@#pG7pl7AV!Tp`H+BGYXJ^1G)TK{7>5Tigx7n8qjc#T z(K;z#+f;jwBuC(qAE`pkuH&l;nHZS{c{_$h(z4zZa7>4thZ9O)digFrDVnHplti2F zYKeTg}iQIFvXi16DI zsaJVDdy#nlsJyFBU<(W@t2K}jAq>TU@9M|Gb&h2jKEPPy;oh2WiXq+XSiSO!sQl6u zRU>8sxP0rK)_df{F*X~X8lhYDue5YjX)p5obiBm&DviCV{W3Gm-EXI0dMZf6W<$+$ zR$4HF*u}inE8EbX);hgzUbr$Baw7w*&hVp)j>XjU5f(W0i2`z*RxiE@mx(Do*Kkz9 zF%hvhBx)lEFf{uFL7_Jg5&W8w5voJnU=kLLxOMlU}Qa8>tU z>STYTx66KcQBFN!qAeG=R6`HXEAU+;dy3(apN+Pb7tr5)6H+D=A?*L39`Jv4|6H>F zON;&gWmxp|7!y)){4oy;i99QoJo`oYmYD9GMDpKPqqZ%1b~$D}Im!AF|L*=#onFzs`ts2*zUd8Q$1u35H24&l|Xy)7F# z(g}G;vZXU&=mgk}i^tgLa;oJ$OiMCEjRA;&oAkkxkIDSN`2w$oim?OLlVh1mV^ z-fHs?wIdp}Z(#BZKE^hQNO!_x95JO#Q-H!y0sEJQ9lFOPZCr;!rk)tuhruOHy?`tv z%$`GbB?E8^l>>v7TLCzM-MWiOLd6kbM2bOCB9|kbhSD4blR+oufsv%Bsk`eTBK4A1 zq65v-7lN85?NE%i(uVH9@o!$3E$P&4Tw1i*yz%eSW}LQ6*@dH~xH$UVbE8V**|)pPpt`9N9t`J3*61f4R%i`HB=^MPw?anEMUh>+`nSq{ zrk2X}K|XD{pzF(hZVtxJ10e;eF=xb~3ix^A@FPdV z1njr?1>-(FEAi)uCt-S|a*Ensec>`>M)On1Pq z`CYJO2UYB03bqDs%RkPe?q?_n>LK(pmCl3DDIxOzMK?CZWEkt#T<-Jp@+c^}r8S6q zi352mND2SU_S;avHPEcE0%>JL;+eoW=B#%Q1diofm)+k#ElAj3x#N#@8fK#U71^*; zw|T&oU=ld&$i+q$-4rAtsr{Z)ogbEG)sCp&0d^EKHs9X&m7Iz%LTiU)}AeDC1KIWP9%OSxF3(PF4q_moiIIp=BjUB%w%BssQ7vC+gL6 znMX>pSjeVEk5lo4+d!8oJufedZ|*X!B%OjfANai`5v7z8%N+?VZJCwc$X0bErYNmv z0%bFwzMNQ1iH%G8hYDo(!+%wgZLJFI+I2662%3#in$3^P5l@_vNLV`N6HE;PMu|B& zkZ3_#&I-X1kg&wjd{81I4xJf-gbi( z6nOrV@9LQUm+fiUn%xYVYPNyRvv(RV;v~UYmRqrOds-6xpT{nDMI+DYN3#r={;I&| z<&piy;MVq(6Y#J{pucdKJ={cHT53yXVH9N>VCFKJnFyH*9-T|6dP5d3LkwKyB05ZV zt4lZy)NX|$Mp+KkD@rTGE!VGoBHpsn+gY9Ore!|FK6i40H?_0r8Pwg92D%8?2k)Sl z9ka%ze^FuILuh4T`csG#9BgXjUTeL#F@Fr(#;!fnx&@Cc)U_vm68t~We(4?yYIon> zUbs;PRL?nwav*%##^jBYo?DX>OuaRFgC?jQaSxz((v-g%;ko!2i@LBPg3MODk-hLK z@FNg``97UCLA zB{elQ>0YlcY%}_2O%2Keeo`nezOU>43fb+y8- z|00V>?rgwbgRkMA0UUOSp)${u-M+nDx^IQP92kF+G5pHk@y%JT;GYv7q0K!V7xiq!8DA zRK5FtJo)u+UjF*|3hd6^JiPh#_p<_0N=4s(A?kI<2yz5z3pC0`?u=x-W$KSAiw0lC=9sPOy!TS|%3SWqy zt?qPA?x6#E{oSnSU;Ugcbdh%}?O_Cp?Wy%g4S-CRQ%84~Y8rpS|K77Me~k+QRUGw8 z2jCM9w|nP*Khob*EZPrITH4)`oeA;MeM4NXS~O-mU%EWTci`5+G88L@uASWoJN@?h z)OhWAm2FLU%#;0<@T1_9q(PQnB}wZ~NQE%>E2QLpGin83adf5Xg2oW3H`)MBJJOK& zL&^P6n6g{OX)pUBIGy;wqELh%)3gCt#yntrL!1&MYfA}0_k*@AN!ZI!=T*C$%H;Gb z_hU)p*Y}0X4L-liZG_etwDbaTPKEUIM$ zbMh};UuHkv?(k1YzPj;@rB@T@2I+`*^XZwUX{=LgjHOSZ!Z{f>(AHD0$YrS36c?>C z=fKis)hil5AV15RfcL1Z<;D~dX=<$kpN+{qhwHD>#4GKc_onRS#r;Vm;fe$AHmydo zKf@}hdko{^i-D)br@kYnZTuGyz_7Nf``}V5!QxS8NT7NSdz&C!M07lY@yzQM!L*uQ z+GffhiAGda3)Lf0OLeYIc5chcBrbsE8uHEI@Rtc;lv|1q%FVH6n9*nYg6tQud(k@L z<$dA>ciVyDK15S_)9E_=aeuf&>uSt;%R$fKqNi#u_Pbq^eN*`-#iiAOW=z8{sgdJ$ zyV02byid$_`{DH<=D&=e?uu6i_ANfmCQtt+%{z-mjhPky_U-itB>-2-vRrfvbT5hG zxA_z8%qjDm_5tAtzibUrK7C(sZ_p0kwQ^HI+*8n}!(+|N&#Lb1_y;3gj2}^(VlBjn z%AIltZ*4fGQLF%|G2y^*W171~ZP>QNE&EUP`fjVLBl%B2BIwqho(}jON7G!~7i|v^ z>Vfarhl+xxF5?NF4T=x6V$lxd!@iTw)9Y8PN47!8&ss-}F~g^tzt`E|4=Eo#r{*>J zKN&)A*6?okV0z4l)F07C5A0WN#wJsO`*e1xc0+9k?9&;jTVcV|2Gz4vPsW}w7Z4%< z@0cLAn^17_hf{x$vB;iF5V0?C*OJn5<6!sJXQ;7*^Za9jbDz-ZxC3|3{9F4KEWb!| z@XfP~z(FFxbL;@*+ifsuOaRM*t&fv$3pM{(D%Zxv0mDMrmhdttwS&|MT`k2W^BK>T zbM*cduP7tNgR$<{r~M`IYm_JA@XY&_>KX{)DQDsuiMO!Cwn0LGR(Vh(fNN zzj7^dKyH`zXVBfpgTnx|=Wp(c82LzE#OuTqP|TQ&=+04I2+RmjCh(J(9f)=?2A2%| z3qG9)h&uu1YrIcHzk+B7ihiqKRP(G$*qMq^J>WOw4(NZwi*p-FJCcikfp1k>qM9wv_1Jic0@a9R$);chZEh z`2Y(TZJxt%>0zH~jW+-Ys2iyA!5c&}8^?b}9PkF~NzNSK_3n9{G(kSaiSb~ z!1X}*;pKO~|9dAptI3!-q~8+VU$ZemrvTyMlad$eaUlIht?0S z4`?9p5Z^|;mAQP-V*LAx`r$DcM0t@2|KBCJ4i5Aaj{i%(zydQy{jaeF(SP-~{~BBP z-_?H<AOxQ4-XJ7VDA5oUS*qa>G*zkN5HwA#AqXse$KDVu#Q;(W9P7MN z2s~$@5-0+9X5lab-{ameq971*D3U0Wuo$ugUXU1y3|$Ziss!7<7_bZ`uf~80z@QTMt z{FoLaNfY=;B=CZTiY3T`rC6ZJ(}X}EVA8dm!?7~Z?niOsq=Ka>vTcW=DDph-Cn$ph z52UDyGnrth%S?@=WQ>*vQ%a|3$uWu6~>ZAK&gO`O@$`Gu#T`Tim}Ew?oG4KpP@j|EPNtM5(P`S zK(d*p?v1l@-!_l1IVq{ev9B4X$m4I?lEQPAyB^MPZd-yXa2>?DKyn{vnoM#Z7N*2= zT+|LL@Lu;k%<^sxl*sbkPm3zzKdqO{^1mLH%<+F54J!(Me?BCT0m&x;iwS|i zrwS7RAB)bTfny&f@L=PGB9TGwlqeCwVjG3hH8YJQlEJS$B#0t1gCQd$Z;&oPp?-lP zi$AHkB8oq0xz35BFtdS6pc|zmNd(|JnJPlyXuBdwh!KS1N->kMp-7XbswGQP0Gv@|sJZt7WmIZgQDo`M7RIp{dcjoXSZ2gf<=Hn}Q5Cq) zTTvDHpN>%3=08V}m4v~`mz6}3pTYDm~;2I*(+TtQw^kyU&@+L`XD%u8FZWub2 zWn~z0%e8J}_)v{28o%s1pH_c40@PD=v3l7s_2gFo!}9JsVVL?}=f5!x3Ii80<@~?Y zfe1VYz*4XRdy%z7prJW35kiqqRusdO#nX)1@WL|*qo66UIHjrE7L9TJhTu$Iw^I}a zkk}y5HDkF?*2R4J(&boAgfO&Cli|bRIo4a5vCS6M%u~$Jdjb&!XsS|`M4)$;M$Iye zIJC`qj#3iLb9RQXS>@eMHY^Hy|GklkJcy2EF}L`?J0!7h8kMGLWLwcKJLy=JVTbEj zSJ#bh64iB{Y})YM4uIM=$q!(e#4?{`nk0!o2ixXIlSGlVREg)%LJOxU*}?A{;hN!X zJ4wokNQt>!qCd_w374uVtanpo6{qghu@l+QTcWQyuKsbhKQ za=Q>^;6b`joyucRIfWp*(6UFw@wjro%(|coVd_CFW~q!ZgvztvyRB%yU@1)=JMW0B zn?dd%Y}$?KdGLC^;ClucO6qwY#A!l!9fyU)dYu-vkKiemy+nE+t?Z9@U;c&+_qh?f z|KoEDz%1~6n2qZzl{02zWf*4ftMxGzKO*plgGQWn}1sDq&=vq%w(RUDPUx z)!rE>jN_5>6|L=e>rCLr}V-GD(1WJtGYjOa~=PY?}^}OBAv8oPxH1 z;wDR~MBl)KXVZ6?VVAV56ivE{G%8NI!GFtklp@J0O_nttHBHIjwi-;a&;mLZ!N9{L zSL=HXR)k=jz9WQfm##9RWOIhvr{~IKCQnl@#wtoX4{gs%P*d?BPvN)Sl;BdW}g#2o}LiokrBSPCcK1;!D8zJiJ@aIt-uAeJmcvLKLD zY>F%ds+_IJ59;@LCYh$-og{)*wG<+5UME&jMxJC!jfOzxN?ne}oNA?{w4h#Go)gW1 z!ZU_Oof;mMT2*#({_Bs|{c=TNb7=(S$hLASePU?!6jMng4=8I%vW_t? zBln7oTA6uMSye@Gv~_j$rlFL24TD(-JV#;lIhEaSfR^R}FeF}i=jDX8NL}-xjF#LE zD~2}1&hbSJOB@TTJgWS1f=43{GOab*L^ZWRu)-U<+$y>dJT8;G3Vu`|c)F5N7(7Rf zX6vdYtRlrd}ND3lZRr5TfQNYxC~LOCYst12a5c%Yg)3d89so)j2b!6p_4#eF~cw% zCHSSPFiw%9uQ-|ALWeSD)iUEaZgvI*X+~C|#G{R^ImHuSJABE(DnV(;FvIg<8?}}- zp6@=7!YbXmx-yvCx95MRu9Kq^JF=wHKsFQGk}9$o9jL!#miGzWL zVpxoXjE9I%iw~fwBhQlNsQlEF2ME0Ph|7o^Zz=!%3y@0-@&d*qt^)#ozBG67epW1I zQ>Q+)2mSs9@ew9Gtza64xO|>Y1plKx5-vmus8edlF6iB)^MiJjU_=p*((sG=Ez3xr zav#Yq1qyO}U-;&&YrYkrGluTb<_+TD3*!z3T{Ik(IP7pVEXg3J5hFv5@Sd2$riB%# z1|ApytVPuQH8W%H)8;D)Z4eA=P;cKK8%pBYJ=`qTJ~U)`WbvbqJ<<2s4u@FUXAw(! zChf)nWThgCLXpfn8(k~B)>Ga7?+c*Pgi>g!qkh{|P$pckh4HIo5s1rN+XiTL(|^Au zb@PFeOQ$Jho`FH8CDEx?F~aeb)Lx6#VUD z?tgXi6Hp&I8(~wb0|?W!%t2MAAteqNvc&V!6i0j*#%ZP`_>VItG=nx`qao;mtde0t zVetL__96-#YDCdm6Ok0LPjYKF>FrfJX^d!42vip-AYj95FiHRzRQ74Kw%r>AFqyio zlLi!-ms3F4kOj)HM?JM=;W$J#Kni|d8)TGRxo8r&lyzL}H z;q_?>koX@cL z&*8OOI~KI4>zRrammwJm{9wdeDI%r)i{H$};rNJ2z) zc674)37iN>BWC;fW;21P7Y7i*| z3QN@(2m*^V0}Q#%6*vHjC`1$l#@=@eBEYPSq`E+8kQlTe8GtlIaz>KZT1wxcm9fZ8 zw#g8WMeSsYG!{nizk70;VWM`o`Y zY*~>E`=711M^Xr^oKzkwn(DBj1L*5WE)oz(CQ>++x{_TmwE8c<-y~WgvcV+UDazo4 zI%7?4IO-$9aO~^4@X#eDrfbvm2jM|bV7eZ4(Q6%S#UX@NzW6Xy3$X{%5SW=D;S9$Z zW-#rBEhz3W<*xKo)NnMO@^;8D%mg{dQSgljC$aEg=7?>gvo0G+qO@7I`Z-2P#+)n5 zc>gwPKtLBeP))i2wZ#KNp9ewj1C~Qq`%l4@d{`SMSP2Mdz{0wUzO6GgO@okl-NN-J zhkbsalsGg@@ui->i-oz}^?G%^EQ=M^hEqbI$J_CAt3mzMhHqn&*SqcEU@C!=@&@4> z=m$tatMcDd|INYg5ux|t{>O%r^WTO4&A|HK)xXpKn}LO%Ht2vmhCaIMD5>MtU7lX5 zM0Km$sIYAq`_5#)HrS;USacN{TFhd-Mj6%en zsEZ$)kMjfGU24n&CcmVTlnWzO>Ze)v35*ZygGC3y`p|ph(_aBJ5VD(i{%dHtp`qlW z;N?LJy znRgMbVttMgAa$JX*9Q4zd>;&KPW(DfFe?(W17+(hpbi=E4mU?##>45gtBGfJt-$e; ztB;}r6&_UKueWb3?oTWQ0*}E{vQzC*F>E(CzEdMEi&}9xeQ@C%UdQV!2xVrwe|Frg zN2@iQzF?qJAG|R<5*8dAG;$nA#XP1QxIAX^I)T#*L{Be$rYo$TXF9Q#5Xg9mE)4F; zp`e$z_vIFLBlEtlHW1HrEE!m#Fty?Q;)CZ~$1%|`$_}|@eRih1?{K%2qV%4t#8G8W zQXXi8mq3*ThuUJ3X5Ivf+XS41CpCUsoQ)M^4D|h7XhDDj2@GZAZC&dHRxb~tC#

x;RFQcc9qon?*g14S_LrPm1Y6L)n6|@Duk`O=sVXek~*Z_gQr^|u* zl1;DEc|!1Mu<}bfyrF!372>PEKQ|HZ9E1Z64=8DwBZjBS3n7_j3zVXsM6xmQ6tQd* zcMvB42OSLbzcRL;dtXVq@qw7#*FFw!d&cOU`{Uo3R*`P$(ofoF$+|%wl55q<7?G13 z`^u=Obw6-ffn^Kg>ILrZ3ZBBS#V|0r12BA;q|%z9_^n2azKt~z zCS%K;}{(^~0cqnEh18aU)XKqN7U{Q2}<@^C=>^QB={= z0p%Qla5A_S86{NlY~o-NiNF?3$A^_N=B@S)&jIS?C$<)0&tEdWp0g`&xUgju!w_*K z<#4;?#3BWQpo4(Xpt3YwGeI4xWbG?N{`@o|ohAJ({OPFO1pZ)oFe_hSbh! zaW&>1+uqi@dig$^%h5jhBV_tgGpXk56PKi!(`S)>{c#K6w|VAIO>TYs@eM6I|7x)3 zd~VR~sJWBX3P*Ymy zQIOha1F==bs-*Fkug)6JYBe`5Io0N@9^v44Yv1sZ(D&Y$*fr3w&Dh8(c3Ve(?609Hf6FtwK zmb05+Zhxj_o$oWw%H#Q^u*B^FJi8;4ek6%3aiHWwV`5Zj0a>^WQssfePu)rW&$?sp zE9V%vAXiQXr362y?V`+=(HXoa@qCsyK_(z)oE_~l8#6Z<u_b$*u@d4!Lz$Br`M z?d$1|5${(H=OX*(O*!RL2)=08o#fIKsj8}z`s~d~DSFy;EqnF249!!|fD;gcORFV0 zi^SSFnzaSnim|@rePnLc{m$o4ST0{60+gZ z#Trd|L1#QzVe)Ctt90O2!~$}oTaT%V*O*8}1;sl~*uo3C&gxgs+`qLp7l=l9-cgrk zP^4{3c=Oy&Z^tS~YsoW|ZtkPF&qF)&_cr9YAs;J0U+7BVPHI*6jkX+=3}h(1&Gd3R zj$UA^?W=|l^9K%kT=SgK;xrs>5OFuQ>v2yWvplOzJ9@~x=HpY@^;gZwl(Y*r#(~@}iHdWYCSrd6T}dugV=4hL7bYS#avp10x!*lhA#lTPOxfkRezf+8 zTb8_?WkjsH!l43#-XOsbI`1M%_+qoJIk5#`{FtZA6FSJ2oker(-IO;cuI7J!EfUsU z|02yWGL}%BSv5gj?Q7-eHMw4AHN@#y@Ph9kJ>$GKXUaLYyGn&mwYlQr1*;8OYinaa z`pK!K-rYK8uq{D*UW!M}?|P*_Q<6U^BafSQ2(bZ-XG`~cmDQ2w5SILFx#9M}tyNaN zp)+vO0V_T01nU&)3BJtlYztM5m9=zC{$hsS;n}M5p;-^w%sb7wzsiM8J^Fb@_rkSD zGUE+9Y1);!E27mg*B=W@rIXzAoZmoHB!o>VtF$$F+#skJVtVRRG@#~wSNUa{<@?vk z>&43YwcL!FOBL}HM{geu&w!OA^C2W2eY^bXg7K(vE@CLGH~g_oWd3yPU1gDt&`;O8 z(K@1`fu@bj5mEwQ>vKR+8du8Mwbda{FF4CU-Ik!{b zJui}dV^%l!GDKeeCs} z`5$aQ(7?5d{f6ASGs2>(%QqcXjVZ$6_QcW@qFK@VVUiBQ8odqWNdh!hBCK7Q{^8(?= z>^Hr2m_{?k*DK*hr~Lya^UXvgq)H)EbP^$FLqWyWZid7!=KB7p5)=}ah}KrE44Dij<-%>V+dk!_qGUK!wF~nr(IyU|YXPO> zC=U`dP%c08>zLT;M%o**N?ZN=8S4HEIyDP-PA9&q`tqXT))&V4iQZ<8!gs0`$Up?0 zOe*cjX|wc|6E#jh~?x9$Z zw+Zwwsv3_E&aCS6(1fE;m>-?~R6@8-8~@4CoHaM!nvnKzS9$#5OTKF3)sI*&tWvxO z-iz6)4*Vq?20xon>j3+dk^s@osL1uKmVTS0*e1zb#T?~AX+X#epR6yqxj066Z#mJ8 z>N0`RO6Ktm@*Se$OO(^QaR)6_N(adOfj7h9b8H(c;2+qUfU-7Y6o^i+*?Kr3G>vdy zU;soVd$M)BwJ$KRv9q!=&hBonjk*?``UNaWBx2J7^5*(V$Plw^V+CU*>i01Yeg@A9 z&jQ6{lRSH99Hd4e8Dre^jDWy31!AIxJvbQ30aet268}S^t(BFy6`1}OS2G#Gj3A;N z`}TK0XbvGXZ?90`HhV%9Wps6`Ki#skq;tnl6LkqEk@wF!YUV~ngy|XiK zloiA!2y$ur!$-$4zi-6Kv}`c~&HQqHVV$Il$Ra z%cB>}?BjQ4I(B$j%zosIfL1g$Rno`&vZ)l|HzTE}_B0;;j7wSF5P=)#B~TNYFE=_l z&BvHa+issqn;5QMdiQ}dQp9&a3Fr}EID?p=?G*dw9q##vKpTJEc7V6`^_#BY(^J65 zAGXJy_=~<6>ufsw$(OAZxdv9NzkNK1xg!$hz{mZ()7b1gg{WY07e!)Ozp(>~2Lge^ zk{DshL(C#OV9|M@!*_hYdPf6q%1V9fI_4+oY9}4k@LyCH;hV?(x03nnkA**?!Uz$)-Ih=|j%6ob%llttZr# z=<|i_V%h{Qy2rFTi- zNreTyY1mAdPio>#@<27npD@Nb2weloBlJjL9^vd0~E1ko50b+#TQ1!=d^hud5c#tE4@(o4x&kF z$%+!GT}!6GOZvI-vEhdrV#NB}Ij`?(xDv7YxYRr-ip%4eKFY!}H)I>XjjSx3V!YxuLn(&WdsE)W$6p*1$`hT)l+U3mHuHDzYTV?2wA;l z6=OhBDlP`mw4u`YWFBwJChf>VlI?sObh=IH-t5|rAH$>P^dlP^s>e1Hw;zONrwcU2 zmUYyDv_COB25l{9mD>ARyI3}lF};>*b?u3WLdtmcEJL90*6iP58w7?n5QBWk3RMK1=*ZLTH7n=iik%wiNnar)Fb8ezkjl zgCWYU`|bMNyK??HSg~*Qr`AMIP8WqbAN%>CT#AQzW9Dh!Jty0)oylzQ|3T8}8f-O= zl|TT^V1Pa%-`A)9Kn1=}@fJ{w-+|Q)63egWy(we0=xC1`Ub(}ywFDm~uSD*gf>papQPAoH|L_e|RU+NC%O8;hO zr%Rw$W2O-ko7B!wRhnBdXRAcm8BDB?)E_@}m3nKd&Rp#zbBpD}5AkqxiYB(gq#qgBelI5azeV9oOv!Ej{G$G0wj^?*eqBq;$CJeAC@JWH>xeF z@PUK%^$#}T*IyIZ)1O3sL)|M@)cBaKvw2~$ZT&&qg2}k)cf>c!h8H|dhePai$toTi zwXHv+hwAkQ-%(>rNUB0hNp~`%PsPL2j@)Y)C)bqdF8zMz-J%_bg<3EEj@c#l z5QWgUk8I^6GN{%cy(CdKX>Wc~NVUyt98oh#F?n~v;;fdeeDbobR@C>?GEWB1at5Tc ze`Om#b9DUYv3WnuxvVRXx{t(GCC|Q|8<&eBy6>>il_vLq!L+VwUTFuu?UFE3)Napt zSz}G-qBKL>PE-eD`AZ-?1kNW?sJIUF9}nll#)U5eK$@deMTU#u7CtSn2SB!5Cr-eh+wM!5y4Qk=pMNWL!N;xXuV!$EkaB0xACIA> zrsxQ?+Kl9i)NN!;BDor3C{$VQt4?k}t4sljVuT5af`=IwyXG5SG%xmaE%t0pUxWrd zIr-8uc%?Cy@;H$Wui9-?6HDxyEWd1(8L{l%_AD|TrBCA;*3*X!Imm>}!rsRN8NNo+ zpfKhmhf}=#)xqYr(Rycc#tchsz(o4ciNfWV_s%`N86VUpI1r=X zqTjMua)_?*R(2SN zv$`38Rqx+)qG$H3081|@Z6x;m2p(!^ox>>w z7gy>*<}-oTw~Rastn~90t6c|*&eJ*Fb1%M^r2_WMd@e7~xIR?-40w~*i)^Ms%I8Mv z8Aoe<#y%u{3+$?d_U25|oUN=^AmYit-k{weu}c#Y>)ie$}mIQpMpV zf2BD~l`MNXgDcc#S1k|&PR|+hJoA`8wX!_vuZvoO>otL_t988Mt+dDkxMv+TSR(yG zRN}?U9#^IEbG9{leU~gqddM+2SzdM5HMQAMLbX6x^@#WUg4HpVl9?f1J!7-+HSHwr z2kw`aLYb2Ex9Xqg`;nDA>v+r^QpNt}b{B>FfZ-2u`t#5T+|$;6TbT1QSB&)jNgTfM*pjjqWCR_OF^3`1Dkavq};N#&`*(MDW?)7VhO1k7b%#p)H z_h{=hZ&wGVZhCf!pTAKzSh}b*E;hgwcmKT0gJg5PCE5?}(Oc93oeHeSW~+SQ;|ce6 z-o*8t)y4)bAeJo-O-fHUl*dI&Pa6lcGYTpTl=6d^A--soha>K1VrN$ujKi)$Zj17D zwfj|qt0ntY;DbhA#MvaaXg7?bGa6@++jw~HDJZ*Q{;BYyF zuth?k8sK3!BxW%7=5s6$Zym%NAj0$Z%)Gr42Z#VB%P%JOE0&434q}!=@J#&V-7B*k z0w94$THWP=RXb@?geW;56>b2fC#d^J1*Wj2>8JY58QJK;h4*outHt< z2P=Si>=%<_x7~Q_Am)vdJ%jW6G{h0N{b4~UINZ-y}ot8Nm4!p#`oI4mo6MJ?F6h@9uBwy>VRkU0_w26h3!1Nbr5_t zVbApb$NGmOf7XD7$io3YfUNzC%(Y9#TL+Q9_wFJ8UPO1rYQTEs;D7^w#J@BVD;94Z zglxY-jPHp*D>05aatzif3_Chl_50k7gXpm*bH_A-Aj=Qw6D0#*r!10Dbq|Bz*@ zPP}!H&gY{5^Y_T_?g=>JwhF9T1P;_=haLa$y90D>g#(MkZ^o~U1V>m=g_VlIf!hC- zP+YTTnfbH(;3z}Ru#acqfCtbr{AYf!EyG&}wJhf5p7nos3&Rmh_+T6CaG)L_;&1xG z67kkS#K@vOMBps>wGZNu&-r1?+;G4FK;r*ojYZG778M-u0GRj-D_E^~>mX+T+8*Zqum%Ul#VCLq00y+~ z5sSAD0+)W<1O9hxgo7`#!qRBqfGYsUXM zv0pK^n5Vmw7!Yg&0WL<&!_`O38I3{NqA)1tH#ApxFurbR9$6kwjE9#EhDVgg&Jpco z>&YW)dWFXY<&3TR6_W!syPl3N7_>dw11NCua&kghI{`kxFQY|yesg(bulW0m{`q}e z9RC*peC+?X5Ny8iHw;{k@fQSqUh)@^-EikG2!M>ghwRIl@M3_Op^`FJ;&;I@bw3{*h4PiIS{0qeIQ06ZXxNH^=_^*S5O@II5 zw|DbpJmEi&C@#nTO8}6U{{`Vs`0@9QKlwi%^`A#%H`>4x{&S!1y~ywvn7y&YUtoTR z4u65zcLC%tIRCn6@}F7e{shcgyBq#tXAdqQGV}y4`EW^yNr;O{a0yy_IXc;Lp=6M@ zb~1KIq~uX+;MQpbLQ>LJ93hTCqNT-ckk-eL$HcAC*0vHtz~vesPyPS+Pe8#)K%lRD HTH=2I^P5N= literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-2521c941-34de-4532-af09-054c39814f92-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f2c536e28aacb1c8f061f25c7a0c506610d2097d GIT binary patch literal 87990 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 VflYrT@_+n9_M!%SaN?oizX5QMG1CA5 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ea155d5721170a288210405d96099368b7f98af3 GIT binary patch literal 89135 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 Irlu{)-`0K;*Z=?k literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4dd214c918a1ceaccf42fd7c925ded2bf7d51d5f GIT binary patch literal 89624 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

>7Kw`|qCO}?lq!O-%h=zH5X+3yD#!iR#L!fd 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

T*Yx^LEfgsY%CaOjR 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

0s@hVaGn0q)AE?c_pS242WlX=N>1q}-M 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 UfJ+1aAO69h0XH70im7w_Kf8MmjQ{`u literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..76b676686f389f8d2c553e7bdf667e75a5a3ad6a GIT binary patch literal 82233 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ìI_biVAXj)_WPG+HFy{raYPbeO| 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�X;4oLITqIcO7Ah9Sf3jnRxiialE>Xa{uxFz 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%0D*jgJ z!(Rm(-&)RLALu;OUrQ;gD85%JY3Fc4Y}a4)rdm#&C;mOJZiuCRv)A;Y%Be0HknE#W zqvY*YuR~Ab&@1tT<<)@uXlC?wN;~=4NQZY{`uS(L4~c{R7Q|(O1M6{Jdc#`bb(zhFKi|=Z zU^imtx1)mQ{EP&z2ZIN~itZT!*i+bjf)l{FK9WlnVv3+@bRF z?UKfv8Hq^--px7Pj`$9+RqqppU50O%YenZ3tA?v_v($5bqg@e}hv@^7*R~e9k2&AW zI%l6suAq=To7Jp{M{8_BZO`~OXy>u#bG*Wf4~6=ZA5%E=4Gz7KzJ|ca6}v~2_isCj zpud@KW0@`VD%+gY_o!FCYj(Ti-0V(xMWgA-9EukAoaMBrg&+QkjyT-`o|+cj)Iz*x z>F*@I*?+$~Rbc+HC&so|w}3m?K4QqCmtpU=@G+7v`Zhxe)tmA(pZw(TIrBm;1y_&9 zzIDmjrU;PgJJFAV7!>>*7sGcK5b>fs+Yp`=tjn$a;p6x#w!=?vu_^5jB~V!#xd?G* z`^cN7520xmwQpw!ugT^~*qqjpZlZfRksP}gC^)OiHn_ue42U1ZDi1G^0-oO2YH`BDCHdt=b5 zVqtkIBk1wAOOrih2^+d0E>B_HW$Yb^>ZFd;5;&!KQ@mPoxD|Wl53$StsNa{%P9H_T<9^ceXI*%ktE1Y!4V29i_)+(KcfV|8=*D{Uc4`>OY=Ioq z#Uc$d65yCl^ciaxPU+M(u=LgC{JQsGO%!2gE-VLF5d&Uyc*(t_eUgAk-2Q;pP8 zONR6L;tTXGuo2gh%$t-byrsO&U`yp$x6O35eKjiPPI>Bm1LDBR{Gpxl~@u)IhIO8KEgZBB0@6!hI%W=Kjp2~fR@n;rXBi$dmvpU)*O<(HHSQPxP z%tHo78#OKldt9fJ2FzU1hUDJnk6%BoH`4E0N!+0x;=;G74G^9}$Vw5o$9buVsk|XN z(zY25mU#4f1?)$76>@E|qFkiR;^yDzD3x}(ZXd_nlh?_gd_7I;i4QhLh2k6ZKtgSl zR^1VcBRT!PNcL>L3cMOI^Ad3%=eYwF;+`M<_k}B&CoN{#^Gk=Iupuu_bbgVkPLuIG z`7Z3W$gH3_E%TW9xMW>IgM;PyLb3%@KXOgE8b;>|QP;F|LAGtTSz%#r_+&ZIofo{N zi%rz`FlXNG2dgCBF@7}epDutTlhj^8!EI=mnvRs$0s+VT{<+K6mchokPDv zRJJ(toN3jX>&v?|eqiPe{ccLzouy9&VT_bmZYA*z_C0QrH(W=83&P)z*v0pF)Pd1b z<*&Cd<@0yby%f(U{gt`NlJ`{D1gB-e23Bi}kle}p3iceHH#M?(=TY=T-1LU|y-u#+ z&ra0sY)J^6$k8MB0oR0F?X{DfmYFV7Tu<3wY^!l}!)@%H1+c`H zx$p~7#n8;9*$ID;)f`1DM$Ek&G0a^>+%Md1y?qGz^}!$l02!kq2Qq+Y1b;6VQ64CO zxe9<$-=ybkt8Dy8)XI!XA&y7${s5%f#O>5g(L>6V}?vU5cU#p z;k-O}rReVG+cI?1p%snJgg9kF=npEf5TrTne7W(&=)n>64@wC$KFsl3dG1&inyfs~>1*Eis{wVLt#Wo|*b+yK3-f98E!KXfM<$BsdxTQ6YaA*R?WRpY}CyvQ)!79zk-4DFZ!K zmr_y3|7>#3-MiA14yuc42-5G91gW`L!G9K>5IH<+Am>7hjl6v>5bbpQmfMP#ocIEaO^scx`@as! zRFC*Hmj5RBU88`9jPagQv$Wb^m8juGcNCHBw!IL35g*V4K|g8fXV~6&H^4w}!(3|c zv6`9`D?UipM+z~4stN}+IAl)~qm7+7ShnXOe%;3Em9RM~JoGc-J=x0qD8Wnr3f*-M zH@oC?Fe7Gs&y2aYnu11AF3>Y0LFs#1rJ?iB4+f2X4K5BDshjLNx|_EnSFm^G5_?1~ z`d!D(%m|f58Eel_0lBNr&~%q={N(Los(bZWh$-Z95*@&YCltdfl>AB}Bh%jW{-i$f zX_77z3LW-M6_=7KJyNcR&J*p>vQt4LS;OR(QHYMoXSo*Vm89+bGBCjVaw$*Cu){Gn z2l8d*?IgTIx>ob*csEv!{`sN6zSGITeN>}LS<`x@S%kEvEgZqHj9Wq?#lv^f*H?XZ ztbxckyp`n8^c&94TqW5KuHC`mNgjS@j8R2l+%ZMZpr3x4!mDtHC! zsIo{NKP?Ng7Xtgl7qg(yjqF#Dh`XLc@D425pqlnFH79r=C|l6g5oW>3(c!X4f5lEX zhO96Mv89|exSJHT7Rz3EU}am4BG9&pt7!2f-3cPspp8m1`gt{y$TL*PKEX!!1iF=f z#SvFK(l_x8vA?<^cE(|a4RP;Z&?(a>K|$->`y~q2SF67)vhEwxqX+CsDoruOs8VwjX`amvyOW%fT#42DC_>@%_>*hbj(aY ztM@yJ*~yR|e39|8>G6TnypSj@)2JaMQQ`|fD`#Dlllc1r*B;hVB4R^L^=J zSIfI)igfiPMaFFYC=f7$BQk|8K3F%d>;HkBLL%X)vPCi1pG+ABAE9;!*H$$gMnIf2 zDGt|OH}+Xc@RX5k@FPzk%;4~wN+RKl$;*DjV(c~RCPbZszxb2k<&*q1<;>Dgp}ANi z>5E^Bp`hH)zWVxGTi4G0M-FxuwU?7*qya;CJpJCL3_}r*dNOKN;TG4anv}1>Nbu|j z=-Hv2kk3A=I}gASOs*GHPi3tNMYD3Jy)*{r`xz1US9d1w#J!)!tU1Vsx+UxZNBe9G zy?9tf-^?UDqC+<9jNm>U>rB$HZ1OJw)x|$kzhu*&F*P@kgvEOAm+%4%Z!p*- z&Q~nGxYY{oO`9~cYyipH$Q!{DH9Y1QxxzZ}lE|XC`s&fCGzvZKBN4WdR|v;W0xkYV zVz*VcKdj~L<)s*MrwVSe%uQ}s^n1Eif1w@xn(o-@*9YtjG?lWq8dj@=x|Y3_!tyu# zPrM$Dj(d-46|E9^zaBi(3p|&zosq)^WTc@zWL`!>h_d(EyO?PL-`T*?010ciP}rVG z-xX@V}^Ne^sExqUbi5 zh1w&GW-;O9mE)(1yVv`j%q1nTPY@Hk*^(hDH%@Ms>*+nCTXWTTA?DqW5s)uxab7Jo z!z_>8jGk9-_Ouc|+cm0lRZDDznlz{uvX?+ibq^;F7PKJTgL~8Q9xlnaJ>5)9Q#J1K zcMd4kpB1&*I0wW+M=tVdjvkh+G|&d|6MGdwtJdCop$#YJW2`$(38kU_-6rM|%RX(5KNCXP1_G zp^VVjq+L2>-4a%x#QB%gJpl2lz!i6>C?xHN_INyIE}))+MELm6#8s?}MoFfYlyw^K zeCV93jkB~&#=Hx1>D5CLdO}N<-PB<`^?B|%FdM7-?LfN z)UR45`g}%!zW=1A#X0JW0X3no4?Ye7`E8!u|C!~_dp3JZJ^iJCBfun=};EKqR}(48Xs6Uxw;zJ z_GRuYS!dfL`+ke3{|r&lyn9xk2AmNF2fYS$+^efnTKn64cY3-vNq6QOt6&e3UbnEJ z3B!(}M9tdfCeP9J?jnKyl?L@mQ3}D1?9A^9#n#%vMR@=*Orv@2MbVzs=srh&%A?A< ztvyt`%^u;QRLA9~UiI58VwcfB2pWlF>~ROuuT07UtAu%BIoQ3$VYN-f1YM-GCWc|s ziHL5OG~}@9jcD!1xfdHb|5k&xTtB`S{z($X2+G+p?)Vyc{oo}$*CTjb6z3`pgU~%@ zGe70_+JrdHC~$3uVB}gG6eRr3`ViZcVtND6DB%0~XeCjYJJXcx5w9zg=R!~Ps*~m$ ziqA2fdF^@7r}4$4nyU#aqU&t{-t&R=inCM7DO)Geyr70HFK8728%c0}0=G;JySC5d zvD$X51iY!UW{9!LNq%-Xq7=5AA=!0#VbcIZE98B~ zqSESb*36IZ)^FY)i)ua_TC)6Jeb`Gmuz20d_w-V=p}4@YDojp|vK`k(%^9T2QMo@V zl*zMXCrRfI>WdlVn?=;fws~J1kIZyrhpV@YaChn#wcqLjlZUQp6Xz=>8yQT6=#zQfcxlMHPW;yIM_t~jm`rR=@)r%Q!pT(`xo z=f=~v3IaFUR)-fP^Qxw-hY}MpgWcjg#?1(g?%!`61U4*_mN`oT>vZ2Q_hRh%CszS% z%35#g2zMwyLJyG30r&VJ0@TLiPdX`}Q6;Oc?9(qTsGYy`RWrf`tT3NoZkT<%mt40R za1*bsVPZ6wdjDJ+dpG;Z{t9wd zOnAU92ZR0zoBoO_u2V+Mc+*%;R@UJ%lapN3UzzM1VyM#X#OB+Lg0*Ve&7=thQ^lN! zCdyvUrR=@hbLkD9C%BJsY;ZG0F?CmZQb$ne-#z;nZ?#pTce zNFuavs3VoEDia#foK$d->?}qy;8@WMG4^=W496_ZwvU*tFtvG5dkjE(URjd28t~Hp)`}awDlU;=LFidNFOv(Om{U3EM9?=c2IaS% z=X!Gn+o?Xjg-JiI`nI{dpe=Y%x=HUX?@*mnu~JRpQ?`ike3>iFDV~@I$gq1Y55KzOuW{>_0cS^A z@0Y8Toj|3sn&>RwO}j>PTa(?!;fg9@F`wL*+@43l=heLyr2H&&ERvbzs4(xs?92Ju zTjm?R%O2-$?5!$;`0cna0Itn-Vwy27OTNCL?V=krpVz<+iUhSOo?xb3EkqZ6U5@V9qf>k+gx{IhoO< ze0#$9rbTzz3jAi4f6r#sDHTNNlHaZ1OWD49HE)o#4d+dwp2zJ& zjsdPu^B_o_9UmyESkateyku|917GiU>B2$Pgn-x#%VRqeXioF-3M7wntDOO}el5PQuujj+P{OZE8dFhzvb`ggdl8G_ zrX5-z?unbwtis5kY_i%UQBZ|x>}ul~?lGb3RJ?xK^o#0ITuoro_OxdX7X9`B({F?U zo7N$SO5q_%*m;{mlY?4il!48>mXq5CS2hVk1cGcl7=zz$`e5XOmDZc4UVlK-W1~q# zbUUwCCxVFaCU zrYc($Kob>^A`;FXkAaFZMCK!#PQ#%3gLag>7+*qJ6!Ovc__I!st-*Zi!gqSr;@X#u zN{Ql2K2_Q$gFX=_lPvKhgEdh)pDOW1nqRk5jz9PtcAbefaYZqo7%wV&*FUIuA#%`c zt^K0Lt3+)(W?TGwfF?S^n+@!BLt>Rq6-@M-%7 z`3tp~@Cw#Xpc#78@-wdg`mI>QAG=3mQpP92UuVkLjn`gs5-~06`A_bUe^`DPVZoFB z6Ld4drOjRXO49|tS4x;K3#Tva2F54#=JZ{y<_%q~mDTV>sfBmB0MmCN zkjQLg=R5GImT?REL0L`5p6Zj$rHd5TKB|@84?=;C8}%N0ItZQ_wIzl#f4e2pkNrwu zW89->SU+kV{~F~PMlU?x(ffgiQ7C>}raS#brn%rlz)LT5j~PzmJe791fXO^(bMNn2 zo_Xo`bfV4Vw}xM{pfk|*p&V*@d~+CcAGwbSt>sWtJzqCRLm%*qRKB#y<*s{M?uPGrUlE8`ofb^fB7B*p)-u z_MxJ%@9p~wrPo1WE@?VC)}Fs=GN^mvm7DIjx>LjSCRls8#DsE^@J?|88%E_Xb_Xolh{{GQmQc&$_VO67nryzl_@ne1ghVf zHMs&Y_tuA}4!;YY+FNUQ{HCWvzs09ifC8^%bAYK|b-yPJIW?pJAJOKV9jHfhrfG(# z+mtgeQ|M>NJJ3TLr{n#^PP&ephdMKHkTwU8Kv@d7$q>?Q3-- ze>P#`huq0Em9GT+;M<(`hFy?P*>vLf;702(}!{x3>xtW~lz?$G{JbX4-6yCr_X8mFboK#>2_3U_Gm@ zwOhkmo5_~S49_;cECrwx27ym3Se&B2ZXll(`>ggd{Ya zmCiRj-TN&jNax?t))nusb@_Z2w~O6>yoY-soE5%8=mfnuHF*7#4dt1!hr$J;G|<6P zGa9}R?~UWa`NI0sVZ>eW9{0PuRcX*yOposh`-q2W2}?+7!`Sk@3?Jv2ms?3Q;*zXK z&o8O9;X~I&|JA?2|BpZGRRs{abnHAcCZZ!HYk41uf+&DkQi$hj?d9r4>GV3$+aO2Q zFZ5-Ad%4K468CMW4tu82Vxm^eaq0zmPCiaxnA^P^H|G1t70k=_9z9!b&kC)rJxxg( zy9(Ofi9QQ`Wy!S2GI|TmRo;i>TXF0?)^qJkZmZ^qKP)2E0OFVWzANjMC`YUbQ^_>0 zv$EQ#R`z}#a_ka@e{(Y!I3swPMrhe9O3>6W_t-FSe2T zuyy2_J1kWGn`1J%qxwa9qieAT<(qazZ0}cX%#qq?T#c}9FaN|T8}!^DUg0L*xv*o@ zH@Lof`;>M4umQ$(UNcFzT@IbK+u*&rbJA1|Rm&RtUd#iorTK^_{d3@&$jdjV&Z_35 z@_!gHAejH;Dk*~h54pNm+!cY|S zf+4Vz1b`z8qXa^rD=P;=VjCp{Lg72k1VR%Bpaj97#t4H!QD!)T!O@o0g26Mi-hd&n zj532GA}kmUAaWlR3?T78>hM>tY&xW8Y38RK$s41(2Vrm*C zhGOYDl1gA3_<%~{$VRY0;fkgh593-E{~E@#ZQKn*b?8M6Cvcuo2`6;lNrVRVx?4~7kaWeCR^ zfprYx*CgvC`~D=`j5zre`=GK~EXOiIumb0r?SKN;mJhfh_g;*cBF|Ay@L!PAvIZo+ z%hr1&{@YPDWP!&O@P2_8gyeX^_nY~6p>GfjSQ5}FlnCJ}gavpJNet5&5g5wi8E94d zL1i%{0SFawG=1hoqD%^L6$vbT@evFj(*bZvT&qS@0s_~R08)6Cy;&&|6?9crvRH9d z87f#Hnk;R3BbppT+XI?BiwxQyu!vtuo@zGU6L9E)Ct9qV&YAss?z?;1G=&Z zEC+^)1g>iefwXZ-it4IXJ%$=5$KisSvIOPg&sAmhRCP_`)Km>!;9{yKr7t8Fjq%iO zj20kqNLAZE!xc-%>Tz!ddZw%iOPBL-Hci(-0z^}9Z?t4i&t-84n#fJ!p- zkD@`7#pm&G*-!@LDMp?MQezZ1XewYrF9Tr-(-<4mTuUh&Gfc}Q6p<><#9u(U9tRN1 zGdu!#6voOlP2N?9FiX{T%f!uKNXax;f$SeM&v89kwfGr0EM{4#eKbj4l&GOY`8zi( zOQ^iO8PBH5^&ktQrq4~wwmz06TV!#DO4hD4wuJ$FUv`1k4FgF6Wxv zh`#%lFSLQj-jw>Z>VCPnfx;osV#{+W2A#m`w7gV||GZ?xz&oUG$3XQuQVjy)W{5h) z=YCc*-}kwT1kLZYu5{b)V--TqKjC#51@;@1W{A$;_JEidl$ELg0-O^Am6skRLNZVi zXJw3Al0Z5U<`+pu0WKV?#%Rzu2D*qiKFdl0{XNgijx4OKF+OqSqa$_*YN1)LYA6YH zlGrj1jd7q4!pmp~h6au-G8&`FFZlQs43f}Lmp%ku>^x>%Z-288<1kFC2t_})oaRu% z>)MuI{_#1#NNq|%oF>2t>}P(3<0_{0LJ@OPZRwv#J5Pm@)R#_#U@JEFNs<Z zQ<+2{>8pt#pW2T0!y@`{8B$|Csj6VR#YA97x<4xK8P69NMT>Q1c#zpA$h2ZmeKXug z5L)Q1U_{jzWfX$ml#h-?(bVD0!VDRD3C<4mV>brJ;E%; zK?>zUmIou^VnD;V_k*M!`f*4yT$~E+SjMF{@Y(Y$mBl2b1LN#YA_54g_UX0u!|-)1 zi!i{ExC?|WZJD*h>PcSUf`;T_io&}hD2iBFtjT8d24@2o$uZBsV0};x04T9En>736 z{uQpOM%2!@KqyMa@t0mJR;=KCV!6}$K4K^z8g+5YUAIDM)q|IxEWB3{#!#rE#~|^< zk0<-_!lI@sVxUkmDG6d|xSEM{ktFCkl2^e&6o{Gk%ZX$jp{7Z)Xc`kq@=$%U$%;-d zrV+}Lw1+92%GxEVn&x3<5ZVS{5os;6_ga#=PLamx%wDf%Lac#pKQqiDd5)rRleCXu zeKI|%;4L|aHYBY$AF*-g%G;>2?VQs7CUm#Hnx{FM4^6_riJ(%0I@QCL8f{PEPMgXo zOHPC zXa8VHl(4i58{;d^+i(9&KvEjj{FCCeIHIgSizZU}O@cLb*mA@$Ee=!Iy5-dpTcru-L zyJVYZ+@YSX|G?)RX zvxUsTA3rPWYIoe|-Dw^p!0N|-yw6Z1^flYYk}=C|a1OAq?=k-Ub1Tg|EqZR;$b?G6 zpg+G9Vhf(PAK7maX?<_F3c7x|KeO`AR`L$@>WXHc^|=tF6|;p0_-29X9mD z`kl%Et7N^PeTCI@zWqYyM6~0oop;Lkx}Q(AGYM+30s-mnM#13jkJ(}8!;%dXYC&H^ zrJe6)2X6Nhk-BR4n+}_F-EK4FP`6ycghS8f@VTYTm;D1%FDUq;s+khpMNA+#`h`3l zqy<_?pEuEk(odl*7i!N&lfYVhThwQ>emJHLi~%!_PK#_sw4tH_S-}qqLNGA|&`Nm; zpJ-S#E@mKOvlg_D#1U{7%uyj0uTKKQ-6<~xlbVgB9ZR>gcZhwb8GpEaCk^O}idj}C z_QQS>I6~y_!xS9#!YY~XtqsD;MCv|XJPI4%N#KzD@d7(WX*h`G^;UI&t24>{(*$R) zD@2vrzt^N*0XuIJPXe{8F)N&`>L*#?P410i2)JzEatw8{2f4u+L=p%Ta-n-Y29oD+ zzbx5a7}Pk>3hdVyRL)+I2d7999H3(Ml^76kf-@^uZOUChA9<4~!WERpd? z+;d%{rG5S>jlEnf_G>)BG+91|GqBej&8`M%&a&U5tg|(CcdIbh|e-F}DZ?uvGvD^3V zF!-}Xu!bRO%?yOIewU{P)~B$rO$9F4vazWxIvS-?o zvVxQnev%y?F6|<#iBn^LgBvze7kCwvwfqa-AF<8MbidJJ>D!7}7rIC+6=v><$qI>$W zpN}I;dPSOI9L#5>`pXHFyG;#-#K}u~Apuo^UdD0^ZWMq9aGG+7=b&{G_4~{PTiV>1 zFwJ)su+g!D)ZE*9Qp50>nqX zQN=OgHKwVgEEu`N>_}gY&!ngN0W*gFpkH&%>kf2MI|*DGm{zL3Kd=ud9@+!hq&T5* zbVO=)Ai0>I0#MyqYY)*SL!88W%`KZkALxpc*}Fig8m^pu!TpA zdBvw#-(WLkf1`#>87y>_IVvFe<++pXyw!GGZX^!V>*%+IcY@iE-;VAQX`o&sSzCZz zRkSbK&YMFouj84fn5cKk^Vx)*4oo=*u>H>O<~f6EO!oRyf?Dn6*#6|L*vf}Fcu`V8 zZYCnDz5~OCSJ~nR6QL}|bxHr>b!9Q8^ zh!^(m5>%X`5yJL!eMSOQ9}R*k@Azt9&eszsA-o!j!~hhWRkZoa_PYDxn3H|LyX*XC zyW@2#+9jXm15CeOESWPnk@z{nt9NmY9>#RB?SPK^FwMCwsYM6~G2q5Jh}4H=LS{gW zyk_Qv!0QR24UcGuBh}hpo<0~wgM@o|4mt~g2{C|_3LV+`c0bL-0gTLP3sa`mdS}bPG{NIABd*cpp47*W;NW|?v*5ug4Af3z%RpqO!>^8d0$ z{+U1jA0LVT#DF-un1Uttk<5)Dh_}B4NG~&^;KHRLLQcHB2andmpx|CXlWo$A6hmvp zI*>#>+(UtE1`;g){D<%Vy$2LRV5UL*U+)2&AT(f_ia1~*BL9W|3FGTz!9`HQ+}+$9 zoYUb49V4Wp0ClyC-r(BI5uzw`@MGj!FyNwZ74-BWE`q_Sj+$D<6DyE&8{GlwM7{ky z*{}Y78OVY^WxMhN`)&jAra|SdKdYK$9}hdTNXM&qV@vWf8CIwtt&!b-LCBcQ0qA*b8MIhx)2PuaN zej`7_pCRehEM|Mwd=~kEi`P|jvtz+^A@6Q|fL_pwtfBr(G5J@jxFJx?Vx#|EE0F(5 zl0hQ;j~VyB>Hlr@@qb4DRXhDP*9^_YrQX~7=u<`<9m)1^B$>pkxPOE(k|`2aX?WEi zq@)})u^}PSbQ~^hA?(un#eCb>PF3%t_g}Z3ipzrU7Y)yA>-*e_PMzn8J^Q9+&6TI< zJKQoaXqZ}GIE%B2&A*7DcER8}2ujJ$iZFSLu&GRtp7!~-$R;nj&6MG%W{5tSiM9b8 zal2S~`wSoaamiS#DljD~@Q5>bVzmM95BmmqMev1*pcc2(U!vsILYb#79{~&*6Ycyj zFlH>UC9UR=wtz49;yv9oLsmo+yjUD=Jud1W#`qJZnfB&u8K)SNV(vBj2aR~HCk;Rwp*2;Xukz~7I~KS0+hg0UPef@dl$h#{u!onI)JRluV|0^8v!M7t7P z#2x+a0YkuaD(6SSPY+9qSZ%8)>5379-;1zG~^pMz0iFysrC3O5h6$jk|G#lus=lw*d^HB zv0X-<85u0Fjj-ePAr$w>@_IGLJt4@M_Ed;sXFz>#+GP5T5E{ORRV!Ikk*<4Db9%|& z!=+b`;+Y2vLGlI$yx~M3=E%0j6MmEhLRrQ$z94kXEy&)>uSG(pQgmTY6WpHeo9>q8xsuRzAqc}W9p^4kI-#8 z#O-k__Brz8S2N9!d&gh|7?hNkg&= z1K35dDU1_RDF;~K3;|%~07k!lw2v4}t$2o&P=WvKf=IU35K?;%r05$q4U?|Vdqpx# z>{~%29vrwZZWmtI8eo#J?l z?PzRggcLAER6Ava+A^F`1L|o6C1#K&hD{ZUaagBvpk^g9m^|xa)9W?k)jlfG`tuh8Xt6u@ z90@*LQH1Wfp{h`M5T50mfxgOkP+$hi*mFRpRzPSOidWGuW)iHhi9hzudC@HJ)P{c*BWxK$?2T*AIogTs&a2lGwf z_-uPhpOu!O2nAu6y-H1B*tBlV35sbz=< z$oLL+ZD=!aYu+|$qnU_|F!SV_|3&nP{FrzgJL5m0A;T9}GsPaC5*w&vk?LT_vaB=2 zVdK?gJ3ZW`ZoH{~<&SWTb8*5m>>RHq9Sm;EbTRw9I6Lbm=1t3#*-a)8l-b_(cD)uZ zI@w~rEi&nk^XofCe$v9^i{v>m_FggRqt6dl>p8{Qjp8%f@$;zrZIk2Ha*KAbDSrGr z=2+UK=c$r-w4JzEu=fs>&fTGZ!q0UEZJv3e#4b5~G_;ARYJGx_CXniG(>c#?^mMLX zdQBopiK51D+=uL}mBS(LU@KXBd;1GNX$xKKK|n6Io9BHIVX;|f*YVTM+^gx6(#kNo zv2wztc`>qN%Q^G-4@&X&qYo_~&o^zFjq`_cns@C-ma}=(LT3wy=)7fjk*CBOkqkk{ z(w&=2t6*>=k4>TlR{I0r#}C={JnBk)@<&k5YKP8$cSqnf;b*gj2RqXjnHl)`bL|)J z@>iS{Q?+5PYyO*+pvO>Gv9aJx$z!bZMMK=9!-^1()IYC`U81YQLT`&t?PeUhRhhu+ratxv>_K+`suU5=}c*=gaJ@67^&JFo# z@5l7z$Q!db8J<-FdRqdqg!K0uO?cGFWV_(Wu#XVM9>;`hM)QEuXb7?j$T2fP!wt%o zCCn?@1B(;m}9 z?CyFW^MMr5mSbdwux-8;@e-JK7%s1mL1yqm3buKZaqqc$73^3H(8n4i<#PgXW@RBs z_hX3P=g0QJ#dY-FaePE5jN(*$2SFZ`63F}duve42R>U&e5r0c=ZG`+wWtkUvW9Tv8 zj#MSSd8Mx06W2yK#+Og|hQ*p_iHeO&lLOE2qkU&FL~_v6IpR9Pw?r$xB^tYDs3e@z z90y%;7xgDdy@RAq9KSO{7=XD)q}pRy0^qAU5(pmj2f8Hiic9olcKFKr8nMoPp{^N0*vq~K?@gu)yB&!7 zA@mCS1h?EAc0`IBm($he1pPaCB7PgjZM^fmW%z%#*NyKnKy8sFRhm;pt$vCwD#yYq zCi`Ox9#c~7B44mU0}-mknl@?edoRaQlhGR9o& zair23(!M~9xZ={Gr~$c|HffH@_kH49{Mon@7s80;MlXJ+7#%@BkO%4*2y0UZN?Pnm za8|$*rsKJoYV$loVr$~bdPE9-`W|+=j>9m(xW`((N5z{|4ZAY*Vf(wz>LCMkGQOYU zKyIW?zD6b+q~#V)U3(jb;TAWE8A6N&4}cnS+1Wt25{W@D0-GaF*^Eu`O;v#3Uc|-A zr(-a^&s!ngKs`G?x^QSE= zyVb%~BvR8qGBSh0jQ?nddU6CV`dn6iw{{3qQOj1u#OPNyp2K9!295dcP`rW}ySQ4T z6q8S2AQtfp6nbI|q*mA=7BY9(PrX`B&p$(uf4i~MJ0YV{9 zact_6$}_?-k3xoI|F$<(z4V$`qbb4HJvA-p<9ju37p-~&(IS^C|J@m^Xf3PuZsbEI z)Kv`4*`_RUkr|;JD<`GCBptQT)Ig$ihHmdolg?*`>f1pRe5Tu@u9vXm?;&n5hQFjN zyAN~Up-S{f8z@sVbB60)-_dpyvhu;KJG6PE?8!@Jb9_4SndY}Vk#<{Y?j}}Gl4qPt zHFMZ%i7`W3XS2MD#d7Z$-Hj_Fd5*qM{%4;Cc4DdUbI+fdgIF)&2#9kQ2`d2d_~xOt z5Sw-Bxk`N3Z0}v2^dvtpD>dowkQBQ4wqcl4E|_^vstz9A&j&(3saK8&yEckxIlkai zl{mZpZg27?`=&Le{dOmPD+~X=Cz-fmi#4bEQ5d^x_Xge-EUS)&>m=n^NDL{E=dZZK z8g2jO*{@8d3?b}aEO1udK7DoGlu-Li4p#0V&Bs}C-rH*%K*mpMJ|#rxbSFW5?k< z%V`A*d*N?0cR=7fd??L4$0ix&9$-oP>*mwH=_95deA}51aA_~SFrL)MuHNTX*)1D0_qBxnvd*FwlP%Nx8 z-_Nyl27bJJ*jnx&pXuOHJ~Qs=pV6nIJ(7DMxoun6acLax6bCS>91+MPbIj96ERHgC0eV{7KDz8j%g{?9Gh^-S~gid4jsCkdIAC1+8Z1-O_~)l{(pLoZvCHjS1?+R%udg9k1g}7iiezjKd+P`UhgK@!p~*| zG;(|y>CPJ2)%a0w|2Wn&H~SXkGgu?Q70{7P-&?6rJw{x*bMY*D(%wLvb?_!SC*Q=2 zPUvnIFYobm6|yQ#1N034TGPy3tzs!ps)TRg?S4p%rN~8J!6Gj9opSm-BD$1I{2CG= z#T!X;kX;jXmQGK+U<-2jJN?+gyJkTSw6%)XN0{M#^Kf~z6avOb)o|pz>yr3l+WS&_ z6WV?AKU(Me${p!7Z)lY1n%x1f8)`axi54a3YnW>(a7v7$7Q zlcPa;qrng_El@S+NAm$S} zbpX_SnL<%@lh7pndt~{A0=!z4g<$pC{0Ct6yAIL$KTUKo7wVh)F*n4p)*x4J1b!Ps zX#g14lYl7Y+~BayUrZWF$hS0cgxq5+v6;;Sr6<9soy)Ls&81H_-S;n+@((2oVA~zrEa9hm^e}UNnpQ%{?pFN!bTPx+F)gjb7#MXg66n7bW(BnX^xg8G4Be=>mB3h{ zlTfpZ9s;J|2dVQ!=N(>q2pfVuL83j_sM||Kz+2a#$PL`}0kj=U$luADe%_D3hsp_> z+X$3cvy_nq6gxUOo-P!zgB%(`RpP(`&}Lbxz6nR9}Z>11e|=g8mEi5gx1a`0nDpaw_a97GCA6BwIL}?bXAOB zNTrom-Bgv0CaZ@ zc7W|BTf_LN)(|%uIw18^1x^J3^x(ZL(BbvV!FiH!LjvVJG=o{3MAGDgz!|L+DDoG( zf(3%MbQ;pywvg($BE0d!U;j;xnL=`(HS#1r$M$^kjaU90%8K9m_d=$rAwm<*HHG}} z&q!=QszCh0b5t_bqB3?M*8WtuM@kA#`;Y){A$q%RPD@Q9?}joRcu9>r{`G~JRl`m0 zQeroYm0Ddj-2JiVv5;1N$HM8kZoVA;>$cpa^ch&rv2gKlJY|>)wGKz0aGJ9&K}q9a zbR90O#~6!129>0ZysU{K$2COIo1u}TCn?W6h`pPPW!Hoz zHhskon5H~l?I=#VWv!NLD7%CweH>>C3+a79axOHXbsdgzkz zpP?)t*pFJ2D6Y8zCBmf*Hst0tFb|O%>1202&A>jLNcI!ORYD8hKS*brYwiR8+4LgM zFs8u7n7@rqm{q0CQcpnEOyX1vto6dIxO0k zH_7}hM&MLP@uPs%dXFVfTV8V5eYCYn%{SgPV&-)#bEieQFn=&GrEMN5~M?bE^dl zPC35C)5*$wJrP3<<<{#SwZr?uy+)LYw+AeJR#fA+iAOKP2h_2}ntu`DrAeZlRt zRr|HY-RX2imDa&DXAwHhq9hjQdhTm2Z_a!~H~t8FtYMBSq1$i_IWjGrf-zb0O+w&p zTl;dcP8eB_cgZ?c_nba_a4-57g`eaEbyY3sdWmhytqmvRNm$Pji`BGk zGtQJ%bl*QDBQY$&@O-wCkD75-v45zu#x20}6x(HcN(a}#qMRt0<=(KuJ@JS0Z~b3y z&-%>6u|Q5m>-Hg{7QD9YO)PKuA?*%-++~-MkJt`D-tM2nDQ~0ijYZnPn^_hP}Pdf>oZ36Zu{UE z*h2?B34qqt_76??TA2kvUAKt(ZC&g3HX{NzBe*RiUV_ujwaRzj+wS9xlmO|4%O2hO zamR$_*wVW;Y6yy=o7Q(3$+HQ^oOHG7veESg(SlyXbEw-eQeCj=B|8RsJh=1jvLNG; zLFVI6@=#V1eKYUaFy>@E_a@v$>Pwc?2zUMn$6%uSy{GG>kxWfoU^&U>s{zA#wukEn zFzD3SH4+pnJRLa3YT($OdJDfDJyr8yePMy$48VTcVXBEUZnru7w7naS*E%SzBL^;+ z6d`}QTvQB-P(IP_!_Do1fBTOh2(_>b5S7EPW$c~^Up9>6mR)`Z1+FbI#D`g0?}zJ} zFb_kXz2vHEXhbLo^8WVjiH|ePGkGOl8oySxytXuu9>SGB&S=*3qZSM)D;sBw+uuw_#l4gX5E%z`PV{#z_W8UO{IG~C2O}d1O8)*hH~fBc+c4~Un=U%E z>3X~ESu)70y1mtZ`fJxH+5B|I^Eb9lp=veE>m7@qZ&io$mCE)VuPfXks6MNJeusgr zR=*FhK`@z{j9Xb1`PLO`R}IfE0xWe8wgat!&%@@D1XQ=~W;={n_WhDzqI0(ddhiPR zEZ9Fjo<26XIyBqn+vZj;aZYOx<8fsjJ#n(zpX%PoRvqnFuC@nnbwf@soauAFEwyfn zM{icQQT=moTgE+}aVpg*wPd8J9DQ|LgRC!W0gtnr>2IOz1V3AzYt`S@<8F^kV?o|P zY1Y3H{2br3CRLbTdU?~RdM2)Kg8Ib%t$4L$q4#k2udw$|Z`>$trev3#VPvYoIlOUPfkH|fnebl>gv>#E-yy=ID5v04}7 z<+}K%uAi+XArzNS-&o#_eM89cJ%xHH{=P<>Zr!|L(te?53zA&@2fGLjzb^d_{7C!PM8fgovZx6AK| zQuvxoQmkCTjL|krZ%PugvWxv`>gT39;6bH=XdVL*!jORbL33WK?QZf=ELp@gnN{l< zj-PzVkxTA}6(*OXhrP&K>GKQZovfYe?dgg*8S7GmKvZW$at!LX@9bTm5ji6jo2Pdq zZ3o8$MU?6}&PeD9r<+ZLn2lpr%U#1bpw~O|4&6j(!RF9n3>uC&X#gaCf}7;z(HU;5 zqo={uQoH$Ynv^A5jQEq+(=eAm(e0)!zwS}D#naoxm=L~_7~r`&mEf+4!#@543+inZ z&sZK}Iu~~u==m5uqmut!7JG6L9t1`%2R&Z=VZP8jZ?F^-yfQYjh^J&uu(@5TzI>{ z^d@8jRHQ0^)!jXflI$}orWHw~dLF*B|9|myPQjT)0k)2vKelb#wr$(CZQC|F=&+M? zY^!7aaniAQyJn_pW^UEJkNZ5HhkZ_cwbr*bL#&|8A4ef$kJyIJH-nFLrK}w0x#Cbb z61!%Kk$U9PXKARngZVkQmL(cyC$aE&hr=c^|2DnRe3-};m2w@78`*>&OAo|@pVC;C zZ~_JW%(99|+kkogr`lD%pFCznPIEXeDT*!#J)g4GQR-zK=;u4{Zd<$qW$G?UN0$up z%V<)>7lV0lnA|N~^%n}%`_tXkvJ`|~&k`5?3FS=symI3LD@@MxSQYiaL)x*Jkiiu8 zB#vj<+BeiczO)Bs4qc_hUp$U8PvH*-;7;Oj&BO&UbXG>$JIjQEe&C)S!Lkzv28= zOMNPK~o7pY+GXC|f-g z3C#q?=RRQy76PaB$8@PY=*T@wZ)u=C^T?_CCbo5HnC$8>aLH=m-%D`}S~x$imHxfc zAjK0Je)~4hcKa+KMbD%D zBwO(^+|J@wuSu`iN}sSHb`7Lb1h5AgQHmYPG&p$+oF9jc4rN24NYl|^tv&`5NJ^l^ zIDl8W$NS-S+N#KOFdeuyO3wRX2K|Rsvrp%TI2XWAGccR3ka72c)zQ?m;pwAqA*46R z8GL*-|IKqyASf+zYG?f4{s|lZVu!9+gR-)2l;PYzyNnhTKvc_R=n_drd~Q?gf`<`s zVANe5+t-$BeMRRtRBSi8VQV0w^QZrU!N%n=vW#xLQnT}A{lfBKwB`K^_Gss0Rl)lt zt}TJ+$FSO?p$ab4eN-ar`&|cdQTg&OYHhT)%GJ&Og#xE~e|zV(mqPEh$u1;+o*VVG zgFTcVqvKBR)*1WC%#ACwT335w=51kGeB7@3mp`fyaNO1h_Uj#LxEvpU?p>+d5$M9d zVYb+%VtJ_`11fK3hY%WEIRfB+O>G>=)?v)VLx>IZl)4LtJOd6j?pk)F?LHkQYn-?K z>BHBO!t^t?l=cvB*RP><$`i${^?zr1On*}PLGpZLr+43&a+n#Jmz5_P{wTQJ_$=sn z^Rca}ATq!t2dMqkL>s#n{>l^yaW}z2g1YE@zYwA+SS&+x9L8J6|4Wf+M~31jji=>S z4#3$xu(@3DE#jxPTj0ZiQi(8s=BW5RbeyHn!y4HB;O}JZ_;t8J3&bh z9DQW;UYg&~(d=5v4YG4+8FAs7(7Z9+^=B2!^mUT^n|QC4UYfPtOo3+Lp({~?6_7gX zOrXQ#x&nx~GZv@I`5``dm(#o3IYPSQ?Ky6Hjmgn_#9Vz#c?{cmrhdsSnp|t} zpZzO(Ki*hiegc8+0c+(_PFun!jaQr#0ZpL$w=3GX;7JVcN+81A&P_wsL?-QHpTb3+iN+Rq`c<6QpmGSQI8OuWtNB{6#2MmV@q~Cly;|Q$njCt-p{Et;~WAPD2SM+cD42+AJKu`-WQuw!x{F z+&g6^zg~`+n|BRgnlpWaUD1wZxDIlw9zP0d0_xVfw&lBA7o3iKr_%M` zzaxE3-~~+ctzn6BzmbUFf{RX<8hREAO1d^dvHTAp!MW+^+k9^3lgp9T{!Gz z&yU6SP+QlBb&dS)Er}ptrzQ{%d=BZVuiiuKT;*G{{dYe%@2K=d2_F0Y9m70it2^os z%M4>**&2;k!H+tw>+PX1DR8ONWbX@5^rq7bRBS(Jq4t~f8|w6s-cSJcbQP~HcbM2d zzHz=#+Ly2icL|?OpUz7;?UpiKu@x5mzG=V)5ccuJR>^+o@7 z22b+qxq|9Oc~QO2_qQv(-qLtDW49K#6}(#N0$35qr5ie$A@LOws&{7Iz0uD_+(=5V zA+Cyq&q2K2pt3)lM!l4(@jJ%d;rJF@dOz-O+G1T2ZFjgwMpmqLu8xpw{tz_(vDd(m z7^OIrHESbu_cMtsb{z0)Ww>q~tB>`qlo!HScI23NR<@ z9_Zc9$Tid(!Qd#HJ4Nu0;xg{Em1y=I_@Ouvf@x08A9C57u<0TpO=l>tKN53tc@{I% zH4!0C`Qt;PUdN74Zzn;^+%r9>`=9=soW7jV>k*YN{+GDwZj8AAsWlBAMoEy%uO-5W zld=r7U+t8J4u^XvNN8gt+g-QiNuIt&6Nj9-f%6?3Nom}oW#XVIzXG7w$SHmi>}3@G zVU#9?x?Q`W9#_3_APsVJ30$txq{41!K6g(kc$oNV(G!Peaw*5)@(}RrUu+@@!MbXH zpfAgCa<9BkjL4#GE!4Y#Dc9@GP)X&xYV#rT=jZT#s}l6_^P8gmaxFZr^7j_wtlQEv%;= zjHtmZk;UZ!LskDhhj4OrTOgVdY?+&4}n)|&Urszo87t#lvj;TSgeu=zD}_x1=j$nG0p zbOlZp5%@BMsD?Jj|6C0?8r;3}^EQpBffJ5-TP2NWBu!Fr5pJqeW^X;E*sm?J?cc1X zpdRim-@_bQ0IE+uMFa|k&+RWT#HfA~3G$*!HhzQ-jhl7&0*P~-oXj7w`1dS^>Y<60 zopF7hz!Pz`dKMYia(YJR)hIXj{`N3eOHs%z8~u2OuFvW~ZoLZ&ydO3^Y@e&1=ITmY zANTjtjq8cKZ_v#$Y&g=nmP9CTN|GO8$`G zi^uS=cBePGI?au^l#nZGTG`O`!KHmK0*}S}j>vp*?o^Ev z-1R)qAB2e=^UK@HDm1k4IUNh90Cc9u%J`_P6=+1C?0!@p>HDoOkpd7Gc#FMK|^09Z-cq zpfU-cYIw)>tHo&5<2th;FN22<~GrDVOTyuxuX1Emhb!_U-jnA&`yLN5=`=%h_`-v1~oS?}=p{IRyCw+Z+u*8W69 z6SO6^O~=Gohqb)RPiNVC8~RUcJ1Pmm#hS+B18)*YH`yrd^D>7+ z$Y{XBGgUQ_lpOD>)R9JU@!^)t6$QTU^^^qr8d6%`Y?U=@Q0JB zc~nr%oa)nY>QR^8vJflBB&)9__h6`S$mllUk>v1D@nP+4r$gRP`|i$mrI2cBC~(=8WkWFY00g8V>C z^^c0^rZm_tbDB(zaKnb%bAnr|gGo&mn>!+dg;?;zWYhpR(uLt^U?d`g_*~5VzePe_ zDT#J33k%vPk@UkRz#aLs#IY5ciDsRKV6c5;E2$I4FHH!4#A0M1;5#Rpx3|E%9R;4N z3esHHkUL)5hsj=iBqrU6e`U?hk{b6n9jQM$O5d;&6H}1m4=h}Dv$d=jT$CSodmXjd z;f}9M=L(niM+S#oyj5XolYNBFdrFZ+aTy1ri{V_3dp~L6i7(vnoG_EBeS5N3`P{hO z$NrqurTSoq@Ks_1N5lfXMQ(DUyXy_FV?B$Q2hQHrhjEQ)Jvq#_#`2}vRi0cXB3s*I z4V1_>4Dv61UzZXtFUmc}`xg1e`v9W~qdY+U-go3{{b9a@m$NuLTn3;#AqFT_pl|-R zs4MU7iEmK1&yYVOPPm+7Xosy_asl2|LzXFYZr0OZ)T97!I2;ecv}`895}HVVuA5v- ze#0GFIn7(E5wC0iTTXQQQsUYBVb7}tco)1LEAIFU+&>+rKS`V-9T(y<1d9?N6 zl4p7v1}X)aw`WwqYTDbcv_69wf*%@m=KelNJ&jI&VAt>sUeho2t5z#@Hy!5zJyY|Y zUcykB5X5~K;#^~{RS3b zR0HY8W0mfH;!{e<=vs`m2#fC>;Q4i0$#z-z=9qllSxoY@UU?fAgTh#)s1 z(jL>Y?1{j82sGZ6r%U1sA4TlEO?f0;f9L4FnG-TDJD=q9juoFixYBz9ZhNhQdhPaS z&6PSay6=nbcGrJ^AoYDPt_!yyZG2+({5Ar;W(Ej;i>~f0E81Co5aixT@;lSgL@1S^ zZ9X`-x@G6Lr9Eq<>B_jQmz1Jd71lg9fxT75{Tf)IA+&;P%L+HkdSU4}ia zg_!qRp)c)T^i`pa%#~QyDGf~{qJ{6tz*t+h-dKj%*vyfWs8(r%VQfRJeM5T;uRZ?P zUBXpos*aT_JLlAhD6bWgaGB76+`P$m*%~3?{CvoZ=O`)-unz? zLZfb29o^FSmxFU}t>$6vIM?YscNi|vuCT)WH%L};8WS}2TMWR#xS>iB%P^kwhcEV% zi&j(FVyI@+Y56L;-TvCpEu;m`_1d<`-y760KHGjn@rd!5Z= zqOKZr8k{&$R=p9;%2cDO_04a}^e;}LWy5`KV?3=9<15YeTq&FU!}*3>S=6;(ajNa9 za0V_B#o`LlA+&eql-*v3xC+I-@-G?ceha&xk}k#DzaGrF+8xxs#;UGdmjBQo+B03; zRNqaD8{%!k%l)Y_l^%4dHJtM)VVRKry(^pKfyaM}&DKo|q~B}Mc(hb}5}f2KsR23! zy6tOg5Jcnh^uk%_U{1#R@kUguca1q>5Y^%GsITPI#gp}gftOLU zDRl4&5lA2vK&NP-rFtlJ%?R9OiG7GS1S=tu$JJvu)a*3X7sb&4vr*})tsB&^J7V8o zJNS6bSbBgdo5V@I@St(!re;~=VFfhKG*n&Zm8R`8Ti@%o(_j7|{H^~viu}Z&VQG+2 z5u-Q9X8ihs6B@ORG3<{bJ8OK>`PwSUMOAIT%+oZ{Inz2=|8NVFMknn6XO~y-{+&&% zC-JWKpZx_{j5nG8UG;!cXpw`X`|^X7=1o$lqJxyMGHc0@ zCP@gKFeKp#ps1Ci;~;t$G=o0{K#wk()A=#)A*1bl$}*?j-{ z8~_0+jzVCshwcX@MgW-x5oQBrh7|q*ZOjbGtP7nD5?tv_910;m0ymvE1v+qRAF3X*|h87+|SQ# zO*9=Ww#9-WeYH}J@JEK`5hZ@v2U$75G7%0T;108#Ou&;>iQQxEg=73s(B6Az}R(*WiQFCT;J z#XdtM{ohDsyL0nI)5}Dfr$&DlzTIWNTRlFRK%lVppvn*mSRx08`(_bq1{5L&8VJKS z)u4`3#%Gb&1hC(i`IkB&%6-9y50w#LNQg}YYk|G_o%D7O!_2|K^c zzEg~8=9^+3Yo1%$DnElK56V!fNmi+*R@shM`6LX187ECaa&rpUKE3ASpt+>kYPAYM{(Z(;{}2g*w|8%=EYzs^B|tC(YJ0vwSE}34jQU2gyw|D zF!C^`B^JvyA0NrP`DFT7g!y><@L7+3&4Ik{26v07iAc3CN$jwuZ{z-BdV3W;;s=lU z&C_HJq1$fEu$i4npp$8Un2F`bAe7zS(_`|=GGB{jw<6gti`$GJ-GNKn*1c%@I1#A>-RnHH^sGE5^Fy*-`JXJ$+>9j z*)?@*{&W0plNSP+R|K#>R&cIJ${rdyD{Q^1@PxzNY%eH6F zwqwn98q}|E>nL;sM#Z<|Y`bba}`Ja95U z*)ca@6axU!p<>{Mp!pjn;%!@pffi-edP73WuN8xIJtQ@|SH^YQOg!eDPgZn9jm|?! zOOW=CuV#h6#6_SK0;9t%${CkTMtVpK`x+2Fh$DJSxz8T0O-q{IhN`F*%}S^uN}`^Q zQl}fkQ8vsLH{2~&YMQAbS!Q zkeH=CjAWUwhgFb&jKx+QqGym(9BYjG-zb#*57u2y_rAa9pr#L z!Bub}uDwHta5*EpZoic(?P_w zZHlygjB*u+{%leBZkyxRx%hb^_$BOIPLVU7|B=Ce%7==D(R(N7XI+rCoCq%<|{p|B40DMIneB2eA14o7( z_X1<+3K`2Mk>;}IRH@1@-;`XO^JEw9#$`;2-{hC?H&=sZT^ukNB`s^6IHql>&9JX< zZCg!s=oo)8o)iqd!N;A40nxH!yB=f7}Ah)*)8=B?H#wbiiP_-@>H6^x7fko zv(6~!U>NAY_@(=UE6z~l)A5-0;aS$5Ia_zmz1Xl!na7`&G;dNvW$3*oMfaQ!eeRU( zM>d%)e(I=O@$EXh2`7V!gxpnCg{{p1{LgqYUCLC(yVAHTVdGOYN8xXe=u zDfctX(&d58tV;%U~)60YdX{hC6qkFXL6vXU{2NMnaoT$=6;in@-wCUK!W- z6WO~Q4ZBu)fkwffQurTZlPW;tw_%in(bQe@-*XCr1&aqltJgt#M?qE--xp-xH0J&B zlSWg3&MX4vD!7++p}qI!V4_U0z%95JCT`~e66Y9#&Os!71|giwHL(VxS{?ox_*)X(d6vnv| z*_eOj>s%^lSeF2UKckwOyfeXLL$I2N@u5ukv#Tw6kec+bTedoM3a9$YEs6krOgM9a z$0L<+YwkFkRRw?f`aOxPpy^w~64w#Xqa==;A@Y@RsFY`5iT1>Ij>N^dS;q3Y)nSrw zNs+_J$3;`sNhVBvCp(4g*vTDu$bsDCXc)Amk+F~^s5;g=dTWHb%!In`TtB_}9@xX_ zBwXaO#HJF(rg-#uqV!0Bnr&`$n_V2hEjIj*bq7ZQa`_NAHPxZz&?ZS8Z0HezKZH+L z-fMnSCf_^&JIRO+)uBzu{eqU8tEU?|;64!`++YVF6okJchWJ;)<*gb8JT#g_WVng< z;GDGsk0{WGxYUmS0GIZo^=~v2aSGXsbS1HUJQ@#4V!pbRV!PBRf;c9S%xO2_!okFLoA`2E;=_uV%sU{P0{%IbGw?TqwLGio)SXx4^@sNUGsw6ROVFZ>59V? zhsVzriZ_y-yM^sjjOf3F>&IDtPsft85t}vmIFCPfP8%#X9Ym%Z=_NOj@70m-h1zCX zf3eJUn0*Bg6Dm6(@hnK?uVEdmNtxGWy_{e&2Xb9^=Ddo#+}#*@aM zXSoW;xAKk-g8{nFb7xa3Ix)}g8Rjo2=1;(*>xXfA#7jjEm$@CxaNK4RoYteHuZZ`| z$ohXs_6Vd$8HfO_`FoP7CJ#_J_)kO#Z9`Am2k+NhUM_>BMDJG{&orZhATV zcSQvK(}|puh&qS7cn{g;!7vs2QQ)-E*5(2DT4XRr`%*B?Da!AkXPwm;BGd4oITqKQ z(Q$eM+GOFC+$D5?A+O={=J0P;mO%i1C6d>Sx^p&#d@_7zT7=99^?Bt>}c{) zzF%UU>Y2W11qXE=x8O^T6E#G)`F&d?JCWVnKKrDHU5WtTKuC(B-CO)h6^9Ph-yxMp zWQ*7U#}0yCOKTgV*2TlYpHN+H5Q`R=3b{+=0e(y)HAQdR;u{$`KX*9=Mzt2L^=t^G zZ0=9p!J{53lHG#>-)i{-^wat%<-dHG4T?Sd-I)ruj$fw~-^{E>Bh5z1bVu8n%M8h$ zy_3^QH2=|`&XKhAx`%&!ia#149579;FYn5-`eZrB-k8Kg(-qhQ<*_!)+Gbh(Y zERh^x0xV>Kd$$s*^1-t+5}Cm%eMY%OoYFy0n(l&}w_k*06TL9c`+`U;5qC9_ zy!4aotZtlw6XAIl70NxxRO$V$sI2UCSw$9_DMtknKToGyY{fC_lvi7IR^)VW^mO*2 zb?}R&6VcaE#ksr3^Juz=5N9mR#U6_8#Vq$pXn|4?k-O}Hd<@GKtwZ5opLaYp>QDMzZ9EKN%e!?A>bkxpg8y@lwzLg};3)Qn?{IV8=B&$|k2suG+fQqLYcoq18T_9tD*b<3@+)R_76_RKRQ(>1t=?20PVd18ZLztRj`Q zd~w)Sc9;IZ?_s@@PW+>p^jhD{P}pyWPt51U>b@sa2g~z*hiK9x>aYX(Zd3H0kNnl1 zqNdg7`GRNpl9!Ou5eWxw)$61czMUSi zt;0ZXe-hgc&s2o2IoWB1)~RMG;iTjjsr;~{63qG2nh@VxNtIno#r=0HwVBjQ0eS68 z{mo)RDN$r>;1)ye_t~KXTBLylM#o+plT2wQ?)@*ZI4$xKx0VA+50`09s(W%(Km5SP z-k1G^gOFb%wMPd=O0j=tWS3u3ld35;!>b8=*Bm7#&_svF#`cvcMkYg0SG*^N)>DzP z?u(ElTsh?k3(_yIBl&g^1&Q+o$@2x_1U^Mw-z-(*X_f=7x&5j8&AGOLS8K-IJe`Q{bzUVco?8%s6S(W^NWF zU9662^!`8SO;s`5D9x@XOik{*OY`S4!YV8V^?gj!_s!*bYv>xNPc$dp=;-oj>!Rpx1&TMiCR+`Pd9kIP zeyghJtP9tx9%)wpIy@h)9i6Oo6CdVdcD7eqdF`r&_tUt}6U&>a)9bC1sDrp^>K0*0K8V`+>7lKP&Oy#y zfEdH`w1AVCLu-nsw$rMfQ)2b~fJZM?EZeScoxDuY7OM zw!6!)##W>#55k#(PmAkIGwp4t=EgYn4)TD_#iqZ*ygHWKhHBeO``uQ|WxL1mMb|4d z&lgWK7gQ{ddiUK*eh*2mk4b13O0*YR(%nD0&%bl)g9Nm`k+iP!EYpIb>~@_IK`>(p z;=%AMt7FuHul|taFdJtcsMVPE$~3Q3WD{y)pAI4rVb9It;S_}7X%%oRI50PalH|K* z${<#kLunfh#sA!|EFEB-8$LhAxp+rxSHistfBv_ZjCL8U9fz$JR0pR}K6_+`S}Te=X9K3oPNS4eW0w0f@8N+eSM7&&4%g>(Q!904LMi!o4oeV@(WRg8 zoM0A3Unu=~0rwL~u(GlH|OBo+S}Em6)=@(~+ZhHhnnNkQMrNYc5oLOAXTfw-_0X=$im@#Z&0bEv^K&kqv?=woG zWHt-e*D!oax@PfD*6;hK+szgnqLu>1`U4!e(Z2Cx7R{5SUX{6Muc|Lm#$x7%(@BUo zmGQ^!7IdrEU?2Pg{5iD@+w`j6ufHd;4qIDHm&@53>4~!Z4)M^dSlS*{Z}Z^lnI@aij)npF=wcHdy>QOiI_F6L>Sj^J>rF1ejd z(M_AuT)eRFaG)W;;bZ(J{_)19lRJSP?ImyP+9G$o z%guFu?2mP^Px1)cC9ata^brp*oUPP%wVLuq+{GR|IuKNK z7QRLgn-Ib6fdS!T8d$d1Pxi-rQsFuO(y+SC*Xa(wzaEUQJxiDpI zFNtMV2+U;92E7HP$$VmW;fM(ZE??6+O@>e7{-&7qxlDM={h*qy=XK*B^Ie@P`5@dC z@uzD3y`1z}%q7&-F56zr#x^ct7ps!N_plULnGE?KSap#LBbfVtU{!30mVf$O?0=S? z|FpvV_vwEzR?ss<%)9?G>cR$rfWcr37YB!cLL-waHwBA;Ln9H3Co_kLLc(J)o6k3e zh(RL}35O%Igo?wWQ7M-zH-}2VV-XqlN0R^{B5)9_mzjeHMiKFO+%L8J%c1~8LctIs zdt&3rq!RJ?BB|mNsCe?Z*v@z4Vo1~~LjOyLqGU_8XnIccT+X+^V+2DQs4t1-zbDdlO|=NJWC?A0MFMl*z;} zfQRV;RWsxgQQkFd-f$QtQVAYR7GCp;lrpJgQjTQy7*z^6Dp!3MXIQmLy4>92b@$+< zavptN7TUctv|OlS@&{qEeI*3S5>Mh&&=VvI6*S3|QnTvx8vMxlo*I{PFj^&T+zQ$w zDU5vD49#Xy;o6KMp#pw$Sqv)lT8c(PkIj;wV=``BM6HAb+DDljE3-Vcr zR&%=hG@->1pwdw$u0q4^d^rtI8 zp%p-hp-<)onv)Zya6N)5N$cy<&ox;nfmh+d6cf;n6cg3U0tR2F?wLdg z8QH`k?m=pH!GjyYVh2-4Q;Jn;atBaIoQb)a0FDHgl*yj%_2}>nOumfM}sTGp^WNH@$obsH-ot01@__h z=0l1(iX(iT+Fm zgTi_47M5wKBH1A8o#oTvAuuQtZTzE+y|ZCZz#Ou9NyL5*B3{>rzq510I+XUauQZHA z2m+dQ0^CM0SxI&{1^A{wOg|NVE!&)Jxi7F@2MI5^(fAFGHVs^d^M;$&V=A^-0G*J% zf1yl;Q0Lp;95uwkxHB|_x@1DVEDD+cpPvT^b3QL>JyVOq9#IvQz|%>+Mr%H#EG6j; zbF5ygoxI!6-XBf2QoA=)mGD0aAQ3sg#;w zvHj2NZc)soaY=C~@YY>GCe$2c7riy>%4Aa6sRhXT!&9p)IYp(LOv;ub72E9BZXQOF zK=C;3sV`Y3(hjK3T@6!^^Ysyn_^%hD8+Oa)eeK z%?rz}E^EJ7O+ksk`Dpf`Je}-@fYz&{jE4n>a?o>nuO*|N24^~xH{`fWMp&Q<@`uN> z%(qC9W(9GEZ=GRQE7j5)viFsT!5=dQ%c1gzVAYeR)8?5@{#3P}PL`hEF>Yl$ot@60 zY|K~`yT`2qz|WA}KAK3*2$dnsm$JpE*B~Gd%*PCiB*R3h_0ubxPaZ3%o)PN14c0;@ z%fM(WE4L+=5u$KIU$qPjY0c7vJelKQmdeGun|}?gD>vc%q(ZV)$I*ZYops^&yxV(~ z1}`pzFQP_a285CcV)MU#tizmU_=~9AB8)f})3|72!v4i^sU}n~x~mtFIMSiOB2`x5 zCO_EaB<96*C0?O{XyrlM`3XdAS%C%xmlHuH7tRP*E=5IR9cj$Lf%A@|A2kS)mVc)L}CSF#fh!pHGeiN@zCX2%ZbJq+F zhs1HsIj51neFOE!Q~ZCDX0lIL-{QsnhL>n*zyi9t>tVw{doYXBZrf#P}Si_ zKAVpZCE;$zH@-cL%3x5_5-pzqkyTGbZkH7xE1LliCA4;?!F6p3gF+%Lc0uL{8DfGp&{!PU-nMdlAXg-d1MYczq`r(OdX*YAJ~g@mMM znFIk`@v^L`p zlp39?ZN?ICSwqO>xaj6*EKN;lKULAG`JJuD^yi@yVSH+>si83GYg`3>6~is(3TVNQ zN;vm}mTO0e@?^U~rItBIj=$WR!_VbQ9yQ_Drkrb*Y4Y$Y%xkcWvFT{L3lj^=Wm3Yz zH0E1FMv;Za;?oeYrbB~asPp5CkV4g>*C%&VD;T@eq18Iqi^HnOo)wX(C5T3dfsZ8> zs*|uS-S z1JyGP`bWs?uzzd-m|)n%2+qbA@+5eqPw4Vy4GD?n7(aMaE$WOZVN02}YCWLj7R12p zwTl;nQE}l~@X^C7Lo%YE9Bh%tN2EeY_!D8;;i9P3q+!Nl6~;khk*Uim7-ZW`++nU?@?=r`ODF6{@)k$E|B9V5e(fx)uNNB3rP0s5#+vV(yAX zP~~{(Onhl@^>BOyIMcIzV*LqzJL3Tr?J#*5`ffNL_(w{GMrD52X%!DkQ3$v;?l+%M z$<+n~U2Ppcv`I}w6b!Lrk>DvgIusY0)^5?EYtxL}uFOndDn zas!eV-<5&1Qn!IdpSIEXB24z0SbvHpadbrk!D@Hqy)k7LnxI8(V#%ryWM{|}^@F{m zf+DUCWsOP5r*(9&p1VV9^XWgrmO7Em6F_04pXL6^2_$3#u?1F;ItBYD_G#&|cKGac zr!WMV^q51m$Z`(|9kykZ?$p>Nn+3F5aHb+{H!)QjbM@>6KzLyY1S-nyP{^Z!7_>@& z&q{MNNj?nDaE4kxG!}GHHLHsE2%KsS^pW|kuNopMmX3U`0&7HsFrtzEw8LPmB@%O$ z5!a;sXl*)=xfy6Xohc(&4!sR~G%*MSOiE}u=Z#KI<#L^N11(1e8SN?_EJ=o)tbAjG7y0dU#q)~L>soWL>VPG1WpBA2S>^o217!PW-bYKh5F&t z{iqPYgaT_R$}TaVE|lnMQyWoJEhwcxY$<|Lt=efTiJ4mCOo84cW(~K29UY!tjen#p zAm%y>MoyyuQ(Za?vB3rw$jT923^_I!WJ7qkut-aQFXYfoj(LXoADCke1Eb|1=4k)F zFbBqx*F)kz%yIK9mCubRdxAbeNzUhI9?{}OGck*qaoLcpBRNDrNezpGvFjsJk}ef;f?1#U6(Ux;~}G`)_vil(w7c!8jfjhrk*=knc zO&Q|N|Bb_>nJPR0kuhFEwX7A0<}}F3GPo^0gYn9jl9KPG>lhiehH;n8LVejU#v8xo zJk6!1AL|b2N8TkM8!ztv!GRLN3AJ;fqd{(_iF$(|yu}&8(=V>n(TLbX;;Cm`mVv%ZOk~Sp8w_ci!|NIXt9U(n|rV%jglM?}f(>C}6R-$4Oh)7JViRy^00BS#3kYd=Gzz(JIX~1a-1?t#5^pAt)7suV2CJgmcVfz zmJ`?lUd!dRt}rSk1R50L&IO?5Kh(kf@j(Jkom?yu4u`{A79yWP0}deBNRwV5mDEG+ zvN;@|C*{|(=GS$FR4tcCrIarXuS%_e(Ppgi38zV`L`uaJUMsf*slrLhJ#=vy5viiH zqO|8-f)1;aWOL>2bgfvRQZCWY&H>*WiN`OMOc_*}RIkRAQw+!!fz!xAD!(J2zcT?t z0%I%$k*=`Cs6!Hjg4kcS#lX|DBK+{7s6woVNm_P~t(cI=RdzGCX=07TjMUY$ALtwb zQvv1B@{cbGu1mqA*WQ|E2?d!-kPLApS@1B%`e7LCJe|EiniXo4sp~I{0TYid(I48i zhbohTEEio3Q&wTJOu(a6K3+m@yB1Fc8tq`MGL2n>8TVk#8!3;3L-8w>MsJiJHO;^* zm&a~Fe7M1?Eq&__gdz8*&2sH_D%1>ICf{muer@JIv#Z@&i%U$o_+~pE3bFG)@2^&e z=8k6w&O9k90V>6kgaigoG`TxB=0dCLX+45J}<~>d4*a> zVnL;5t*Hk1(p4@ruFw{&k5?=vwD)cOc%GD!nt&h3Rn0`CQW6JIhH!?;B8?F#^V<_B z&?+{GKO>RoTLd9l&}bQPuSgQF;4gw zxl9-9%}89Z2t5Vai|hm%&y2qSjds&u84uxBf2VNuE`-uq;}&154OEj*USqNAo^e{P z6dSHIoA*r=xnB|T`CEml#2}W^9?SS6tO$o{lIXh6O|Up5N0sZ^V)!0d0Y02kO^ov- zIvAHDI_|+h%u+lYJlWy=0P+A8R}ni2^NMpMEdkNjVK(S!b`1-GV#P!XFuhWV=c_Yk zKUpyx$5!yjTRIdJTdin0KIBw+2|T)rRPs{zLSm=YWEM+{2X7&JtXqu`Nne_1FcYNcy+O|c}jxPq;qezc3o3=s#9 zYx!F_gj5(lIYOW``n>!=9Dtt2cVRA*F6uK^#Ji$IN|?5?v6IAO50#cJ!5MoJ{f4j! zx*x%U6tbbHl3$~ozx3V;q!Noq^r$nM3I#_Ehq#-?ZEk>;uPhJ;l>;`eTE$#lLOc9c zON0aIfj&2cR!TDAOkU>ngjgj}DySa6ABB9rP!a|gJ0%&ABFWzc2p7js30B1mVIPlbiOMgZ_JFh?GSri4`*l}ks6nnOf|(Lqs&#G{|C z!gE-0ddtQX$5j{wVamLr-wi>tp#~egnO8=I2?Y_7yMpY;gJIveW-s24iS$FmEpM?A z_wQwBf!$2|1fQU{3T0(WC;y}&A7;>2ma#q@P0o>Llkd)LhQ^TOLYcLnFSi6orTagO zy+fENVVA9$JZamuZQHhO+qP|+CvBayZQHi<=2N%2tN$AH@SDUeBKEt!wf0iHUDa@c z3e5at3xsn!I5|rsrw*=azBm(!$)l!xPEZgYO-P;1J{50luaJ)&TrR)nPb^=GO?qUW z-DE`~#i<&c&9t1T43Orh&%S9GUL23B*NWI>Tz{%r>CzghV;&weKw}T349*EEGRnX% z|LE+5fPhuxazAb33EC(V%m7bm{{9bCSDLGh56LOTTtsRn_2&;U9SPgS{Q&s5@= zpArNQKcVF;jan^AUXuP5QnL((Nn~#G@y2k<0bA8VbLj$~CM;O|?4R)=XtJiVBlqUO zF>*0%v-Pqh<6&S&R%f(#BhYzDnXIJzlw%>38L15i@OkzCVgf~Er|_ls$O06hQNC_l z;O*{sUTz}&mXrVCOdU|SZu41KMMAfK`u8iO$!U^Y7@qT4Mb9$ZCFt!Af zjtOM>MH&W=-|eR%YXe$l9;eeF7s&8*KU@W^d1L{pSS&W0^;+f~;At)-3MOll$O#}2 z8x!T^Xn{mbjok0s?5;l=PXXe3x%#FQfXTvUyD7YTw>Qww&~nP%X8&(BPYw=OIiG1D z28RWglD#@#LM)nroA>nfF#-t4$Vm40qcgV$7VZj-@s9itRv5w7IotB}BoGJA*7|GA z;B*F0i-|evJW77Pze(^ znxSMkrh*TR(tY-BR|%F4ju$`u?nDlR&9X1r0o-92njXRNkp4FV0>lE2ORukQJxQU} z!mM5Qkl!yP}C8eTm^FUnJ`cw zBxAXFJ6kM)1Q+H=>zM!)TA4rI6hi-lto zUmg@;KMcz6yZ9Xh0XjY8_c;zl2BNXpOpBjyL4C0l^i0xU3QR%+(MlYSrwr}|V6pPH z*vN|_Q2punQNC}Epp%JJtVNg1?+@X!AWBehkMRruDcC}3067`R1_>m}mW&z&vnS(# z+-=|54lXl*rTDp&=FGrEV!^td)ZVj1mUB>w0k!&yPREKM3h=A}0*T;KWx(CAW#(%UYt*skS(Junflpuwvd9){k=Ki z0GX7D?MSMf5d@Y?Zms?Z((pvp9}MOU-QG_uu>b~(pgS}xFTVg4%H5*>emJ%$ElbS} z>X|rzT7d1xfv7QFAGu3GUn(d$yIP(g8su2_)QKjpz^7ae)Sgge+=ojKoDZ@%SSi>n z-Bzj1;QS|uEG%?#Zx;N|NEu*ljn(=QIQ>36lM+lpV^OZ5P8{W3Ork|YoPf4L?lSNv z$uI?VpluwcL175V)4?g+X%YX1305m#kw{PYi})?xF`ZJ4BrEV9J6j|O$>jcV)l`nJ zKUzSqLb8Rg6cNm*6%p4ZW_0OS2BhY?jRz!32}X8B^KI)>o&rzQ2(Lb^Ly{baV?o#q zw{+*boh06Gn0SNd~0~gfSvDwM2wONGU9(&G1C2n4_aC#|4Q20T`hLDT0?#M~;9d zg(}P49LpqM?{#6ZSoU@xSqS3}DP=!vvP2^wL1T7#Cz@KV6OpH#)BxvSNwO;nH1{zQ z%gK@=uzci}Z&Ok$7FdFp34avBA`p{CCw>>ERDeabc6U}zVrS(WvYb%Pib<^W;XZGb#!W8nR zl0$VFaa$$lo%V&Z0&=k<2j_DK<>Xfx=%TOOJ=szsj95;AmaZmBE_ zGtC46viHXMZ4^$CpQ30kb!lKurkwlHv%Im`ZcV)sBpi*wd3(C&dl%Y^2o^srFQp0h zrrf`BXA|6g2i#H&cnf(|r+px`#XU}*=lHM>Om-n3O}WJqp53^+JN9wf!vMC21jlz| zE4RPZcl6w7C(ET#ci29oaS9@!m-_oX7y#om2 zQ!~512XXE>PE#N9V-gP!&MCaZxUq_+G+DhdSr=%YsV#F{Z`pS3#id?#J(KR-R;vPggf9D0>>{YNuh^$h8G7&VPOT;Ia$* z*H_-L(a^~jf_Em_>L{}1m=!){JHD9L5zKIreBIdd)M*c~y`Eff27Inh=~n_eSi15! zW4T3Vvpl;j>}=XbZrO%DhTk&#()MuXr4(e^HVK7v{>LEYP^Ve}Sa4hr|_T6CSSCRYD_RMpdlIqA!YSwcS`}s-d^1su=Ba z={ZL(giziDV>v`*N-J?)&H+BLVvaYxNa5)`s$*osd*$8EKT;8D6!t9~usQL;!U;;W z|0T_wY0Op3ls+G_`yNz^nw*qSj2lk{Z#SYp0ru`- zt&|+8E;AijWUzECi?wR3*>t#!uWRbrBTHAuXt}zGhA3WGjr5$hpmH=N6M@$lE3lk3 zr1L&CV{sb*7({D!df3libGgeX+ryeqqNdYz>sNkUfGOen1fa+xnxa)grxN%IY1L;D z{Ln`1S`1}4LGp5v%D0NDexq}g7}o4RNi5KrK5sAorx9M4u^B%S`2kO=wDEDRBV?r; z!h(%6`u<5!H#i-ma?JXCg$g7(xPL*g3&0K1^+PQT65h8&UJV#OEFgd)1ExHrGv{88 z3}y6E*hNGXlW?c=pz+6+dwGL3PU0qiFQ~u11nz?p9YgU3S`OwX-g~gLOjbP$wIb|8gX97cjHT386S+T*H4^+2c2|a@-ynv!&L&z7 z!L}hJz_nTU8{k@%(X$;Cp|3aDSlvo7@LMllv)@~Nr7}-{mgJxmDivM7Kn*5@X5=`z zPDR-BB;a8~!U(bNmLqSOyNe&V?wmGm_-!mwX^(K*maaaT>^CZV~ewoD8M8c%8h>N zD?*1FB6PpON{PUloAy)mu~=p(k76A7OfY&p7obL8)~66iAlE&OD%zgSLS2}XPl9=@WBm{SO3P1{!v)kDa=cx zWiCxR3mrK8WszC14ViX2PhzZ*o}#5w%Hta0c19wc+46vy0ZzD}BZS7PuO(6RJeR*! z-xpg)PNpZ!sAN5D<84@*$L{_mr8dp72oZpjwVmYtpW)D&ZqO9c)8nRrcX+t$& z%8i~TH&pW`pgLZja%80C){9B2-PtGe7^-?hpY`n}UlPt~v5E(6k4ms>CvT>nU%4~n z33k7kYYjE28a7sMrv_blT~MN-;^%ds*$9Y*FSTTSGKIVy{i(|QO^B|ui7E* zv#=iMlVG;tj#DxAdf6Z@UYT>FiL24Y-}8@TmcPqf9|bxC1PKM5H>a~oiP*+M>FEA| zngMv1ixAwPMSf?1L_;^^DW4wTWJDU!m@9_f53b|tWuw)miyK70^>kK{g0V1$Nv-Yh zszP_<4<~5QiC;tb2%JC6CE;~X`NhJnl~N23sOoCIyHgkl87oJ;ziFxo4J zdSAR+d0Z^rqLJnOXl3fMA}{WWvU?P5ZUQF3cNk6K)+XjZg9SSPF)u0dc_2bjvtU#l z-S>3kgt->(DVRJrU!gbg!)6nVxsN(Sa(~@q2dbau0S;X8(Ml#DzzlJ zTvM;p$dK6#yLYgfOwPth1;=WF3~g_5K#J=PEeX`_!K<*uYbF0gWWwVER_DBA8fk+r z1=<|}%ebm8!{b`*DJ21#XI)gblQuos$n%}f*fH75QdUt{3rLsG8>Se48Vp+|Rd8$g z5^c=B)5yv)TIa!gnlFs5ZqEXhR5IUHgG*#D#4(-o-_Gm2)AeLGEz4%M!q5mzczfQ9 zzJ5)Uc5c_`4|sprz5SST99<9mHP#as0B3!;sVrXlyi9>=RVfmroqbq`qk)>ri3VHXLyEbAe%9Ym^x?u$<9YJ+ER>! z(=NdAft2S;ucFJgn?-5?mgo7AeIql9X3XOdT952TooBf}WdwbHGjYRYMKvbwzr~jk zQ3o#Mw2dZMO`>QET$zvj&a9csSUVjVRZf4#;tALbp|K<#PXxNp_Zwia$*T3#YWLa)Rtc$y>p!DbR+s*`2X!8s55%5}qKZ0W#+cwKXfi zX0nQcvOr@mON~Q9_v-Op>&il9^*zeReKF_ShdDpVCk!W%s=y)})a06Wm$OXn78~dZ zw$sQ}N1slx@&vE7is}|iY5PbONN{**e6a!>VBrkDL4d931As7E-4)zUK+{cY_`5r* zTPz(~6pY1kXdOHH!VWGa&oX;lTM z{#O^dJsSwc14rm4o%{;j*Lkm6OADu@Nb(%qw{42NFh%0)y=8>6OnRRS=yJPZ(LqNw zeQ|&j`O`(&B~D=t^$rXY;Jy?tnsG@RBA>X`u1@OUkpcG@tlT$pNHr7X0#tXG#>0l} z$!CO~NEDiekK9eaLNitV6ti6i-zB5iA#q-BGvJ(8m|@cCGE1DdH@DcskO3(R#2l)8 z5su3Fh+h^%6F5Xc#Q(^VgUAC+kN%D7vfw7<+CdzU4@D=WA;T0?f~yQ-1fO*?O{L`Wdq-6b%sYw|uBQr0ltG^%5Udg-gDDGX$Lj)nlabD6N-T3TLW*@yMNi z>Q1mR-_ru!p**l^z|IET8-XR=nYy0d4rZ@~?%D68J504;I|HMfc5N90vy#OvrRI!( z^55b5X9tYFjPS6|aTjp~3`Q)=qO|qjfZa;W`^F-X6R<9efZOrweI9Fgzv1IiLEX&< zFKz=N5Bjn%%$<_&pFJpq(0N333@En;Xd*=Q%G-F3fA28D5W!`cNKLNp)Y70I^DS%T z=aJ8N2r07Pkk{}HQ$;-we>npYrDobPbV{xUmx6`SF;pbx%`S5|?16sfs(yU?%Xeg! zxpi8c=$m2ABPx}XRDnhs`?tS_f;?(Mhx8n-rp2b)mIrfKp0 z+p(vVst$3M2av&Y?-@(h>X@hlRo3_z+gYn#DA6$yn?1aBc9(jql|p*vJyN3favPLf z2f)popN(?xK-w-RU5%Li1`=Wrq<1E6GW^Ukn=EHih`z{w* zE(L5biYEa*M z{44jM@4q(dSiMlQu5{KvAolF^$-aIjE*{lm(180l%qWmioBM;u8@iUg>LK{7OOgm0 znkHAflGj5VEyjHLsZ{|+1^FxpAi?Sa%LfSYB{$A&d7thsyWtx~lR7o5ZqUafus{;& zrNNcrQd$~HO79Pk^8{Tlt ztV1(c0%Bu{j6t*mchGHsYA?mIH9&xt4*#1LF%3@HH&Mu%`f@wdDHQr-zh z_BW;L0WLiJg0|;(9hB0P$^<{@Iq%P^M>ub{p*H5LUr&`?=>MZ=z@Xg!`BgN4|92uq zO*~ZryKir1{JEi`MJlVMjJ1wOe#2`Xw@G{>1XUy{RRCVtWyxmC`FFMIf(Se-{=~C9 z)kK5I+KQ97`|H;XN8aC?mmc&8VZz?Rxl_Guv7aC3mX++CW6O6XEXxevf^3ZCr#FMz zLoAn?UP~z(AwI)b^Bbh4DU|ncW2Xq#1-^C3k^6t#;#%>-MwORK3(mY*ZWdtc3*k72 z^>L-n#c0i^g0K;n25j}z#iUp16U058&rqtFok`=ediq^G4L_+A$AUD5J?*R%%zHWA zFrLwW77J)t$X%YZ3657ZC-omZ5&Jo6GDI-#vR{?~r4J*XNUtU`>~F5C!k!H%h}tfg zz?_+p+C)hwFvc`Q5yZ%3ALef!SJtWxoZMY&d1T{mSKlDI`<$;e+!ln8)632sZ0p0_ zml@&*CJ)F@`n^m^b=t=vQ|%M7jO$~tq@iXa46KcztI(%Wp2OS*m|pC)oG1(#Fsx7T zO*Z#Y(zy8i|Ivp+vSr~u?3|8x3J;7^6}!d?*wotcb% zo?Oeg%XKnU&CPJy-%=pG;K&kKXYRzUH$fjVLZ-%W>!NJrqSB~cRaXoQLUR8|mK za6X7GRx_zavP7(6^;&kVqhhM%b*i045wTP5Za4cnITwBK#@B>_;KmbQmL~7q5j#O! zr{g#Gz05$H&@8h8K3jvD+kbiC{RYm(`N3E9vW#c%}}5rta1voN>A<1Vru15WW%8RI20b_a_Eq9w!*spFCJVD zY=zAZ{zpj*!p%2Yob}KwrZ_LQQI)dWu~GEHTT3_y`M0?#7B?(aD#2UVwO_~kPGvEW zi7J3(=x@l1)Oj4;b@SLo`D?^t)g>OWkIoj=9Kay|6Kzy(gb}7Dc0P%`LS9Tqmi6HF z=_5f9S>L0trjJvN!phQ={UcM5&GWM85vexCD$Tj~ zJFC$5{Q3+KSPu`!ro^?o;3khIv#t5NWV89>NzlyVVilc=pDgGEn$}%`9^(Xq`G{E& zQ$zIiV&V3)Y;AE-9^Agfm1s{05`$mzlM#N|nAr_Um^3CD{IYMsIFD4jU#%oxnP;A# zz0zCY@R-BFCP@_}{{_xKI|H;ZCAK_`Z^FR70ZlXfC3%pb+@env(<@2B7vq!x(e#2G z8X{HePR-w3PGAsQ-;S6jS+Tt7fu-B~JSzjwc5MTHxw#H=D!=aP zzLrj+&ri1JF>l$>P*I~_cxt0AUVtTLJZ27?cBm{ecYIw^DkZ zx#qxnsan}mPvl~6xOvYoi1@cO^on*}or61r|{%`-{17rMtTT6LxkSx$8KTAyY) zl}ACsXAyp(0nyH;PEGFa<5b|$tCtS=l(#(p@4)ro6R6NLlJm8%YCz-svZrNjLHD zWqY$Ntp*t``dLEAAYM~B)Ri-`Pq98$fKJOHBAk9a{QylNU$r?~>mxP_D}6gRYN0#+ z8fTfGaSL$sP`QsgPhuC~tNN8|7YrtH#Ys1OA39?poTV7BFq{&EGQZ@dOAdv%*2r1s zmz_1w%ZMMN7dzO`<4mCHTXS=5jbwwSfg*KPZqt)%=4vF^Y5)g?zd3+EFP9sfe+ggQ zAEo*$y23x=NV^M+Ry`a>c{X`!0UmRor+-ext!Kf4Fp$c3m|3TF0J?k4KmP3>VJ344 z+^6Y1gr1T6{b=P$$7wYR-5+9^0809SD)PgQ4n;kmxpIGB5RZ2*U=B@IHxNiB!z2SK z?5ZF|*9=YrD20OoPrs{2iEWH8Q_+d`f$;AlS|owzt~b;S$Z)JQ`eF+7a%b3p0$)$2 zLar_L^1NdG6RT}{Z_P7oU5L^r3~!4s@mqO{@+~$&lU;}41GVe^)V)48^SU|3*B3%1 zw&-7ZaYCF1yLaoOQ1|rrF1#9V(RTT*KcMm6P)_99Wxgw(taTgxdmpJ6U zMl2XZ4e)X74og*A99KnA2*m3Q-IN9Vct?$-)EH`9hG9wR{vMCa?oO45qNv|ZeXmSb z3@g*91YQ)v2-@)(aKs;K*n)n*Gwp{@0nG=}y5bP>UQu-JC^&InZHJntkHC5Tg>P>;O%&DOzrpyIL;@ zvseX*b=VjcRBDX37H~C$3)9FetA@DMP~1dVK{nE$#@gw)E~`O>7D-#VT=0K8Jl|NrCPG3Vi5JFLtiE$FM3yG1zRHU`rX9&FQ5)RI~zcKz=aBJ9i9cO%|*_jmQnwXgHobm1r&JtkDY9K zx3Q9m2Cs9Qy+t=NT=biUTz2IdSix1>c8EQVQAt364L%V{>tq*b6*3}DqNQtmNma^O z`qYF3RdB8M9`8fP3cS()KmXt6jx{*oO>Zq(O(%QAzM78G9 z2Sb5HkJ<9#B9)l3pdsWNfK^9sNhQn8#~{R{s1Bg9up-ze5oJ6Ct6D&1T$d2;9d$j# z`41AHh?4C~X@9*dUYOFcw9zsN68FKdD;bdoIZX@RgyJ75M~oP z!6f95z;7uqH+h+u1{Z9SF2r*TSE)}ujUXzg#<|{ZHjPoYvOF+Tq@c>|x9)ve0adPU zouxnGpncaF9l#(<&qYuFqD{kCz`gim2;~YEVX5_jZ*OY%7tn+2YI@*36mThaoBCbHfq z0Wn2hzG!Q9I=0>mLzyI@8f|Fgkr}_%J4{~ zt#)tcDV4>3lk@ZH#GhoVjWIpwvrG`r9ucT25}oQY?Hx@<0A&ENZb~+CW%)7g-6cj4 z#x}&~GzgK_h0aKKsC4v+vR%p0#*ic=xzul2jelx3jg#*5~?YSVO!LJfo7?5DW7Z2V*seRx&$I%yz(R zNqd_R$ts|d%YJE=UsWN_8KybTgczYteT-}l0R@o0TPCK(Env0e}zK%29-wn z2Krx2GOr~a=kRME?-dqTjujyfhWAS_Qgp^YaRM8XW?(3jnRsiOqaM(fH$~FA7$$wG z-CEOj-q}Q_L3BLdInlX!UVHJ_;kkL(__+K+iV%LsK!gnG8T}!yD!W(Xksf}K+Y+-g zzSX=~Q{&M7PURCS8XqGOE zHJZc^&^t~W6C`Db$vUjh9r|aDmq~n(&JR7oG374#YAu_DJ%oPj6foy)jPtNMYRZ@{ zj^M>1jak)>nY}lOtCf)ixmQIc9?Nmwl9G z`Y!%u(cVAhau=G7eS)k(W0*RE^<}l#jafr?c=n5 zNAk@d)EUI9t|-S5nCxu%A%>Q=(~d+^?hn->UfZZn?cA6Vh zfGKtgu%!-gz~?VO{9m$|B>fMv@cu8dxcG0f_@C2%kOfNWS02`i%J5A)PZblVnj4qe zdInP_h8U)u#%yh81#^AsU^R1vplEG)j>^7E{nGFd1+zStj;1c8i#9!Srj5gUgGGKi zX6ABN1^~%pNLp`=8{fM~UYxVpHOGlZ&&->@;`ttYU?=1wn0<{vfMtWln#;HTX&X%N zv@<4FB!xX?B#DKK(h1|mJ=6W5=JEv^1Sn#T4E{EVr62e}=o=_>i!Xwo1^l6~<6f>`Tyrlbx1AVu{`lCa;PjUF03^K( zLYrwZhuhGwsGt?ZOR0+^LQ_bsq^UTbmN@QbrcwPfs6v`ObH?EB&9B1cXBi-CD>7bP zNJ;o9j;I%d_n8Tb3}PmJ@N|Nv_HSp;YFyRXUo-Z0d)X6sZ6yW?lGMK&OM#7xJ2LuG zZSRAXW_|yj+F>WrPm|y~BdGQMz5eMd^92SzCn4OE@jzi_l9I@SRdzfonZmBuwFunt zrWkTI_p93dWSW{J1`@PPA<6Zo~fLX#2gUY-=NQ$fa>b=(g+n&Ux(J z$^q8K5(C1^7GsewCMJO0#afl-!CXIfQ#)aG#(gTv_~Y$lVnw4ze)^{QvwfqtBR6}G z%xcq&$o&d@?}DQ#ojq6)MEkWzC?W#W4JLnAO10c0zQvb_`DY&P+a1n?l~bstd^7Ej z^##{V#^7Lu4^eNYjf#>f-N-wp@0;AOq@C1mcEXs?_mwDZxN}oju*|r!jM>omLfQFo z-n~`&&7?kbe^QA{e^5Rva3B4MmU8N^Sm?cfF_h68>F~Arwbk0=aJlsuQ4M#KXrdvO_CoSG8L0q^gyc)a)|lu9bHL zarT0|^?i$|Z*`p%a5CSk!d1PiPIC}z>^c0xZh`}Yy;~tXyDP>*nyg;moBk@?;3wDr zV{FXr9P*f{exhg%7e^5pwrnMI%UKggqJc`c%p+!?J$!33^W-7MUT&1_o_1VTtsCi? zOCOX4_g}Gt;=3Mu?^|+^0L+QLJtHD-7G%N{<;x1C5v^2euLQesdy!i~zexI}u_TEV*(q1bIKH7BP*WOF9c%6-m1s_;%9R)qmdiH-`<(_PPN`!s$*YU}uB zC*x(f-J8v+=i#dx9&X)vx1XL^Hl~!15%QccTIv9u6J4s=L=wx1SV4sVx(mF^7m>uj zOU*yN_7UA9l@o`@md}p}c!OfH=WZW%cu@oHP0>kSID2*--^X`Pp9>JO?Ez3r@<*$f7^9mJ567G-lzx zy#8tNmPyHR-v}eEKVyVQT1idRW$tr#z{ciYwUQH*m^G{zox7&xI#@p%-y&3mrG7pG zHE3}p`)xgTr#sx%9rg2IA=jm1M_F+@K=ws@UOm#eX$#5(S^ZAb857g7Ni{1q0>0W7 zk2+XsUX2Du%-vK}@Q^H9kS@E1g&;m>4=A`%*<|JddqmPaDgoxWrT{p@KL!gv6wusk(T*($zr!i$e}cP1n9;kZ-!fieQ=)1f zPq4w2=~^XY*OiFLCZR@?-raBrD$enf1A$0Ug5%@v?QpUl26bWwJ~Bxune0;QvB?q< z&N;y3zv^b{a=epeJO>)PZ&zFcuSm6hv}PwVLFVCuJS#-y`2OmH53~=h{9B!e46;nb zjZuQ!YOdx)S@Ma2?u9dfY6wKsb)X1ay)epAsu_<}*%N&-X_?HF7AXw?u2wf+KQ5wR z=5(YIj#0D$xKl}0<#ANh2$f=BlKrj@)5*_nEi4y&1st2iab8Jf_UnZPY$%u-P@-@2 z*`2zYV>q*uu7Ux=nXluUY@%@A&@^ie>6lHsZ|@t(Faq=*pV{xiSfol=9QFGM_Ql4> zCA=ZZl1_7^>c=+;Zw|T9ac)id7+h$0!9+;uDM1PYEq@nSUCmnAfCfOE8v#tJ_fskS2z9Mpv>EQq(%kKYIYjds^sE2#sm>r0`?W^S3xW z7eAD0Bw^tg`A33YD$0MDua%WI6|wZ@-qk;_^dq@0TyjNECL=vH%2AcWP$lSjB*}G-Ph@q6_fYoPVvJ?alCf1HvdcM_h^5-+Y32f zI8l)Q%>)K`E~m{LX6akNNgtL;Ay=u2lGW;Bx&V{49edev>RJc@8}C7N9n9^Gj9#Bb z@HEH3-#R7e@!;x8(OBJ7&Q@YCo-gt{a`sS~W=F(TBB6txp{TB>z-H^^U-d71Exyy% zP>^7AA9|DXJ>;B{Ra#)6HQ!Vy5p16zHFbcyG*o>7d$QJ_tuoy`k~D{v=i%(O=$Vbr zA8b{nrG&h5uM~yvYj?r%Y`Nw&NA>;cVRG(^2vd239TjTX{jYvsreOt?Jl)VNvC(25 z)ucDgEoiepLv4dUc%%3nC5>&L>ExCl+Ez$9KL%O2HLn;UB=3ZJc3;@UjZ5kOJ!Ge% zqx3*XqjdZ);h!eiDzOG1I=IYI6%{uS7haT|)9kr7-s@^ck0QR9D<^hGPfyRFz2^sP zWf(`aiR;y#GTA-M#&2hj<%MhY`lfERGPs1oy2JW;zJk_`{JCnOHgh0(dw^~y_ykfV za^5DDYqA!^iO;j$w17>gB{^94alRY0i6$^+1@Hobq`p=cq!URV2X9GQR*qNFUSQ~5 zzEw_mwH2Hq$K3CI3<0 zs9mB2`N?rBC==Inp0bFuO*^C~)Blq|@?qe$Y)~_A*k0TLdW6)Ya{t?24)tG=2WC;P zlANUwT9d1W=R4)9Iwybhc=4LI5nJiJuDZKgiZ4S^c!IKrkvhUOi(g8|MNzp4I()s z3CKh%Ln4aq8{o7kTka4uUEg{ooRBUi`w}evp74n-WfKN{G#{p=2k~Mdwp(w@7 zaVgvxvCVVzrT$3PK8@;1!Pal*p~q zQ^wq`x;kbmF0!6CNVI;XQjxR4W&Qw@C4PX#KE>>mJDF~l~gKmP?0*|aF{#Qz_NU1bDVmPX7uzewRE{< zdHET-o+}&L38#$d%7r8L#JojS+-+lJUDj>JCG+f2al@ILX5-AE`|s*eJU4?ES9WaT z)*cghxNO0KL;1mKK?>;Xdr*J?>Kdy&z(fZw0C(L7wv~8HI%qe*01aztrn+F#Dbr{5I8%0ro z|DMDu$Sua`Nc|sq2%&Y2`TnVTc&khI34H0LeRkyCAek;KLW4M~dYbzw1}c64)I&ke ziffgCIvi3ckx?;Ay6y2g)rpO*%#(JW4eV64xO99CJrV7R!{<3IyQKTZya5H{Rwg0J z=qvItXjT1VXIm7pahF}iOh<4NSR9^1QZ|+aYGcEq-2ys=Of7m*FbxgPa72!ia;7oU z^My7Kuoq`hi&#dEAnc`xuCWXW5++2gdvZrYHpeaUNJ@n_&rOD)Qo09*B*#8O>3f1P z^<-mX;th;r;Nf&lqDPxX9h&N8HXf%kYt{<0)z}i%F*4ezcAOHBsGJJPxC2rN<3n~C z$=VCDh^irpd{&Q@97mlMC!Dkn9ZR;`t;`$J=33)4F7t&7{2M5?SRa~aqp24kmifYR zj&MW-krHKOlSFgMandA8DtYlqF~1jJLOtkg+Q07dnJc1A`1_&Kw!G%PqCCDypo-2tqDS z)%B9Li`wn&fB!NGmCQUnJ-0Zwy2ih4z|cFj#)mw2^RY!a9P}e?)`^e2O)dlm;zzy5 z4hy`l-w3G#;|Rcg?b9G#8Q|<+!KrEc733qm&vemPBotDvi7`m;=H)Uvc`{|pYJOiJKxD; z6Q3QeJ}O**gRRMM!i|lM7u4+eJ@SW(^i;AI9-@N70UQiJ&=K!Px6ZX$NaOa61nQ8t z;_QeU^*Vo`HJnhhzoI}u3Bty{wNlvSyt`eeQHR-fCBh?Ir&%whX<>wOtK#DoX?rXp zLIfk{ALQn4wFoLNE39?P8uhk7TC>pRQltRsbODX5! z6luYh^lTYRM71{W2}7~<4p223ymS1VK9r}j^nUQfw%vS~-{YmH?`?7?ZFwZv(=#PL z9GkUeyb%l~onvBa_l*{MacCAi5vA0ga(fsCo1cU^SC;nje<)Q;uc0ULTE-eB$%O;5Nsm=)AW5DplNd&bpOq(VrIGc)^aXb|Uq0M12W(XT&t`N6Wkyx);9}>#m zWV`ZcI7_5unSWUCJRM1ulA3UkJ)G-gCWehlQ3eeD7Rj(J1z^ZBC}#w$GzuAuP9cbj zCKsemB#ssd6mH7S%5-#KOGnmfxomYt(z+c)X30qpEP0!_CqK4J-rCqgAg-u5ZI+i7 ztFpfLpnelKrCV^0Q!2%|bQIt&4z(B#ygyaNtdXRuSZ&l9dP^`*Yq<}U!#kbZZMf)e zGupS+t$81%WK>jC^lT!YJ#N=%yTH(xH{yS z+UEV{cxO~8MIDv>;a4t(WgB@T;Jzp4B~TDfIf=<$F5n@o=qK0EjDI5@!(jq;CQp* z^)|saH*}^!^~q-q?(Ys6_SJuSIc2sz!lH2q#KxfFa65uO{z}6$MmHK^$;E;-GC+)C z1Oj4;>qaiP-ei@HaU4wI8oJ-?x9hpBpRS3o3DE*XzzuU7KMEK4$>9eOW3Ofl1}azwhe8Lk*E|8qL^fvJZW($^=7ft9Os24 zvp9%@Ih1U8eo3P9@L-GZ7Y=^#r2SJK0vF2ob&cts093sXVERBqDn9w0!QBDe9l^{0#OY7JQqkbW?x1e7dkIq zUzV6DjW~*vD?a_O2%6_}wBw&vCyIljk@_2V=)Hs~uhEq+&=KAd3ew_Bi2FcBK*pZq z?(>(7_PzT@8!=5GxfsY^(ZS~_^YjN1?86`yp4-*2sAq~$3VZ_*bj&!HUU(ktU@fT? z*`BXe%QAK3E;ub9oO?Dajy9QUKDp+=W7(9A#N^<_R{c^MURtLH+>+rjd$m=XnX9P^ z(*c~1F;`~d%3KFa*-X}%Gp8z-tHMLJ?a23O@KUqXf~3bu@cABqt$8OauQU{Xzo!xM znm&32fY!#>OuUy)WlWHKmF@EqJ`uM-)}jav;iEY!H6rpbf!#j@lAI*C=7`%pL?xU8 zHLaj`je;tUeO@W#e~8i%Ag%sX`vJM*PKM=r>OUP7rl6@MsVmBHXW*x5j^LIdz)vlT zfuc(?1o9{xhguH+U;vigDphmUKbL+~UZ<9)=AoV^>1YL7U~07}p(b1i$AG0& zGhs+U|M6TlSV+6KY>7-TIh+uYjB-^5Ke-qZI{9Q0!^;=K*2{TDo8U$&ZVL8KyD)2s zAmjDm4+52^r>U+^&*w1sNlgW%F~bHQc8oZ4o8E%fMo zA4l5|-+t8Yd|r{@rSDwGH-6O8Ci3&LbM|6*Z0}Z+?25w6Qqa_oFVdxxcv4@r9`&k^ zF|XDT5D@)C%RLO97u-ol5mLy@c`t>$i=DFNzHL$xV3wzkO1vEeYYMITeBa&AWXE3D z!qanj?{1+`_2qamfm?uFdNjgCYOoQQVx5TypXs4Z--eSZPKs;6DO{fg0g8D2Q-LWD zeNu{PkFkYQK@uZ_jpLE7z|(rmVA!f@QV~_R-NWG%WZW-Tyq?>%O8LE%2$v{Gp|KfO zI@jKyi--^W`?vpYi@qk8*$vzitiydd1YJ)k{bG&<`sz4@j02q&qoG>R{L@|rewOhS zu1EKwU#P$Z;Ub{(dRez?2k_vD$-Bq^9K!>5n|*AnVA)XhxGafXX1x7_uDN8$et_`m+6a*F>y13pe_Odgg9#t2dt)>^x< zohx11&AtYXBg|5OD55Z;MsC=Dx*cGc9M*g_(gNm5&xi}z+#WT>OV*o zk9w7SafP|ae3UwW!a%#-53F}Lc7r6Jx5>ttOD4MBn+Ix1V#GLFIb8?hgwNT+MS%BP zlqgh+$Uv|o5ec%S$V7$2pvpo*lW_9PTJix&SK_ouB$c92Q_YaLXiQVs#-UP+tRf8| zr|=64HB6&W9#hm|$f8VxXv{xUp5W&Fi_)FO(O4h=$qWl>G6O8YpvpTS3vL7eErX9N z7A}&5H0ghG?bFsL`pEKW)c)0}i7R=OSW3S~R8(!o9lPM;X{kW?M`sBD<#()yS=g^A z|DyxJMou%?9BYnG&;>-M)|YQI_*47G{wtXW)E))dbd#hM+J5}uqOsOH0Vw?fDBXUm zM=NFEU7r#_pHbRhGoRtMPbPf@S{tkHkGjhiwDloza*NEQ8e)VXKG<}61~l(9^oBVy zt6s0k1lLYQ5_0@6{cmjPt^;21Cmi#i7N$#nNy;2 z{XjjlB8wPBS--`cI0fRgd89p-QgoB6X!xJfD^~%k62>8d5T@-u!kuAdTCGh)k%2jM z)kRA7#elYj7Ub*UO*BGW$Jp0oX2xVl12rW^ka5g@0c}x^;VN{bbND!R%#*g9lURF9 zbrN^7kCTgk{YN)l6RFb^1YENZ&(Pk1YpTF=iXw?-{@C;JF zCY$wCqctzhb?1U5poyE0C!cf!bOmC$APfYf=-X9Fta?W$Y^-+nl^8KYfA>BdXS==1 zLV6JrPxI66adrdE)f&~ZGNm#yW@(0VsJx;m!+j;YxbH4SQ=X`(O_3j_N zy7un1SJ%F~uez%0t|}3>YUPt$gd|Uf9V=c1^59?`R~eHcxj(Zsg9mGG+=rw%!yKF0 znOF|98{}I6wyYQj?97hU(?LM%i>JoCVNGlEqLS3Bl2Hy1@s;PYWYMe99Bg zVnv0~DuZ+xJTR#K@@9_@d3mgw#rjd?G-GCMGEmS_&Rc;;2)FcwoE$oT-xiFNe%(rx zLW`9yYlDH=mmg6~HDP~D2O$4Lo9_vItJT(!eoTGy^|6kd03(lA5uDZqfto?M^SfsX{yALM_?;$7s;RdMo@HIjfskPDUinl zLV78ovs_Jt&eqG04o_C*&^}MOVwrBjWWtm3!Bf=9`8ESxA5cE-@NKYl%rBvLWp!2> zS2FI-H+6yUEi&^()ZA5s-g}eqi4oQ%N zc#;S_8RQor3I})LH!#2<3BEg1u6)6W z*B?rxf(24Ndo7^iSR;Lj@N9E;+0a8)LAKQhaJ$=i#pWz6Iw{GGD6P8U^EAAuSE0l|1rzGajV9&P3 z#>EvsPNjY_dG2ievm1Z0KezhUA*F7rMpg!+1G8lzX)Q5FmxotH-bLrOD4IjcvFgxu zxu$7{bK?iWcjp$tiMhrA&Rm6=V`o!fe<{L{d299%vb^t|LIyP;qItdrcR-XEDMuB! zKQC!g9>zADJAKqa$Q-HRQ|23eP_V(VvN0rS&G9CKN}>xC6V_%`Mt>MrQW_jxXAekp zYR&As|N13^K%SGzAc-VlIGz+eWa9k>8mBFrkT6VQ!Ffho(QpjWI%u0_QBF$_D;BPT zU?!XNeMh!+J6j@egY-8NZAftqa0mUiJa$+N3U;mKJWlr-J&Ri{SnB&ptPL<%OUgRr zhphX$yRzxs)({79lZ!5f+k0lc15|8N484z4=yyn}^-8J^ezts(C;0cdR5G#6J=VOm zyZEak5>mdm2S%T81U|;-qOB>aI|O)2oz5p#uPVfZi2*y4QxnNoLBUf}q9x7cw;?c} z(9y?bW5bh>(ai#uUL2X12P{vCc}&5@)f-1ipEt#Y+Vi@$PtF}nghpj9c`XN`k~CIQ z`aFDY`;VRF+u&TzcHNRKe<_4mC5Q+sE1XU1tUhh*cEl!!SYJ3Y9+RX1%+h-@)4F1!v5UJ67swHhA<+OGuRTs zQORUTM92zoA=r1Dp9(Lpj5f=EARiD+|)tSj^BH zm~6(Kr_+%wnq(|PX{C?N|17}GGO`WEbKqf!oc;;z!5&cdqMs=nKXjq8)e{h-9ccV?^$A2`~4o}{f#q`F^z-xZXpq;siPlPGET{?yT!t5 z&h=xlXi;IKm|`_Hzwo@_k)T8@E@ITJ=-1>ML1@((?0>QtN1T8X0%<@d!auhP0Tw+v zCRMN@uWI&JpiLs8iydeNjVDnwsM9c|%t;Cc29oJgs4M+? zq8NQc!yY%9{F6#*bp<&EebRG!!>d$}b08>p1X1NgHmd(5*^$zL?2)*qL1{G}bk$YY zHvIIQSoAFy{C#=30R0S^fcVqTGe^-6=iJB@%ayHe;)U0U_uI13d@70_RaaCOI`!;h zFB~PPTd$x;T-oJFF2wAgOC1+@dpFN=cZU~kPT;CLF4`vOPcQ~72EO;g`=@w6VVSBm ziC+k6=&uy#q|t`mlB?GEvjeNYZcmd6UF*$$7XnJ?0(#$g41dhY9C9SGh`fv0$MPwj z322izzmrc{P4o7L9R0Za9e|Op1o{ojG4wX>bWvx*_hWN_y)JF03xfvHOkZal%ND)H z2%ltcW6-Wdj-Vr`o7FF|Xb|(wYQYS*ipQ(*WrYc{rQn151CxC$!!BF&43$yE*XJE# zL@%1*3R3;Hbg4huN&AiV73B;C$KPw(H>B(B!t-vX8`4+!Y_ehhiQA?z zTjH#_0IeZVZ?I;URh#Icy6xGWxC+dxh-tARM;}42qK3F>@}()LxsXG;q~=aLW{K*~ z>f|Cw;Vp5&2FbRM57Xz`pi}N=YZwofv^Cm~)tlJ9Lr46WTS{Nl_Kw33 z-HD*HYRmRP-XJUmSgYlG`}w7)6SdRE&;@1R1WZUbRSrD6e7B*zBOei4-Ze~^V7gQt z-N?-joT_XGx0%%);)M(72M$ZWDJQ8)u4(8=d0hAe9(Ti>;fzf6yJJ0gx zbbWIN*M4_IcOUps@xFIt*ly}nAdh+_DLus{-qKheNL*dTmZ>2ukkGJc=}aP>uIJV(rdwL$kuve?0KH&R_P|!WHQDH-;8rY`pjW> zT{h2OYS?$iDPW2H0q}5pw(O8sH>p{#b!=o0yMoP~;s+;pu*h~m^R~GBzGqf@+V_5T zcE$KE@qshMRcV^UbUNcZ@OjXjtR&rmdO>35n!Px+{B57j#16F`{xHaEIp(Xv=EDJh zpAWw~=}=~vVMv>(-{~RNOLAiL=?^jbE4#1Q5k_Y|=~?(YNjK94?ELOWFWK2F`C0qE z@<8*K;L$^ciTtkZ$&|WmwhXjGs4kbJErSk)3d*g5Q`v#wjKMpf77?h+FNoN{N^ z4x-CAyVZM>+Zgd$3EeCgn=KUAwr}v&_@{f{xOPmhz~8|=v2mk4cCVl0uGna|-C{e7 z4ze3P6ff%>#D+Mc)!owJCwqU$vv2UU(CDJSA|eRKwqfk}O!zWwEI+~7KBE&`8 zp+A^=h~=Aigqc5IIe(axL7VJ!$+yGt!PopgHuUYT#Tf8*P`eg6aoyg$`e=D2Lae-h zb&YSvd=dUU!ux6^0h!O}2hk1erP8sucNg0!XNUAie=f7Tj&h0ip}`HOn>tG}LFP+v zQtQ;GXSf+vx;?*O55=YQId)Bl)Sa{D@V5L$`=C&UcG=JZOVqqndfkq;(7&P<61wmy zS{dMF&chegDeTh}_~4nX^%kOz_4qQ**?z{gucL4F3uovtGqZPL$9b*dMJCp6%)R^i z6Ncu=Yp?WFEs_V}G3Ih~Y4L5aCEO!7RQUtODI3EL$tSi=wBhlo{kd}vem^btKF$tu z_v{Bp^dn8TOm4dj6a8C44&MgGO^s)2fkQKNT7Roy=P}jJ zrGV25YJ=vP#2vkZ*}yB&1XH!xYj^g?mChRKkkqUnL$`4>sMdOz)V^zKR#F~{!vjwp zgk|Pd<0x6|`$U^&q_g`pEUL(&^IK?^oS1?{tUVmYU)7C3sPv1b3FP+>uc+oberdBy$?<}f@3G1%yS-T33XqHg(t-T+oC4a7BUdnk< za~Ss|JarY=1?gBS#`xs&0yMLvXrA3_XYF%a(w2`My@qvF+wmfYKB;!&irHc|anye3 z#eX_gCUiC4eS}k9f5R%Mma~du_F8{b9}%9Nap>oz!D~yA?jblhlIY;#(x#I{Vn|?j|}XD7=87h z;X^QfKwyMDKwxP4J-|?;`Tig}&o)2;T>ggb=u{rh*XpfRKZc zgpd@1ky$(J!B8Y{f&EdW7^j0#<@kX`&=jQwL;%X_27>@~pS* zu*8+)0i(1wQ;Je_je7=Tbj@48fH55I5@1Q&&QK)2*v-v+U-+Rw&7YS=*iBedV4573LNuMTXy-68s~Krl6dF2Hz?m!;Y>K zj41lSIlwRaZr*?_hR3!u%|j4?hVqS=&Nz-;Bbrr+50?okUeKbY4hhj9Tv$DzY5-J!`z&8>aIl90yxGqA1^2GE-gvIwX-p2suPiK@=|}S)r4V zc}h@%su4{|rqw<|NlpNeqD&#q0q!50;&i&ZeBhFZ2jDD#&9NT6_QYykr9`^9Pme~LgN zNHvdkLTOEu6(z_s&IZ-=e4p*b`^}rMFyrkP)Xj1w9EfBOEs8T- zu`Pf8JXo@-6W_A+DA+&u|L%ln6zR@vMT_I-|R?*}BV;0R@mvxp7*K>uM`7 zy4zaky&_|30O+*+x4xX&^xy_V zbHib-*W~=|232V|xSsd^D8;6?$@HT?;{9^-vgu9lqnPDmu?nVdLCAuN&KB!*u(&-@ zN*>3CaQ&R3-EniCU6;==fuEoKof)3i$NOWRM>Vjx9yl<}$eRDXkFb8gU%x4y$2B8; zR>;6m{XiJSI>I3M?@xrmH^Szz3MjIez#*e|zz~=KO?RSDEOHJ_!9#PXOm1asN`x?7 zkNJWy0?QeMa3WVqV(_FGcle046!V=3n}R3tNb2$>RZbf8e#0m_SB#J-hCWOqG^R}A z-DuV!7Hn!ZMU!1Nj;0Xe*l#msKVoqUe;I*sE8fV&>F|_IaFl}WkxYi3^>YmkPA;zyRbbdW_x6?Se-k7<-& z9f0aah1TU;M>GFMk2l+zIpTS&-8Z)lSA8yHj?i6{QeL!y`iaQ=6Z2=X;;;VLA|dwt zr6SQL!DAj?q=J&P6iv_L{8jxEnUV&o^5bH;_g1RX9FP`sAJ@7aDt!2K@rhDN>;}rR zd6^f*GV##Xva%4U2;*4XSjkwtB!rVx7u$rB38BVp6{(*knVu&QU!yltILfwC%gZse zJ*iy%s$WVA5gO2tMM!>@pa@l(3V@3HX~=^qR2bMBmAY36vJpWxqqlq1WEh9msI1523U;^--4K7wy$Fm_4L8tWgwBkkU z6;2S6*!e9_(Yl9noGFY%G|l^3xf{px&d4t$2GXJ|hbUd`qF6m0?u;Vgkg_ksO4GSt zS}mRuJf{s>&~U0QFJd&OtS*o;!{33>AYb!jQyT!wrjx2x8r7l85n&e;6mg!v-1;z^K#OZU#7zBn$vQF6vn^sb5dtbZI2IY{Yt%dc_sp&IxF7*-qvi_M_`72T409yp@UTB?Rj9yCzh4oiBJSKPm zXsj>_e1E0VA4^Qsp!lbK>xvkj)h__^K*x?|Trq%bm=cB66ffJOnsT1`W%}DFO=b+w zZBA9I%4b<4D>E0lC`3<3JVAPjVw2O@>v9F67JNYY=7oUSh54>U!cWO0(pM zGl$Z*jR=a8c^ET?(QUE*gs_NoAWt_O#vjvf67MUpv63My=|d>#Ssc*&3+EF?C5=~% zT^&TeZe{a|*Sw~xYQVq#fWBrbP6Sv5Zb~Cd_KTo?5S)>Y_V-I2!Ww416phG>q?;c0&pEEowY<_p^T9w?Ibt6q*XtD1F^FPLpyt*)M> zJh-5`oG75{=o-hiiv%i^(gWX!cbyUdF0ZKeA7^?*4uDwyLeEy6uyy2xf?yO$kSWnD z>Sc@4>NX_*!F4S=gF^_a=l~Li251k%xsE;mRKoAN(^=A;8vzD2L61W}30;0Dgk8q@ zZV8ES%^mM!2f?5}%XX0+gva0+EEU*AzZNP=#KuST*TjxFs~s9M@!o_-&fQxPbHonJ zhH`v-;2^}7rW@}VGZ%&%dI5ih^VwVrp{}Bh8UbTq$y?zQ>^tE~c0C}V?ZlCc4@*XB zo46ACp`f>dwTPfv!h|B=3_lYRoj|OvdLd6kt}>u6S9cv?@_@*a6=X-@l9dFhzQ8nc z);QTXQGz^0UbOWp^VFOWIZaLXcq<*wjLIa~MDQ*py@gGhQTS{CNyHUF$wAWGej>`w>s4S^SgEqF)yH*mS+EA%0 zd*86rY#fh~^JrDAuLngj4M>MPu(ve%*-W%&nKa;?;KGT|C4LTJ+esrZA)u`A7vruH z9>r(6XcrAvQ#~<_pj9}A@Tw@D8IBMSW0e(t*`TA5$V6{5{_Et*!k~867qfWY^umBq z`1DXjJ97Fq%J`Ig^Yu~Yf^l;vs&@MvYq_7=qv155XFZ9uV#NYuIE6<+h;;4Q5#qst zs43o~+G z4vWzkz7ZFpDbX6F$>~Jm{n-j$w&=XSSq8!%h!3*sWa~C|%0DkIjc<-}wd~I$-Haw3 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�fq@@a3e$elOldaB>%}$+0lCuLA+^{%}2(?a|N1r3@`hulV{d6Wcj3PkN{*I}0JSG;#Xtp+us z{;gr7aq|#sgB-(nn`%U6 zhS3O)3!^<8;z7RbTTKY#JY=4%vGsv1Oy)Gb2jc;Hz_Tu2d}+COL9)hwkZiX0@}t1V zBJL0}wXE9pyCLWHhv=?b`JZ@=iQfl&p&l{DSr+!kWLOuXlfg{(rnXr~x3H@Q~jyU)R2%HXIVr z@kQx({s(FS(-Jgb_LvY?d_i?MueR1kW7rzMC(!7H3WQT>F_OiL_6QLW5}$~>!W^Bi zb>0rHPFp*9! z_aMUJ@~RjOA%7|!z-P`?3vw^(%@co@@6NLG+rrAidLs^cb3BMaF*V6wt_Cnd%Sw- zw_6TAzj9m6ssr^$Ij*9YzR|Y&ZcN>wl#0%hwYOd`TfF8^t?jGQ)T8HaSA0HZoo?%c zu>%d!1*@4qu5DlNSXS-6wDr|3Pu0GrNRK#o#M8Iiw8VRIjWO=yIj*$b%P+;R`hMe{ zpNsbD&K++*{N#os<8O9d)K-jp7v76A!PFE5yHMrt-2Yr&WY1exJEr^D>Dup;EUteZ!A zXxh=jGKlPpE@m0Nhz&B?!N3v+W}x%1X0My$OGRy?Yz)uBw9RhD%HwvbCNnW9acDHH zO@c7UR%^o(1*gY{LmySCq`H)}c1l9{1&9>9Y8Vy1E;~xW?%azm~j;_%FF&EyFK#D0MNfA%D2vKwmVQ7<$8k|R;a0Qqs z4?+{iOe9G$TiZn5@n46Sc;yo%Rk@G`4Pa&m*-0cR=9vanu%W`$jIrfQsd9z}oq(mt zHN;XRNm0AjfZwBqs0`i`Ft|=leWa#AZAy+}oN8V{f+{~>3e>#;2arOoO%&}S7}9rC ziOd5XFmL2&TOCFSGm{CgV2B$5=f=_D}y5hWe36=trSQ z{&Ka1*H3)_d##`0J4!I2u(N zPy;Y{USuqhq`=ixBJl9+2*Z!3QiE|cr~;f6)yQfhNx-S|yJH}Of`cO=&FL;QFfImC zYlAP#Hh31>43KU^ipv|^&SHa|!( zWqJo=M_s2T$iRqm2^koF>L3FVbPGfVXV`6%kXZ|sDH2{34*YbxI~g)V z58U)g&NO6Z7&4Q`nY^6MlFUptTC9_;Mq}1QQx0p*$;ryHWaMPz7}@L$v(c1m%*`;d aCQD`-+^|W47g7F)Z-oxtcs474cIMwF(3=DR literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-4ff6f25a-a5ab-46e3-83d9-f3f746510f64-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cb5a61c3c2f0e61294d29f7c7be9658d695f3abb GIT binary patch literal 89432 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f63cfc32b523a64de6813a84d3127aef8b0405e3 GIT binary patch literal 88277 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-5e3f868d-ce23-4588-bc2e-54ac07b01b5c-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6cab14bc16fb7c5e1e5f8212c881ec00f0ba585a GIT binary patch literal 88619 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

&g8qiaCi!p| z|4ip|hbQwa-XJL11*gN^6;ESP?dZ{lm)rrYl&oa7WvP=K3S>qmNGO;_qDy^2J}Y26K>&#%Jb zCi>-@`A0EdCtM0GZi~v9Jsl`)-QDpIm5`NLd6OQ?m}RR!xpaXJ7P~wyTD_HpOX(Lr zMX0?eI@}qAjS`!@anQVp)qpf7b@24>v%ef%!1dEU8X#r7|H0=CtMEpOILmaD38flQUtN%BK@7zUN=O&zN0PX0 zT_$J|dq}S=`y2!f+i1-5FntFcYHW~BX7m{*)WRb$_QPU%;yy4o7~zei_w#VmbMViu z-wXChu%yxRj6dlOtb}4>_F@Xg9}H`D<0HSLsPhRE*PFpqHPwIHFfC3nBfxM=CQZWR z?3{%ln)7F${l(H%D_oH|Ep}zbAoN#DAj1F00n96Hb4{X)YKB#X^ILsGnRlzzxLz>e zYOy--!?6Er4r9m33_Zgn{&6|AlMVOgXWC=7CT;apG@`C1G;IZ0)(y>VzDx^@C3dLD`upPpFeY^6`^e^$^<@;uR}DRIR}`s#yT=lJT}T6rKbOrJS#vs1)tFd!7rOR! z=-VcXIfVB&d&GtDL*m!s^4ChbM|n18L7cpa3gFd`n!6A8coY0>?NBvFeyDaKE4}X% z7h4tIM>ku&LNcVA2Qx^pUpwN7(0(?(fAaJ@kL5l>}cwEJpiK=;VdB(5(-nRaH7q z_J>san~QXNP)u0A!esrH-x(u=lzx1u5%}h{}~dvY?b_; z5El&1e~Lb=aDfpyq#&q74jHjdSTSnr4MWEZjeOp`@XmgW$;@Wh^>n!`oiXvZ|GoU| zwk0?<3jgq95SdGilWUZmXvDw!a8}n*TJS<{EJCl29>x^v!IYH$`i zSQ$px5kB;UkNoU7TTGu*LT%KKli&d4wzu--alJ-~>z?9M=~5QMsiFPLRk| z>YJSv{aHj8D_asr~9`n zsnx^xr-%`dF7Ec@+|^!EYwRG;YI$V{dzfwoudU6{2urmOy!BdbZG%BOEi!rFb?n@w zaG^401OU%!7DX7LN^+5X2$BT)>

d_v2(9yA<|3?U;$cx-1=vSh?VPY1GqyM13V* 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 FB)>K@tP%hK literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..153bbe7396bc8dd7ff95cf952ba29e533b7a3775 GIT binary patch literal 87277 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 P^ZHjso!tsv>{FHy;8WU_zASEyq>zAPW$e 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

9LBIVHkyRw>Z=}Lngm;`3w0#SR zKLg+|IK4BL6Ix0SbHSwAQGQ?TuB%{h>jX&ga`yjS`AdDH;E?VcNP06-z4Mc6^wpyY z(tJhw;+c7nicI+ybX8f^n&d&UBHQ2jF;M+fXR#dWasjV|%fw#Ji0uU8s>=s};->FXom z8TVN0J)K8!-qBw0%2EDAyYfMgbuDnL{LKoeS9Z7CY;P6#Eg|@Q%HzWpyHog_rM5y^ zIx>a9vA!33BlWc~94~g?K&Kei!+FLbLjY>PYHUZ!EKu`NB+$-sM*wf&UrM3j%kYeD zjXKI7Dg}AI-T83J{^^d`XruMUtGy%Kb}oqYMDAmO>(`K|Xcjm%xO8oTBMh(QYGsO% zu-Ud7aMUS*U*GqAZWagmmke=8;8}=q74|LLQXUwzY5+V{l1w5<3DbpLJgLLsO+GNol3y-%do2T3#?p^@jMS421kEoWd%?qXJB(M6T`_aGo`EV`;*? zY?Qeet`)?ZVyFZKs+@aYhn%xdu>sH;E{$u#6=@2X4y%e1R%jB3bQ3|08^$do>MbA8 zTSnYxU7o4qizQ1lO&j>6R ztQ#@mlh@A)xR=GzmE0^hqRQ6WK)8_V%`a`5 zv>t8%#xdpJkZ+r24`>a3;(9E$^BI3;6}y{GZDa(uNG;TmE->BEvyBNdu3OcrX8AO`g*WEIE!`Ue&z$t-7*tWv$cq*BVwZ?C*t%c!y}9Q>9{J zHFk@-o+@y&SL|(4pxvdl9)(TTLSrv?7E0VHyP@k{&KUF$LH`9**0icE5nJdV>_t|@ z@}~&Lri6WcAJUCOpRQmTwwoD^lnKX_Xti=ce>(+FL6⪙=H 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

!n+|;~ixH8~>fN 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 V*8uy}|BG)7Lg2y!T?Kui{|8fyj3NL4 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-93d91940-764c-47f0-8afb-11ef79e699a5-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..051078a1b74f7e0da260c029015c22d87c309616 GIT binary patch literal 90960 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-97a8da5b-ad06-4911-9661-36dbb07821ae-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cadcc5528ae23cc03a6d1333a20d51fb5890f561 GIT binary patch literal 81419 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�vV#_Kdb=x>Htq*0v`$pvaR|2_ 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

3AAEU{+vhd9d} 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 L(m-2INBI8%VpWsF literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cdc3c5a4fab8c54e1f78a6f313aee9788fae39d4 GIT binary patch literal 86161 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

sJK~`3?jT2Zc^eWq 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 @Q4}T4VTg#PN_qQ~r>S6a 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9674613ff91eab12d77f436b57d16acc3a2e4928 GIT binary patch literal 87732 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 N20yT-ETYQ(e*nQ$`y>DW literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bfd7f00bcdb13ee073e69f9d37c2db6abfa508ec GIT binary patch literal 83687 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..466e006d03539f49bcf2194136047ad539a552d8 GIT binary patch literal 86430 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 Od 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%0D5Oj@ou1X2 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ⅅWQk*m9y(+>olF|nn8JTi9NTQ~Th!!n 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8b05dc9ad2dd900ff87e2995b5d7866c2558cc3d GIT binary patch literal 88528 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

VTU^bcg%*?+Yj3dI_8@^& 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 ckF~Ak{4u?4_9RyS4L% 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 b^Rd1 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 bkd&H~VyFomuaRM3pao*!0rmj{9D@u2Lt_$k literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..09da836024c3230a99bf9fc1e4994559039a70e6 GIT binary patch literal 88603 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 Su(`CX|9Gr(aKMMVNADL86wl%S literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-ed4153a2-dc32-4094-9d23-e3c6db36d2ec-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8a83851286b16a3bbb1adacd63f131fe03cb6dcd GIT binary patch literal 79976 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bba7633d8e4b7f110dc176b8ba9db7a5721154e4 GIT binary patch literal 89960 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 J%+%F}{{Y#UZmR$Q literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-00658b64-c850-4cf1-a62b-66df910b5c0d-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3c65721cb1840dc43e9ab185ebc26e6b608feb9f GIT binary patch literal 92869 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�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

BpCa;M(wdcIU@0+!_;vk@HL!= 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 Yn1KTuJqd~b$B%@vri8>Iw?Lc!03(UW761SM literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-1986d9f8-af54-4ac3-9f96-ef9916a20cab-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8874eb1fb0e0092590297eb1f11e47fc3780badb GIT binary patch literal 83073 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®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 Nga_Obq9LWl|9^VUFu?!- literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-21c7c705-a7d0-453c-a56c-2dc7cbe2cb44-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e1836d6d85950c361644a7cac51dcc8346b80ce8 GIT binary patch literal 89222 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�YuqA(( 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ơ+2na9Kjahn4J&V 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

xdzY6g18dFu=KTVPOc`X~qXooV?%&GA16&5g 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-2ba5ab7e-be2e-44a6-9deb-12e7f97895d3-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..509f917128283f6c74174988798380418af86606 GIT binary patch literal 93034 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�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 C`73V# literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-30e9e719-9951-4b82-9e15-a75b47e5f696-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..56b803778d96c0b9a2b706277914bff75d8762ce GIT binary patch literal 57182 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3103fd69-e890-4ce6-b27e-833c6ea8de80-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ffcbcf72eaefb5c885e42a6378ff1884c3f1a974 GIT binary patch literal 92565 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®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

!$kcn1eE9>6$76;4Jp@3LZ!3_ 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 ZR96HWHmf-}{y%;=1i?!tmipG}{{xiq9=8Ah literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-35edb6a0-7e18-44d4-a026-80fc1e82b653-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..64f6f561e84ee239b15b4c3e01f89098ac54c1f8 GIT binary patch literal 81519 zcma&MWl&^Y)2@lTL*ec;?(XjH4vj+tjYHw??$Wqxg^iF+at@z>Y3=$NxWS{pYv1Q2(s|=>9kQ-1y&g|6MB@ zfJ5O^_20Fc|EE?k3t|cQe;)Ve!zBbr{Hsuy{|G|-FTwvt|0lt*$In8uuqePZXWY+G z{>cXgC>H`mkShRwq5fN$Y6bQ+?hYU33dcX2l6_50c5bDJ97p zgy<48f<6ivhvUUmK_pkEza-4a8G_TFFcP>pbIZujJ*?&AziD-HL`tx28aN2O;~|s_ z4}3r>Gl4Ml*j=`9P>WNKe3gOFQgdh7sWk#Pb9e+CcY7h3mcraTRdkqvT| z<+`)lSZZ>fTfOo7twBcK&<3#n(8r$dDZQjU)gFOBIO6Eho!IB;isKQ%Nh16e^%u#W zd8_QfMqNjAZ#o{7C!5?wm@DCaeS+tO%cx6|m7n(9UPhezWjfk-FGK3Xp^G@6H%Wem z8M$7{JVc)%ho#DEV5IVnhbh==u{){*t`ZG%?Stq_`MHZgEJ=wbhDRAUdlh4z+zZZa zKJ%_@l}9TcL5&OgU5>5qLB*m=B+i*Wt#R1)j&k9TeIIoJX#CNv;bZJ=$7Mv@4JU0u z3MVP{kqYjGbXnk+WvuvJ`KcR$?)0{tcQqT#NW{ILdzH2%H-J#L=jh#~rjchvor!A! zP7~xB#Pfh>bCu)=M^7ZS%GA-B{qUvvPA$Y6;iB#u4^{y>p_=9S7@;pm%@6Oo%2qVvQDi4Z!EUb?$=pjx0hsjs z4}z7nhtRa^i)ZF*A+saLXS?A>@^{hhB0bT(vs32C@YA>W_1m!}|5Ra;2efnT69mOS zcFvf-zD^bb(H~Nq$+pSPj)DLuQD9~nYd7F))Ln9X{3Xp+3`tNoFnaP&h|dUqrRERc7&wVMfO4z7%M+v{gbfgiIDcvzpzCOL*w}jn9D7_AU_r+U( z;s*vQT0EBjRQilydTyD{D{+GHt9h3)2-30z$A6lCysKtUbuY=5e>mLQW{CYUYvLh7 zdEqqbcus8xP^&t;nerUB@9s%-{;j!6pu|RU?>Dh`7tPcvc^LR@dKt1R@992PHN>BKj37kY8{0dQYi($7e5kYU$+hQmHc`O^ zbvoh);bM51^^AV^>-zdyUj;j_q^wvN&yGf^u8#jzTu5GsajUns5v>=02Io@u$$Z%) z>^0Z3Z1e%(*jKTWz(davV%R0V!z0+a)oUZU-_z&#=N#!IZnDFoIsl!w|rBt6-I;X_}XV0=(hRR-RL{bKgI+yt>Fivs)a z;w#Tnx0x@Xy~xOBYFp#=aC#c9fllmO!XKT^UD8WwgG-(sLzgJ1ba}BJ)aRtY3O|zW z`bRiQ_9~+s#UYv{?@{kP(d)H_;|}*DPme+O<^vEzh6loPBu)7?(J}cGJ&%61uu{c? zNLToCHz3o=~zF$#l!c1R<*UBu{)z@SkjQD{i=eJd#;qZNhzdkK2br6El zk5fGIzvT6T@=h-!E(>r%H)pl{7^h_$Rz`K%w)%O}_23O~J=~{W_toyWSEZ^}26jj}8Hgwim_#QF$MXWouGOGOC6Y9Fq}Y0ssP z;^EH}{OC2s1B_U%nOV`LBCihdRG&RpGrjzY1eoX}+a9bv!bf*B#?Ugl9FA3E?m-Wpll6 zqm{YjZi1?JC|^U@8Je}OiJmP-))I{J?puIOKmpg(A8`-NLL`^tk2$BhS9hM_!`^L{ zJ}z3I#Sm&|uK7j@1N=CU^3LyR^{CdA$EwxKgQcb3@QNk@Q2Sob@e{L$!?i*R>VJBi z03JZ?zgtLd_~v=03DwB=%XA zU}SEQ0C5!fllnnK0g>5YRADf5C^#`BQ3-S@!axZOIfi}-Or?k`C@fVOR%n2x&h7v} z=WD?*wt?&JFpfzGdMK`Wf~p9fWlo?JzHN2C6v4MHaB0HtlcLf@?wf(q#NL1VrAg2p zL9nEOaBOg7p}61S$RlZgjv>Tw?2S<*NRW?Hrf8UrQ)PTD9H-84-5V$V5r7dzTU0G7 zM^~D&2m7U>Jm}Y#>ZZM4^z}pJ6AYxYYSD~Pn|t6)?I%CwvAalTqnUfbFk@H-(bQvD zM@f?v7=9(xBe75M+#qqx$*?1HF6oF5ajt$Xn&R4Y-Jhb^uI@+T;SHgf<~c|)pXN=< zPgdePtsYcDKA+s3=2z~+j2E~`5TD_^b23FGd)OJ26ng$Us4V;r2SODAho+bn$w0f6 z5QQNMQQ?HAYeEx8=Dk%BLzDa(DS@e~ktm7d8>A`~ZQV4-oeR~kDoyMQr6xljE1@P! zZFti!OIuPLCr96aC5y+{exORi+>eFH%?8basmQtJx}d;wSe#744_d@TL3_N#R1t;e z#8QpI()>j+gDcsuDnnJWsHVVqxTvloNtG(3ULm#wq4`HNL{r2dR8vdN=5S2Q!0m8J z+a%ONPR5Lt6I&O(UquSrg3)wY*ScgWh}pKJc^P0}GOVTl&GbqO+iBP$z~I}Iq_&~^ zZ)iv(uRqNz%)q-oMAOzbw^hjqD)#{n|0o;R88a}J zWnAJoK^Q!-1XuLTuW1Tt=*TIWBN-N&hRg7lnKmtWR=HmHc-90lnE28O3TDwLQjuKv zHv1`->o!#RX?oyr<)xW)Rq&)Jb~Wwy`1Y(=qyd&tLt1DWKc}Sh9a?^e>3;(|X(4dz zeuBX#>`j!wbm~tf-*g%RcqBMO?zj+scQlbw{r-y)7Tslv_kqxrLoz*ribRH+$Zbj2 zg9vL(6M*8rX46XK@!RWx$a8m&a?A4|)oROYFh4!dyQlgA+((snF3;z(ALj?q!*h1y z3)>`)mhJ75$`9X!$(AWhtW6pizx2Zgc<4H~-O2H^Xv=AXe7U*Q?41(mlA+su; z8K!--qhZ=#HLXpxaLn4!jA+Kw3&IGrhE2nX{os%yLT=H;A~GUm`XUMvbqXVC5CB^M zB&ZN_3p%mFLPYvXfc|&PdL7MZrV(gF3uYlG^BA--o_&$hY7ujQ*rN4*EHU{(xI81) zfi{orU0Al>T7cVD1WzHg@^_GCnzvGOZhS1~fUD3u93_P)1npNUaSZq+ z9SmaUEF?*MSq;8=!pLIJu&Io%#*cLE2e=AR;%NwqD2E3`%26j+DPC{bRA1DTbW!Qq zFvO|Q1hm#dQ)LY!EzL`fv+RE2 z<;DuN$fjgF4&c!!%#OEXMSq^JzXJ-v={70WCv6mbT!qAC*xhV-av2Jz?g|NKvJ}6Q z?t~Sk$&a%JmLPR?7}C`H0jjEzrfl(Qkm>=pHT16KLEhClzZT_O(Pv*DbccN)_55j&ana}=;5wB8&)VZuUP8(_5exm*EJ?S?fRt*Oj5n`M? za{D37byWMYQYmT&2NM@T$e*C{iw@0(4W^I_u}7vZ)uGNDzH2pWw2+%OcIFU`Q(j4j z+hu}-7BnFfW@h`XXh(sku+qz(*YCwpb`s08b-l=A&zC>TPavH%Utkn;^CQD#68ctA zHp2-#kE|*CK~tGVxF!M?MvOR%q?J6-1Oh|-e3_xM5X)~T!x8vqT**pq_6LR%aOP4H z0|<@a8v_Rt$xJ9n+`w^y0RTn7ptd0JP~UQvf|lBBD^&_f;dwlU3{9GW)x$`kOG++Q zl`u{pT$4em+8=6)5*daW>?>&ai`k^kNQT&B1U6fK%8;$&H`0L$EZZ(n^oAJihKs%8 z@$`@k*COWVFhb&V+L;?t!DyIo4)Ith%p7%^k1ep4ucLvW0czFzz6j%`Nw*k-jJ^^z zh}`jHyOAQ9FgcJ)SU;DGI@s;n9;qmYEhI-E|9jrGfJMEjh-v9W4!tldwH8`Onk?(a z-;*`NJdtwJiGIf9HxzAMH&sLdQlTB5jdz2=3a32K>=U3 z?~`c1kaj0I#No(7POwOIrp{M^?9;qwP-G#${6Y{y^2N#bpE-I93j98-e-$AD3lWH`BvP8Z^>VRNl}9%HrmoH?y@aOq8(i>B*O#*s zP3*G{w7qAdr5BNtB5t%oII?B1;oqsVJFW>)+`eoyZ)7qLq}yPEBx4*T zvJmRu#}JApkl+z3XLM*%wx(tL#O^jg3=le`3Z~3b9`vG$DD13mxj|55_n+191V!gH zKC{*^F`5ThGQ_VLh^C0-8b4JC>5ZDg*Q{WX3mB~@((ffF=UJCwPpUQR*I{|;Tj0kv z2x5EL?M+^EkMJIZzB0Ol#FlcO{ah&;M;_#Uls8?iq(^vxXyr6Gl##Bn{Ezx!iv z7`QZ^%_aQF5%usjTbe?g_ILl`%^h;P^IJ5+`miQ*iy)S_P}S9nB8hXC%5E|f|7AI< zoTstf!+>Cb+6`9>e!!}3;W`!%F}!Q#!E*L7c5pj@KLZM>PXw1oG6=OtQ4=l14I|`P zth{`sy#kDlP+Q~#ZWq3!)sF9}P10)jCB?GM%q8(WOg=n1B^Jf1iG53en=}vfEt2^b zJ0!|@mrXUA-A`u!^0zg6tcDmZZU}9`SDsM@A|shR5&{&m8h7DSp1$}?`MNAH$m-_F zVzGB!fFZR)xc1}|OQ4jN!d;l3`w~(6Xp-{ram`s z$x)9e#aMMIO(L{wylYQPs-f+C4S zXViZ*8L2{C$$Zppl>Vrr zdRwi|=f03O&a_iAK09h*r_TKIt&XWnSH*3 z$)*pICQ=L92_@%U3fQUM%uG!>M0#{@%azgVl*%RHx4DY(*KeAfa0= z7x5lmc*W3>s(5M7ca8a;FeGymWh{ept3X-zx6**g22lVy{}KwB3RhMKM6Dng(4mfg z%HmtX=GVzN{iECq{K}cwn8ldBLBjm$toj6LD1qhJMnuIL!W(rkDfn{lm6`TW7v&Cdb!C5Nxe;n|CF4%D)1+Y(V`_tN9{Q@|`Q2;C>{M*_F zEPG|hSYW|i@oU7$B2r9+$l{gQfMg06P4uYcqnqs+qY7ibMkkHt%T|fa#r-UnSWCtR zME#8-U$bOD*PVan_wSnVnfBRoxp?+{@KgID%l9LR@-kH^$%2Mzyy}s~0i_nPHF}$u zS5`_C1?wsY;&6g;{OnYFzNMe2N$w~|1N+LUnc##ZVrKO2N&EV1MEHQkkx=lD{M?xr z<)NmuXM!mDn~&@y%HK=9B{<{E#dV`MlU-WM>IUiVf;|d;sp}B$<9jHc#jo7m1dA@i z4p*+t9#^bgsqVdPSV%0#yz3@i5|^gUH%`KD;zNi_eyPl^e%qjxVng(s0@#`a$DBv^ z9=|s78Ob)QBudyRpvI+l-rK3}-pufgSKP0eSeHcZvJb|sND?(4l@Ce*bewr5O#g@* zqDwv8kqyOd>$_vqu>IHFyu*lza%N5WLFW0<0rgi*CmfeASASX0Oa+oIg`a_As*i&k2JhnaXWb1WR?1^ANQ#<2=>S)|eb>vS)B57PrGyIAP z?B2{yYvT6&0=m~e8}q>V2FKmPis!_DNDVO zd78arF;kX`X}#EXsyX=WUXadi-cfjKZQz&k4SvIRHqm65egWdQ>{s+{QSGgfB;0if zm(`%S4$4M)`@#%JSYzO>&;dko&| zADNvC%YuQGJjfoQ?zVP!Ms>&L$C^q#>Od&23ddk{7S$Q+bs7P6&-vR|+%xqWh{?jc zlx>Rl+*a+bGEZ726?$cV1?3JPn0+wSEk%<;`DpgJE*8%yo9)74*!+z1r1ByC-8Smk z5TfVkP#%L&YMHhH_hh2uaWAe>KI%}ejn%NrY&QCFjPgnDK2PWV`T)U9o)&D&g3$2? zeIDc%h4E0Q^ricg)YAlraH%(i*=2LSN$#3_lWuEGXQDyrioGe9mExYeOS8M_tP9`~ z%^664!xitVElA+lKX{V9XDOiD777fyp=B#W&XL=e{Mhh94zjy-=u7@nwc}b|cnlsd zsB9dmhndIz$7Q$Vq{NChT@-kCl?h@Rc^Z97uRd?H4=Z^M)VHfX*a#35C_^5qC`Dt^h4ER}Jl)d#|4Epe;t@*t%#=h$6Fi zH6MYkI-Mf#OF;TCC*iS7*AL*?q#o{e=cD_M|KeqgFJ+IibIo2u*WglTmS7u~(PulkU~uBss7LHMxY zQr`RzXo9H|!Vd=9<~{#_<)O)_J;<&HZ`j`0OYUxnccpV4U;I~v?C_V-b&V?f>7K{9 ztC-PIGsC`&)t7w&k;~)NB6H)IW*K3$?c2wX{P^gPFVEOr%Ux!AI662V#vtF&5$E1X zT?t2JN8C%g50*#F=M(0V`<^zXuJG%|Lhg51!qyy5FiLO4MTGqqvR=}A={pZH;dh^d z7t=~}O-*C;GuC&nJ>rv%&x7c7d+1@QZS(OVrkVIGy|)9%v{_hY@z>{QGUNlC%NQ}D z`g4N(IW7Hk5<9s6H81@i?-1+rpW>eZ?SG@sjsFg4sZ!y!)nN+*9KYS8$%tWKkoGAe zp+P0q(^~gcqp^rU6p#l61r!!Sh?U5JEWsh5WCOnN$v~PJmNwhB{6R8jM&pu1im18Q zfkgxINpC|oso(KB8qH*0as#)YX2HOC#8ise!C=I|kSK6O(Q&bHUEy5@tfMk22WOXT ziPBO#Nk_Z@6c}BO08%P6MN`tb-fk#LXu~sTL#{P#QMP{Y*d&T$7iq(ybO*Nd^C~4s z3s@0$HOWI$+^itOC}(A?ThkMX&IK7|fId|WhYxOAW}q3k;DsGDvKEWN##n*Enp<;`&cvz^ zzdo>t*6)By)N>%`PnVnX_+9?UC#jS#NJ~XH;wwI+0G5vRX!3qsD73f+&}&){6b&5xxv7P;oH(N=TuQb7G@>8y;sUDf9@}pHPFq6&T|20%f|HE zl!(|dG)Qx*mXK)bV3GUgc^X_PM_Ot)Xtyv8#ZWDqP8eJl8zMn^{pJRb*4qB$w5B(lbNpS`#8YeA8DV zl61+G${C>X(IgQ^_+BZ9;_`h;u1Y2d#xaYi-uTp3{`}~`B3P+@zetB_Un$VMU%u3f z(zJDx++w2=hK7edmGOInMLVaBPp=?(`9&xN%I_@U%pt&!gkes91U_>+nkqDYZ4ULff9uY!ua z#)pkrqg%WaHQ87gdRR6KRC~THnI*BQME3C0w;_9GfpG#xlNpo}GX}zuu1aI&7ltHX z_UXR=)&9~h zr*-d&&aZ6U8cryoTzYj_I{i#=4<<9x2r<*)&SzRes^@9wa+by2szq~Bm_(2c?t?d< z_eR&(owq?hOFZh=HURh?gdOx^Z!0k^e7)D&-p#eaV6*)IR=lO{Ymu8u5DxE&^|4FD z=v!1EpHp$0SZ3kvId!@#08w_2USw3Xa;a^PKQpO3cQ1QCcs^ZRt-gXya;T5h{1eWH z`N3HviD#Bs(ySEUq=T)zfP(87 zGKYx_o03%a0D1w-FZa2_8FN9X9e4LNYx}+(2v170E0HPm3Y)czi>Fpb5$7Mmm&%LN z-!H0Pz|h`ueI33I%X)IeExf+CS&tSC+j#=Z%WgWcyEw$u>G{)G0$`jlx zP(pVnFav!1L3Pe&j}zrvd`rKm1;JNq4viR+BO6eZQEUUIz0Y*;(Hs1ye7$qj^;*(_ z$qhk5OC;SUsSxDP)?@OPVNySRvgjeFo8W#q8A(>wmT9z9&OC7ZUZCTBvquP1{!q5Z zn;g)DOMQP!?49z23)l5mcK%RU*L8F1KmjXV#ND~EZy%XCpDs%FTN2i`Zd%e|YA))i z@6N}5=(Q83-!$J^?vMPy;eU8wA5~%A#PA>0$U|1h4P_drX*5JgKRscg-OQuY9YX*c zxEOEP246ODRnKM8F#=yI#Dvz$h|@RZIXiVxW^X46luH^~vWHUrxf;|yWt}2QV_qwi zBSYc^-giN6y-e0D$v2Mm>Rq)&^%cDTk8o=*Fa4S-^prCes}w{+9oyp1m9k9sYyiC@ zZMH|<08FXO1ourVPc?gkKY~ z;m>t{0N~Ka%Sqc{-Dkm7FN?9DXL3uLB4|no{4H39gvQXA;pMB6TJa*3?SIWW2TfzG zmPEDT0AHZx2#uddv3{TEEAE9f(06=4p`0g)J6QI@kYXK0!? z^FuM5km={~F3x(U44WwDTFDnCoW+&5X=oNBzuY$-%-wdM)<3P(hkkL?zgpsN#r4tS zZ%oQVR?vpnNoS?_E+u224(>QYg(|S!REEQceUZscZuH8G?A{K7*xY z^~z@FVb(^Jddk`~T(Kw?QN~)ec$pr}-MgM8M{#bq$~j;ls|{li6V_Fd7|De0<&@3f zRV#!Z#Y>QRQ~1D|qI%2ow_oz;@9o{W5(6d7&7iC}LsTN=BxieqseYSyI+{;N%TWo{NzQ4mE zxvDS_dmq1kvr%n947s--v%|!;WkXdMrkT~Rt(A8Cm7$ljNdAJh{yLa{Sx^#eNypvQ%c&krgsn?0%F_M{!c#A*HIb0 znq3jAH|@&HvJPZ{wqtLR*~E8J*I`>a!Vj7hU61sT*3k@zqVU?|oN3yw$lg=_3QOZy zx~Z`DDs!{|epMtD(UBqG3ys}n=4b8Q zMl*lNdcj11r#l017N}*rR5o2ZgSkX(-%&?tsDC19E;wF(d;3y!Fa(1mwea^qTQtEU z$G=&}+QM+gFFs$;Om(O#UG2JBySF-wHLq+3hO)gT$veY0+nn8SA4|+Ot<~ChGdpvT zMDG#D{^t(@zK-8^scan3gk%sB5{#09Y9qX!9tzoyL{AQ1Vjy5^0w*le@!IUY$ zKfwlz*

lWxr)Mg3*0F!`|tsQ``)yry-G3Clc~~@RJ;sGOhk!e&CJ}p!5@UUHyNd zu0$)akMV9eFjqg`xWzw5$rjPYrgeWc*|v*gXj2k(e-T#{cd^M!!mY9ImxLr#Q&N!g zQ=o@FxO_K!aQor%<0a>E|4DG>;pNq?OolS7OqNneCROI|Fv)(rb+$SU2BH%qkGzlU zmZ2~6JFf*f2T?fg~s`e^l2^O z^xW;C1}`C2cGEFMFJ!hxyNkXv2#xzEy{CG0+I&Q`o-qcJ6dM*C?pIJU=RW`hYYsk2 zgnzXn;Lp#0q6V*!j~6@g6OF14nd`o`=T0PgsH@;EOW1>gM;yuA^DkIJPjj^I-8%` zKYm$d-4wY+EwJ6Z)*NHGqI0Wkglpf_YA_GC1}qajgdQ(lUonk7h#K|`)KWzr(?6-{ zKp58CWUfcEDjT53jj`|eUFEbj>#ek5d*QLm4ZGBF2R|wS7riA72J3ET3d-ByeUU!k zJXPQL&h6OMPR6I$74xL>lm!uyiZx4!>WwS}C@*Y0AJ3vMi?xsOAW=d7k^BoU(Nz z(e%mYu5@|q^jUBJ{T8LE>5=$MYyS`BH`z|(x0YAz9L}Otf$nv^HgR9@X{2xp?d`zc z66WX!<4yWy*E-@kkGa2$x4CU;UJJW^f|t89i!-~}r^@2s&n=H{AVW(I?tRs~OKWB^ zEpOSUeHHx5>({RrbgRE!=oofG7ATUs-$0uYr|4oMF&23>P^ zJ;XCVJjwkCYWpRhARAD30Zv<8mDgWb0M~;+7q!gB;h1+%;u=5=G0^P%>3MmUW&w8R z{>o^R;>j4KFo?6Kc-y?!v*%`6lJ+BsJ1oYsW^iF@L)ITjIdXeBC;pMXk6VDAiGY73-V1SsW9-5#15C9dhE`|xO3iF6$9q;bTY@%j6MMaNNC0Cr_38}EVoUT#%c z8JXfvkoZC1Ug%l5DXweO8q@m6Xd}s4UmH)afw=p#nlt+t$uZt-$h-IHKpp5J3xq6y zz76T5E&zC7u`&?|-a~Zaon~L>f1aNGf#n$IA)W`_y6B;uV|@GAiuK?m+%ar4d4rV~ z#(raeXpH&p$-T#`T7}(JWizb7!-{Wy`SEty9* zU9#FKct&7$8Sv(P#LFMG(|qN(sqO9S5;vIOd9-WOtz1!~d4@7P6lt9BMbARYu8K;ly6vP^n@4;A)eaky3`2 zUc?^h!Lh2-V|6xlmIVEM>_Mj)=8pIJG!^N;5nO_GqdEE-;H?ZnPYI$~*!~5OF z@{f)3^gQkV1~wS$zi@6zcKtaRK2VM_KGG$8fvADIls(&uae`jNhy6oolGpj2KlXhXFI00@Z146qDDPdKG*&UKD2?o=-F!=)KGL+0 zE5s)pzI_M1*fyGmw zd4lgNp2nq&;o3_-`VBqpc2ysf>@qNYdLMx~;@9_k%EP%%tUOBmsK7mUj| z-q!uUqh5R2@idw_;78y3%oq8tgavT?Sg9Uj+KH6E6F`;euHyrN}KB{$z-v)b<660@YKBtXbVqZE{!(&b{ zF>m)LlU;PTac>b^qB=(N$a|rTG@jyb40l4d{~r3w!u@WKlo0*TDI>I8|xdr}XHD)@K>i6#oi3WY9->kNeWUPx*P2aY~lv-jYBc;TFsQQ{vgfVn^XU%y2>B`%~VC!jIdu zKh1x&gMo^0Jt;oJ6s=H*41c%k5>LOslN>K(|F;oL`0erL9|o2Z4Gj`qBS93FEG0n< zk##Xa990zSlh9PvP{qYQcR`oJvuQ$?26HP`<|1~xL6;$mveXnc`NKgCbtOS) zO^tPqugMzflH!`0T86_YTDmsPno6J0tEP}K5tx=bUMLkd0Yq%G2*cM@3oY_!7B?*_ z>yl=0bxf9$G#TQ$2vI<*YbrF`-}(+Db<1heS=Asuu7Pu^AcYf=H!+}9LM%S<#EgHkX{F^iD|OGWz@ zD63rX-8HLxRdOlo!dNLi8-ZEVb;O@J@6|V3WJhT2F^mb z9)#b==~@lsC)Z|kTo?smbB*R?|AAh4t$w?unRtl1oBRiQ4TQ-;*&;fgQ91&`8hP%u zYYf8dCu-+;(dC32c{^3K68oH+4noN;;$Z~(c+^9S>n3%<{!jvqd&~lFm&($7@i)Vb z{hoJ|e)%1`df@uMJ$dx|yMeWd1VEt3?ASp6GT90AC!>XTfX^!4p+ID_HV8)X1CfRh zN@gU6V0vFeh640-)It*oMW`@L2Bqqy%@KqjHfT zzKch!c#gZ1BHtOJ)unhdFubpha=?`z3F1NZXi}mGg|V*N=(@#;(psLufZVH~ufp4u zvq}oGVdZL0DJPT!VbW?aD)KaZxAMx8VWMe-a!li2trgv&a*_`Obwfi{{Fb5kRn5pO zG}P7TlvA~gB1?F6ZQCtW!ku{M(S%(8Sl}7g29ac#a?zD4A;!sm0U7vN?~Ulfbel2vifngSyBw`H3pIM!#_?} z-XuT?vphdblascGR-ScoEC+m8@#xW<~zHi+66@|=g&Gm^= zf|iYLaZu$+LUD4OXoWtci#$8E=oOh*J#!zK-l-I5vhvB2N zL`}!@X(&z@j9oPyig>vYUn0dBVcpa^T8-RvI#Paf*wrF6{<Qa zp~R}%P9troI){7wpt{~tkQUHVW*@4aK?negRSqSeUBB8qa!@Ucx7{tC&@qv2f|#0#kSy1@^QBRU=m+zp%&@9=s|Ssy8brQmvmFvW?XTbMZXa`5{0JH&7@{~ z8G2#pdCB>BRCOuvVtcz6s?0Qa87g@zuhI7YZb#gQBh&|9iwVV0&mW4#!vYIc*C5tE z{B}JHY{LVx40us71P`z<0^v~&V<0F8Gx?UTI#6aphoCDkMNLl3??2jH*K>mRjwxD6$4N7ovJ+4Pls!YadK(mWlt@FfWbY|H?RhQMC`nyj29AX6aE@OV|>q_`@W zVa88=bb%5!FM*mIkR!wX!uKCt209rNZ@N;!lFXxDsVB=C0#pWAo4iaNvWFRN@H#-y zr;{Af`Yz@4>p&Mzs{PQLA;5bF;*=P;;0?Law8CLIQ1)LYB60BZ`ntL~) z)A`rzvr;=MBwr!D(zfayVz$e)7g+x1m-CZpuEfb6TzoIN06=19e88yP;U$u=5tgDL0mf`i4G3 zj6nLUP+`MWk}l;B=(|xPNya-;gjEylDpws2&Qv*7WDZVJt#evMmQ5|iz(;{h@SKb3 zBNJ;cWHZhRD1+F$&^CLVi56YEZa2d9tc3z714l008ABh#9I7ml>t-&KnFzI2qNu6) z)u;}!mJl53s^F&7#J(gL@pK2S)G{O5gLtbS5daM9-lD;lp3)k39lxJX{h<)Gj5@lF z^@g!J?#Q0I4F!6b5CS*@`c50lHdfIaIRDgv)8hcXX<>ldiiQ&gH1+@1>r}YuV*H5y zTYGsbwjtHf+Cv=&!_zbuelvHQ_)HPF8|wM+J;?=`@!( z>%2oTeOkZqCdJ(TW~4WLEBCga3?#!U$^CB)#-n1VU3mOPFH=qW!jsnOxzZxD<_>(% z0&xVR1v@@}D}&;tCd=0(?6m84SDtuV_H{u?Ba_0RMg;lt!Uv&;ntOPb@_SE+?DK6D#`YuN_|dMjnl}|uwwkE+ch^f zcL|ej+@Tn?r-(D5N7$#{*yZ|Y?znDUwK=kmgG#nLXhTZJS{5ZQ+o85aAUN6fzP@n> zkJ^BpP$^r+m%mMr0V&4jE8pVI32we}^`t>lKvt5cX#I`d&C#vhYSr(8$Zr!N#kb(}Rr*1R!~U|L)JA0oQ_lWTu7{3LI=%n%t2~ z$UNcEGJ%;;Sl{~a`7w&<5vuXa^yX3CKNV;^p~i~oeZ*4Lcv$A?2mIj)0yO|jy;~PU z8vn;C-rprgAT|5KnD*?v>k`9O0ANA^JrcVGv?`k;dt0Oxr#A7H~n!v`zZloOypY}F1?s=v-(5exn>P4 zg^ ze~(e?2uJ9Q**=kSlY%dA$8Vm&vL^egzLWxDt!AV=WXg1fAVEFfmgNsOL8ayi*?4Q$ zFI^ICBbb|tCU_Kt1awylb7Cp)Ovwr!*H zp6@$->%pUUzHkyE*=2?Kz+Io6kZ_Or_X07f7O1PsA{~ld-j(T&{0`uno}!pLx=b zWa<|=uGk)SWR$0<*+8AodD>cf zHK4bv8@q|K^XnnT9wPp!^32o3+wiyjUQwwplyLWWSnL8U;Uz$pJJoaeD2Y0GD)1f8u}IId3JTtb_7%!ke-avd(4wVXNHnoOk|6G z~&9Z`4FsUBL95n0l!1PFaj4@Q76JnsTA6S3Ds4IFb>-nsh zt^SYm;XfCcB1gl2lkQ_K^k+gD^mc^*NAh*a9WPb|1L}II+hl_O(HTv{P~OF8;t#Q? zf`$l*G!%S$=Ffm$vcsnLiEI zf3>Z(h7O|Ma6BI^8#wren(c%pN!7Uz98YFJxHO+NcKHDNk?hIA=m&(Mr?NwWTH zQ(Ien9keNS`*hD|sA=)e$65Ly=a3L6>(A#jwevIMPJQ(&9QNOp@zPGsbW-wJ|5d0j zGJ+t5x=aI%!?Y6$qtX^i&JHH~qn#VP!|)ZPqq(aP8zB4(<0*0zd&1K1bK(a58TS5o zSg%-4j@>tb%mgr8;U3|G8HH*V$b9b&_&pXK;$b0o>P#w@FdlQXQ?pnq(AldurK^~m z?yL9_mDcmw@)B(bKjb)UTlC0h589S{qP53y{KDf?Y~P(?iPgilk6y|iTX|i#x^Cey z+7gWOI+^m7ec7NMxm(BTJK$`l=TCWEanDE565o^c*vRDguNYIW*gJg-`HL@8(EJ5{ zm+~2X9v*`*KYIkBccavlB@fPj1fQS+?fWJ+-&%^v17Ck(`}+FZ$-fb*l{XS`mgOH$olLR}0pE=9@`pL~6nG zV0+i_*Z)>F?*pThwBKo1L-!i>_E>}&ynmOw=Ln?W=bQdeKFBr69YTy{+Qao{v8Xw% z6PuD)ajc7Zjs$c}N9T_Y%NfP6JiolG?Pc!Q81wYXtf!uXw|Xv^a)d5DJKsPWbavBT zTLKVv?yftqO1VG#o)Px6!dx+X%DvjvZR;*i8v2`;^#GUQo43O&zTs0NRl%o+%~&m& z0@%6PRpqt{%l`xbm8Q?dcDb*JE1AEPt67x$H;SywB-FYruAg>1g{(g*&y5_89@@aD zdG)5AeFW3i3);Z0%Dhvn%AXS7pY#JZ)xtw+%TI>S7T6bEyoQ}*?HA_ZQhYOdK-5Hi zxO$A&Oe@G0X{Jg45?f`l+SXVo{y00XF#r9jj~}Z(vUk^54>!|Grm5tFPRrZDoP0u zr>6q!LOs-q$;C3u^{``x6a2+l-{9Q! z#^)X@*jKwV&DXY*@FQY(wV~>o%dp3+VkCFrs6NMg=xX3(S?#6@FgZ};U_w-^E!HOW zZf-$Q`><mGlyXKpoXH&chym$Vb* zJr&ZHz@GiwVC%&u8_mh z-Y3eNG%u<)>KAB-kzT|WNXqnM-paUYtoL{GV{6-OJBTmAo34Yjg^0!mEOCvHL*Vk3L@xV(;3Z9ffSYQ}gks_6YKb@$>X#zCSMK?mq(C zNK;e!L)SZ6<8K=Psn@jijNy?(AGDKw&!#Ut_Irj(1I5T&5uV9*n(GGp)pdK@JU-~& zG;>+uJj9hTAEb+2+L}HZ+8?dZ(~SnckxhfX+18a`Ixo7;P6^DKqExSI_9Env}uBa}qSrw;;4YcM2%C%6w0hemeKOANj zXV2KXk-lJ83Fpy*O5Q)1npYLA!0jX52Ln5Y#H{%pJBVQ8Z`~X>bC%O#XLjlO}ZzRAD%I+ zC?6}^BQ3@n7;$Sfvqp0|TC@|FBlrG97OG>QyhtZEI&!e-> z{s^c2q|Vctal@d`;1hKd^4GSgyPeA#r8Ls}JNs<^rl6-Ej4 z8D@kz*x{{){7`T{+Qo}`Q(rfqzldm|3764|5F+DUlHj4UZ442 z5$OM)Ncn%r6tIl*`k?Tfw)>!of{6V7-!g?-K{#f({~t)%egIWolz0e@N?sutT`kN{ z3`5hZPYhF6`34fpAdKmMAY~{V^RhZ9TV73GDrSDTse&SCw1a~xUzO$Ld1W# zas+KnFG?g`!}P2OeKVN@?6*;&e~_W`e)k_^uZ*GKuYNcY873fJpbYaE-GB_sBrmuu z>#U53EZd^C5)?a|v5^GZs?~rjhn(9TJm*f>H%->~k5S_95)~ed?f84a(scH#R>k0A(Q>bqagf~esCIIi*teS>6@Dy0M|5MFzf-_+%eDAJa^vkCu2lgYo(_kExVy&5LJhK z(n)Qn1vWn&*YsdDUDFfiDP5MZUT8hU2gqbupXggm{RarsK2*RD@mYNiBvmY`5d4s3 ziE!$adBZ5S!!%9-KJifw-#G6EQDb^~;uvEASyfDvWOM~-R)}ZRV3Sk>3SrX>YoG>q zc7DKbxE!GeY(RcE)FQx~SV+^H+`D-YAf4udV>*!^!<{7y%b>6 z2Ur@oT`9xXeLo~{P;!&=F?GP;j<8V%+f=kA60y~Q6vkYO3wCAUWa(D<&6~^t$ zXAZQ9``qvFoc@b;e=8mYatupL8s?gIyEcs-q=xz$=r?qTPpdoC!R_ zib^*<&g*6g6fV(k2)u4apVqwY^Og1NA2+`7cJ1*JvP>D7-Mr7c|DcM`pL^&8-=>*6 zLdeW@D1AS$fS^nO2!bRLH{?$-2tg=U`4wgpxyxDb3JaVWUrBC$Tf;}dZhaReuc30VrDz>iYb zkHi6AC8Z#Owq9Kruh%J5Cz7EXhSY^AglW}fl#6_iXUfk&7mDQ&6hE46)r~Z!blXKb zhI_1*G}iI{*eDj^69zs`=r5(Qm^D0gk|!042APtmm})+rKQ>@LzVL^TUN@O?k2 zi2NedC>`f)acSmsiA3a>gCa3sIbm$2BnD?QLpjAy^o1l*&XG(kWmWToWcAtPVrNYo zcj8nT(-dVFP^a+F)Ozn9C8YYn)Q4%w@fsBT7&J)5>1h++$a*h3+|=2;9y2v4x_m{+ z`girHX{Jp#*DMd(U?Xl8RuM9#nBq9`QI<*eD0;RtgF&h1+J^aFBt)aXS&ql0h6!jd z$dDNY=)-7Kt}mEJ4zvGHZmRrXoS$3y+8B3p*!nZh0H`n@&}6WC@^)kz$B29?eur%e zHSU&p>e+%Irc(@)XzuoIBG;*-!!ncwAPzA&@NfHV4K-D1)_{gdJ})8F{; z+pLf$x<>a!Ej601dRuH$UaSr3rxEhf&k-Ulgm?#0ZonM3AZ;@MSyJ`70sj9gX&_ds$5HwTO zvK7FyRwh*dI8N`KSX64=)nvPr+h-){^ zCAlx<_E%b){wW%&g7Iu}*rp>)0VwQ_wU0*dPI)>% zTo>))IZ5ZiL0VhBhmVK(jynpoc}_Pr;KC1IBB9kx&U+h2*?4BZaEQN5ek^U(w{ri8BJvkp|N|Me$U}`Zl zzzURm<0dI;4Z-2EqKtWww14%;{_&?UgUXeVwSeaFv*R-qqQbJH%}%cEubrs7_FSnu z=mVHAovRNZ2t@rFbRo7}l-2=lmagy;JC7d3H^Hfib7B5vpPaPAxzxOZQ?6r!l$ciI zfz|?;Awbu%Iv&C@JCDUN-!8lX{(@i=Dm*vjoutF_rR?v=;ClcO!8aQ6!zbAC!|Jsr zf!jjXBEPOH^HqRR1|d3%OV1+q#T)gCj*u}|2k&HI_O6VxQZ*$d4Af>Y3;Ii8Mjjcs zhu=YegIb+fs~W}eK&34=N=EjODT5) zf~)J5%S)O@)+|A1DzqS5<0~)Ez4^T*JqaB zNjIy9H^u=7R5lMH5$(Wa1a;T>sUw-ny9kXXNr?)=fc@%&K%oy;fFnk$q|lc$wKAd6 zNkk6cAj|w^K-S`jg55uw)Ay+1m`wz&MK54ao1jagPee?W2otA@-P=eiNvzW}j|?NP zqMB|5v=712bY8H`vT3BZ6C33>m(MVP5G}-k#)mY}G#WK8Au}I>OofC^0+CFNzpFbO z0ju_dOdA8ixJ5;<0AmraFX0jnH_l!cvh@{_0b8{wu>b+Hkwg;)P*!;ZAz=B5{j)NS zI!DD#V3QQI2?E$mv*B!nHDN7Es?Q~{<-=2Obz-POml1tQ1jY8VMOue&0FpsSYgh%* zCG|FK3XkcWJ>jBc=2H2y>ZU_nhs)wx#cSs3+0QA_;$O5m(#>9p-BE5s+fN6yt6COG!AO`Dm<3$~@Wwn`LK`-JZ2@=rVt zOD1{tMi}CGwbID_4Xa$3oJgmUG{?d3=U8&ES7D8QO{`?~<&#gADWUNrhCrDyy?4e8 z3SP;O{q*|S!444e43C=@iCiti5G3as>eL8oh9qq8hOh>b&|G&y$>>7Dp`k@ptO#PgYC z55ZO6flqpgP}n63PIq{3XQ_hKRojAolbB@L$UX&*=4Tkliq|QUc&QD;DR7n8U@kc< zx)p@N#ZWmm`@~M60v3Daa7VRy#jG&8!O&c5@B+1lo;s|W3k)V?m2~DrbQxc&?r}jy zn3pBW>gli^3(%B3l!uo+x0*sJgb8r&XV=KhTBV(9e1@XbPK!CZ2|Cgh>#_b zG|bEzdmExbG7qNLYrM^XYGVGKuW=cK?@$Khf^lWg-S)t z#A~Qp)Ugy;aY8|4O~$4CARxm_$K>J zTBv`zqyL!1xb5}9!{(Zj%ds}Y3dA4BK}r7jX@jH5J$?+{)M*ZMO)wIVA!_M6q# zKv72vh7#|WPn?6uXylX9getO5mTc3H5k5z;O@#QliiL(kBvL+NccO}%4$5KyoBVcg zZ?+hYw#pG(g$uElqIbEE>S_vV8%0AA`C{U|!J&PK2I%I(%JTi6NV!@MF6F3tyKl@28{X#mqLL?FCt2aO%9(0de{R9;W;atiOlTX>jyy@c(T;mmP!(OzjUAn2^x-@BeEU{ckz+h(mZh zaR`%tc)GukkU2IgOG83JVk9c8BLJYeN+8aT{b)Ik$3{1v!@!^f!O5jIk-_D7KtrV7 zWwBJf(czkE*U(|L0uSc-Czs1nJVqiY`9%f*0Km}R{Vki8hg3b>5X`}kYxjJz!M?&3 z51|vMkJAyle|Xa0qSg{udmS+TvpYdFyFbtogVN-53`s*3KChsw>Jq0W_{u8Eb7 zi>2``&(qNsbg2Pb>9lw{)#>2)^!U-ihT|1PuI|0oE^f7`Rc@c(y{_5Zs2KMJI?3h9JC{M38%bgL`8Pfq+T z5^9B9+E!f81{=Z;Ko3BrQp_?G3y`)8C6Tg!60XGv#rUC_M=!ts)z#zaIrfs9IF-J! zqA_}Tem{|{DjF=mPOhk43fd8f)1F{Lo|(H{%dm_zp{2XCS>>-h;IYY~pL zUpo)5K^$!{rppcS_lVN#gD>ewFc$&b z<*xI9oG>wymd&+SfFBSLGI<<8jAd}OE!wiVw-VOmY6rr_0!y)j1*bs@iU?)r% zsPd5TGe2bQPg{&d{po6oE7f#UM9R@cd}h5n?1x%V6L5`uh%vrVnCem zDM>vM z-UUCEZja;{(hh!DJ>4wXo{B6U1s^wC@3WbF(5$^dn|FLfz3}un>Av!wnX~~B_V9iF~{z*98_ZgJR4Luk-=ZX3vCKQJ}Yf{m7NBD=j+|3od zSyN2#@wH2x8~N~>)q(qO4^OiN*FJ_brYGy2)JpHXbm`I3j~~44FgZz%#Mjs_g|N@V z@ix`~`AB-WZ8otd<)hl68aK)Mp9g<4WrA86U{L`(;jjE*S-kKDxr3& zHvYGzqO0Xie+QlY6-6sr>usAc^giO|9?CB%KmGxuqV(2D{mHiQ2ks=Pf1imn5uLHE z(wj7o(y}^ zN8AB>Q8&k3R&uA{lrOQxF$q3rGq)#_UFy02mIL40@@ih8XiSYZOazlq#m4S?2SgrV&H@u-2FV(W29|%!qy;>* zMv}n^@y3wgTEFtlBEpz)(L?Fu{mp|#*oMI%LdH~}L0|HFrwTC(8y35VFQhvm8=DYE z@dz$&+*zlL8ep~pS{fUz@y(Lm_sb9FwQ6yPdkG-LK-|_Rm=5EZpRIHT-18rZH)w}6 zU$C9&GF+UY5!b+a#YQxdc2V$a*FSAq-CJ$f3-WXJyWO&N=_wN&r! z{E)LTwte#zYH3<`6$5V2$xCX}Vpiwz;uD+voF_XqR0En`2FPnSuGt%vJ*XsqU zj=U1hp@emhk)!E)3nBXt>!n1dexPKfy`l zsQt1D59sPTTyr!Ag?D(cXT8T-f{^dWJpa3G-)xLs^?O;=DZpQ7-#2oT?n%TKPE>6& zUjL5~&Vy-tqcmM?Z%u1-s9TWYd17dzU*iw$)JWGi+F3QXK-Xtzt=a+O{ev|*4>*B6 zW|Gl2l)|<{COj5L8hY0-&yA#es1tftBX?gb60e%*SNN)%pXS~dfa-)mCWhNm8^-9BfUojn@N#13p z?Be$JJ^-;XaVAkyNB3u6-7z3l0 zMq=2Mi@mbzKyIskQ!;(TTgPn3Dtb6!*L!;aVT1n=B5;(G@GUAT9@cSJvh7>1?_ddc z%wSLocUHxj_+7&`!j1XqLZ)SP|kGy)m_4Sa^O-ib3z>92* ziEcn8_Yv9DTFE`&Kejcxg2xb9HQW2zgE`~h%Y0y^2i;@&8IUYu6oTT36U>zsDaL7G)YF8~f`!O15I=4h zmz@0?9c^ckxwT;^#=K}5zNw4DkzhN7yl!{;)hGsxSg%-5`zKJ3G}oHqLnY2vW?>)Y zR?#A1kJEAuGc`SGh&`LLDTrdDku^xzQ52(u*slIgfk4Y7yZW=atC3U5rCje_gi=bN zpmw1&iFZjz`$|3vh#x7Ib$~}mbyO7fZ#TJ*AIB{I+1%5Ul3NSU87ssnU`U(7pn6Di zmuxct+$LHLe^?`HSbvfYkMtL4A`|+*I-JZpa8EllN;^;vd)TMzP2lsUB$RKFFvh-6 zQ1r{cJl?;B45#_Tnp#%H0tNI8L^sLl79#6*o&d%a%8b(A_who%POWF_XGC-QUG^5+9@9&PBFZGoy*11{%-LS#M| zwB^6OPXJfKja^I9^nWtK^seD*kp6UifTio;AconQ`%>q2J&DmZD@^U;Zd}7d8F5k= zhR%D3-;shpP|-ScG}Y*W9c1s^rtVGXvMyd6`SMexKu z$V)5z(r@|JRrnVH{9laKWK6|Bba4`M!d28m3GIQ>TRU$UA|8(#a3_JO2<*(uj#S1^ z9n`Dstc%#O5NE!Uop<~R*ATg0jrK`c3g6Arpjll(09C+lm?*lk1pT~_mXipgs1ZoW zx5E&a0jX|iKUejP>{&+`YKJv!kFAzqzLp$R>Sn_v*wO@z@&w!LLfo(1%$^tC1e#ss z?ed9pm;+GXdb3jB@1(K#vYhT2m) z?ehuSIjH6Ir~HGcMQP8%dS-2tTeZEdOiYF#<} zNuBVnJ<4eGu7UezM&d{bgBhv~v)~StluCeHa1GVA^pTvA$JvLWDJt=zgFol(db9Wr z-hKHoFx6*(gM`wZV6!1p+jmsZ+qQ_`^={UT=wcavajI4?TmJ({k1%hUGtpMa^(d9n zbBLo=_rXzZO*?Ek`PCJA(2kN@C}WhKxRVCSImzDK6W1-5H;FjvNEkyt>fEWu9{e~_ ze|zpz-xl^xhq;e)<>AC2Ken*vHBsa{*aq!b&633;x=U=c@x(t&eKGTBcJjolQ;V37!GB>j_JN^Rgxby6dZOE;wmyhGIXU@S&3 z`JMj}p=opRq-STL^FUF9X;SaVhseuqOOag!tIJ)Q(%Ype`>JSIw@hiTv`A~08~S#_ zn{ppmT5szUJ2_EYG%om=i<3l4v*m~Os!M0>-e@l~$_P0M0<7qk2T^(5*rTT+sG;-KdG zt4*=v>2mR}rwjJsF`@K8gb#{P?#4@ggn2B7k|cK5-NiT34`*tv`SK~*oR-D|^W~P` zdCl>&{3F_4Xj^%T?$5REzV?~apQB1-8XDXjTSF`(P zSX3Slsu8!gOC@%bskIl!jQPF{++!wuha$ZGq06qC%p^pB+kjE~va`z0vA#T_&W5wK zmZp1{uePlH;DTH88Fj}Fl&x<))Z1J|2wu6uVknJl*;X z9dF5rbC+E21AmXcf3%KwU;4Y)0x@QtLE<~7F>-(j{P!Jw^W zQr>g)RLJ!|f>y*VC#)xxz|&)N?o(o8(%TCn6JSx@}VHNW*7Njs1Vt^CIPHISN z9UPS~N|0DvbZ3vHa!g!9lIg&}F1yGaAJu*UbiBYY?&IypCi4dkb-hV*MLPNhV_=-w z1hXFp6{}M_N{b) zJ>!}q6$yWic)J3|6<#|~o^G0a&RNDFXAYreCxeMS9kP|81VPCPZJ>!@%;OQTl}^*d zc8{2$8LXQIheKDEZL$}*uyHBm^C@n-(obvdYGz$74>uxA+?#tgW5MR1NXnfj?Qz#m zr(3E*LjY0Jtg9THhCPIFH)?WtrSInHr3r2fCx}J5*iPL-uRhQ-8Fwx43(IawUtg>K z%5-|QTvX{5|A-ySvBvmG&$Wo{AKv%T@0VJ8#vxP5=|fTTajsIg(!Kn%^SQsMZ*I7c zgE}g|2nu=}-2zI9U#+p>_1qKzaNcE&gpJ4>zvzRTtpl$UMcytL_Z2kt)T{Y&n1|&P znIER74_CT}$K|u7FJPri^e*dn3#u9QmXGxK#y#Lsb+&urZv>ZvHgE6?_HVLz zUbt7gu~WO|D4630j-c_6Z#^N8d`VnojubPSd@p=^(xi7Zw?1R*5rcywSvYS~L?2$I zlb|D>v^_0}X=YqXFAblm_d*9P@e@_P^h^`TX*Nci8)2@e>Jq^Es~gbV?V-1mfY>Ep zd-M~vg=C-1RG<$zkOw9ZIq*gIwF5IevbwG{uJfozN?`TXh!_JgVJoE5{-jk77?_S^ zu;1b+Mh8?vPL>}sEPtS9UxE5ynyl|Nn&J77a_|6f+WtXpX4mfHz*?WlX!#lBd zt9qQ1pI!cBPElQ!?&aKKc*@ppwdgi1Uwnb`son_0(*2jJxB(2kQ$q%QpWy%G>#|vE z4&>$4VsE_XAAEjDsS;cGF3E)*XNF6kUx-|qb*#{5vO*<6aS)QfSiatt^nAUO6t6Bn zJ@XH5i_SlE=AU>JZ1oD(-L8nsH@Cf?(H@@Dl9m`O82P+ks(qeR*XDZeDaHuDcjLeE zw>%%-sHs1uw&VqNyfKFFTwmS9F`ax~qdQxQe$!gKy+%U`n0tmM=ybAryiL!MQ~#Tq z6Sx;zYr&K{QR?)$A9$?631xhlxV%|BqiuJpyzyVC?fV8~e!;qKR|mM=K^`Kvd$u_w z2RDfdW2yKxF1S%yo0mTMeDf@Ik94EK_RAfs?^2sjd@~w~UbAc2`wxs7Exx;bA^TSm zbBf`E#8c0FOfL~oiP*ok-Mk7oM$bgrpBq-ihmYi3)#2Uc0PPRDv=PKl_D_4StgKy% zo2rVAg4U>P=Clk5Ja|WZqi5CZdMxD%voo9(Mv z3bTvDCoKc{bsAjlVf7wXz00e0z@P#>+)lO4%S2Z}cg4l_vg%Un$lE5-rt+r}&h<>r zh;Zhc%aZ1elR~MSHdZY5{6U^}H~dip%qDoZc;25Gmoyd_z`kWGrZKS|^)l$HF%ftvRpNq!-J_W?J^voTH0^B)VN5R zl_47H!Ph^@mYHQO3m0iP({W=wn{RP_A57@@qi4Fm`rrkc>Njcp+gsx@nf^e}AFNK7&N zmhiZY`c$O8x?0rKr6V&i1jcH7fXcf6Rd`HZ&4h1T$7Dy6h|Zh4gbKAC#SJDh*e_%< z+8>)P-k)1$Nhq{dK+fWdF^v8CwZ=MJl)Lb!$Bp7K9?zC|-a{54^a*9~r#*$(!n^~= z!%SvQwZHSp5|-AIQv)~pAiCb4`^Zk&J#@CNokDrd#5&%Rq>Pj--E_1{;Y^h>s?%oa zxh|f$3I62@=8$z43yUt)4ijy9{z;E+^`}fKqpmD5Wx)0Q+uvOC&{(R;=2go(E0(5( z_O;~tF21cbXXBuYQx9%62211y3)+%q)f(l&1(YTU{;CALtA{KW{>0O|)B~j}u})ep z3*+_KzuH`yL3GwynhPm=>I@&6}YBBt4BBs95Z6n7j*2N!g zJ&MR8xwqpr+Rv%v=s7RNt+`TFWyiNC=8^Bz<)*F~Z(?#r)RWDdLOy_g0lxzoB$LzS|O37*>*owTZ6z;Wr zsYykTMx?|H@@Mml9NokfGxiXHOi`s~`_F(8+d}8c#e1hy^Pr;DS4kRGRgc8Zw4YK< zO>WOKGb zbIwEO3;Z=_Zu5P)t5T1pC^@&Je9NBAF94~DRl>&06syP~g{y^E5!!*cq^|i;Vv|Ke z*9_2?oQqG983uSmp4WUhNNN#fBfL7NekLC(9hT8E1|6A<$&GsYznYB^;ncoiMzXJE zHCGY#K#I*WgW&%ael|0Yn{W|Qn)z!hrXKOURY_Y{KZxt78 zrG%McIgy<26!DJt3XNf>4(jFNy)Legm$}BoeZb`LZbXGvn?4#x4PFFa} z6rOQ&$xj9Q1$bO#H+b0S&x@8KxO3hfyYpRQ?hBb^Q)4V_K|GQQ`KSgTwdx~Xvf*^I=M-6w|ZD(JuEZ_ zJ4hznMw<4=K^}N4C>^xF(WuGzNv%KKD9tqPo{k&rs5QfGEL$le@7zqyV-|}fc2pJP zVstZtghvUBS$i&M57jqROdu&1fLTKsgs1yY%$6 zBM(7vZ&j{nnejy=NVCPO2+u>2@8zM>AWvEJKNW!e)nJV3a&?&ZVr2HKEGy}-s8IRp zR&}sEIcNT>s{+umj+|RQnKyAHvz57{tm+W)W|cCxKJe^7Cp+_Uns6-fq!Gz3WB8Nd znt56%^|o9%Z<^?HGT>~Z{UjRr_vv)jQ~FA$eto>3!x^n~$`Y?i*;Xu=U0LXL#G-Ct zWk1;CL3lol;%|vrzt(OTr1LGoZ6%)l|VbBBGY)U*oSIpGla=`ny~W!?9O zkM2C)X%QGdZ*n@_YOR{sP)!OtomTTsg9>L<#gd6PHMfKRChRu8WY}euj#z^K&fuOW z4{TSAFE;O~q*v27lheInm8)va)LLJvswZ^f;Ui%6EnX;@%#`k`lI{89({u6JKKo1t z&Q_n<_MN7 z*Fc*5(Kqi7&Psa}KHqmK>73+Tm0-t6>4%*5^N2|bi>wjiCD^L!gtcn*1m3k`m2-3r zu6ddm92Jw>RqKxu4IwfV=r?vfo`(3}Kh6-|EoX}ruwR?6+Eu0_%o`3?97Ta*C`vjA92g07UxDnYq}t99o(j@mJ98yRh1Xb;g$KBY_DMXa-%EiCT7o!Lc)Na!z-oRgjn zWmVxBj%VgfoO!DyTQNQ!r(FXxZnnbcWUic8CaFHoi_OLr<6ajI=A?3^3x?F?&@DFhxp^3PB-FP=h^&!8vp(-YMC z5x;VM4tKR;tLzE;g~dAAr;oMEFVEu(v*IIqQlJiL(*p|LHJ1EH7~JXs{(PB~;GJ|l zL%{H+CU<%J8E<|ayi>16ez}G@Mh$3B38!8Dr)T-6>;<;;W}w6i3c*keW;fr=nh>eN zL_pLjQ74HW_!~rt`B~SpfS}NcIa;!Qk=t)_-d;&Axol6VEuzB1zHI#8cz4$bZnW0W zp}~{!`D6` z9?U=7_>R(IDIaHf9=qJc(7;B6_KtBpCwRDB$UVaTF=dIN&J<69Lb6`fGw76t3l2Gw&VRavUnlNc=-AB2DE3PlUHUn!GsYvXcKAt zlp>N7i7Rb72!es3igSvFebVUL6iQCvmJp{0OriLhV|-CtL|O#IPqYIn1e`x;!6ph~&(m-JM^)cti#?ubPh(i8KVMy)6 z$H~H$1T6oI90S>9Lwl@yAzvSF266vD+_q{CUTn$|FYYsFX|De#R0ATx@4~+jf+hC% z_n$3k^Saog5Hn`H`DuSU*}wF^QEU+Ld_EU0*=19@*S`q??$!4z-%1s3bu*TF) zuQ*-K;F_sJnSw+~$t?5Q{*Vn`t3x1>q{<(`5d6ZD%!QmS^+&;x_n3;DtT;T+vOJNY zG`-^@uS(Cg4{1WICsXaDZ8r$S`-z}bY$DcHcS%edxUGAaN2Iwcy9Nb2J-LGYG!B?< zopQb89_I4i&EZ#!q0ya0Yl&$TO7#C}8Tn)ej7#ZDQMyXmPgL zu&tF3cQ9YS!Q~jO(;Tq3X{Sd%%;vdA$L(`eynP`UPQ8aZ9JldWDH7sI3!zbtt%CNx z=zF0pU2KrMMxxBUvauMkANZ~>~OvB;{@ za=;Y+RSp9%gHJ*5=WXfR&K_0aD{pe9paldh3w2jn&QmwAh;_Q4*9+ z;O-0gOe52Z%z51vWB15)8jFf1kujV(OeM4@1>*3IWVPqAI0%x|F^^AtK-`g@qD*#& zvmqH9ND+s&#$sQL$J&dt=FBlftv^NDB>t97TKM~+tLq$HrQ!3n4XrfS^w|_>lJo&} zXB}8-xh(~E73-`@cv*g~|8wn7rt*jZg1d-*G5T;&Wk1Y(ZfHarH6ywSt8(!YTEY47 zzOORrFDhsiZhW47Y6I3xU*;@uj4*!A$+WTC;@%dT4 zDSUNzi0a!GCKoEW+&gN*M(&Zw1@EHydGb;bT@%a1wdR;;g(qg2MWjpFU))_9hsNEV;O_3)c;jwC8~5Pu4#6FQ zYvZ0^!7afpKmz3C{Likt?><$x>aMrBo>r}gxz=xdV~#PajQGLxMhxB?Djti`e~M&x zjD+gBNM5}=Dn%to(3==>BN-8anFmssmZt32`v||(dbwxjFG7N>n29;zKyJE}^hSDJ z>#`xmSo$XQ2n?VIis#>KMmjXq;4B+bkkejRUv#q~!r@7+31>6{sY+I^-s>u0Wb2uq z2Y=tx=^S`$?eC;%CBxZqBa+pg;f>$vtYQkTpvF8i)vQI zug~M!gFm9jYm4MZc}vs;z{CUa7j2ZHSh)Hnl9HG>nyGl^|7y{Nq6~p5i*DbNs-&UL z5*8shbI}nm+_dq-gmPKFX4mCdh9!KGt`DN-iFHh;4~VE~!j?>D2heNLNy8U*2StH@ zAk3zW>*luUQPw8!_N^MAGM9mgmyH8hAa9dnP7{h@($(+mkhL_a@B(Q)Q2bmqD7l9- zfp+GSjzRI;@W^|LO%Osl16H0Y`%{U!$W7o!arH2Wv2bXy^2*8C;%lICYXW2vf7}8u4poO4#brq$gBjo>C44tOYm)al;5*mJ z^hPjj%L2LEw^tZeUTlHGq(S)p+ubUKn)}ltzh-v768fECMbR6BLR7~S{K(1G@4@?S z;{T@9cS(bg#Cr|k4F~d)6)506?8YB=#G3f|(`ke`Z0>#1Ukyz82N;%r4!jw7!HcI? zB?nN)mwWpv13D_KcOwL=v6l~-g@e@W4x56Zp?S}TKVHQW21UfsHVF8|T|iVt!)JXV zJf8J`Vt03j6~wqY?*|+12Wt%87ZK-YcIJ0S7JpKxS+wj@^asP!KVaSc{Nl{@`^5kc zob0xA{TKd>4SDxM^*^@jX)(fQvHxkiMp74+lTyQqM$g+U2} zLHd_+N4y7vq8J7T7=l6K8-m65he4phfkjmfgClGnLgY$;#dHpXr??qHmc)U>O$%KggoNZ{mbx+VdR)FsN=O#$_T0y z$Cx!!(e&!W2^-wUSwXnyMo=q2drcI(D6U|AH^(8F7 zzC((e*cj0hsZSr*4=JCaG2*|p(Eq9JRDWRK@Mzy-mb1)=B=kCG#C$7#)45vS)&2%T`J2qzfP z(B@8QR`F!@%o=c|lgv5GvlaYEwC}ykZ48TME5)4yE9#K06d>`}N?|(cwvm2qui|VB zz;w2v&EHt85(w?gopW(dC;NU8E!clM=N5)fzK;yYeK1YdZj zXfLu_o9xpVQFsBi|FHcd*>3>8=qA=)^hioQVAhNBpoCHErxA8w&I;vIpMuy;+^3)u znd0B;r{d33pF)0(7Qa8AO2D9{gdxe6z>%Cuq9~_?1IB<4d{C)>_FzvMx>8iF8fk#z zViZ>f^)VPM^Rln$aj`;;9gHGNjkgr5s7rH`b0*8AoEon`RtD%fljDj{O|<)WCT!zO z9(zP9*}I*V@)4>a0jHf3$wx;+IHjl{t(}(9PRHOvb` zrd!G8!>nqntdoDBTP;dos{vurEh8nYRkp3uDP_^CGba43y~bi-_EWDpKJ&8;KdbRl zoxWJhT7!EgtJ!6|LI2%a6Bw}`gz98C#*)>N993__>|`|SnAKK<*Z@{?GG49A>S&B= zaCUGq*>=?LYCUdn6Gk`P$NSa|)#LCgL^u1coZb6%ywSJk-0U#ipznyE^W)l#`O}EO zz(WUT$fJ|R`){HlC?OXFGZBQyyFQGQ#TB*YWQp;?a1=$qF+ljj5(nLIj81?%UT@Zl zXw+~b@|Y>fh0TKeJZJLZk=qZ#W(_^+Lp-M9>ubdh3?RkBUIhSOw!u#!0Ng|P@q-5_(-tRv&vqjb#l6@MyzMq4L zK5Wb-`*yT_zjV+3@clB`umAr0br_N8KISL?ao(NVlx)#s_D=zGUOV?CL}EYGK7DNd zT=du&(|_T>3A1%*{?z9eaSh=N+TDUYPbduB{ni5XfzK6&kHjLru9zlKqdJ;91LJnFCQGl^T zkrR@}%UX;SAl^s)%ZNx&#TCV3N{wz}h)mQA!R8Et$2eS!CZ6WP;+3VwbOOr|?ciVv z^^H<^f}^?WrDB|(;YmlDWhj3&V~TH=5)a&rimgh;NY2XO5K@m(8;{_~ipt_rS&q@t zaL1)+TH$6xWn~sC;*Puy@Jos1nAKC`_1dj)n_}fOY_t+gj>=dtmc}*wZxduz4`|wJ zKj^8L*@)H52@;ElI9HwB&BM3ieQsWbgWN zitE@((Vt7ez@tOTKWCHwb_8k&!I2WnL8=s9Yf7{z9Swdh)DFQWbp&KXOA(MPAl?d0 zNvxpr<5p7EUrx*Rre!EkRkB-!1HvyIF$j~SseimnFTto}Qc#-K&b!N~QLSV#m{Qj7 zT+VDFKxVUMo-yi;%<5=AX7|WdF}q63?th?T4-S~JfaA>>A!p!DaG2Gg#Lo?#(mmnH zC7HAnxzAlptm3OynsYSv%4zAd&pi`{Gp=UIkTu*eB5lm`^WyY(Evd&D99LN-usBMXPwNU8sJ& zXOe@h5rb!0guo@)BCyv;VaIDuF4C9QXfZhgrZuAlR!g06XDukvmY}k_WvGQ`MliI1 zc>UF~ETuEKmGGrVJKcZp0PG-;N0ba#RgS7wqacB%o!H1wK|{f;G_JiI>B?8iAja&V z7@?g}rCW(=<{)j-0K)>b2zQN%<&!HaT`Q=>NUOe~VIYNtkRn$x?HW!mmm#qH8p# zT-}yM*x;adZmc$@kN#5IFy-*cWdA{5XgE{FLoCg-lFy*`>ssS;53Bc0ofHE zip5{jDy|p8W(eU02-U=Jl=7EQEPZ-xbNkvDi*HLJyQX!VY#sM{s?}7_ z0wP;{2`imQ>6&OtQlodZirFz6qwHG8m5((#qm-qf#ORuiFMWmCscZI^pO%*%UsyMf z5Qrpq-Z=cf+f?1e`}Kv6QM(1;JDQ(wuF3j+U+`K8GZ%b?H(zspIq6^ z)X!w=SMO8*O;S_PsS5RFbj(0o!*%{epvCKnpX_h7%aDN26z{*f)ZW>bLtzUxVX75} z;3+x(?Nod4hxg3SvhLx*m3tse0#y)T^Yb=ZPQ5goFs(5D`EstlY;=FEJCPtmA?YfS<{#r`*>=DC<0Bwycu8eZFW9BEi zDc#1_%qEO_6zi8!qoT~LmR4Icqw!(WMlh)fu=q9^D~~MXm%R<7HB>rjK$b zmYEx~<08CyD+MQfpM{N_?Cx7PFYM3;N#@(`^b4Bk?d=^{O?ExAIyZe=ge?;1eTu&I zbw09xI6R-9b0jOeEI1ARA-oWH!V4w+)goRzvk>~uTRcO^Es1Qr81aj@6xj?cbN{j! ztNt)X5X|KcVOzkLG3*D-oymXry_AyNUh%~5plqnI?|;G+l*F7*E%|L8`O~abQdlix+Z)!JR8nUuJgWSd;m8E1PfdI6=5C1 z>THftyRahrvkq17Y_6=ju;u--G5{0yQ&^K=rjcZ2Ny0mBP+4gApWvcNCcLlpGiobYvzWHjAJxAz~Vcz2IgFg?Jp7CK{by-lzd zJtW-~npFAb@rk$3iwZdaDi?B_n%;NBFt~H7o_v?_Ip~;e!EDCt{cdwu^n|Bac+Snh zD}R^#bYiAw-f#ZC=+En^BzEs&%z$SZQNN$OgvfGwqjv$3+Yi-G6t_0tysH`Cez3>< zzRIF}+))bt*;d|rTQ}hS*@EKS=v(jCuKCAk#*9O=r{CX(uSD0BM3*C?iS|Y)MOr?I zm0B|fZp?-FwpW{7I@t$qQC$7%8Wp=jc_`kNTMX-=y@7Z)eSz%)J$)IaxDMDY+IbxC z8+iJDEn2d-3rppXh!S#hLL0RIWG+cf9D*p=J-q*z{5-}Qa+~PZcSwc(0#ymQ%g}g5 zRL~5V@zR9Po(wwSZwkkCen%*{?mLaSc|mo@c_<}%J5#dw4afoBR7t#HaK(NER1Dm{ zd=C3L7aO@&ypve(7K~t4JoxQ1<*$}&;6L2{&t=RdhhmA5u5E0i@vD8~NnVj2&2~yVvQ=01 zk92K1z=>eLqJ8iF!;WzA{o799Zs6ai_osnxA5s-XGcpwWIMR<#Jq0r#zZ|g=tWc#l z-Jz6|SU1KM453YvEo6Q6&rUw#8hgF;B)Hs|CFs4Q<29O`Q9WVCGrw;JtD_aSiitCx z=R!?pOR-otp#BUkk?d>-yvA(>4zIJ?q&@O^qR^FxQ>>pn;a?j5vXgnG%_PQ5iHT0a z<=u&k+9GWNR?6$eC^6Mej!Xl#xU-=l_!{ z2l7x!=K?LIDa@IqGT%~pXALc}D$qF`y~|#=e)9`RDuBA%aRYxvRN36-pU!5z1eLj! zcZx^gW|ZOt&V>@&)4tRG!29F&>QW%~Hi`4i%Z=>p{_ro`ykmjeNt!alDXdel1WXv> zf3&4e9>OD@|ChEzj8OM4T#oo(Y{37i-2U&?zZ?I3#2+>v!{+|KgeKHb7&sJS$&xS# zJPIC@;ZO-A0vU%!F-LM=3K5-%%Vx0|0v~}zDISJGZG{krMz2~RnJPVw24FYs3*)Aa z#vtOgTCA}wAHgISc0F4kK14{M6c0Ir!Lu1dpq5d`5!M=m;?nUc(rL9u#-YKgp)|YS z(II5OX;r9}dX}L@0QDO|Q)P(b01lL1f33ao86qyrvBX?SNMa6;t>i417sD7LpWJfI zaC5X8nV{R=SSoK!G6{+z$7+k$X*8KAe)17+seNp$SkQ0N((>_zV)`&Rb{yH#;S!Wc zG#3x)NzG5#F*q&Vl61I0xrA;m$5p5nP==yiR2qRft%5wASgX$FM;ei^$O)(}U1^0u zp}^hyP8K-IsF^Roj8>_*TBFLVm?iU=T_( z6R2H9y*+&n2#KVd846VaHN$mYB*_!hK&le7!Y9y8%YlQhYa?da@L4A^O<-q5Wq>M4HdB)=>7}Cn9sor zV5==>P0DY$h9=qOi-~~bJlpE9HPMhS;8r;QtTkl2KuOoxS91Gssqh&+k{A{CiM1e0 zD0#6DN1=SBNsKZ+(L^d@yV%)t`jTbeA+E;@Gs{IXTm5@4MkqF*=B(Wk`-|@t-)sx; zWRlW2@fXGqgjoGd)i~n9l5zS;h%94WAMITPq`^`JWiQ9WE-_jA<^<@$XBj~xA10y; z+g_SZ$|(|#@*Afqx`+Mlq=yO5c3sd!YeEqUD?b@d5=Brl)jo{R#`iEw9XNCb3vaCV z(+5g}rGXPjdqthAS%MB^6HI?qUp1 zl!zU%JIXx`v4FxUf~=J8q<#`oFd$6$7kGr*n&=l@gvdNI_<(TsB`mBx%riXyR19tc-Lo+cd%NL136Im1V@E>ZIbo+#x08;=tx&J$gc?nZN2D?<5_lZIEyL)epmGuq zQs!)dnpX(G$w9G3Qc`*8G|M-ZB-~OnRZ(y#g*p1wG4b4;y4=oZH~YvMd%(?`_9$Z% zf3+H^ApuBSq_7l?;}%^iP7DJEgSM>Z(m_uGfcrOX>XL=1Fe$py?P=49e6pCXH+gE( zXe4PTz~&`wTrM3H(0z0RxK5qq`*;L-F@&!e4FpOr3*k>7aTw7|ifO`1k4N}=0&aV? z&LV}pP{x4&Y;TcF2z4AU=bd1Ld^x?}d~H4svqa_`k`;zrRWXBBk_i5{lgG#iCSji7 zG`fjI6mGlOIm6YmSu7k193NC|1uPP|Q*SzArPhimTZ|7yvOeLtQg%g&Vxu0zB-0rz zsSY@d75dB|!MriU_B5OsqAmA0$BhyCq-=Ogj`&=Kkr;7D3?D5dIXenHLHEKXZZI}= z=n))9XYFE^A(Z?Tkp-y)g^`HYK=eMQ1YRxFPIkjx_g*Ou_5J6RAsk4WK~IqlOfJB! zmB4rDY}fO$P%vh!?0PW#qjaqpo8&k36i8aO8oln-e@fUgwiG8<^k20*2jx=4Mz5!={2 zu2_QA>Ga9sNfjkhz1)>?863+y)32-uwnY-&8F1so*)q$hp|~NXOOL~I%{-|`O7(OH zk*M;|69JAD%6Qp4#y47r*-Eo$%05=Ze^MfmIYS3Nc1I{4u4GYixaf@VZu-Wg`6 z@Gx+-NDf}#MxKUuiF`X=E7MB%5QSpjUu%C3U#m1bZL5ae^Nd;$g$_G=FrxvHNF3i$ zUhu6(iX}o7-6@$$)ni!9>PDXLk?B$3Lp@#*wML~)nIZDyK4*GWt9|7PDv$d-kzv`| zii2;&A7Lj2Nu&vaAoS`<*%e@s3GLqq2V|kNqNd;pMRNv66CkwhFW<8iw zE@i54e%NfDEle++qck&k}+4H!3!@Jk< z*hz>Yp?T;l1ai6%HHe(t$`|MPDN7<$x^DK6zlj;ck+mC_?Z|r>WC~VLWZ!LBT<{GaX zv6;>e*2ZeQQJOmE%A^#22pPo&4VOl<7Ka_tl$8JT@{n~El`Gc8lqU@(4<{*<*=8DQ zp~F@5ezxkRs>jRy@#o`#uT=pld*~pr|Mn>YSCpM~Xw7iUO{H8y1IwSwm|i(m%qwJx z8v$jCL|KTE(4lG?Cr?baihXN&Z&?f=_?J({lSUbdG5ZyBsbty|+cEAS;MRVAHwB>B z&Zp%wOqFA53eYoLMh)-7O@?v52V!d>yGo0);o{3Lr=dK(vrpmKCliHM9#NE(u4tjF z9qMb|FHRQggz6R1d{L;12uJr@d_J$RT`WNF0r=qUpN-3@Xnwf3=-iVgCXzS_xX3&Q zb8}Q;DI(}FO;B<*LkqzZmNN9A$RW3mbl7sa){gH8MpiV$q!HNee22dKIdGxF(Wbwx zPT&RUg!+zd><{8dWrGX+5AbGi#gSYob0o)H=06h_I>ORO&mjl_xT7lIjGBo5r3Klj z0ksywD-fSQ5(mpbcO^oj6I&7-F$~pgkRW2M*~2qbMAG`}>3KJ>@O0PWhzPvumIV?v z>fmM^yE>dG>;tF~#BB=(t-FytlO_%$uWknzc`fp10- zB<$p_;>hq%B$4p?J#R$ht8!!gBgYo0yCQ}l_>7=j&Al^=6aXOB89d^qlxb-6F^L=L zV3t-SGLP@Pd4D%oS&En#j-cA8fErAPNH!uj)@Nt*@mBlL5=Br?SaeL-J&`okSTPb~ z-^x0=-{KwZtygkiOEOaLF9w6GPE7=(hTVJNjs1cQp&%k1Uce$4o}C|gcP&8r^DYw2 z!7Fv3UzuhO@W3&+rZnN3m~qaT=FBPtsW~8&@}{oq5T=BhE2Q@0a^i+2%A>m`=0oK| zyDmVkTRF3>Jxi&h`N`XdGilQhMNJGocf#VJ1p{v6+AAUdm=r-maNpztiQ6 zo{rV7Ks)R>TO8k#*u`>GE~WrY#ToWLbPiJxps<&Z@gF=dAtY@4hvzl_7oHQY26}(> z`iJNC6ln*GwH0#J^d{qI+$NQao%I5r<(*jKyl0j51Ax=3%Xaf!ZT-+tj-7Y zR|mFN))c#~MH(bS_!({4m7)uh#U72XMFHCrQ8wd2R$|>FVhUaZzlk>>gg^bDmh?_9 zX+{%O9@y3A3vs8l4FBd*Rgtcuqu`?Qc$3^&I)*!fC!Lv5jDt->uWKrtVkv$Zvp6&)T`ylU-{oxnV6v zh~@=UAqv(NR}y8n=2PVkY1nuHT)yWk5K5dS_=nLxmLFlbf{0H&&a6X)?Jp;Cf zo#-ToNN<-k)~BAy4a?Zy3(p)spKR<3(sPPM6KNV(idiHwvTxwj9u!jLQ73sbcOJOk zg|S<6FutK}G`;5$y>RYKF|XchT!f~}9vtOR9c~wM=qMhu2(+eOc^@mCd})#}^OyPS z)~EAU7bNye`+Ff9!$c@jL@woD5^p;=VciK~+fSzkWD^<&i%wMhQKV2}bJSRsEP}$m~PdD9u zNEfT$H5SfKKLcFb<8+YE|80$XHP!t80`c)Yf%t!~{{MnFOqf&{5*DRoEYK1z z3Jt&kf|gjq$NU3v*>xD2$XHxDp$smMaF}>xX5D&FOG#7$5tkJ-N2)v;flSc723lG^ zj72FHB>D_H2KxypO^QLS{l7t+LYz*k45Wlkh@Mjqvotn^&jct_%$2T;&tx@h1?M(L zsSt5m@Pwg`QYYqc+f1`bHjk;IAlegDNJdyIMesRl))t%L&BbC6T}z{% zs9H}l0TU$DDTC5#qiD#Ka73G1sXLRC3cHdBh4A@!>$ykMVZdV<9EqZ9pGOmc{pxCz z0cxAIDqL0jFhJ>C21gGRh!$auKED+oRzveI=^1|bIt?I-AwxsHAc%Yb z0)NW1)nVE_66a(y9A2P^79J;3c{wMYTiDI1OVnqT~(T#LXcGG4x9{!=1%h?Iw zq$(=WzSl8~V>6B>5uca35(NRU^B?H9t3*)i;mFl)e~%-S-6^p3+T`!%Z6fLUaNTKH zl5Qu}X4k&Fc+VUCHO9_*BIP~;ma?AP5AaN~B5775{8;bu<^F0O*>mKzKCEMQ4Gq2b zmCuQbA(PaMRhz#%LRE`Jt{2L$ILesWZio)3DC4(=(3p8&usaASn2U)xPJqB%j9G~M z)=++89Sux&IbyB~<#YzMJnq_M!<;tBxk9^3?X^1JFmhb(7HCx5*aao8&Uc1Ad>#bV zRz5;e(V;BP7$z9ZdP7eHH?1hNZ11QNyV~S(kQ%A~`tq1|ouJH!k@3mdDw+BmAEMO~ zM*(^8erE%U496q~!k=f4-1{q;`jDGtqx)}%RGERV$=vY%pDc!`pX#=oX)e%(ogE#8 z@nu}#1gOi@D>t-}#v$Bpu2T+H%EJvbEfbQC26ajliuw#}i+gN@jYyWAe8UD(z(#PE zh>Oz1tV%S{(;GAHI4TN-N3Se1yy9P%Ej-pp0IJr>Mgqid1O~1R265Oo&HRFfmunrJ zm?i57q;+G|9!}WoBa(fsSt3X{uba?GZxE% zZ=w+=MUlxYSH`ystt=}XA&jOP2wWZUSf`1OALd=1C#R#8C*oDM7)hx;I9`lIb>!n3 z#dVUVuyeS}%md1dvEn-__q9e+D+0}6u7*p}R0+~_t(WO&x)O<`4SVq#yO*W+rI8PY zB&UcVc=@#4G%2Gt)>ECzR5{GTG@tg7u_Z~9p;{UdqcLX6nMUg_>9BfKK=}+ImdFMQ zrgf=4-qeGzcmU@wtuXHLbRg-9GhK6uHf%DAWV05`EKaO)T(3uoFA9#R<1xW)8eK_b zf)+M+h2?tLA)^8?86i+!F?^DUo1DLy*B-<|@j-XZ;~)Z&6BbXKZ+ah+(m!5K;9lXyYlv9w!67UPw3tSRwAOG3h+m#wA4cas+6Wi^5WGh-wXqtj7(&U&I8 zCCN(f@dNRYWRqpqfkN)6qv4;j*NPGYfJjlK&Viy@C=sv>O_K58BUEZTg9bhb*Aa;p zbu2k{02_iOft5;|uFpZnW;l{ulp%_hT7ZG_w@6ZTcR6LR>hD#21muO~a*;+T%1I~W zA3I`_Cvrl++QdI}ovh79`mZh`$e2H5b6QW7J0@L*R!Pr;$q?45#dw( zZRUOA+8Y1~`I^6ixV2Pf%Q)@4nG?oKVWVkG-IMM-V-!pHEbGYYbUx$u*b^3@GSk=) zG(@R)X3$3R{`*b)N=LBF44)$g{NN)1m0B7t=1Mh3IIKK@*RWc9Sag(C&_&FPA+X%E zw1hAlZRj(7jtMu8hAV{05eX}iEn&xK9Ao(btBPT&FGMblJCl*gA#RnjGI^KSDle#O zd3JZ4h=@Ing(xDaiV;(ki;}DLh!IwXj5T@#G?>PL*AsWzf%=9)IzJ}WjBk!pZ^!T- zEgKo8qXFva(V;(-)8%o6(SKsa5639uHWdHsWFeE`Bw+Uondmc-O#X^&tO8|!=CT8} zx;0PC=JMj`vq;RXZX11VH2dIxt?iP}eIirm3okLIZ4LQ~j2^%GLIVFOnS;LtY6%vw zn`*Tk(cY-2WUWS&YYBf{Z9#w+<;NsIREjE~N}fLS>hWC$QAy!-kLM!?eO2!=cmT^^EsUrOify7sja7 z{@wzDZ0Fd`0Sv>couV80sKo1U?&sm64gIXXJ2Y49p!v6-jL`_nC-GsZjNO)YSj`gq z-w?2uC~&Cd*|li%D;~#CM)Nsvfq*fVN*^RbUbl_X9HT!NTayNDeN8TC6h=QsbSSAA zCgu-q0b$a8lhhL9cl^m7AZRZafpp1sX1pvpM~q=@)c{^B8HO|5$_iGjWXeSJtaUDn zP^dPqBN15!fm2xYBm5rEn99n*!*HJQ`e2%9nbZ{aRK7kLIrUf$Q}cQ6CB67fG7&ZP zmRO%yV=Ow7*n-l-dW%8AOI5m&C#83IUlr z)cXgTtUWBU937_TdFod)TqR~%q$tqFvLGzvOPvo;M+K%W1Te-V{n%!l z98&37Q5WGzf(AAbDpc~WiH$N5WMXn6V$CD=1Z4DYW=g>_(p0N+v#!-(HM;W@pw>^I z>!p%A*;XtSdv16Um}3EJVtD6ly9V5!@sQ}bMh$q~x^kR&s8XRgLo zCh0+oVCfevTz#5|N{Sd+pMy!xyc~ulIHZejd+2SxUMV)Q(JXKzXsO&&&0LLU28nhTmeB!G(k@m9`URE^%)4GETqa12AeM3!O`p6+N z3~fj)l9C}RC#mPEXNBbk1;I3dt-tS~lsJ$%TErpJIy=#QHQGOw8h(_<5wxRg^vhL? z$ck&nM+NpMw@l=cqqbD{b9x&N{^pv9b=?w;siHb_bB3D+i`7DSWv@N2?9?qW~vlWLc&T1; zlGG8hWcjKp5)qG@=}(1ONZ~>i3^Jrdyzc7X^-ttci1_!6czJIUa*)7GqCr*+s!<=9 zOds;gX#gFcg3Q@aec>h12snfL!&g+t;~C23e=>O_ffE!hr4`FM*#X5mb<2G?6;3e} zOsk9khr?k+ZI1^33&a-*2qXW2c*g$);`Ga?nptwh$T!$k%!NGoZ0*vkiy4x#s&JL< z@Y?kR=qgxBbLuQC3n()gS1K)k^gp!Miz>5UHm_=b$;YazEw~bO4g76;B=hmSm~w)R9tipq)bx& zH~uQhROI!xcf zIa?a{5>~||z|0zMtU?FAjmWGo%MF)JkVRFZptT)KH zaH`;XDS0qWlJcx~K zc~B`@w!Sx#&&OYaLMC+?lB~dJ*O{@%? zxvDK4yp5_)@|VqR;`{Qu_%9{jL$^mear?l6+5u;@7x@nguBji+YTx;;B1~Ba_bk5N zb6ecAxQH$!eW5&DS3v`+p9mKRSlN;S#r%DA@ma;b6Aq*3CniKKi*Ok0yw7pal^*yWc_W}Y&|B8 zK)l<>nEiHv?QmC|A|kIaXmYsWw#0t0LiMDh!#X+!t5SY9skg9EYY13lxQmo)FIq87 z5>rlcKj^L7CJV|b3wKRXQ@@ghQXmMtq6ot)R7bPyRsFzY!{x4YSKX2lz-b-4^xy4* zZ<#8bY#atX%O{@v!j3f|^9r+i^%pbaAq=y& zL&OgkOGN#K{o{V`kOMqP^v1&xcNr$ckKt}J<)Pf(!%Y2UGYmgg70#KUWh+Q-RcCaZ z*ZB|1yt?aOe?}cLf<^Y#H6ICvtYi8c z0z&(C3(Rw7C*OmnYcII6mi(ySgFPV)_rj#oew_PCpRl2^q!W(Uaj3;o@xy$R%(p_@ zUnE?U?a6(OT|qd~6kU^&OVM_hfp>u(AK&E9yiW2Iy*7`eK4c)f6?{+?&Zj7oNL z7X9Ioh&c~#LHB24jj~*hY;XPeIIxFzqUB0h<{nj9YT|G52S%G}c@EdInNkqT-)Si( z@Yl)KT(4Mno@xWx_pO)jA8~wVWZx1fNhz07yTr3Nl}C4f((Zm~xQqNlB)lIleiXdaH2AG?rrA_16tCA88O*R4?p8>-$vAFq=Ln#cD2F>ih?K-Kk0 zHLGa8SE>3V z;VJ;zfbzvI{WxOUpJPlNhN~+PAYZ zlblk&IGAS{W3tbRh-D!pc%z=yGpV{{imFonmpb>+e+jBSMhNV2gr)X?+uNIkUO4#; zN0SvP)&wz2dCHl!Yr+N)Nni*)0l6wdB{RRz+OBRXV;ek(bw$Xl#mBUodSNHx|0a{{ zWWByli>xu(Dcv;2sHLBL^@q@VA;_qR{)IEJ6x6c}O6$G)qmkvAV?U7kXKSrJ)5DNO zbY_v}vgXo0N||d&e$D$WylpA0dDB zj)Oln9Baz-@@V%vDQ8dX!RrY~oRF?l%Yc}ftznVMGxu;a_M7elzl@FSup+^RM;@aV z72NSG=l{A&sW?bG^Z6#Y!EI=n4;SH96y6-^dQLAeQ%LwR290xqurpE)|Ko6=0PxB7 zt~(-n^7A-yLj3Dy^k)ZGIMqYcR-Xe~?^S^={Ei3BfDKy- zWzk>L(1V8r?1DTLK9suOa5(q!dR9)^t)|Of;ket)Ueq+400yesK^Ocnm(08`XoySY zW0!atg=-p1Ge2Q(cQ4|6%kH1g7T2WH(9-qhxN^Wxfm@-DZN<4*gm$71cz#u!PD;@B zyIgVlEF>{vt_LDFkC5Mves7o5A33Ie{E75AUGk^tex4r|F?a|g+`M~Rsk}gbXraq# zzButKwvhsYP9Xj_w&(5B7H43uY8lgYaYQTO#XDuJO)H==iY@#f$4iwkt$JB5MRsbRTa z1>{lBL$~SAgftIk9!K8Qh<+#zu%%3_7rgCQTF5aF{>*}%4;yL6Xw3Ea%J^}8X1;zPujfl| zu?sC~XNK9lzt%&95Sb6BK%_@>&PP_ou=)G}Cf0--L|&Z4Y_{(N z%o8}0QGCl;w<`2~Tf1~3&Ee!&0=J)Y4$%5InzR>p>zjg6rUfQFNrwy&t{Kuq1K8iv zO?-Llkmb=m?R3fNtD@!)nB`Y}{ixws&VOo#GTz5D6-*EByKKsNS>7#Uwum6Hqodvg ze4_nnE{Apqzuk0rP2xRvLWMc8I+A_Szw(2xT$jNc_u>(moO&xu1;dsExyTekXMt z`TABdb?p5VQsaE2T|T)Nk@ME;Ssr0Up*2&)=b8BuhIo;jrc939or0K^J1SPcS7-|u zKFo4aa1^KdS64I6ln{C52abO<%5 z|N05#&~eZ!d(4Iewxj@x9>8VO_d$(xH!dlEw8!qcS$Nqm9%!Gl*jx&Fr%$xv{AJLAxBLmzBs@x96Q%M%o%Mv@_h z@(&37G*W$H6KR3PrE57uD}l}W?vKnTc?lp(-*Jvn=t)*UGNZH3b0rh3@7*V*nZYd} z6RR4mj&T(nukY6w51b5sjdErp{h#F4-{Idd;;Q=ys_X zev&Zfvm@@0w)j0G+wtv-E%LraRX3HOiQUjCo_)XCOABe(Dbeem>lDp0-MP>AnD09Q zMqx&&1>GNAMx@TahpzWOTwyGi)D;l(m}KKq6Fv|9FUH;}I+Uo}){Sl3wr$(CZ97?U zvSQmdS8Ut1ZTsfzy>C0`KlkO<+pM>$YE|{kG5Y8oeSEZ7u`I2t-Z#4BcdP*8E#oac ztxf9pQz@q&$Yqp~DIi$YfIC<;xb~pzj=o2PA4LGBF+6TO9Gil%NJgFLuJZ z*+v5UC_M=Lz2gs9c_%LXKl|-6Sk!qi8Pp2k|4WxXr*0$bh|_y#yYMlUX4|}>9o|&M{ajN_VV&`bhzm~ zT^%V_So}%aFK!holwbF~M~Ie-)sH-l>C6xy|U43@bz z2vx%rVw-hD!5wH0z1@71mH(hAL%Dz<0~T_~l(L3HG6~qwc9VU*@;B=c3G%v4K2dXA z?YS;{fX1AZowHBux^+fj3yG)k4PP)9%|zu_QT-dUc1eR8PWB&~?8jeO0|v<8&(9AU z00qeZUj4_m6gMT>8)rpznEYjWv(1^wncSVV(VdPtLw9QY!h2=@GKObfO0Lq%2)?FX z$@a4OXjeiGrBW%AO9LVkM0k@-wnsw9;#CT=xJkhA&wdiZKH5AQlx_abEx7B(1ANvA z=gr6Wb`b2q>-47Y<3C6I{t`>XOfH9>3&vag-Dpaz;HgjtqBm+sBt^7WngW5_rtIOe zqcxJatJ(A%K}@s;=1iy`2@CP9G(6Wh6(-|_@@rgYEa!(mAQKW*|CH3WuPSk}{v@f* z8BX^*LIXZds8OWLLv@$2HcLsDwVtq{9kh-O?3U>iK}b)hhg}ZO&#G^#58sbRYzF~0 zQTWYxmtT1%c+xhld+lfuKPc6NC5`sphT4?u!-%8|iKr4K#lsbbxy%}M#)s1SAmut) z%bOB_i|u-(rSTZ`j2jiC7MLk=<=dE2aPuM$Dc*e-bNG!)7BKhMb?QS)qOeE|MK^{F zq!GJ@?~9q>NFQQyE7!XfxDEuQ$l^`!3!3;4T(E-`(0vAo1qH4VWY;pi~=7fhW{|DHO%IgFDoou zRGh9*cUZa)O_sOjrGr76TKppVYeh;onwFQIPEhJ*F+_gxwj>#`+hx=kCo@{CY#!r4 z#tJiJAyr1k%r^aA+$$ZE6-un>1%i<3!BPYfQfqIFWO5x+0yDCkDAq`Jy~l5oF~Sq< zAcsbpTVRoWzV*2g zcS*lxQt=aJA=tK0gXFnhVu&$ODF^EX!N|Ov=(VXCO&u>CT@}R!QB1xMINGL0WvIUG zs*HNuNmP0cGa8XUZazj!@El12>AYiFh17#FPNyP5IPGSoW*}=0yJv>Xw4W*-s_>MZ zxn>`_T7Y>2{#A~0e9&LVybwZIlIh((Amb;os<8JU+L|uG$p(cb?~rxGj`kX?@rP$< zdTHE9MU=R25-SgrT_*z(mRVYCd25+6>=xx867f9}d0~6YN`!KfePPTLGlT6P!|_c6 z&v(i?7MN%8dtv}>Sryxqm4BX9a}_6{rC=oX??lg=pm&eeBq%?DigXajSUty9JwW_a}7 zFBOQRjgDa0OBypl;Gu;s$nfl`4#={&skgjJYnOwUdrV=v}1!< z_wcvANTYnbPEX`s|DgCDGxUhEe1E07urKnYm@UMa4d6@Et_jlT%ImEka9eMwgO#r0 zFAnPe>y5a=&K2?WK2Vk3ejgZmZ>+`abUHKk)XlFs?U~%y#2Gq^zxEbf^?zK%x3{mf zp7vNNZTUHruk|R}7V!38CZVoFQmeJk56Og}KM#-I^BLYhItr;ij$bYl0t=dn;BT?k z(GOAIOlCiC-x&U+e`b(16}J<~-MJlTZuS{b7d`qm&7{T(f&ibGqGif3rWb!hpGBj| z`l-xR*4L3FXeBjl`XQw_R$JA#2ex<#I(!4qE%s+-570!QzI$F%hl6?5=J+xN(BOG- z?{M#K@Q>32e*N$-%Y*-+c!~4KOFoDzJIRq^c+#(Q8&#LCiB@O#BuP;{|5|9BK~~?A z?G2V@qg$ye+45CplIuYeyBcsQuOWYCB#T>jGy>9feW>}FvEHYhiRcAL`kq)zzGkZb za?41-__ssXE_PSzC=HywwP7JpIZA77iRs6915zm~z^Bk!^7ekrw@IzOhs)C`5@->lTE9$Niep$dmG-s+78(nvMxHrs02BfDkEs%svQk1&- ziVgQzc=CDW&4b1#K9bR-Mm9bv@h*n?^PO*QMHnT zXL<(&gnOsU=$@G?WjIJmjk{i&c1T%>ThoC$JL&-~&FH`GxK^_3bjp5ZqQZ{3@`P87 zQk0bMx^Ybs*LPg)w5cg&*f}QIwvpbWXnXTlV4J(lz|&)Y=Xm`L3bth(tQW;z2WfN^ zVy$~Zpufj|@6}2(`Pvi6_uXa5-`)Fwlx4g$awT_Gecx+0-W@Bc+VhC(wKP}yYoEjS zF0ckYSgL`isfNEN-`L_M$cmlj*FLOtUVRmS5^Yb}W_TTK6`0@%q zH9l+mQp;kOy>{sON9<3haL+;C_^4Z=myK6Irm; zd>cu+IFNwfYsU}qk2=4}UW@QSL1$tS zKf;n+L{2s3Q{`e!o$e_o#Vw`dLD-hbJxzX{y}m=go6fKitOz%vqu1&^ovi_q3sZxgK>=cbry#0KTnFj9(SN6XAi&zbDQ;`Wy|)I(zm zPmU%U$C(eR^moH@ww`;DxuXlt?s-u3d?L=xdi2IF_K6jOYGp2>t;y;ol!vXujbg|9Q zGD)1re=5zr;8%p26MGwLCeQC?`d3FWDhktw9U18k!feT8G1*G8DK6Vyp=t_$oYQ=R z^&h?Rvtkqq)7WLde<&lg1})O1Yj&^ORN##=a(LAKMd?q^0EP(h*b! zbrz3{|oqZ@^lT7ihH3QnJz?K72g4w>i$7S>88q=nx=guQT{1X$SO;lMAgTj={)d z^fS-rE(VUlY48o9OTqP#uvLdGyqH*m6v)er?MaLeu2|w|*qUN2Pg#a(k{@gr-f;0k zC>s&x>`PG_EqWiCazNY~f^_MF4JjgS4bjdf&KV@r3BzhNO2cSk**_ZGmit)VqxlKM zecq0Q?5^mUr~mBcc;=`0&rs7E8$wfr}fyvMRg~?a{ zgUSDU^&gmws^;yFy@Z&}t^TrYsOEB_rX?A}))9YzS}j~fv6@_{(GXNfVn6^QByk~x zv~WB(U-T#{oo^{^@eWl?31UGR+r9IJ^ksls`>p-;Jl$qK&B=@g@cojPpJ_0=jF1I? zcw>B%;DvkhgVMIkTY|)oi#-cNI6wovy-tSE8W&NFh7lWOvheS0b`uX|LG%RH%O&j{ zhgR@h%bQq3TY_>Lq)M>YclahVF^BQtgIRi!5;kcWR4UVRk`eX=du%}Hh*9Htm=)x& zmqalU3ApQuyPiLM+Dy2DlsDhRw0E579&j@_JeH&M?g>Z3KKdXaQoZx2E*V(EXy_<3 zS4tTNJS_t9^n{U#h>*SD-*D4gM~Qt7j1#yI1Yjblzu7a2J;dP_*#Jqe3Ygh(0eCg$ zR!^qjUUb2z2?-d{kcx-Sf2TyL7QEPBo6M?R$*Pwg*QJWufg`3h?OymMKY7Mq*HV!5@kh^il)m+X}l`HGnC(vo5Rko!OBRent?zQUBpi;w3qKP|c<1?(0eh?EbL0W22~c56#KgEBC{q7YsU=2*;9Hp#)5#hw z0X@$0A*FVTG+sfvi8#57rJ>wG@;0HIze4Z~Eg4bioQbC^n^jOBNsMH2<5;7J9`9uj zw1JEvRe_D?wyA$Fcp8y3^UIs+v)B^vb%aq+(6|1Sz054bKCuAgm`2A3t1drDGBs~| zGiER;YZN||t127N_;P6smw+4%bWqaxb@y{gX`{uq!fK(2KhfLx-{l{eYlHtiDN)e( zJ%0;qCci`QL+>3MX1M5l8QI1zz^ zEJ1W{kk1}|M?I;Z4TnXVMDI6MZQ;8#8i`G8ooY$tXG+ZHn4qP8#n^_2Upq3_S@!32 z5f-H)R~QG6m*wkSYjQ;4L|~yJ{;7p}b6?{v^|%M|;r()w9bIh~>`{MzZ_1u`L^JWl zB(*-Kw?uJh3OD@^z7fjW%6=)s9sYl@`%%%Fc=??X)VOvW4!fxF#iF-Y(vbuzYu1sJvGdar4f;&V)H3joUC;g$w zui{Tnd#JsojRS50&xh9>Cw;R0VLgrKgWB43BYHg4vv??S^cd9{F!T-INfB?YYEqGO zz(Dm^C+(X@2c(T(HA@t*+_F1l5$W`y=ZP5cIQx0^1*yvQKVjZ%-D1B9Bb{WNqOI0S zjMwVqV0FUQo*XzRF4sN>FDy{nOJVNLwSi_{7+Ia#Z&K;`zJwzj45@K%`_WT8)Z208g-%^_XoCimeO}=+oEbg0{+QhJ#3>x)=KQ zt3#xvZ6(Ji48JB5I-c(!L#yHUaK~>*E8SPwKR>uQfOo#EFIcTNN{4xP7whR&cn_It z`Nn_?Hk}i4i-#O9f}&cz+V5&GW!Y8|$Hsa>9h!`h2E%~Py_$qSnj zTSHL3K6J8-VV^={y4x~paM1GIf;?GIJ2~R45=3h=gXq+_06hEun+p}ydH85Gda_;G?YQa~_pqOBS1(^Yj&g;$@WWzK z^2h5n_B76`&UHumtDNyH!Phwl-~A*ax392&u%fs~k`>Zp+Y^6%&t`2y_|&827{wXv z#fcB>yShxrxpC>9oBn3c&qO+9CApV-xnm96pNqNmvnEz9R=ATlG8k=}$n^hdh+SEz ztntjycIj9vk@P;5$(CmFLnZYw}+iX!n?J+{o6k6=B=<$tOV&;V7anVd^&jzRXLG>ebKbz z`wbtZ3?cA8(71_#x(g|TI{1H8XlawQ6KV)xf=jK`hDAX@4FO!g*M5Yi@2qo`APLW0 z=yvq=_05iNevF_$h(kH?;-_i{J%Zt1h^3e;py_-KCMoaj%{NUN!Z zu133Y1HJRMe3!t#GW{Wlz2HRec6HEs#Ec0ltP)5CaBU>>7J6E$!NC1B$B9&`j_SlbvW{1Jj-2yq(j#o} zuqqo-`S`Plq}9O!gIB1yV=KF#5!p$oQ57H`WQp}z-h{mGwy+)adJ#MJL5%`HOf=NW;F8nEvnps?yiE)Fm z3Af^uS!Cw#5o^C)$6v007GSCaQ^85i76;qVq4ijC>C%cImb{{Bo1(Y{@K+sd(^enR zHH#-IhJ=+jEOchL@V5Tlssja_%rGtshG$|U!dDKOx}t zY&6OKnGec&?6#1;`QSh6fIADjfuE0Jd6=H$zWJDR7+$?_CH4=-i6`H8-yr`e^MN|k%F9>iiL-y{5%JFHMI$nTKxgqbBdP)cPaO}@dmN?%e8H@mLN13*mJge0*R1{hS{j-~F0301SGH&-JLMMKc3oX(aH?O+uS;Qk zGaKSY{(d^ig#r98jE~mtsyM$u&m~!B@pbp&s;cW@lsk%q=ja387bwOvNWp-@x-&T-1tJ-G zKAiw@fZMsRfB|@X(BP2-WDDAV1NTfijQ1QGxmoSNav&q}AbrTI7H0qpy^1Ah<-q0R zPj^ZFR3o_8V3!N(?bJefJil>@6|EaxPs~qVbS(*fXvW~VTt_O|GqztoyskNZ$C_^; z^Zm|K$1bl5p4qvr3>JR_8* zeKMU<&QzZ>I*aF@0<-Ca`&gd!v}K-Te)wV7y|$SSjupRVcf0 z_J*KVCSWFln!JblAmGGI3w!9kM{v(hJdn+0|JW;#6(>iF!Y;&IQ4XrpDIysD7WDPi z!u(pcK3XZkz>94?U2~xV&AYn`-cpTGJg%Z+u%Y$pO$B3P@(;^LaWKZ>4x4FKq_>sLWZ_Qe`^{#Uq)yj| zrJX!2rPIQ&q5JTfJR$vEZH5yhHGq3^d_2X`c9|cP(0n3g;}tneF8&+Lc3f{QJ+&TTupEMrx+q4Mt;?e}IHVVP zy7gPUcoScDBzFQ<<-Cvuuv__<`1%CZX4EPjZ|l=WOJQz_`SttsVw&8k}`hkO?^+J)h8%G4@n z_Ik*|hMruHKXZrk3-2ZP6_9mld4@6nXM72O6gjB3Z0zaDGp@gG7D7ZjDm;Wy3DN^a z$~CIQtc(SNvWZc>F0xcoFvo{6p*|{qUpkrnc1zByr@pf#C%4V7 z#o)X$Kxqj}@0N0p76{LGBwsdsj)h5F#@UeumzDzhKV{xtx%#}cmn3n<>~U0gS(;7# z9s-fi%;Mw|GN%zaPWc};uHx;}uPxc0*a|3kn;&5RhgcT`&i&p!bc)nBpt+a{S4SMx zLjJ2Ygi?%^`cEesJsY+Tvy6FPVJX7zs+`XWWncf~4fO3n@8O?kniFL9aMU*U3?Q}e z6VSWoo2(mM&m1gcs(&)0$pb{+VGlDL-zz<1rFy5LQV?>J$#y~WbviJL<#Aycp*-fx zPOi1-R3v&Y?I|uM+Sx}abUIG^byV%TvW8e(NmA@ENfb`O&mhG{t68CTs-UX86YWxYA z6e;b|0i>B|$m0J!STp&5gc)u%M+@DW%^xQ7#eQHo~v1(T}~$d-w_&+!d`ZYK4+Pwxs*s_G4VUVa5}3Jd_?u zuFfe?LYB_*&uX+O4gKBc<$DLYSQWh(>)TbklTMJ@QE=aj)h_k(IT{5O&e+Z(xR>T| zdZ1cPYZ5GE3>^Q$$eo#fD9ER|cA-Qj)0JwapB*ZMbk5<}m^&N}gbXTJW4&HbNF(Nx7@?qI?=%(j!?=LCed~qX55!+u|Jj>_)hvc&SU^ z686vuM8x9;4e&~L)h0UXfKgv#ya)abj-qFr*i5Er?<+e)Qzfh&<|33(^*`!JVkBS^ z8%xB)I&ZK_PX!laBoX;ka$8jGV(^449xYoIrx@On=q>pdVkzp-x%NVWv@mb0;D16k z^=aV{j~S}|bk(c$2{O4kij1DSmet$MoZP#;9@R(VrA6AxXHddur)c12ypv6gdqyOm z#gK?TzDBM$ztvfk@YR5atDh(U%D*Hm+U|E|jgb@8uP|o(2PmeA!v1n93Pi2{Mb5xf z{pQYrVrE<;&DAfaMF!<1(RE*58a@$mCTI(X>QM7IlC}S-*|Hdc|4&gz8{ZE=0c7wW zr2j_ZU+qN!>Hi-j#!dOk#TLaKaW^wh=t_6!@b38NnviQ~E3GO>CP`hp++LH`UVXj} zu=c1^*&sMdu&o_Q4$~?(Xl@E4LZb-`m#0vI!hsJAR})o15CP52Rs2CGzl8Uk^66pT z8S^<|zPUNgDCw#P#Uy79b`^5=6vpmPQ`GA{B{CiGSZxaDO&EY1t~vM0i>7+eK>Wb? z7$g^3X-X)`(&F6Zh{cV;#XW$+%Y{J5P*G+HwB-q5;fZKIv%(0y@%|aYf89-Sm+_OVs190D7ISeFXP;_U^QBZu^m}x%T`#(I?BPFQMH+2y@I!28cVYz zskhBM_$Pp4+H3M;PUa!6@h11prJ$aJp2YT^R+jFW7I zRy@%3EYy&8Qac4v8#+am2Fo#@8R9@&t>08Z&6eCOMNTnF#w8*13+pJna6Iw?L=$Z3 zH|3}gb9ye{Ol7=5Y|B-5yUM(7oo};RHgwUo(F%{!*f^to3~NTLeQjK5C%O&0&<>3S z*}-)rx>2f)K==4I6sL0i;mc!(?OJ9ERUIl(?s*zkPkh zKEA;d!W1?lgOu*#sXdc66`EcBME#)Exw2Ij!cirBnw*aNUzQ)z?keEV^T918LyeMn zyL5J$Ke!HiiVz%7EAz?ASm{`VsN+6!7czy4kW-6mawiPPU3Cl&3R<%PR z>!wxw^6ggXbJOU_=*a^Ha_18T;fv27oSsM;+CA?vzQ8+lMn32F?vEaqf4=yHtDBMd zulE?k@O(uzYa#wKQ81PSCOEL=>2qfP?-ED$~1h=eZpcLAb( z<$G$BTqCvRynWL*2J(EUyt30f6E%c`IyJ1hFu62J!KX2@!#Ni7=47R3T;6Uc&hjw% zCq3w*T#_6U&;Cys$ZmJrD-By2M~%Zx)0&;=`9gh3H~Mw?KbXBFLN`&@fGRgO}2K_^-A z_i7^k!eoN2{5z;nOELk#)n0gXOzr}Dc9nUUP#si_O{v39>33)>GC;nMTd^{vaI_W3 zR?bHc75n^3)$^k4^pN(DY-RL02WKg2_JSq+NV9ZWaKSkwZx>n2+)z_2b4FU&JJ!Id z3}PJc*gI4McyBOX^XkK6$Mv?^c3}`b4y@)Z5;1GseMO>a?p1McWS6pF3>e^n zP^O?5e+6DV{0(W7kq80-BF9ei0D#nip0K6}@YspFUPKNE15_ofq0sn35ZxFdY(9YN zPYuFDSCWo+6Guf9tc_Gnoky;hgTD{lxV=MTs;zO!uXJzeTQ{AS5!?>mct3~`DB@^iIosb@4 z+4=Lw)yjo0y6eQ4?3Udzmu4Zj@w1Ql%{EJpvWs^56maFg4Z9S110Tf|%?{tzd5-lw zs#m|9nTDvs{Dl2V8H^0WW+mZyuiBM~hD<=TN-xJ^o{i%&&il&AQThs0*OXz$jw|ks zRMeNhpi*0tOPCWumn|Eber9H&<&b4-G|g>Je-f)y)ls4M5lvOKEm<o z%_p`Mj&(S@29KVGN!|a@0(4sP}AZj zY|0MgFlVG?m7wxgm_u*VBSx>8vP)6KWexBcvXskJ1g>DzPCBU$L~ci z=PZlCi*gs5S3)q0KwMFY{A40ZWu`IZEhG^|wn?8iq6gHj>zT;EOO98#DDhW|h$L2E@=VbUCu3V9Tm9cj7o zP-2)yUQgCYrW6KtXu(N}C2Y2yAfG2fy;|6*nS!!vjx|b}mJ(-F5nL1h4EgCo?GY1^ zAX1=l*8j;kFFqqkbW+uCHB(M@WhuUuTV=D2vyU29&DUtGJ3b)8ldroH4~OOXQFc?+ zfeJd0dNEFDgf*o!nq;+!$F(xc+mp2gI*5yF2!$M(;t^X2wz%>A0Y}5NW&VGq6RfCJ zxH71Du>UEYKwa_dj5WmqyG1|AD?HS|k`@wem?V+LjgLcObR%XKKeGspsHgYEC@?gN z!;zlgOmZNRBx)Gc;DV)Hroq2xf{if4fhlF&`G~!6-gMg!Ca}m0a!%Nsv^MuFBI$_)OozRZo22sdmyz_>3bN^S6Ad@0jOCmrTgu5dJiF z>(;|QlsR%gRHviM{ff-k`W$G*KE$%FZ0|FY-@6{>8s9E(BgM%#6-I2cKWL8|vHQ#Z z7hWZI0#9}W?jeu!2d3%|s>AQ5hevbA`2M0^9K*bdlUK?b`+<3f{;j35c4(WNJhcn4 zMTJ>vTh%M(>3aDF*&`qYd}-CwsiN*C82&AJiPp3>4D>c$&)X35F?8sbh2&nYAl^w$ zP`-5u<0?uOU#u>dsR#Jp?AE;DqS3$nxx<6+ll_(SAYFTb{jq#GUZ?{*bk_QTf5n}+ zqaX|BleLG4kNijWuKqK(YA-26vZ>pMbS-)p)-MrB@*c@!p#_jw8#8!j{*_dyD?+^6=?!EkIm#7@2m+|^Xae@h!pS)km`~0QSa5sAn_+{+Z zz)p=Ffcol%#o8-MQ&KAM%IX%Oa8KZ> z^RkQTm-yU@P6@^V@cY3nS{ET5SjzxK+d*|9*oR>~uY&ScqX%mz#MG<#9xG?`Em;}d z%Aj507r=o5hfH9@@jB~sM%GarX>GjcPt@N%Jr6 zF1fHbMf48{{rc$;tIB=KCc1O}y3p#@iu+IdH(n+d01ZuYeYPJ>t_iK0xzT`N{8oR`X~2qi-Mr_A@?9LPV2Y@!+OVmPq(pzBrdYUb64vktx^ zx*s(e!hejjNMEsiAf5*_Eu^&rtq=0g&3C)3@FQRTWidX}`PnaC3y)ALihl7W84h4&o2< z?_)8>3E;fLdE>s@Tdi$ky>*Jhe@WeWLHbC0Rd*EM1^e6?`9As)`b4-!JYmEO7w?;I z^*;P&o|dzqND0&)$&S$P9myA*l&)1-_r1ez{FtX3!H7e4@8Fv`h`!}2nwuE$MYAKZi{IlBg z_I9blT6l21&tAx$*b&wvHzVtaKiDSLgLM+ntyzDvxEaOI)+1Ao;#vB(v_BcOlc?W& z9d$9xTYk;mraoDn%U$SJ6{gSMt-Y#hso%i-Xj{;&Aj|*F;p{=zJ#{D(yECj|`Xe#j@33(!*x&rmCR{;w`|j1r!E$S(PVwhQEo$o6mh?7s<8S!rmAD&fZCOWhiX3bK-4@}dO2Pi%pO$$qSfytm*{*&iOJwGr9$FRt z%)f**!d)dbr1eMZhJ+h#`P;cxzs&JqDIT4U`yntz+$1`@I>ra)`Z~Zn!@@~!*xcpR z+Vsx!oaIsZs%!5=m!_}FOZI!wwk2k|pQQ-;fjbd5^sdRB%AA+5cf1(pd8kHsOt>O4T3L6+8?#TaZs09DF(f7ZGO8)oiKRSPa0B}Ed|6}wI@kba*il!a}S(f7t1VvGTa0o?3#c&8vO~(-wO~W8w6iw42 zKLkz9rXCbs*W*qU1Tg?n48tf&Pz=*7>yH?gRaKuDw!TAO2)2DMqBt<@Ai)TZ%VK^g zE@Pb|IG*!vTo|7B?OYhXKft^gffWQ31Yrn<69kcM=bRW(Bu&2rXf((EC~@2+VgyN| z0#hJKvW62RS-M37Bzd;S{U~`}Fp(5?VVsc=Wl0ti0BKoK0Te)`OurO$O()P_>asi} z0h)$MpkBPDMWYGw#LYlyI_}ek3Cd0zBx(Aj*L&&T`;HvNFi<8a!#Mot1jCd{QaH(! z!mtp49m^iG%x~9-+D03oY49E)b2)^;dzf2jc0gYH4dn_5mn*@!3mS%glK676@jSMAW4!<60k|)4G;kitLx7pCSw_dkS=Si#wCn#nA|C) zP&TBwqG?%{H!myf)-9po*>$=8RrDwVMaOd-V@;)USu#~uc2`tIh4ny;Ptox_Tl%9V zay5jm|L<`qQJ>(C%7FgoEwF}x*4%!)K@hB%hGA%gbDCB-X-S$iU4Ao$akOkxlrb3( zn5IdB=TS0=%T_-;f*8kcuSt?>s48=crrVln8t1ICP`c&6HI78b<#clqA21Y)tPrww zi=y~uH7zSe6)Xt?)m{~$lK4Vdno`Y!II*()P%W$1Jh51-%KGID>)I|icpJbWGHl-Z zsgg+IrlsKs+jbmhY`eC#k`24gzPU{Me_vpmV11D0fn)=sLOPBCnC74osW@RePUE00 zIL=dRhnvnf0_a=Z;F99n&I^j_+0N6N;G5 z+rBG0Za{`FFm7vq!nUB-hLCeS4#ouZJnKc7Q$0`e)%Cnu%38LaFPl%cy=R6VaD48@ zMx=Zm=0>C#MV3;5sTcFi^#z=_Qgu{ck5Yl%-mhBls3-46v^l@pQZxKd=iFvF8^6E} z0)XHo4E~%YtLJ+AOP=U~gf}4s{c*-E0}F(tdL0dPCF}e79UU;_eM?`+55u=3A`B-SCfg4uNl-3`c-czriy#9E zCK9+PD%+3rf0u>8_Ta$5}K46_R;Zoq}mo2u^z*e_>Dgb@Q|6ca%Z z_&(bU0E{{)Kn4JzGTR4l+Py23W~S!=2*bePL6$*i5qAt>J*R zjD*B-3y8=mF?sUyb;><$^1 z#YPF}2ffrW04Ctxyd5GlxpR`G2^vO{qX)DRK4l2OlA0#2x>ee<52ITc&#xyKmnuji z;EEstSZvtD+aWBpAoJD=IxZ+-fEvm%VU>z3Osi@*g8Y5SOC^9_r zeAu!$J7f3EDJuhLtn|WR0kjOP+eNZW(t+?CGIUmbhNv*XYP9IESGl6R8FY|BpcE;% z0{IIe_`n^|^tUrsR#HL5+a#z4M8qia-W#5+BeGCYr8amjG_l*Dm{F~SHWg9h^r$EW z#~I!y-Ps3%C_`IKGF~Z_M?!2$lK*H4z21s~SXD14qFhx=wHF%1#_BRJO~)xRk8e`< z2rjZNfkMqiD~S>(gB1TqiI8e+eO>}BVn2??-(Ys0h_%4vKR^Xh z!V>COfg<08B$+&CHbYSi`v_CEdc9~-5#%&ZF`>HU8vHPU>&gWn4eoXjxkl@>C=mon zLO~D|%mPufCI`ZGL9<SUl5;j%WVu zx=}A!`syp(iv+F~+~LS{{Q-Rg@(P%qzOTKLu4)_2QDq#u*{*co0j) zgZ1K({vl*}0!V5a2NBV~W=g0M)YVN3{{(5v@&YRoL6*KPY5 zX*aI74hDwfU|1u#>OMx1O*Sk}G=*#Xo33}$e<9GxD@h>8`$TdWW5z^7REwA3IIL-& zEy+q>_y`0tYbG~&EZ^0*hHcW;NUJo~1y~Yl&kwSep=-_jCnDDII>{Mf$Ekkmtr+a6=Xz-0jCaArV0}L z;V**|BzDPdKMeT@QI9K|O&TNzkvlbZFYW@^#frJiHcjFY9 zBOhsj_>AY2DQKvRH0nW?U0t-ObiK{@NdQ6X#XPMIGm%LG>t@GOMb30ib#!T(2oe69nMXvD-=JlP&jcZa^oi?O_eW zp?Xgk5i+n5Ec;0To0}|mMz_#G-~gB#O<`>hj%RTYL=ZO~{hCD&9X!W`$%lG#&VVW? ze?s%n9oqfo(jENvQ=zO;a5QHFFHkQVBd^|S%W&DVr&T@gVligA(oe+u6>wFq)`0Fr zKn5q1FA;ET6A=)^O&=0u?FL9+I*sx~STm`?jyO{afOBy$`zr+q=%4vC(FY)V+EG_;IQ?`gzBgm)r+WAIU3071v#1&Nisv; z5s6+VMZ-<>VL#RcWnxbvp)jL~$+pXa5C{`;1UJ<+NRWJTkZzgbP``R4F?@uSvV3HQ z5g0=cGP;nZXeMckV8~aA!a_)9W#atcD-N%F2cdh2BE$nU&BIC2Yl?J}Hl+9qZZZK4 zlBr+w{sbvj=838)_M3pl-?myE7>3+&)+B-s3G#FT`W)j*pd4G9L5j^ZYUs4)wG4J@ z8ivCEQ`=iWMb&))-{jEE44ul*2-4lsA<{@Qgmjl6AQCDKN=XYyBZ#!5gmfc~3J4Mc z5(@a;5q(Dfk86GJ^SWLZ3)tuE`Q3eb@586H1{1I50dro5RvMs z9`ho}ep1CyCC0Tz8dBC;+Y1Rn$KyjqLyJ|tgrS}Ia0svO=?ymvzvD8qs}=di3FsCf zS#0;|3o*Tu=~;pkiypSVk0)l4!ZDX+7pByfiT>h*PNh3b&o0NQSZyP3YPCQ7Oi_wz zglvgh_7UD$`hJ5l27L?lB_E`2LOhO5q;wa^5)z0^Q4?vD1}zAUn295b9u)@RSqTTf zCk#Qp!tK_cN@^CAkHg(E#D`2Rs>5~#XdzsDPSQdBHPqNBa{yY??3D_rfST~7$MGn&5cFV81D6^s#R zJ~8}O`2}N>Xx_0A2#J6Py`~tzC)5{0S1}+1aYh|Nx)8d8brzgwUeib>X!$)?Ps_;& zNBYtpxq@OXghA>#oj_|fVo2?7XjS)R_A)Nm)wu$rliO9?K^DMUH7?V2T5?mq_y zOtnYeI^{@MfKQ#ntuP9*HI}3ht?1Hr2?0t9|C@HB9LTb$7C8JG5wp}-H z-yC7buBf-2x@HC<@N~?&Vbd}~bCAHukLR%$z-GOybo@-KKap4P$t0>xvtgDfzmP-D zWxcsO#NPH?Bd(sv1_6|lwj<`1(RW3j?Z@imO$hYxT^D=$fjR(rs)b&Ibm~3F!F8q> zQ}U_VunZZ?NRUMD*o!{iMSg})!=x@uL__hZpLad*O_8|Bfr@O%qlNI7_umhKN><9neB8W0cZ$UO@j<)A zt})s@uBue;XZ+I3(g-R=aj$`(DxeLyC`)=5>g6$HuZZ9lbbo4}l8(!axJ@pwO3f`H7hKinj3Q^n;BGAKU7yAiT5lWX}v04S+*JJ z+IAo}>Z7bpI#KwAdfPR2fJaY3x?tbzQ;;!!J64n@|0l+9d!E+PnB))fx&`~W%fg~E z>K_)ehNKqA3+w4qaQ3{AH`QaOFb|&@4?XhN-jeZFI9q0>!i|*r2^ZfJ2D|lRL1H_ibq_{J|`emO^~$+peU$ z6faL}n4dj9;FV#L&A@7ivWj-vSF~!GDyYo8$BZ(k)iGQfof{wo$s0B(1{LF2@yW;B zcAR2;x}dD{SYO4wQi%$)_wTY%cCyvOi1!GYp=_Q zgZ&nM(F!_ox5RL|2sNqlqSIOMrtD#m{*zCN56OZ>hrjP&Q5ajxqRv;CRp2p7B+M)5 z8nb6=9=45-d+T|D>G?9=V=dY%kv+P?==*lcQTB21bLmnse@CO4k2gicSfT>cC{G`B zO9+cg<)S=Vk32HJ^s&!K#4l=44&$(&aku`{we7Q#5pvTrgHP?3WKb~5>K~(^hshID z@fAMf>GGElN*4eHkg`~<<(RSEW=(4Zc^}V|;fI6jo1p8Y!nV1nmwmWDbl;YBX*B;* zp<>pTkewS~oBm*BfANg9p!N01W+2-N%Y4=WF12{x%WsoshT-F9r@h4wvV%8CphBzT z*R^x)lOPlW)aIPD$M1we_D#K)nQf0t2Ujpksd43%brxl zp`|B5$`X}$%QfYxuS}^SX3y1gsiTdTk<+*0hoxoRZqbJ8(wZE;xFWE`opnImLtQWd z(ci$WSvRz@O%XXF8Pv`&eggiwQ~nT-)BsO|ne{2(Y*zU0?A1Yz<7dZ68IM#x3((x2 zVIi5_e>ORx`y}(t>pFI!Z)VQY0djoKk6we~V`j{Hy>64PSwx08-U=>BCn?Ppr7;h} zYW3C#RZ}LOd@ph`B!^1V%(ENm!nY{cnC?SYJsot<_|cQLMFwj2)oZuQLGmBQ+pNho zU$S@HYs^3JK2y-spl-sT{eJ)2oLoJDGu8&5a)W_`WWjLg%`1W2S6zJ5pw3ls3@w+w zn-o}QMAIY=EamnvS7!Iv&{J0A&IFVHHxEoAo}YZ*aBSM_yh}gD3mc&!*-8~yZJwb`=CN+gxjyqq zOkg|PNTAQpzVkVeQHEjFRwNm%uhY0og_q+b-e4o|`+U>_3EvM>%`xiK!X8^`bOSei zK9-vvoP6%g-#+{1*rj1={B^NOP~zJvFq!0U%K@eUu0akn`1QqSz&$Rw1_i9EMl4^9;y8EB<*^;cJQT9VTzGjokGZ0V> zHN+-%2zkx2sbJRz&0P1oAu5YeOGk$8B|EKN?`6-4!RVS29m(DbNj zaL)y)LOeK(%P%9hC|*czjHu|oP;#XMTb$M_C)qHUIP_cf;BV2W%05_@NtlHxr8gd_ zqZc|x$TT296UNPose&IK%hU+!Ns#B1Q7U=FxjX7fKDV`=4#VV(c%H%Ndyg|l>9YJu z{pYq^x24QOPXKj(NX$zz8u@a!l<;$b$i(X9FvbAWo6);8C_lEq~VB7vscxW>?Zx*%T z+8U#4=J5K+;;SZBqnjL7#kZO(f{YuW_?D7X8`vv-du%~#?)f$>eS7a}Fj5}K<~rRb zzKRoCOhq~cCa`}_q`x4lvb)2yi=3Y+vu;Gv%g7N@v~f`GT1hhgo^NmiPlpjdWDKc%~KSm1he zH0#$lre*K;W{f}BXX^T!{nS_y~a)SAW4_-FU^c#z0{@;p>v>;o*^S`S$7K9<29wQ_Djyv3qMbxgAp$*)!H1 zoZLM;v`f+*y+5(qAv<^FB`zCBUspY7#G+jU);w6=h*ZL%6xCw0j}(9#^G!G*$8PT^ zK&?05M3{+tmu%}G>{=A$=GkhUq(-^n1cU4i;o@5JlY*fB&qTgj`@==7dQ198{Tj0_ zUrUuHg*TGP8W#Ek5}UOYpS-DwLT%X|$fjg>Eu^Drun~ILS90X%&TjqU1Mw?iOBB(B zc`u0+9@mEI%qOJB>`SSg-6laiqxYJ6)V>!rmWOa0fg}8I3=}1jO&-Kae6jr6%YUc6 zyXVY!QuMa5e#3@d0^?KWlW(uxlN_=w`xwkiMZq)yFPFd1!ZKMETuydw46!@UeXwEe zywez^YCuG_q7p5@Wrk9)U+^LC%atxo2imwNgTzT6w5r`RuY0ifif8oUqT7b``kd8( z$oNzXb-oWUTuQ)mR({hLlVie}$|mz&fzyYf z)r{K?a$?nd%Um4l0u+t$H(mqpy4f^HpJdmnv`6QCR!5 z0oBf8k|vQ8yx4EtuX$~9RwBU7X>9HqU4GKmmbm4hecR(FF%Jt|_8^D&)GMEFP6({D zXc&Di<5Nk788@F9YC8H%} zCZF@Wg;2JYKT;Az(qvFziD2>LjptwWcUvM*lLTMdrVD(oYMRq{w)b_^Xq4G8Yf`0% zWFzw4y8s>j7?Hra(nj?8a5E@}Oapn!9pKaql|W)G(igz1mAq zz2Yc%=)@e98F+2b3ag9X!rp*t8FYNCxqkA_r7LCVBkw8MogxclZxID|Mhd^qyf-N% zrjjMS#~)v4jg={tpq%<^)7p-(kL{8(wQbQ4icyXh`H1B~VIY#3pyizaMor?R| z96`_6zSr)*m%(~zPqIty{Z6+ou!HxV;-!?ag<ga;v~JrX8hSmt+2K27i7m@Cxgqj=hxdj0 zlcrLoj>2;P(dN#=2-i#f)WSX!>F5S#@)2M1Y0paE^&Yg05=7s+f28YL(v&e+-GI4V z5PFC`HP3uM#-~z(QSxnV@5j`6r<+?-Hkm>!FGJ?P?(RJGSrlfRWnrx8VMDf4*5)F* zFEIhabc>9-RJ4XsjGxQrxgv(kM*LM*19n-JU_6`al0PoUZrO62wxiYF+EeY#&P@nK z{H_-=7^C8a<^&HWp2hN-wkj!(uqAa{J}L}rFL&qrH#))NoV{VJAO061m`@dqcG3B= zGy}fSERb+(Gv)v<4et2>ZyM@Fxv(h$->pGxiXfy5o{y!qnVC>dd$&(iT5yUh9dE2q zOGis@&qNERl`=OsJFSJ)qO}#+%xc{n5xfXi#`?`%09g zc#!XbkU?J3kbCU(8=YBx);!XVr?0z_kVH!bH!I+ULIbma9D+;^T9o9i z5_aTDa~xpBV@xHVb^qi+IGKcx?<;!D5Kz_a zO1XGW;tq0#F2PJv3TBNI0U{9t>v-v$blxtaQxEPzKD#aQ92q)$+`Voz_7m34UY=_o zm-Gi9nIV<#97@3pqp))|_ zI8CyNqB_B0h_A*(OMrZiR~V zNZEOi-y@$;Fk+y%Un+RNY>6;+*%9+!BLPw_plVm)9M3X$1`rXZ6QNq zcMU<8q`@~{F8Bqw0tUymp4-_VPapCg}y;n$;Yc zH3Hk)f$((}+GSq7n_c4CxaM?*@_fqmbF9)F z$w>vJO&XI?0CxVN$gn#8;rjz#FATAe?>6YQqC-9kV3pg~H1_IZOu|pBmgbS};C9%! zgg2HIOIpb-uejaIkn$fD}Emi#G zBq#M&HGV0rwB(rHy!qK4nf>)y&2a}7x&5Y;>vq?DU>fZN^~Yox8bj9-85pL( zy4ZpayieuA0Ivly5bGjB0+JB}oIkcfO;(yvez1At#W8vCkv@ccuO*fqMNUc)S&j?o zIu0_rCMXAu5u-y}N)EXrv~M29O#XzXe^yi!MWSqE$CHXlxzYRmKy?W6Y*wGT7@bj< zI3=YCF=evXa5uMteV9tM(^?Nz1=c&=g%FK?)mC!@0I{FSS1&>hlPX#^dD^Jn3LoR~@7&+PX3JvdqvRUgMh| zL}n4f*|)&s?&OE_>}&uv?J6U&)YZ5;8PwNcn1w!4Q%M7|Idt$*FK{j3}`Hx z61%D1&q;3+ag`i%F)u(D~$C4FQMZUTC|z3vGvxF0`GRwzNIT zbzpLCb`bbj#;-Ig5Lp?PmlRYvrj=*L${wm!6mBv`tL?^;Ll&vkAxrRpH0`eKp!hLP zo}@VeCyURT^pGX~yd0qh?GxWUuY_Qj&3u}m^Gcd?2FT^@^?4)oQZp;suTh0*J69E- zI(`T5?%>mOk!L43IHQW&nm*K7ld2{`pH#CCJmV!&3)bFMxXeV|$LqWNUfe8=BzQIvmm?R7WammA}x zWC?V=N8BOFeqb}z18eREwsp?emaGx9L?|k;w?+ z+40JDakk;TF3338*I9pAxt*f zX8EZCG>bzncwJ2Uk#=OG$<(K8hUqq)Jgr`9R(c{lsW)kR_caOTIwFdo{ah`Z61@7j zWp^HTG32m-J2Cmmb0o`kfa4(N9p(hT=pNzu==x-17NgTLB>6Wo4Rucu1^83l5w$vW zV)v(UxywpY#`Dp;7X8)D+ex<{3EAr^S56j~FHwRjNX8aNCJ$+J zeGGh!kMw{+WTPD|z9DhBMcWk?-`HD(=g1t9Uw_YbtRYgM(O#(AT>jY_%HGV1kxcUw zzNpmsxB)8jTf=EE;cEOzLCXOd)%=$$lBF>F*Qw{TD?M1^-wrc8SU|P#qKBYbAZ>5+ z-2UO&A%TU!W*5d570I2G_4r~Wm|7_hekqkHGow~V^-Y3nT_NS$s3qk@`ZbcdF5wAfCNUa1)Gm0rP} z#a4ys!|823xW|ZXxu#c34)H}+?>e6OZkFmyP+YZZctb1nvANu9>SGL!`jKNyOoq@_H1EpX z?wC7HS>5KVhJ%J%11ghE+^{xgz1yD$uH4z=cbu>!JKcY6vmnmvL{xl)vtDsNF+Cy$ zH{)EWyzvW_hmbB*p4ts@TT*G#vlZ*ZgROnH)s@F8T+=7?&@dk}ZA>28kW{Hqa(Qi1 zbt2+1M#WfC$lauFC1OGbwc56}HpZw}H=lZ&ua(U-!M)~f ze`mg+n0B_cAl+D3DiK(z<MnbnM_Hp2hbpq)CQ4*57KbVvw|D5!pUA3B zQ*9g!*^7)?9Ufk~!e~^XOVq<+sIOe(srUw)8+R`K^1e|A`LZ4AnygFr2okkKZ$M^M z;wL(JkL8vMZU|x96*`wmp$G1XLv93b%(_m>)RD#{QYzD^d!h}#>g$J0fy#XFEU|3cWjh#d(gKC|qrUk6AU&YvpDZ{&N zt2}~abSn*sJctN$O z^+pR*1Ie9(*yA&lmfRyK+JunA9Z3ddOlx$Bn%xZgl$=@RjT1bdUQ6#8zAf)io~|8+ z`HAoSL!~!5V%K12(x%9~)d@29kO}HW)(!`cJ3Jyj(No^u@D$r6K_m1^V{KbpkV>!a zFp~F|rV!PNmV$(bq@J=UHFvrg501SZnjKuP)7u#wuiAz_-EqJ?wBdKIn_eNs=Dv%P z7vbhV3*u;F9ke8~y;cnkor!$g`0;8T{vjcciA)~b1ayIBRREj9%(r(%oahu*wxo?s zS@4mylT1H^u+*2#gh#`+E_{tjV5950(U*1A!00+f_rTa%y*(CwhUKq(uSfR|c0$+~ zsXD_+TJpq~gXTYr#Cq;7d^p=L^r?9etgNNxE0JTlbo0yTJd^R|3`JgMzo_BEv~B1e zYl{3;2wi?){jK(A*q3Z!_9%Xie9wka8)opnXSWO7?8kH$$Eh5UJ$%bKB0t|Env=^M zZ-2@wBy@&qV>Ypl1D|zJC{AbEp1_r=3o&Zl?jC$-4|x=W_SKK$kEx! z!}h0uZDsE3Z2cqUJQwRnf;S9ie=cKK!CXA-9AW1YwxyfSptc6FgGT+jX)}vwS%3Ft%sARBN7;{h2ddt=Kx5*@`=nXJv_}FU=HRk?l3C^ z9v`^+zY;Ob?S8WW6S$HUpyPXfB}~BBpCbH1AZIr_8#^cXb>JeJ70lh^*F`a{?A$%f zoh*Nr6y#y73?>p7tGBAt_LqR z?$2uY%|2Xjn7M~7?1ITo=0FwyQvy79n5CziormvlX+#d@9x$NTmTuGC-*7JThaS;_@68&Jp zf5L4f)|AJC*ZOL0{GhyI%iHcCPMlXav~b#qMbj-@;P*w1 z?|l*>AyH5Rof{a9fThsdPM|mbvg_9rbPl_}ivmecMuw}vZ33wa%S)?WhwoqhVUUc? zp&@GR-&5B)u|^5fECB^n0qcr@%OiRYLi!UtKK-}u{Xg^H&)QRj#7jT{J%F71gG>pO z4&Hwd(x1qAZ+|2Inncf$VTzDNaVVewAQ30+!jTB+Psq?@5TYjjnTgMtiK39VoKQdm zU?Pr5f-@1)pP2KVzcYVL=jY5%LXdS9D4+o_5$}|TGZE6CnB7|d^HWt|G9*n694T8+U0x+KPTiPLw1p&fX08cZfEB=<^@0CoI6Vk z$s&RRS^yWZ(G9Okg!HFU$A(}bM%)Ew;+(sM2?+&30WE-w*k6Nl5z?Qyi4nhXF@Jd^ z=gd56NG$;r&;Xc-eIGazA^nNj_xLyFMYrZ0Jb(;IM1cZo02mSU!odjXPvFIr-@yO& zjn3f*RFEkGD4+_!5kVmwj*$KUhqN5y0sa%PaFDY)yV-D=yO;xxHP;Uxo6FtRfeUc9 z0SDKE%gx!F%Ms>bZe{LaPCiNC&*03bbt@TI2eC%8Abd90yzHp{J9_h7XXCs|F;l$ zyzn=S^BChV2#C1kFCahNoxdOeX8b+mLd=9P2Ixt4PBwu2f7m_#39=A~|J=oX24)Dt ze>LJ?ksJc`pN+W~{rv^#XT{~qzaaeMe*8V-pZFhv`p+%$)7wB0{&SuFzRB;u{GE*fr3U*5dj90Jwk* ATmS$7 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3b537503-41df-4274-956e-23869a4e7662-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ec454fdd365b2e986f1eb7e3d1eb3a5b4ed562a0 GIT binary patch literal 98361 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%0ASJNH<>eQzMHw4p2wY>2U@;_m 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-3bcaf272-fc53-4775-8dba-5261c27ad67e-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5778b8dac866b81ccbf1eb145c4cf35d81cb5118 GIT binary patch literal 95294 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

kkqM4E}N$f$N3eEf|Oaqiq9f~4YSA-ZZO1N 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-504f4563-b66b-43a1-a095-4dfe8ffbb896-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b7c2c38a8360460e2bbdf59e5bd4aaba195b9e34 GIT binary patch literal 91155 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 z z<2phwSQgmiCa1(<8>QV^W)Q|jQkNf4V21_S^DA`m4U455k+oNLb{@>Z-%|L~;(p1j zQTa@gs~Mm*?bb|4OYn*n%qZSrH^9zWI)ZO|fI!*7eX}qVqQ%SJQ;sT?uW4C(I1b5Y z1OQC$8;32sNFloSnZIgUV<}xhv9_^%V{@19>02wRwNO<2SvAANyiWtxYZdK=kF39j z_-|^iQIf@F&L7e(oCQd>^8KmJ94L|u`GTy#Z@?JH`}H-sGaPVYbZsG>X0Rvi7`0gH z%TmL*Zc5~S(tm0!&CjGix@K^nhHvprZr$Y)jRD&V?gQfACkL9Bd^9FKy64qCXUA6P zX-vc|qxXJh_w+yB5Q8-;3?Bj7*E%v1DMwe;0G+Sk>@AK{f_H@pVt2M_Kvy;-dM-7) z=A(X_JX-2Drw=lRghmCVM-&@iN%l$1u633}?7vxzYP-{w){qSIu4=a*Qk$?Q3nM z5hu#_%S97p)j*428n<`-bEpx#SGdvSLd%e@?BiIzjEBd< zZrZdt(N_cle2?+xQCH0)(wN(??h6-muK>p{&h$qb;!+l5L5}A4Jfru%CLWDa?9uW*Si@)3aJ&9*M8Yf6ulMZk?Dl@=d^;j*D#`J zT}pxRKD0DaV-GO;+wLK;vyYxpkSvoCeFu2vZpN*WZt=H2%q}&OV+=VKC{+&8@t2s1 zt#&DV+$0X+_B^8qMmhpV1#*&v%p%o`^YU5KiJ7f%<9Iq*$FF|V2=)(a6L1R`o*+5+ z$0vAAnI#Z&V&h)ur4BRPbef|VOXognV}!?gq0;Xh+kgzRL)kOjw0^F>r%XP4-4FkE z?=^aM_~l!3Lto<~X7=*F@6_?u_g=a8qH@k9s9kqNT);N7|1~$A7k`fNmCWa(PS@^y z9feUV*zg5f)ni#=0Z5v(M0F1T&b&j$!F;5)cSK}bmHoyb0WT8J|KVB1Bu7PzIU&VX zlxmbNo)H=-pSaznd&RaSoy%2ClSgru2TGyIPG6i?ZnRexm+o*ZP(?L~O`Qvyp34wy z@S|9g0HbJihKF{D;{~&v4z8L|1~(Xf#Ghw2T`d$f+3L8LZZzeFgJAsD%?3sli0@uI z&FC1RTFvY@I!t(zk<;6MJT_>WoPbrn@`TTBfV6h617Al(Q>;&b`EQ=DrwTbas$*n` zwUX>l(-OoV7p#NrpO+fB6S+W40m&twb2(}70Kmaf;|rT@9eyB~tSIuK119T78wW^l z{3cANh^sXE$vhNmQb`S1r?{*(TxRA=HbEr&mu4j?g1Uv z{>l2khl!rs9x{x!)Xp-{o3;mec|@_FZP^cymfaQZv{MoRKS*I~<9#*Og`vV#(>*?11n z!|H(*@uJfI#x+J5ZtX*f=if@6eYA21e{Qcgtwh5#3LRywDaiF|TwiC*F_ z4}ibimNa8^sd3&uX+)D*wc~(QUa;1xKA$w&|Dn0O!%tG*27&9-@hUut3|+JAImSZad@< z`A92r7BfsO@J8lS9z)UbYH}pmLC&U_Vf`haK|p52Vy5C5Ls`VsN~T!4rbAeMvS?zh zR^2=w=VTQj>g?pV`{{xT)e@zkMJMLV6m8@QS`F(~Op z>1NOKyY&Hp?G~JubN<+|fj(Y-)bfBM4gp$}Be|y^EX?9RF3lTihU;95l{Sd533#;Nzv* z-rmjEPQCiX_`N(`F~&kE{nY;{W{9xHBZ~2HMu}*4RNZ0NfjTLf7J8h z=lIzH*IO6;C6;jwyIS`3SkQ)!S65@K+P%?e3-x-VRQ-q6SQ*bW^?p;64*s`<>{p(V zw*~EY`t4Aomfo^hwjZxvYl`8KN!+H~y`kB5L7b^ut*KsG(!od(9e4td1(fXDDa#_< z=fi8F&F#bs;ED%!^aZ`1&LR4K`S{u>JHL5SNy2*t<4^%-Q331mlWjZh<38+gjKHJV zJ1_~tjlCPB+QZ=^FMhQ)8?NXQu+~gBUS>2sFLlI&psSudk6lS7$8?)4C_Pk+KsHA#9H)hUq`#AK^1#7(M!bFlLDVXEjGAQ`5eXrYh*!?Sud+^t~XfX?)k7 z%Y1qA@Kx@Bio21ID+m3CG!U7nQ1t6L$LGsU(_?${^I59V&3~-`YSCvKs!?{)MOS4> z7Ul6K_qu5f5$%|Fv8lVeY)~U#hftLF8}{#la76XPZC+h>{!mcUGnRtfwy0Nv^8Rkb z7(sWLCCMi~sk>Lm+qmoLbHFu$Pw056#ADz@^~fDOzd{k-n~`Nqyba#bepqcMV}6Q@ zyYL*Fh?krGfyB{p{k*Lj=%#7*AgC-eOExEz(8 zb$=`b?pwU-1Qo!hV8%eUP}~9mj{D?`*F@|Nqx=Slr&}AEqNO=;-5vTH z{){fJGZt+`pkH+^wfw{R9QCk3(1I?;WiN8p{QQ9kVDH2qGcRE`lBKqY(+hK;IX?Va zvcb=nMO!qH-+#!RSTIQM$|!(zqN@MfRBvgQ_Ez;sTL9tpXG|+0z9>|e7j7zkHMq+{ zw6STogX})nvZs1+(j~Hv!M)%qbuAx!J?T2U(0{u|$|jNR%~axMfZAgroZ6^vOTC-W zrGm;iIEABY{w=GR?`OQKaU*l|YAkgT;nR(~1^4s%dz8i}&q$Sb$l(Io!Y$kVIlFk5 z!)B>DcT47Pf-UQXHHCI7vDLp%=S#zBGIVdS=2Q6FjceO|eTbRk?k#XIZDSjCJ`mj) z%Jr7xD?@Gxm2{&V?u;a-~9WmJJxkv#y#L`*atAYznVdEPt zVs3}DG&*lp&Xav{&YK0f+xgxWKCT@K84CY;%+d?&vKGHTs<&0lJ&*kVo&@qXp#Iz( z;=y`kOuG#$rtVzA*^bg*S*9kZ?Ki|}GQ<%!QsWJtT55>N6+@V8r`1Q2R(#d?CzKsq z8tNi5TdyN0)RcFU_Na^u@d0MfS~2Wx%-qdV9RqSIxLO{_xi7%E@e);z%q0?@B>z@^ zT8URykA0%JbLCjRAe32qT~NauEv*#C&^b01Av_N)t`8tCyS8t%BvMQT0Unh!EdD&5 zQR=84{M3l(QZr2yMa^VRfMa3F!xmp&S>sAib6x>g$DglpcTUOU?UAG6w3vL8q=73x zYkox4`sjEqVxt(ht~A42k!P7aGt@Or06c1I{ieErJESx0n(Ffrnx-s9prGB?RtJ%Z z=s*yu%?vE7i}Gg=UTKiYDHkkV$Jt+kZzQMFU9N2~STK)j+(=QaUJF#3=;Bez(H+Y=YHyG@_CiRit>yH7~K4cw~W8fzu zk`vC#$**A^L2Dz}>5L8@Oe=p#^S|vhv!+ZerN3Dd-9KeqynnN|EWSS@uLgbdmq)EB&;Dio_I%SJjhfY&8L7{)y8zD);4G)O_F;9^#i<^*H6wF zufe^&zdu74^S4xmm*LhKeim(OFW96MP4rq~(W2vayoLSb(kdQ9tnX~|`Yu!Xey2!k z)kVI;NyppMnhk!n+H+YjU=bx{ZZ=#r#}pG!7-7Er2%|C}^jYDiD$f@~GGE!_Zp<>y z|E=r|m9h${MU9@RnWxLyT*nS+D z)t(jE^iOp1msX+uMtk#radnPOf&hzp9^1BU8#}gb+qSJ8+qP}nwryM4dn%RWr213; zfv&FS)xO$$gx@37XW(wRKy_jEj)_KsvWb&h^IAgRzpCccm#>ygW431dPBpF6SYG~# z4%}te@hh=ZI72n9H^j{Fa*8H*vlXGiDlwUQoWU_y(nLhJ0Ig`e5~0 z<@N6~A#iCby=>cEpuGX&^g5olZ)BB|H`@^d8C;cOY&YClBy|zTZwh#x3h7?y-lN{p z>0B7C_a8FwbSrwc+FaTt8!uocq-K*pmPyxQ<~Xwz2K73HPoEJZR_d-M)}Y*XWRXso zDLPJFXq8_2ojOL`BffJhQ6DDw6B^sgJww(K;5X?FbnxGJrX4?Tgi&$X9|Zv$8;px& zG4}d zVpLU7rj>3@mAspxr6RC1bODqbW4dljVJ@yDs@1b%pEc{dn$VXbpWT{I>-lTXaqX!% zVIMB=f2jQ(vLb0xIt%sif}ktOKlN><2Wpt=bb73+04{T%3UG%+uS~m7tdk3sT5n3< z;CO32o5&^An44EP9M;;s38ex_C+qvA?Iu)VH8zs6bIK8)we6-`thJdJO>>|NLszKC zt(jM_xlhK|4MpBr!!f!hpbBZ!ul7z3}v3@(YS%l%;^(~ zX{Swg*YLeQjc3nAntgMH!QG**`drgMT~%`*KkV*=QWClMAz+)wc~hQSI!?X_8uNA7 zxn4ezd>3h|j6c$nneDu}Ugff8)Mt7+P83GY)v#RUTQwP=eLcLDucKMF)qCYlFA7!p zN9~fhT_cmCQ4zuTX;xw^OI@48A;cdw4=73?f@-JUYVd~bD*8>3)F`~s5i@wBaWcL? z)xO{mLs7e*m1wGJL|FR&MF4vuwk=;(MX#31Z!f}cr(RzD28oigH@gKWh0a^8nt4?i zBY1E9f~VG1=c^hkiL{}8qons+q6#vF2go!=c2wBLELMmhSGp*W3;4dWRE13tv@n-4 zHae)~j*i1KLe#T7xyj0BE{3k2{z;r_Jm#T4Ta_JS)FKNFxwG4>NiJ*fv-#9&T2)6iY0r2QEeQN}DvVn`R03)u?QX@p znh{0F;Vz{gUgFE+ItU583C`9HkR{^H^m?XP+^mJtXbPF8`&dd{)#)}3Gcq$Bc&jNZ z^j6JyWyR+DyokUotwajMs%2glB3Arv0oCHC=3=|$u{W+nl86Hr&#gO>J|Bon!5als zN!58Oi(AtOvIKDj@^J2Y|2~(d3Pc# z#Tgp(9A0>(O|-sVN_U{TB|a2}OinpEEUjLwqN|CPCFsQUgZSQR?zc`Df3wbzOl6orjUN!Uf6w@DrXjJDBXw%LYqnX;~Mz@;E#CtIi zosMQ;xlC|&Z|939YCfZwm{l|)E`cB=>U+y~M2o8o{8r-dtOWU1zc*JY28pH$td~eD zSbbI_%a|;*C@Y)BP@7dug_IFbE$l_nS_v%^or0jhTooxT0-%*010E?d`Qj!p6jsKeNv(9##w97M6|is!Cy~? zJT5w|L}fUcSEphu$s1f(tlZW7DE`(8j7y^otkS15#gsWgKXD6>& z4`|)$B&fFL$F3D~t+1HS7YrNXxX^oisCeQPS_u!?Y#S`Wz@0QiOjW)R6aMG546-}nKlenbw8!j^yB-azD z?#z#Uvr*7R`G(D>xUbD+IB=74(fWqD7=!b|OEBy?hBw2!5YjJp7p!$3WRImP@Eb0K zWiE`156nw{rsJ5!*5>RQB(jObpe5z{E~!p5gi!EjtE>pe&}<$!PQOshsqho-p`~$JV_dDr@mteh*PPte#am`=GOb)Vpp8XW*NPu$6!QC^rqfvu;4?)zfs{ zReB3CfomGNM-g+&Yw<%I<{Ttqet$UVJ?Rh#bkP{Q>XCAM5*Cd`q)&7)wK*r=9-1jP zJ@ZK~$Tgn@)S6Eo^c-VFdTCgZk>n`JAT?pR_Gx3Owo+uSF|V|XZJ;{o*42d`V^HfG zc4GU6lCIDo_s%b7#DQLJWiK-?ZR*?DtZcGc(Qz-k`Qnwo{E?Bk=!jiQptV}qh}5dc zMvbRwjnOQ+Uo<8~9C!Q{iKp?l`4_rvUv2Km&Ck72@cJ8Ge)xUm5S|_&`1Dl^`^z2w4t?n77I@kh5_ivnpZmF-TE$X5w)p-L%BABf3qV> zlHGTXXS!S%uU)tvao&fFdbs`X^ftZs0~C6fQ?SYOw(f)XRCL68KHBckF7uNyR?3Q8 z`YktUkEPy1!8TtarRc^z$ft@AsK|xhOPLw>MGiE&noZusjN$Wix;}Sg#?rd((mtnN z$n>-@zFi`ODcs?;umyEDlTM@kpL*{T`u;=U-w>(8mHsOaDxkFP`E?JdLsB`r0uJ5=H)DRu`p?ukzWQSC%@thF01@ zf_EV#ed_T2A>i;}Hy(vOE6nb2MP87?yR1!C>LLws7zAy%bPN}hVUV;Vt}2a+kb*{? zOp-;9X=&6)vg5_Xkp9i^Zes;4l=FLHptJzmYW>f$^?OXQ&RiY($+l}e+?+hP3W^4* zpGiON#VNGl$P2(=Zd({ya_+5fxYJWCc$d<6>Q!>*@B(FX%Nz+6E~a%xmLhU^Y_lO7 zH17}seZPz14-C*^v{cHK3r^S#SwTNr|Jn%02R!*a#!i`eh$VQw_twQIcL&+9xYmjy zUHMYuo@@~-Y&cs+tmD6^cyltdy8Esk(*_)OjO)G5&p1i$Wz*%;-L<_}%Shvo_~*|fMbgkYMbNuHY6XE7kG{0sj%*}`t90&y$h?Lu69O9(%2=iaEsIb(uEos52#BR zzy1WwzuM13vdzGNnqb&ov@bURYNLd|EKD>Kr&%_`-mwX+0fYnY4=;Qm>MtOhU91;N2b9^;w2v4EVD zF}Dfy;x_Sj_zXsBT7fqM%}D`Bpv9+bD%d*)z)=UezW34Ahsoh@V?zNc9PTkaD2Uxy z%G~3;{3y9t0Rk|@&K1;zL_|bEL^!bkikcDv@CF)}M1a+=fXtfo?|z{RAEU`7Fk%I; zguK?Mmh|ke@ZJ%`2HTsq8;9)EXpP54s9lND*91sKx1ZuuDh;%8&EvH)DMOi?1G{1N z0szxFq@Kws$8`P%4gVmasP_TVPC>tBA%UKo6vs`X8tv*56U62yv9q!VyD|arglO#0 z(J+4{fuSPw?#ru#=$(`D>%+iC(3XXWXz$BsLuZQqq_W~f{wx9Yd@)Vo|TzrWtU!N;og{fp%k?;qh7g%}&U_=8bHT6%G zD)K=F02hlc5?=({%m-Q?A&CvhtPK#85YTR>V|K3p`R7Sdcd);URC+wh*%PX7@nge< zg;q5WGP3{B>`emv$idfhx<$THfFzYXA%8L84}}Z6l-h+c!0WkW_L2~i$(iAGBdC8l zfNDlxG>INCNAqVsJ7B#xv2ubLwff195QvbQ?nC9C&UM9 zYYd3)tpZ{=6TtP+!s$oPBiY8s!6`H0ls&X*RcHIiKcrUM3C2?=^(`ff)sRT3k;ZHg~sC~oes$-?#mPzH2>Q;tcS z(=U{C*j39Nl0Ms_&P*Suj)!}HLd)3$C$;f4$y1>s3@R8lJ;Iy;%yB@{*Z9XiuEU+K z)c7+-JKIc$b&$AA)Wkl~Y7TURGTgC>7vv%Wwzdf_5##nYd3|P(1=McrkoZXHZ=vDL zxOJO%{@u{@JXrz6y^DKGbc3Kch#MIxz3bK+rk1s~0f`siW`e0`}*($Ncy0inTTQu=>kEqI2t60`aMpf+lbD{dU z6|{ZrW7JXaF4urn{q`XKL&M#EO}EI9Dcn=T;gbC*56=dh*Bi^??T}@?*RmTR{mZ8U z$(RndSe*XR4>5O>TPW*zm0+h{mV$YZ4zzyeQQuNiAj$S#* zw(djhHbv)b@7N*z85QJC=a*F9mlnTeZv0ca@8c{!elDiT4{L6M&+wa5XS^SU7?Sh- zYMlHv=dW%ozf9AYlO$4(x#NqpNaBshEFvR*Y%~vY5`4NpnaYp!#bY|lCwTc`lrzIa z?JX0a&%E|aZxP=u=DgES0P%P`c-hzF0DXFu*sI>dEULsWT-o$4G86M*L{i7STPFN^ znA49RHm>sx=)auDznI60Bx;l7f5$w)WI06yWE3y}8U8E7z`COL2RU>AbT1f&Ef@qM z^Qw-J#31&nZrpI30TNP)(3k-3r@d-O2?0HBWr(tHudA8<+#KpzjF0zf?rKwSrHZ3}$O2H*$^f05BII zzzh_DBDC{0P=_1s+e05i)3j1===)O5He^DZ6pFJxmMX`?{Fz2*0q*i0}#J{>Hif zSDi59o$!=v{^17l77)rKL1>hDq~v)fsrjJD@=reI!(hsQ%xa-&l^!R{P>&nPC(kU8 zp^%Rwq>rZlA#f)7@bwH2G@9g7@OEkVoCXe04a4=HXrt^jvVAn03MsfOlS+n@ven1n zIw@x4H2j(kU&iAN(5B1ChAs)F%k(W+OPV@o4ILZ?&+7@xrvR6PNzeM>&j`~Wk!zmb z1D1cRe3~aeHiDm@NiVShG9{9xIg?@{Oqq#W+KZdp7yqHTfs>ttX*YmPaEeXNjO(s7 zR{^U}pVVu39udyftOd)$nh2mQS7f z@0^t%m(*`P=t=KpGknq}};J}C^+1p@H0wu)$ z-ohBWeA;2*SE9mlL_OWH;hVy9Z!ON?VqoL(!)`~)oMcU$WU!navRox}+&}OpVe8IE zoE(tivIP=eYCVfS^-5@v@!Ka&c4HC@=T8?sN*y!#dDFK1a~cN#i3wRINLuYf?dqr6 z8`s(^*V=sN-uCP5hKm~e{>lk)mV6BzP#T+|RrrE>JgoH!JiG*h}p? zXRe(b=P&CGo2QAkskmEV5;uk3uk|MXMnJqCmu+9I5^q*hx9tFU$>#CMIz~l$MyIJ_ zH*N6rT)nokpW0fl?s4ZH0XLlf-gqS6zL!lrI%J+E68?K8+<)4x+994a9q%*=J*pqN zS1P-5T0M9#Up`D0E?Z4%`Tch?&2McwUTcQDyXX z+Wm+H(k~U*H|13aDX_c4Y+}Q<(V$9RKUM)@NAnQ#&BXvWG$LFr#5!RMc}?eawak~G zuwwf4lg+aL4rzxGo-uauqJL4y>_L&OLrD$ljKNZt#Z&3LDX-T`$1ehaI zLXb>=`Qj23=lvxu$P*aB50nG_sDj0q^-w~}jNw?6^`@X|o3d5-WOx~*Y&M9^_V_+! zu?l;O6;GTCH%`uLr)yQS4!nE}NpC&rcGx4WLHk~k7u11=+@*JB8$SFvFTCuRpZ6(t z=v%eqOSN))>;SJ3Y9HBZ|9aitbe0bJvY$Jfj@>YC_;D`ysqXNDK4UMxYhT{Ya+!xz` zZiRu*go5#*fbc1T@!7&l!wvJM4@`yvJCy=aHU|7|LTLwrSBv``{2NFO1*?V%w_3;} zpU6AC7NGYG^gZwY=E8pRk=wh~62QLOla;QcWN{aZ-Ax9&HMpx){bJq>`o)3sWyb!B zWxCUAL?B=jrhB%4f(3*Y%G>mHGpj!dMNshyUltFa)(+oxg@6$Vga$_23__GnP$Gm} zk8&dXYg1QcTdd5Z=yp$ziz67svee`F5<WX86@HoM@ofc)c08R(`mBayTu+~zDyB6=t)_JHtF-NH_t zqmudqPC6&L>ingnBeQe>gj&MjvO2enfqM*L)}UJ%^V&*m@M_usc5Wzp5YazC^mGJ4 zyx3FBa8O4$P)vJpCO)J<@VurybblTGDiCk8HU?*UR6Z~!TQ!-kdj#GcZzdCu>lBY~ zCx(S5>`GYBQLn&zRHkdH>}Rl)M|dGRdRNDbXMzGSZgOHmsTK#z_?n^NT&3p<}|-Jkd|4Iwu#HA7dzz5jQ)7-I^`pL zMZ@`$&+rmY_2M9Ql^DN(sc z;OBq9UVpE3^adWjh93TgYw#tda)n29lT7&YtbLVBd~bJh@VovO{An22p~=e_OC1F| zett?#hsO1Q=F@y-vB@uIWTR$*t<{1-j4Mmf4P`!i**P`QxmBTKRH$PW4!1=}jFX80 z1x$8`KzcDkH1t#=beDp7kC50r4DnzLrkH_}$TTe@f{lszGi`oxYE8wo3qr!ln2~}e zB^;I1$RVa`h)(%HDTc6iAw|AQHUR?}ORh8r*R-b_*M9eM@awVzIS%qBWdylMMCo#b znJn3Z7$^Q;vK+58cT?7T_tqyKD^@&S5WD-5 zR9O>x2KU)V-p0_o&AGRHgRk0$UP2(|T>z74ZKe=3LqLX6eXV+X{KODEpx=%ITo6DF zo$wH$5E8Wh@)dVjGUCb5&?tgEsu=6^JoXwGz<|RwkcWgsT)IQXQ3XuGI58CaNn<)N zG95&c;|L`+5etNvpoYx<3~m0i2s1+EJaOSrV{vB2&BjMhW=9i*?aT#T9{PM*%5|B9 zwtyM~ObSv3wesopgy{{@Q{oP$4pOETex^&w((52+ecq#r%D?-+a2Se7>x9qFSS{_DUZ=>8@`&s~E8dPXE?9 zX@#^KWoTy;zFPX-G^cM}TD7ywhMWRClHGe)I_|IxIf&-4*Nk^&8~BA~zqD1`rMtmZB^gd6`%Pc!~-`VjiaTcMm0qTzc={!fcOw=sD^>1<% zzwlDRYNM;(a)vu;W9kbjaxpenH-K!60~Az@f*RCESp^w{JX~2`Y$WjNQx>i4-fN60DC@qM4-W zA)%}(r_)_UUCp6$y`rqC9$Cs2HNs2_%^Z$lpO-N>J4uz6z?ZtzZV0FIpzP~0MX(J? zab}QorU%y2{b*55jXsmw!KCnTgTXc?!XBINaKx#pCF5qg4k>8l1nD3L| z%rC|fJukQ16>*;1wcoM`^y_JOnmS*A=PdfWzfe%Vu;TjL*jS9u4gTAuLd8aXsr&lv z0lJ8+x*`U_ba{76Ple5+d%r|^h+F5wnGna^VQr%v|meqLZ^qJNmESHpZ5)m?-==&got zZ8KO0vQnKFw*X1`Y(#Kn)hD-EwF{%{?buXgjs}lg&A~VC%Iy^RlAhYOcgULK(*}tO zdVkFk>|V(6h*QaU=+BXB$)$qlv8}?fuGR5nz=WaWnjXkSW+vk33DqxVA&HIJ&t(1$ zIOPIjq;i#@sH%S>iUx5qWC+ybAe4A1ksrx`W!6I0SCX}ll!Lykfm&hRZP5rO3WG6f zmO3f1S}{Xq)(gc9s|wvA%4$E=tCmX6VTcM6I};r-8f( zo~j6{m>7J8sB{IkQ$-suDr|XAfC{r+H>=PWuQg9);tZXt6MQ8y_;RQ8#wDVQx6IWl z?nM%)%SL0GvlDD?nFLQ2nj`?%#O z=taNTa`Fi)!)QhYXh(vSn!~@zTUM1}R=Xgkl_l5}lCt#uLe?-e%ZwMxrbE{0ndXl> zO(RvCN{@kkd)GqZPjR#B`TGqc=w@w(&o^Bgj<%W@_0*TRbwph^rpg;q0Y^Zn%i8W^zE?r<+hKV`y#%YO$$S$DITO0 z6+Mc|UPblaW7ns>yo;>*p8=rOVfEMCncyhaX0!OL!dWDKow68j^ zdI2d5jA=`ZN{hFG#{Dh*!DcO3BWT!|O4wh_+Fk=+bEYV6l`QiEyai*@DU@E&*?gqu z{LSnz>B_F!QFwvXgx>bypeg(h*V{QC<3sB<{lA+WG?w1Vi*Id>_v7w|v0F*GIjnTH zY;=T~{!2&6cO}a+BMJ(O1x4pI9pl!kPD5)?hIQwuS~9)7R+>AHUqs_ol zh5|Oa^_bsY}zfT$#T(cD{{sU$eT*1Vp%Jg`m8$fM!;?V@)SwO)00%E3NNr zvCUENZ?1ISUeMdO+?wF{*&e|+;3+fb$)!%!Go(b*&s{U$Ei=r7+n3%v^P7UPH6i*$ zPrlZ?J;HJ{fS+yt96Shez)!rjuf5gqJn$j3=RveEB>2FGOmSKIc{$@{Q~sgLSWL~K zV<0|D=%Hz&p&;J2;~D)vg9xCE3qH|+h$HeS6vA-DH0K(#pyikZFHV43ga=Dl?PAdp zr!fv{(Uh?;kuYil9~mn02*SNjx()CDgF;RW}*U2 zg@4a5W3?7iHO;YU1^-yp#0og}km4+Brp-yt+LA_S8R28As|CLp7K-l(R@i`k`TfA# zqo8Y5BK^lLdxwG=3MGx21^VA+S=1$PUsp zKC;iM%I-1TrIP}if$QzViWGC!wwCW}|3j!|)n zYClldhtBTs(kHTy!aPLpNKYHn z$xazVso!I9Rv1#H+>^(RLr#;-oVYhJO>TibI=)1EW~X7);1eIqj?^Xwc}6c{k~;@+ zSZVgy>0oB7{6M~|W=%*-7lw7^Y$2Q;IAqCGz7gP=q_c_h9@N}j zokkImZ}3N*P2?F@CL}|#=Z$}78DvZM6PYdwIFjveFacBIqzh=a&4dJ;5)-!1Lz%MB<<=_j- z^P+9`@y4bdQJ+_6o8qVNUlfh;u317G_YUpJjUgRa<^>R4qKRX4Ssn}D{RVO2Psz0g z-9kVr27iSe%V2jEum+q$U*|}X-th_gN$@#9|HD(mIZ!h={vV!-0Rjp1KLs)WP$~c# z0LA}v`!BdknjEFJ5O&aqsL(HrIM*lkpy-kIp2wmD9{6%>0ChmDCgW`~<1%fn)~V_r z9$xmxoR1Ay_)#UlePX$zXR%3f(KOb^Qqy#^TeC%L`+944=H2HfWcEEPmK6d73$iIN z8#o{zBUFH>Ih1Ie5*W;)95)bPi5U!&ZLg}V$S0c^$FRIkg7Qq z02T#2$w9~bUTuL4DlM_*C;vSpbMi!So$jm;LiBK23^cUFw-2G%+xl+aqH!;y0IEeR zZNZJm-9j4G(bz#4TidtKX?OR##CGC_DdSt#>}P{t9q&@a?fVeElJkpYOU(2Vr^R9p zBmEfSRuq__Fh(`%%y#lxo2Zy|eW9#snOw(tT8cF`b%6)K zSJ>gYPRLDP?!-sQCc{eV;`#7fsJRPYB`jd7sdyPJ8Lo4X)y&Y>v2#EYO4!eQ`sl5s zJrSX9RR1qGC24ppd(Ad0{(C9TOyot)ZU4@Fe;6f>_Eh>7!2~yg@k~Op`mDgv=~Rmu zf1W4_LTPBsynzHp{~`MetZNf*--dZ*C9kz-e_y`>_9tBV+5!V^`XT7%ZYZsIq42W7 zsUpqT&^#l~a~hFgo>q0@sigp7)a1ev7XcqK^W%zu>3tmpY0RXKQ)>FM0dkbUg%=b) zsA4tL7@jizkHC(foHwSzv215UMWV|3>)y=uO^BKJ=3EJ|#I(i`%yU{Z>#_s2d17@J zov=<=FK}~#9YJvcGc2{9B;*vny=epu^@iW6+{dOA2%8!9^C{42ti(!~AY(-U^H`jv z7Hf0#Y*k*WM_+o1zFhB`k{^-TN2J?j5U4Fr91${hil5Wt zIx9Y2J!zN;0?hQju9)Aq#i7H82YzP8;rsdS_)?_vtf0i%*~9FFx<-pw?|gsdU%Xgd zj8>#gus8~Bei;wf0o+&*(ea@xl0Z?}s}X6C6NxfiqYMi}t7&^~Mmove0CvG8_dH($ z0_=)ggN;lPn|JrAsx1f8@j2tOHz?eCC z3|sPW9ev?BnssoNe;`nYNXK*O%9a1lq%Pp_)naSPpTZi~f&{R$knM%ag=B7t)*@11 zs6vKZGm><@VZUhR(}H7Ho5)#P-3l+yb@tT)3v{jpKm9J;4@8f50@jc`OHNG1!F4C9 zylIs&Gvh^fu^PKK3}`(W4B^~Di?}VRhsSQ@6xA;*TEYpy!O;myia2J_#>qkA;X|W& zUoC@c&x-e8c*&**y_7MR+csJoFz)86Ygq%@BDP?$1om{vbm>KQe%#sSfKv?F6$O_1KqU9fn>Or1$h<;x!cnZFDI1u=v?wHi3wQdsU0Kji`p zUJijhsc2P3MBhK?h|^k72I%+v(dVmAjfY+ldGRtlA|+?{6?w-+b2*XDF{Uh1Ci5{h zvNnbasYH{c$%p56bD4Ge>f6q;en5u;x30;?z;`jYOBEmw&|%A7iw@kqNbH*-vmA5q zHn5^AocGH0rYG`~kqZx@H04`8V%O~Cm9Rq4<_`U%Yz}=Vr?c^x8=lDy`9 z4=lh5%rug34*n5pSSLFl>psO+$GKKmUQ0MZ@)g$l3eL7qh%pncrhFDINEd zTy?O0IcJ&24fzA(gyXye_6W4ULZ`!YMHuGlW=_Y9UC8r-$d-K7{+;2Zcs31|IQ#QB zRDB8eFMfdstm?jjQ^KhU$Nyamd~ix_>?Gy>Ath&sRvmHTcC{$zHI~fiR%=rLxLCk}T->b_ty37$%=%N0V4`79*yl2c;IB0uGcM zB_}BFu+WC4B;{!;dtQ2$!PDFPgwPaxLN=0{EoBi*uh2CVKUS86UYw>oYW9VvFFV?) z!&9n$xMyYA$A-SnU~aCG_5Cv_C(u|(Y^ieMWuq%-Mq zb$zZlp+Pv^i^#@RY4r6|nd9-|%h|7afnRoQK|rDhJ@NT58;ESIp+YS1w_G|gb+v>4 zi?@+bzUz8`(M35~7DnUz(3@1-qY%HDE=(k!U(jc06MUd{x*BvZ`SsP1a<-T@g!6S1 z$;nBM7CUCK)kmluY|xL%J4yT$9D9=7@q}1|mI#&)gU=Nc65vtC&+pad*(`tfgvH0+ znS943;ie^hT!GOyqJJW$Sd43r_7d%?Z!?Yh%&CNXS8?(2gxlQAUQ6_&*Qf@n9eTp6 z^IqX?z)kC6wYu`Gq5y^P7r(%t$!4HmkW_!zK^2Nlqz0KBS&Dt~z&E{q|?oH2#yAI5sF?1zQMv(Z|mq;E-)h`5~5DGgxwiLh=C(2kf|$mc2;48fK9ak*nyJ-OV0py*Wa~OI0gj04fd6b)*lcaMPy|sc`Vvs!|dcvsG>-v8i0ucY^Gu^EI zf#0){3I^7ZWLmBojkFdu^NBk5box593G_^@zSz91);@*c83uo;BL7C@x;M~?zW~}@ z`LrAS3vQNrKTmSdPN;?MtA7sn9?wjws?NK%-an&k_IGzLw{_0$YRzKkHUsBHrsM`i z%feaw(9VITiG7ZLT0D3>@O{0tEA; zP`2ekI`pr_h-^T%;*~-YBdZ#ANPAGra5L5=gvpX&=3J2YSe+C)m%4b5+MliYJ*?c! z1%8y&z(bSN;NJ90PYCG9L}~QznRLd%?BnhG!0f_Q7cXRC&F`89F#9rjP6DmZ%gjN4 zaGLyLsK`8sQe?|Q8^Z7?c3cYjs@^xLmV#y-Y?XlNJR}S$t!z=O#e!04D4S7r+kT-8 z-!q8FtK0@xX{rd(HdBY^ggms%&yF!zeXLaCQ$2piGq%rn;no03HO?%iZ5_2IG9{vV zV#<0TFNcB-cLNIo-H?|ftBu9u7&lTfLNCPDDMef>K;aMwvJBTW(O85SMNzK^bSJ64 zH~)=_GY&resTrGJn1FTa<)n8HsFqv>>|qg@)RVViRM}xrC95>gve=wCAwh0nl;uh1 z5_Lm)qD_-cYl{lV|`B^p_gooeje!2wB=1P{Y2mE>f=7e_wZ1?UXeCZ70HqLm+Aj* zf^oos&6*`y$;ZwNfB_L8? z2S2tn`<(HN4eybG_j=Wqm=a0^gGSR3+&Z1#aKDrmr4NdCO%7?uBM=@UW(zBZo1XqP zP>;^fx2?`QsfpJStLBQ2d&W8Ncm;+bQJ1z1pK5BAw26`hLx1Oz_Hk-5DOq7v1^f8N zGd>$z6+qzr!!zbkQIr1hjHdseXDqs*$hu&F->r(TI6#CES5{rc^HLETC-X{Tu6reB zD+sngiKLq#$IGii!kRS6imK*cS?8X{&c5^Yp0e+F?Rwpwkwgp)N+3tvM+hG+ZpiHIs^y6oLFtlr;8cp zYEQ=EMD3blSGEbzS$&LgITmltNHzWQ9w`M`Hkskw&c&~PP03D-_$VdLzNh`B4J=-j z(wdE*welrlQ;s_8no+}+$)H)8j_->9ds;pALF1sMBd|SDBH%#V2FVGmQwlM!QL`v$aD!1YtBUn zdW-eCwN57@AEg3;hkK0UB zT$JHQ{c6G;%b4B~Nl_Zm!Jk{$Xoqxn$xwD1dsp_%2wgOh#JWXD7v*tVl+Ds!I*xHF z8}ej6Z%hI^kd3yB0(P4?`fQo;phwDQ(7)#hdwcPW+YS~Usp%!Zn`1iN{~hv4NIf`; zc%&TRkWA>`n0$cgRSd;NIjH4G6{sA@R4OpkuXP?&Gfpr zoydqjhO9YzPKZ?u!HV7!>=JW?iYXiB>uzaa0j3-pdXs(I)z;8Rfcnzs(QzfgX67hf z6+$bd&mPCUwfByqDd2iflW_oJPW5~uVbyU5z+G1AGXFnVBkjMj2Kaxl2EqTv8vpn9 z-&iB%U2h?x;13|6gOISoA7!>zCV}j&ksg|Znmlv!nIei%sbh0aHcn&+sEl+#EJjm* z3)2lLn|c$^j4})56V>TzFq!ENR->Ja*`?CYoy<>WkXES_LxNaSDIG^yeT-eG-hqsk|p+i zL8%-VDau5G*uBWs6fvX3zrqb57jiVhSp-fQ>;FtdduO=Gjii1l74~EuZUC^x3WbHR zyqMrsfpJZ0X$OT~WW5 zw~bngW_l?;LvE9%LZLwW7{_JU{quSy8^ZV>cdnE}K<*-5Zp3xb<6#*XKfnHIRSuze zO4$1RnRLe$X~i$I#ZScwNLmpuv-vsM)~+i0gH&ac~#B_(F+yL?Zo9uB#= zbtt`biTEcv$J!M_A;`NeSPqCQnNmk*I|SSceFI7JlI(-fwHFZnN}}OR{@xbM;f$aq zreqB8oF&tJ_-d_<6v=K2^snr23kfq5N$=zr{}TkxddGLC)Ucn!pY>}i=lR22-9ddi;>va@`agL0UmC(-05^DcU3)a$K%pC z2d0sRD%y+5OGHqgA~ip(a_ol<(YPAaP$+fz1dWjxCl)kd%!egXqgU1W*1UoTEVS-DT{(E5purxq3 z+CaRIZ1R);o1|!%S)Z0aSGfC=;6iF9P>JV|l*rXlsZ#K512>jlaC-CPFk+%9wv5DS zEOfBj)&I*LL+)|0vS z4@=;46s>4iA1cuWdbgH1dyy54 zKp)k0Suuk)XdmAv9-MQ9x%y)b49g1oYP~sn3kgNo0P@XTwGJwLcN`>SB2l=bZAi-P zs<@<~NnG5o$k*j8{xt-AtYz}(H~F8HJxSM@stW561#S!CN6X%I& zt#o5j%SBCtBwm(T>X?3qIF_FC>Yeo+8)>eu_dz8kfJ~f?+l0FiUrKI@7?^v}Dl*bU zNSoBPb;2EHwgGXLPm9!Z&`|%>V7X4N#8j3rvl^t(6AcN9FEKz$K_V`VOr;KW-R`a( zM5#G&55YC@NHZ2L;npb$N{*8-+DQ7GtIWm*huliw>L)sD8$KlDccG?ah%F$P;UzNk zv3)+gqBZb_<9dlO?}@|Y!7?LdHM+=FNiKmJULmP;1b!EhiwoRbgs^dCBIS4+vxTI5 zWKON69-8m!06(CJyj(*^_b8L*)rXurql()3dQ5Nf?!Y+$NE|!2(|@1i9ji(4zZ=Mu zuc7O>V&H;sGk-)uTXBW2eSjT4wPZ!FOjes{D+YOXgIbY~Qff%<8;Iy_3(Rt*@xNw>!(%+LV;CJcrP z6#J#;Wr7v_lMFDGQQMUdaQ+ur@7N_+xF(6Fv(mP0+m*I$+qP}nwr$(CZCkgdZ?EY& zGasMz{(v13JJ3i3wQMKeUUU8Orc@kF9%k8bq4PeN8&C9}QzQrd@-#A6_Ks=^^cF90 z;28L7r1Y<}o8nCJ=YTZq%LG-Yb@p z03MT219zemfgvzeP6gNf7_4cR=_|g_JyG>=P!@#U(gu59*M6(RhMj=vZ{UOkS_*4U z(Sv2Rv)U1Ow~aauDK@2|pf*^+6jn=MdH(j6xDeS)XY_(pAcryr9Bx|x51<4h>BSj- zdVttLm6}2)h>P?KX~je2c}d%VleTb$JDDTc#>KfZXRPqY1JRZK1dLOyXG~vIY}| zH=BEACnTO4cGx6ZjRg{6LmFkj`0tzvE6(va!f*aby4>ctp6`A@woJVS*GEJ12{BP@J{dYR zI#t22$xkp@=!YytX@%J?@=-Zx`K#KctfyGg*6xLNj((&%lKB$v#K6x3ij=6zB35P? z^3Q<9^Kv-I3w0zC*x7_nH&1^+9;24y)*$BO0#Jcgf+&)Ey^`G$c51WVO|-yVE5vSr zh;>a%XdG^h2CC=Hi-h}w?^hoh(_l}KI*&;R5joNx#W*&f{yMtJ|1>#>{Jgq{cEkJ( zu;KO!L^gQ8QvK?Cti5VN%!Z1+q7!&p^`?pP)eyUqQ1Oj|D=OK=vIp0b`dMcI>_>jO zA%t`l{a7{b9BDXb|XgijR% zDw~}|+U1#%qhXevR+bGorC7Q}93nQ+z%H%L__k%WG`h%i-}eR^4_;GObz~v1qO4?T8HQ z46#qv_)1+!xowN^q)pMb#I+qVc^M7ExSZhcqBH7w#;`eR4c2DW2z}_)Q21uwPgN)d z{?T)_wG=tQBSpMtm4Wgw*U^6zAYCzX*y7L$vz z9YZENAUhxXrER`wE@TJ6SrvcF9nx3aZyp@rtOkExOYn8hz4vWS3Ub&42bi zAS6arFVF)A*t}L-`b2nI9&9clbiJQr;|>nWP(8}LPxnIOsep9VA>a`^_StR*v^^u2 zyx4jR+|n)D=AWKo+u+R2Ww}1S=_R`Cc6#)vRgR1MS;i|2?kwC=X*o9kaGIu?EkLFb zFT+~iRr#x~b3%2qM=d%w=PMVphq801^RtJea)%Il;8DL)@2V8@8THNPliS6a!*U~C zb3oX8M}UJfTS$`G^m{_DefV8OI+!-YY;m9db8A?=TzY)=<|3EAeUF#qX>83Aac?zG zn^b({2#VAm!Smr0?X7$|@)}jICE^;fi zKMKWWhjvme#{n`<$tgf%eWukXshnKPw`UHg2}NQDV_o5q7(|RCUzX144|Yma<_o`< zS%QRO=t5_PcO;f+UGW$CxVaiBeGt@I4D6!tHrA@C@nE~*|f%Ee6eJ05elKU$c<%u&E@i(F>(kjd# zG5lZ=7jRfa3cR%>F0;auM{Iv}I2il=kK{ubY!XL{25QO1_;i!ud>Vq5Cv`;5W|4Pb z@DLlQu8tWP^d?{;$OGBQ_~(wm_Lq9DPK}U1*+Z=UI$GxCpVM}i{PCN+NJMLFuIT}f zzlk9w+A4k_>X>S;HhF|>yIR=`sjAh|J;<75JvmH#UKSD3Yr?Ra(O4)aruS z!@%LrpRsTWHYUp|=q*QP!v5KFZ9ZaO!v%g?Ng~tS_x~EqU+rwyfXq)J5daz3UCroO znpN*1v92Jlk*fXOQKT5g%-AR<9Q#fsn@Kwo@!$i}I)PhBEVDOxDkb+EPc3sfizVw(s z`|qe&2CaM}iLE-8GA-=LUYQtl?RBXQuEj|oh@j#kufMzPg<37J^PG9og0eo zaL=Xrkkbo3JIm>mWJvU@A#i;=T?t$g+7JXyqYzjkPJEe5M?Ld?eb4N|<=MvlMVjz>`U(oGRwo6#`Ujj0(7{$~q`(tU2hR=x zqy8Qfvm!8T()vxR_nma@I2uInb@rF1A@B>JF3c8@ql0=5&&T%R$s&2;P8NdPG>jy8im4(&{I$Z-BrJ4TX0)U!wPzpXt*{E z4Z#yLMfn+4f`ZWdThv75p5;|EPNvO)=+GXH$9|2O3M<9frx^B1LRD_d>4}Q*mpQ`& zLQ`*8kXUv3Jnn8rK=_upHDtVU2);sM2X3KPy7E=CdSwNe&(_^BxW1rux@~dcv9-Jr zA*UT*$n~8-jEG~b1U-~t2dMLbiz?o{KrF!7mJHp)^2(1V7nNss3wk}S} zcW_%Ut0Xea6JcL{hPlhN3uA79HDCaPPk6S%su8 zdqam!)sIy8F^NnbNxlPEvJt>o_t<3E9Ag|H!;^RmBs*ks5YU&P!N=(1dg6A45z3bgesY1i&CjSH_s`%xI< zuDMiSc=={)T!F{%K7>4%Hw5YBg(h3Zk*6oujv7>!b3b&y^!Y`q-r>DEXRE@i0iWF0 ziRyzi!pbbHl2WP_r+Qy>&RAPgE2A*1+<*;HUn6nVMt)QiCBXc(hNEol#4M9_P*|Vj z5SWQ&7}Fe%Ln6y0m=96!7L$Ne(Zk=?EcBn51WzUPoQorEP1vp!!&}d-HAw~-#=Tuw zS0AZ%o1e7g^PPI1j_b~pExcSp3xddxrWOA}f7BhT30Mp6Yw6tOAWE&*5plGoU@B8e z1F<}8fh)fxDDb+cX=TPPFxC}ExQ>&51M-vC$|+sMSrSGEVE=Tj5c@LkY|-(7XiaFj z@c4$sB7{8C?eKH`{L*DkQkz9xzj%U;?(6e&&_D0J?_9uu&bCH)8j?pW1J5_pKUNmN zP2oziw=s_kki4rZha)6dfE7HNCsnmbhbbxMLte3 zu9(OikMPtg?3{{djBBBt7R-`?+heJ@C$yCtp|}RNZSw}8)TuVa>+)24PkfScM2TO{ z9&t|uE%Z?iO7?w5K$sRuzolmKdll&Kwj_+e*68e@?5L2tZCXWFxOkRTO&I>+)1QbH&RtX?UiYEU4thRaA%tEHSr|lrI}+_7)GHVixXmSx0sZ|Binpr zYFq0a%R7@NECXwo|| z#OK=J`VhNAN&yZC9Kbu>apNlU71-HNmVf0Kf0QadO9feJ^0B}SjimdDZfbQoz+>LH zzQ|bW+`9;nKboX&?3zHHS^Kk!iSyuqRqYVS@kSpxqhZ_#hy~@T6;(Rf2`y1n@n>;YU8*|V z4M-Et#_`?3>b5hhy7X45;F$%R2rUxA$6jUHw`uzb;QSg+?HLq`OWeWN{fv>ubWL3j zwY?yxM-b1D4&c^P=DlwTpooC=x9nLjdnB4w@Uo^u+nTv|C{XNtNV*YvjT#yLv1lmi zr6#ldi_B&9?z#bfxXDacWBo}^tE1Y4e#G>SLmMCQ&b#0t<1YBbY1IJSaR~;Zc6Q-n zA9nKoTMuOO=dw_auB9(F4LAEokLZ{9(bhjUEhqZ5Za2Vc!<}?(8?QISIpfw%sbpY; z@i&@YY|^&<;z=Zn>H6WAEkfv6gqXx_LI=nj0Kd_X4VVPfa|!d4}pu87wy{7CW4 zjCrhP2^*Jw)bmnI3Zx#F$<5I8V;D5ed7@Q`P~0d-Ctvk0ne?^1c2fRLj*VV+pku;s zWa-~zydI1e$yl0LqEery=o`u><6GJDRe)3&60{*U`|f;!-|w1h=<2N2Xk&%tuf zc>dF-wIC2A@wWafQS6+jk)kBi#Rm?W$VwXFP--m0q|UpYa};G;3sv*zxV&-7{2;DW z0fAA*cS)?eAq>m8zAiI?h6WX4?E|?Ckg>R?Rx)Bq3H&<|W6uN&ZTS2kYrJG-L1V{U1AeN+?iQ#X=&eMuf1lwf3W+~CC}-pk7VY%G|mdNEtQ2qI^Ozn0*D zZx5&y+)fCJf2W00)s=7~pZ@j{Z~xh8q>)9)YlU?gp!S>G7o<;aUB!h(;4;l{Nu1rX z;jVfoqDY9LQIB}i^QbHE=@_%tN<+xq2(@;l(0iDne5Hs6*V4rq=W++k z*=$8j53GU}G8>GFPQQm7tdEA+Z-AT6h0*lZ6tgkU+uYhg({@KndjXX{6 z!?#6-zw7-%bNfq$_uuM89xO^3xD?75@PB4ZNETGBr0xHy7m|@1OFM-v8=fnuC?pMcTu;mPRXVMVbp`+#uVVc-xSeuR`u7S=2lODmYppYNm6yzf4~r$4j5S&p;Q z;Ua~*-!cRne=4Lh0D3H^=Vat4zgcfHg<&u&Y_tW>jO{=1Jg0;l8<2?_NSHzz8sc~5Qp%`PRCW+`d{m-M5 zj4qBTj#-3}pErgLTYVrm>8TUvMU1&bS@^>`n??xk)TQ)azXL4ZsidoQ$=Xx;OvU?K zcQOMkiOsF-~Scb_@C=PC4!X5+^rSm zQEwJ8S7X!JY-JHPuF7PmVw~$_6K1XiPi0H*>ia7(CP~YV%wneXXVN8?h8=WZaf>U? z5kE~-v5X*rKhoC=i1ai?@Z_}$0+MdQa{`Jxu@639L{tBIdi)$`PQQFky(~v#a6Gw$ z9bIDxieIcNLQa*w-@?I9{Fl(8z_CjB@ic@q9LF_Ua9YQyXIoY5pt|&y|9XwX*)Oqj z8WF6-1$59@8xQL;arYWiKPMn(d&LqoEP2-oW1f^#-@Z$l;gnuAaT{(3@9vu-F%6am z8vQLW6KoSyD$uH4n%A3ppk&@?x3!tDr7Hw<&-GIvHWs{vyZej}#CE6EUNE;{&=2SS zfbG`B;tKLWwHP}C9`BPFPmu)+WR9l|*F1L_r@>a%Q6??#wK$J4y@YAXIMca#-aOd9 zj-#8XDEMB+@$QVBw2C9&HP`QtZZSNEC|AiJzb4oY{piOb-|^2 zb5##$1@|#0z=?F&#C2>^#l2)BJrj&_%>IOGgf=rE&r@0+Q?_~yU}5!25RUAQ?5;t= zDoG!b_Y!Z!d+o2}$!FL3Im6bNu@Y&8Bka0`LoOK0Q9X-~B#$%xjG19Gh{s6IQKSIT zRJ{tS3k>Na%@{ZaX@p#rkX)^#g=U%@3>~1+qgZxCugFUB%9BfOZ*Eo=xG$opAX@}e ziEx%FweIG!J2(^YDWRzm+U1e1^?{?n{o1+u+$znv2@NkqEUH&Kx=MGEGKQ8ZDULlZ zbvAz-Uls;xF|;34-=vpAdM9kK(urOr><-PQpFuAGdlb-sa<3rmtOl0T`ZOALQbURa z+kNb7C?UMJPLpXVq&e+Hl>(>#wHrnki9ee+hznBt6%bX zpEFnCFaZs=0~9K!!hXys?V9j-NJAB$Lx`;_POeDK@I{iVuSG%e{exIn;XqdDrOdyI z;`^mnj-HGY3*Xzg6>j4vXgMqjeRCQF!6##fn6DzmPtvtUIy3!mBl0W92Zq`Y_aXl;GrLq^~3d^bR5^9xX$byDW&=?Znd!UR`$4yIv8 zSQ_VkQ=cW9@@t_$!dH&Q_bgO7HDMwj;W!1UWTsA%0QQdD#2lI+hyj| z;rG%UY~UM5^XY}ZoBKdK6BmAT^Rj-@8V;hJypTGdYzTEDjKd)u`JC0xCFY6=9Pp!hEb4sZ5*Mn<7Ia4x?TbUx}3rbLc zCse9*;)YC~Rz?npD>^9qj$b<}0?Y-iXWZ2dDX^-{GJyy6{+p!Hx}0oj@8|LE<}DT- zH$VUQzOe?R;~Q!4u4*r1YyFclabaEtbguNC49RztbCyyx@u0rKL_eO8kh4*Ztd(@ot$t~*0se& zJ_6p2yw;px4u>1rWugjY$)g&=u_c3bGTJl9n1jx(-k+D;X7bixYgHKYKH}>6QsxNT zWT|xA|HoV2ToKr8F7Un@~J$C^`l?c^!kWYEW{IFcO;{BIu}Qm@vPYsPxm0S zLhYl2jY@vgI+p=6ha~TK5gP+@pCGUi*6P+6ji}nJkXr3x(%C?1K?_XiO_|rrt_3UV z_@#$3b37YiE-GLBuj8>UbK+nRZ-a@Tym%_Y=tGx)oI%ILDfO5 zEJg}?MZ_q}kmNXTBF-tNL3WbCydsrqvj*MmA2*fz>`|`rD9@lZ9w0Rr0Gk8v36dwG zEyYb_da}Li+qKs_ueyKL$18+PVisOAJM9iV#~eaaKpnC zwLr2XCGwfIR^?AqPOr8w?&|%C=LS(DnXa{}-3Q6Nfd7NY+8XJn8D<* z^Nw_PK+byV%30~yZnOPe`#O1uwV;f)u)ivut!?rQca|@bMhF&wew`S*> zbJ(FN!DAPOy9_o&7RobFZO9FGSrFR2^-+?-iPk~1kI#mjD52ll2Y!z3FWw?vZY_GK za!62CJ(m^l*ramhBgKMAo4!kZy!HN$!d9Xd2FOzo@$aTxLC|NnR{RDPHct2!lYp*G zy*s`IzxAg2c~>+5)-iL|3QjufVv7P@d4WNst8u7t^)T4?H2Z!D-Dx~lJ~MX!l%e6j z|HV6x0mDTIwW3EbUklXRVif_!!KJNDpN70(kYiiTu;2lPW#R@*0Ek5qnPj*BLEGSO zllvY7AUV=d1g6EML3LhZYY{j1AC5CAQ%?JTA9K`D3mOo ziB|(q(#lF@J;>P)weA-@)Asi_-f*{qwhY|LW`GgM_odqFNhES&fa>b6|Bd|x&Wiun zTm=1JUh*(#loBv0lz{(-w~X6L>!bJWTT-($MO3s`1hyB4C@d*eTP*r-A`^t930G9( zgCL+TpsQx6nGFmKL_{!4huL7B!~XgY2|y3CG;7VK<{XXR@|q;{zPw{5WhUmzmwCD#CJ*=q8o~vs;DhaCY`g-G{kzP$p59pkTT+a zR3F8TksCvNNaIIvq|j$18aE0&&6+RIGNQ9Rzt5Sz$!1$s>^DZO&kW`^=3(NP5YA~# zx>jloQHiln6I{tEg;Srgx{)7eZE1)Ubqeu*_~g}|hRFO;*!65JYq1Xn?>a=8wlW}M za~FYX@7l+YH9w+kErYaNoJN7I3ow|K$y@shnqIok;K@1w8db-5Nw~}^36b4tRB>JC zZ@%kQyGyqrXBxt{U_~Ex%4GgM(Eb|F8xGZnwC-bPCUBye^eNZ{L|#pK;`8hK(~pa`$85~-?_L)RiG8dyLx z_-jY!L96no${kFl(_%Uz6GYUh3Mer^d!6h0D!Vf8{i(ywdtG%=lsbmd%g4?vqh>kU zE3eAkNy?H8Rbfxysc$O5@v2%pF06F}r@Pc-&?8 zy57d~QZ|5{MNA`*gg85TEG^7AzLFU&$Az07oL@?Ooh^@G8-uZG$ru|4pkd3L`!#}e zAeNA&dD3AxeBW|F8A}NHNOpBPnpC<1+=x5J(J1UEd+SUV^h~kgEL$nrf}&q}qur#! z5?n^&WxEvDL0Jrq%AvuM#(E2_C7R80sR{0I$6_~e3^g#{HTF+?oMmRULD?ao+)r7gwHGaCn|JdMraL zJ^%F6mstZ2@8WhQ(VX5Ul5>zZAR8v`g!a_iNBsO?nq2xBN?XL zHPt2%dj=#M8_3oI@%>?^&H)@0@!^3EViYNXN+Nm&mc@{p;)Dk2BnikY4#E(*@(ay% z!+-eoq$2*PpDU^J!;1!d&}&+{#sjaFf!i9_)nF5^4Vzz}N*=}*h)-`t_i0nqQ^E1VTEpRf( zj7>8qv8vDGGEto+&xQJ@-Y&b{atlx(FSClBYNZ)7Ja|his_#6O9PTEQo@Y(EmR849 zH$CM<%~X25v&eiWeHcv&b9DsJ-*or~)cyGQYc>;33}~z7@Lc0nA$(nLbZ_Y&l0GMG&2RS{?r4bJ!e9C1Z76O9 zLS&c&EaBeYd07wvqfU3c)h9pwS#Ybf$H|dDBGmrblYfLSklG#;x#~h==2-Rm!)Dl8l}?+7-Rfth}Qn`HdCKzG|C3} zAX_)2u(C`h>Qss%XQ$!5kyD(j5Ru$!Wqlq*&BMw=`pkLtCai4dpg)6h<(t9Q$n>{i zAa~zP>0L7TbhJ3LqaXc!%3YDtPD_}Fds~Y-ocFVRx-)@nr{(9Jj$Y|u7=7eE@$tBn zcY=N7uDF^Sw<>yXvLF_tihf7J_J+E)bs0k9XSLsiJ#}3uNV6sBO4AtBdhh@|3js6hI00vkwz|5 zi$4Ja@)1P`&NEq#H*2V~Nsp-M5Ol)=x>=1S{`eSXlFK59$h2wib!?H5Gho+kKhu-j z>rR_y+M+{%hpCzlq+`YBa&xlV5tu${@~S3+c0KJR8m1`}dp+hD0EbC8w&~qO$3f#EJe)=H#gnx9qN-LQTDx31j`H){niDjxufu8s?HHUGIT&xo ztT9E_PlLi`L9{NSAuJK^S|g&c%+UUNbgmY;R6@%*+@*=*^~u_^xY%Q{t10ES5B&1r zm@^(|bK^t&Cqg;;2`02iE?kn*OQ(k%0(2BvTHGE2TVVuw;<6hic+R4}R@Ekaq zpo4xVKPM|ykUVyHxchQG|V6nGJ1IP>W3&8fm^+Kw3CBf~x1PN=xgiYf9^=bTI5W zZQdW6i1P`u$vaJCp?AZ2+!)arD&wk^Uw8QzS$9FI+4E)DZYMSLSyZL z4$0|>%IkVK#qG)RaC_&yV@w%@CU;%6X}h2T%?Ehg{9!JM($2FkxY??Uo~#3%>{|Mj z@1gGNC4J`BXSQ@k-acSDU#OGsYCh1o7b!6;&Z&y)UkM@P^ zb0LT{hHgoMfvhmcqg}zzg1Gxp%OhVw2Jw@tth7fZjlb zl$bN?Fxj~h>U0j{LOAT|H2W6AaS_E$uT;c^?$2BA=Od9Ph0^zm^_tQ4%qfxu z;=Z`fFclW~rX|va@S{QCMoapMQX(5wOJ9tQWCd{Yo-gF+WDkq6gfs`Yy!+XJ1)9`u z-)z3pE=;tIvS>gGe$x-oDn|&2LaC*(F`6BrT!i*gGww9T(a#4Ww04!HCE0V9VLi&Z zz~2&K$Idn}>pU|Osk7jn z^P!>*hS4wG@4}AgvpiNCqZKR%s3KqX1jkZ zP}m@t@NSbQPI)KB=@GWz9kQs>^TOh2;-J{#rL!P!d6K|=q$^%4s!RUdhoJ%}1&O-% zA}53MpAoGnW01;>=TUI10b&o8ZG_J6zDsFi5=$M&N@Zs`o?F{2T1_zez=~dh!BzP0 zSY_yx3MarYor_2pgdPs2RvLWZ1iSJga%2Ex2eZ5Y#Ij^ghEkPs%6?L6h@7d2mRgUx za8+)FLjQwE96Q({JOfu6O|+MSUFQ%FTD}X?zc3(jc$dh?;1HxMV#pq5Qmf>*)pS;3 zPcnYir78fhk{7QZl`T4hL)QL02rpfKH6O9mb0oDjc0qbc9~u?i)0p10y1TaNf z?9tRqVx6PRl{$-mI}`ilv#!F96zsNme?XPP1WvO3d~&@penM5d=pJS4xq;IjgLPEbv^lrSpmR%o*!HYG%^l^RlB)RPN)G20` z_9XgCBgzsKpCa&gp@{^TQ?S|(da)p>W`R9Tub7~-V;Vq^&EZeJ3w@dY!w4q-LKs?v zbp>3q6;0NCwM1(1(6niC443MK^n_MaS^iOJ^Ts{ZHplXZ2R;>_SDiW=a@@{ zP)?Z%3RLY)im~U*?5vyi?HS6_(pHUmX3722QM&vearMX+vr`U{ai!XO;$PU8#UKDnd(9go$X zmC4blh|3z=buEd2b|uirPDbd;vZUfQ6@<_zD3OMk)2Q;cwW(dZ!i%X$b`z7F3}tC5 zCd`cvn~W0xd?!Wl(ECgdIKi3sG8EXqZPo^zyi=}4i`RunUMz672V0n#Tj|waR;ujs z83*_j6kCiPp58^G-|{V}99<*m;Zho?$z=*UeuV(OT0) zp?-z9IMT2kG0+?{auFLz#JLq-c(a=rAl8s8BWn5MXCzMAx3{;w)#5jUQm)N##V_g* z3N;Crri_ZMvaARNRcA73*_luQdfz9c>(fUu7N(~qL0q?2mzRy#lh=$SCIdeUBwo9- zA6_OS;`k8Vw+L+Ms>rHhY~!b!ni?l3TCFWWBP3D{>sQMWAqH~s7LqvD)(y-1``Y=< zbM~YDDS=;eqwi+y-mMUZNOSrRo@;Apx$b-Y){>H2hMI3aizfC-Q)woZ*x=T$@sRl|3LE5;vv;9hDTr3~=Y9Hc z73-9En6bQ2jR0ScaDpJ46?MfHAV>{XO6k;y`s04$DJtgu4RQJDxIS7hRT?@sOhqJBDhYCraceJ>ypRnQ?u78_FvRwiL#FDyXRW)e#iC#x$ZGQF2!Cymb$T> z=SH@reTi@*ggIAU7of6Uf^Gs=T=pt%;JQ{w^=I$~9EtrhEHT4u;tVAWqur0E=O~_A z&YWZ7VQIuino1KKdwSlV#m-?KcAE$?y+r%$fZ_mWlTJh&gd9V)T@7Fdw-1F{=y8W$ zNOKS}f(1xAM<5mO=1F318Ptyzz{0)-$__UnLMDS6GUO z5|j2~48Zx#Aq@?oak~WzNi6+#Pn->A`c2LAIkfmTsBr|!D}-gfwI~=OfKmEgVEF+b ze)@x53pNSLSzl#!+R&h7(`{FusoGAydWk#lI;jfAZlm!wR~<4Xnys}?L&7944Jp6- z$`TJHC8;?7mS&9vYb%&S~;?mduC}7b)RnvDbw>$Jyr;sWtBXcH|9_-7pDsV(z8}YN_7_> z2YaSR(&GsAGG}F1l#tP@y9}^a>Kvr}>mT-aE2C}Gq*^{lJtx2Bz#1ih z;KuE_qhnLOfPtpuB=592mi~okdP!=(ymFRF_R4w%t@Nn=PM{C7N*TtDNuX1I(DFm< zdkknJ+9&I(RCIJR_xP*hPX8_>HrO@FVUpX)w+ynMx5sibI_q}h8U6MP0?Y6;!0*H$ zD-u&)ZbY8Opu$V71VxG$ z5{13~b8IYP_mi*aS&6dvsqLBPk@9$Dch&j>_<^d4>e@$6z~yEO0}KLAyW#t!qQUFn z?KMC3PBl%wX||}uMs^~Ey!KpXT7|O4gWHXUx1y_CRQwYW$txVsE#Q&BCqbIp?zYs* zE34kq=E22niu(kH{;AP22h;EXmvltN1NZm+61Oww-Y%rs)}Xd`U%Ap^rk*6ZfK5Lm zJ53(|Y7x9M1Tf`ofxrhOBMYSc&mGizimjw37(2~m199u8RUI=)U~6THbx-yajzT6+e z$4($6ND_oow@e5#dPaKmw!ML|2kl7a!66I z`P-c4ds8o8POS0}s1^S3syo{BEXugnN_+-{8*Rc$(G~h?+&TEzi#zrlu3{Y4I>Q5_I zCKX8){H`8k<>%2a)}<*j-D+KwU%*+O>RiO~&S#-to$vtlU$Xfe8cM}KtY7#4V*Q50 z|Hk@^aef4T*+)0N1Wdfybjk2E<;5YN*Dh2ij=#1GI<$wauf`q&mFs$1ol}OMJAhM@ zQ`u?iTTQo9`y0r2>5V%qN;0;V`lFqa*tHbL%Wdf{dzWY|>p?lx^ASzCs&V7wyDa%8bA^ zuqBq>2n=8i*AX;RW(TMJ%YQ*LjecB;e^7vQzBR|woS~%#Oemkqm1zt%gPd3-c*Ij& zVW({$_K7n1FXpFB=SGyg>+Dn$k;ffYTrc3?3J+Ki8l$Py1?)8pu@gpu)TFnx7D{=- zK*8~0%7Ow+Ba-s~hiI8H_cokLXX(i;f5Mi*X2=Xqt`y+DBE&}Tm85RZo-dKMnhtWh zMf%24pVCt)kuP{M=ZTfP89OlZ&t+1W3MVuaxF8&-im4a$ayHP}3s>i#A%?USybi4y zpShZdP=9#(rUStyNsWuEUg3+;Ue(_eWKssw;}^`zUj3km+=hlyF^YS zcyTBkB#`?5Qge=T;VzK1-QJp8mXGuzLv2*6G%K=RbB(90+?pg^ z`1E3xoT)Z#$g|6er%^wXP*~v0Mh9kGK~)(=D!6FJu8jnr78bp*Q-pOdqMCs**m$ z)Ew<)JV#z-yPg2c-I!8BHmOWvm^ZLS%eYkkS8qn-V!PHvp}-Q#5Xm5INsNVMa#)#? zZKwyjeC!Zb7ac_qvNb(SLqAq=9JH>dO%qe7lY5+A+-B3oQqCB;VJ5L$l5n{e9ko5Q zU}CVDGC9@)J!~@2vO9(Tvk^08g3=FE^3FUjwP>H^VR%X#RjV_6eDlMz*t(T5F$2r{lC&hgn8dG~1ZteO z0|Tzen+99rF|jyyPbi!|hm2Mgk|dE)QJ&4&1BXN}&DSDG!W|c~?{xM!2S8hN)9DiTqtF`a&u*p&RF+Bj)em=q5+goPd+usSi#R*JLoZY#w{#1C%*<- zy<$}z5^@-QtN|aS-#R=2vNI_3Kae2;7FNWC6zj>S{8g%3mS~CM(pDP%EmsX*vOK>xG{bnsl1p z>4?hA1V@HpJdZaO0^E4dh-02DMa}}k2tjVTB6xoJJkdf**&+g!ql)&DwPwQ9$!a%h z@M*)kSI12}-Kpq99@(@~e;#aG_Q71O1I!!W3$ESm*k16ZbI%X^wt!ED6S3OFskE=XN3R!lwtgpw!|Au+m@Mt*g79_^)Y@EQt(>ByOLo?K zNoEHQGUBMGu_8qK&1Q3Ax1cC4!X-{JT@$)+oZZRPpX<=R=fGk^bj8`BlqWGuK`%OOD+JTMQP>86>+ zN5gtRFkEw|Wd6lD9Sa}%%bQDjwxE!rnV}4PB}H`Jnz2IQD{Z={qz3nmsN%?mRulq_ zgz`90*r?1^3~6(6N0mE8jaV*>Dj8L6GU%$~4l0Q*;YANFM(&&Qg|z&)MH5Ad=f$MPQwH4sLJ{p6Gpi{yQ=D+m~q_&-^2xq zjctM-F~au1uo-NdR(@SoFEo^`TbLtIcg)tT9W?co=S_zG}zR1*ewG?tMQC{ z)|unydSHmRaY=8o`EQ3YIM-n_y1MZe;pvMV74OGeYw4O9Rz9QPq zSIu7&p5USuf#BrQ6q$sCjoEmxX+Gm~i;CH_s^}O4o?5(wA>1%ZQOt4lCt=3;lVLG{ z2nE_f2{O3_sH21wpX%L8r(RL3nk1M-N{#s>)J6-_8pN05oU{cd2r!I+(`pFOUjOqI zXm)&Dt!^LJZ1elJO4ydoa}^T0bU68+cC3<7wYX5l1;-D>BmiONr#n>EPV@%C1p7Q% zz81c*ox!@FsF)VTqXR5KZUKal;*$&Xiow0ac=Cl{+M7>R-z4=xxPmxlb3M3nak4f{ zK=dR;zRLm4#8kT^*QnTZh)hC`TaN7<8U-?hR7y*C_O)zfg!Gg(6w^RDj%y9YHv=dT z)>+y-sL^Vf6MdS(Q)VJNSbr{Chr|S7PpYRI!Iz0ke+8fml(2#GmTO~1xM+O?Ke9`I zebQlE4jA=lEQh`@4LU-v)DT6xDMPf5ye%>#s&iZ2K`u`1uJ0q{vF}7)xlkCcmX zAdB<26QZf;+FHGUR}?@FJM4NZ@Y5Nm>~(RudK|HMzQg19pIc|*eQPYr7dH|KBbP0s z20F3$sKK=KNV&ET0rnE(g}4d^pHQa#ZzAnyF8n?)jR<}RTH?^*5!7fDno4o|$7#e!|wt12OTOC&G(fUs-ZImpaJzJ|z`_L#&|35%Y?9DwmQ$z!-}_jZ0h zAlOCQe%fjJ5M{_(?WG8W2OF0Uk*$IpLETQx*8>Ss=4zl$IZWS$#L|E=f7?`IjP)ee zd>%#l8A81<14Ig{0LgDpj+~J7dw#Qwa1K(0+uL9N4O#e#teEl0gl2mF*Xsdp~ zHarkp&dV9l8ag3Q*hzoo?qx7aYBv>}@47v|{W8)~otTa8|j zZE}v`R#fla+4p^FZLLn)DkVjFGuBI>>8N9ux=Ff_-B8lmzqOBhM|SLs;QznRDf+ko zcZ70)E5yIIDgc&!^Jdg>p|8Fhk5Wr3i)Sf0bS_ERN!z)^BF^a`w6|E4N?9#4;!WA9 zQJ-o+jZt8(R>bM~w##yPj&qQx*pbGay*}^VzVOfdZqIY=>2;lceAQLrm*z~DOECyf z-9KC;_b!!6;fJk!K3GU8^N~sMDybO%%>-LYv|d zoFDXIY*pqva5}S7%Z}ijJTTiJu}L!)nZ-bC4fnd(i>X_nASyRjF}fwklh=XLvr`M} zkIVDWk?l4bLh&ZiDMI~sVefX==cfDY1R<3sMBWkpNfOkV)`HKLkzR~EKQlvKZ-@q` zh(iVB{bAdWcQ32;kxi|Mc6smEJ@mVzzrzmy$uI~D#M&U$0RLEe0$<4ovOa5GL+TLd zka5f9B9>3tQU(B8$DfHd1_MMdG*o-C^${uOddoJ89*kc~jTeZ5WY3nTO5qd|y>$j< zo`2jjjrlL|x;%BRNE(&o`8A|6M+d?g6io$xjMK?FB3|CW57MtSJrVd<%r7@>g<{2Z zZ@%F*=FThTie+r5G*kjLW@QJA-qDWEyjymAfdNYTt%H!kdu@CzGz-0(?3ARDS4iNCW570I_|*QhUA))tn)CV<&)4g%#{_x1^4N9v zY)I!bov4tO6Dcv#*_v$|=2dkCmhSmc4C;Ip3H~B?F{)__I=`gYT-I>04NgBiL8Yld84mwKF=jBL;nZciM1)`&-e8 zJ3P!O-Bb^xT~&q>eo-1maRLSYmhU_QR13Tfk0-t;AFw@9TaxmKe=O@WeG_mB?7{g% zG8m{5H`V-wJTB3sS#dA7w`hNfeQ&(M!?OkbQ_FHPCRC;wvE@NUSCF^!vjl) z=RvWJU}Nl;LtgwD-X3F=|9~N`ZE(7eV5viPk5J>p*faly#~c1+`m6pKbUWU4?=@NR z$lKoANPhUT)-sI%<0(tV2cVO(i@pc%W}7Ps()>8xxO*e=-lo{YEYDc4&ym5>{*2%O z?McTV=grY-=7w z^sx$b3>&2Iq4SEu&$J*1a7^26fL_b(K1M%6(q|ZMad#gp9&N_<4tYWE)dB^E12W!` z93)?ZyQg$GM;&3s4$d^Tg8il5uo`Ul91e-1Jrh?v?;xEd^GF&xo_yT_SM1(QjY6i0 zCg0VCgna5Bhq}k6f#6rnE$7#y@3<=^7c@_l7e;!*zM=k@P{91YUKCGi{BYNTA?Fv1 z+Y`W}LLNgq!`&ZH%kA(du@&@7m-fUx#wX6F?l*$B6K6*eMO)u7e$5zyI7?7}pe>J3 zcL~#EO#6^$WFE`)^hobgC1%&ak(Vo+(QaOn!fj2A>6VX&SGrkKSahd{qr&fBmfe{c7C}KDvDbZRFbmmWuX+|3i$Cv zu&5y)omt&9QxKv%n9fahRmOqIl{sU=ROPLiICt|PqKj?%Zn-;oyvjWtl(%_OS#>V= zA>IYvLwK|2Pc5iH&vBvpJXH*WoAsMi57v-f1FrLnpC)!`Pfp^>o=I2iKm9PEA4D$&`+S=?a|0{%aBFC&il?2R3;Z~ z&jc{xc!9nLaq__98odoJu*Zw8J%0ba#?Z1M_^tNoA*kmp;AZ|v-Sqp201^Or5#>+$ zK=jtK*6ng~q8i;B6Of-b_1U!Y_iV+;dji|20lfO&MO-JghD!Jt0H4+dPasR|tLg2=Dp;7nD1a z*+%@&bKep{z^vf^2oPaItbSIA#)c64j1K*?A?;u5uW%7)GP1+fX9_6@kOdSj5Cnp_ z4+I27DF_srI4KAWl)g_G9FhA91Oiox859IVO(_@>%ZNA_0-cyx1Pa%#FBpQrD+m;V zCGiVXaJVFtY`oZtA2I>3Quo)0G=7hECPi%${Y&A&aET{&$&@FfPgz1 zB!C-0V)nBif|2zDuH1P0V!$J2Zks`UJOK&W8VRy zqYI;kW2h3>g96l)L?AJg)RZLv8eZFj04+Ty5lkJsehDlCKhR+;!!VLzY_l}uVH~S6 z&>&n}Y~o>TyXNFDJjXuNNPO2>5F-DlYiME@2+~pFFpT*i z5-|J_DMIi4K&sscYS8S0X_kSMCM zG?Q_fs<6f{v^BN!Fm!coH!|q;c4+W$4Wq2^3@s}z@QjsObA4p(MdqfZm9@N1R#B}Tv^=c6I^*g zuCm-w2&70@dh{#`IA4=g6^MhgRL6McoJz(J4~xVUm~+ZX6R1z?7mz4m+XjdEF1v20 z`L2LuGyL?E!ZW1zE3U|b&qpQ5@UK@3i9#PB7)iq5_QFacPy}I0qK{XlN!)i`^(bOc z9Q(6kpd@9`;;7Q>%0d|7D#;R9#%al4Z0vw@kOV_J%IrkJ7%5U@=jf7@*-2^A(v;C| zXflB`L1`&6f*{Eg#B_*Y;*x|11M`9m?RP4&RK*aga;#HjD)`J4VyRLbpvIz7oQST& zIF@3qVuPnL}FBz?gkX(llE|w5QovD7Cgu9{+(RMUQlRg;e9z4NQ{2i zOiehNs4#GKPeiT_Cp?r-;D(Le#%adrUGQDTC@S?RCm2TboJWZl@?56{H1XZ$q$|g1 zDzVKM-4@GLHXVC;4zXppAOUIa{P$|p?kk^cpvFx@rsA3E)cz|uRDY9 zg6nDK5B&?4wh9Ci2^fx5;I$i_IqbEcZdo8+oJW-;cC?dP;4=tAl`L{vK5XE7aZoZV zd`Sag=ofgi$wuUVKWDk+|8!89ZBcl{RcP^gkOCk0XYTh_pou;iX3#c7RUE4c4f!?? zxWk^<7f#fpaoIQj@+EypT&p4hrWH?3ALx?)FVxtpW|)*P0je=z0B&bla9D+TVXk26 zwrvIkPHItJ3m&gn#!>&nmolyRe)AyWFm&X^~ePO_Y_%iY$-Xbj67`*%$_&PG;t{v^RyLo zJja?>sV{d8wMjz3_Hc3n*Ttx5;>UB;ZldtbK&)QZm5XUo7Yq-1vM0d0EE$&&HdSbG zm7K(#o|H#1rHh(o!dsRWXqFmlgBDPX-=;$Dx?&FLXmbMf)Z+J`}Q=$el8U) z8kLG&zmQg2*8ruB7|%RFPc4W3ndzzV9Fwkj5_#Y=W}Q-=@x!iq4N;GAzFdXd%R7kNmq_k6jKP5)_ z1?K8l1d!T(d?;vf&w~vAq8(jW7&x$)L?r@d6OX~FwkPcxTtQ8pABr|^5?#Kuu#|q4 ztz>20wZUCh9En6iRuWBFV3FV{{^7luO{brA-LZ8)ER=Jh~>)a32EgMfqu zXJD1d+vU_$XuH>7m1d`KfR%lgL_wgfu>jD3fymX(bo%y!q88iEXGANr}i^rkIH-nXNXb)ffomCpD0psJAuP}I=`UiIpKjwLITv(jKiS?jrwiF zjpCjlxw?mUY)NJ4uTMieljagYp+NBHzt$>*LxJD7q(XqW8TAc=hQq{)fDz!M(eWQ4 z%F;Is;dYKR1bNK@ajcAj>>4|@bcAKif#M_BK-yP8)%cJqeM1NeGiXBqu>Mo)GxH&U zXXb(JGPGc;%2OhFpr|#K(YFoCHFCSieaXrTm#fa_j)iBPgC2Va;OSjicZ8nC)Zu;q_yJ5#(uL8Wf~{L7{D+ii|NGUcnlY^DNF*m>H@| z%z^nwZR78PEIBq@uY;c{c`$*8yw2HDzg@r>I*z}H%hJcEm3))mXP*e-In{|(bOZhz zWn{XY)spSx=~y?3y$9Yg3S5Cf9CK9osGz_jm5}DG0GB0=xCwo@+Qch`g0=-*W z#5@gowPjyS@saixwdeVS4_);&qbW^x@Jx)hm-Jp&Mf!cXlnF;a! zy9x+Z=)5Bj!fuKzQTXCqS2lIHBs-`j8ahfl41RoesGhs}f4npjw^6!q<)_mI1A!$6 zsmcN%@?)Yz*h@0^Bj1OI8t!CaYW0)CQf3kEN|-V$gb7eF#3!h^YjQ%{mM@ts98glD zz<{f1K(`QwBG6csm!s-x2rHxLIe|v6x6RK-6jv-$6^3E`qG_P!xA)d+ zJ`{7Jp{GZ4^{kV`C&DI(#2*|rYs7aQ8oF0xpF{asKZv9_Oyq{_xtwo_(&?-UWT_^- zrtykqkJZqt<6#-n+E-T+5$DFu@Kxp9(bfmRTVxG&ofpYyZ{>M7Geouw=%8+CZEM?E zBV5+$r_*<_#f@WNR{hwfdA2Bur}e`|DpI>ipI$JPmA=D@bWSSg zwU8gHLpKqQdfI6^?yM#&ioj-?j8swr$$C$?t?p?hf%_z>)L+6hj%e=7mRB=CM5S^s zO$x8NG+CJP*lhlx-IhE+ddtCQ6VJr;L>|=4F0fgw?-zZb97ptEGPvja{@GtB zRZH42?(V5DD-}6~d}*QXxyokU$y9+hQ^`3xC9Z?%t8vk|HrkHe1}?E}WA4s(^d{x3 z=I zY;hR!6Qd#NI2;z{63S*$R<4>N*b9itHCXd~O^b za$N||6hCp|k10!>IpkZ#LNoMR>6H&8vR1W&Gt~hW;2^?Lxr{O^tJNX#oK~eq5EKSV z{EhAIp9%p|JYPZf^`Do6YX14BM5R)ZddwYz}? z?4X52lPU^zW83fhMeY{f2XB8}JlT{s9!bA zU?gO5K_Uon8%7YD?tCCNNF*EegK=yZC4;rhFtgKfrYMawHDOW21CR>RKSH6Yjg>&&{ws*U_W8!Yg>V10J`WSc!hF8|GXNPgj(8)05z7{`6g0^( z#)Gm{H>9+o5(H*2LJ3TBP{4Ky!aoL*nu{kpG?P>R;f8pggOtH5@%qDHQw7TVp zN`)_xacsiEs!F&g*Ny}iUNbtAky;_0So|`8vuk3{g43FYN#Q%cifr=i-)pV|i|67d}@VpSK6~^^aB=+HE)k8 z=megS1w4vuF?zYB)!=|zMbR`w)s6+eWyw^|btr6En!6*kJ%DDo;^H`Dv<7}%y19rM zEcBO}#D+-H$c_`8BwB7l&j&A;eBjS#QP8P=K&VgR!de_fA@)J%HeYn`wvf;$ z94xYq)07c-W(;8)XQqYUjI;O8?X>1b-+6>ZKA1%=d6Sc|v_B_wne&NZxnJ z7{Ws-wTP8CA+;6Zk;@u>m#ECpETAnEGJh49H!E_m_$H-6zQ`geIAR$UDJrjrH$!-m z_~F7`GLmOO>Nj}@9?o7V)bm?A7lEdiJX^Swv)a>;_27o#z2{w-XkLQW*e8P94k=%| zVE%~!Bbc#m&)g$1aBrR-jfmOe8xhn@uce~Ip40#wrwwA56)Hwvu72;~SM(bUFDsX= zir|Ssd(7jYpVnJ?l+7Itbw4YZU!KkjU`_Mgb-R=&Drn`L4dK_ye)`ktj5BP|IzM~I zY*X>wALo?Py)yk->#ilAN$V9Ewb3R0Th1*?kZvR`0rt!n&CJG0^aBTVPT ziE{`P+*(ry#L^+9 z)=c!<%_~vzr)cyHnczQmxSwVn;d!4e^3U8|ogP)em9@jNEMStRn1g~&q{whHW;{IH z5=}vYFe`I_MG_~(OV?IB!le+TvlQa+sQDRBErC@@Ty|a)4iG4omw0wsGA`vm3qjKv zPx%-p&5ZJgAK^@^=Jq8&IG0mR@9xDH47?G+a!0;i^n``?hJS)8km>lWNx|BNX z(IeTUISxT%E-DAupTx{ad0BJ!SVIdPhO)ieIPJ7D=x7tto9pF zF-^yE2-4>jBVOD`|0FjvWMm21er-AS8X_(Ccz=YOhwh#MjW@j1!1>}FA?{>czo|!l zW+{E`dyGJ8=Ecr%byYr^?Ttf1?0YyRFD69hkwgLnRoE!7;VWWfqMp|ESQS}>CNVrr zQXesTY!PJ}uY=s!N?C)uS2M8J299wj5{`+-jYX^stoXU9RG1&?3#M-V&X?d+{?8P* zzP&LVvh;)fxCoD7$D4XcX`+BqR|XU$awl@AG%8R`S@L=9+G+&*4NsAqU>LcBY+h4m zl4p#M?#LEO?Pe#TkwHYCU;QERCT(IAR7Ao8g#6DUXaaqy2j)ZL`OR=lB(>t**8;fr@kSL-(mM z^iAVlZM15U0bo|BVCj3rfOYImz^_^E%=v@tD=j>$*?rqclZNQp^{hOcjD84`g zZIfy23*IdHmSKn^+q2#8uavP<^PBuPo4Z%?*nxRfIN3g`AYoyui>bgszzfl5v1@XD z*#8KWDhNOVm>eJm^nWW9OPP>QJu`b5*=}i(<6D-Vp5t3=MNRD$e-Q{lbhmvFN<515 zbnl>0Vf6DV4W>GSSa_+8Kk0Yc=AUlR8_TFPP~Dx2jIZNw{|vB{yZyGphXmkWgOwA!`L zCgZJ=`H3l)skQqZvZ70NhfEk#Ynf*ie%`_TcpAsqAv(C)HQne)q(36Hi{!<)2(^m+ zZ@0prSreC=xwetp)L=#?p6E$F+qwD$LB|d^+TFB6A}hp|7kKsTo;Yn;ENOlO;jB8e zXXiNwDV!H`s>z@hM$v8g^>lfNq&aSA@&Z{p7qPpm)rP|~I&tN7Tj~h=;YByWIAa?S z-QsoD!aE7_Hx*r;fVK66!|Dq4ab=wH`ozRU28Yz2AQ#cg6VP7s77oi~F|M;_etCgm zXW72$^4mO;E*8(<_Q!1zRqV{yrUjKXk!^9SED$>B0fDn5YYgP+gHa0+^_0{M*{|yI z&W~N^WDg|HGKR#XE7X%ebK--{cyt&sDM~Ee-=&WO5=wta*MYAY9aLxrV#`4Me|0M+jD&G)8+Y{v2w$+2$`M|VjIdo@*k%M%n~ozU$u z)uG4Ux?+z0_C)D+M~g9Sv;Q*8vcJ&7f-_pF@?zP13UU6fd%=4jeTRK>^E!+i>oCijFCUOebtII0 z{~Og$JkX=@4JJ-bi)V63e-_Bvjne5YnD%+%YV;7gY*Ks`>5?qaV-IPtfXGEUnOHK# z5E$0l#|#x1XW%Hq?tnz5f_e@rs`CAPN*~xu@kZJPTAkI6+V?aZoW9_d@TKn#wBnt> z679=#v8hwFtJWjh*(p)-MewmeNynxE8I^AO2)kIZAMdeh!3T%KF|)0HZOY`ptY%SZ znCnYF*a`#JPS%c{1PIUr3S<-u>M5rnt)#9?vTyZ_xN>|DQB}n>j^C{eH$jo;Z|wQv zEwscf_I^w)!@R1KM3+|R$>J%iL7)!*Q6W2n*cTQf+hAY^C=H?5XqLN2X9j$~gdF;* zz-UN95k9f#7haTFdKw|kZ8PyyML7=IWSBsv0n)hVoE44%*@Z@^TM@&A@WbUcKuiSY z9;7z|MG#Dq;>KCqOa(A_XcHx`8OsUka;N0tNd`eJ&mc1A5YXI7-j>WuY`YgkJaH|a z_FI)*8pZM{mv7x0P5PD$_*t+%{Y~dv-^1Mcf~?hI{@j5-t66cn<_ISx)Q-^IJZ)^F zmHco@5fLp~1o8E;4lFF(-Q`IPa8{U6qR77((@#&71o?HW66y^}m ztcQum;Q^WJ^B0BBh9kKc+K&_(LfZtrHkkO!#L4%+1E+gLl@z{`b~KMi=Y>Sy2YVqc zRQ|SA9g??Oh6=ADP0+HsL6o{f2T~aiU|Uv42Nwh9DyhSX#ECB{VY_ct#q< zw%zxv5pIe1=qBNPM#`4jUN!u&q)%adm+}(Sf#5nz?OD7eEv}MoCEom_dUGaRw?AZc zr$rtjPr6i0)ae@iWyT~hmO@0lqzlncTJRkdx)Irf0CaBJYSZRvXv?g&({wM%k~UqR z|9ZVwg(>|rdbnFqiZdKk;lnxDRr~8!x&d*T->p&n>H)YLSHbT{5?Q4pY{oil&9O0F z5uby`a;+^~Crt&a?47>m;VDwIM-KaMQ{y zrBh=8H+T-dB9hHEL0Lon>l6%#M1?cR(86u3ugx~}5PMi}l47e{mTr%#5BNygcv>_H zmJJvU$T~qa4u2v}>@^D`-9sELJF^)U-TLW@DUYh4f&-7P+&#x>dh}{MaDR=v-`aI4 zQQUKDDZE%m@T#_4zXtP%m|g@f{SJX_N(vo0w))I;ygvf+?>{ptz_FyYvbWLD#=B)8 zv-qt#uXs!;f!Xq73bk2Hp?yiSxk$kvx8&P&y`l)RPiKKu6lrEjC8s6JN!op$3%U-i zyt**xpzJkN+3U z{`b0SDf5LEj&iIAmPfj^h_yy;k=MEyx@WS~yfe`{-BhiM4pH7PF`s9Ao#!jRZ4K#= zNw|A?<`^EB`J3~kDTElGtj`+cEv>^H^{s-f!4#>1nrSMr?gcf z#6_H2=)QkRwo#<|Do+EkCat~MH|b(N{7PxdmS|;a0)ydZr>~ym8ij=P72z(mpLF6! zs$!@pOg8!{>S-}ndkE{dHF^**oUjbZE*lY1i*he&x=Q3EgXnFB9K96gRO}58;ywdK z_8amdRe*f=DbHp`mbJrm#@ARIQ%#uF!#$P#Z86=KfOBGg*{pII!f+IADh~PjYNIxi zI8m+Aj>;KO-qVBl)Yhz%zb#AfNoj$P24wA%A5j z&zhkUMe>IdmlXlYdljWX!e>o2zReAjx!sbNn~a4*j*0NB1q-4R#9^B^k1;;^+rHbD3g2T7GQaY^Y>b5}B1rOCt-rQ( zH_95TTnmuaxQwVElI7JGa!cM7W*_NRGKGh#G96j$ireibUEf$+V4n2s&S&ImgC;Cr z_MG-!mxD`AyXiEGvVp9S-Qz$9U@C9tR;d%G@Hs2*&fP26xK7wF^mDd5-_Ev-;IUAB zjD&YvV0Xwl9tWH`o6o%B8G{IqZy)u2PYSL~HikJm2)yS?SZ63a7oa8ab&m2u6I}J& zeaQ>pO=`kxVq0v3{i(D_8v0z)DR9w#!B3E!#D-X4GI*1Hjw~nz(@JYQqS7B z0S+4o21f@M-1bE{WDuHq9|EW;?4qHxM1oM82c{w%0So?>I2J9*7y?L0d@mwg(hoXn z3ue6nMamka6%)MKAW{qp1Q?-MbhiaXAE?2XMu98!7GZ<4HNk+h*&>2}-2){lI!6;$ z_dv*t1Ct{JCEgQ;t6*UP0a?bARQvhQMM40m0pfB1nE!=^nUN8*5d>NS@c^tiH#i7A zsFMuFe=+$60cZyQADDb@PXiUh24(&W0fNM01qcxo@vXZ_#u1vvqzUsOi$*X+h;U*& zj9uV?OGr`DBWl!G%@Pdz4jH2qL`u=DANUUZ(FN*K`pLH%IS9e&&<%8OM-F8#xM86o zz=)w{Pu?d*K~<^+PbM;bxY1M>qop(2VQ6G{n66(M-HjKqt*FEk*ImoTM`sscFI5fH zwQsGi6d_Q?Uu^MR(AOUbPv21kmJ_%yk~J&J&KJZOX~RXp?--&usDK5M_TydbCs_=i zeJG1Hq)PT%{3A+6TnoYjwGAUJvHn?QKmh)KP8oK9#{U2Z8{*$7@=t2kzt&%H{l5w0 zB@-5$-5?7iRci`{mdcF{0xmoMhWp>!R0Z|9?^F&j{=XJqfEhlfLFLbqjY15c+YZxf zDy;Q)Rb)tMLKpi=NUO$*$lbMp^FUfb5v*t_Tn*UR&6TpPzRYXvg13lA0jl5s+$5ah z=zuls(o7UvV0LjLLZ;ok9A7Vzr%etsvK!kd>FsA)4mWsnl4X_#Z`RY6tESv#JMjRI zWuA+z!JK4-)^0AI!77yqmMXvN6o9U)UN~LZ<7p?1iAd&z#TBEV{k{b}zP_C8bNvdhhQ-wRKm7I?wB-AC; zHKT@fA(W$4AfqKXrIL?GrSu`9Aw}uG0PM6#0z}B)K_(d6i5!QIWm#_pFE%`9+JFDj z0txJLC;@1JW{psS`$c?}R9-JSEhR&TAf6>GK%`Am7r`b4D)zO}=8ifG2ZwaJpKAr(s7 zVci?7ecfA(;rdGKjOftI>8>k@#c|!qbeiR7smzT((Vx$X+6?vMMs!8|sFCrd9-g-o z0k5y+*#gJ0U&AllGPM2?hN!>W1!|2XyVE=m?jpm^zOU|u=B*ODAIbffNK48ky84)u zMK1_EkHvLrQstV9!zlg+T4-EP3iF$6f6vR8qNS5qVWL|zv>^P+!=zu6c}`(RH|#Ha zMRXekMLNjYz~eZe35FK~*VN5~)kY*%cNe@Jp7HG?1&>ywzu`)@ZfJK(#)4Rn z52s#|tJ0|3WCK>()TqK`E+IDqm?cpGn&Lh`+Sit^W*-Zgt_CWUtBLa3sZ7&}>Zs>T zKclBuRo;KvP5dI1=v|c5EB6*F@^H3J9m0Zw%znRr8@MoiX%=sPl7X}ijW|kiH@2ZF zPMi<);C`S$(SCf%wh%cT(j-B!;D)<@z+aiyUb)icvHAvI(?e+KYn4;gtzXYFcKquU zo)TP$3CG5SlM+W>hTMwZl#c17H)_()0Cz~>zE%gP=)v;*$gtxnQZ_5W_pL1eFMycW zwp4SBUV%Dik%B_82V~(n2m<6Wsh<6_6^%)zuUCk*>QnkR-Esrb=$5g_ig-MgC(wOW zM>yFMU&PxrsQsrW^k@Oti{69ZTE1w<_CTMq7XyU}=o#@D9hNeAb*t@dJ(ltcX}-Gq{x z@6HjE9IKon>kL{WFQ(U;ny3`z3UGq!f9x~e_M?^Y)vx-LQhVGp@O}y07OVd6b|xv23^AF>4{x%%K9b{c8!Nply4@zu=|%9Q1irqUt^~_~^P6 z7P1+eb3|3u9*bm9g`On&@c`I4Tc|vDI(GDqivlf+XDVJ^hz7eeSw*1#L%7?ZfTGXG zVcdUvCd9E$L}3sN;W9`)BsOjKd5+}6GXU7IU1D{(ye1_miJb!xAzCrHjlG$ zsGc|>Yz?*_ofOn>1n*GD;wZhd7wg7Mz2?5B00EB!7?IQk{-#{FUbP)Nx;6BOtwbHt7&jl;naAHyN5W}0H_W^wu z5fli-kuUP=EmjM86s7@B2XkDO?>To1ZT^EAle$i)KkV5k^SG~e3uz+1(DOAq{7j-# z{ORXuKat?+`M!Q@yc7@bSkV3Ab~#@S{rmk147qYIAK||Q|Ar6f`9cjwdM-OaX#hz$As~6EQ3yxKGY9KbQqgE1TtbkF8!C*wA zIY8l|7N@~9CJ&{iuR_82!u~~uMaqpaC1t*RA}wuWrfW5v>U=W)vHfzxb*9@E^v!(% zLU5J>op2t4fxb`SAcD$cwzkAF!tQtFotI$vwbkHFYq{J5X~~vqL&vbacCkR+KvR z_wq0jqA7%B`}FthznV6DRBYWw=7i5_D?^a^k+Gd)i;O()vWi;f>09KoL-Ws@~38NrrKBg`l@X=+9!EbG|UG~zVWB|$L3 zD$w&JxJw8;r=mTL%hi@rpDW+%N$HrFX3F+5gy9>=YNNENZacBTb-Ed6cD7wj#8-O= zr^mFB&%>|KnV*<9m2+$1S$Sl?hQE@4_Savb^lAYs*vK1@>b8Ac8A8kXq32W4S-yX& zbS^`L>!j;{|3_0x$^eW>BU$ar2eF^+a`y)oS97#;@laJ=F@7f4`r9o}FH-q>ILmpQ zpy-#B9fM^T->;#LI7SCqEjq8>-xK;P(Vop4f^+;IQmL+|y6RLz?ghDu!4aojLPsZ1 zs@R(z{WsWv3i7slEJA8HX>GdX>bqwJfk@Kzob%0fWGliQLy@;s zqDSp-Lib8d66&N37lhsvf;Zh&+#kz^*T%jj)o=ynA95%(ml+@GA7FFJl&gaO<@x_l zVGV5pGW+}f>Hn_9hyhZ6slv}M{}0mm*ZPYz{-3a3=>vW)#Uu(rK@v~`?NB~H^T~`? z(4S5~4)FHBm=Q25Ne2yr4RzJq{rJn*!pyO;k%9z`)EpxkSr`ZU0FRpNfLK%0IqmD^ z4mkJIALQPGL0>PQU&6#FR_00cXi~)?4Bw=S+k0hXmgG#^W|`{Npb)O;5R`oG1=QO7C*$EB{A~(Z-+_0BQ*8H7Wz5$ zb3ewZjFIu>HI1>d)TU0LdaK<|QFNzWO@MpKEes!2>KJ{RL^zUk>nJ>n}*<)dj3n zl`-BgI=j8S<=25(YeeXH>q>!DEg7v^$5#=g5@oG0^CB!_b8=`R;{AotNFme^?nm1w zdH6AIC=kvtC)?XfN_nBwyu8udyF8B@k2$g_uK!ewzs=vW0wGGE2}EvIX};`dm%}<^ z6|E@RgoG_Odz2G-ZS5`-j&V#m8_0i%BkN!*dno=ofbR>g6v)0m@Kjpbc28i@yt)2*pnh z_k%7ip#!j_(8BtDoK=ckd{#L102eMLO}2ftS*a0|XHwD`ALB-XHFwbr|Fuxw>n}hw zHR#?xq26QPEu(1cKkB9=r`Ic19$@D2nk!UTsSl5N{kiV>$n7L~GvEEaKM z-tfl|saOaxilLlvv+G1)SCs0{d7c%~e*%3FcS`R)rI5+kB0W+z_89GJSDtDsK)Mf{ z4MM&|t9-AOpn9F)@ynUa9R2>#y98rwT07dx-G-cW?m^6Bf^A#9=NcX*TPfF3EF!TZ zS>PJWOaW6`~~RbLugGwa(|Yes3>aa=qkjuEO(1iKOL@$b&W{o|l9 zgXre;)}FdS?D)Ga0+-#+0F}NzZO@4oZ`0Q1g)LPZ<2Y;i1ZY%(bSIQ3HR?u$pdP{y;x3;}Qscm2iN_#4w zQxxVkm3?r$aL1$2FMzirgm6LTlx+D`Uw0hoT=Yy|do*er`O8Mj*UEeo-PSSXL< zYv^ifWo~Z_;Qc&G0fzm5YCFHswyHRe=eGIR(mChop@9xcn1>a+n6xZi$`I=C!9k1q zq9Dpna!=ZeH%WJMvsy}JPi1H+I>rzbEqmxgjW9&U7-L`=bMC=M?ZeQmgE2uwbd;$@ z{GFVe{LVG!!Eg~u+wVEQeD3eu^Y8aNy-6broH>^KJzA=i-C0lcnrxv`Y?R2_o<_ku z=Wj_JGx?lrmAF*B1*hsOh%v|USGNlK;JSNiW$RRp7ogDM&eOt2DD5fQ*37J1u9ZUl z!Ybx6%Ldh~-^U7WjoI90b5(94{t38xTVae@iU)DHk_k2o@=9@V)|28w(TZcuSY>e? zA;TuGy3LEmO{?m%a=~k9)Mam5R@u7=LR4z5=YBz$*)}&N=1EU8*Q%5Y6_YE-)7)`| zooIHScN-M{`sO)vXSvViGJ{*(YQdf=FVq~%T~NyQ+05n8?1ICJt}G`vGKs;&?g1Jf zgkf+b8V@JDPVWyx9XV%^9}F5lHW2<1Hca_l97~}JB}QOp4EJ}56iNIDh3EqVY2L7r zxJw54(|~H=iT4%C!!E%?rQ_Z0MxHYAR2T1d1CunE;=5p?(lM_`kcop=A}<=`7lU4p z08)ktVGoH)hpfjC*&P2K@E!6uqxBd7$Kc5bOkGgvfEyM9l_?~d+cx>+HM(H|bG*TX zXF?n8Mx|rk`bz1X<}{SVYs&_?X;H8M=1HHQsC3NL&$|4MdXrgVuP%}YCn?ypJcX!1 z@l+@s_0fCK?S0;$^sfjK{3t@ci%>8-mJJ>1dUblBYjRQty8VG1KcQ$mp)4X2a^`D; zY%&Tq;9l&2Iw(`h&r>h}VJ%o2YcmwU3qA z*jmpebLTm7;V=aYVB&wp5lmD%=H+jI*&LDHrXYzIUL;%3Qm7Z*j-RQm>Gjn=6h>nw zk%WsU$m3B8wGBe+5cNxtk{EpP^s?NPN^vAW`X%Yg-Dkr?s0(=;bi^ zFigP&pkhVAH5Qc)dgTs4n|<20B};ZaLcR@CuoQhG|8}M8mwSqP&@XZimxQYZInza# z?{(_k@_mKr3j`#0;~?4IPr(XWjeqA5w-S}E)em=6t{P29?zJdcjZm-xE}m-&E-D>& z=P!jDZ-yk2c|J)tpQ2y^Ogyp^OjJ7NmDOGxoBp^)g4Yf5n?b=0z?jwxFe)8*<9!9( z9vn&dxr5}3{S-_AjtQ=Sqtd|1%KBaipkU(|7_K-oDK^I-vQ9OE>{RuXoq}i^B3w7+ zROVA9?lP0PY~cI7i%EB3jwdIQRoAH%+~i2IXu(-^H97J6VzSIiqN)*;Lyc!?m0do= z9VjT*Y@6k6uz?rzkz|vboLF318fm>=2J!&_82kr?h=d^sLnavk2$+}zfOz3f00OuX z9O6rw&>0v>R(S^We;gjIEDI4G4>2z@Lqexcw54*0>ev~7`WFD?rHnxcUYZ#I(M(MP zAY?j=fKEF{1>W4Nf&bY@!WVi&+}$x7|v@3L!tlUE7S+iY`rx3O6DIT CZy_xJ literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7135ff90-7b82-4f5a-bd23-72e5f76f6225-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ce71b966abd6f05a07c8cb652d0a2a14e7990f05 GIT binary patch literal 57968 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 YVvo6SSOaP5|Ko>e3MUAg0yca62fD`*V*mgE literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7441115a-7e40-40d6-98d2-e1869f64bef2-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4b7244f65be16ff8cb9d6a3d4432d23ac9e592be GIT binary patch literal 47753 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 Y!V5gAVFH2vfBXXx(SSgD@<@^Y11HRP@Bjb+ literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f6ecc1b9ee60e558174bf5f6f638048556c8f5d4 GIT binary patch literal 94411 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 A&~KL*P`Koh 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%0DtrU3O;cB~V zptFEePXq6i#5A)X(dmLU(c2|cLdnJRzY<_)Z+yAex?Ei^uB>pS1!A*+_!XDEZGkZ2&TeLN`wbSF0 z_{v!=S~()o0u=1w`AcMWGua{QWtOJ^wPoncx3kY4-vC0l8^QT}Ga7Urt8O?O7Xha6CHv{Gy5=ER#^hfV5;a z52@GDDkG1HuOR;Ph@6=BWF-jF|C zJXnzc4aLKAXtgY?oZ_aj0T9ejKwmr-t)$?lHG5U_5XIFfbn%;Wpn08~rUJ^7 zl#j;P18?{<{QJi(95>q6c-+lLgO~4T&&%}|`UC|NTrrtf9wIh4PA=UO(Ad9DU9WSO zpcj*2>{Gr25%56$1vAmpKe-8Ua8P^9Kyy>wUP6{#KAWj5@>3SqnA9u`$WXWNJ$WGJ zLzbBR{+S8x5#V7EBxLDCfcAX$3;|uc@cM~EWF7SEpA4=N zWJR_2PUj9&I65w4cm4)A44vzwh6s}QpW|W|W9wo@A{#=CQ7x<3@OC3t4xG7FIgZqw zPVP#42wq(C_#8E})gxN>yOPr3bUcoQ*}|tqv0ZpEp}jV7-d$3OHHgvI{m8lmfeFOa zikpkgDv9Qjr1&YtAQ2)-?xA-IT#aIEsZB)+mUEkc(O(DUHgl%_e|}3Vq2YTBig+{| zs#Fd+hF|V6IAj&39=562vl@3Yq{&{!&Vt3G3O8`ZRc9ufVE)C?)1Iur3d-VB+8NFB zC=5-r6&T&0j)G;-M>_HZO$ckOz6t!=hhgZ|=7-K3ynDx)d2=QvhF|daIMdLE3bOyM zS`k2g%MBg_D>0Ru}r0M5!?Ht+QG=fgU4k*yU~S;KfLmyq9RE(jNDZ z2)|iO5N&OJDN-_NX`?l=#W$`=IqhBnIxjkh<7#SFQnawQzUJ#y{xPjeLDMKJ%Gcfs zeinA9-fJ4OU^yl8@`xxC@gTtN!6Pq0BL}I8Ai*%|qL(UxJnLTQ>cj$B_4ee{gPjB) zOOlwdNbfP?0NI}OAoT0)$vzvaEsrr|!E(FnRIC7zRH@1ie{<%M;7AZbQ?r_q9=or| zp-!Pzn~Rcb&#P{)t$Ip&ZT%i(1?Yksx<*I_ol|1dQd z*!2)XFH7sHP1xV#fP6l?ssVeGmiy7@Z^jG$M4TtXMyFD>G9}GuT6MNUY-SlY%kZ3X zxlnnivG`QAo;Vm@VX0BUszkYxsaBAlk&z*NGkT=f$JLZ~m@zXwU$^ zpl90mujBZOiiO+xQDoBhZ>qaQeFclc zJLL1fnY#uCnC4RUv<>hPnQBw?Vd!N(#~4$gJo?7v7oE$##Jgm+uSn03cwrs2MUcS7 z^C1y+Mc5L4pCxDGj?a^$81fmlk}muH=;BWoQFXs9k~RrL-zaXuafuQnW`~JbmcGB+ z9ZqF(yt@o-X_@q*u%HQ;8NVt_L9Nap#DSf!+1$1rr)6q_+B%y9hSG6Y-NAa#4aY2Y zn_X2^B!^x3g?ZtA;$AKOJMNgd<&0p-Mw!aA84!7`@(njSMJO@$6*~LdpsfAI|3c#T$fNUUKd6g$$gV4;JL&=a%bMZCV1E4LV`- zDfZZ~9vDV_Wx`QRY{J6{-#Op;4&;KTB;U7t4?Qn8LZ{yJn`bPA=Kk`L2nC1{nhQv_ z#ls)ki|2;NurPWhy4OiXx|yy)q(#5fz3vp=mX57qiy^aDhD2x{-7|tZr-!rqhxZ(_ z)Nl0z7;zeE4QY!yZy6K5ZWGsGT=e>a%-+LPIX ziDfO92c7!}>?1&1HgPN%kXqq)R}7MNTju@x1@7?s-aRw`SVocu(w&vAsv|n7!H!>%84b z>mMjL=Dpn+Uj8mXSYzk@oKp23a(9<9Y?>|If``!SSAQc+QI3M%J~_pGUjC zn?^hNqCwfFyB({sA#nCt`Fpo(nfI3;`?ph!C)*U>Ff8Ybli3LN3njyAruR6#Prx4Z zCktrM$2_iH4A~F|%(7+cF;B-7r<+xF$PnzF)Rx zw{225qLagk>^NTAB|CnMzUwe&NHQUH24Q58brw2nt03%$;h2UhDmk39*N>E)bjG;K z{xX)Gy`B>s_b%Oz%1r;XJ38xG(5E^~vksozIAgFMK}BR`j&awe9=0oxHq<8D-zDp* zFg+Ymxf$YPa)=-?;Zh2P3nZWlm&!6*C=T62IEc$?#3%|Fy(9cn(x|C$|DCQvUGvDEbHM|@tLrML zhUC=zL(vpjflz3ifMs%QtD;QtCy~?*5wVFA&7e5Flp#@)Q0ykVWOb#ws770-dePP# z{kJu(UpHRe+Q(}*-*1QB&#%;Cl8L}WiN+@D#7DYR61&h|A_>bB$wc~%3z4MbJ&DBZ zuyMKb4c2gqI37tMjD=Q5v0H;(wU}q^^)Q^bxqR_d^eibl(DpE&623 zA#|T2D^x^h=&yl20(@l$(G75CS+IV`eqz3VI%w}C#?|atr$b{taZk7>e>y*3*0JAS zFpt36#j44E7`pXjMaGTb(XM9K62B3i2M#g7X@a2*`Ht{Ua2ZS4SF-iBFYGsQ%wBH_ z-C>jq{QM0ZOE3N6ThAN{T;~L_j)&?TSHpY2R9d{GXI&p!)UKhpP&Xr0kUnB>UEYpf zO)Itb+W+ulrkhKP-HRVpq3yu}pSbMTMYrAOshQ#W#H`blTW|AKJ>;pQH{=?&-R(gg z8TPEZjpi=i3fy0QF1>C&;0|IQ{u$XVGFt$h*OE1J)l;Wk)wb38hI9tgV{|zcfK4Cf zB~(?(8fkZko@skQ=nCis=!hRui?t*Bif8jVUuiGc95MPCVr4*~%gk#uWIa)Rv9W2+ z>F-1PiM?e$QYXj-{wa1F%{**0j9JFUYdK(Q?$>|7TP56Q|XG z_RlqHF5-5e?ylw-yK+a7gTF2It27SK@w6%Hz|dadTf>{|nd_^!8|>e1yp!ry)NAKD zemlsAMW?(s=(lFp?4#`8TQmB*9G&yDWexft79N$^s!yTof||!4B6z!jzCnl1zHZ;g zoCSRCLNP0+Tv^#h0gj@Pe z)Wy9e{D&X^9|YHID^G^qfjs~|q${A8M!tcX{J7_{^`4`y<45*dTW4Y;FQ~QX+xRt1 zz0tjmGqL6iunKRrf4E6*$zRUf?Ddhpm^Vf68$wCPKG%P=n$*(6Vw{n;h4GD+sl&Yl zb>U`B`7pfT*JzVSx(s2@$1V~cO<8%vZZ7Q>dRsI%8u*O9PkQ|8Ml|B7eUrMU8qkkT zCaDc}&?Y8ca{e5C4(AB>A({#5;(bHz#g19zk?sQ8F1FTTX?RPGXg;K@+Op|DWnR*w zO5Uf%^uTT{UzF~suNz-O8~GmPDw*}H6LRsLQf>~>dH9W-y~Zvj?ekyT_2PW?d{+*C z__rOl<#%uE9tIswpBv?M7OmtEtrE;q{ItB%ae5VS>V(*VeiPhCr;mJ7tmAQ5c!+EiUA#M(4Q~VzA5OiYjc|C+X?r5~D&|02`WDSVG&sBJWux87ZSUOAhU<*% zvEDRtC^acCRSB750Nm-~85(IS6lV=?GE z_o^Dp0lb|DHb~AU-*`Hdjcg*TGnhu?QM}gCMmHVbsg9F7^j@UCce#FBK$njD0|tML zFKc#?w&6B3-%h_i^;TELUf#ud!}jje8_bh4d;IZ7I{GE}<3L@?DJMWK;x@{uU@pn~ z<#qMmnH&R{=WsWNwl-rXACUmnwuURI-XF4}pswr*M zZLw|0#-8p*${fRq)E5P8*!$vkfurw{i38IMRS)-$cI7a7SbIp(lk+;}De3{1xsVUz zL>n!li^CT@JPrvP%?*cc;ydzNY+9fic_*DO$q)P^qc&Db0%z-_t>FlUB#*5-c!FZV?7)5#}HTpQ!A;yakP z`i&#&>XG-GjeTe~&|AslgGD#tr5}MC7&nb7@ajl!bW6BhRGa+l3g<_)6@@{!x{J#j|#QxEa(r~AAxJb~MRje9Lv_LvtuKisd& z2MulZ@4ob+-;RceS%`KR--7rRh8ONW-3<&GJ>09veUp5Mo1;C{s}fl%?Sj)?*?&3M zSK(D7XM#|ACmDEl9lzpYoQ8Js`tlBQpZ)BJds6+ps;fHIQTraE>q0$hhV*dRTkGDl z+KwE3fp;V-L1^IqV+qIiK*Fwe^m!LV)n3&C++_Xh#-yxsvL z2tW)BB48oh13_ZA?+YM`;uQ45i<1-#BT2Iy2q3X>+=HNy2{ZNs17i@5peRqz1462> z016{hs5^w9f~(&TLks8!gn(-N4rp5X37}}|`U4{9y59Go7zW{lqZr1?2BDay*#V+h zmem7b*f#C=p-}e2gkd;N^9o_OZrKi_nC`~~V|d=m^I_n=pMYQl0T4{$pus3eVFaPW z4&pfBB!%Nd(JY7J(Bv5R5F`oWL=z;*%7zo9>BfZ{W(7-j^X8-Pn@Jbyh=}DNP6ypkth%AqZ zC_zm+Kisdtz`BB}oS>LOuBsEFBBo(svZAUzf;dK9r|mSus^f7or=}l5x~gs%A*d>b zoA7%vC6i57HOxy+;xw%qSOF+)I-bx}?MF!0w4GN_V|3gOQqpvFCR)-&bsbLNz}2Kt zA@!6k9-~woESAw>a;Hz$^xQ-W7f2G)Nz=3)MSw8$1tAVZ^l|Lx0|@{iR)>Gz@vF;( zpsKD5h2pxZtA~@8rW;1mj;b4lVjN;%=yN|~7z2usVakk4i)OH;XoMmNrWv%#06`j; zZkT4jouujIcyxMJIOAQo&%4qlIHA^-l!EY#kw z2W*A@61H^1ff9mk`yoWNYzH7%R~*Ojk)&+LDbnF>p_!i3ZKrw80a@t<33gnU6%Dr? zmvw`*9hOa-HXYRMmBtOpAs07w#CrbG0JmKqa6ETU5Tsq0Llt&BkKF)JRgaSlw=Imb zoU_Ssu)dzhY2fJE=VJoMA0DIle#Z%GdK`VPXL=qdDQ;R`d+1=h{8NLcj&QxT^q(rl9`C=`>>T5?gW95 ztEyYtP;?XoK~6IzFjkHmrr37f_o3QBu%$_GWN@3sP(eRDuLQyQfM^B5zS8Q*A>s@2 zN+BE??Qa8pR2bxE=?V;_vwq ziIP+n!im&07PG2CFaLYHD5o6!) zH>Eu3H$e0JKq$6zE5sImV?LQ_W;vx`vM?AwK{nNMt57&MioyscN)-7|%1#P|Xs8kq zf*3NVu%b9DD2u`bNlgT$a7PBp5<|!NWdlfMOG+gaok)vP>525b(kw?yQdw2k%e*pP z-*?LLQ1i6BxB{fiFhY-R)5Ofe*hTtn&(&$_=wZoaZ+Rk8-Ay zu!;(@vDiviJmk|#Uye(PDnEH9RMS)|#bwL%Ffz*#^jNr)3aMHm0RFJV?#YuX-~r8a zWErqkrRv66F5C>`MXKoP21Nxc@YY@OE9CbbDvVmH<9G7vKz;^H5OLRhYG9|on*&f= zDi=m+882LJ?dl1Si3Cgj%-2FFV; z5ovDXCZvTFkoM|F0H2-*Y7t2H2S#8=APj&dPcHU{6cerj0OePP5GGoAzoUX61NkKe zU=Vpp#8q7_1q7D)yFsJ{*LfkZ^~}40l42SIQ6xGR2T(vZ^8yi2X>UN`W{~tlU60z?2bCVfIcNP6{vKvY$X08q3I-mZ`q5(<4$j!oMsu(loBtG{hj{?OpxLA$4x#!U#|2?{p7sf0c)HF9A?Uj9_ao@~-hiU*I^m3?7`n&gH|?hB4G!8@~ zfMVu2{^s+-DNdr0^4Ww3ym<+xq2dQw6r=^}Ma1^yu30W~7^h%{!RX*v+Vgc{B(}B3 zLpqKe?FV2{h3REwrG|Ya|DLw~7aEl-U>Zszt?F*Nwy= z!SJmg@7I_;l+(WkaSh_VW?neW0Bwu}3z@zibklzV0uswyVJ*mj00QiAlA=cTu*l23 zB5^6peL;fU3i=?tVtjqdc`9>_rEM<*J{4RqXneRV$@dR~WeyxNOlXqcZGqvCdhLIn z|5_eT(3r;YD~One6)qNHmIn=~I+hWlqw2l`@wshKXD@4>3NbBc>d;Atsv2p%PgA-u zQ>1D`W(i02ZM&Hx_DWEvE;UGM=d6d?P3gagpytq@LUDX|f~o=^27IsQX@MG{vi1(D zuJmggQQ+`j07!2{bXqCVIbfh(q5p|@vfx14B1NUt9N34`m(dU@w_pZY9T@g%2B^_T zxmp`$JmfhO8-eS7#&UifML{-z#|+g6$ky;?jAL{O!Z3`aEM2#WW)ww6D+oEAHHtqG ztbt54@RsFbgrd+N-Bdos2*$FC{sjn|Xh1M#l6Zd8B>zzduKtlDVRnUir+J1Um?nAJ zP5^GHu?)x{2tx=(#iX$^A8XCHhyrlO@rH{yF9ZXg&25@Mwdlj8N#Ep5^? zw8DvQz~B8mf<}se>7^tYDUA|>ecOJ76*ZXO@0cJA$1$UaKvt)9*Y%&Toad-s2vm|7 z-eg_OXO-V~irTJ+xrPa<$8iF?^dzeU8HvYzMK=>efBm$^R34=Qd`~*ZdA`hwid)VU zof-Sg)TRwMb5iKYbrgLs4Ewf091j_@y8g^GAo!jLFrNE9sNi-a^(+D2%!-DZlgFM9 z`Vx7=|b4BFoIb?D;*l7dCmm{rxQV z#c^LTPLg42(+{$&7-<6LZtUEcW_CJNGt0Rs)8kQng2|kd2|djZ!m;;91^<3~agwAg zXv!jFbEv=!xBrr|H<9IgZVp2%0cVX;5R*AvQpf{OS{AvBSHQV% z3@3_I@j(J{!{E|6U#9XM-}dL6NVbRs7BvFmRGwpelEc6&mRjCmQAQTwP?=njQ8pB& zkYoWGS&~A(bVhC!|C_FyGpXuRure74Op>C8tU;P0hHFw%Dq}dxFa>KEqp>POSCP6p zc?V$Z zV9?#CEJtrB8U(+;AJ_~6 z6iI0#1e9|a_pG2?9*Qo0m>yn;pFoZ@P?74C8jyfD(Z&ngvXc0 z7CP_~t1;O&E1Q8>d4m1n%ezW7BA6)2eN&WDJph*oD?KML1U~FuT#%|E2zn~q!AktzfTZs2 znu*K)%7fq_h4q6rIKn{$5-FyuI!SBtiRPxuH5Hv!IKTkZ@U_apw8na36 zgkJ~%;lN&nLS$KxM3!Oc2W&f*n%|+p0vIGOsto{K=!iY{Y z03+~|C=MV=QhWzdQWnRDK$20|50{{ZXMn(32uhcr&>uimH%=HqmGb{pKK}FSMTxP3Mf{H=&L0?c8c-Tl|G#r5q(fm) zf${(V{cDTX<+M|&8$^^u5QRTKjc{D;6v6SEP8NF&9Su5v$V};Qxa^N7Qf$a=hxQf* zGn}y3WNkW{9&bi_Qo!wcyI=1vH|pf9_v5~a-0D(d%H2pwTsKj(C zQ>w?u@rAV61QhZFVWcL<%Kc43liHIlgZL8#rwnU$l6~)^EY50N=Jn-ue|_ z8OWOpImt>{_VE@a52>2lP#H%^Km z>@`T(1%Mio-e&RylH_-xs3PZD5xWF;kT?zmUWAm_iK)fk^EHQaKB=1%?6yfM96FwnWAj9o=ELM^cK5k4!Cz?4{=bhji~Cq$PsH=R!(> z$K_i_e8(gcO*}a)Axar4!Wp4Z2s)gmY$qT`$;T`EyHGd);2nN20sup`eGBu@$3a?c zUWq5t&<*3Ve3m;K=n9A6i8^C2^%o9(Dsn_p@B#%lMEhiUixi4uV8mKi)?Wp*$6PAX z0>r$UvyjEc)JWAUVJqQ8^U{2*F-HDzD7bFdCX8jSLIhdt|8XrUtD|1W$kJiJP{v@- zI9cHgB{DLq3Yc#-m7{y=d~j-INJGae6DgW(S&f^kewgx141A=>pg1p58PDqfVyA;^ zvme!Pr+tV*yLrj)VhI=)OdS8)LcYYFb zW792eWzeA1_uh!qfa1_K_|5?@n3G5o(E(m)9p#J-=89->Z(ECzH!v1E8<22q^OtIuw;>`GZ+x`wLp~hPDq*u{!cR3YHJAX#6qME*Ua!okvU~@aY&X2j;9FiOahr ze`6KkT!s^&`j}64v|A}V7Qk0qW06vCk6J1fOzC(R@`HDHlbN1NX1WbuT+)iW!Mj+$ zpUgCKy2;?hdmq+r$@az;Q(f{1vcc4LxH#;P0>3ID7K=6ws^D)@@*-xxx;Rjg|+9J=&l(O9`lWrmKcweB83j&iY@&y zYf+8WbhBFiDh7Vm+TwC^6r4h5(&C7q9FN-%*P_YaC&LD{ZQ}x;S;k*SiegJe8}UK2 zl`MBF-w*_Ra3*n{Q^p_*kJ{l+dk0*Le85_F=BHwj&Z~`8%EDqKh!S3+MUpbW24q(4 zZIjxXBh>is&cD{&W-;mO)RJRfS~?Drn77(fQa%$}Sa~0{L*-p=Zod<_!t8J&=^ElH z66W8$K(xRT2CFZQkBZXW>B+D2He2|CHdCCuxDO3Um3gG!ord-XQ9Kdg_OeC(mX<6; z&oae$a+3`R!pa&GVv_%wL*{emb4*3MkCC^A8+Y6C)z~d;Q@%}?z` zWl=&mdD!xrXoC&4=?j(a{&2yfmqg3xr44VrTr8Q=cU@}xo@o7c=G*)5WRa`3Mwf)c z-@0Y^^Jn=BGZ7qH;6!mh{!N89+!rOx!zj)V&~|&ECBk;5+5w2qrpqKnChS40)4LRM zcC@&UmFqN=2?b^Lf|UB}>C+P)oc*5_Pr6jU0ZD6`c1^pO=zO4yjrxQXTng@$kvdE^ zH&?L<50kmQ;V=}D&5ty%t)4MI)Opsf%F#$^}+6i-Sof04Abneb$Yd?Y2P4`EfiLEqfuUWbm9siw`=!Hq_+>bR* zS0_>}uhUDO0dln+)-(S5i<(>vbYDOu)T;GEn6t|F#Fv)OH)E(%cJooVxWHl1gX z+DukGZs!)^IDN=+*`L>ObSHd;Bg$A?`J*>Q{iV#HzAB9iiwYc5p69f#u^UzsLpxt* z!Q9E8GuS3bdfy*#?c+`s0jU2|832s>{>wqW|9=izvjzO+p!pAetCig%Hk-d05VN^pcEHE%`((JD=)pG*d`g&u3E(HX6Vd+jb;Y@bg{@LC5oN3$WwUA|k+ zSJMf=WzW&?XWL1LX|*_>F9+)}UUhgq?spd(SwFo1EV_>+pTD^CfADCN^uO@P|99bk z@#ueNzlZ-9k6=@O?2yj@M}1CvUZwcAbM(p_ymocV%v^QpQwrcV)5<%$y3zM?k{r%B znkg;72R0xqOV)#Bv&ay!v60YJKMsp$mL(e+3aYb|fvz+yvcxZwhe?6L=22~OM615) z@u>vX@#{ao&)*If9=so~8#k<1f`q3q5&w>ksguvhnuUn6araQ_KL+(^xU=&oKnA0W zWI}0ER87*T_)Sw2`+&h*--Gp_GW=y_{qUuXE75pNtVW^r4iE5Z)8Ge>Ow~t=y>v_y z7LZWH;Ve%cbTfkmrHWB@cSPi+*n;r*8Nu!z!nR)y=yflwKYmC7eL#HVq2}Nr{JZ!H z0ItObI|HniwqG-2FoF=u-_LC|zwsOsS#H*&uu(-&tcVQv=RC_~J&8UFvRj}~de9=<53TW2a{9Rh^PC2gG^1UPIQCAcHyE zt_R0qDxn9wdX2!0=8jIXz~Z_yZt{wT;t;&gxW&YMzyfblz$U`7$6vK6Abky=+;m&d z$x6icfn{=Qk04F?MD!31cJ;KvTu`Nsn2dUzwkmB=6ioSHs9!~i%ZZM>I@5qWz{_N{ zyfK1CZe2*(B2?d$rSM^1M}S(NlK4D0rqai(=GD89iozzi)0s1MV77VYVQ^r*(d(~L zwKK#5%=d*upM*XS>0;9dZ`=Oz7_uc5jt__t>8g}f17A}mg|;{6eEaOnipQ9{-w?90 zo&DY?<#bFsxPS0d*|w3^;vr@UloOMDAk(OUlWUaByn;($sIC zehp@CQcHQk7$y$85Zg3h(huKCVye1NuN{k_5U~oJtE!`J)=vEpZ+GkS zf9n~E)`L(~8>CQDN)LJ4(BCcxj^`G?*@XJsp?7Fn#|?Ae-@iZdVZ-qfad;9fKK4po zSIK$mh+g%$XBC|OT!r%|q@QDCv{7Qd;-!O80N!grND4WXj5Lz4A?EIb z?1ZMXfK9_EC;EOFx6BGnuoNHp%@E-6VSbEvRHSx$9=W}&8F z1IoAvsO57aB%--*2xhAN?~@UtOXoU}-q`2qnc?0O+3GdUTfmS`hfltfeX_57a{pg# zX95mo^fhq9*s?D(*%KLL&n{)(DWoEl!3;8%#*8&tvhT{iWeW+Bk}PFkB74Z%N+e6P zqwk$Y4gY-4^Y8O~Jw58&d;H#W@44@}=iKpnOC|P=Td1VGTFn3YNY|r#hO?m7{yFw| zbdSJkcvrKMPDOF!+W|wR&$&shzFZSLKklCzbquWOPUnl-Z`N7@l%GOqcE-o!5ic&$ zU-zp`1I@Bdq#c-Ih~*#^qAp!m@l4T3<5WRXoOEqNsjql;f-gJjk50BQXddRG;7XP# zfApGVRB%a!Pcm;quo^p7cJpD~(_21r-VSb|>YR{Fgu&@Z!S!Vr$a^tnYT6?WKzL$zVHG zJ|F&0*BF$kSll5_i_DpOUZ<}wlZKqFY>rUKi86G-Vz?-k?pP8p2g`Q5&erfFxUkoT zU4@=K^H}{xr?7nQ=|txV_H5ey<+PjjZM?T(4^BNgW)L$Pw81oEVkC9IsG_$>b?o6- zjB_l2a%dv)nhRI%y9)X9SX`aXWH5&Lvp9xj?%yK$>FqCa|a<0C&3tMvgDVZq_=Z!vlP0^h|xhpZm1+dM6%+S||Ldgt4#QZ7==& zBle}=hYslzCu3vsFL4+X4;7V z>#UrNw)cqq`|!+{zEjEptdESZbx$e7lBK-sd(JJ24!$PIF%Fg;>r-7~DN*RnJ?vSJF`r&)aZr@rK@Wq#Z--hv6TRGugpH-u7_XK?Q;Qo&W$Tw4J6oRE z=UOu#wya@s?T)`Gld$xOR_D$5b&I@-`sIQVn%2gWFW&!pR}Mb?}So)pZ6ToQF-}n z3+a#^yV_iHlb=3h0laCXw1t6QnudtSZ&*=^$Vue^4`roPlgjn@H$M9f=p$o=NJbZO zIJ=MfH{OgdlQ>z}!}>_*#brvN&LRCYk9Rlf*z8Z81@{W0(yYX2xl-R0zU!FN$@fY) z)8Vvku&~T#q+6#^`HCn>VEUH5C&jl~lmppB+%abBoCJK`!FDth9*z%sz^GIaA?UeV3c!^6TtwR?pqY#;} z(mF@$XFbjm@>7U;C>m7ea^kGe`t(x8;lcW(f_Kz@KbgNVuhbi`q9mBFOU5XzOZcu~ zMXWBK&KJ-0NOHZ^a;;s*fibPseS>2NRA`V}!fE*-%;KKhF;Z)pE0avs8>D@3`_#{E zVyy4GGOka2i>dlaLN;z`wv{N-L!|T};GJorjTP_*Y)wR6oi#}TbfaB27MqxYa>A|bk?r}*_0&H^w*0HUrBq4*C&ZLO@tt-y>i+)b3~ zawJ5;AXi;xyuocCNcDDufu|BdYAhh}UCooinHLY|5(~2+Mc(!gyAVa)txqk_ZOz6W zHqlDVnAJ?iqsEew%8C>Z>~PcP262*|L6U(&ysS2a8dUXCScsxj??Y_xhW?i`Y7BAy zzt3lN(A9v{6;jE#>NfI2wBp3!ehbR4AWU(it?fiayd20OLA)*gWRM^deMkdn=e$9B zJ9Ps=M8W+^PU4k1>{97^tuVp#;3wiy*&69V7R*6LP$$etm6knZjb6m}+WErQua=#b zXac$A?1B%fuJyIcah}nkx4Y)y9Uc$Aaf~blrl06FqrLKk+eX;fE=44X^=2a*-60(& zc=DCIbw&m1=>j9nUa$NOlB%y#j&qMwu@hs~w#D87rMiY<`?a{DCC~EW`$O$O6rdi8J5vl1GBH!_x*P2HGY@ z%$tiA(~9jYb{YK+9EBOS13G*yC}Sq}{DDKSAaE#SWmug3!BPwLx}t22Aoj-K7W#vt z<6x0O?jnO~L;HSJ4@Qx5RSOwDi$0S3r+jC#e0u6{zI63!x|pp2?2}H zxyZm1k=l*-SN&M+vL$oh2QD()0%t-5=_Z8+m@y~v!E2Y|$+9`EPOtFwgnPdeu%f6r z`NrYiTfs|+r9@ty06x1cS)m(+BBbpvv!lJ_n*<+Z-mSXT;D8;rE~lQRN#OEzcsF?W zNm`$Mx4!az4J`?pmB&wNH*(VhVnS-08M}mAmF4)3M@+*GzRsX_yRCV=!f#QFqi9l> z{ijiDxm?OJ|^a1&yVe7XMW87o?}gFBdHo4qrN_h zR9~Uxsb+ON!~AjVS-iJu9cQuz@#KCD??I^T+UYB)7pi*;i*<>pT(gCbxj(ziK*Osg za56ka6U8XS+(REpxykcu3rve>UPbZ|<2t!TsElRO4Q&rUAA;}j>``wUS zq74R+C^?pMUd7o(r#*ZwX+l>noTcyi__>_c3l=`#XCiHw&V7v}Gw-HKP+li<6z)#HTdF@N67rs5zJ76W zqh7!Ryk2|eF;ex5yRCGZ{f){{s@}_8mP&QQ&F9ECBO8w_dBgG^&(pOvthIh%IA=*^ zqs;~`T3HHfKN@UWCt;)Gr(w{AZmpZDy%_6l=+aTY_9%*U266~pZg8nZ9(X*M)jEjJ z16q-N9_}>By^#1y|g&^$+0n)J| zv`xzN!H*|LZU*(m#f2!T&*@KJum3iVQVw5S;B)N+z0k*Sx00Z#>j1%E(G*k#`oO1QzO+3zpJ9!NsTS6-Zo*gpu3{)!mPA+LnhE4aSB;nRB} zV+{LdIFH@WGOc2!Ddw2Vl^^$BHrMk1ocxCVFj3(&eKhU?i~=8cfzOGOsCUeI0$?oR z6o(+~m~{h_UPmSs=1q70af6!Y$n>%gY=ikj=K@>U0z-0DR2k+}@(YJ;mQ7mJNa|O#eVK``;nyswYLX z_SrD#vgRlTp`(H%GFWYGm^}S;<jpQs}*(M>qKdCt)79LFoZ zg!J!y3hDVYa;x7uon8=KOxo{Tq@Y)8NELS9i*ugw{nYho4QOn~(g7xCp~&Uvs$^4? zszz$NK&iH6+vt&lr>|m1jB0tjy59=cXN#rAAy9AWIe2Eg1+CJtSd-$pD@{rY{VLIK zp+oF^S{zhlld%CtQKZ~fM0WQRLY)T$XD=Q*d%1zB=$jN5FM}0nPYqaDC$&dt@QzQ3 zs78@z@TTJ6V1P*Kqk=<|?vH#rl=Rxa+ z8?WWCjEz4Sxg5ol#qYZgMBL2F%dp{<$`&w;?N%_HmIwDQvfZs=Y(~sUuzJDfCPjy$ zTZU~}Z8P~wrk>HK+!H!o?{T4N*|TfyI4@J7G@D+Y*gLA6Brk~7OPJmbnkUg_%x!W# z-;th&6ZgNM67U_-doMX+pzu8OKyK@_O&^bD1FOgyS3ty`gJuC81{P3 zaT5Ls`rm<*xRk&j$kfz(%xLUcu)2~lN5?{oy|eBQ*Sh=)0jSpaYRQ{4HrjFIu^|2m_$3Z8cH*%h98tF(xr#z1eG(IS4Ah*9~~Wf z>K*hbxsID6kkZEjJ7mr)lk&MG<&ycv>XVb{8CAVkmMkzMahX}>vmvWJW=jtyW1cVi z+bx=6CJ#(gkH3wpcOFAc0iR2*mp?5MDf6-l6{AhN+oqXp;ocHN1>Skd$Ds^XNZHN=aCyf( z5u_dSblRj>?^gm?`)Eqv=9@7)e^;8Oo&+ybCRzH&gYc^n&t_Qo`HE+C)!}=$VVxedNIw@(@*&bR=s5R) zDCr{eC5{@seE2(OE0s$qS+OdvDGe3o3E~LvE;iYYx6&GNJjbazKKa%Pk9wMTT1$5v zsyZ0e_mV5}hfv?mH!WA%?g!0cl!HnSM9VZnS_}10Mo7g@WK)`Y-?`p*pHBQ%6$u9R z@Y|@zVKX>m6uTq#duKI#n8Gf)%B!&S%4ZIiC)+JtlV|?0j}-;-R-9?b)K>exZz=3KSAWcr_eW^QAMRg#I3#aEU6a9f z*k}dCL-(MNbnebasR_w=Yg9D7-mC~6c+Kd$b_=QxPUyQ^8Pr&jB%V#_G>Q^RDNvwR%*Ph-;T+I&&1YIn$Wy&&c|o zp)|A=A&wMiJ${t7K*QTKaD?6LYEtu1iW8K}WYFxPYs(>W3(xHF^G?k-o!`A4{_aV! zn4fsw`YBqLE;bOg&R3&0g?1Shoz)vCGmjAJ)hd8L#j-zBZ-<&m3g&WZjAUdw=7gJ3 z-25OieOw`=bQnpGu4jlo>cLt3U0hGmBGEFCUh`ZqOFhrMR2vTR8E(gC_hdg-QTZm{ z7WVnn{2*VFyYq63w2`3C#TK5kr7Iif$+g7g0$|+-%mZjS1CrMmeW*^!tufO*1KbR-h;V$QWr*_3S}fle{|Cf6~?H0Fj$`CE&kyBrhvut z0{EL27acRm&4sLLVgKCYvT6yJ@T)GXqKqVOOqNg|2Ol!`)zyY_9o6d`6f+@eX@Ys_ z|7;hOZZZ+>H#ZYfr=zs|(tl{(MD_ix(HT*0PLg8(vdW4xm!V2#2jFeo(!Dm%-wYfZ zPtcO|HGOQXGsRGmQI~^x5vBc;2ynp030zDgW?kpfrgn3Mqa81}+1MkT;1C6%m5-Q( z)C&PeJK+CM=H%jxvELH**}}bCkiS~+y_CNiJP-&+yi9J3aK$({A@I^Z8?@Vw268wW zy|epI12u468mzO!B`m@QXmmiJ`EWJ@t&~WVgPlFb8S6v@!D*3W;0`E2`rXd}x4~fH zCV~i-;Aw%Y|J6tici3hD1#l%>K*tMzB?`dUEfIGiG8eRior5#(Iyez*i*UpI zz9@yQgBu3!Y_l~|G7Q|)!NGZJ5^w@=e!FG94NeV(LfGOl^jk6<zptO4qzEblTmcqUHTjoC1?%{#yELp-q~2Jnw7 z4A20WRy*t@NV_p>T8VcWx^*{i85#hBZX#iT(jQZQ`yFp8PTCDyT>?0sdTUwkj0t%1 zA}Mr?6b7g%0w;pRXHT#YtElV-x^@@8f{4f{Shs}{Jj8zt1f97E19SlMC^)zKn;;Rf zascZaxFG>cVP7-A1iOAmAv|pT5eamt7KBs5*+h0iUPHyeh=uHgxVXgbwsntgTZw;% zFg!NF1RACT15^PMX@0#k2RCK7RZft08~9KT8No6C5eM<)wNp4Upa+o2f00?X$OLIO z^2Gc$^6y}ZM^2oAj%mXH1pxU8@GYUNBuKjy-KMw+ zAV|A0*Jidee}{EEb4mr;BnksG04CwpLpUZu+KpM22t>=@%W`XPz!Q@Up!WbP6De@M zC;Ue6T|(r1$2P{V4FyjqHiQ<-!hqiG1fAWiNbsj5xc1L3gr|J;g?_h%0UE%_2oE0P zMn;f!W5&GQ#@yP<@I-$RXxt$f&<_v^KLLv)5~SUTS>gK#Rsy%mul*2@{3-$+5P$&+ z0MZ{=bA)9=kaj~ZS8PL4{@GOV&~jqv05J?u0id|BLVyya-JnhP0O)U@{R1t9205DZWQz=Zl52PR0nfs0>m1OJ^P;o%e9&?*KPpbEeV zMJWzWkamGX=Tqr{JPO!7SOi_rcA{`sIFMkA{>rsQ-7cX-futKqbTOi67Y|V<1O{#k z$G}-e=zMrEUaklp1s*pH8f$~$5#~WUAW*h$JPPJMJkD?@T-UGM9O&87ba2KX>=0<6 z!5ND}!L3n%4)DzgVV>Vy9t9s?U*SLBkI(1#03g%=dxhZYhP^QGwZe)hSj!-gGBT2qw&F74GV%y%aT|GSS$SD; dYlO9}gdlKi!$Cy!|M8cIiJ6GVP{ml{e*l%BZZ`k` literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-91e45d5f-cca3-44c7-8808-07f201d8ae97-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f2df7c9e488126d074c17d57cb892a9405ee90e5 GIT binary patch literal 89215 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≫`h)~vDdygb&ErHhlO00CT5IwJ!8m5;81?;t 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

3APvzBhNQ`u!x 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 X64Q4+5fT%&+^`4T1@RiGj&Y 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 X!231C5D@<_{y?CB4=j{LRXP4Y4#vPo literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-f0b8feca-f48d-44d4-acbb-5a216f176ed4-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6870157c54a80fc3eba0a591b0c779acf7f3d50f GIT binary patch literal 82142 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-r-00000-fa8c25b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-r-00000-fa8c25b4-f2cf-4b87-ba3f-5181a4f50ee6.gz.parquet deleted file mode 100644 index 041cd8f1f3f39b751aa17a30ccf482fafd693b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1852213 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

11z-;0WxaXkeN;A|G-HM5->?@ozn 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

  • 8so~H| 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%0Ao2#L$3`*H<%H=;GI!nXb^5 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�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�jMJIqE!NvEOu=}jp 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

    4x zZg<6<>7*--ZD~0kiteY=%{*RSS#LW<22mf6X9p*CY7=gcdRz=8?RYTFGv3#Rg#FilP7d(>g!8-@C?)Kdzz zG`>~YYFle~qfO~zNLTcbiBQm^Nqn~lI&{_P$ZMx}R{q|(M&n%E2d(EOwi{P7v>cl^R>h}v;1gMGBgrOF>Nm%k$RfezA zVz;Ctftk%KF@D);cnM&n3x1*NK@Z5u% zhg{z19+v4QU`u8~LawjmpBoI(bHf(^ktxWImt%L+(CgB`_em1fXvD8dc7Apa$xipyZ0+}e@f5u$!VCx?LJYdIry?FzK7)0`tcMS z3}ap71Hk3OQ9a#5?ND@m_aAW|(E)qdk^O4_3hKgN{SrQcGUOw?J%c6m%2>_kCVCJ~ z@-n-aqt?Whun%}qV}0MkxdfO?m+ooZt`d@*i_Gqzu4G)�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%0D0M^2$nNtp{0{ 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®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 z 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�~DGU9ck8z)nL=j&nUACJ=T!Pr2Q#rP$LI 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

    J75m0=d<|e2YMst2`l;m;z4Pf>!t$u*hRgoSQXr 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

    !)Wdf&+#FQOi(lCb!V29 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 z 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

    >PkV_Kb=r#l{2o+XS7wi%uZtPDGuB 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

    &sZo;5(#Gh>&qLZviyJL~_+qOduXT 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

    glvq9aZmV95qosFOCAk$p=|3H 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

  • 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-9b4e3257-cf23-40b2-9760-8a8ddd82bcc8-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1b857338892054a68d5c3c71fb3874e9366faa43 GIT binary patch literal 87997 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 R|A)T-M9>NxWf4`D{|{x7LM#9P literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-aafbfa5b-c7bd-4c26-9e81-263d90950ea1-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0cc52a6633e235da9092771a23f9818e9b79decd GIT binary patch literal 82664 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�!X7#Agj)xzivS|% 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-ab26f8b7-91b6-45da-b9fe-28b4389acfdd-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7eb642e996d36189ae3649173a7c1654298e4915 GIT binary patch literal 82647 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-b4f5c52f-b8f2-4747-9399-da92c299179f-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..521e4929363f941b76056eb6dd6d6de9ed5d0bda GIT binary patch literal 94972 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 G^#1{(et#JN literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-d31f531d-8107-42cb-952b-250bc66fb332-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..14ffd64230e870ca64567aefa3e90fb94b70cacf GIT binary patch literal 90569 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ð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 B*P{Rc literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-d7b92535-c598-47e5-a5f9-e0494472c448-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2f0d9922eb4828833c00265bb73238b1e800adb9 GIT binary patch literal 96509 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 aGU2}f?AXv@VEkYF#UKGL)>D_(?R+Kx literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00006-dfbe507d-5640-48be-9f2a-7504c4b3f1c5-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d78f4efdc71fc7206df0077e7a3a28aa21980aae GIT binary patch literal 93778 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 z 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

    yf&ROmH7ktXv3IEJoqf~}-V252Z-D8X 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 z z?)?jkNpC5C5QsCt*ZsV|F~*5DM<9(>gYf(P4YXO;mS`hvh|_ul_|P!9OF=b={x}OY z>J7?y>Vvs7>6)1Q5L9yN#M&zBP=rvy8A-qfSf?QlC$V0i${FM8UG#zd@|7d~$;CtF z(f6{UOj1yVI79Ur(!CHJskp6@ml6sAKS&oh9#1INAPo)vJQxM0PaE zFXC~9Q?vTs6i$U+Ca1|U;VQ##tO^|!+S0PJyiw1`FE>WFzT_32Bd(>^lrpSbkgtuq zId>6sx~g-vL29!Fnb=633GP3PXn(=dntv677yM&i3w4#)grS_C4M{ccmFOaAJ9m4C z35Jpma^FBPi5G(E7n4t%2#cl!gWm(Rx!j5ggg*CM4VRA`gR4$E#7<_dKudPr^)2IG zW$T=}Th5+bEJ-lMsR&sLq+@)jCg_J;FH8~T;r5bhzcc1lKdsoj+%_lR4fk?g&v&7} z`P?&G$v*fh?1VW9_WHFO?2^=oRwg6$N-xJqKQ^+4Z#zo6@=3+1T&0vt;GF-*kcY;! zz*|-y6Em4p$bIaO&LPn(1xl@Ar#}?jMGs{>Vs&6fW3psC(7gqF&Rjg`=?dCN+@sQV zcy?S`Ks_MpL%lKE-!Is2c$&uBU|TZr5qeWvlHLhjzWr)&NX7xHgoXqD<2+*Z8h$Q% zqqi!9a(#It5HkHW<64eLL+&0XwkrEitYLt+Yf03y@&_$kOTqP zl~KF%gc;uvTVHQB-VdLP7HNcC@r&HLY2ve^>4ex1=n$J=@S?HjnDjK|(_hHGJ|FFQ zU^bcEduQM^Uq6^Zv@)$e7b-T0V;pt9$!MdjE&rf+xcVijOQdX&<{YxbTlI&s3(X;8 zl)76>$mCQ+5;tPn8TY4V|4Y_pKFbEi7UTobA3QZQ`m<;8=Mdcp-je$D}N&#g47R>jzDjA`vmLBP6WxuIPTXxYnL#dw8#07jsAMJ@Yf zw%0$Kv>91C;yb1G>#QW(?IO#NtBb|;yG^{Dk7@IjSDQSMoO%SOUU<9ppJ}A;bkbQ5 z>*wcN3@E$^Ze9(Rh&JPt_hIpK4%b6*@YmcA+Gl*(hi_8c)NF$@ zhiQ*^QcR0}#b3(GYEOu$Slr_Xv^(BaxV_Yfn?X927uZObgB!MX=;Fps4#8mvGekS4bAriqWHZPr>IK1_ zY76^O-b(*`I=+d)7;B^2CHwd znHf>rwL;v6auQwJhyS^JupDUhy!jJ1?j7&Q$s2=HvBS?C%%@5>n`_QR^jBsJ?uUbC z+*MMOpQ`Bl8;9Fdf7HKmZ!k-5J%zawJOs8+T+O6fU%vZfDfu}@qt6{6P6U3tIF(A(F(Gs1=4Gbk9oaLe$#aQ$BYv#xde=Tq31 zU+AOUF1^>RSe360=Dy5*&XF48E_3k^atYSDUGAdqdLU^Nig2ZWxqi~aoU0mv936d! zj8H@y-kx6{c?Sy9n}KSAY$<-|%^^SlG;emZ23$m3SbaPFb@rz03!eT}7Y;G|vAZVy z<*Q7P@NDGLK$S72Ls}1}nQ+E};=NJtkj!8wwr#XJm*Abvcb&L3iOezHcop*YVXag5 zj@`*yEpMYlab`yk`-jbr8cGa)R7dx)r{kAQl?67*X=k}^?0hXEDzyC?oOZj_lmEqo z-V0f^194rzttR$||B4u|$*XqfL$U?sfdKsDa0(mFoA9mSi4xrV_+@P?+144C*@?ay zo@2fRzVsgK2AjWFQ?DXU#@=J`inQ3=lOHBlZf{t`YovNpj$mMZ&O|f8_EJ2uazb_s=eU@|*?c!@ z&CYY&)j(r#e~5a9e|A)81!9GCL385HBeKlbIJsrj;rwY8WT&U82a`D2d-%12);;_K z$>H`Xg$Lda$@kU692;o6{^bH4iS&)sNdtJddSs4_6?NIBH2G^L&1g?>`s%x0ik2P6 z?UT@x!-neXJN@WB%`u#Hn7&nkin5Q)ZCYDPVylR)U#uc8@XY%>D@LQPkApmHXHFq| zcxf(G?wu-)Z6NRYJrpYuZ?&Q}vo^UAKDdlH*hxmLjoC%>*MBkOw(?)3`bl-NqGpRZTv&Lqw z(k*^jqQA)FoH57RxVe$(lW8NFCE2GYD(gCW3`rH^?}JoS}$L*u*6h>N?a7jM6Crs_*wyHC&d zQJo(QXi&6)v!hm!t59CPUx?s9Y@Pi9>^R*hW%_u=Fc8`bA6mq#U-q9c!IF?44{{{{ z++%+HV$`$r+f8TS3PicnpJ$!GcmshEb^w7Q$?*e&W7+@?J|WHS0D*fs#t#b5aS8;6 zEY1K74yvTv365!)-3fu~u+|Al7(fUDMG_+?2u+q^0|G;t=i>)M^Kr}%mcGNs2ZnKg z0TiBf&IS~LbN3@CB2Ukl4>0fbDJYTv6eAdd@Zp#cG9RWb*b52DN-z`|IA2f%0**5< zR02%oKvYG!abYx-4#HkEX5H98bPbD~ZUph&kKh=Z4(q)bx`#+XmAs@a=A}6hIF=1(5V*DjjKLt5WAedx&TFy3*lvfNVgz3Iz~Y2{aDpK?ftZ2=L?NWP z1H=(58v`UJUx5d)V#S%D$r9h#4PvDj=7y3oSad;CWVoC|Q<4P`hf%%<^8?2Y1+s&r z%1_xCpeoAC{X|__;}=B3-Le7xvT}e4meyxLKAbkE!8V-GZ!J!WoNc!%9JhsI0u}@7 zemxw%{Tg_PvNM2qh}arVNSd*4$aV;>O4oOY!21yJCDKnZdV@?uEZsvWBRnK9Ea5;G zqAbiWiHBLH4vEEB$AvE-7-v}QWhhLAQKWGg<(NKE$A|dJu=UJk`>-wUR(--=a@ZVZ zUkgAHXHh*R8sWgjtb`!jN)VC&-^R@Cs4n&FrLl*oppAPjAfoDc#pn7r@{nJpv{G!esb5k=jE zSWz6y9(l2Cm#@g;L~5iH;%Iup3KHZQhR9+RISDU>D2q`iBwwaZ#!1n4f+$K$7m=b! zQx6L(O41-JqM)-a3!}W`=wup{<_vTgXXMzcL3!=X+qp3*OBl;C{u)CDL`jVG2y9qH zK#z1vt{+HbN`x{{NlDZftSeAnj7UTXQG!ZYidKrT7gbS)_dG=LwSc3dl7dVvgt9U~ zRIb$oM^#a?^y{O{h4LT9>S=fp%A&4UIjy4U_+?tv$OkRyjlnnyoSKe@e3IIfg)O?e zS#j-*x<&1Dl7=*6@05mhD>yuhO)uH3rah~Xf}#xTG^&=vcrO%*$C6@)L8S8YupEq{5nMoDObTuBK&*I#Qk;vYQm0`;X4MG-0 zGZG#)mFHxcG0l@uOj9bz2vRry5P3OZUQ)RYp`*Ptrv4VGVOw1>diUGH+mF5I?<_vX zbPNEE4HdvLbV!S6Sk^5EX}oFNGaj?z>UjZc-Fg!QONT6y7f#n+JB@Bb15U9d*?lIU zX*-ut8E0!q>wpVVf~gmPY)>>RWtUA=k83~7>AYw^CW4XSFi91FV?}s60qZy&X^h7q zqZO>>v|!nf=N#a;vkcwi0f{fg1#Fb0wytK9;kXeRJPo)<+dIRy8Cj2N(-%u2=W3j7 zyrQ%-E;0+Wn{N{2ww+p;$#*%|oyiJbyMym~LIz5J<=#uN>OwR;8%f?U?kwtgX|~br zS-+;5K~3NhljY@f*stR~O@^}k>Ork*$Q$UxIU*J?% z!ooE_dd9hIcHTkzKt2=R_y}$UzJXyM`czvael-D1BGwm@c^v`XsJSXcy1{tHL|_;S z{(3>Sy=ZTw7%21Cg%F3Uh=TE~dPJ%5y{`2jFpxlqLkNSQ2trPMG4(^BIx&bnh=MS4 zLv8~?Vn9gn#q~osQ(ZPfDGQ1=!d}*;thm+-uWf|C{&+p1M9~Cg5W%$1lpD^BZ2-sT z?;>QNaz6CteI)ySpg~m9`g_3fLGyEnp-g)i^HI{-V#GW=PB(ROpy#5r)kK1=MY_zf7|Gq_pZm_FX?{|dsTH~~(Y6WH zg!gy~r7+QMgi6d7a!jo-L(%RU5oXF#gI?_4YCOWzNDVq6m~1E6GKbpU75}DI87M*=r%e8tRuHQEpo-jKa6D zYb2weR-Bt0Rc{&(W+q8l5K82PW$DWoJe~subqfa~X88#MBt2?wFQBGUPf6Vt&72Y> z(+gWsGf2?K*DTv>L9Zyc+)#;GI-&`yST%Ro*vBTm z0gCcmjKDH-{rnekCA2qN@vmuHVPqtzzXgD!pmc^Qit#umphyzMvY^UVeri&b$3*Le zrXcX>7=$FS0jy*M9=cQc(d3C!rPX#SpB0=Lr?<^W(i!rphm^`b6&iQXz_Nt|$i$U6UwSioTU}2d^rdcP8C_l=lkPW}NI! zI+B%IDnrnE>dhwY_L{kt;^%!}k_bn`WUaSJwzGKEGXh5H)lpxP7O}sE_+e=GAStRD zjXYeGT2(+350J*oO^v9IHN|0=7tvxJF-S+-d!ZO( zHRvp)S&isKqj~fTwRa}IVK?ojH7%I$DUhrH7L;#EbekWzH7q)SCgsHr`t%nq>zAEy ztT-zd%bT0X7DFv|lWHd<2ll}d)Y>g-V!3j?E>nfbQ}g)rX=Aoiqt42AZGV`q6bf_qpSdQ6e} z3XdD`djh8Usae?Q>Chy&=u@cDP4+9b^HGr`xFLehaS@XkfrsL%WZ&sf&;u`6bPs~k z+dR`u?VI#36`j;}lsdVCyUOVakjz~BuYevfF}o~q(dYD_D+)hi(9yxcbz`tBeGHV; z>kRHD>;cyg2`Jhp5+n+`wh1}ygwzQk^n*GJdn=4v*+bW4nhS%Xib2$imSuX@OIzTK z-&bEM03AWsmS778B$IFZ%D)2zl83r4Zl!l>LZLE>X)s{3FMbM>5oKj)fRW#!4mlfS zm<2Q!1jC+3qF#-QKCUDVz8G2<{~{D>C);lE9Nhaz+(1>_ zx^ZSG`T6BDJIH4)hsk>cwKFNKc2u^n#BRfty?GXH!%p4Y~OGkoEDhA^qZy>HH zQ#n*cG$kC*|Jk;|V)!%daxVT5Ico<~vWpz^FeKw=9z!$>>Z>XV#~8B{hW*a%xK=z7 z{*FkE6kAXUn&1*zH3*Y^}@Bs=gELu^{)b@1u$AL5ON?L46M z5nLgQg7 zhV*>h8HWN}ATkbOD+ZsyW8+#GYXnK#GumV`qO=TDaoNq6k)@=DmY`|gU7EHVjA z*6TYc+r1W$Cy_Xzq!7mDi#jfh5~)D-TByvFTJc4yB&v+C+y(QrNLf*?=qm%ec!k%N zOw-XyGG)`Mpr_JgZ|;(7dnnZ+MS$Ql$#hKw98jVpL<~{J)rWlt z^}?4OQAXvsowN%hBrefk=pp-58%bH%%^LrR51Udmp5HPC4)DA*)(+o(6C0f!&NdE? z3W&Gh9zP&3Z90G<31fUfy5Z{=K~}?(dO;Nn@qodQ6S6NCkOX?_AS|1|vjO2p@Pa_e zcHz}8QFhGvP_P zt6wI#t`Smq<{k%y6dPjbMyF%x0A8uG%K?|w+s*FAG&qbAUg7pY62idUZS6+TVp)$z zS4Wj#88?7H66iLvSRTY*1F8~bQRiG3!T~=7LO`ECY6V^Or1&;UWSZdrj(h>?JuG=H z5F7klQxD@Hb@afwII*{>(Ezcd*klkepEbxRmXy_t&{f=fnPA3)UE*OzUnr1ktcjY5 z02EjVO*puO$Mq^brkWiC_g+AX_k?h}FBKT{b6`l0TyJd16(fK{EFZw7O(?B|V90M+S7r8oT@6Lm02bnG4MV9`VF$Hl2b-wSB5gaaNe#q~X9+Su4n2^w~YX!griiS$;1A&fG(a9Q`Xt3eM4Vf`E^9#yb6}1moAIw7;G*lgg0a86XL3R3-#ydd zd}Sg(lKtgd4AiQrY+TO?&rJ~EHK0j)R@&R(SRR>J%#Wcuc;Yo{1>)1!UO~|MfThvi z{J!B&);$R0CkF)7F`HSJ@;2O9X)1?qS$KEh$B#HrcxhC@6mG}8uDL`56WOIE`=h?r z#^OMBW-)RVd`pYg+iz>j^|cgP+An#7+mi_hoGu@5fsB2!WIqB*e%xmuLp#U&ZJ*)s zDfZ`g()fT7t<4z+Z3YK! zE`5qAe>^4V9gnx(Gb7N;`MwEv(j3fcu&q5TO-H4zF?@ z@~TfS_uZFkG?BTyT5yf5)eIPuZqk%f;^%wBF+w-(ls%aL%oiRAJ zoc#~qRp%wve2OZ4rqhE0ostUNZdV%ECf!+LHU|dFY{NFA4Lt6FM$o!E9S%j&1TImc zno|nhaSG?|9biqkHtXtz)G*k+ILeFMzon_s$h51R;61o4ePLRNN{+=a7`!+2;Ig<+ zEtKu&#X>hZLnV3f$okNrux104i_}dTDJ-`?+O=Y;(|bHr^|c2; zS<2>9vFZc;ky^&`RtLCR?FeT;1#LEEQ7TfJ)PH=nBdvxN=qi8Q%&GlNxc>n{rQC+x(l~}^814m&cX6c115hD znl2JnbO8&w{#Yd%iYOgy)txrktfMIC@4(bG+@DrbGLP2@m2Wyh9@~mqS_9Y*$gg)#d>LJY$dRFz-54?zvjb z8A+v zZg>p%CU#Y1<@V*oL{)aDP&~$&m~G)GSL@hC*VpEcA(Y4}9?Pa?gv-0|??V0fNZG%M zQUME_*Oh%*?q^+=&~+haoaiJOT9#D?^Z#Bpjl~xw<7tS1Zf*lZ5Y(?~Z_dMlGiu{# z6^3$uhg%_v2e+cUHyXrO{9@@&0Dn^5+xh|cyPyP9k6LBMp}u`iD?!b`QPe`Bba?1> zaxxW#R3BEw_nJg}x1Crp@;QBa3G1D!`2+0Fq)R;L6*U~+66Yql{Y2e98#%eu6W|v@ z%j#<)uNoQjT7qyHC`wZet#e6CXVz#z@j;q1YAcdF<6;vhV8fzscf{7V~L3Z-={ z*X>OOFlg2qSH1`2T!Zbq?PA5oJD$uw?uMY$d z>>cYob1b*G3yzQ-r%iKuprr?BPVb2@SLhJa0NXO17Zy*lzq&d8*&7f`uuDV_Gd~uU zmAi@!1le%YQ*$4|YNdhB*0QLWrhDFA#IK#;M}@vPp98u(&qQBzcNSf3N-Twb?@*It z-QkRPFKCIun0B(u?IYtlF8h3q)1X#mFpRA$( zat#_l(Ut(Nfz^My24XN>`~cSg+&#Rte}yKD2okX1|M<}l3|W9JSj1gtJQyTHLX$+R z{_)GFs7lLZr=#Y&oq-$_dxUgXmd(zdKt=X~?e8wIvPNrtDsH9=~)2Z!v(dWwUkh<#j9IO__WL{P9{~ z2wGNZB6b3S)O8V6(AZY`pjxd2Lo6%xOmozQA2#{61T7!f@Gx_VcQg(5`)7RVo#6`^ zZ^f~Crb27KxrG?K)D9O#X;V6kFsE|y$vnZ!sxs;#vJkjA3aC?CD>3}b8P6|^1NVu%xW!E(R&VAP=x){O3fS?ixlbXl|}5Rlv4s~&D9Vb^A- z3hdtWmTA4J<`ui)+CY4iXEFlc@u0VJ*`p;ZwW>p3EWMU+2J$%`aX;tQ6vmCXtP(g|; zDv8eL`%%Mn7H);2XRbzzgu8+BuzOQ|3oXGW^dgS=}y*67|fl{5s2v{DzGhZzX9#Og1G z^qu<@GvR}qUsKSWQNN~Lsei|+>cQLWq_$>sPmiqy=_P!O%Hjnk@)9oR>J&DGVNOAz zH|+)VR|2h9Q~~bg`_Nei0vS_E780vVibsA5L+_6G9S#`W=T~6n-{ug}&@Z29IvC#j z%)OC3yv&gB3>mQhrj{vym#Af`fz#2h1QqQ{$FX-D1|Od9YTu6_YZR>Y4wgH~WIB&G z@Y-C%sVQd@3r%5;s!CtWVs`@NP9KGF7IC9oNW-pS=HhDcWzq#3>oz7go2AqV zZ+@Nqps-F;kncH zF3h4#dCq|IjD8hL}`BX44ztdSREKU`HTj}N3I z!a!UsQpVj~J~UlBsNDw>U2#SPh^ayMmX{BuL|1oaHTQIdiJe1FjNpUO7jtW#te?Kd@q^>2_ZIcw=JWlj>jb+YB)OJ6U zHv=tpu2|)G_PZjdw=@6phs6?BR`nS84D^!HyatN(k~acpc@hn>@=0ZG30f>4Rpb#r zIK5T8DHtiAUddcv<)|`0nLZ>z>ohBo%&>&a?)?@p2}(nBM%YsTQxhLXu%R#%+Ki5B zO*8%>?c|Fy5{*i+oGPs>Ui0U4ox2l^`|_rR@3jQM+Vrz#&P7~m*#_V@#W}SlrB_ne zcl<;+4;hZV*q7FUQ#JxtTaGOc3mHhf`jld_%>8jof&TIH^V5ilCBc37;~}KG;mvNG zLxx^p8lGYD8J_xY+2fd6Q2V3CUR@IoHR3HbBUa}*h-|zyZ2pv_e%mS9rWx}RQPdf8 z^c$z;#032T`1XAmzd-7oE@GJZ=CM{u-^gN(1ldm2DHeriMKu~hF2%~5zVNRNEgllz z@6%VPq8v<@8U=96-oF~U`L^@W1$pZP1sjY{&_}C9uJg&m{8U{W+upC691(^3)5n4` zn~Pvm$mWJlTMqM4oroHsp>W#B(l#jU6UYI<=u>JbCH~dJlh=LX>Y+pZ;jN!6RKln8 zOhw&61SBgDz<0hx7}Q5%IU~J{`%&BV<4)5|{Isc;guOIx?S%}cQuOE(1R#a0>d|5IBA3df|``gWtrt9Sa(1cL@FXF7zlhOk;RCV#l z^@p8VnCHrv2v&INteZzIBoW=jheD*~ukXJ)G!~t4GAG3?UU2BxITc+KGDteeyC^1` z_FuSPVVvk5x7!T)RR#perZOj0eJxNsP0Y%C@iiUOkEK;0t%kx+a`S*=oRCTnsJp0; zvVv^z8xKeI^(1wNjH^1*p*cg=Y`9Q9=8Hhjn>nhr3J)jXnC@G1E|Dg>P8bue%ft~* zLB1T5oxOdH>PaQpFWFZRu!VyG`7n*+wYP*VpRBedKI6K?q-?s=XRQmb$MMC+6S&{G zMkP#Eu*$|Re`hWSDs@pC3i@FvmLcM(3CmXo7{T|3!Z3NHm^lU__V4pDN|1U;w#d%v z=XK&G33d)FHkAYLa9mR3bsCZHLqg?|;=wm;-WKWBExiCd88=~V4R5NPnGo9tnTx{Z z(8l|)oX*T;a(o#pD-_Dhb2)WcZ+W&AMpR3=%gWhRd7xHRho}YIniVXfq>#{sul1a(O_u!XnfLW5dUF;p{_22F4zlM!Y*W>d)Sg$!2Zvp8G>lKznB3y zTL4%P6PV$Tg*rSI8Y=)LEbbFxMhrJ34HwRV1;jRYbwl)2?*Fmo{Al{W6p0D;T-V3v zOrE7b8qpA$;hQ+Vo&*QVyh$cXI1WkdWXlKy#JgAQL-=IH92nXVh%{Of@b4D@ZM50S z7Z@mLUB`?nA0a<-CMQaWrVR5d17=7L-~|?3b4&ht?{H#52JybCEJaD3VrI5{uJ;f? z0wYr4i6wg-OUqb3@NqK(kzC1@NGy#~Y=6nFo8}ddoj^LUGfRk#L>xW-uH0JY+pd=J zt$1WI<5G#S_rpP`qxX|W1J^_2jY;#>*?qn`54#th5BeJ8=u!pgKnX8F4_^W*3}}b3 z7igK#zg-qlK*qDf`z-x-S!9%&trP{2cn{9D7y6>`P&oT4UoOHB39AIigh&Sn$H2kR z9RF2AS&)j}v#B$GOLQI}H!9?aGSHVux) zPa{xZY7Ey-wHx$0-hLH2t}Mod_C?Qb2}mv22{dzKO-PH#Fo$aJin>>uoJ`6$aLx~T zUEgZ70^!xi7E89geW|j-Du-PlCSKtAmA^$e^1IzG)5;KXj>Rf-GQ8^1xeCIq7h2C zVi}rKNVN9x^&#r?4{ee8p(Q-4{MH#KTBi1qjIF3?SC zI+T9ii>OQ(w;f4yF^aahlcjy|Zk~#x$-Pd;Gq1yVgRybqor+65<~n@ISya4!1nN=0 zps!0u#~Y9u(^9FQmMqFilhAfjp|;tuVYq_5qJ~m>*|yU9?Q~O7M5D<{#X<>kbY8Nn z?5r+AdQe}#Y!jckQb78FT`+%lN`Rgw6;uS6rvOt1C7P%-8qDt_=5f+m1JhR|tOMQ9 zh=79w>M9TqdVH@ppu5VVIsMjI7k=xk&(d$5_3znhiKwSzXrSXXGS)XW)Hlc1-#0bY zR}Y&Wlo=MZn+X8|=tEq2BgNBb&IU!B14N;wzncc%9S+k8*q|Oe7-l#bZ^<1HH6+_0 z*rLDxL2#JPMHDdRaJbUO{6kbFQa(-g1-Vw&9k$)4hc(vLR`**s-TNjv=6pLH<@t6F|oEkbIVYt0k{Or7VsBlIM<| z=N!Mjw9QL{7+)~(&l~}A!XX<0nuH0&cu@H^!2xnxAoBSQOyD93)N=Xasr2H#6sOQi zHz7(xZS#8hi|*Xq+!x!!P(D9Ss`fF7gw)Zpp^-OG29!XEkdzv|1Gd0+peDgY$d0oJ zS@CBH9sLkfa*X8k-vw!XmlSQ^e1JH|y<~f%!0-iQfamoc1dJwsT4H$@LYJQ_dh9nS zJ$Yz5s?_*m;KB*zfk9%aEeOw zab)-Li_N4xuwVGz=9pfn8l?`gn_&|oO5~eWd{n)*5IZ2P8&EGaxJ=@wnV3_BLeDG0 zN&fgfZ$c>jJ~FQrcSxP?MobE}3gw3Z8LD)rAMI?Vnz(YI_KCm>MOl_HN4c1_&3bbY z;N}TntU#eLNTdD7IiZhZ1qcXtRhS4co*oAXD%$Tajsv9r(siCCz;FMxyhHT>DWUgJ zzyR_9#WjGTRRPwssQ*~c;76n$*R#O!)%PDhD4&>+Kne1Mu~4xx#e@l?2*K(SEc5rz zj5E~KWp)m-H~Qm%3B-^~#lCI}y%3JWb-Xl$k|*j-MWZLhl+W$JaK(1mQ_Sy;G{JW@ zl8A)tTAI|83}Acu1tbX{t^O1BpSx?g5W z%?==djKRL-Z9*sxCR_4@8fWZz!R!ALY1zk6_+1RdI8Yo)tFI=J8>||sy2uQe7dQ|5 zvErE@GpL#SM}LI8_rXR~KFwMKc4!k79oi*_;aR~XLv0NcnWaKjg+q}_-dS%I4S9Dl z`@Fj&#A1|XwL9Ca_d=a$4NW)NE8X|aH7Fje63%)U+dvPSeL(Eu7qwn`l^1rLaT@rz z=)C?`eMMJ6@7XvLUT>lgL*MCltS}6VD@do3V50OL*pPoKyZ{7uP#}SUER3lXNXZKD|=h*kU-%e)}KwaB{G)JzIC*)AM z8{zv?Fd7`r-3+N7r@MXF6Rdw=C{6<1`sP~ROony_M!An{I1@&_i;~vG=ltq*m@9ki z*|bNIp!H!)UOl<0I+IN2N=EKBe8_$ug{p05>$DNweX)QObbD%^Yqdk=oO`7AO8T_v z&Er4i z%2O`%UkT1eMsJ^FNJAqV2Qy2fCke*D&i=OqNIg5d-?RTofCH2Z?`UOa>u6*ENHjCD zBYU(FkP2;VVP<0LVC85Dg!ZTf>7Zw30g(RAN7gfNaMZIfve2`!H!^(2BLGVOuS7^a zvtKNL0+eJ3&~be#2?}8BPw}xJ2x~ht6EmyFavnu6LnC{KzYB#jG_!ZmvoiQuQwRq= z7c(=fpBLd#uy%C#X}-aunuUdt;S&bwr>y5-W^H9)ZD{lh(#goq;Zg6g+HgNF!!P#1 zIUDIYm>T_NvXvg-68}>JczYuQM>{hI*I&|*E%Y3W0M$0I(=&E>N=LtC#KOh8$0LWr z1#|;e2q-YDpN)CXX#J8DbQ!$FFo&96Q@7{%*Uwf>GRRX zXX#JOD)49KbLail%qnmI5>Ve?%zT#qgv^F~M*iLZpMZ5i!00n(?My)^knIy^e1XwBB0&je)h`Wr-UbP z2n6~zI5|L#hYg4lL{%0OL_pwAps;sO9S8^l3hS3yxoz=i@qU54p4ox?zdI^S^5*)@AMb=f6RbSLV@UDX zEYH%P$hXxH&yD@}H2Q>GkwNbfA_ph{kk7B=eMCM>e?qoh{et{wE`DOR@uG*(kpnaU z%;$FkJu;uAKQRaLe;JPdOz2O{2X6FFl;i*n0Q31o^hf5i^e1NA2!Q!_kNmkRJP{kj z(HrQ=0r`*3{(LIrA6os>_g@%)EhSHcLn-tS7IHxDUxa@SocRM`qVkv7`k(dZiBj&0 zzNJGB&;Zoz`HMo2HG7u+RI|ER=;ucLxrjXxTd2_M2+0BY0HO$>gFMe&&(fcWhn2q& z0i)!vmGB9fK#hJ%N)Au}AfN9aJ{tKf{Rz1=^9vICpXKxk+5wCn074E>0YD!I@UxxI z(x0Gfa{%byZTeqp@)NrX82uEO9H9BwHc$Ic;XgeqVL0z1GE6#=bfp?OZhDQsn&gazjA+dC!V;6!01&V6dr)Q%F zaINY7^0MjdZ7t{k?l!>1b)d7ecBZp5a?mr>bI`+_MRX^2aJ4Za<{}0>qUdPgK>U)} z*v!bn(4Lq}!=2bl&+;+rFRvVs^HbBz%E8FQ$PSQTZ&&-);V&>ks z@0Xh&GUC4@Yp-2Z5j*pjYo(%)GBW@I00Ur>1%Lq{KtPBhVL<+F?bA~|ARy|7yxJd^ zK>#2C3;-7$AOZVhI1~T|9~)v58U*C;9utK6zf>Qi|GA5axuIbic`wWW$YKro7TljZ z{m*iL27-WG+h4K%FLK}?pT&mw)BlnCr~0_?e<7D>@keekji2U!kt6y`?oa$D37)MZX&o3Jwh_TD`QZva*sgZo&uxYI-_7pHIv)@5K%926&&f zdGX%8c{MGWP-t{OzM7Fi9;%#BsM$=uno1!B9M2#}Ke{;*=tpp1>`>^$Fi^Yud~NJ5 z@U@Z~r!{m<<<{vXdCzB{)4|Byzgdf4?Iqkow!h%^9^<}fGoDXMKfeiW`j8J89fdN5nALQ$SnnF5$X*r+p!GHZtrcja8)s(=S+|7kh)i9J7#p=M^({-iy&M z^XQO!>ZWK7*_$)sBIMq%-IMk0-b4F{CV(j3%^&Urd~tX_A`*QK8|XEWZZkE%qklqA z5~@x6s>B=L4ec9!=&FgC6YI*HIBg`a^fu@YuRwG+(aJLIdV^c$l60X#1mIJQKlFSu z*VXb(siF81;&|O3C)R;!eaeIIX`&UsyzI5|f>GOG9horz^Wg5FM*I`eDTu&mcY;27 z7tsZ4CO=P?ibqClcj&vBJ5=+$fT{r)2l|JKKBg4lk2nCqtD;B?Z1rUZ&RFL`IOt zZtUam6+;}+enl*g*HCh6;o3z;@os@TuTR7SMXQVt@J)S3?9!@o&|RR5&^;pEhlgoXU4guM;_r zoC?c50JN_=Qi}w(-d$IVm?c6kGUz0AkkaE2o=JUyp&W^U`ykR1NbL$5=VL_MNJJTJ+ z{V<>L#kO-tMhnH@cW9!>rctlR)+jEbi4fGr4$qXKo5{*tJEYEt`!-^J8ei!b zxfj1Z9}mo-uH3H$opb`=(RTvnzLe*@yt-#vUA%Qv`$2|szXn^$$U-Qu=ML_pe8Mxu z399FB?6dTq{DJ{Hw_JX^@+zMu1mrqCof}=r19kT9I)@eSCb%nMvnbAed6}nt?;IRj zgcN)xjS0%DcC;ejixxwwZ*5=D2QM=2!#zE-98wKm7@uYc0L1=)cY z&P>flT=K$GS+W~<4(pM2BW*I;A={m1PPFr!t9iJ3XHW@Di%-81QqETlKTdg(FR|b+ zG-y^K`RXd*5|-&po&j_j%!l4di20)zCw3e^QnPcouqbvu?S^LetMf1sAV4T7+Tq75~g6E{GC~i*q+bHNg03t4aLW9DCd3epfLP-=-It($Mx3s61_3zhQ(Jz z$Y%xZ0|7=kR|5}$9c=&bT`dr$7PG&{oN9BF=M{%vL-cWusx4W0kC=D zdE+#6!T9lt=AT0J5YG~Of!w1SU`%r(T|%p}%))UHC}ZdFl3Qgy<6eA`tDKfFLv#GQAaw33B=kZENEHO(e6MnAATEJwbDp4 zh z@2WkzCiubJ#xg`JNQFTUUCPCWdocF+ndtugIWiaFuQf>zA>f?w-&Q4@uz!{bAJgVv z6X`$IzfGi|xzGj=f0hsl*r0HJAP~eoAP^XaJ)kh;xjkSAY+F6xD5Au@5E!b4y^z?Z zxxG;M&Rf0E#KFXUFyu*weXtO@ae;83YG(rB8GBHI5LjmvgAh5l;)0NPE@y&}1wc@P zQAA*bL{Y`@14PlJ>3T)c<#|EHFhC`lApvTd+dTku!}xEQ%3pfLuoT>{AhC_Ym_sm3 zlZ=LNEDN`TaBXU5L-6c+P$iHIMwp=qTvi;Q2_5$Gh6%lIw}*-RAxKAvgE5RpNW#eT zM@XaCc1FnJL`g@}SS4`MqZuuzc~Ot4I_ z?M|?&3!+D}xyuH@urCVcg|IIhk_mFGZPg=k{(RYy18fq{Ad+kalTC5$B{_|uA7ll| ze?F<~m*66oMjHh~ygeX6{9T zp(u>QglAre6G0Zjh!^FR6-6ZkSQ*WVVVf1sic{OGeuE_NxJ8vj{zfhVP8z)jEk%*u zI4u>Nn=~in-dHdv4O_Q>CdkkUF^|PO%7!k7un?Re$NDo^MZWYXcut=8ZZA<<>IFho zu^gu88@CARorID&!M7x4EApZRWeDbEF%@|}NHtZeEaGG|URkkZYBjBV(MDv+27Q)4S5Tfw7)d%FX`A%qAX)MPKs&hx$3!K>3eW9 zrRaNIEn>m?zN$^C34^+ZA_d4Lgc$~v327Sng%E^j8dFkpOd3ZpFQu8pj)G{JCRj1! zm?dkuuBxY@rrEu&$_E%CM=q0>v{b z7^K8AYM52e{Mxcjscd@=A_^wlc18(fmvDFR!>$LCYTbT-L{ZdXh#*wgku#kmf}WNp zb;fam{XW`Bq=N&DWLju=*&I_;1IKDk?hx8#QOW41#j+8VsO#ESP6)T3B=)e}&K}U? zB%1-la_&3P5*tGM=@L^OM@6Y)fRoaaUeEZV9(}LL)_X$lt5J(FgqzuA9iQL(qSHPP z`=Noxm`WhZAbsS;u*AK5#hbn_a>6=(N%;aWej3NTt)h5G)$G0W$bu zhJkRN_v3+UOe?uT$igGy!D#Ynn5H<2X#=i+F}9yxQj;cm()fB|Mj;j3Goq58wTeh! zx2tMNLJ2%!pg$7@Vv|~u#z-26XQZ`md&^I_kVeo<741X-MEiF@7n+WCBAJF-$Ha0_ znxdmvGbA)Zwq`Z;qB%CgOkxt6ia}LA%h#Ep@Wx;n2nqdD-u!I;Lm!+ihYBC;d6 z7b=G9L7vd8m^uk3m0z%zK+P16OypE{C~GYzFS&q|$F(|`SQZ9umeeT8O_8i79Uhfj z32`hEs$rZ?p$lc4zaONN(r=au?)gZOCZUB^oTd?Ng#u}cTNWV_m}Et%ZtmQ+hvVg)X})qg9<1o3tRZvL%Z;h z#>>+=2nlXvt02xTBe^7;=z8^l(dQ|B%NFrqZY#$hindh9?+2nZ8dET)XD*oAm}#kj z0OkUSyh(%`bv}nxTxotJ%aCP34CyU(VbBhMMo@U>Q4KahUYh3fyQ*hgQL1qUjq#9G zn^k@mA&V(}b{AVxNzM`#a;ezLrF8G}u~eZ;kUyw2CTo7#YNOtv&0!n)(5}%DS=7vz3y@(l(S$ zYo0dL%RLT=nXL!qr=Ohplvk<&*J~9uHIKQ0EC48t^kBVV*EMdhn!T9m9Wylty( zKJ|I)x36&MCQMI4=OPIyHVlZ}PexNd*V#OPHl?D9Y6FwX@oMoi^<9RRz`G}g4!Nep zGS(}wlcbK}Ntqg~;!+mv&ZSoiyRY{^w*9D<+QsV^OtUytzE{@jrFDFZV;!IOb}3b-4wX8PL{(Sayn5aJ7~cWwN%J< ztIG^%9-&Ymj2k6}kSKYUh3`hMi*gBNefeddo~1o%KbU$7!Y3k*m+esf&o9Va+PL|q zk}h?Z_BCRH&{rvX;`pjrQ&POlg8)Aq18|m%+JHeUDiH#`L)geVhaR(+F>BlldvNY7 z3h{jhJST*m6aufxgW-H$3-wwB5a^38xeN{e@HS@fYaZ9&Ut)Nqu@2#}@T53&(tZJr z&y;RtcqwWHoe3Q$Ufd}YwWG4x-d3nn$;qMIkDB|nvAv*w=I%c&N#?6e?#CX($A&>G z3190!G^jVM_}a&GLf>5V+yCE2^qq{4=)f(lTC@Mi{;iDLz7Ms zk!>aijCK`%%#jolMbxV-1R|F4U-BxG7Y?6?oq&fv8;3p@uamDEJTyueW&@(LQ~65H zUG^A@VUhW)bxLe?k{F#sn>_+BHpglY`EM$Yv8OF+%e{8j2R{;{hfkt+a^n5S7Zd^d zN`6KcES@pxhe!L4^t%O?U^ReF=>vro8LDgA@#Iu5OxIDl7B4tiWw&8)2lzKx*6gE$ zgOr(^?dAvE7b6Mi^jMD{6V558&{i|z@AYr|uO8KI0@=_KchX}QGk$BbeCs+t(Lc}6 z=M}HBTSA>p#Ku(!BeVR#LNmQcjGUJ#;F+y(fM52|WFVS8_{o4Fw!1*oL-Km~IB1XV zBysl3Qlt4P^^(WFvMq4p=Rp!|}#V=N@m>IW8Bh6CW^8fM=bEVN<7B9raC6M)k-t6&3!6ob&#_S zB`|p~^QhUmIf-}(eo9$Ibw+2k3-0Vd;IcW##t-a&(cFMbKi&2&zh84mO2s)3$f@QZ zwu8FrIQcDK^gKf~QMnx3%NSxaZrA(Mv^uyUd|3$kE$Q+exqY%)jq2F11o-V;U7;v; zRcmbXRHs9YAK<&|7SPg-68FFa6EbIbyUe!X`p|Pz~z<@p# zFd_B?g2AyFcaLs|{T8x3@QcP1RKG9>bTc!j@5cZhu~T9-Vo6_1oEvY4owL=t)SFCO zMLO*XuM2HbZe*XmubZwwN9qgya+k0l09f}O>Xzg6egW$ivn+F*-7y>C%_@Dodf+<&4zQ zZWN->{TJlL@6J&^KHIrZPEI*nINP$q9C~ZO!Rz!BXI?~(K3`TR-d)yhFA7d1s4)!q zi#lHdPyY#)&#;bL311?fwG^;|FB*ImzMr>(bXOZ-wjjSJUdGmjRMX^$8RQZ5WcIgP zOwU{*-1+WnFdj@?r_NVAIPE8REN)S3NOv;SD{LWFXQNLc>uI=ZJRIB zhmc@Jr2^V^qM_bRx2ee}!0WXN6LQUXHFa%0gIu3EmON*3q>mSR@%bm>Q}9L8ulJ(H zetO-H&D4*b)BlZ9{%nW-+3x$BQvOsQ?Vrue|1XpRFpLX;0*KavLKC=Og2Ir5F@eES zq}hYP(UjJL!Q(d82K-l4$wC1|;y$VcN9KFD1V<5qVHO1y#V{H`l_bv_K$Fdy5&pv~ zgGgASy#W|1ib~%A8h?02N3=%_OWzw*9GgFkxgYyqypku5Xye^0j%V8eDuM4f;UJFY zyigZJ;Icp;SdDdu_{ zLIkMtFi;t9kI*EgA4~UyxId{4piyA2I|edftKP;#()(xV@S=mtqh2bBgK^(&`;&1WH=-+0 z-H`_?@B|13D)4#S&dadH=MJL@UZEu^3cG+LK#wI|Mo_V{DT>P>?dQ$O=PZ2u;H0V` z1B!^hM3Z<(7M-WW0Zg@`a6Ev!1O|pX(?qO%VpS!@&AqF5aAEFkN$`AfBXL3prY&#| zbR70RS@*5Fex>)cs~&Pm7baP8P~xjeWT_^5SxD*Q;1ML|2ctkpW9(WCaYv>iF{Q8( z=TK;E_XKEaj({0iaf+k`C^>GWnIudM$f5}XcJAZ>6)c|~8IAx+Rxs9@uw68jTs9O5 zHghgRG*!5>Jr&i`t)L__Vo}r)&>sBcc?JLAKxAQr##w)?ZP8w6xv+ulk0o~SWrS>7 zSe^(t58}?O07?}~-zSAj(il~K=C~mw0bOzl2>Y3WM0QM&Z7~o;O%ypUBrOmy6_r5{ z83jaB6LFT?Fw-G)Rkb@bWpxiG6>tryK~VK5(`0`Iw!EZXglX!+UZkA|2vG3bb!R9P z07-6wjDzkRh#W3Lek38Eko^dpAPKV?T;eYj3F5CKsEE>-4N| za0tHq9xzEck#Lh}IVB~EJ{6w_BP9~0$2!0V>fQk~je;psmA zSyc3gciEG4n%M*c0IrdYyTm-ZhZeB6X( zAi-oRVc=_YsUhkQNx6a=#10}#?1hRcWF&y?ift_6lcWiLanulDYyne;&Ee-T!VEA8 zV>?(ei4#i^RtjdD@n=$gwO3-1!k}0+9cL5MlFM~>6f{dgY>Z?~HCj^O{I(dMPL?rP zhhxF>2bd9O$Yc@lCLz`&v7;a)1yi{OBXRN`FO`T1$?rf!+QM96hzjDNrclEml(m(& zAM9b^^*g~Lta#LJC%O5oAW`W`v@pO`fZq1#q=7zUDik4XaWPP}m1q)@7)|~e^rwZt z=g@g13o;n`_Yy&2E8=eypfio}1sbR1Gd8JR^u8D|3-0Qa0p0x*qR#;xMk8$r%}=?4+k`O1z007VgF zhm?_Q{^^Wo`~A2%Qz@A|0mZJ9W*ZORRkS~v3fJT2hc1C8*gBK{q?(MqU{dd-+$s#G zE~p!d#5md@jzyp}d*#(MbPyAV5|=TG%Q~LN5t}5=@HfMFRdhsQdBtsFlSl&`;?#B3 zg2&nb$8}4l5l0vNK7380QU544F1EvUC-rE@iBGqJ&|zw`Qp>X7i^ORC&WL+LdM-<| zmkPwo+`)RTeP8kj1ih6)G{Jx5G4<-K)7LFq{`9!VHrNbU22pg33r<3|`{l3h4i>Hv zLbe;PL8#hBZU`hhWCxLVZq4JARu?G53h+D?>cQ}GY&_iXQt!bsAXGn|_4g(sU?<|c zUA&*9cwTWM@{KNwBcjGR4oyN;WUnRidwmS;@l)Y~Gz2I1ID{pnX7?BM|N4`}5F7@v zHHZ)bj=i7x7DF>Jz&88im34=oxx}<@}SKa#5Z%B2Q;+DVvo~u84PzIHq ze^E*)E1(u%7I5<4oH&aAbmBa|_I0Y`Y?Ht*oEpRc`A-a<`+=|^`>|sD|AzmL+wKyn%>py#|jpz+Uwl!3{q7sIxBE zp?pSt9?~6}XYOmIZUnSGz*l^ZZpnW;uxD*Nd=6#|eX{0-Ip{ZZ&+7jE#KkwiE&YgM ziSk^eu(&D9D^`{65}|pB*D-qcJ=s_G73~FOZ^xkEH^c_z1t}2pEWf%2qO+4bdynF- zDynl>zjB!M_=Oj<=ALl)9kvbDi;M`kF4UXuM)a{wZQt>sH#^WRHC@WxVBb zlbAueCglFQD#od>nbg{$+RDYSyX(<9btXph9`TCa`|IO5RyQ1Azoy)+Bzot&j)I>9 ze5sYVtJgVUH<1FYLwu|Fb=Cvd8AsQsx5}2aM}D(DeU8>eso4nhEGrFS-XWSr@y{@~ z5d$oR`F7xa5-{7ruIK(Tzw_tlyu^#n1bRtN`}N#!M{%FjjV^P!fd->QPa9T&T|dzd z+Uh)azN*F!e;>9I#IUBjpP^p;k`9=xhZ#Nz?>cW56FhXbB!s=J*@vax8E@G;0uE3L zW^0HJLzkFOUJkKWoU<(wZ(R?~51YFgV;0xH6YLI%Y{YTtiK1c~$ZO!-u9~CyB8c`4 z%$LY`HAY&tc~8JE@vif{?{;t?^^TSw1lBI!i&CU{s=FJSrXs0kp(6ag(LG__+#mSF z02$ss10in(?$}`XszHx1@19BC)5FY z&C5G`5U1mAVwC;@7JlGrSy@-%j7j(8y$nFg01sKIMR~6B(u7m8vwqoB=tEND|6|B! z=oz+C_oeIioLH4u7VIh3zLn&Af_|!cuv`0+<(hz^Du1NKw>5PSGs&W&amF+~S|D?4 zrc9akzLFj8uhc-%KlF)Q`aD(Af%V>5XZP0Uj%|xG zO$6k=@{0JeZTv(#=#&i{N=5cv5>Pt>FRkc`aMR~?y25EPuwUeYb|ARBi@&IUXP=pG zJHDpz7TY1He5d6CZSrWpE<7TrapT%V1v*+2EL;!xgoSEVkT?f5HM%$m408qnzwE5% zrQbw*TEA>^K^|OtW8ITg8xj%C7Do^bJwI$N`F#eCUQ1u$tqemv%Gyi?1>SzU_A#GG zK8&_t@4~-`c{Z3nd|-H#zcJ7JNjXKSpzdi=I_YH5acH?}M5#c(R@BP>WwAY_hRip< zOMG3ROJ`tlhi+u|w@!(hbBEicC*o&K#+KJ+G=Ux`-7dLJY;WFb`1iX5w_L!SpKOQX zJD_%b{1eeDcHz~1*u4U;*Ok?sVL_+?wJfMSX-`b(QBMu&1Z9>?O6G$3=O^Sx6ZCQEr;0ds-LC@UxkQ30Ru7% z^SjyuZjLW8OcH059wAQz*B)2deGS@v3U7Lffxjcx#I;?z;;*9Ry%JJHUJW}gCR+{d zzS|?ef*)n?q~lHVEti_!p5O#ugx}|Q#&QwWiFY)3l&^Rp^Cj*)|NJ$2fDrAa0Tk#O zw#*r7Pv8hhfo7~Xr|87m`EvRbf0|ZT4w&ak;YU?Uol{dn^rrd7`1}oydg1?9(~i0@ zw-1i4ajOrWX@IyNfo;LCANIeSb|^~0sPzAC+QCT%3}C2UD*guq+s}T(GVn(g!#0i* z62~#m3J}M&uKb68g(L`E*8?PwJdWz1iF_Wep#Py>qW|jGU5AkC$RVi1s2$~YrKdeh_G(ub1xHI+%vj;7bu3<*`FTYNRq3u_n3}Y9{6+Bb# zUshd`(FF6zAFGauX+DZ|8Uh>S>KCdPa|t(}kI3FrV<;Juy@QQ-T%9;Co;dend{@cM9rEC>o)I4lSOFr5*C>5PvP zW}zEU6hUG~9Tha=5!*|)6l_1VTR~Enz zTbPz4PiBjk>dOjNmew)Nos*_(+MAQ3n&<%!aeFti?s>-BDvXq*S z$)cLGVREv1&X++o4er1AB|Ldv(=^#E1x7f_1wq@YtZ9i#_rW`Rl_IGAlGq=xQa zeqHyozGAzkk%Uo%_$x;U z)nS`NbN|-FjT56>HBDkyPd7`=3tat_Zq=;C@nPEGn27ldfqxeCFNU|w3+KqNU{x{& zSXm}Rg;~MvJK$R97Bxf5lvfR9uvftztl88KQvUeTxHuH`wI%-B52Np}`9Eys&-&HA zb}%nyk}Ez!O?()6%gOfrs2W)gH~1|Wj_4GrVUEsRi_4BelD%1?=CJ#pr9VcVzQ;t`FoF1?nm>f+ z=c1AgmD9Rqpw~q&mH~==8dZ)U%|r>7%`Lm@tkoT2f4I+mdWeB9)I;v3FVEGof&AO+ zGKxQ_G1-=X4q`u?4@8P`ZUD4-sA1qKbt`cYqUWw5CbBTLk#dI=7s)q(b{GtMx_5H# zH2Sts+8#yB z>EvYik@?)i$#C>Wqv9!ZT7?w0I@xYhQ4q4sn{}(jnF<}N%Teb(P$hUj2f2F^c*eL7jhv@wuq<5GzW2!ktLnzG z-F?$bkTmRxSCa0q^QeGc#isB%L$@A@ISMbZmbo}^pQ-b3>{I3Z(}Ig-^ZY^x%f|@9 zD9aH!A{a6t3V0Dc^$H9=kF6He3F4L&#z=G06uFkGl@+1uN62u3u7+C`XV_}%m|olC zMw-yNoE(?rdSaEA5~Z-wmKD)joRqm0vuax9wULG^%H>;|m&5L_AQ(! zRYN_L3rKNcAyn4&k)KvJE?J*ey`ef$R;%Y<6B}rBUK>`oou9;%5Vbm>*3>=X*kE-Y z99Otoyuwx1&_eJ?3HEUe?$yebj!1zFVA}kuyCudGsUKsAG?z(W$rNpfSp1yQFuinu z-#82QExd7lNF1Lg6!WT*Y5~*IgfUXRJ)~*crvbTvSgPnEm0Pb$c9p3&w6L-e|CafQ^GRKo3E ze#1w1TQEq|R7ll><|Mwq!P@r}A?rH9Ox8;kC2%N+{(_(V&1bV5I-B~W=+bJM9 z9xK%-&Q-U))>p43^6#Pi%F|$1Mo;p*slPGKiJYMWa~=&;Yy@Rc?|aPLF)R4`ZfdbZc0Ko^{v&D z;!48Yn~cAVv8IDeL7sQ`$ur`)LJhSWdm80SoIwKe&ZF$beWSr`@iy5NUAhl!#2DUq z=%Ca1Guu?LTWf1vQ)9~gPNwk?6mRl()EN z(6^hKp1~X{UF7VhTc3I+oStpvxBkBHGy}cmGNb3Ca%7*%tz%g=kkhNrH+_v1;Awrj zlRa>EY*A%X<*xl}ekZ;WUJRVR^=&nz$cOq zq{VV|?CBz!Z*3ou>R5xHy2T=UIS!yEIxxP-k^v_qxZina?{ zet=!W01VJ?AufNHYW$vDPza_PkZ*q9`+OVCYL~GCewB@emHRIC9;Yt4&UPNIwK%A9 zrFVUPVrE?Jk`#4l@Iqfz?B4Vw{Q~jMd)K&vXX&yR zIqoOrqtdZ?B|qR4{$uo0MRM44RLh{iw>4KE9}|HvJFX-b{tDKWb%dn#zhqei^;kPJ}siO0i z+Ul{cg3SQ5+kkVBd6l>tS|M`Rm`86|-r~PPjIwK3-5h9Ps7~E@t?g~fD6PrSw(>Tq z1O>)Vv)hz&>AdJ{jWtp>g1IMn3v^g)#H{g<)s9G%$GNQ)4n63Gi!{VjeBZt@zPr}L;3?Mm{qCzWPwYFh z8=_A=FG0#+cRujN`*fFxaRbkLm=Sd&Y+AZN9_Qm0s@RmVkvm zvkkrEcoir8Tf;!NaF9Fle#?N5KgP|$kT2GB>6;^y=8J%3hwO7B{Qslx`X9$E{`Ot} zR3GjC&UgKv(xLwYXd-g$<@O`--fs0Hll_$r{R5g3#POoY|D;1X{!WKFKw@fH)itinbqM#1?BBuAP<*GEZQ;K_lhE^5uLP0r3#cTz)kiQCHV8#Ij3kseA?(9m zoeLw26+{asPgGP6r{L7hhoaQ|08QM?k8~&s(7O+YIxma`j;1Kh5stR3v>xtL)nCET z5yxRV&wqjDM=+*2n&KeGNTAVqJAK!A#oB4jWKm2iU=b2K#$0%;72Aj8ewNf6vIblmaj*Xy!THq zG#(bup-@Ib(ETGAN)pb7CPn0}njl4$=dUbHJ6MkGN43ngX90Yor3rYZ8*8P&7G)mG9Y;g&$`MCLFen$)<+z4kOE8DX|@R( z!e#a2-R{24EKBb3HGf&(`_3%cKpo@`%P>HWbcNXq;e#x(uw6BIKM4hEN`})=_8I#{ zv8zX$#P)(~nQ~_f2bt>1iEEjq=!M{XPPc-Zff;=;nlR5HPXt(4e}E>$4;1x23uJ$B zOqD!H41ddlWD#wv;_Q$$tFp4@43WyF54>#c!Th0IJj#Jb)@Y`b`So}`1PP(lXi-M} zJEUoft^OG$oFVAd5}sBulSrl=RPyg1q@aory7rns$=0pWv&c5!v@Ks!xWmeS<(_*R0HT!F}L%>I82EEJyI@qUUhs|C1)3xX_P+Pvu za9Gc6)SW6xs0iSu{k7)HC4qY+2FeD)&K(DkuoowEojN%FFjNhw6#PQ~IVp4ssuG8j z5MhFECfy_HdvKqV=HAe{$B|1YKHP3mi9TJ?Yr~|caI{65gr=zrve#KOBrJkForJz+ zM}S852lPTqnWG*5mhx`Jxl#CBo*p`Gd0n)eh3-*gK1p(ueXaGibud5CZng+I$fi&2 zUX=|bFD{DumK!3A`FKBA)k}aG4bMBXt|i@}%b^Yguaiq6o3!m#ScE%+{!qt9-$6VG z{I^u0jPYM~Eeu@aJ-2k@!b|B&{9F z2*KLSXhtka9n0!y9E?gxv*2swbwK*w2rJ|8iO;N#!hjSZ{C0#c;oTPOt!l49*? zq&uX@Xcoh+_PL5&KcL4OzI-IYSuw2k;w34|_7Y^x8`b#WqQV3d%ec7XwH1W9b(3Tg zBtXfO&sivv>rvIs&`z~HC?q-z(-m15G?R)_&K3J)1#}#>_K_)J7mHGvA8$S&U4A|? z%~XnwGJQJPsu+5t)Sgm(pp_IoBUi3;GgZ`utk=hiw8)%Ow7LwCDgQfhTeP+57|hJJ z{)*B}x%ne#+ucc7;_B4r0hiscI^?ftO|MuY>iXpRBb#X_y#(kbd;po_^Mvy!REryw z5I8q0h-r)1hLuM}vIqgp5tA^?!=M+m%&ig{j>-#4zxt6ECZ7J0uB99(RmIL;p$7B7 zhLVMg;d(j>qYxSsE=<5pT`x>hw?1YD*Nw0$c0UV;^!gxpniB5%B^oPkPm|DKD$B?FjPX6byJ(cj z#IyYPLN=9xt%w?Z6cm;_Eu5JL>CA>*6+8YtKDcpSS*NPNE!et>e|ZcAx_Q;Qo!;cD znN+RY5j?h~dnq>6jXA3)aCC?Hks^u5KqeLGwHEHR z?jsd6Z6ykGZh(jJ?JVE^T42?q!@n1(zyn2^xF zEf)TDz;&b#p%C&Xwn$nUPEt}5TN(!wGiy6G9-amBaBWyEOG!~tvX6M;MikSyjZkMZ02KBbe#h>>rFhX#T1?Ko>AB7siQ_{Dmxq7tuZDApV%WR6Z>Aa3MI-_t+BocMi3^eql*l0 zc)0UXQ@q2fnAaqmj#>9!>Vk?r@tI z?)qR!r`ATj{g$W?K1p)v9{SSg6SL7=f+7AR#p=~OC7;V`v6>;orA3{L!Xw{l$ z!~gVqy83!ApYs9#c?lyKS^@SX_7F4BYGO<5EtB1QDs{90>wZFOPcdb@RE!VTiEOep z^&DYGNt`vtYQhwATBRqGZvWzKn8CFnG~>;N{zN%vXuU_SG2iBz@QKNPJ8G9(KhOUg zoe8AhwhBjm;!pe?ofsu;y_7t(JIjx8d$ylvgY<8=g$NH&p;)s$=nhQY`Y2s58Ic^L z8ZaD4oS7~-nf-gCjCdO!$(*!Cq?a1f`vwHKMwnxq zG8$e6rgh2p`BL+7*;mRCFAhJFIArRz5mmp87@;3RNT(8&yCAyrk(TF^eprgxtj)v_ zzVP$>PVTx@*qLP#zrvXJ0CH+gcI zu(Ertr>{L8zQ&4L?-IU9<1$6cIkgGTd&}rixN}jy2z$(ru{UIgtvx@kH57qxy3&Zn zETNpOiC)LOm~h;^$XSIh-&M=$f3{||vE?&!CNMB|DMryu?6PBCQqn_CHh*~%YhTG& z>9uwBIE3aNXu&TEyD=qy?Pl{xDlt}%DyzAqjdV}luQX$P<{F`?A85sQ932na6(Vb! zNj|^b28CitDZ!o=HD}38)%vi@4{N^U#);tXBA5*%jH%`kMqAHg?xz;gl>}FLtaeD?9Jiikq${`2APu-Wil(xQ5&w;b}F|aV{=i5c$T>G zlQn!(z%aC z-dDfIcY@5@A9v^N%ilFVr4j*^HfV=G)84y&_Y195)ob(0(G%%d>h89mB0G2LaoxRk z=u#Z86Har^VV`;rC#jw-`VwW62i#Dp$=<6XA8tyaotJq`p88anv-|wId^2`#KP9{D ztFYR1Em3STp^FOq+1gkdwX&6E)8FO%{Z;qbHva;oTUbC0Fe_ zVzQwi#IdeD!ZTfyG?sd0_I~fVA$XFmha5ZRzV8}i-Ti(~bN~~B(wn9?1&@7xxL3NU z&g#2(i}zHPyPt0Ur*yXx;-*8txisH8j2(dU#GGCIiPsuD0s@Ub%coZFRhNEF#_gqv zFNc@BML$h~Sg;CLr#cx1#LcKA4Q{&Yb=z~!Dv} zlkqMG*pd(pXT%$CFn)!2-7XhnTU4 zz9ij1=kC+#YlK9Vx|qHdw6zhQ;}zS?NIas@x-pN2^@~8SX@$WiNllwzx4PMz-(wMV zjj2w>p}(uwb&>Xm9?dkNgZVu_AMZ*exCkZg)cMAKUg~AF81tI&KwQv*zxNgW?m=Ok z19w5y7(`$vGOwrSK|>imV%NZ+xyj*4$OEs84@*(QzK=w&?WaWLWPtD^a@f;_%& zzuikZZlr#8obv7O4Z1b6Y25_7v-Yzdd=e0T96uvc|9w93An#XkuFd6Z$91lCqqkdm zb1?SY@#PENX_g8GrcSdAQ|9oQK<^&P`!ByqS0u-zI^IcB-^0hut7tC*qg0O8*anPv zWdkqaUup+vv`XJ_*_zPEYpJUkN=v-eEIMB<4wxh~ha~7M0GYId zF2CT9vF~ZESrZEd>I~j2jLyjTWK@cOTxik_0V&7U8LN!_oWyl?Y?|L=ruP%-=%U&s z()-woZ$1;v@mF>hiQo*`10^ZWmU}yGWV;XOezkT8y+UCaJ%3)yb zO4rT*Mm_mqJJ7VJk{*EZjT>Tm?VR#VNC7TwxMIQr_Tsu^z13A~QW*0J^anQDQ11YC zd6?4uOuCm^-BJjJCDy5JC?SLg+1o7JBb3K!DJD2c>tEDn*nIp@&`s zBy<#zDph)K(gg*jgNTY?L9o2+efD|x*=LOR8{hi3p8U!)*0bid<~`@V3=FQsaT7QH zN=q^k{JWR+r~OFM`C3calkZQ>;$HjagyLv}+XmKt%eEHfl1 z?ng=IhrlecU%JJ9vctv;5$xYHtaP+_-o?1{_~ePzUT?Ozzn8Nl+UZ?(kjhoHx$-TX zInVnIe$O0mpY67|eH2@D6i5GTR~E++1HO??;kk0!UStmK5pN^g=V!l2oUQy4*Ew`E z{%j#fb>H0mu)L=(Wbx;|VPIl=Xn_IKbi((lQ}bKFpP)@aeKXMTsL@f8lb z{uyKnQ5jdPFXfon`gpnr+1r0%E-=5>-}zh8>)ScDW0_2)@VbqEo2K0S@|kd-OU8rl;MV zyGPC(sG-nw`%&$l!nd+2YHGuNWon~-Rg%i(fQ;@(m8^SV3QZ#-rkq?&ZNtn5P5XA} zXK7tpY{ilHN#C)NTaRAHYt}4GJ8AgUj zE^UPxM(T1SKY-uK->nu74OD$`JjXTlW8R}M|K_1js%GD9p^W!$vOhn1m(;=D{o0uS zylz||pd9y6sv}D8Ku)xz+{ma(2djB?{FeY+N-izPcymMn(UlDm&^5{E(>qIHTw&Zw#rf@?7t8v4wtts*TxS=ycx4rG@%vg}I>MEtD z%VUW5(=V)Yce$%pyP0u8vA2zz6heM}V?(?NEC)M&JD<@g4G(ngh~64yuLi5v4>JE| z8KeE}delqZ&NCfkJf89D-FV#3tJw9hpVwqWoLL*8!8e;m$KN?y;Qjbtu9wx!%~W1| z&F=1xwXcV5-CsN`Q?h+Lp!%bFwm(OndH)vINFYJ)`L``ki#E~Wp=!5T{s)<9YhNYz z{(O3K7CYD9sIrhnG)dKE9dpmmvzhH^&ZofsZqn`884+iPnkOJH26zyg!5IBo?rTBc zg$}YFG&mTo{Zt8ePj_l;!0wSWg~Z8gFYhtIIs+O)zcI8-a;s%paVjZ zbnkt!a=WZ9=+C+~O$%R>bX^|!dlp4pz?PTHJ2Q^=1&Me@-*^x?!%{D8~pt@~`gwnIvcjTUT z+vq<&!(-*MWaybE*?p|nQLhy_M{;ERy;awc@)WNX@q5kV;nV)Aw`(Bd;TNxHZI5PZ zYppCuraMSZ5|1cUvc(?;P1!sRJiREEexu^?^pyCDDd!+)x{fX3fxNMT(A)Y1U^d~D zrMgG?ykbKmqvzAU$fV4E=M{JYqdbXM%$D-QS(OB0sLs5~I_9Kvex?m_M-g{F`s1*w zPZ5EwL);vD-@zEbCpx%6SD94LpwU;YlH9q8B zAkVnk25#84l@|6I%~?rHZp}Af&`AG!w0s_sdd>K<75@Mk(p^IB5<24j(B)i<@$}VL zl0@1s9Kn|T1*>f3HdA-LuLxIXto@nz$HgLh|7qJt*V)%itDX)fSCNt$UedO8perJ- z(*1YAPONzP zD>RK@-6KZe^Yikdq5ePlG3qgXiWjWT7me0d1y>jHXY~xIBf4~G9~8p`Wran?`S#3WxqRA^b7wuA?N=(vq$c-=o!B8�k(&5`|p>&f+0 zN>ze-*|pU1YC6XE_94kW&3w&5wf)_@0e;eDmTilg(q0bLB={Jf2!UDSzf<}?@SYKXQVk(f2nhtbrqzrT05CgwvnslkZrRj|J$vhC5=xa z&4i4yCywNZi1HNnp#9`W%L4vKDSc?^4E2D*^^iq<8VR*z{{;J~q8iHrb3oe~^z}^o zQ$`;cqITkrV@~&2#Hx7vVqPnQ+hGyRh44tZ-Bo*c|FhG)XO=p>AN(5?pH-Ps4V53- zfg$fhQ8#GD{wvUVQ>I~&d7UGNqru?tOknTU2lpT8ThiAGOwT;%*@+zmt=69@>Wz!+ z710^ma8ZT4rvWZexp*!=oW?r7e8)xAJlodiU4QcH)0>sCGT73I3-B}3IoU?hHQ~F``)zAQKjZEF2NsDaI_0wa z-mg8vtrw);8{%qglD-c7xnMbc z^h&<^tWVP`@~iUoM+$E;Pp+=dDu}p?!?rux-1{le`y5G5c=9Wak+rZHujM$qj+577 zB_n)^uPGk|d@jd~=5gPB=RdK|A-VZ1LDJ0IXoXDf>B=UXNR(=xnoPN&5=z=wTM-Z9 zwqK_3yI~m`A4BYQi7_eX=?AI5Vr`%9sat<|Mu4ZRBmKx7%%5^i`VkPEyRfUWa5(>N z;>eEpWP@ozS0!UJsp~QO?SQt%F!axkUvN6{X%TEnwv`?Fb+7BZpZw8a z`i|4-7yGo&{$!u-{#@USoVJdH1UPeD&L-3@sSx*NooO8>%CZfvKlyziGQI~Sh0)R~3vr2urB%Zl?LT%K)z`}#p~-7SfWEgHctVJe_S*Bv zemZn3$v5UF@nu)6Vz+W@?75E2b!pf8pA!7mDorm7IAOJ7cs-4*th2DEj=k6k@6|wf zpzzVpmqqqBEsFE2+C#d9yopMGbUbkIS+G;G`?X*B>lYaxuqrzK-64A|vG?ntM1CZi zG{AsjVc1rPE8jl;It?e%7R67=|3oG{`?=TX)=ctDJ8AhYTOZfQu^;$1i~FU^i*6kAopx#_PSKn7 z9Jd;;Sf-``wm-jgo_@M(RQ~dA+q?Uv+p|OW8}0~pk7wNeK6AnTbl?@C-yhRgt2BWI zB1bkKJ}Y?kc1NjaORyRE#qeYb@;L|Y2ySJ_fBvNYhnNnuR;^khE9>yrQLyEGack_| z2Zk>}yMsfT-Yt)}{`?|WxF6dvVxtam+DYqiD|DoBy3@xe(8qVjvP+|sy0**_ox8`H z)af*_ZWna#JeDWU>_?WOCY~^(Pr`9)+xHd6(S6kjF9N^7{?0;@{M-!IU(kTh4+#!h zWKZApZwrs0hTf2hkJ)ZL0v-qoefFo4#`$o*r4n}f4#>{Ha#TvTFs;1h41MRz-Ts;K z|%%Ia14*z7T(Q zTXy64`ew^xj^%t$g-r6v{F|s(%|#*{s#$F6#6HKUgG7dizM0z3i|`+}q+tqXnkpi_ zkALMG$-a7bk%ea~8|o;csc;Xx^U!o~-uw#=UsXu!w?$xAT7>W1&8>EC_S#kjS;RK+_Lsa^-ll%yK(VX~q29zpzIPl9X;Qanc2oH1l2=+9cF#*oFP)>C_SGr(b%Ri9 zAF1&~4zadldG1Pf$dG^~(}5fDo)Q^KbFM*NHq!N+ztb}vGR>oDV)pvwOXZ&qar0_M zcO&pFo)zl~mHsZ~IVNxGEgEPp2GRs8+LA8$67JcJF}`ACkvsfqm@ss&r4anFM!{Mb zXyGVf)SEZtDvCWaG}fq=Z;*e3GnsEF^=p?{{6Wp~lO&EaVsYfnZW(J0bY3YxDxsy>u z0Z5|(#HeT><2Ha46Ah#vj3$=bCV*h0K`=1_a`QnT!yt-KqCAGuznqZ$5(Pr}$3U=- zAZ}y~nPGG+tj>{0$TNoG79fss(veuIE{5_>bR5e*ibQc+jXLs-5Dro!)qtzhr1^um z_sfZNAhFcB%^+T>Au^+|Sjut;5&wcCxp`eI_*OJf5VAv#98{-oZzd869-_E)31l3G zCyL|nV0Sq}=B4sP>4q3eKmQSyZ3v0{Yz$RM^9b7+jzsx1hWf$T2nT?MR1F*pNe~<5 zgk+Iw3dPc-1LC;Y36e1wXJ~F+Jda3Bvc9J?ZOL&wp9(>W@t_*45>CXc>y%#~A+0H7r{2~Tr^R5FH(jf>;5z-~fu zOmqI@lI1j%Uixv&#dV3&O)=@do-Qn#H+yQ|7fS#5oAiD&k^Hn%Mo{?(^u6(f!uldr zXdfZ_muMoceR1lDl@a#cE)tb2QJj%sEpo2k6K(lj4x%t#| zbj@3#`R$`TqVi<=&WN0%g(_Z|ZZgBbikytocs}JXQ%2EH7#^H})D)jK!DYj$g%bD; z0#eM%fO$6}gMfK`ibYdwUW2Ebp#A$4tA1d9GuBPWl|R*HJ~qF-u3E^)NzbloH@|a` zM@c?ov1c=M_(}0lP5o6;7adC9;daZUQbv zGmeRZMekGGWk#49epO4Bewp<^(K0WlB}!F`&v_x@idX8~r5lpw$WNKf2No`~9w{Bk zFC=FK*JzZUSRW~@Pi5SDK2rKA>_~B&EHi9eqwKu!Naz0b{x zT2E)^KOg1!5d2>K))lmH7={;0_R@Dnm=(=}Dkbs!2Hv)`k6!QB$Yzlm@}}gJ9HMI# zHr^YCP3PSI+Rmra$cKJ#zWf-FP>wR0RF93IE>4s}s?$ADN>qSVfbx)NL5WT3lZJCI;pBB7A;RK=mS@uI(FbcjGpMW7Sl!8qXmDgOj~viTQmiC2;TaZ zVgNf|jd@7a;3%wXIm}F7j{)(@%M-eU3m6iZuC+3L<97d6Z!;6P)>h6_ zsnp`7vk1*=ud(32)m@7MRaka3gf#xKCbx5)rhnd^SMC?^)K2uvTBr9pjemlk{T{-q zdsZ_$2ruYxV$0AgvLq7vg5nlivX%C}^s}Ocr?b=e>H(FmQG7EQ&zL z5y-+gMDE@kw?pAXX0|@exF(jQ40fi;DIDb0YDuv7q4ZrG zm!R)T$imc*ac{~lI(7XbK{joeFOk*u4Ulh%=uyINDvy7y^ zeg3=QvpzSr&;@<_YN8QKkJ!IG;Zy$LKz)B>`R(_vSIVE&KHuM_czijo-G5&6Ir3QV z@zvTy|Mzau$agHaFW-_3T#gw%9C`F^=GaR0dW$;h=kiT&?!>^KpP!=uVEA8<912Lk z5dA?B4x}v{yyjnsrf_xq%X~aYqAnH-ErAmWdJa)Ii^Va+wut4|)u zw1H>wNPRrH)#Nbk^MwSSNKUW|a)c=smnhx7Lm7Zkqm31dmtWbT3YZ*WzcP+j1vx{c z88u+!CfE}e1Wl^vC>KIJnN>dpS}=)b;}uUbIDHE#y+k9mOj69Moaq|FG=M%e$Q`iY?Mm22|<%{YjxT&uFqulxa%7qNu;T)*-YvXNQh@XvOf@#otzX%6p#KC zj3@kUGpuhZnK3o%M)SxT1AG^%ndEu5!rH?ji}-LUSAt=U+P0LB)rp9W?QZ!G8$+fK zL_OL4hfF=WerYvAe8~N%>kwG2Jc{UvNrARGPm02+i`6AtgGb6sj+LJcc+xoe`8&77 zVz}p1#|(oMKP_e^wjYWzcn&F!XHWiQ`AS7Q@;3fH-um*EjH#m1h(E_@@IyN`L!PED zMU^WRJU%10OmeQwYq;+p8yKlbluAnR#C>?XDr`>ns`XE0xKtbc5#rnM{oVC@2DS2D zcjjx3zDbmN>Z@sq<;r~BHV(Vf?ktlUJ`O*ZNDkDmlv3={yzjk`zTPj$5pwD05Gy*` z@~6r{$LWsdogmTd8^buKiXx6Ak0wp&&WsvW9^|;}M9xXWt8%!@T?5#zO z`UiBXVIzbh0RpG>FR4}{cNBtot-=yB9xt=9?nSK6G=Glt&q4;(UZWW^BwjurnjmO8pYd* z?#_MbVER1w7myb7og(taP4}iAs*i>4gynxgEF)<3rn2bYR=fY6{U^-6CFcD3FPJ5Z z0su)FQRUGwgrrcU^%0DMaC86DSxZJO`U&G)Sm9Q1KA)Sb}6IuVFc+MQx0n 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 literal 0 HcmV?d00001 diff --git a/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet b/tests/common/src/main/resources/2015-trimmed.parquet/part-00005-7bc4ec26-3c17-4f4b-82d5-85bf626078a7-c000.gz.parquet new file mode 100644 index 0000000000000000000000000000000000000000..66f082ef51f07ec89f829a7f89ada9b6469e9385 GIT binary patch literal 84964 zcmb@tRd8L+vgf(Q%*@Qp%(TVK%w&;eS!DU;MXmZ*)juDqw+QK>`3I(XfF3dOBxk`Tzhe6G6Sd-2f~A z7A6)iBUU`i-{H_$u!OjfTQC5?f3?^E+W%(#9sTcF%&kmJ((`9whXBJhR-Ewv%mj&r zip8n$_w^rg{|qz%GXwllp0)UA34a9%u_XUP@SkR-WsR`ZYGzpejC@PG0$UKA^aLIEoT^*{F)YZc~gb&&w-+G(9!R!UZY zDuGf?QbLk^0w|4#M@Pr5rq-yA#w4YoB}s@A8>f&c%=)g)heCWh5LMR>;e5igD7JSkE0Yc~ib62z}r(DP35h&Xyq#uzFId5QHn`>I_L3%`8O#bdIxBGd={?c~2MRo1q z-!zR&R)8C6SDGMlA^h7P#qY`=u*yQua?f9$J!TgOjG09AYD%9p%)KU*N0{zxA(BkA z{UmGvvz33O^@F!q54n72iqhhZ;d`_8#GiwoBD;7l5RPH@Z1qh#Ud~2(fc8xO$xggR zu_DV(=`Sr$kUkW%HFwy%Zck!5z}N6zRU#(;~dpJ8qA@9ZEK!L-TA;|829!gaytoSV&?U0wBS24jx(TQ7}% z0^79fKct&My&ApBv$xCcmP9*Pg6vi>QUAX5nZS-|# zLb<3o1wz@6*I)c6m6NX6wrJW@KR9fJmVWQ#KCjqREoWXEQ07qxFJ?!3j@%GdeXw6( z==tXA-Kk%HG&?@ORvMEFt8JjhF7Hv^!`+eRR+JLEFL>kn$Li_&WO>>8FfFMQr1#bl zPwsCKxRY%{%2<3RJz|hpO|kbZK4TC1fY4u{+H1N5ax;Y>K5aLoKQc#{)BIsX7C#ul z?^yN+ci8j{pXOXO58t&fNI?C&9LHJv5>p_?5BRh)5qXwOq4*VcZ`A72UI~53Sv=!; z*RCLAl}`N&I*{sf?)~vBhg#hIGg8x0f6^(5XRFH{-R{-0D&O82SzAfJ;5!5clF@BWs+&VgU`ve7O(H&E5FRyVSKBfg3sBW z9CPLFR_1uN)E{E1MGU0;VEty(8FrXK(O%k90+9^(t`aL+51Q*r>q5@hP7>?ZzbKr; ztL?qCH@$6UBN=WV**@i-iEbJ{s5wC3FTNw^=2KoD6vF~G-5ynz#s%&LpC%jTDp4!C zn<;*%xtYFEe$0L{A9y}vw@5Wf#8l7JS=QLyV4FxVM?Y^J`fdf|ZZ~ZdYTk(FSYKJ* zr9qa@ueWKd)-@hj!kY&ALq*qWxoFQbCuIkJeh6T#u9#!Y{?d)xoorfZB8eoKxwSAx z-_zse9j$8TA{_N+=iGhWXcuZWA9~#WMP>BEy5h(5 zD@c>)Q2ixzcWdagG6ijR<~jK&IBtod+-=1v&ZlEtb{FHm9YJY|E*Y(oND>=a_0B1>hK5PF9V9zcxJF!9bb#~%sr3~G3a`xbEr>D_G z`Z*0N*2*}{HvO~Kv|(UfBb)N%?0805>+kkmJD9_s#9OsD`WRJ)Lqk7KZQmD)k>>Gt zosDd6;HJ>uBZFg#=cBv2B^&An=Ii&qsqFC)hf>AB@fR&QB7X&^QW-cM=Gr9pzSpB% zn+>Dv7Io9l$y>2kEEeJ`c>WEMGQmFyF`G2C}59A{9Lc@F&$ zC=T3QKf|Ez;9A!;f3EIgoxb+<@VOr>-r1JVHg8b49wl!L{5IO+^O3ie$mi+Seh_g% z*jzs?dX_s>SY=qCf42JCyYoBNy^2MHB-s^5dGzRPYj%xf zxh}xrC&a#Pevjvw=V8{(`wcdZGW%!XQ%E&O`jC4#+oG$|p5C*2q6af)xPzeaski7Q z*A1G7%Y(C!ay$xF-Rz@{K})r@AT;(u-K=gO570m}Pf2%n$WLth7;f&npSoz*EiH?w4Ea+ zBej#!DCtVcm)qaAozZoFE8I>w{Kr|kx7Liz`p?s}f$FKOD-!L=Uti8oeUyLp9^_^T z&}`+;0^v|6G$K_^Z#aA6(|$@49cKbCGYt|M~iO zbRqXDw@Lr#y5~J^JleE$RgjV-GTcVuBmD}IR#G#}bfCWD>WT4=qp$yJWgKsua>e>c z_B^WV@1@8(OP*UW@_ousN|4%L`w0U7rq}k;{X`kW6Z-RJ;Vx%nY4&|p@bkr3RgZ#K z`<<%WE}Df+x%b@A2WGECm*koHPMF?XHdlKC;uD4t6Sfo<^~=T3{f&*5BdHeNZd`V(@095Rg*=&|LNX zNW1~TgvTZ@g2#auoJ8CkUMTp@OAI~4QRf@s6*LY$r_ zDAoy7L{mfxj3L@Ew%EWJa!LujNfT*~Y!D*6Co}^HsJ!BU~wK}!C1HXGD7DrC_ejp#4l?wA}>2} z+{Zg4fC@=bNcMOx)MC;&)-f?u_Rx?wF){>Gpu{BzftPom40T>cl9CZGeC}A6%)#6$usYgdb?=uq zx?70o#@&JR0h2YJt4HhwY_q_t!kU05!So}Bv4*n6Kp_Vs4pB<8`QNXJVh}dsj&MRF zm^dq_5Mv->W&_w0G9pPSDPqQX$pD_V;Fb&9K@&QM?7IC5R-7DQOkWP^!nPHx1s9>h zQ4cus;ig3-IWnE%OF2uyrfpSiTiy>#u3Ygsx>?0nEr3Rv! zl2c-3&WVa+6sm-t2L>3E?n1}O!V6KGla*;4h&#h7QSGZkBU%En@z-If85_y;x`HH- zPU6Fblk*}1XeI45H`ZCujV`7_SF*>&86gMnNdHTntT{_~jQCVp= z=PHyg$`f-ghrk7YkSe3kC0Q1`;s#m(DZDFD<)4;lcfZ(3fN! zS!u<|@>Tpv2O>}q@AD-}WN6OV5(H-gX)Uj<3A}N|3aN|BLDkl(F?Pvez@2g#F?f-J z$mC)N%CPJ!ru$!Ux6rF;JQnYFGrVfrXl;7C6<7Q(Ah% z0KRrRLKXIDb0erK9FQmgEo!+uf|EdZ+D=rxK(mJ3l)olc~{I*JjN><<*ER|+}EyENKqSv|Yiu?fSv4av%vMGQsZyGL+TljFTSR^*@O^&dYl?^1f(Sopt8`tjT0XwXwyX{rq}Zx z(aqk>bzzIvr7ultQOpN-lMhwQZXn1$O{B@)wLl=8BS62M;&jIG<=w0i79d?8XU1zt+r?kV_S!OLdRmpH^xdZ-AG(vN^Z8YwP>@3 zavd1P*5YW>bDkJ}XbqFQ@EBVKcoW>A5s!g}Xt6!gl^u<*{H^G5(?{l{-k}AXmPjli zUzFdzDj+J5H{xm7SYY7FWdNn4MVYEB{7>d)Diyx7n-nlwM)S`mtd}$rR3i$Kq9RQ0 zFSDlwPI2U3W9bPO6{blYsI#7-w;HJD!VgcG)jr3wT5xk@E>BVRiYH7P+%^Dl!;EA* z@MfYCn><`3tdVz@X6zbSbML3D&7bh*>QOVKsLZu1Ve#=|D4Y2yZEV2F@cp%RvE-eD z2{#&1DlYruQI_Ztr66Lgxmkc5wj> z2@JFi_Qpz0TTc50G{$PJ$f|yDA)TV6(MBt(8qHva_;o#Ag9TVy!YF%m4As?u9j;nm zCP)*6thI;)Ci`khLD(m)&}vTZ#u7*wOAdX8fv?=n7ZeU+J5UVC`K_7XfFk}nqgX4{ z;q{{AES3b@-+ARTeNRW>Z{(AyNJxxcF8 ze=SDMuo$Z$LEN6+2$SNm#wv6)1>h2#L+5nvC|XQJB#hsz6pzhGJHf{P5^a^D{-m7( zg8~;*R%qbqI)Kq;bza>Rr9y?vh|$X4(We@CNa(qT#-$KN(#3SeU?xIz@)r-<>KF`W zenWB&^bXU5>JsH#`Cj|%-9n-DV z>le8X7E6mz4VE*s;VZEyK^669r@JC4ZukTmWe3 zlPleuR$qZcfM=s3k1&mFjwzxODXCN|lQ4uW?@L7O1EZy!7!1)$VhkFmfrcK`I}Ml% zyY_(8r$v>Q+F?lj0H9|FhtziNZN72W{(}?V+>Ukt0;B$4RDz z(8yV%$5-^`;#5$64s8-Jus2S1s73yYapF=WQnf{!DvOOS_xG^gy^`$tG912K_ z)06B<>|;s=%KU6ZgibphQ>+@J+>IeDlny+L(}BQqg>O=-1ejxP%|dhjNx}jY9<{Y%?&2t)XGb76!knj;Xd42U91e7b z8W;6l=g|ED7PM}kCb%UZ?sT749|VR{YEYpmWF*)!T&`e9cw%}All~hxv1Ki3SPG@7 zM+Sq;xfvHuO5luK6L|a{G6mD_A8{GV$P~g2)h@$iX1fuDSfW@OW|RzD_J2}$UZd#Q zs8d>OyeNf6vusX>sK8qcj2JG;(#*g+%?HntG+g{;RAmEU2Qd^2+g@q-xeaLR2E(&+Wqe!jSgH%@)nuJdp3@4IPtc!~p z^wcE+CgbEL!_nYf@(gX8@n8!5vB^ErPrI=c*2zyhP`$qAfq*Ah)1t&sHYb=yd9&% z1r^>J(rRE98927@;7oSyvV2)s^uvUj;ic>vuj&L7is~=HS@Q7oT+9M$w%%vNKS z>jVg8do7Wz`hwl-R}kTCT@dkhsEq`uFSMs9$dj-*Z2JkO0O+1eP5pj=h-grt72`!< zyRwfFBq?r8+oAYAvBaImiNL67lJ~VZAa(7V*%y@tWA+Iwgux|brP!U#_ss{Gw;DKz zaeZSDbs>pv`-I?nIfj3uCj2kn8K3Yb{0#QcLenpz(&uAa@>Zq232w;l5p+QW-p6l3@40&si~M7=a}Q_$2OARSms(5?Gg)_V zT6k`_FpaP4DaPFU)ToF6VVP^5}{FvhRM?y++7s zJtp?t${c)@du3X5Z>AgnjOM4sJ+c>`C)+y{Q7=_DRBeNo@CSTzs&&|C0nJ5v&)28K z_#k~4b!Wci`{Cci^zkgwX9b4C-Cw?QJt1u^#SlIr+?=^^otP8yXufCjZagm!8je01 zyv^RMUR$4hUXvtW#eYivCMA(DuCg}H4qrHh zE&!1xLC(bh60mhQEhEHkxz1srYu95yb zm%E1LBE4%^O4o$_DD$r3LcA*?PL{di&F42g_46_8?TYQuE+|h|^-5NgO>m$8P%ibmtD<1A3|MVWp03{*njLv4-Mj7h%KQQL z$V|~G@z}HY(Ox;SFY~;_*UB6|fmY=b~H1#T_9r zTLTk~8a8e8vqyc#FwTOwd@>N zFVQp-+IH}iJ`rN~)b8W9FKQj@E)|>r=4Oh~lg=dLETRll%&y{(=NG#u zoV)CBZmZQmiYG^})aYjr!XBS`UFdl`WKVd97fPh!^rYowkx$xw-d=BCSwG%AzOU_J zt0qrcTj;DuV@L1NiR-qd8-+^;-sG@ugZ4K3@a9-A*QIM0idpXuU#V{J+yRFY4Gd_%UMRMghQXM=NK+1p4zttgZJ9jJMZeb`hF^ec&iFdVI*gQFXarQJ+yVC zhitAqOhr2At1*61BKn`FI(5639#{OAnxFD`tKUPcMFlzH&Az+$z<4;KxzCl3clN7# zIUWc0ZcVAW)Se3LzGFSYe9~?Jyq6_BF25sp?-T6$r3-Pbc>36vYY+28zG1i&KL2^< z&f*h!_@%=GI^UBS;eqv6e?bSi-6Q69ozCAh&dr<$?LzFb>v^4PgOCOn;pG=T+q5U$Jzbn1OXq+q{|pJ??uX1!z9m zKUUjEK|ioo>6CvsA+E#g!EJ~>-#yjcRhOiVIvrMo>C4SxKFS(_Z6zGB-IseDfnr>% zztp-!3kGwk$$p4cvprktx!aT*RUZ*GA>UlA3W#jBG|M%+ndNz;MQJZ9U;C6W6MYu( z$@(at-peZu6GwNVC{Z*Hxo5TKSwnF~b^~~DR+qYDWA8=e0^hB15&o6Eju*hXf`UlDGP<3zqO@4O zE*-b)MWlyMiMmv25nvOo*!$Y8+Z(oAB@}bERGjd4-ItbT&D{IhtbeI;GWH*Q@2q`w zrvLz0>w-<=0FI2X&Jb>>h|?`%&OTF=A*ArS-H!RvtI?9D20rdvYP5I<{;;U|zrGO@ zLg=_5BQ9HUo6$MML+te9v+b^k4bl7DMHEKW`z;t8G>mhp9sI;2&4{3rEQw4WX-pqe z+boA;P!5O`#o|$e#9(3|O_x^RzMG)8b5nD@S66Z((ycV z`PNde^Ar&B`FfS9+~E4B*7d8z`s>>0_IA7|z8}PK00fkSWjpMCOn#!*nfoZ|!OSW8 z3;{cVb3veEHklDgL_5hy;l+pylCy)vrk@Iou-BTRJ0@jtlEgfPxDxa$+Mm#H0Zh%e zwLI4i& z`zAp~SP!GO$EsHbSp*?)^QBA0byDOpi0q}P)ZGhQMdC!i(gY}iE;@zOFQz9ukwbr2 zp}8>52$l)Qmby(!L|ul6 z`fu@V)dxs6RXYU`Jcn*-Hy1H3pZaKzOWo7COi zL7ayp1m#c3;wAhIm+-7*w0g)iC>knSeUD>CZMk?Jw(kmV`Mu?qe^!9O-{l`-FX7gH zG}>ju_xh`K-|w8>4QUy+s0U5gX4ymuRBhi|52v>ncN+82;hQ)-(pM$C{;EuJ{ho?r zF>&@gTR*+iQ3-Whm8@%18GJBRUCbC*JWchetsPwlVI+Ba86YgIL_AJ$bP@T5=TO!d zb8>j=0jKDu#+6z218u$wBgp@kKJ@MC=J$k04|WeOwH z%`rSU{WT%`d~?$V6N=_Ni5`gqLrztBf#a`+wY&|~R|G{D@{G)!3+hb)gJQKWe41~3 z3OWSu)75agUr(C|gnzG|j#&Oqk~r6zHwP^(UI?pSXA>O>m%k3yWBalcUV2V(z-Nv6 zQ*SHS`IaOnU5HqQ9BIwutU*ytIat=A>}hbJtTXZemQzW#QA*IWJ!f{xtI}xm;(DLuuTNv;@9ajD&K>| zpRgSQ&POtWRQ}`V%4??=wSTIw%h|nt+h<3T&?%5bSBY&x35x-68b`8Q43Od531yll zm+dxY+zL(8)xx1l=*C?V)unMc%eeVnyVTjQEZ;e@aY=K9r}g-#H=}{LBKB?QI;;lu zuuOnd@lTYoq)Jwt6T}^XJ}shx^U5sJiwuwY?E@taX3v<<#)435kDU8>g3E1iXyB9i z=*nid8TfB+imT1YXjFx;} zmeZ;ZieeU-lCIld%SNP!{bO4>R=Y(6KHd|0O+n+(Pbaq$g_P^$+YpP{6wss^bR9wf zw^0jAxjsKY;7>DG36r`6{d&5VRb5TYnzYu_aK<^UgOlE{*gRk<6lyucOj^PI+?w)O zvWPdsDqgBN1KSocf7}djqwLSjafD@NhDzmny(f!L zQ)SYnylcyDiwAg$MlKOjplsg+#1YBQgi2PTlk~}g@v52G!SN2v*lB)e>cu^Dx##iA zeO`bxDpy^Se2%;#)!?6GVkCg23EV`Jj$P+%a3n>yzrfS&TikNqOB?R;gX8<%zgdvz z`6QMW6uGmI1pcJx0evZ9;QKOrTiCC%?qMxW-(vd4o2jqDI&!B{ zj*qtfwG$(!&Q|++Wh@nJ{(U_Gj8Cog3)~+LE15OP-^mnXJ@caimj(+fWUq*g)YF0|0|PjRBWD(8b?{7r zJGJb%V*Bb}mF4c)B`zJv7~G-I(madCG8nsIR5h%pMdyrJ%A|13%w8pUwg1@lrzQQi zU>y&0jE@z$9RY8u&h(n!sgh^Mtv2-(M4oO_SKFh+C>k4rxInemA&kbZ&Cw0o`)at2 z>Vi54Zu=nxuM=UVdaKf`%U$)bj|xu`Wt6_-o4F6s`f|6}R~>etn@OJP9eyP(ODLuJ zE*TD$T+vVkg>9uYP$j06FYS&f6&Xr-KFxZAyU{z!nfgtVH+9^~{hN@2@gzWx{gQ$D zS}lI5X17FOlrVCU+uPw7!Iz9ysCylxp55W$(=7Z&RzySmO5EF@IN>9e$pBM4xQha= z4((`Fs>9Xjr!UA+|Hbho{;9~1yl8AR(sL4UeQe>P_uc{;e%o_>^@bqdn<*)Vto@X# zGa&h##1QS;`I0y0yZ6o7^dRXsY2VFE_bWXMTX_~?;+?;Zx-O5bla7qoS+;jzlhxeY z4Pe}H1R_Q9!LWI)@X*Ga3q2z5eY`o)!#db-T}L>OMQ_!7j?s6h zfsLd4E|ZK9t@?U?jE|8&-r8ysA|16g!^gfQ0{<*W+l%mBP#K;g8RlgtS`-CbK)NdO z>H8QiZrPGV1wrp6t1+#TQ3jMWV#khfT7 zxq{9yX%w#4SdB}P%*72}rL&Db7Q|{J1Tn70j=5;V&l(Ds&s{Lhb1Xf^jB9t>g6%9H zzFxN5dpS{J$E$+CqHwo@B+5i(n+EE_d|?7uPrGgbS9Z}ADZycnDkShwuwklD!f;_& z)aka)9O-Z#W5FMGohP3cwRJ{+()`d`G{l9-q#dmv%@R{wSiF~n*V*}Hax{ob7QfbC zRj(1=1@nW=dh6VrSuv}6kMCidmL_Od`X2y?@37vyzJJcU01DuaIY$sWLs1q`-UKyo z{}_l4?T8ZzgPTrn zg(nBM(yvPmN)vlpM^&H=@khwKJKYnV3G=mB`d;*pmzD)n>7FqAX?fd|G=VQ$+|#%3$2sa{RXb8Kv@BfwIQt zV_+QpoM&oLktk1hCOZt!AK4@B)8V0v%JyJ(rkA$;(jB|Kt?Bu5K2_o=}#lOV;k)+wdBuym{1)D26Lk8ule_9w>N zmC5UDX6PKRzJL1Gjf}pYQ|vKo1LfS&sLJ0M8(-ApCHy&S5~aFSaq6AOoXzXCKaUnU zzfna{41$&{DQ%I2usG{y-~hmk#UT0-q+lSO*(KU83^2>(52rD3WUThY<5 zeFcJ+)laK?0Prb=Z9Y7XpGNMILh}-#4f$i29iD7HO0cu zvW-e;wVB4|3q+QlHfm$s=k{r|kE81_vAZ-C2psMNwC42=#?&X6IEjg=$#eR;Fo>>t z!1}U$zBL1!_Oi<7$C79QOI@sj^M|*S&EY3R+kwL4*k8i_Z*nwU9IKI10c+%cL(hr+ zqUXwPI55}tPI#6{3B(+YYH%4y6Jv5(WE6?1H5P(aoVhU?-ydd_1nC)yFv*L=XeG-d zHp`5BeP*7sXZhUUF5fq={N+z6ZDB?iC}l6d$u3YhBqFBtCQ`~0fpF%~nJc(t^C&6Q zsmFZ;p*#fGL!QMJN-CsoU&cb_+N+xv5S(N3I)4nf>g~jQ5zQamRS0{upoK zXR?#>_7jgtTYN8iJ_)UOt6{CzZbQvTZz-Vnc8f5|iZNr+tC}a}TVfm(XT^&_W&1t; zk^a}+!56iYlgdXT5ZNZeos(zT&ib9eac{r0o}8z9m&}DDh}ku7Q5~3@&LJd~C@5V= z?;lu~-(x?sgON*o2ij%c?eypz%Nq7|VZI;2TJ{U?yg&S5AAs=URMetg7qHi>d$;kV z`fQP{RMXl{Sj|>fo67>i%N}bOwkNT5-{RlrGiH6C@kn+*F;5CTdGVn{a zMxHq%gb~%{VA(D@b&vc@)d}i)A|DgT+ec^3u`h(}knDSA%Md&Z+_=6F>@L>FJ{V^Y zXUpV_=J9el5Z9zXk*(`L)wE-;uCG2bJQ_oTI}HHQg(@)OZ@iAIcm zooL3qq+Ll6r#@4>Ic0pp1U5GoJ)QC7saRV?~5nKqu$4BXCScL&rwE@ z>^;xYqZuE85rtVGWE`9-YjdnGcm&jOcoC%;rZu4sq#0j1z3npDv8%-6y<_G$WA}o@}xePaRVK zF;5?y*}z|&JJ=sEyL{^QxM%U3*q}cFJ2TeOgv#CdxyfCcd+$Mhtim&CA8;QUPTU}v zJ8BOchhmS+vvlx1lavgJrPNUYDi*x0@+a;W#hby`W+^+2yVU4MmFz(_`_tc*AK|Xg zk)JL-cXteeZhM)#&qa?hkAbOkdJC~*?|B-DJW=;-J=#`vX}y%jShKtrXxWSBRjj&x z;uk_bk&m1oIXx3y^sE%MGCes*@h`@wB+=gUhgC?S3OAi6(dIR=x2UTD4|hzlZh}4b zYcy=*1y^jjugfTNJcIa0s~PTuH7q_Tqx+Ay!gW`M_c#Z-_dG)!2L$HRJKieqI6l;y zt}kd_P@uY}=_jFW7|@xAvd`_dz&+m#S)8u&+4#lg1L_uopMH(axx7hCZnK@6Cr?F+ z3W3dvABUc(RSP?7pm3C5)zgtq+5YmqBZl%)o0vZnFWM2>qk$l;U*3~a%n^r1{W+X~$-oZOiU&+*i6av&&77tNUEcUiulLD=9&gc7aWt zN8%{Zd6ZZ687td^-c6R7vWZr&j`jZR$R>HN{?R>H4aP;m+z^3n6Np-G^67H4qq3Fw zbSPKDSIwvCL?TC-ZnY`Xuk4L4ccD4Zs|sX+BjU7T(}J`7eT-pPDDdP?{myBxXD{}& zZb$tl%N(Vu2kbE^4zn#*DEz9ZTVo0X zXDcMA!RcGC1j+J)|R?&`cAz})8^Jfk>7d-JDW)xVW{ zL1)jhA@mF0qtEHhTC>V!qqQBfp!_0i!}L#ByPf0U`%r3P8Ta0MK3tCAH$L-lyf)*& z9`2Fw;eCh(Deb&Ed+Ld}e&u^$@)2^@_xf1No2WXo2Y5a=_EGA&w6ObVo6p)S(SX)< zj+TX^uB?4JJqQ+~cFSx}awdn@I@1m1x(NhDodAa0`FbfHGf#3S_R#*LTRhFyrn-Oc z1I}dF!(Irjza@~WUEaYv$EaSO>$2-wFN%Ar1{U`i@&=x$mcN&#m!69oXx+o#BR7!Y zg?*#01Q~dy~-zy>+Qek3L=U*i@suZDES#`cs6;HHJmc+ zG?a@rAtv>_?coPEy5|Ra!}Z_um?;}^y1@OZ_R$F?%l~Tq_Xb`<7}dk{uj*r^HC5t! zgLjf@nF2j3zWpJ5r9BpPn!QD7e-^8Z`M=TZCjUXR|J(YHdcgmGG<#nVcKbFIYeXQT zm1r>j8Yvi0pBVDDdI;h>6EO1Yev|-INHWAgSg8L-v)cq=f6?rcG=d;F6-+YBLflYnAShgI zst>bFREl1sAxgZy5UW5mn864vT4&4*ySY4+$*};!06>P*K{~|jF^_=uREW{b3&9#h z7GsK9gge3u&7N2gW64^CXX6pbkqh?22564IR363!?~L@tLIP@qG?2SB0nzbW0m0@I zG;cO4vP(=b;Q{L?-&_K+TXirI&0nxR288S}WKM9C4kL7G8t1)DL4q|GF8B}#?{_yy z@(BQnHj>3NA{IkJ(nW|NCnAMVO8y1g$Kah&Bg6gy+an_+sl^kbbSwZkXkgO(U_mi9 z78Hah5i-KyiSZG|gcM}5vI<`lBl9V#=yfAuCcw}=>x-$F`}^cg%tF(PC8#-U!4>Vy zlCu7Vut&;xEMQpv3t^Wd2w_j=nhT+oVw+HnPfVtuwWL$9jZ)7A$AaA;qgTs-$0%3B zsxq*I)q(5h1tdmR+gLIfoJ46qU1QaUNFkcxAwZ0&VUzX^Fj|Yr>n$~6w>A&M;<-%f zZx>>C|3%nI)8%=O)o>Ws4w%*Z-I(zMyk0zOJ%50EvmMD1Gcj@l_JF1XZ@|%G@h`#-&D)Qr#1bZv-EdyatHn0s zLLNY{e+`o2z+8Bs*C zae_?WHJGC710%SDHtR9glyZ|!L-`Rg=DzTi_zplNG@y#Y_YcC}ek5cbpzO1r1b#6F z!+!f0VJ|i(8Cu&H=IB!<=8h+MKMxmqM+@^`xF!MokYNNv{|8|wg&+bFyo`efbtL3h zV2bj=>&1KEE|J0r!HT1ShiFrBlEG_^iO030hUu~43|Igq7V@D&>gx++rvfC1ZdBNW zA<1=?0tv{_RptM}>VJ}9ITcyaoCGOjQL`gZi$v$K)tX81FlD3~1LmSAhsceaX=$my zsv;OcV&D${{Rg;kCG} zS#EJ6q&Fch)H+0!W>F|V6EMiubw|Yt0t&FgV-OGBfoHLn^U0tFYr?WovxANytLTz4 zWNZ#?RP2+0EWrTyxhH98;>bDm_*-gT7fU$) z02$gaj526NNu`z(3CqK8PzdvIJXfedrBe$UJH$OD53_Nw8%QLfiwXoFIaJ;YXK;^B zzSzankkQ*64Ibx`y z;m9VmiPlo$MFBBBZ}e(ou$cAVFd3QHN|+|eV(P=NaLkzUk;Uk>LJXwPzU24mVDVu$ zCYDrNX4pbNoq{t8_g7ni*&<&T#5G;tRzGd$Gs*>MH5VWJur-8YeSuZUyZM&;Ri#R= zK0Ttvai`M$&kjwNZK6nh3X?;i87dMRMpIY=lOt0;+@FcWww_^VXGL0rB(R9KH8a>h z5%vaJWI-ikB{=o%zE6k+i3^o zO62jAQt>~pC3bSE09d=C71jc^BX`}9bH?nA?p}WIWSheB9TXe+)oZsT_NO?ag&-fA ziI=c`WAQndG}sZBh4Ra1Q8|w`rZdGs8q$os{)V7AZllp_w_UeBv~Nu8iP;BET_1>6 zZ368I27c$pS{4D1@{JsM0Nsi;w8oNLKvxHtX_5VKqVI&_P*rpKql_J-FP7WEUK1EHDt19^g?3On^PKOma(Z?3Ze!DWIBE|u+ z90TUhJt#LBR-By`SjN^*x{P4Oou0h?MMYseW5%Sp!RrE%P-zZebXVWN0Aj>x3DAXl zyAIApGZPTb`q6Wzl1=kAMI(x^&Qk7*AnqbzbHu(f_aNE4`&P*P>7r0ctip+zK4Ej% zJ~U4l$_aGtN8|+Ri4Jigmt2IfE*D1WrAjjcO(JZ`u1E5mmpIGbk8M>tmB7P-^U8N* z?Zmw%i%Uz3-E_ocHG=h)^Ha&Hhz`}YJENBCA5x){tGNHH5AbQI7FYj?#uecIUu>OI zurATErI&5nwr$(CZQHhOZYutVOWkhAn%rWxIkZiBw=IXU# zHp;W1`nF|uC!-KNHQ5sdUm2_>?Ws4YDhXs?MrX9uOou3$5EH_`Co%|YzWO*0(M z`CRcRcgD~vcoE+N-5rb+(38_W+LCr@2a_ZS0`nO409~ytgj>$CIant#XC$3<31sTL zDWt!%kh^VnNfJ~r++A6U8Vioa3kQ%V_o2*)q$9k!uhsOf=Ht z%sLhTC2ky|`Dg1%JZQfhqyp`=^mW-hvTf=?2(payadlo;zKP(W?$$;3{ZcEn=nm8t zRZ=eWo_O@S#>M)*!e@v1Y9$>Eio>R5>7RG8If9Z+0?f+4@#it+DII z;~ps;_}4C&96n$|o-jmPTBDEU5k?@WwC6|{Xmz~4ZD!0}xbQ>}%D=XWi->wqlijcP zg4~QMNGEMVVuem3(y6XIO+XC@Lt4Y(<7MU8brp{YOiRFlU{xZpq+K#t;rpF0IC;Dg z=fgPp-Y223hh#%M-5}DLxGMxCa)PfGU8-s1t>puSr6F5VB8Ir>#qAo9&w?!Qps;_F zVLxcyAo zRb~K*JECAE6M%pnHdeltFi~U~^r|&Rf@A&~3dNc!~gqUeB+V!XIDSI%me$I)j8hv<6wmsS8^d`=^{qqxmi?rONU< z=sxuk$U`CLS(z!iKtWIb1q#BulCK3N=NcxY3j?mTb0m^9j;9<3@Y}jGa%Jd9)=A7$ z4i{4k1d2dQcX=kM1C2Vhpaf4|GohW6A>zHg6Ab&TVB8{C>Nr6cI$9`Yd!9-7Vc3Ea zLor3)ZCPO~LQCJ%nRXWXiJ5EFD**|V{6aMX2qLM-8WsV8%ey1WhC0X8vk`UaRwwwS zVuwo8gr(eX$r$wqr@y@i2eH3~>khXKyCj}P=68cog#+QSexoz6-`R#73F(-Lt%8K&s!U`PM_t`?y!2B7~vXp)y z5RP1yfoq*Jd_fpo)RT&k)ZEbhEK3B4d_dea!s!2;P*i<$V!(f8u?wbyGSQ|GFo;*j zZ+sR7MRsS9lI{!jr7Y^#Mic?D5-C;ga(?Br(9 zFNu>%6wDgU*k?Ge#vy=9HT$sCDkuU}CY0XI$U%qqg7%=$K~P25fq0CG<$w@E4~Lsj zng03(bOgU55Qm*WUDD#d0WLk*FpcT@v<6g#!iy?U3CWY(K2?fBWyGlv=dx$J@LNt^IzxecVpd1HFax>8={84)#!%Sk(+tuvr zz>}mKs(;!|P;P8QFAV?=>0!SKmUaE-aPmx0Ig(Z8O9rRkErq*hkCmnq1p&LU1oLe^ z;;qP9o+5!t`R0cL0Sk)eJtyjiPT7@oZAS(#H;pvx_O^9wB`g1nIJu3ZDOv z2Wenpju}?SlyV={IAo5&Lc6B8Nt)AF1WbqNJpIii1r=cigO~ZBX0n^w-*ze$8a^ft z9&l1Ydlrd7mAysC)!Gl~QWt9Im0c+GSU@=j#X%w~K0d1kgD6nTDXN2OA^;_l4o(eP z(w3ejqQy$#@Y)&(sN4&&&%44l%04bMX_QpuxSatr##B1lKnlz zUZ5OX*eBfO>Gtj*^CmY>$-|gI?j2%PQ4bU^zVpP zM}L>>SKbzZEfl1C9@`EZ4*xv-Q+qa~eId6?YL9oI1@CTD|4K883L^SipB;(b#@gr) z3FheQ+J_bFH|5nB>&B3sRV*6{M76g0I6Uby#eP@(G{Wtm+zG5C?NT)5E=`~(_&7W#-!H!ZB)6ikgmu2MjyguqWO&y0q~6;li5h4dgj*sz(iYSn>N^=e z!M#Gw2%dZIGOn{W;dWg)Bd>5lK-}jIrh7-+)2Rju@ke%rdGQ6npOnP+d3FrHgcRd{ zB1lfH)(9x)&BP5m_qJv5IEfpq#KoP{F3FDWge%`|Jv2vr*=SomEfS(Rma4CG%JGG7 zgT0i+FR^L{05hu1C>RE_8mq8u7Q)|48fCRH*8ssT7AE+PeR4D5R{Yul?ag_KTI-D_ z99%n6C9Z8t%l>d8{94)fMLy}HzI9`@$nh5P3wzev>=ejFJ^myv1kbh3H!U2poO!|N zfid0pUFw9XETv@13V<*uT3S)1f7aD2bpI|jP}p90d2DOLxoTU-$&22O4x~mavp+f; zP}QmCvWxp!(aE+heAt}$kq-5_@sB8YIp|Ec40CM?@OjDQS5cI4 z7JPSpllv_G>}eyM92?6O4M^Ay_WWlG^a9TvoKML14$@Hl1oy`gC~et_(=`7Q z5UtyE9sL0oukwPAq=-SWXykt1q#c7eW^WFBLa zA|P^aZ&mfZBG(=MB>rdPMHz=;ZW&-u!mdUuK|2_z^uswT!iTl8-wE(}xRri`*Aupf zzD!RXp*7)*TRi zB!2`rA5ZA^gMYPK6UMHb_HN`6-sWl1d=oLzbnVP| z>o$mabmsLuP8e_5{6@QPhvpdHsA(X5<+|O`bYoH&oqN84_mVTyjS;Ze%rBNZ#7p;F z+7+^{qGRa|Q()iZa?fg!5Nf!q#y7Z_vtW4WtGR8USNN>WcQ8chq~kTPUcMNcmCHVD zy(+?MeQkG9Fw**$Gx~$Np!%NC`y9ZJ$A0JXo%^K8_Hx0+dXTrIn|uOU5O}yW)M)D1 zSHop`Mtetoqk6F)$lOWziTt5+<$ZVBX6d}(ThuoJShd)T{<9iJ5zOARVRz-Ukau84P$qnN$N8S_| z2YbanE3sD&>{2j~ruJO_iOGPCOh@}J-o34R=>0K1&BdD&LRmq@kLivnC(Z|&yQPR? z8~goy344S<cT}z#!`b*Z$WCg8ngwF~>7RcPTd)*)?%+0ex>Ck- z_q&l-Vl08oA^^u}i8CW{CCjq55&=C5_b*Q#Y^9Wj@ohID-s?lW(cGeotOp>sWN5(< z7GD)T1)e-72{?m^ZY*tUw2Sm`V#@($T#+W-bP}4q}H8xb6$#?xe>H|8$JBSbZ&_J1M+nD?U)#+egbvK!3QyWJ*~XGAr@-y{V{HWY|N|KDYxYpmlqI*-@*%r z69I2D--H4=B4u=l|923ghxh+82m$;bgAo69`uF?~UlDi|f%ERaF+MPXKww0DKwxM_ zeZWw7NkJg6OtV3th(bugV5mw;!QhxiNx=}fPP4&~gh5ClP^3vpA<&dXNg*(_b+aL` zjD1Lzp5J?=>oD@<5ABZ$rikyfvLb{eqG;|hTN;E~T z(|j~#VGv3TRcVq+40UA@i44u3DiKiH>b83rx_U373A(0VO0k43n<26c9hU>Lj6I(q zaum*RNO4T?lgx0;04&!@d`zw&IhJ2kjc}|}Tn}(;b8tlR;0sEs@$4%`rji_ib;VO0 z98L@IoI63N30$CYq6*x{d7%nC;lCOcm@n!|6?iw>9uTN*{ZJD59%fY&`MEYj6$Rce z2NeasKM#N@fxy+mg?Qn_l!Pg;+>k_|sl_HmQq2aHM1NNuAi*FCmnn*&Y%#?!p(?8- zi(?w6B}?EsFU}zl_@_Zh5l6GB5Rs*u%}Z02A129&RxQHGnnum1$TIe$rOL6+sijJC zY=tc_bDuS-BB7M^t11e7fvG8pz>A}?iUS)jDhpASszRm{rKhRLGM9_1D)5WL$U6W5 zsjI1YGo!1kYrCr}XqlHUY3P;Ds|#2P?WV&SHiKe78Aqo_lba^1XJ}jI2VrPhn=6Ot z*e(re=sI+RYwEd7iEHY6Y=vtY_=Kyk82CBQuP9`{K4BUKLvvsmhg%zEu|`TGtFZ@0 zkyosmoXs|i$;YYBW|<}mKZ}{A@JT*sOPprtw`h*562%_)xv$u8wvBx^3uMd&%ia-l+jX6jka zp_KlL*m9TL)6ny%iYLKAZlE7YrC7gH8Stpd9?mBO4FVp}+H|MH2W_z4*9Xb-gEWw3 z&hA5I+#^oQcjAs`hgI|=CM|GIh#T1uSV}&TLg+=;G(f1WKaSKPEk4$ktIPH*@M-`S zhI2lJj{vfn;k(uM+5LrCV0GG*Vcm%)6ywWpbi1w06^Fj0 zrOgd$=vM?!Vd&Fgd@>?e?mnFF@NXKSfcX%81P!-)vQ?2v0g#zbHER4UCrhyig9<zncn zmQEmxG_*a)uG0y4`Qlin4EbbUEeb_cSRVAo5~k7)Ln&Zd3%l?- z$f4d;)-o1`)b=XoflE0WGsm*{wHHC*#073}-c~OaNe}>K5=CObMiNclW3(SlRq<;d zi#Hr=CMJ+h0!l1)t$24omWctYG>+9l(lnmK!ILzB``l_if$upBhX;>-4i8wsAZ5!^ zcn=GZCOuHC`h6;N-rIwjmUit+) zM8$jOC}~hjzGe3?^+g@1JUA2pk?*TK5V_8%;=@^v$jK*So~~gq29W`IlvbW01hRq> zuiMaXPR}RrqLyhu!n_4J8FyPwx)Y3Dp|CP0sR}ivMtq#rn512ijUwhr0d7@smYrkQ ztrBewU&y85alSd zBni(86H3$iRW?@e>rQ)*+yDJ-B%A3Q`WFua7|a$?Di^DC)`LHhcK8-?QAp7-Jj}G8 z6Y{x!@ugC|Y-|LX+9o`GDvZnvod<& zVzP4SuVrY{<9O}g<)2PsWI>rGH0BjZRvpxpD%5{0E784UmUJEXU(WoCo>Bk&Dm4(N zNufylQvr*V4Ku1)S(5W7|4+@h&EFb@mp`^J{WyQ!8m47zA)BYoY<0c1a8PSJ4`s-# zEzde=xx21!m1=t+#BHg1ry;7yHB6F(>fq*EF>N}+DKE1JQFvjL!;Kna6XP*>ZNr8I zj%1Rx3CPFmeTj6n8k}fk2ZSbA{sKEry`us#Omm=!auXq_A9Bx3cYrssd1F>L;Y>#) zB4>)ZV0ifhIPAey<3*~AO7WZ!+!oWJl?aw}E=Wj>cY#;xS4{rm8Lp|A5u){650!w{9uySCa(pgwW>l?Zxoc2#x8iBxWBXm{@Bcxv&8jK5v>ja6uCJT>G7R z5C_*wKiT{dJ~K#9F5TexeQn%dT)|LiUNhl9an-@QrsL5CTN`v2}WP+QTxC&FJzzKD*ZQ$wND-n~Jbh+e^mr;m8dHIhpu- zp@TE$AM`@+RB0?o?bc}Agf*f60LW{xA2}KuYhW8ohODEL;xZ!#hH(;q5S~}g8huBf z!qPZfU_XP#EPrBXa8U&B&K~8bWfILJXcia&t4V2lXxN=oUo8|~Gsgx#?*&JmOv-wI zE(<&b*V8Xw(%E);=tT}xd(5KBVNjY=6;L!aG8_Q*=CSCo*F2;N$ssio0l?hJ*l{s& z#x#Mx*0$7fCEJu>2EEd!%eBPHz0F`_*hPvF=L%9zu%A^vS)_A#(}-~9hpQt5Uklq; z^QRXx&9#$bo?Z9Aj*VDzT5YyKW}JwB$w{L!$1H%}RM!Fr;7lZ`28?=T;My4_VdC21 zIN~iyZN{7A*>f8|;d(54OKw}OA!kN9=Ak9$*qHMf;jmzaW$H3gHMizlOL8CKN`{kZ zhNPj-OM>~&r90;UFoO3aZA;NSp`kpS?6w?0gX%XJxDP4dp?do=nGq5$TQ-M>bGY;(`w8`HvmQCeFip9<>nxM6fS1TBU;X3xFh&cEE`7J*^z7HL2D4XPMCTw(5^Xk zk_!QH*p?>4g3cdHSb8A$ z1OHywMac!-B#@?_$!_6-z#0lrB$PTK!B7COWFSV^!H6 zw?AR3mj^n@Jjn59@{tOZB7}8BUAUm+aiGD>7*2$B#CzHAG75j)uaSey@f2BHUP~2q z8l07hCNA*z%Rnl9Fbg11{g>-rtKZe|Fc9~J+yOfxGOUxllp^l%AwkMI3_sgk8JfH@!8w+uO-l&-i-nYm)IT1HFSdUZyg^4M zE=bUu!~mrOzuO*_o!d)p(Tg#;gmWQ6hK@?GSR5MyIoZ`&uepXZCcW%&NfDg+?=e(P zaoTto<(B)PyLm9%QS^mhUL%$Zoy1ag3l02Na(rLuC&7M^Aq|o4N|sp7-q%w0RvuI| z!P$Am)NJm0yZ;*H@@lY7GNqhEy3I=p`rQo6y=Gsy4&>*}=U}}?f7ruxHT&F=sE)?0 zR@#Ly3RhUs%1uQLHSf^bXM^xtR!vu=JV5WU>mTii+~Gvl$g5ITE!pa~*GWC@2qFaVkf=B8Pryqz92tLuWhM3FpNZ`rC7q0c2mzOOOVse^!L_b> zB2h&ajajNUORcF&?$$?xVK{rzv~mn#(e?YM7)aW2&0nH<+PFqavQxUj?wU-yJNn{_ zdC(e(MtgoxE-bjod(F6iGch?zteHR}13IpRPoa4;k+HVV?8rd3-ilGhO!nj#;nmCT z-0)F0sB=6UT`!GTxY#9xBAI<|raXbSo~~YY{73fa$)Q+4t`Axw+UDb#SxfL7HHq}MA| zhHuGS&=N^b5i~|%;N|z`OFqI_vqxbmQ3sTrY(x7gbCgXsr0aAJ3oFKwxOgtHy2n!HL@VE+RM8QsP@9yH#WGc}+PUnj` zc_{r4HbjV_%7#%vxRMQcx}iVyA)tV6Hc}xfP&vHJKF?H`O)F7D-#cVaovX3uoQI;} z7T6OW3+uZc!FDTwvpddg!dQ(tPY4K{qg3dgen3z5WBdqvt z=$d?WeDzy)3iP0&n_=m$r8Tl7ZBSHM298MrHSPqN4zKAkJ67hVH9JYsql7nqFH$f| z-6=E}9xY1tjdlxu=L32`g9focrSy=)iN9)eL0muu5qsVFarg|nb5%%YL&?vi%j)Zy z;|xJjjMjh#KG^vnhI*C#;G5I6Ywm9F98KW_9Gct10?brARy3{;pzqyd&v32?%v_F& zA>|q{^)JW-FAN<+LxPwP(6|W($0dhY;4$=5eExf2;ukP_0t#TNk+#;>|48zlWZO7~55ISahINh_q!2YBv z9`hu0F?z>Vl6!qxZ#>Ucb_gfo;2@_lPz!f-iY8r4h;(3gh$cz&?3mCOBnoby9P+;mO*glW zIOip|>k9)XpoV0eMk$;|6hIxMxs68gQH8tw3NgS+++jvWyah4WOIQHwzJq-?rF%Z0 z_y(|ch4gMXlPH07GokgGfKV7SYZwV8>=O{|!Q&+!ypr($DZ#KQ1@O=)Ccx z3R>_A7y1qanrP2Tbk7>@SsV=?pbFk_AqWt~V9-ENcTT$Mom;rpE}%>?hv*W8dP#!d zuFt;e_6p{fA2|H08yL`dcZNE?s&N5_SXFC9Rbf3M*Etx(=?c<6&l-S zy|Y)G?1(({1wo3o_lnn^OlVjPHeSTXQ^W{ioR%H5rWHoM8b2sC!RjBZso-hjCt!1eV`;R`uPF=@C=l22w&R~7f^mK4Gi zOTri;!-&%307zk#(>DfF3h*%#G?NTlKN_iXuYZZ#EGFqDqWLHu2-hbRH{c~VWG2_| zHaUzpIRaBPWb+xX%9RM~6_NS+ubC07g(hsi zKCwd{qXsjnqC}`-Tz*AESj8wv4Y|!9!c77QwdB^<68^SD2Rap881}LA4XE-Bx^{^P z6@CA#8_ko^kh|vLL{&I3Mj%uP4zes~n$ipOtI3Vvu^oG%rWtqB*%V>m>`|Z$Jawhf zE$p+J4Q4^jQ&NXRvN`8iYW5qaUC78c1C{El>t%g*u28VKmEpSEV5*~GCdWHTV zN%1H~K#3IxTgPQ&?DR--{w3VLHvshx+>?sbivna)1(8sNJ1VW63n;_8Z|d|eimSSb zkaQH`VyNKJ0d(>J^uI&jdiS6GXS98VYJ7n_lj3jG;vaMxFQayt2p*D2Q<@l`Y^jb= zPSW7^c~h=kT;T~ba90Bp{o~gN#B~@)S@5lEdt?hOu_k~r5Jjkd)_Rk!=1&10P!m`+ zy-9B0pey6&a}Oli2u44MpALn(7t+5qmp`n#A2?4OEY|eT11EGb+gnrfd{ca}$8I)W zFWj%|z6eiJ(DRzCWORJ~!5HoB0z>rj9umuJuY1*^T0#>Vdf|I-F6TH#T%P@D&ho#y zxqHE1oMJwtC%)bB1OeZ&hrQ?w@|CP@%Qn9&+g~I;tvYl!EIiu-@Fx5S=xZbDKhv(B z#+n#<#+x;De8tx#CAp6Q?r>(l5WPFY&BLx=5qYVJ=8E5*Bu6TAH+Fur9~SE$w$j|} zD(ik-v22&PqdjP8vPW+gGxcBw-=5V?ylvBdHM+Vz;j$ZgtX$tTayuvf?Z29^xjCYL z&WHUE4}3jZy9E16Z{!qGTjbGbr^@4Qmztam)