diff --git a/common/utils/src/main/resources/error/error-conditions.json b/common/utils/src/main/resources/error/error-conditions.json index 7c9886c749b95..730999085de95 100644 --- a/common/utils/src/main/resources/error/error-conditions.json +++ b/common/utils/src/main/resources/error/error-conditions.json @@ -1339,6 +1339,12 @@ ], "sqlState" : "54001" }, + "FEATURE_NOT_ENABLED" : { + "message" : [ + "The feature is not enabled. Consider setting the config to to enable this capability." + ], + "sqlState" : "56038" + }, "FIELD_ALREADY_EXISTS" : { "message" : [ "Cannot column, because already exists in ." @@ -4495,6 +4501,11 @@ "Table does not support . Please check the current catalog and namespace to make sure the qualified table name is expected, and also check the catalog implementation which is configured by \"spark.sql.catalog\"." ] }, + "TEMPORARY_VIEW_WITH_SCHEMA_BINDING_MODE" : { + "message" : [ + "Temporary views cannot be created with the WITH SCHEMA clause. Recreate the temporary view when the underlying schema changes, or use a persisted view." + ] + }, "TIME_TRAVEL" : { "message" : [ "Time travel on the relation: ." diff --git a/common/utils/src/main/resources/error/error-states.json b/common/utils/src/main/resources/error/error-states.json index 46b57859110ef..791fa8cd887ce 100644 --- a/common/utils/src/main/resources/error/error-states.json +++ b/common/utils/src/main/resources/error/error-states.json @@ -4572,7 +4572,7 @@ "usedBy": ["Spark"] }, "42K0E": { - "description": "An expression is not valid in teh context it is used", + "description": "An expression is not valid in the context it is used", "origin": "Spark", "standard": "N", "usedBy": ["Spark"] diff --git a/docs/sql-migration-guide.md b/docs/sql-migration-guide.md index d95d2893f6d79..15205e9284cda 100644 --- a/docs/sql-migration-guide.md +++ b/docs/sql-migration-guide.md @@ -54,6 +54,7 @@ license: | - Since Spark 4.0, The default value for `spark.sql.legacy.ctePrecedencePolicy` has been changed from `EXCEPTION` to `CORRECTED`. Instead of raising an error, inner CTE definitions take precedence over outer definitions. - Since Spark 4.0, The default value for `spark.sql.legacy.timeParserPolicy` has been changed from `EXCEPTION` to `CORRECTED`. Instead of raising an `INCONSISTENT_BEHAVIOR_CROSS_VERSION` error, `CANNOT_PARSE_TIMESTAMP` will be raised if ANSI mode is enable. `NULL` will be returned if ANSI mode is disabled. See [Datetime Patterns for Formatting and Parsing](sql-ref-datetime-pattern.html). - Since Spark 4.0, A bug falsely allowing `!` instead of `NOT` when `!` is not a prefix operator has been fixed. Clauses such as `expr ! IN (...)`, `expr ! BETWEEN ...`, or `col ! NULL` now raise syntax errors. To restore the previous behavior, set `spark.sql.legacy.bangEqualsNot` to `true`. +- Since Spark 4.0, Views allow control over how they react to underlying query changes. By default views tolerate column type changes in the query and compensate with casts. To restore the previous behavior, allowing up-casts only, set `spark.sql.viewSchemaBindingMode` to `DISABLED`. This disables the feature and also disallows the `WITH SCHEMA` clause. ## Upgrading from Spark SQL 3.5.1 to 3.5.2 diff --git a/docs/sql-ref-ansi-compliance.md b/docs/sql-ref-ansi-compliance.md index 84416ffd5f839..635eb0a26c460 100644 --- a/docs/sql-ref-ansi-compliance.md +++ b/docs/sql-ref-ansi-compliance.md @@ -416,6 +416,7 @@ Below is a list of all the keywords in Spark SQL. |BETWEEN|non-reserved|non-reserved|reserved| |BIGINT|non-reserved|non-reserved|reserved| |BINARY|non-reserved|non-reserved|reserved| +|BINDING|non-reserved|non-reserved|non-reserved| |BOOLEAN|non-reserved|non-reserved|reserved| |BOTH|reserved|non-reserved|reserved| |BUCKET|non-reserved|non-reserved|non-reserved| @@ -445,6 +446,7 @@ Below is a list of all the keywords in Spark SQL. |COMMIT|non-reserved|non-reserved|reserved| |COMPACT|non-reserved|non-reserved|non-reserved| |COMPACTIONS|non-reserved|non-reserved|non-reserved| +|COMPENSATION|non-reserved|non-reserved|non-reserved| |COMPUTE|non-reserved|non-reserved|non-reserved| |CONCATENATE|non-reserved|non-reserved|non-reserved| |CONSTRAINT|reserved|non-reserved|reserved| diff --git a/docs/sql-ref-syntax-ddl-alter-view.md b/docs/sql-ref-syntax-ddl-alter-view.md index d69f24677116d..ca272d27bc7e6 100644 --- a/docs/sql-ref-syntax-ddl-alter-view.md +++ b/docs/sql-ref-syntax-ddl-alter-view.md @@ -109,6 +109,32 @@ Note that `ALTER VIEW` statement does not support `SET SERDE` or `SET SERDEPROPE Specifies the definition of the view. Check [select_statement](sql-ref-syntax-qry-select.html) for details. +#### ALTER View WITH SCHEMA + +Changes the view's schema binding behavior. + +If the view is cached, the command clears cached data of the view and all its dependents that refer to it. View's cache will be lazily filled when the next time the view is accessed. The command leaves view's dependents as uncached. + +This statement is not supported for `TEMPORARY` views. + +#### Syntax +```sql +ALTER VIEW view_identifier WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION } +``` + +#### Parameters +* **view_identifier** + + Specifies a view name, which may be optionally qualified with a database name. + + **Syntax:** `[ database_name. ] view_name` + +* **BINDING** - The view can tolerate only type changes in the underlying schema requiring safe up-casts. +* **COMPENSATION** - The view can tolerate type changes in the underlying schema requiring casts. Runtime casting errors may occur. +* **TYPE EVOLUTION** - The view will adapt to any type changes in the underlying schema. +* **EVOLUTION** - For views defined without a column lists any schema changes are adapted by the view, including, for queries with `SELECT *` dropped or added columns. + If the view is defined with a column list, the clause is interpreted as `TYPE EVOLUTION`. + ### Examples ```sql @@ -196,6 +222,24 @@ DESC TABLE EXTENDED tempdb1.v2; | View Text| select * from tempdb1.v1| | | View Original Text| select * from tempdb1.v1| | +----------------------------+---------------------------+-------+ + +CREATE OR REPLACE VIEW open_orders AS SELECT * FROM orders WHERE status = 'open'; +ALTER VIEW open_orders WITH SCHEMA EVOLUTION; +DESC TABLE EXTENDED open_orders; ++----------------------------+---------------------------+-------+ +| col_name| data_type|comment| ++----------------------------+---------------------------+-------+ +| order_no| int| null| +| order_date| date| null| +| | | | +|# Detailed Table Information| | | +| Database| mydb| | +| Table| open_orders| | +| Type| VIEW| | +| View Text| select * from orders| | +| View Original Text| select * from orders| | +| View Schema Mode | EVOLUTION| | ++----------------------------+---------------------------+-------+ ``` ### Related Statements diff --git a/docs/sql-ref-syntax-ddl-create-view.md b/docs/sql-ref-syntax-ddl-create-view.md index 1a9c1f62728e7..21174f12300e3 100644 --- a/docs/sql-ref-syntax-ddl-create-view.md +++ b/docs/sql-ref-syntax-ddl-create-view.md @@ -61,6 +61,17 @@ CREATE [ OR REPLACE ] [ [ GLOBAL ] TEMPORARY ] VIEW [ IF NOT EXISTS ] view_ident * `[ ( column_name [ COMMENT column_comment ], ... ) ]` to specify column-level comments. * `[ COMMENT view_comment ]` to specify view-level comments. * `[ TBLPROPERTIES ( property_name = property_value [ , ... ] ) ]` to add metadata key-value pairs. + * `[ WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION } ]` to specify how the view reacts to schema changes + + This clause is not supported for `TEMPORARY` views. + + * **BINDING** - The view can tolerate only type changes in the underlying schema requiring safe up-casts. + * **COMPENSATION** - The view can tolerate type changes in the underlying schema requiring casts. Runtime casting errors may occur. + * **TYPE EVOLUTION** - The view will adapt to any type changes in the underlying schema. + * **EVOLUTION** - For views defined without a column lists any schema changes are adapted by the view, including, for queries with `SELECT *` dropped or added columns. + If the view is defined with a column list, the clause is interpreted as `TYPE EVOLUTION`. + + The default is `WITH SCHEMA COMPENSATION`. * **query** A [SELECT](sql-ref-syntax-qry-select.html) statement that constructs the view from base tables or other views. @@ -80,6 +91,10 @@ CREATE GLOBAL TEMPORARY VIEW IF NOT EXISTS subscribed_movies AS SELECT mo.member_id, mb.full_name, mo.movie_title FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id; + +-- Create a view filtering the `orders` table which will adjust to schema changes in `orders`. +CREATE OR REPLACE VIEW open_orders WITH SCHEMA EVOLUTION + AS SELECT * FROM orders WHERE status = 'open'; ``` ### Related Statements diff --git a/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4 b/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4 index 86e16af7ff104..25a06a5b98cf7 100644 --- a/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4 +++ b/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4 @@ -108,6 +108,7 @@ AUTHORIZATION: 'AUTHORIZATION'; BETWEEN: 'BETWEEN'; BIGINT: 'BIGINT'; BINARY: 'BINARY'; +BINDING: 'BINDING'; BOOLEAN: 'BOOLEAN'; BOTH: 'BOTH'; BUCKET: 'BUCKET'; @@ -137,6 +138,7 @@ COMMENT: 'COMMENT'; COMMIT: 'COMMIT'; COMPACT: 'COMPACT'; COMPACTIONS: 'COMPACTIONS'; +COMPENSATION: 'COMPENSATION'; COMPUTE: 'COMPUTE'; CONCATENATE: 'CONCATENATE'; CONSTRAINT: 'CONSTRAINT'; diff --git a/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 b/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 index 249f55fa40ac5..a87ecd02fb3a4 100644 --- a/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 +++ b/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 @@ -156,6 +156,7 @@ statement VIEW (IF errorCapturingNot EXISTS)? identifierReference identifierCommentList? (commentSpec | + schemaBinding | (PARTITIONED ON identifierList) | (TBLPROPERTIES propertyList))* AS query #createView @@ -163,6 +164,7 @@ statement tableIdentifier (LEFT_PAREN colTypeList RIGHT_PAREN)? tableProvider (OPTIONS propertyList)? #createTempViewUsing | ALTER VIEW identifierReference AS? query #alterViewQuery + | ALTER VIEW identifierReference schemaBinding #alterViewSchemaBinding | CREATE (OR REPLACE)? TEMPORARY? FUNCTION (IF errorCapturingNot EXISTS)? identifierReference AS className=stringLit (USING resource (COMMA resource)*)? #createFunction @@ -342,6 +344,10 @@ locationSpec : LOCATION stringLit ; +schemaBinding + : WITH SCHEMA (BINDING | COMPENSATION | EVOLUTION | TYPE EVOLUTION) + ; + commentSpec : COMMENT stringLit ; @@ -1350,6 +1356,7 @@ ansiNonReserved | BIGINT | BINARY | BINARY_HEX + | BINDING | BOOLEAN | BUCKET | BUCKETS @@ -1372,6 +1379,7 @@ ansiNonReserved | COMMIT | COMPACT | COMPACTIONS + | COMPENSATION | COMPUTE | CONCATENATE | COST @@ -1650,6 +1658,7 @@ nonReserved | BIGINT | BINARY | BINARY_HEX + | BINDING | BOOLEAN | BOTH | BUCKET @@ -1679,6 +1688,7 @@ nonReserved | COMMIT | COMPACT | COMPACTIONS + | COMPENSATION | COMPUTE | CONCATENATE | CONSTRAINT diff --git a/sql/api/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala b/sql/api/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala index 752e69f65c913..d07aa6741a140 100644 --- a/sql/api/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala +++ b/sql/api/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala @@ -546,6 +546,12 @@ private[sql] object QueryParsingErrors extends DataTypeErrorsBase { new ParseException(errorClass = "_LEGACY_ERROR_TEMP_0052", ctx) } + def temporaryViewWithSchemaBindingMode(ctx: StatementContext): Throwable = { + new ParseException(errorClass = "UNSUPPORTED_FEATURE.TEMPORARY_VIEW_WITH_SCHEMA_BINDING_MODE", + messageParameters = Map.empty, + ctx) + } + def parameterMarkerNotAllowed(statement: String, origin: Origin): Throwable = { new ParseException( command = origin.sqlText, diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/view.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/view.scala index 66a5052d86f0a..7015ee568290b 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/view.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/view.scala @@ -35,6 +35,54 @@ object EliminateView extends Rule[LogicalPlan] with CastSupport { } } +/** + * ViewBindingMode is used to specify the expected schema binding mode when we want to create or + * replace a view in [[CreateViewStatement]]. + */ +sealed trait ViewSchemaMode + +/** + * SchemaBinding means the view only tolerates minimal changes to the underlying schema. + * It can tolerate extra columns in SELECT * and upcast to more generic types. + */ +object SchemaBinding extends ViewSchemaMode { + override val toString: String = "BINDING" +} + +/** + * SchemaCompensation means the view only tolerates moderate changes to the underlying schema. + * It can tolerate extra columns in SELECT * and explicit casts between view body and view columns. + */ +object SchemaCompensation extends ViewSchemaMode { + override val toString: String = "COMPENSATION" +} + +/** + * SchemaTypeEvolution means the view will adopt changed column types. + * In this mode the view will refresh its metastore data on reference to keep it up to day. + */ +object SchemaTypeEvolution extends ViewSchemaMode { + override val toString: String = "TYPE EVOLUTION" +} + +/** + * SchemaUnsupported means the feature is not enabled. + * This mode is only transient and not persisted + */ +object SchemaUnsupported extends ViewSchemaMode { + override val toString: String = "UNSUPPORTED" +} + +/** + * SchemaEvolution means the view will adopt changed column types and number of columns. + * This is a result of not having a column list and WITH EVOLUTION. + * Without an explicit column list the will also adopt changes to column names. + * In this mode the view will refresh its metastore data on reference to keep it up to day. + */ +object SchemaEvolution extends ViewSchemaMode { + override val toString: String = "EVOLUTION" +} + /** * ViewType is used to specify the expected view type when we want to create or replace a view in * [[CreateViewStatement]]. diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalog.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalog.scala index d17d0a97387d9..96883afcfc5ca 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalog.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalog.scala @@ -35,7 +35,7 @@ import org.apache.spark.internal.Logging import org.apache.spark.sql.catalyst._ import org.apache.spark.sql.catalyst.analysis._ import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder -import org.apache.spark.sql.catalyst.expressions.{Alias, Expression, ExpressionInfo, UpCast} +import org.apache.spark.sql.catalyst.expressions.{Alias, Cast, Expression, ExpressionInfo, NamedExpression, UpCast} import org.apache.spark.sql.catalyst.parser.{CatalystSqlParser, ParseException, ParserInterface} import org.apache.spark.sql.catalyst.plans.logical.{LogicalPlan, Project, SubqueryAlias, View} import org.apache.spark.sql.catalyst.trees.{CurrentOrigin, Origin} @@ -44,7 +44,7 @@ import org.apache.spark.sql.connector.catalog.CatalogManager import org.apache.spark.sql.errors.{QueryCompilationErrors, QueryExecutionErrors} import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.internal.StaticSQLConf.GLOBAL_TEMP_DATABASE -import org.apache.spark.sql.types.StructType +import org.apache.spark.sql.types.{StructField, StructType} import org.apache.spark.sql.util.{CaseInsensitiveStringMap, PartitioningUtils} import org.apache.spark.util.ArrayImplicits._ import org.apache.spark.util.Utils @@ -926,6 +926,27 @@ class SessionCatalog( metadata.schema.fieldNames.exists(_.matches("_c[0-9]+")) } + + private def castColToType( + col: Expression, + toField: StructField, + schemaMode: ViewSchemaMode): NamedExpression = { + val cast = schemaMode match { + /* + ** For schema binding, we cast the column to the expected type using safe cast only. + ** For legacy behavior, we cast the column to the expected type using safe cast only. + ** For schema compensation, we cast the column to the expected type using any cast + * in ansi mode. + ** For schema (type) evolution, we take the column as is. + */ + case SchemaBinding => UpCast(col, toField.dataType) + case SchemaUnsupported => UpCast(col, toField.dataType) + case SchemaCompensation => Cast(col, toField.dataType, ansiEnabled = true) + case SchemaTypeEvolution => col + case other => throw SparkException.internalError("Unexpected ViewSchemaMode") + } + Alias(cast, toField.name)(explicitMetadata = Some(toField.metadata)) + } private def fromCatalogTable(metadata: CatalogTable, isTempView: Boolean): View = { val viewText = metadata.viewText.getOrElse { throw SparkException.internalError("Invalid view without text.") @@ -945,54 +966,59 @@ class SessionCatalog( throw QueryCompilationErrors.invalidViewText(viewText, metadata.qualifiedName) } } - val projectList = if (!isHiveCreatedView(metadata)) { - val viewColumnNames = if (metadata.viewQueryColumnNames.isEmpty) { - // For view created before Spark 2.2.0, the view text is already fully qualified, the plan - // output is the same with the view output. - metadata.schema.fieldNames.toImmutableArraySeq - } else { - assert(metadata.viewQueryColumnNames.length == metadata.schema.length) - metadata.viewQueryColumnNames - } + val schemaMode = metadata.viewSchemaMode + if (schemaMode == SchemaEvolution) { + View(desc = metadata, isTempView = isTempView, child = parsedPlan) + } else { + val projectList = if (!isHiveCreatedView(metadata)) { + val viewColumnNames = if (metadata.viewQueryColumnNames.isEmpty) { + // For view created before Spark 2.2.0, the view text is already fully qualified, the plan + // output is the same with the view output. + metadata.schema.fieldNames.toImmutableArraySeq + } else { + assert(metadata.viewQueryColumnNames.length == metadata.schema.length) + metadata.viewQueryColumnNames + } - // For view queries like `SELECT * FROM t`, the schema of the referenced table/view may - // change after the view has been created. We need to add an extra SELECT to pick the columns - // according to the recorded column names (to get the correct view column ordering and omit - // the extra columns that we don't require), with UpCast (to make sure the type change is - // safe) and Alias (to respect user-specified view column names) according to the view schema - // in the catalog. - // Note that, the column names may have duplication, e.g. `CREATE VIEW v(x, y) AS - // SELECT 1 col, 2 col`. We need to make sure that the matching attributes have the same - // number of duplications, and pick the corresponding attribute by ordinal. - val viewConf = View.effectiveSQLConf(metadata.viewSQLConfigs, isTempView) - val normalizeColName: String => String = if (viewConf.caseSensitiveAnalysis) { - identity + // For view queries like `SELECT * FROM t`, the schema of the referenced table/view may + // change after the view has been created. We need to add an extra SELECT to pick the + // columns according to the recorded column names (to get the correct view column ordering + // and omit the extra columns that we don't require), with UpCast (to make sure the type + // change is safe) and Alias (to respect user-specified view column names) according to the + // view schema in the catalog. + // Note that, the column names may have duplication, e.g. `CREATE VIEW v(x, y) AS + // SELECT 1 col, 2 col`. We need to make sure that the matching attributes have the same + // number of duplications, and pick the corresponding attribute by ordinal. + val viewConf = View.effectiveSQLConf(metadata.viewSQLConfigs, isTempView) + val normalizeColName: String => String = if (viewConf.caseSensitiveAnalysis) { + identity + } else { + _.toLowerCase(Locale.ROOT) + } + val nameToCounts = viewColumnNames.groupBy(normalizeColName).transform((_, v) => v.length) + val nameToCurrentOrdinal = scala.collection.mutable.HashMap.empty[String, Int] + val viewDDL = buildViewDDL(metadata, isTempView) + + viewColumnNames.zip(metadata.schema).map { case (name, field) => + val normalizedName = normalizeColName(name) + val count = nameToCounts(normalizedName) + val ordinal = nameToCurrentOrdinal.getOrElse(normalizedName, 0) + nameToCurrentOrdinal(normalizedName) = ordinal + 1 + val col = GetViewColumnByNameAndOrdinal( + metadata.identifier.toString, name, ordinal, count, viewDDL) + castColToType(col, field, schemaMode) + } } else { - _.toLowerCase(Locale.ROOT) - } - val nameToCounts = viewColumnNames.groupBy(normalizeColName).transform((_, v) => v.length) - val nameToCurrentOrdinal = scala.collection.mutable.HashMap.empty[String, Int] - val viewDDL = buildViewDDL(metadata, isTempView) - - viewColumnNames.zip(metadata.schema).map { case (name, field) => - val normalizedName = normalizeColName(name) - val count = nameToCounts(normalizedName) - val ordinal = nameToCurrentOrdinal.getOrElse(normalizedName, 0) - nameToCurrentOrdinal(normalizedName) = ordinal + 1 - val col = GetViewColumnByNameAndOrdinal( - metadata.identifier.toString, name, ordinal, count, viewDDL) - Alias(UpCast(col, field.dataType), field.name)(explicitMetadata = Some(field.metadata)) - } - } else { - // For view created by hive, the parsed view plan may have different output columns with - // the schema stored in metadata. For example: `CREATE VIEW v AS SELECT 1 FROM t` - // the schema in metadata will be `_c0` while the parsed view plan has column named `1` - metadata.schema.zipWithIndex.map { case (field, index) => - val col = GetColumnByOrdinal(index, field.dataType) - Alias(UpCast(col, field.dataType), field.name)(explicitMetadata = Some(field.metadata)) + // For view created by hive, the parsed view plan may have different output columns with + // the schema stored in metadata. For example: `CREATE VIEW v AS SELECT 1 FROM t` + // the schema in metadata will be `_c0` while the parsed view plan has column named `1` + metadata.schema.zipWithIndex.map { case (field, index) => + val col = GetColumnByOrdinal(index, field.dataType) + castColToType(col, field, schemaMode) + } } + View(desc = metadata, isTempView = isTempView, child = Project(projectList, parsedPlan)) } - View(desc = metadata, isTempView = isTempView, child = Project(projectList, parsedPlan)) } def isGlobalTempViewDB(dbName: String): Boolean = { diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/interface.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/interface.scala index 5147680c7524b..333a84c62b4bf 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/interface.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/catalog/interface.scala @@ -36,7 +36,7 @@ import org.apache.spark.internal.{Logging, MDC} import org.apache.spark.internal.LogKeys._ import org.apache.spark.sql.AnalysisException import org.apache.spark.sql.catalyst.{CurrentUserContext, FunctionIdentifier, InternalRow, SQLConfHelper, TableIdentifier} -import org.apache.spark.sql.catalyst.analysis.{MultiInstanceRelation, Resolver, UnresolvedLeafNode} +import org.apache.spark.sql.catalyst.analysis.{MultiInstanceRelation, Resolver, SchemaBinding, SchemaCompensation, SchemaEvolution, SchemaTypeEvolution, SchemaUnsupported, UnresolvedLeafNode, ViewSchemaMode} import org.apache.spark.sql.catalyst.catalog.CatalogTable.VIEW_STORING_ANALYZED_PLAN import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeMap, AttributeReference, Cast, ExprId, Literal} import org.apache.spark.sql.catalyst.plans.logical._ @@ -401,6 +401,25 @@ case class CatalogTable( ) } + /** + * Return the schema binding mode. Defaults to SchemaCompensation if not a view or an older + * version, unless the viewSchemaBindingMode config is set to DISABLED + */ + def viewSchemaMode: ViewSchemaMode = { + if (SQLConf.get.viewSchemaBindingMode == "DISABLED") { + SchemaUnsupported + } else { + val schemaMode = properties.getOrElse(VIEW_SCHEMA_MODE, SchemaCompensation.toString) + schemaMode match { + case SchemaBinding.toString => SchemaBinding + case SchemaEvolution.toString => SchemaEvolution + case SchemaTypeEvolution.toString => SchemaTypeEvolution + case SchemaCompensation.toString => SchemaCompensation + case other => throw SparkException.internalError("Unexpected ViewSchemaMode") + } + } + } + /** * Return temporary view names the current view was referred. should be empty if the * CatalogTable is not a Temporary View or created by older versions of Spark(before 3.1.0). @@ -491,6 +510,9 @@ case class CatalogTable( if (tableType == CatalogTableType.VIEW) { viewText.foreach(map.put("View Text", _)) viewOriginalText.foreach(map.put("View Original Text", _)) + if (SQLConf.get.viewSchemaBindingMode != "DISABLED") { + map.put("View Schema Mode", viewSchemaMode.toString) + } if (viewCatalogAndNamespace.nonEmpty) { import org.apache.spark.sql.connector.catalog.CatalogV2Implicits._ map.put("View Catalog and Namespace", viewCatalogAndNamespace.quoted) @@ -563,6 +585,8 @@ object CatalogTable { val VIEW_REFERRED_TEMP_FUNCTION_NAMES = VIEW_PREFIX + "referredTempFunctionsNames" val VIEW_REFERRED_TEMP_VARIABLE_NAMES = VIEW_PREFIX + "referredTempVariablesNames" + val VIEW_SCHEMA_MODE = VIEW_PREFIX + "schemaMode" + val VIEW_STORING_ANALYZED_PLAN = VIEW_PREFIX + "storingAnalyzedPlan" val PROP_CLUSTERING_COLUMNS: String = "clusteringColumns" diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala index 326f1e7684b9c..77948f406d9c3 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala @@ -5010,6 +5010,58 @@ class AstBuilder extends DataTypeAstBuilder with SQLConfHelper with Logging { query = plan(ctx.query)) } + /** + * Defined the schema binding mode during CREATE or ALTER VIEW. + * The method also accept a NULL context, in which case it will return the session default + * + * {{{ + * WITH SCHEMA [ BINDING | COMPENSATION | TYPE EVOLUTION | EVOLUTION ] + * }}} + */ + override def visitSchemaBinding(ctx: SchemaBindingContext): ViewSchemaMode = { + if (ctx == null) { + // No schema binding specified, return the session default + if (conf.viewSchemaBindingMode == "COMPENSATION") { + SchemaCompensation + } else { + SchemaUnsupported + } + } else if (conf.viewSchemaBindingMode == "DISABLED") { + // If the feature is disabled, throw an exception + withOrigin(ctx) { + throw new ParseException( + errorClass = "FEATURE_NOT_ENABLED", + messageParameters = Map("featureName" -> "VIEW ... WITH SCHEMA ...", + "configKey" -> "spark.sql.viewSchemaBindingMode", + "configValue" -> "COMPENSATION"), + ctx) + } + } else if (ctx.COMPENSATION != null) { + SchemaCompensation + } else if (ctx.TYPE != null) { + SchemaTypeEvolution + } else if (ctx.EVOLUTION != null) { + SchemaEvolution + } else { + SchemaBinding + } + } + + /** + * Alter the schema binding of a view. This creates a [[AlterViewSchemaBinding]] + * + * For example: + * {{{ + * ALTER VIEW multi_part_name WITH SCHEMA ...; + * }}} + */ + override def visitAlterViewSchemaBinding(ctx: AlterViewSchemaBindingContext): LogicalPlan + = withOrigin(ctx) { + AlterViewSchemaBinding( + createUnresolvedView(ctx.identifierReference, "ALTER VIEW ... WITH SCHEMA ..."), + viewSchemaMode = visitSchemaBinding(ctx.schemaBinding)) + } + /** * Create a [[RenameTable]] command. * diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/v2Commands.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/v2Commands.scala index 43d37801b86de..48d48f0cd9e20 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/v2Commands.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/v2Commands.scala @@ -19,7 +19,7 @@ package org.apache.spark.sql.catalyst.plans.logical import org.apache.spark.{SparkIllegalArgumentException, SparkUnsupportedOperationException} import org.apache.spark.sql.AnalysisException -import org.apache.spark.sql.catalyst.analysis.{AnalysisContext, AssignmentUtils, EliminateSubqueryAliases, FieldName, NamedRelation, PartitionSpec, ResolvedIdentifier, UnresolvedException} +import org.apache.spark.sql.catalyst.analysis.{AnalysisContext, AssignmentUtils, EliminateSubqueryAliases, FieldName, NamedRelation, PartitionSpec, ResolvedIdentifier, UnresolvedException, ViewSchemaMode} import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec import org.apache.spark.sql.catalyst.catalog.FunctionResource import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference, AttributeSet, Expression, MetadataAttribute, NamedExpression, UnaryExpression, Unevaluable, V2ExpressionUtils} @@ -1293,6 +1293,17 @@ case class AlterViewAs( } } +/** + * The logical plan of the ALTER VIEW ... WITH SCHEMA command. + */ +case class AlterViewSchemaBinding( + child: LogicalPlan, + viewSchemaMode: ViewSchemaMode) + extends UnaryCommand { + override protected def withNewChildInternal(newChild: LogicalPlan): LogicalPlan = + copy(child = newChild) +} + /** * The logical plan of the CREATE VIEW ... command. */ @@ -1304,7 +1315,8 @@ case class CreateView( originalText: Option[String], query: LogicalPlan, allowExisting: Boolean, - replace: Boolean) extends BinaryCommand with CTEInChildren { + replace: Boolean, + viewSchemaMode: ViewSchemaMode) extends BinaryCommand with CTEInChildren { override def left: LogicalPlan = child override def right: LogicalPlan = query override protected def withNewChildrenInternal( diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala index 95101f1fd19fd..f84abe270853b 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala @@ -2970,6 +2970,12 @@ private[sql] object QueryCompilationErrors extends QueryErrorsBase with Compilat "dataColumns" -> query.output.map(c => toSQLId(c.name)).mkString(", "))) } + def cannotAlterTempViewWithSchemaBindingError() : Throwable = { + new AnalysisException( + errorClass = "UNSUPPORTED_FEATURE.TEMPORARY_VIEW_WITH_SCHEMA_BINDING_MODE", + messageParameters = Map.empty) + } + def unsupportedCreateOrReplaceViewOnTableError( name: TableIdentifier, replace: Boolean): Throwable = { if (replace) { diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala index e78157d611586..1add1e4f82af8 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala @@ -1700,6 +1700,16 @@ object SQLConf { .booleanConf .createWithDefault(true) + val VIEW_SCHEMA_BINDING_MODE = buildConf("spark.sql.viewSchemaBindingMode") + .doc("Set to DISABLE to disable the WITH SCHEMA clause for view DDL and suppress the line in " + + " DESCRIBE EXTENDED. The default, and only other value, is COMPENSATION. Views without " + + " WITH SCHEMA clause are defaulted to WITH SCHEMA COMPENSATION.") + .version("4.0.0") + .stringConf + .transform(_.toUpperCase(Locale.ROOT)) + .checkValues(Set("COMPENSATION", "DISABLED")) + .createWithDefault("COMPENSATION") + // The output committer class used by data sources. The specified class needs to be a // subclass of org.apache.hadoop.mapreduce.OutputCommitter. val OUTPUT_COMMITTER_CLASS = buildConf("spark.sql.sources.outputCommitterClass") @@ -5504,6 +5514,8 @@ class SQLConf extends Serializable with Logging with SqlApiConf { def groupByAliases: Boolean = getConf(GROUP_BY_ALIASES) + def viewSchemaBindingMode: String = getConf(VIEW_SCHEMA_BINDING_MODE) + def defaultCacheStorageLevel: StorageLevel = StorageLevel.fromString(getConf(DEFAULT_CACHE_STORAGE_LEVEL)) diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalogSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalogSuite.scala index e9a60ff17fc1b..1d6d07c7a9ce1 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalogSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/catalog/SessionCatalogSuite.scala @@ -742,7 +742,7 @@ abstract class SessionCatalogSuite extends AnalysisTest with Eventually { private def getViewPlan(metadata: CatalogTable): LogicalPlan = { import org.apache.spark.sql.catalyst.dsl.expressions._ val projectList = metadata.schema.map { field => - UpCast( + Cast( GetViewColumnByNameAndOrdinal(metadata.identifier.toString, field.name, 0, 1, None), field.dataType).as(field.name) } diff --git a/sql/core/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveSessionCatalog.scala b/sql/core/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveSessionCatalog.scala index 9afbdb011cb8a..169aad2f234d6 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveSessionCatalog.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveSessionCatalog.scala @@ -381,8 +381,11 @@ class ResolveSessionCatalog(val catalogManager: CatalogManager) case AlterViewAs(ResolvedViewIdentifier(ident), originalText, query) => AlterViewAsCommand(ident, originalText, query) + case AlterViewSchemaBinding(ResolvedViewIdentifier(ident), viewSchemaMode) => + AlterViewSchemaBindingCommand(ident, viewSchemaMode) + case CreateView(ResolvedV1Identifier(ident), userSpecifiedColumns, comment, - properties, originalText, child, allowExisting, replace) => + properties, originalText, child, allowExisting, replace, viewSchemaMode) => CreateViewCommand( name = ident, userSpecifiedColumns = userSpecifiedColumns, @@ -392,9 +395,10 @@ class ResolveSessionCatalog(val catalogManager: CatalogManager) plan = child, allowExisting = allowExisting, replace = replace, - viewType = PersistedView) + viewType = PersistedView, + viewSchemaMode = viewSchemaMode) - case CreateView(ResolvedIdentifier(catalog, _), _, _, _, _, _, _, _) => + case CreateView(ResolvedIdentifier(catalog, _), _, _, _, _, _, _, _, _) => throw QueryCompilationErrors.missingCatalogAbilityError(catalog, "views") case ShowViews(ns: ResolvedNamespace, pattern, output) => diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala index c7f5e41b7879d..2caa8c074f643 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala @@ -27,7 +27,7 @@ import org.antlr.v4.runtime.tree.TerminalNode import org.apache.spark.SparkException import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier} -import org.apache.spark.sql.catalyst.analysis.{GlobalTempView, LocalTempView, PersistedView, UnresolvedFunctionName, UnresolvedIdentifier} +import org.apache.spark.sql.catalyst.analysis.{GlobalTempView, LocalTempView, PersistedView, SchemaEvolution, SchemaTypeEvolution, UnresolvedFunctionName, UnresolvedIdentifier} import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.expressions.{Expression, Literal} import org.apache.spark.sql.catalyst.parser._ @@ -508,6 +508,7 @@ class SparkSqlAstBuilder extends AstBuilder { } checkDuplicateClauses(ctx.commentSpec(), "COMMENT", ctx) + checkDuplicateClauses(ctx.schemaBinding(), "WITH SCHEMA", ctx) checkDuplicateClauses(ctx.PARTITIONED, "PARTITIONED ON", ctx) checkDuplicateClauses(ctx.TBLPROPERTIES, "TBLPROPERTIES", ctx) @@ -527,6 +528,10 @@ class SparkSqlAstBuilder extends AstBuilder { operationNotAllowed("TBLPROPERTIES can't coexist with CREATE TEMPORARY VIEW", ctx) } + if (ctx.TEMPORARY != null && ctx.schemaBinding(0) != null) { + throw QueryParsingErrors.temporaryViewWithSchemaBindingMode(ctx) + } + val viewType = if (ctx.TEMPORARY == null) { PersistedView } else if (ctx.GLOBAL != null) { @@ -546,6 +551,13 @@ class SparkSqlAstBuilder extends AstBuilder { val originalText = source(ctx.query) assert(Option(originalText).isDefined, "'originalText' must be provided to create permanent view") + val schemaBinding = visitSchemaBinding(ctx.schemaBinding(0)) + val finalSchemaBinding = + if (schemaBinding == SchemaEvolution && userSpecifiedColumns.nonEmpty) { + SchemaTypeEvolution + } else { + schemaBinding + } CreateView( withIdentClause(ctx.identifierReference(), UnresolvedIdentifier(_)), userSpecifiedColumns, @@ -554,7 +566,8 @@ class SparkSqlAstBuilder extends AstBuilder { Some(originalText), qPlan, ctx.EXISTS != null, - ctx.REPLACE != null) + ctx.REPLACE != null, + finalSchemaBinding) } else { // Disallows 'CREATE TEMPORARY VIEW IF NOT EXISTS' to be consistent with // 'CREATE TEMPORARY TABLE' diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala index cb5e7e7f42d29..e1061a46db7b0 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala @@ -22,10 +22,11 @@ import scala.collection.mutable import org.json4s.JsonAST.{JArray, JString} import org.json4s.jackson.JsonMethods._ +import org.apache.spark.SparkException import org.apache.spark.internal.Logging import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.catalyst.{SQLConfHelper, TableIdentifier} -import org.apache.spark.sql.catalyst.analysis.{AnalysisContext, GlobalTempView, LocalTempView, ViewType} +import org.apache.spark.sql.catalyst.analysis.{AnalysisContext, GlobalTempView, LocalTempView, SchemaEvolution, SchemaUnsupported, ViewSchemaMode, ViewType} import org.apache.spark.sql.catalyst.catalog.{CatalogStorageFormat, CatalogTable, CatalogTableType, TemporaryViewRelation} import org.apache.spark.sql.catalyst.expressions.{Alias, Attribute, SubqueryExpression, VariableReference} import org.apache.spark.sql.catalyst.plans.logical.{AnalysisOnlyCommand, CTEInChildren, CTERelationDef, LogicalPlan, Project, View, WithCTE} @@ -56,6 +57,7 @@ import org.apache.spark.util.ArrayImplicits._ * @param replace if true, and if the view already exists, updates it; if false, and if the view * already exists, throws analysis exception. * @param viewType the expected view type to be created with this command. + * @param viewSchemaMode the tolerance of the view towards schema changes * @param isAnalyzed whether this command is analyzed or not. */ case class CreateViewCommand( @@ -68,6 +70,7 @@ case class CreateViewCommand( allowExisting: Boolean, replace: Boolean, viewType: ViewType, + viewSchemaMode: ViewSchemaMode = SchemaUnsupported, isAnalyzed: Boolean = false, referredTempFunctions: Seq[String] = Seq.empty) extends RunnableCommand with AnalysisOnlyCommand with CTEInChildren { @@ -106,6 +109,10 @@ case class CreateViewCommand( throw QueryCompilationErrors.cannotCreateViewTooManyColumnsError( name, userSpecifiedColumns.map(_._1), analyzedPlan) } + if (viewSchemaMode == SchemaEvolution) { + throw SparkException.internalError( + "View with user column list has viewSchemaMode EVOLUTION") + } } val catalog = sparkSession.sessionState.catalog @@ -203,7 +210,7 @@ case class CreateViewCommand( val aliasedSchema = CharVarcharUtils.getRawSchema( aliasPlan(session, analyzedPlan).schema, session.sessionState.conf) val newProperties = generateViewProperties( - properties, session, analyzedPlan, aliasedSchema.fieldNames) + properties, session, analyzedPlan.schema.fieldNames, aliasedSchema.fieldNames, viewSchemaMode) CatalogTable( identifier = name, @@ -301,7 +308,11 @@ case class AlterViewAsCommand( CommandUtils.uncacheTableOrView(session, viewIdent) val newProperties = generateViewProperties( - viewMeta.properties, session, analyzedPlan, analyzedPlan.schema.fieldNames) + viewMeta.properties, + session, + analyzedPlan.schema.fieldNames, // The query output column names + analyzedPlan.schema.fieldNames, // Will match the view schema names + viewMeta.viewSchemaMode) val newSchema = CharVarcharUtils.getRawSchema(analyzedPlan.schema) val updatedViewMeta = viewMeta.copy( @@ -318,6 +329,50 @@ case class AlterViewAsCommand( } } +/** + * Alter a view with given schema binding. If the view name contains database prefix, this command + * will alter a permanent view matching the given name, or throw an exception if view not exist. + * Else, this command will try to alter a temporary view first, if view not exist, try permanent + * view next, if still not exist, throw an exception. + * + * @param name the name of this view. + * @param viewSchemaMode The new schema binding mode. + */ +case class AlterViewSchemaBindingCommand(name: TableIdentifier, viewSchemaMode: ViewSchemaMode) + extends LeafRunnableCommand { + + import ViewHelper._ + + override def run(session: SparkSession): Seq[Row] = { + val isTemporary = session.sessionState.catalog.isTempView(name) + if (isTemporary) { + throw QueryCompilationErrors.cannotAlterTempViewWithSchemaBindingError() + } + alterPermanentView(session, viewSchemaMode) + Seq.empty[Row] + } + + private def alterPermanentView(session: SparkSession, viewSchemaMode: ViewSchemaMode): Unit = { + val viewMeta = session.sessionState.catalog.getTableMetadata(name) + + val viewIdent = viewMeta.identifier + + logDebug(s"Try to uncache ${viewIdent.quotedString} before replacing.") + CommandUtils.uncacheTableOrView(session, viewIdent) + + val newProperties = generateViewProperties( + viewMeta.properties, + session, + viewMeta.viewQueryColumnNames.toArray, + viewMeta.schema.fieldNames, + viewSchemaMode) + + val updatedViewMeta = viewMeta.copy(properties = newProperties) + + session.sessionState.catalog.alterTable(updatedViewMeta) + } +} + /** * A command for users to get views in the given database. * If a databaseName is not given, the current database will be used. @@ -437,6 +492,20 @@ object ViewHelper extends SQLConfHelper with Logging { } } + /** + * Convert the viewSchemaMode to `properties`. + * If the mode UNSUPPORTED do not store anything for backward compatibility. + */ + private def viewSchemaModeToProps(viewSchemaMode: ViewSchemaMode): Map[String, String] = { + if (viewSchemaMode == SchemaUnsupported) { + Map.empty + } else { + val props = new mutable.HashMap[String, String] + props.put(VIEW_SCHEMA_MODE, viewSchemaMode.toString) + props.toMap + } + } + /** * Convert the temporary object names to `properties`. */ @@ -486,13 +555,12 @@ object ViewHelper extends SQLConfHelper with Logging { def generateViewProperties( properties: Map[String, String], session: SparkSession, - analyzedPlan: LogicalPlan, + queryOutput: Array[String], fieldNames: Array[String], + viewSchemaMode: ViewSchemaMode, tempViewNames: Seq[Seq[String]] = Seq.empty, tempFunctionNames: Seq[String] = Seq.empty, tempVariableNames: Seq[Seq[String]] = Seq.empty): Map[String, String] = { - // for createViewCommand queryOutput may be different from fieldNames - val queryOutput = analyzedPlan.schema.fieldNames val conf = session.sessionState.conf @@ -507,7 +575,8 @@ object ViewHelper extends SQLConfHelper with Logging { manager.currentCatalog.name, manager.currentNamespace.toImmutableArraySeq) ++ sqlConfigsToProps(conf) ++ generateQueryColumnNames(queryOutput.toImmutableArraySeq) ++ - referredTempNamesToProps(tempViewNames, tempFunctionNames, tempVariableNames) + referredTempNamesToProps(tempViewNames, tempFunctionNames, tempVariableNames) ++ + viewSchemaModeToProps(viewSchemaMode) } /** @@ -719,8 +788,8 @@ object ViewHelper extends SQLConfHelper with Logging { // TBLPROPERTIES is not allowed for temporary view, so we don't use it for // generating temporary view properties val newProperties = generateViewProperties( - Map.empty, session, analyzedPlan, viewSchema.fieldNames, tempViews, - tempFunctions, tempVariables) + Map.empty, session, analyzedPlan.schema.fieldNames, viewSchema.fieldNames, SchemaUnsupported, + tempViews, tempFunctions, tempVariables) CatalogTable( identifier = viewName, diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/rules.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/rules.scala index fbb2ecb70d395..2f39a1962d2c0 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/rules.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/rules.scala @@ -30,11 +30,12 @@ import org.apache.spark.sql.catalyst.util.TypeUtils._ import org.apache.spark.sql.connector.expressions.{FieldReference, RewritableTransform} import org.apache.spark.sql.errors.QueryCompilationErrors import org.apache.spark.sql.execution.command.DDLUtils +import org.apache.spark.sql.execution.command.ViewHelper.generateViewProperties import org.apache.spark.sql.execution.datasources.{CreateTable => CreateTableV1} import org.apache.spark.sql.execution.datasources.v2.FileDataSourceV2 import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.sources.InsertableRelation -import org.apache.spark.sql.types.StructType +import org.apache.spark.sql.types.{StructField, StructType} import org.apache.spark.sql.util.PartitioningUtils.normalizePartitionSpec import org.apache.spark.sql.util.SchemaUtils import org.apache.spark.util.ArrayImplicits._ @@ -620,3 +621,65 @@ object CollationCheck extends (LogicalPlan => Unit) { private def isCollationExpression(expression: Expression): Boolean = expression.isInstanceOf[Collation] || expression.isInstanceOf[Collate] } + + +/** + * This rule checks for references to views WITH SCHEMA [TYPE] EVOLUTION and synchronizes the + * catalog if evolution was detected. + * It does so by walking the resolved plan looking for View operators for persisted views. + */ +object ViewSyncSchemaToMetaStore extends (LogicalPlan => Unit) { + def apply(plan: LogicalPlan): Unit = { + plan.foreach { + case View(metaData, false, viewQuery) + if (metaData.viewSchemaMode == SchemaTypeEvolution || + metaData.viewSchemaMode == SchemaEvolution) => + val viewSchemaMode = metaData.viewSchemaMode + val viewFields = metaData.schema.fields + val viewQueryFields = viewQuery.schema.fields + val session = SparkSession.getActiveSession.get + val redoSignature = + viewSchemaMode == SchemaEvolution && viewFields.length != viewQueryFields.length + val fieldNames = viewQuery.schema.fieldNames + + val redo = redoSignature || viewFields.zipWithIndex.exists { case (field, index) => + val planField = viewQueryFields(index) + (field.dataType != planField.dataType || + field.nullable != planField.nullable || + (viewSchemaMode == SchemaEvolution && ( + field.getComment() != planField.getComment() || + field.name != planField.name))) + } + + if (redo) { + val newProperties = if (viewSchemaMode == SchemaEvolution) { + generateViewProperties( + metaData.properties, + session, + fieldNames, + fieldNames, + metaData.viewSchemaMode) + } else { + metaData.properties + } + val newSchema = if (viewSchemaMode == SchemaTypeEvolution) { + val newFields = viewQuery.schema.map { + case StructField(name, dataType, nullable, _) => + StructField(name, dataType, nullable, + viewFields.find(_.name == name).get.metadata) + } + StructType(newFields) + } else { + viewQuery.schema + } + SchemaUtils.checkColumnNameDuplication(fieldNames.toImmutableArraySeq, + session.sessionState.conf.resolver) + val updatedViewMeta = metaData.copy( + properties = newProperties, + schema = newSchema) + session.sessionState.catalog.alterTable(updatedViewMeta) + } + case _ => // OK + } + } +} diff --git a/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala b/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala index 63c0d116ba3a4..4660970814e21 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala @@ -224,6 +224,7 @@ abstract class BaseSessionStateBuilder( TableCapabilityCheck +: CommandCheck +: CollationCheck +: + ViewSyncSchemaToMetaStore +: customCheckRules } diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/array.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/array.sql.out index 2998803698c35..57108c4582f45 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/array.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/array.sql.out @@ -8,7 +8,7 @@ create temporary view data as select * from values CreateViewCommand `data`, select * from values ("one", array(11, 12, 13), array(array(111, 112, 113), array(121, 122, 123))), ("two", array(21, 22, 23), array(array(211, 212, 213), array(221, 222, 223))) - as data(a, b, c), false, false, LocalTempView, true + as data(a, b, c), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x, c#x] +- SubqueryAlias data +- LocalRelation [a#x, b#x, c#x] @@ -97,7 +97,7 @@ CreateViewCommand `primitive_arrays`, select * from values ( float_array, date_array, timestamp_array -), false, false, LocalTempView, true +), false, false, LocalTempView, UNSUPPORTED, true +- Project [boolean_array#x, tinyint_array#x, smallint_array#x, int_array#x, bigint_array#x, decimal_array#x, double_array#x, float_array#x, date_array#x, timestamp_array#x] +- SubqueryAlias primitive_arrays +- LocalRelation [boolean_array#x, tinyint_array#x, smallint_array#x, int_array#x, bigint_array#x, decimal_array#x, double_array#x, float_array#x, date_array#x, timestamp_array#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/date.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/date.sql.out index 7acfc9277679e..fd927b99c6456 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/date.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/date.sql.out @@ -2,7 +2,7 @@ -- !query create temporary view date_view as select '2011-11-11' date_str, '1' int_str -- !query analysis -CreateViewCommand `date_view`, select '2011-11-11' date_str, '1' int_str, false, false, LocalTempView, true +CreateViewCommand `date_view`, select '2011-11-11' date_str, '1' int_str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 AS date_str#x, 1 AS int_str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-disabled.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-disabled.sql.out index d73b72eca3e21..f7b0e3370f9f4 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-disabled.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-disabled.sql.out @@ -276,7 +276,7 @@ Project [hello AS hello#x] -- !query CREATE TEMPORARY VIEW v(c1 COMMENT "hello") AS SELECT 1 -- !query analysis -CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, true +CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation @@ -304,7 +304,7 @@ Project [hello AS hello#x] -- !query CREATE TEMPORARY VIEW v(c1 COMMENT 'hello') AS SELECT 1 -- !query analysis -CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, true +CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-enabled.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-enabled.sql.out index c37acb7879c4a..f241f9bd6867c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-enabled.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/double-quoted-identifiers-enabled.sql.out @@ -380,7 +380,7 @@ Project [hello AS hello#x] -- !query CREATE TEMPORARY VIEW v(c1 COMMENT 'hello') AS SELECT 1 -- !query analysis -CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, true +CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation @@ -409,7 +409,7 @@ CreateNamespace false CREATE TEMPORARY VIEW "myview"("c1") AS WITH "v"("a") AS (SELECT 1) SELECT "a" FROM "v" -- !query analysis -CreateViewCommand `myview`, [(c1,None)], WITH "v"("a") AS (SELECT 1) SELECT "a" FROM "v", false, false, LocalTempView, true +CreateViewCommand `myview`, [(c1,None)], WITH "v"("a") AS (SELECT 1) SELECT "a" FROM "v", false, false, LocalTempView, UNSUPPORTED, true +- WithCTE :- CTERelationDef xxxx, false : +- SubqueryAlias v diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/higher-order-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/higher-order-functions.sql.out index a772a2c92e672..c06d1e5534aed 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/higher-order-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/higher-order-functions.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nested`, values (1, array(32, 97), array(array(12, 99), array(123, 42), array(1))), (2, array(77, -76), array(array(6, 96, 65), array(-1, -2))), (3, array(12), array(array(17))) - as t(x, ys, zs), false, true, LocalTempView, true + as t(x, ys, zs), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [x#x, ys#x, zs#x] @@ -278,7 +278,7 @@ create or replace temporary view nested as values CreateViewCommand `nested`, values (1, map(1, 1, 2, 2, 3, 3)), (2, map(4, 4, 5, 5, 6, 6)) - as t(x, ys), false, true, LocalTempView, true + as t(x, ys), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [x#x, ys#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/interval.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/interval.sql.out index 03183e6c40005..12756576ded9b 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/interval.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/interval.sql.out @@ -1605,7 +1605,7 @@ Project [cast(cast(4 12:12:12 as timestamp) + INTERVAL '4 22:12' DAY TO MINUTE a -- !query create temporary view interval_view as select '1' str -- !query analysis -CreateViewCommand `interval_view`, select '1' str, false, false, LocalTempView, true +CreateViewCommand `interval_view`, select '1' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/string-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/string-functions.sql.out index c36dec0b105d7..c9b451187356a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/string-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/string-functions.sql.out @@ -1435,7 +1435,7 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException -- !query CREATE TEMPORARY VIEW fmtTable(fmtField) AS SELECT * FROM VALUES ('invalidFormat') -- !query analysis -CreateViewCommand `fmtTable`, [(fmtField,None)], SELECT * FROM VALUES ('invalidFormat'), false, false, LocalTempView, true +CreateViewCommand `fmtTable`, [(fmtField,None)], SELECT * FROM VALUES ('invalidFormat'), false, false, LocalTempView, UNSUPPORTED, true +- Project [col1#x] +- LocalRelation [col1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/timestamp.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/timestamp.sql.out index ecfc286b79435..bf34490d657e3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/timestamp.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ansi/timestamp.sql.out @@ -236,7 +236,7 @@ create temporary view ttf1 as select * from values CreateViewCommand `ttf1`, select * from values (1, 2), (2, 3) - as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, true + as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, UNSUPPORTED, true +- Project [current_date#x, current_timestamp#x] +- SubqueryAlias ttf1 +- LocalRelation [current_date#x, current_timestamp#x] @@ -263,7 +263,7 @@ create temporary view ttf2 as select * from values CreateViewCommand `ttf2`, select * from values (1, 2), (2, 3) - as ttf2(a, b), false, false, LocalTempView, true + as ttf2(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias ttf2 +- LocalRelation [a#x, b#x] @@ -575,7 +575,7 @@ select null - timestamp'2011-11-11 11:11:11' -- !query create temporary view ts_view as select '2011-11-11 11:11:11' str -- !query analysis -CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, true +CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 11:11:11 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/array.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/array.sql.out index 459c5613e9196..fb331089d7545 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/array.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/array.sql.out @@ -8,7 +8,7 @@ create temporary view data as select * from values CreateViewCommand `data`, select * from values ("one", array(11, 12, 13), array(array(111, 112, 113), array(121, 122, 123))), ("two", array(21, 22, 23), array(array(211, 212, 213), array(221, 222, 223))) - as data(a, b, c), false, false, LocalTempView, true + as data(a, b, c), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x, c#x] +- SubqueryAlias data +- LocalRelation [a#x, b#x, c#x] @@ -97,7 +97,7 @@ CreateViewCommand `primitive_arrays`, select * from values ( float_array, date_array, timestamp_array -), false, false, LocalTempView, true +), false, false, LocalTempView, UNSUPPORTED, true +- Project [boolean_array#x, tinyint_array#x, smallint_array#x, int_array#x, bigint_array#x, decimal_array#x, double_array#x, float_array#x, date_array#x, timestamp_array#x] +- SubqueryAlias primitive_arrays +- LocalRelation [boolean_array#x, tinyint_array#x, smallint_array#x, int_array#x, bigint_array#x, decimal_array#x, double_array#x, float_array#x, date_array#x, timestamp_array#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/bitwise.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/bitwise.sql.out index 8220aa4bd25bd..b8958f4a331a6 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/bitwise.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/bitwise.sql.out @@ -182,7 +182,7 @@ CREATE OR REPLACE TEMPORARY VIEW bitwise_test AS SELECT * FROM VALUES CreateViewCommand `bitwise_test`, SELECT * FROM VALUES (1, 1, 1, 1L), (2, 3, 4, null), - (7, 7, 7, 3L) AS bitwise_test(b1, b2, b3, b4), false, true, LocalTempView, true + (7, 7, 7, 3L) AS bitwise_test(b1, b2, b3, b4), false, true, LocalTempView, UNSUPPORTED, true +- Project [b1#x, b2#x, b3#x, b4#xL] +- SubqueryAlias bitwise_test +- LocalRelation [b1#x, b2#x, b3#x, b4#xL] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/change-column.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/change-column.sql.out index 07edfa5e95e1b..645057b85c000 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/change-column.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/change-column.sql.out @@ -204,7 +204,7 @@ DescribeTableCommand `spark_catalog`.`default`.`test_change`, false, [col_name#x -- !query CREATE TEMPORARY VIEW temp_view(a, b) AS SELECT 1, "one" -- !query analysis -CreateViewCommand `temp_view`, [(a,None), (b,None)], SELECT 1, "one", false, false, LocalTempView, true +CreateViewCommand `temp_view`, [(a,None), (b,None)], SELECT 1, "one", false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x, one AS one#x] +- OneRowRelation @@ -233,7 +233,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE GLOBAL TEMPORARY VIEW global_temp_view(a, b) AS SELECT 1, "one" -- !query analysis -CreateViewCommand `global_temp_view`, [(a,None), (b,None)], SELECT 1, "one", false, false, GlobalTempView, true +CreateViewCommand `global_temp_view`, [(a,None), (b,None)], SELECT 1, "one", false, false, GlobalTempView, UNSUPPORTED, true +- Project [1 AS 1#x, one AS one#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/charvarchar.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/charvarchar.sql.out index 02f09e0831d25..6ba9522262709 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/charvarchar.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/charvarchar.sql.out @@ -348,7 +348,7 @@ CreateViewCommand `str_view`, select c, v from values ('NetE', 'Spar'), ('NetEa ', 'Spark '), ('NetEas ', 'Spark'), - ('NetEase', 'Spark-') t(c, v), false, false, LocalTempView, true + ('NetEase', 'Spark-') t(c, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [c#x, v#x] +- SubqueryAlias t +- LocalRelation [c#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-aggregate.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-aggregate.sql.out index 39ab8aa835c48..b3bfec1fe3a8e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-aggregate.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-aggregate.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW v1 AS VALUES (1, 1, 1), (2, 2, 1) AS t(a, b, k) -- !query analysis -CreateViewCommand `v1`, VALUES (1, 1, 1), (2, 2, 1) AS t(a, b, k), false, false, LocalTempView, true +CreateViewCommand `v1`, VALUES (1, 1, 1), (2, 2, 1) AS t(a, b, k), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [a#x, b#x, k#x] @@ -10,7 +10,7 @@ CreateViewCommand `v1`, VALUES (1, 1, 1), (2, 2, 1) AS t(a, b, k), false, false, -- !query CREATE TEMPORARY VIEW v2 AS VALUES (1, 1, 1), (2, 2, 1) AS t(x, y, all) -- !query analysis -CreateViewCommand `v2`, VALUES (1, 1, 1), (2, 2, 1) AS t(x, y, all), false, false, LocalTempView, true +CreateViewCommand `v2`, VALUES (1, 1, 1), (2, 2, 1) AS t(x, y, all), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [x#x, y#x, all#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-sort.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-sort.sql.out index e4f6a5935dc66..e6fc6b3cf0c8a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-sort.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/column-resolution-sort.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW v1 AS VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, k) -- !query analysis -CreateViewCommand `v1`, VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, k), false, false, LocalTempView, true +CreateViewCommand `v1`, VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, k), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [a#x, b#x, k#x] @@ -10,7 +10,7 @@ CreateViewCommand `v1`, VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, k), false, false, -- !query CREATE TEMPORARY VIEW v2 AS VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, all) -- !query analysis -CreateViewCommand `v2`, VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, all), false, false, LocalTempView, true +CreateViewCommand `v2`, VALUES (1, 2, 2), (2, 1, 1) AS t(a, b, all), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [a#x, b#x, all#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-negative.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-negative.sql.out index 7348313c970c4..f16d42fac7226 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-negative.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-negative.sql.out @@ -387,7 +387,7 @@ SetCatalogAndNamespace -- !query CREATE VIEW v1 AS SELECT * FROM t1 -- !query analysis -CreateViewCommand `spark_catalog`.`mydb1`.`v1`, SELECT * FROM t1, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`mydb1`.`v1`, SELECT * FROM t1, false, false, PersistedView, COMPENSATION, true +- Project [i1#x] +- SubqueryAlias spark_catalog.mydb1.t1 +- Relation spark_catalog.mydb1.t1[i1#x] parquet @@ -435,7 +435,7 @@ SetCatalogAndNamespace -- !query CREATE TEMP VIEW v2 AS SELECT * FROM t1 -- !query analysis -CreateViewCommand `v2`, SELECT * FROM t1, false, false, LocalTempView, true +CreateViewCommand `v2`, SELECT * FROM t1, false, false, LocalTempView, UNSUPPORTED, true +- Project [i1#x] +- SubqueryAlias spark_catalog.mydb2.t1 +- Relation spark_catalog.mydb2.t1[i1#x] parquet diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-views.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-views.sql.out index ea852537903ee..96f6469a8fcb5 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-views.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/columnresolution-views.sql.out @@ -2,7 +2,7 @@ -- !query CREATE OR REPLACE TEMPORARY VIEW view1 AS SELECT 2 AS i1 -- !query analysis -CreateViewCommand `view1`, SELECT 2 AS i1, false, true, LocalTempView, true +CreateViewCommand `view1`, SELECT 2 AS i1, false, true, LocalTempView, UNSUPPORTED, true +- Project [2 AS i1#x] +- OneRowRelation @@ -84,7 +84,7 @@ DropTempViewCommand view1 -- !query CREATE OR REPLACE GLOBAL TEMPORARY VIEW view1 as SELECT 1 as i1 -- !query analysis -CreateViewCommand `view1`, SELECT 1 as i1, false, true, GlobalTempView, true +CreateViewCommand `view1`, SELECT 1 as i1, false, true, GlobalTempView, UNSUPPORTED, true +- Project [1 AS i1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/count.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/count.sql.out index acfe447d8bf4e..732b714615792 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/count.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/count.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (1, 1), (null, 2), (1, null), (null, null) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/cross-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/cross-join.sql.out index 6a1fec839af2b..818093ab4ca66 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/cross-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/cross-join.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nt1`, select * from values ("one", 1), ("two", 2), ("three", 3) - as nt1(k, v1), false, false, LocalTempView, true + as nt1(k, v1), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- LocalRelation [k#x, v1#x] @@ -27,7 +27,7 @@ CreateViewCommand `nt2`, select * from values ("one", 1), ("two", 22), ("one", 5) - as nt2(k, v2), false, false, LocalTempView, true + as nt2(k, v2), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v2#x] +- SubqueryAlias nt2 +- LocalRelation [k#x, v2#x] @@ -142,7 +142,7 @@ Project [key#x, key#x] -- !query create temporary view A(a, va) as select * from nt1 -- !query analysis -CreateViewCommand `A`, [(a,None), (va,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `A`, [(a,None), (va,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) @@ -155,7 +155,7 @@ CreateViewCommand `A`, [(a,None), (va,None)], select * from nt1, false, false, L -- !query create temporary view B(b, vb) as select * from nt1 -- !query analysis -CreateViewCommand `B`, [(b,None), (vb,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `B`, [(b,None), (vb,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) @@ -168,7 +168,7 @@ CreateViewCommand `B`, [(b,None), (vb,None)], select * from nt1, false, false, L -- !query create temporary view C(c, vc) as select * from nt1 -- !query analysis -CreateViewCommand `C`, [(c,None), (vc,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `C`, [(c,None), (vc,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) @@ -181,7 +181,7 @@ CreateViewCommand `C`, [(c,None), (vc,None)], select * from nt1, false, false, L -- !query create temporary view D(d, vd) as select * from nt1 -- !query analysis -CreateViewCommand `D`, [(d,None), (vd,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `D`, [(d,None), (vd,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/csv-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/csv-functions.sql.out index d12644b907123..4149f5f09947c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/csv-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/csv-functions.sql.out @@ -173,7 +173,7 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException -- !query CREATE TEMPORARY VIEW csvTable(csvField, a) AS SELECT * FROM VALUES ('1,abc', 'a') -- !query analysis -CreateViewCommand `csvTable`, [(csvField,None), (a,None)], SELECT * FROM VALUES ('1,abc', 'a'), false, false, LocalTempView, true +CreateViewCommand `csvTable`, [(csvField,None), (a,None)], SELECT * FROM VALUES ('1,abc', 'a'), false, false, LocalTempView, UNSUPPORTED, true +- Project [col1#x, col2#x] +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/cte-command.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/cte-command.sql.out index 4aac75ec45a93..0b539267e720f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/cte-command.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/cte-command.sql.out @@ -24,7 +24,7 @@ Project [col#x] -- !query CREATE TEMPORARY VIEW cte_view AS WITH s AS (SELECT 42 AS col) SELECT * FROM s -- !query analysis -CreateViewCommand `cte_view`, WITH s AS (SELECT 42 AS col) SELECT * FROM s, false, false, LocalTempView, true +CreateViewCommand `cte_view`, WITH s AS (SELECT 42 AS col) SELECT * FROM s, false, false, LocalTempView, UNSUPPORTED, true +- WithCTE :- CTERelationDef xxxx, false : +- SubqueryAlias s diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/cte.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/cte.sql.out index 1d9d812875c44..155308ee0d7ea 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/cte.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/cte.sql.out @@ -2,7 +2,7 @@ -- !query create temporary view t as select * from values 0, 1, 2 as t(id) -- !query analysis -CreateViewCommand `t`, select * from values 0, 1, 2 as t(id), false, false, LocalTempView, true +CreateViewCommand `t`, select * from values 0, 1, 2 as t(id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias t +- LocalRelation [id#x] @@ -11,7 +11,7 @@ CreateViewCommand `t`, select * from values 0, 1, 2 as t(id), false, false, Loca -- !query create temporary view t2 as select * from values 0, 1 as t(id) -- !query analysis -CreateViewCommand `t2`, select * from values 0, 1 as t(id), false, false, LocalTempView, true +CreateViewCommand `t2`, select * from values 0, 1 as t(id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias t +- LocalRelation [id#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/date.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/date.sql.out index 3d20b9641f99d..48137e06467e8 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/date.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/date.sql.out @@ -2,7 +2,7 @@ -- !query create temporary view date_view as select '2011-11-11' date_str, '1' int_str -- !query analysis -CreateViewCommand `date_view`, select '2011-11-11' date_str, '1' int_str, false, false, LocalTempView, true +CreateViewCommand `date_view`, select '2011-11-11' date_str, '1' int_str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 AS date_str#x, 1 AS int_str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out index bc33537b3a8e5..7c5f1260b6487 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting-legacy.sql.out @@ -16,7 +16,7 @@ CreateViewCommand `v`, select col from values (timestamp '1996-04-01 00:33:33.123Australia/Darwin'), (timestamp '2018-11-17 13:33:33.123Z'), (timestamp '2020-01-01 01:33:33.123Asia/Shanghai'), - (timestamp '2100-01-01 01:33:33.123America/Los_Angeles') t(col), false, false, LocalTempView, true + (timestamp '2100-01-01 01:33:33.123America/Los_Angeles') t(col), false, false, LocalTempView, UNSUPPORTED, true +- Project [col#x] +- SubqueryAlias t +- LocalRelation [col#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out index bc33537b3a8e5..7c5f1260b6487 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-formatting.sql.out @@ -16,7 +16,7 @@ CreateViewCommand `v`, select col from values (timestamp '1996-04-01 00:33:33.123Australia/Darwin'), (timestamp '2018-11-17 13:33:33.123Z'), (timestamp '2020-01-01 01:33:33.123Asia/Shanghai'), - (timestamp '2100-01-01 01:33:33.123America/Los_Angeles') t(col), false, false, LocalTempView, true + (timestamp '2100-01-01 01:33:33.123America/Los_Angeles') t(col), false, false, LocalTempView, UNSUPPORTED, true +- Project [col#x] +- SubqueryAlias t +- LocalRelation [col#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-legacy.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-legacy.sql.out index 12a15cc9b8967..1e49f4df8267a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-legacy.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/datetime-legacy.sql.out @@ -2,7 +2,7 @@ -- !query create temporary view date_view as select '2011-11-11' date_str, '1' int_str -- !query analysis -CreateViewCommand `date_view`, select '2011-11-11' date_str, '1' int_str, false, false, LocalTempView, true +CreateViewCommand `date_view`, select '2011-11-11' date_str, '1' int_str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 AS date_str#x, 1 AS int_str#x] +- OneRowRelation @@ -1267,7 +1267,7 @@ create temporary view ttf1 as select * from values CreateViewCommand `ttf1`, select * from values (1, 2), (2, 3) - as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, true + as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, UNSUPPORTED, true +- Project [current_date#x, current_timestamp#x] +- SubqueryAlias ttf1 +- LocalRelation [current_date#x, current_timestamp#x] @@ -1294,7 +1294,7 @@ create temporary view ttf2 as select * from values CreateViewCommand `ttf2`, select * from values (1, 2), (2, 3) - as ttf2(a, b), false, false, LocalTempView, true + as ttf2(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias ttf2 +- LocalRelation [a#x, b#x] @@ -1642,7 +1642,7 @@ select null - timestamp'2011-11-11 11:11:11' -- !query create temporary view ts_view as select '2011-11-11 11:11:11' str -- !query analysis -CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, true +CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 11:11:11 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/decimalArithmeticOperations.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/decimalArithmeticOperations.sql.out index 5e6b27bc84411..4a2199033f819 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/decimalArithmeticOperations.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/decimalArithmeticOperations.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1.0 as a, 0.0 as b -- !query analysis -CreateViewCommand `t`, SELECT 1.0 as a, 0.0 as b, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1.0 as a, 0.0 as b, false, false, LocalTempView, UNSUPPORTED, true +- Project [1.0 AS a#x, 0.0 AS b#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/describe.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/describe.sql.out index b9fe5c1d74c1d..ff0935bfd03ec 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/describe.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/describe.sql.out @@ -12,7 +12,7 @@ CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false -- !query CREATE TEMPORARY VIEW temp_v AS SELECT * FROM t -- !query analysis -CreateViewCommand `temp_v`, SELECT * FROM t, false, false, LocalTempView, true +CreateViewCommand `temp_v`, SELECT * FROM t, false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x, c#x, d#x] +- SubqueryAlias spark_catalog.default.t +- Relation spark_catalog.default.t[a#x,b#x,c#x,d#x] parquet @@ -32,7 +32,7 @@ CreateTempViewUsing [tableIdent:`temp_Data_Source_View` replace:false provider:o -- !query CREATE VIEW v AS SELECT * FROM t -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x, c#x, d#x] +- SubqueryAlias spark_catalog.default.t +- Relation spark_catalog.default.t[a#x,b#x,c#x,d#x] parquet diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/double-quoted-identifiers.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/double-quoted-identifiers.sql.out index d73b72eca3e21..f7b0e3370f9f4 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/double-quoted-identifiers.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/double-quoted-identifiers.sql.out @@ -276,7 +276,7 @@ Project [hello AS hello#x] -- !query CREATE TEMPORARY VIEW v(c1 COMMENT "hello") AS SELECT 1 -- !query analysis -CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, true +CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation @@ -304,7 +304,7 @@ Project [hello AS hello#x] -- !query CREATE TEMPORARY VIEW v(c1 COMMENT 'hello') AS SELECT 1 -- !query analysis -CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, true +CreateViewCommand `v`, [(c1,Some(hello))], SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/except-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/except-all.sql.out index d16fc0beaf5da..3972cde51bb72 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/except-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/except-all.sql.out @@ -4,7 +4,7 @@ CREATE TEMPORARY VIEW tab1 AS SELECT * FROM VALUES (0), (1), (2), (2), (2), (2), (3), (null), (null) AS tab1(c1) -- !query analysis CreateViewCommand `tab1`, SELECT * FROM VALUES - (0), (1), (2), (2), (2), (2), (3), (null), (null) AS tab1(c1), false, false, LocalTempView, true + (0), (1), (2), (2), (2), (2), (3), (null), (null) AS tab1(c1), false, false, LocalTempView, UNSUPPORTED, true +- Project [c1#x] +- SubqueryAlias tab1 +- LocalRelation [c1#x] @@ -15,7 +15,7 @@ CREATE TEMPORARY VIEW tab2 AS SELECT * FROM VALUES (1), (2), (2), (3), (5), (5), (null) AS tab2(c1) -- !query analysis CreateViewCommand `tab2`, SELECT * FROM VALUES - (1), (2), (2), (3), (5), (5), (null) AS tab2(c1), false, false, LocalTempView, true + (1), (2), (2), (3), (5), (5), (null) AS tab2(c1), false, false, LocalTempView, UNSUPPORTED, true +- Project [c1#x] +- SubqueryAlias tab2 +- LocalRelation [c1#x] @@ -36,7 +36,7 @@ CreateViewCommand `tab3`, SELECT * FROM VALUES (1, 3), (2, 3), (2, 2) - AS tab3(k, v), false, false, LocalTempView, true + AS tab3(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab3 +- LocalRelation [k#x, v#x] @@ -57,7 +57,7 @@ CreateViewCommand `tab4`, SELECT * FROM VALUES (2, 2), (2, 2), (2, 20) - AS tab4(k, v), false, false, LocalTempView, true + AS tab4(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab4 +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/except.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/except.sql.out index 6244a8bed5609..9828956ab843d 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/except.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/except.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `t1`, select * from values ("two", 2), ("three", 3), ("one", NULL) - as t1(k, v), false, false, LocalTempView, true + as t1(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias t1 +- LocalRelation [k#x, v#x] @@ -33,7 +33,7 @@ CreateViewCommand `t2`, select * from values ("one", 5), ("one", NULL), (NULL, 5) - as t2(k, v), false, false, LocalTempView, true + as t2(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias t2 +- LocalRelation [k#x, v#x] @@ -250,7 +250,7 @@ Except false -- !query CREATE OR REPLACE TEMPORARY VIEW t3 AS VALUES (decimal(1)) tbl(v) -- !query analysis -CreateViewCommand `t3`, VALUES (decimal(1)) tbl(v), false, true, LocalTempView, true +CreateViewCommand `t3`, VALUES (decimal(1)) tbl(v), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl +- LocalRelation [v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/execute-immediate.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/execute-immediate.sql.out index 1597a29a4d6c4..78bf1ccb1678c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/execute-immediate.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/execute-immediate.sql.out @@ -18,7 +18,7 @@ CreateViewCommand `tbl_view`, SELECT * FROM VALUES (50, 'name5', named_struct('f1', 5, 's2', named_struct('f2', 505, 'f3', 'e'))), (60, 'name6', named_struct('f1', 6, 's2', named_struct('f2', 606, 'f3', 'f'))), (70, 'name7', named_struct('f1', 7, 's2', named_struct('f2', 707, 'f3', 'g'))) -AS tbl_view(id, name, data), false, false, LocalTempView, true +AS tbl_view(id, name, data), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, name#x, data#x] +- SubqueryAlias tbl_view +- LocalRelation [id#x, name#x, data#x] @@ -54,7 +54,7 @@ SetCommand (spark.sql.ansi.enabled,Some(true)) -- !query EXECUTE IMMEDIATE 'CREATE TEMPORARY VIEW IDENTIFIER(:tblName) AS SELECT id, name FROM tbl_view' USING 'tbl_view_tmp' as tblName -- !query analysis -CreateViewCommand `tbl_view_tmp`, SELECT id, name FROM tbl_view, false, false, LocalTempView, true +CreateViewCommand `tbl_view_tmp`, SELECT id, name FROM tbl_view, false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, name#x] +- SubqueryAlias tbl_view +- View (`tbl_view`, [id#x, name#x, data#x]) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/explain-aqe.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/explain-aqe.sql.out index 26f40c1011140..3aea86b232cba 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/explain-aqe.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/explain-aqe.sql.out @@ -162,7 +162,7 @@ EXPLAIN FORMATTED CREATE VIEW explain_view AS SELECT key, val FROM explain_temp1 -- !query analysis -ExplainCommand 'CreateView SELECT key, val FROM explain_temp1, false, false, FormattedMode +ExplainCommand 'CreateView SELECT key, val FROM explain_temp1, false, false, COMPENSATION, FormattedMode -- !query diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/explain.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/explain.sql.out index 26f40c1011140..3aea86b232cba 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/explain.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/explain.sql.out @@ -162,7 +162,7 @@ EXPLAIN FORMATTED CREATE VIEW explain_view AS SELECT key, val FROM explain_temp1 -- !query analysis -ExplainCommand 'CreateView SELECT key, val FROM explain_temp1, false, false, FormattedMode +ExplainCommand 'CreateView SELECT key, val FROM explain_temp1, false, false, COMPENSATION, FormattedMode -- !query diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/extract.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/extract.sql.out index 886d1f8616c77..c42f2db3f0f9f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/extract.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/extract.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS select '2011-05-06 07:08:09.1234567' as c, to_timestamp_ntz('2011-05-06 07:08:09.1234567') as ntz, interval 10 year 20 month as i, interval 30 day 40 hour 50 minute 6.7890 second as j -- !query analysis -CreateViewCommand `t`, select '2011-05-06 07:08:09.1234567' as c, to_timestamp_ntz('2011-05-06 07:08:09.1234567') as ntz, interval 10 year 20 month as i, interval 30 day 40 hour 50 minute 6.7890 second as j, false, false, LocalTempView, true +CreateViewCommand `t`, select '2011-05-06 07:08:09.1234567' as c, to_timestamp_ntz('2011-05-06 07:08:09.1234567') as ntz, interval 10 year 20 month as i, interval 30 day 40 hour 50 minute 6.7890 second as j, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-05-06 07:08:09.1234567 AS c#x, to_timestamp_ntz(2011-05-06 07:08:09.1234567, None, TimestampNTZType, Some(America/Los_Angeles), false) AS ntz#x, INTERVAL '11-8' YEAR TO MONTH AS i#x, INTERVAL '31 16:50:06.789' DAY TO SECOND AS j#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-analytics.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-analytics.sql.out index b692c5c374632..cdb6372bec099 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-analytics.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-analytics.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] @@ -75,7 +75,7 @@ AS courseSales(course, year, earnings) -- !query analysis CreateViewCommand `courseSales`, SELECT * FROM VALUES ("dotNET", 2012, 10000), ("Java", 2012, 20000), ("dotNET", 2012, 5000), ("dotNET", 2013, 48000), ("Java", 2013, 30000) -AS courseSales(course, year, earnings), false, true, LocalTempView, true +AS courseSales(course, year, earnings), false, true, LocalTempView, UNSUPPORTED, true +- Project [course#x, year#x, earnings#x] +- SubqueryAlias courseSales +- LocalRelation [course#x, year#x, earnings#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-duckdb.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-duckdb.sql.out index 13649989b4127..5f1cbea709891 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-duckdb.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-duckdb.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `integers`, select * from values (0, 2), (1, 3), (1, NULL) - as integers(g, i), false, false, LocalTempView, true + as integers(g, i), false, false, LocalTempView, UNSUPPORTED, true +- Project [g#x, i#x] +- SubqueryAlias integers +- LocalRelation [g#x, i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-mosha.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-mosha.sql.out index 76ef52ecd8b63..da3f3de3fb448 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-mosha.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all-mosha.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `stuff`, select * from values (42, 9.75, 'hello world', '1970-08-07', '13.37', array(1,20,300)), (1337, 1.2345, 'oh no', '2000-01-01', '42.0', array(4000,50000,600000)), (42, 13.37, 'test', '1970-08-07', '1234567890', array(7000000,80000000,900000000)) - as stuff(i, f, s, t, d, a), false, false, LocalTempView, true + as stuff(i, f, s, t, d, a), false, false, LocalTempView, UNSUPPORTED, true +- Project [i#x, f#x, s#x, t#x, d#x, a#x] +- SubqueryAlias stuff +- LocalRelation [i#x, f#x, s#x, t#x, d#x, a#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all.sql.out index 79de44697b5f6..c2c77db6c3b1c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-all.sql.out @@ -18,7 +18,7 @@ CreateViewCommand `data`, select * from values ("China", "Shanghai", "Shanghaiese", 5, 15.0), ("Korea", "Seoul", "Hyukjin", 6, 16.0), ("UK", "London", "Sean", 7, 17.0) - as data(country, city, name, id, power), false, false, LocalTempView, true + as data(country, city, name, id, power), false, false, LocalTempView, UNSUPPORTED, true +- Project [country#x, city#x, name#x, id#x, power#x] +- SubqueryAlias data +- LocalRelation [country#x, city#x, name#x, id#x, power#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-filter.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-filter.sql.out index 1e06a01dc07ea..94d39111b29ed 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-filter.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-filter.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2), (null, 1), (3, null), (null, null) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] @@ -35,7 +35,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, true, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -58,7 +58,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, true, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, true, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -75,7 +75,7 @@ CreateViewCommand `FilterExpressionTestData`, SELECT * FROM VALUES (1, 2, "asd"), (3, 4, "fgh"), (5, 6, "jkl") -AS FilterExpressionTestData(num1, num2, str), false, true, LocalTempView, true +AS FilterExpressionTestData(num1, num2, str), false, true, LocalTempView, UNSUPPORTED, true +- Project [num1#x, num2#x, str#x] +- SubqueryAlias FilterExpressionTestData +- LocalRelation [num1#x, num2#x, str#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-ordinal.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-ordinal.sql.out index 6aa32ed3a8866..904b35559ced8 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-ordinal.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by-ordinal.sql.out @@ -16,7 +16,7 @@ CreateViewCommand `data`, select * from values (2, 2), (3, 1), (3, 2) - as data(a, b), false, false, LocalTempView, true + as data(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias data +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by.sql.out index 665d2ba915737..46b40e4515260 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/group-by.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/group-by.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2), (null, 1), (3, null), (null, null) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] @@ -273,7 +273,7 @@ CREATE OR REPLACE TEMPORARY VIEW testDataHasSameNameWithAlias AS SELECT * FROM V (1, 1, 3), (1, 2, 1) AS testDataHasSameNameWithAlias(k, a, v) -- !query analysis CreateViewCommand `testDataHasSameNameWithAlias`, SELECT * FROM VALUES -(1, 1, 3), (1, 2, 1) AS testDataHasSameNameWithAlias(k, a, v), false, true, LocalTempView, true +(1, 1, 3), (1, 2, 1) AS testDataHasSameNameWithAlias(k, a, v), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, a#x, v#x] +- SubqueryAlias testDataHasSameNameWithAlias +- LocalRelation [k#x, a#x, v#x] @@ -486,7 +486,7 @@ CreateViewCommand `test_agg`, SELECT * FROM VALUES (2, true), (3, false), (3, null), (4, null), (4, null), - (5, null), (5, true), (5, false) AS test_agg(k, v), false, true, LocalTempView, true + (5, null), (5, true), (5, false) AS test_agg(k, v), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias test_agg +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/grouping_set.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/grouping_set.sql.out index b82275b5e3129..b73ee16c8bdef 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/grouping_set.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/grouping_set.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `grouping`, SELECT * FROM VALUES ("1", "2", "3", 1), ("4", "5", "6", 1), ("7", "8", "9", 1) - as grouping(a, b, c, d), false, false, LocalTempView, true + as grouping(a, b, c, d), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x, c#x, d#x] +- SubqueryAlias grouping +- LocalRelation [a#x, b#x, c#x, d#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/having.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/having.sql.out index 889ca3d244ccd..78cf1223da50d 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/having.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/having.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `hav`, select * from values ("two", 2), ("three", 3), ("one", 5) - as hav(k, v), false, false, LocalTempView, true + as hav(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias hav +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/higher-order-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/higher-order-functions.sql.out index c82ba7d062016..1281b19eb2f86 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/higher-order-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/higher-order-functions.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nested`, values (1, array(32, 97), array(array(12, 99), array(123, 42), array(1))), (2, array(77, -76), array(array(6, 96, 65), array(-1, -2))), (3, array(12), array(array(17))) - as t(x, ys, zs), false, true, LocalTempView, true + as t(x, ys, zs), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [x#x, ys#x, zs#x] @@ -278,7 +278,7 @@ create or replace temporary view nested as values CreateViewCommand `nested`, values (1, map(1, 1, 2, 2, 3, 3)), (2, map(4, 4, 5, 5, 6, 6)) - as t(x, ys), false, true, LocalTempView, true + as t(x, ys), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [x#x, ys#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/identifier-clause.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/identifier-clause.sql.out index e083b0b097aff..7389c7be87af7 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/identifier-clause.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/identifier-clause.sql.out @@ -394,7 +394,7 @@ DropTable true, false -- !query CREATE OR REPLACE VIEW IDENTIFIER('v')(c1) AS VALUES(1) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`v`, [(c1,None)], VALUES(1), false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`v`, [(c1,None)], VALUES(1), false, true, PersistedView, COMPENSATION, true +- LocalRelation [col1#x] @@ -424,7 +424,7 @@ DropTableCommand `spark_catalog`.`default`.`v`, false, true, false -- !query CREATE TEMPORARY VIEW IDENTIFIER('v')(c1) AS VALUES(1) -- !query analysis -CreateViewCommand `v`, [(c1,None)], VALUES(1), false, false, LocalTempView, true +CreateViewCommand `v`, [(c1,None)], VALUES(1), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-all.sql.out index dc36fc2be1a27..cf9c2e12cc72e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-all.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `ilike_all_table`, SELECT * FROM (VALUES ('gOOgle', '%oo%'), ('facebook', '%OO%'), ('liNkedin', '%In')) - as t1(company, pat), false, true, LocalTempView, true + as t1(company, pat), false, true, LocalTempView, UNSUPPORTED, true +- Project [company#x, pat#x] +- SubqueryAlias t1 +- Project [col1#x AS company#x, col2#x AS pat#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-any.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-any.sql.out index ac25d786cda57..e20000f1463d1 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-any.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/ilike-any.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `ilike_any_table`, SELECT * FROM (VALUES ('Google', '%Oo%'), ('FaceBook', '%oO%'), ('linkedIn', '%IN')) - as t1(company, pat), false, true, LocalTempView, true + as t1(company, pat), false, true, LocalTempView, UNSUPPORTED, true +- Project [company#x, pat#x] +- SubqueryAlias t1 +- Project [col1#x AS company#x, col2#x AS pat#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/inner-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/inner-join.sql.out index 698b1056f73ee..ae123fa61e3d1 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/inner-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/inner-join.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t1 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -11,7 +11,7 @@ CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW t2 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -20,7 +20,7 @@ CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW t3 AS SELECT * FROM VALUES (1), (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t3`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t3`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -29,7 +29,7 @@ CreateViewCommand `t3`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, fal -- !query CREATE TEMPORARY VIEW t4 AS SELECT * FROM VALUES (1), (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t4`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t4`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -43,7 +43,7 @@ SELECT a, 'b' AS tag FROM t2 -- !query analysis CreateViewCommand `ta`, SELECT a, 'a' AS tag FROM t1 UNION ALL -SELECT a, 'b' AS tag FROM t2, false, false, LocalTempView, true +SELECT a, 'b' AS tag FROM t2, false, false, LocalTempView, UNSUPPORTED, true +- Union false, false :- Project [a#x, a AS tag#x] : +- SubqueryAlias t1 @@ -69,7 +69,7 @@ SELECT a, 'b' AS tag FROM t4 -- !query analysis CreateViewCommand `tb`, SELECT a, 'a' AS tag FROM t3 UNION ALL -SELECT a, 'b' AS tag FROM t4, false, false, LocalTempView, true +SELECT a, 'b' AS tag FROM t4, false, false, LocalTempView, UNSUPPORTED, true +- Union false, false :- Project [a#x, a AS tag#x] : +- SubqueryAlias t3 diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/intersect-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/intersect-all.sql.out index b4d791c2772b2..69b4001ff3481 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/intersect-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/intersect-all.sql.out @@ -18,7 +18,7 @@ CreateViewCommand `tab1`, SELECT * FROM VALUES (2, 3), (null, null), (null, null) - AS tab1(k, v), false, false, LocalTempView, true + AS tab1(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab1 +- LocalRelation [k#x, v#x] @@ -41,7 +41,7 @@ CreateViewCommand `tab2`, SELECT * FROM VALUES (3, 4), (null, null), (null, null) - AS tab2(k, v), false, false, LocalTempView, true + AS tab2(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab2 +- LocalRelation [k#x, v#x] @@ -593,7 +593,7 @@ SetCommand (spark.sql.legacy.setopsPrecedence.enabled,Some(false)) -- !query CREATE OR REPLACE TEMPORARY VIEW tab3 AS VALUES (decimal(1)), (decimal(2)) tbl3(v) -- !query analysis -CreateViewCommand `tab3`, VALUES (decimal(1)), (decimal(2)) tbl3(v), false, true, LocalTempView, true +CreateViewCommand `tab3`, VALUES (decimal(1)), (decimal(2)) tbl3(v), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl3 +- LocalRelation [v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/interval.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/interval.sql.out index 783255db337a1..290e55052931d 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/interval.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/interval.sql.out @@ -1605,7 +1605,7 @@ Project [cast(cast(4 12:12:12 as timestamp) + INTERVAL '4 22:12' DAY TO MINUTE a -- !query create temporary view interval_view as select '1' str -- !query analysis -CreateViewCommand `interval_view`, select '1' str, false, false, LocalTempView, true +CreateViewCommand `interval_view`, select '1' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/join-empty-relation.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/join-empty-relation.sql.out index a4fae64952048..850255a065b3e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/join-empty-relation.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/join-empty-relation.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t1 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -11,7 +11,7 @@ CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW t2 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -20,7 +20,7 @@ CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW empty_table as SELECT a FROM t2 WHERE false -- !query analysis -CreateViewCommand `empty_table`, SELECT a FROM t2 WHERE false, false, false, LocalTempView, true +CreateViewCommand `empty_table`, SELECT a FROM t2 WHERE false, false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- Filter false +- SubqueryAlias t2 diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/join-lateral.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/join-lateral.sql.out index 8e7b3046d6011..e81ee769f57d6 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/join-lateral.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/join-lateral.sql.out @@ -2,28 +2,28 @@ -- !query CREATE VIEW t1(c1, c2) AS VALUES (0, 1), (1, 2) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t1`, [(c1,None), (c2,None)], VALUES (0, 1), (1, 2), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t1`, [(c1,None), (c2,None)], VALUES (0, 1), (1, 2), false, false, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] -- !query CREATE VIEW t2(c1, c2) AS VALUES (0, 2), (0, 3) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t2`, [(c1,None), (c2,None)], VALUES (0, 2), (0, 3), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t2`, [(c1,None), (c2,None)], VALUES (0, 2), (0, 3), false, false, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] -- !query CREATE VIEW t3(c1, c2) AS VALUES (0, ARRAY(0, 1)), (1, ARRAY(2)), (2, ARRAY()), (null, ARRAY(4)) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t3`, [(c1,None), (c2,None)], VALUES (0, ARRAY(0, 1)), (1, ARRAY(2)), (2, ARRAY()), (null, ARRAY(4)), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t3`, [(c1,None), (c2,None)], VALUES (0, ARRAY(0, 1)), (1, ARRAY(2)), (2, ARRAY()), (null, ARRAY(4)), false, false, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] -- !query CREATE VIEW t4(c1, c2) AS VALUES (0, 1), (0, 2), (1, 1), (1, 3) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t4`, [(c1,None), (c2,None)], VALUES (0, 1), (0, 2), (1, 1), (1, 3), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t4`, [(c1,None), (c2,None)], VALUES (0, 1), (0, 2), (1, 1), (1, 3), false, false, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] @@ -2507,7 +2507,7 @@ CREATE OR REPLACE TEMPORARY VIEW array_struct(id, arr) AS VALUES CreateViewCommand `array_struct`, [(id,None), (arr,None)], VALUES (1, ARRAY(STRUCT(1, 'a'), STRUCT(2, 'b'))), (2, ARRAY()), - (3, ARRAY(STRUCT(3, 'c'))), false, true, LocalTempView, true + (3, ARRAY(STRUCT(3, 'c'))), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -2714,7 +2714,7 @@ CreateViewCommand `json_table`, [(key,None), (jstring,None)], VALUES ('3', '{"f1": 3, "f4": "4", "f3": "3", "f2": 2, "f5": 5.01}'), ('4', cast(null as string)), ('5', '{"f1": null, "f5": ""}'), - ('6', '[invalid JSON string]'), false, true, LocalTempView, true + ('6', '[invalid JSON string]'), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/json-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/json-functions.sql.out index 48b3bb07ef37b..0d7c6b2056231 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/json-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/json-functions.sql.out @@ -241,7 +241,7 @@ Project [c0#x, c1#x, c2#x, c3#x] -- !query CREATE TEMPORARY VIEW jsonTable(jsonField, a) AS SELECT * FROM VALUES ('{"a": 1, "b": 2}', 'a') -- !query analysis -CreateViewCommand `jsonTable`, [(jsonField,None), (a,None)], SELECT * FROM VALUES ('{"a": 1, "b": 2}', 'a'), false, false, LocalTempView, true +CreateViewCommand `jsonTable`, [(jsonField,None), (a,None)], SELECT * FROM VALUES ('{"a": 1, "b": 2}', 'a'), false, false, LocalTempView, UNSUPPORTED, true +- Project [col1#x, col2#x] +- LocalRelation [col1#x, col2#x] @@ -449,7 +449,7 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException -- !query CREATE TEMPORARY VIEW jsonTable(jsonField, a) AS SELECT * FROM VALUES ('{"a": 1, "b": 2}', 'a') -- !query analysis -CreateViewCommand `jsonTable`, [(jsonField,None), (a,None)], SELECT * FROM VALUES ('{"a": 1, "b": 2}', 'a'), false, false, LocalTempView, true +CreateViewCommand `jsonTable`, [(jsonField,None), (a,None)], SELECT * FROM VALUES ('{"a": 1, "b": 2}', 'a'), false, false, LocalTempView, UNSUPPORTED, true +- Project [col1#x, col2#x] +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/like-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/like-all.sql.out index cc5967a3fc59c..dab3e27be69aa 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/like-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/like-all.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `like_all_table`, SELECT * FROM (VALUES ('google', '%oo%'), ('facebook', '%oo%'), ('linkedin', '%in')) - as t1(company, pat), false, true, LocalTempView, true + as t1(company, pat), false, true, LocalTempView, UNSUPPORTED, true +- Project [company#x, pat#x] +- SubqueryAlias t1 +- Project [col1#x AS company#x, col2#x AS pat#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/like-any.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/like-any.sql.out index 91adb137e3679..e075fe6c0a69c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/like-any.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/like-any.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `like_any_table`, SELECT * FROM (VALUES ('google', '%oo%'), ('facebook', '%oo%'), ('linkedin', '%in')) - as t1(company, pat), false, true, LocalTempView, true + as t1(company, pat), false, true, LocalTempView, UNSUPPORTED, true +- Project [company#x, pat#x] +- SubqueryAlias t1 +- Project [col1#x AS company#x, col2#x AS pat#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/linear-regression.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/linear-regression.sql.out index fa7d0d331eda3..5f130cd1d422c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/linear-regression.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/linear-regression.sql.out @@ -6,7 +6,7 @@ AS testRegression(k, y, x) -- !query analysis CreateViewCommand `testRegression`, SELECT * FROM VALUES (1, 10, null), (2, 10, 11), (2, 20, 22), (2, 25, null), (2, 30, 35) -AS testRegression(k, y, x), false, true, LocalTempView, true +AS testRegression(k, y, x), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, y#x, x#x] +- SubqueryAlias testRegression +- LocalRelation [k#x, y#x, x#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/misc-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/misc-functions.sql.out index 539a348584217..e30bdf12f4a36 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/misc-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/misc-functions.sql.out @@ -92,7 +92,7 @@ Project [assert_true(false, custom error message) AS assert_true(false, custom e -- !query CREATE TEMPORARY VIEW tbl_misc AS SELECT * FROM (VALUES (1), (8), (2)) AS T(v) -- !query analysis -CreateViewCommand `tbl_misc`, SELECT * FROM (VALUES (1), (8), (2)) AS T(v), false, false, LocalTempView, true +CreateViewCommand `tbl_misc`, SELECT * FROM (VALUES (1), (8), (2)) AS T(v), false, false, LocalTempView, UNSUPPORTED, true +- Project [v#x] +- SubqueryAlias T +- Project [col1#x AS v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/mode.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/mode.sql.out index 2508b9b5fdd98..d6ecbc72a7178 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/mode.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/mode.sql.out @@ -38,7 +38,7 @@ CreateViewCommand `basic_pays`, SELECT * FROM VALUES ('Pamela Castillo','SCM',11303), ('Larry Bott','SCM',11798), ('Barry Jones','SCM',10586) -AS basic_pays(employee_name, department, salary), false, true, LocalTempView, true +AS basic_pays(employee_name, department, salary), false, true, LocalTempView, UNSUPPORTED, true +- Project [employee_name#x, department#x, salary#x] +- SubqueryAlias basic_pays +- LocalRelation [employee_name#x, department#x, salary#x] @@ -471,7 +471,7 @@ CreateViewCommand `intervals`, SELECT * FROM VALUES (2, INTERVAL '30' MONTH, INTERVAL '30' SECOND, INTERVAL '30' MINUTE), (3, INTERVAL '60' MONTH, INTERVAL '60' SECOND, INTERVAL '60' MINUTE), (4, null, null, null) -AS intervals(k, dt, ym, dt2), false, true, LocalTempView, true +AS intervals(k, dt, ym, dt2), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, dt#x, ym#x, dt2#x] +- SubqueryAlias intervals +- LocalRelation [k#x, dt#x, ym#x, dt2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/named-function-arguments.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/named-function-arguments.sql.out index 766b7df754d1b..72d9b454036d6 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/named-function-arguments.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/named-function-arguments.sql.out @@ -58,7 +58,7 @@ CreateViewCommand `t2`, select * from values ('val1e', 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ('val1f', 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ('val1b', null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -192,7 +192,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE OR REPLACE TEMPORARY VIEW v AS SELECT id FROM range(0, 8) -- !query analysis -CreateViewCommand `v`, SELECT id FROM range(0, 8), false, true, LocalTempView, true +CreateViewCommand `v`, SELECT id FROM range(0, 8), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#xL] +- Range (0, 8, step=1) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/natural-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/natural-join.sql.out index f8da5c5196357..857c574af3d23 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/natural-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/natural-join.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nt1`, select * from values ("one", 1), ("two", 2), ("three", 3) - as nt1(k, v1), false, false, LocalTempView, true + as nt1(k, v1), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- LocalRelation [k#x, v1#x] @@ -27,7 +27,7 @@ CreateViewCommand `nt2`, select * from values ("one", 1), ("two", 22), ("one", 5) - as nt2(k, v2), false, false, LocalTempView, true + as nt2(k, v2), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v2#x] +- SubqueryAlias nt2 +- LocalRelation [k#x, v2#x] @@ -44,7 +44,7 @@ CreateViewCommand `nt3`, select * from values ("one", 4), ("two", 5), ("one", 6) - as nt3(k, v3), false, false, LocalTempView, true + as nt3(k, v3), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v3#x] +- SubqueryAlias nt3 +- LocalRelation [k#x, v3#x] @@ -61,7 +61,7 @@ CreateViewCommand `nt4`, select * from values ("one", 7), ("two", 8), ("one", 9) - as nt4(k, v4), false, false, LocalTempView, true + as nt4(k, v4), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v4#x] +- SubqueryAlias nt4 +- LocalRelation [k#x, v4#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-all.sql.out index 729fea0cf858b..b1447307d8549 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-all.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `data`, select * from values (0, 2), (1, 3), (1, NULL) - as data(g, i), false, false, LocalTempView, true + as data(g, i), false, false, LocalTempView, UNSUPPORTED, true +- Project [g#x, i#x] +- SubqueryAlias data +- LocalRelation [g#x, i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-ordinal.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-ordinal.sql.out index 4bf21d02f9a88..f1f189517dea7 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-ordinal.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/order-by-ordinal.sql.out @@ -16,7 +16,7 @@ CreateViewCommand `data`, select * from values (2, 2), (3, 1), (3, 2) - as data(a, b), false, false, LocalTempView, true + as data(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias data +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/outer-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/outer-join.sql.out index 32088db51ac6c..1ee1cb1fb8fcd 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/outer-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/outer-join.sql.out @@ -6,7 +6,7 @@ as t1(int_col1) -- !query analysis CreateViewCommand `t1`, SELECT * FROM VALUES (-234), (145), (367), (975), (298) -as t1(int_col1), false, true, LocalTempView, true +as t1(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t1 +- LocalRelation [int_col1#x] @@ -19,7 +19,7 @@ as t2(int_col0, int_col1) -- !query analysis CreateViewCommand `t2`, SELECT * FROM VALUES (-769, -244), (-800, -409), (940, 86), (-507, 304), (-367, 158) -as t2(int_col0, int_col1), false, true, LocalTempView, true +as t2(int_col0, int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col0#x, int_col1#x] +- SubqueryAlias t2 +- LocalRelation [int_col0#x, int_col1#x] @@ -57,7 +57,7 @@ Filter (sum(coalesce(int_col1, int_col0))#xL > cast((coalesce(int_col1, int_col0 -- !query CREATE OR REPLACE TEMPORARY VIEW t1 AS SELECT * FROM VALUES (97) as t1(int_col1) -- !query analysis -CreateViewCommand `t1`, SELECT * FROM VALUES (97) as t1(int_col1), false, true, LocalTempView, true +CreateViewCommand `t1`, SELECT * FROM VALUES (97) as t1(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t1 +- LocalRelation [int_col1#x] @@ -66,7 +66,7 @@ CreateViewCommand `t1`, SELECT * FROM VALUES (97) as t1(int_col1), false, true, -- !query CREATE OR REPLACE TEMPORARY VIEW t2 AS SELECT * FROM VALUES (0) as t2(int_col1) -- !query analysis -CreateViewCommand `t2`, SELECT * FROM VALUES (0) as t2(int_col1), false, true, LocalTempView, true +CreateViewCommand `t2`, SELECT * FROM VALUES (0) as t2(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t2 +- LocalRelation [int_col1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out index e763ed48b1364..4a31cff8c7d0f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out @@ -6,7 +6,7 @@ AS aggr(k, v) -- !query analysis CreateViewCommand `aggr`, SELECT * FROM VALUES (0, 0), (0, 10), (0, 20), (0, 30), (0, 40), (1, 10), (1, 20), (2, 10), (2, 20), (2, 25), (2, 30), (3, 60), (4, null) -AS aggr(k, v), false, true, LocalTempView, true +AS aggr(k, v), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias aggr +- LocalRelation [k#x, v#x] @@ -51,7 +51,7 @@ CreateViewCommand `basic_pays`, SELECT * FROM VALUES ('Pamela Castillo','SCM',11303), ('Larry Bott','SCM',11798), ('Barry Jones','SCM',10586) -AS basic_pays(employee_name, department, salary), false, true, LocalTempView, true +AS basic_pays(employee_name, department, salary), false, true, LocalTempView, UNSUPPORTED, true +- Project [employee_name#x, department#x, salary#x] +- SubqueryAlias basic_pays +- LocalRelation [employee_name#x, department#x, salary#x] @@ -885,7 +885,7 @@ CreateViewCommand `intervals`, SELECT * FROM VALUES (2, INTERVAL '30' MONTH, INTERVAL '30' SECOND, INTERVAL '30' MINUTE), (3, INTERVAL '60' MONTH, INTERVAL '60' SECOND, INTERVAL '60' MINUTE), (4, null, null, null) -AS intervals(k, dt, ym, dt2), false, true, LocalTempView, true +AS intervals(k, dt, ym, dt2), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, dt#x, ym#x, dt2#x] +- SubqueryAlias intervals +- LocalRelation [k#x, dt#x, ym#x, dt2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/pivot.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/pivot.sql.out index c0a02dc29d606..93f2e240a0191 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/pivot.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/pivot.sql.out @@ -14,7 +14,7 @@ CreateViewCommand `courseSales`, select * from values ("dotNET", 2012, 5000), ("dotNET", 2013, 48000), ("Java", 2013, 30000) - as courseSales(course, year, earnings), false, false, LocalTempView, true + as courseSales(course, year, earnings), false, false, LocalTempView, UNSUPPORTED, true +- Project [course#x, year#x, earnings#x] +- SubqueryAlias courseSales +- LocalRelation [course#x, year#x, earnings#x] @@ -29,7 +29,7 @@ create temporary view years as select * from values CreateViewCommand `years`, select * from values (2012, 1), (2013, 2) - as years(y, s), false, false, LocalTempView, true + as years(y, s), false, false, LocalTempView, UNSUPPORTED, true +- Project [y#x, s#x] +- SubqueryAlias years +- LocalRelation [y#x, s#x] @@ -44,7 +44,7 @@ create temporary view yearsWithComplexTypes as select * from values CreateViewCommand `yearsWithComplexTypes`, select * from values (2012, array(1, 1), map('1', 1), struct(1, 'a')), (2013, array(2, 2), map('2', 2), struct(2, 'b')) - as yearsWithComplexTypes(y, a, m, s), false, false, LocalTempView, true + as yearsWithComplexTypes(y, a, m, s), false, false, LocalTempView, UNSUPPORTED, true +- Project [y#x, a#x, m#x, s#x] +- SubqueryAlias yearsWithComplexTypes +- LocalRelation [y#x, a#x, m#x, s#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part1.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part1.sql.out index e575901ddf494..0577d73ea6a3c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part1.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part1.sql.out @@ -355,7 +355,7 @@ Aggregate [corr(cast(b#x as double), cast(a#x as double)) AS corr(b, a)#x] -- !query CREATE TEMPORARY VIEW regr_test AS SELECT * FROM VALUES (10,150),(20,250),(30,350),(80,540),(100,200) AS regr_test (x, y) -- !query analysis -CreateViewCommand `regr_test`, SELECT * FROM VALUES (10,150),(20,250),(30,350),(80,540),(100,200) AS regr_test (x, y), false, false, LocalTempView, true +CreateViewCommand `regr_test`, SELECT * FROM VALUES (10,150),(20,250),(30,350),(80,540),(100,200) AS regr_test (x, y), false, false, LocalTempView, UNSUPPORTED, true +- Project [x#x, y#x] +- SubqueryAlias regr_test +- LocalRelation [x#x, y#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part2.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part2.sql.out index 84c5a88e6b2aa..98b0a27f04505 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part2.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/aggregates_part2.sql.out @@ -14,7 +14,7 @@ CreateViewCommand `int4_tbl`, select * from values (-123456), (2147483647), (-2147483647) - as int4_tbl(f1), false, false, LocalTempView, true + as int4_tbl(f1), false, false, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias int4_tbl +- LocalRelation [f1#x] @@ -29,7 +29,7 @@ CREATE OR REPLACE TEMPORARY VIEW bitwise_test AS SELECT * FROM VALUES CreateViewCommand `bitwise_test`, SELECT * FROM VALUES (1, 1, 1, 1L), (3, 3, 3, null), - (7, 7, 7, 3L) AS bitwise_test(b1, b2, b3, b4), false, true, LocalTempView, true + (7, 7, 7, 3L) AS bitwise_test(b1, b2, b3, b4), false, true, LocalTempView, UNSUPPORTED, true +- Project [b1#x, b2#x, b3#x, b4#xL] +- SubqueryAlias bitwise_test +- LocalRelation [b1#x, b2#x, b3#x, b4#xL] @@ -178,7 +178,7 @@ CREATE OR REPLACE TEMPORARY VIEW bool_test AS SELECT * FROM VALUES CreateViewCommand `bool_test`, SELECT * FROM VALUES (TRUE, null, FALSE, null), (FALSE, TRUE, null, null), - (null, TRUE, FALSE, null) AS bool_test(b1, b2, b3, b4), false, true, LocalTempView, true + (null, TRUE, FALSE, null) AS bool_test(b1, b2, b3, b4), false, true, LocalTempView, UNSUPPORTED, true +- Project [b1#x, b2#x, b3#x, b4#x] +- SubqueryAlias bool_test +- LocalRelation [b1#x, b2#x, b3#x, b4#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/create_view.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/create_view.sql.out index b200f255ff13e..e4e4be8fee7d3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/create_view.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/create_view.sql.out @@ -16,7 +16,7 @@ CREATE VIEW toyemp AS FROM emp -- !query analysis CreateViewCommand `spark_catalog`.`default`.`toyemp`, SELECT name, age, /* location ,*/ 12*salary AS annualsal - FROM emp, false, false, PersistedView, true + FROM emp, false, false, PersistedView, COMPENSATION, true +- Project [name#x, age#x, (12 * salary#x) AS annualsal#x] +- SubqueryAlias spark_catalog.default.emp +- Relation spark_catalog.default.emp[name#x,age#x,salary#x,manager#x] parquet @@ -102,7 +102,7 @@ InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_d CREATE OR REPLACE VIEW viewtest AS SELECT * FROM viewtest_tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT * FROM viewtest_tbl, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT * FROM viewtest_tbl, false, true, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- SubqueryAlias spark_catalog.default.viewtest_tbl +- Relation spark_catalog.default.viewtest_tbl[a#x,b#x] parquet @@ -112,7 +112,7 @@ CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT * FROM viewtest_t CREATE OR REPLACE VIEW viewtest AS SELECT * FROM viewtest_tbl WHERE a > 10 -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT * FROM viewtest_tbl WHERE a > 10, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT * FROM viewtest_tbl WHERE a > 10, false, true, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- Filter (a#x > 10) +- SubqueryAlias spark_catalog.default.viewtest_tbl @@ -136,7 +136,7 @@ Project [a#x, b#x] CREATE OR REPLACE VIEW viewtest AS SELECT a, b FROM viewtest_tbl WHERE a > 5 ORDER BY b DESC -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, b FROM viewtest_tbl WHERE a > 5 ORDER BY b DESC, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, b FROM viewtest_tbl WHERE a > 5 ORDER BY b DESC, false, true, PersistedView, COMPENSATION, true +- Sort [b#x DESC NULLS LAST], true +- Project [a#x, b#x] +- Filter (a#x > 5) @@ -162,7 +162,7 @@ Project [a#x, b#x] CREATE OR REPLACE VIEW viewtest AS SELECT a FROM viewtest_tbl WHERE a <> 20 -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a FROM viewtest_tbl WHERE a <> 20, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a FROM viewtest_tbl WHERE a <> 20, false, true, PersistedView, COMPENSATION, true +- Project [a#x] +- Filter NOT (a#x = 20) +- SubqueryAlias spark_catalog.default.viewtest_tbl @@ -173,7 +173,7 @@ CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a FROM viewtest_t CREATE OR REPLACE VIEW viewtest AS SELECT 1, * FROM viewtest_tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT 1, * FROM viewtest_tbl, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT 1, * FROM viewtest_tbl, false, true, PersistedView, COMPENSATION, true +- Project [1 AS 1#x, a#x, b#x] +- SubqueryAlias spark_catalog.default.viewtest_tbl +- Relation spark_catalog.default.viewtest_tbl[a#x,b#x] parquet @@ -183,7 +183,7 @@ CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT 1, * FROM viewtes CREATE OR REPLACE VIEW viewtest AS SELECT a, decimal(b) FROM viewtest_tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, decimal(b) FROM viewtest_tbl, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, decimal(b) FROM viewtest_tbl, false, true, PersistedView, COMPENSATION, true +- Project [a#x, cast(b#x as decimal(10,0)) AS b#x] +- SubqueryAlias spark_catalog.default.viewtest_tbl +- Relation spark_catalog.default.viewtest_tbl[a#x,b#x] parquet @@ -193,7 +193,7 @@ CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, decimal(b) FRO CREATE OR REPLACE VIEW viewtest AS SELECT a, b, 0 AS c FROM viewtest_tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, b, 0 AS c FROM viewtest_tbl, false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`viewtest`, SELECT a, b, 0 AS c FROM viewtest_tbl, false, true, PersistedView, COMPENSATION, true +- Project [a#x, b#x, 0 AS c#x] +- SubqueryAlias spark_catalog.default.viewtest_tbl +- Relation spark_catalog.default.viewtest_tbl[a#x,b#x] parquet @@ -243,7 +243,7 @@ CREATE TEMPORARY VIEW temp_table AS SELECT * FROM VALUES (1, 1) as temp_table(a, id) -- !query analysis CreateViewCommand `temp_table`, SELECT * FROM VALUES - (1, 1) as temp_table(a, id), false, false, LocalTempView, true + (1, 1) as temp_table(a, id), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, id#x] +- SubqueryAlias temp_table +- LocalRelation [a#x, id#x] @@ -252,7 +252,7 @@ CreateViewCommand `temp_table`, SELECT * FROM VALUES -- !query CREATE VIEW v1 AS SELECT * FROM base_table -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v1`, SELECT * FROM base_table, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v1`, SELECT * FROM base_table, false, false, PersistedView, COMPENSATION, true +- Project [a#x, id#x] +- SubqueryAlias spark_catalog.temp_view_test.base_table +- Relation spark_catalog.temp_view_test.base_table[a#x,id#x] parquet @@ -283,7 +283,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE TEMP VIEW v2_temp AS SELECT * FROM base_table -- !query analysis -CreateViewCommand `v2_temp`, SELECT * FROM base_table, false, false, LocalTempView, true +CreateViewCommand `v2_temp`, SELECT * FROM base_table, false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, id#x] +- SubqueryAlias spark_catalog.temp_view_test.base_table +- Relation spark_catalog.temp_view_test.base_table[a#x,id#x] parquet @@ -298,7 +298,7 @@ DescribeTableCommand `v2_temp`, true, [col_name#x, data_type#x, comment#x] -- !query CREATE VIEW temp_view_test.v2 AS SELECT * FROM base_table -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v2`, SELECT * FROM base_table, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v2`, SELECT * FROM base_table, false, false, PersistedView, COMPENSATION, true +- Project [a#x, id#x] +- SubqueryAlias spark_catalog.temp_view_test.base_table +- Relation spark_catalog.temp_view_test.base_table[a#x,id#x] parquet @@ -334,7 +334,7 @@ CREATE VIEW v3 AS -- !query analysis CreateViewCommand `spark_catalog`.`temp_view_test`.`v3`, SELECT t1.a AS t1_a, t2.a AS t2_a FROM base_table t1, base_table2 t2 - WHERE t1.id = t2.id, false, false, PersistedView, true + WHERE t1.id = t2.id, false, false, PersistedView, COMPENSATION, true +- Project [a#x AS t1_a#x, a#x AS t2_a#x] +- Filter (id#x = id#x) +- Join Inner @@ -393,7 +393,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE VIEW v4 AS SELECT * FROM base_table WHERE id IN (SELECT id FROM base_table2) -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v4`, SELECT * FROM base_table WHERE id IN (SELECT id FROM base_table2), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v4`, SELECT * FROM base_table WHERE id IN (SELECT id FROM base_table2), false, false, PersistedView, COMPENSATION, true +- Project [a#x, id#x] +- Filter id#x IN (list#x []) : +- Project [id#x] @@ -412,7 +412,7 @@ DescribeTableCommand `spark_catalog`.`temp_view_test`.`v4`, true, [col_name#x, d -- !query CREATE VIEW v5 AS SELECT t1.id, t2.a FROM base_table t1, (SELECT * FROM base_table2) t2 -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v5`, SELECT t1.id, t2.a FROM base_table t1, (SELECT * FROM base_table2) t2, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v5`, SELECT t1.id, t2.a FROM base_table t1, (SELECT * FROM base_table2) t2, false, false, PersistedView, COMPENSATION, true +- Project [id#x, a#x] +- Join Inner :- SubqueryAlias t1 @@ -433,7 +433,7 @@ DescribeTableCommand `spark_catalog`.`temp_view_test`.`v5`, true, [col_name#x, d -- !query CREATE VIEW v6 AS SELECT * FROM base_table WHERE EXISTS (SELECT 1 FROM base_table2) -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v6`, SELECT * FROM base_table WHERE EXISTS (SELECT 1 FROM base_table2), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v6`, SELECT * FROM base_table WHERE EXISTS (SELECT 1 FROM base_table2), false, false, PersistedView, COMPENSATION, true +- Project [a#x, id#x] +- Filter exists#x [] : +- Project [1 AS 1#x] @@ -452,7 +452,7 @@ DescribeTableCommand `spark_catalog`.`temp_view_test`.`v6`, true, [col_name#x, d -- !query CREATE VIEW v7 AS SELECT * FROM base_table WHERE NOT EXISTS (SELECT 1 FROM base_table2) -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v7`, SELECT * FROM base_table WHERE NOT EXISTS (SELECT 1 FROM base_table2), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v7`, SELECT * FROM base_table WHERE NOT EXISTS (SELECT 1 FROM base_table2), false, false, PersistedView, COMPENSATION, true +- Project [a#x, id#x] +- Filter NOT exists#x [] : +- Project [1 AS 1#x] @@ -471,7 +471,7 @@ DescribeTableCommand `spark_catalog`.`temp_view_test`.`v7`, true, [col_name#x, d -- !query CREATE VIEW v8 AS SELECT * FROM base_table WHERE EXISTS (SELECT 1) -- !query analysis -CreateViewCommand `spark_catalog`.`temp_view_test`.`v8`, SELECT * FROM base_table WHERE EXISTS (SELECT 1), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`temp_view_test`.`v8`, SELECT * FROM base_table WHERE EXISTS (SELECT 1), false, false, PersistedView, COMPENSATION, true +- Project [a#x, id#x] +- Filter exists#x [] : +- Project [1 AS 1#x] @@ -641,7 +641,7 @@ CREATE TEMP VIEW tt AS SELECT * FROM VALUES (1, 'a') AS tt(num2, value) -- !query analysis CreateViewCommand `tt`, SELECT * FROM VALUES - (1, 'a') AS tt(num2, value), false, false, LocalTempView, true + (1, 'a') AS tt(num2, value), false, false, LocalTempView, UNSUPPORTED, true +- Project [num2#x, value#x] +- SubqueryAlias tt +- LocalRelation [num2#x, value#x] @@ -650,7 +650,7 @@ CreateViewCommand `tt`, SELECT * FROM VALUES -- !query CREATE VIEW nontemp1 AS SELECT * FROM t1 CROSS JOIN t2 -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp1`, SELECT * FROM t1 CROSS JOIN t2, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp1`, SELECT * FROM t1 CROSS JOIN t2, false, false, PersistedView, COMPENSATION, true +- Project [num#x, name#x, num2#x, value#x] +- Join Cross :- SubqueryAlias spark_catalog.testviewschm2.t1 @@ -684,7 +684,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE VIEW nontemp2 AS SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num2 -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp2`, SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num2, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp2`, SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num2, false, false, PersistedView, COMPENSATION, true +- Project [num#x, name#x, num2#x, value#x] +- Join Inner, (num#x = num2#x) :- SubqueryAlias spark_catalog.testviewschm2.t1 @@ -718,7 +718,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE VIEW nontemp3 AS SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp3`, SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp3`, SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2, false, false, PersistedView, COMPENSATION, true +- Project [num#x, name#x, num2#x, value#x] +- Join LeftOuter, (num#x = num2#x) :- SubqueryAlias spark_catalog.testviewschm2.t1 @@ -752,7 +752,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE VIEW nontemp4 AS SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 AND t2.value = 'xxx' -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp4`, SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 AND t2.value = 'xxx', false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`nontemp4`, SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 AND t2.value = 'xxx', false, false, PersistedView, COMPENSATION, true +- Project [num#x, name#x, num2#x, value#x] +- Join LeftOuter, ((num#x = num2#x) AND (value#x = xxx)) :- SubqueryAlias spark_catalog.testviewschm2.t1 @@ -844,7 +844,7 @@ AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f) -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`pubview`, SELECT * FROM tbl1 WHERE tbl1.a BETWEEN (SELECT d FROM tbl2 WHERE c = 1) AND (SELECT e FROM tbl3 WHERE f = 2) -AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f), false, false, PersistedView, true +AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f), false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- Filter (between(a#x, scalar-subquery#x [], scalar-subquery#x []) AND exists#x []) : :- Project [d#x] @@ -880,7 +880,7 @@ AND NOT EXISTS (SELECT g FROM tbl4 LEFT JOIN tmptbl ON tbl4.h = tmptbl.j) CreateViewCommand `spark_catalog`.`testviewschm2`.`mytempview`, SELECT * FROM tbl1 WHERE tbl1.a BETWEEN (SELECT d FROM tbl2 WHERE c = 1) AND (SELECT e FROM tbl3 WHERE f = 2) AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f) -AND NOT EXISTS (SELECT g FROM tbl4 LEFT JOIN tmptbl ON tbl4.h = tmptbl.j), false, false, PersistedView, true +AND NOT EXISTS (SELECT g FROM tbl4 LEFT JOIN tmptbl ON tbl4.h = tmptbl.j), false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- Filter ((between(a#x, scalar-subquery#x [], scalar-subquery#x []) AND exists#x []) AND NOT exists#x []) : :- Project [d#x] @@ -925,7 +925,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`tt1`, SELECT * FROM ( VALUES ('abc', '0123456789', 42, 'abcd'), ('0123456789', 'abc', 42.12, 'abc') - ) vv(a,b,c,d), false, false, PersistedView, true + ) vv(a,b,c,d), false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x, c#x, d#x] +- SubqueryAlias vv +- Project [col1#x AS a#x, col2#x AS b#x, col3#x AS c#x, col4#x AS d#x] @@ -988,7 +988,7 @@ CREATE VIEW aliased_view_1 AS where exists (select 1 from tx1 where tt1.f1 = tx1.x1) -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`aliased_view_1`, select * from tt1 - where exists (select 1 from tx1 where tt1.f1 = tx1.x1), false, false, PersistedView, true + where exists (select 1 from tx1 where tt1.f1 = tx1.x1), false, false, PersistedView, COMPENSATION, true +- Project [f1#x, f2#x, f3#x] +- Filter exists#x [f1#x] : +- Project [1 AS 1#x] @@ -1005,7 +1005,7 @@ CREATE VIEW aliased_view_2 AS where exists (select 1 from tx1 where a1.f1 = tx1.x1) -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`aliased_view_2`, select * from tt1 a1 - where exists (select 1 from tx1 where a1.f1 = tx1.x1), false, false, PersistedView, true + where exists (select 1 from tx1 where a1.f1 = tx1.x1), false, false, PersistedView, COMPENSATION, true +- Project [f1#x, f2#x, f3#x] +- Filter exists#x [f1#x] : +- Project [1 AS 1#x] @@ -1023,7 +1023,7 @@ CREATE VIEW aliased_view_3 AS where exists (select 1 from tx1 a2 where tt1.f1 = a2.x1) -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`aliased_view_3`, select * from tt1 - where exists (select 1 from tx1 a2 where tt1.f1 = a2.x1), false, false, PersistedView, true + where exists (select 1 from tx1 a2 where tt1.f1 = a2.x1), false, false, PersistedView, COMPENSATION, true +- Project [f1#x, f2#x, f3#x] +- Filter exists#x [f1#x] : +- Project [1 AS 1#x] @@ -1041,7 +1041,7 @@ CREATE VIEW aliased_view_4 AS where exists (select 1 from tt1 where temp_view_test.tt1.y1 = tt1.f1) -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`aliased_view_4`, select * from temp_view_test.tt1 - where exists (select 1 from tt1 where temp_view_test.tt1.y1 = tt1.f1), false, false, PersistedView, true + where exists (select 1 from tt1 where temp_view_test.tt1.y1 = tt1.f1), false, false, PersistedView, COMPENSATION, true +- Project [y1#x, f2#x, f3#x] +- Filter exists#x [y1#x] : +- Project [1 AS 1#x] @@ -1180,7 +1180,7 @@ select * from -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`view_of_joins`, select * from (select * from (tbl1 cross join tbl2) same) ss, - (tbl3 cross join tbl4) same, false, false, PersistedView, true + (tbl3 cross join tbl4) same, false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x, c#x, d#x, e#x, f#x, g#x, h#x] +- Join Inner :- SubqueryAlias ss @@ -1220,7 +1220,7 @@ CreateDataSourceTableCommand `spark_catalog`.`testviewschm2`.`tt4`, false -- !query create view v1 as select * from tt2 natural join tt3 -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`v1`, select * from tt2 natural join tt3, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`v1`, select * from tt2 natural join tt3, false, false, PersistedView, COMPENSATION, true +- Project [b#x, c#x, a#x, ax#xL] +- Project [b#x, c#x, a#x, ax#xL] +- Join Inner, ((b#x = cast(b#x as int)) AND (cast(c#x as decimal(10,0)) = c#x)) @@ -1233,7 +1233,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`v1`, select * from tt2 natura -- !query create view v1a as select * from (tt2 natural join tt3) j -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`v1a`, select * from (tt2 natural join tt3) j, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`v1a`, select * from (tt2 natural join tt3) j, false, false, PersistedView, COMPENSATION, true +- Project [b#x, c#x, a#x, ax#xL] +- SubqueryAlias j +- Project [b#x, c#x, a#x, ax#xL] @@ -1247,7 +1247,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`v1a`, select * from (tt2 natu -- !query create view v2 as select * from tt2 join tt3 using (b,c) join tt4 using (b) -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`v2`, select * from tt2 join tt3 using (b,c) join tt4 using (b), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`v2`, select * from tt2 join tt3 using (b,c) join tt4 using (b), false, false, PersistedView, COMPENSATION, true +- Project [b#x, c#x, a#x, ax#xL, ay#x, q#x] +- Project [b#x, c#x, a#x, ax#xL, ay#x, q#x] +- Join Inner, (b#x = b#x) @@ -1264,7 +1264,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`v2`, select * from tt2 join t -- !query create view v2a as select * from (tt2 join tt3 using (b,c) join tt4 using (b)) j -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`v2a`, select * from (tt2 join tt3 using (b,c) join tt4 using (b)) j, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`v2a`, select * from (tt2 join tt3 using (b,c) join tt4 using (b)) j, false, false, PersistedView, COMPENSATION, true +- Project [b#x, c#x, a#x, ax#xL, ay#x, q#x] +- SubqueryAlias j +- Project [b#x, c#x, a#x, ax#xL, ay#x, q#x] @@ -1282,7 +1282,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`v2a`, select * from (tt2 join -- !query create view v3 as select * from tt2 join tt3 using (b,c) full join tt4 using (b) -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`v3`, select * from tt2 join tt3 using (b,c) full join tt4 using (b), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`v3`, select * from tt2 join tt3 using (b,c) full join tt4 using (b), false, false, PersistedView, COMPENSATION, true +- Project [b#x, c#x, a#x, ax#xL, ay#x, q#x] +- Project [coalesce(b#x, b#x) AS b#x, c#x, a#x, ax#xL, ay#x, q#x] +- Join FullOuter, (b#x = b#x) @@ -1438,7 +1438,7 @@ CreateDataSourceTableCommand `spark_catalog`.`testviewschm2`.`tt6`, false -- !query create view vv1 as select * from (tt5 cross join tt6) j(aa,bb,cc,dd) -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`vv1`, select * from (tt5 cross join tt6) j(aa,bb,cc,dd), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`vv1`, select * from (tt5 cross join tt6) j(aa,bb,cc,dd), false, false, PersistedView, COMPENSATION, true +- Project [aa#x, bb#x, cc#x, dd#x] +- SubqueryAlias j +- Project [a#x AS aa#x, b#x AS bb#x, c#x AS cc#x, d#x AS dd#x] @@ -1499,7 +1499,7 @@ select * from tt7 full join tt8 using (x), tt8 tt8x -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`vv2`, select * from (values(1,2,3,4,5)) v(a,b,c,d,e) union all -select * from tt7 full join tt8 using (x), tt8 tt8x, false, false, PersistedView, true +select * from tt7 full join tt8 using (x), tt8 tt8x, false, false, PersistedView, COMPENSATION, true +- Union false, false :- Project [a#x, b#x, c#x, d#x, e#x] : +- SubqueryAlias v @@ -1536,7 +1536,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`vv3`, select * from (values(1 union all select * from tt7 full join tt8 using (x), - tt7 tt7x full join tt8 tt8x using (x), false, false, PersistedView, true + tt7 tt7x full join tt8 tt8x using (x), false, false, PersistedView, COMPENSATION, true +- Union false, false :- Project [a#x, b#x, c#x, x#x, e#x, f#x] : +- SubqueryAlias v @@ -1578,7 +1578,7 @@ CreateViewCommand `spark_catalog`.`testviewschm2`.`vv4`, select * from (values(1 union all select * from tt7 full join tt8 using (x), - tt7 tt7x full join tt8 tt8x using (x) full join tt8 tt8y using (x), false, false, PersistedView, true + tt7 tt7x full join tt8 tt8x using (x) full join tt8 tt8y using (x), false, false, PersistedView, COMPENSATION, true +- Union false, false :- Project [a#x, b#x, c#x, x#x, e#x, f#x, g#x] : +- SubqueryAlias v @@ -1669,7 +1669,7 @@ select * from tt7a left join tt8a using (x), tt8a tt8ax -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`vv2a`, select * from (values(now(),2,3,now(),5)) v(a,b,c,d,e) union all -select * from tt7a left join tt8a using (x), tt8a tt8ax, false, false, PersistedView, true +select * from tt7a left join tt8a using (x), tt8a tt8ax, false, false, PersistedView, COMPENSATION, true +- Union false, false :- Project [a#x, b#x, c#x, d#x, e#x] : +- SubqueryAlias v @@ -1716,7 +1716,7 @@ CreateDataSourceTableCommand `spark_catalog`.`testviewschm2`.`tt10`, false -- !query create view vv5 as select x,y,z from tt9 join tt10 using(x) -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`vv5`, select x,y,z from tt9 join tt10 using(x), false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`vv5`, select x,y,z from tt9 join tt10 using(x), false, false, PersistedView, COMPENSATION, true +- Project [x#x, y#x, z#x] +- Project [x#x, xx#x, y#x, z#x] +- Join Inner, (x#x = x#x) @@ -1761,7 +1761,7 @@ create view vv6 as select x,y,z,q from (tt11 join tt12 using(x)) join tt13 using(z) -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`vv6`, select x,y,z,q from - (tt11 join tt12 using(x)) join tt13 using(z), false, false, PersistedView, true + (tt11 join tt12 using(x)) join tt13 using(z), false, false, PersistedView, COMPENSATION, true +- Project [x#x, y#x, z#x, q#x] +- Project [z#x, x#x, y#x, q#x] +- Join Inner, (z#x = z#x) @@ -1807,7 +1807,7 @@ create view tt18v as -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`tt18v`, select * from int8_tbl xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy union all - select * from int8_tbl xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz, false, false, PersistedView, true + select * from int8_tbl xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz, false, false, PersistedView, COMPENSATION, true +- Union false, false :- Project [q1#x, q2#x] : +- SubqueryAlias xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy @@ -1829,7 +1829,7 @@ DescribeTableCommand `spark_catalog`.`testviewschm2`.`tt18v`, false, [col_name#x create view tt21v as select * from tt5 natural inner join tt6 -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`tt21v`, select * from tt5 natural inner join tt6, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`tt21v`, select * from tt5 natural inner join tt6, false, false, PersistedView, COMPENSATION, true +- Project [c#x, a#x, b#x, cc#x, d#x] +- Project [c#x, a#x, b#x, cc#x, d#x] +- Join Inner, (c#x = c#x) @@ -1849,7 +1849,7 @@ DescribeTableCommand `spark_catalog`.`testviewschm2`.`tt21v`, false, [col_name#x create view tt22v as select * from tt5 natural left join tt6 -- !query analysis -CreateViewCommand `spark_catalog`.`testviewschm2`.`tt22v`, select * from tt5 natural left join tt6, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`testviewschm2`.`tt22v`, select * from tt5 natural left join tt6, false, false, PersistedView, COMPENSATION, true +- Project [c#x, a#x, b#x, cc#x, d#x] +- Project [c#x, a#x, b#x, cc#x, d#x] +- Join LeftOuter, (c#x = c#x) @@ -1873,7 +1873,7 @@ select 42, 43 -- !query analysis CreateViewCommand `spark_catalog`.`testviewschm2`.`tt23v`, [(col_a,None), (col_b,None)], select q1 as other_name1, q2 as other_name2 from int8_tbl union -select 42, 43, false, false, PersistedView, true +select 42, 43, false, false, PersistedView, COMPENSATION, true +- Distinct +- Union false, false :- Project [q1#x AS other_name1#x, q2#x AS other_name2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/float8.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/float8.sql.out index d30f971628e4d..2f2beda4f1cec 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/float8.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/float8.sql.out @@ -403,7 +403,7 @@ FROM FLOAT8_TBL -- !query analysis CreateViewCommand `UPDATED_FLOAT8_TBL`, SELECT CASE WHEN FLOAT8_TBL.f1 > '0.0' THEN FLOAT8_TBL.f1 * '-1' ELSE FLOAT8_TBL.f1 END AS f1 -FROM FLOAT8_TBL, false, false, LocalTempView, true +FROM FLOAT8_TBL, false, false, LocalTempView, UNSUPPORTED, true +- Project [CASE WHEN (f1#x > cast(0.0 as double)) THEN (f1#x * cast(-1 as double)) ELSE f1#x END AS f1#x] +- SubqueryAlias spark_catalog.default.float8_tbl +- Relation spark_catalog.default.float8_tbl[f1#x] parquet diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/groupingsets.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/groupingsets.sql.out index 173a324dc456c..27e9707425833 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/groupingsets.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/groupingsets.sql.out @@ -9,7 +9,7 @@ create temp view gstest1(a,b,v) CreateViewCommand `gstest1`, [(a,None), (b,None), (v,None)], values (1,1,10),(1,1,11),(1,2,12),(1,2,13),(1,3,14), (2,3,15), (3,3,16),(3,4,17), - (4,1,18),(4,1,19), false, false, LocalTempView, true + (4,1,18),(4,1,19), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x] @@ -320,7 +320,7 @@ CreateViewCommand `int8_tbl`, SELECT * FROM VALUES (123L, 4567890123456789L), (4567890123456789L, 123L), (4567890123456789L, 4567890123456789L), - (4567890123456789L, -4567890123456789L) as int8_tbl(q1, q2), false, false, LocalTempView, true + (4567890123456789L, -4567890123456789L) as int8_tbl(q1, q2), false, false, LocalTempView, UNSUPPORTED, true +- Project [q1#xL, q2#xL] +- SubqueryAlias int8_tbl +- LocalRelation [q1#xL, q2#xL] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/join.sql.out index 6d334490b9e7d..37ec8291c4e4b 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/join.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `INT2_TBL`, [(f1,None)], VALUES (smallint(trim(' 1234 '))), (smallint(trim(' -1234'))), (smallint('32767')), - (smallint('-32767')), false, true, LocalTempView, true + (smallint('-32767')), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x] @@ -23,7 +23,7 @@ CREATE OR REPLACE TEMPORARY VIEW INT4_TBL AS SELECT * FROM -- !query analysis CreateViewCommand `INT4_TBL`, SELECT * FROM (VALUES (0), (123456), (-123456), (2147483647), (-2147483647)) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -47,7 +47,7 @@ CreateViewCommand `INT8_TBL`, SELECT * FROM (4567890123456789, 123), (4567890123456789, 4567890123456789), (4567890123456789, -4567890123456789)) - AS v(q1, q2), false, true, LocalTempView, true + AS v(q1, q2), false, true, LocalTempView, UNSUPPORTED, true +- Project [q1#xL, q2#xL] +- SubqueryAlias v +- Project [col1#xL AS q1#xL, col2#xL AS q2#xL] @@ -63,7 +63,7 @@ CREATE OR REPLACE TEMPORARY VIEW FLOAT8_TBL AS SELECT * FROM CreateViewCommand `FLOAT8_TBL`, SELECT * FROM (VALUES (0.0), (1004.30), (-34.84), (cast('1.2345678901234e+200' as double)), (cast('1.2345678901234e-200' as double))) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -77,7 +77,7 @@ CREATE OR REPLACE TEMPORARY VIEW TEXT_TBL AS SELECT * FROM -- !query analysis CreateViewCommand `TEXT_TBL`, SELECT * FROM (VALUES ('doh!'), ('hi de ho neighbor')) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -87,7 +87,7 @@ CreateViewCommand `TEXT_TBL`, SELECT * FROM -- !query CREATE OR REPLACE TEMPORARY VIEW tenk2 AS SELECT * FROM tenk1 -- !query analysis -CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, true, LocalTempView, true +CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, true, LocalTempView, UNSUPPORTED, true +- Project [unique1#x, unique2#x, two#x, four#x, ten#x, twenty#x, hundred#x, thousand#x, twothousand#x, fivethous#x, tenthous#x, odd#x, even#x, stringu1#x, stringu2#x, string4#x] +- SubqueryAlias spark_catalog.default.tenk1 +- Relation spark_catalog.default.tenk1[unique1#x,unique2#x,two#x,four#x,ten#x,twenty#x,hundred#x,thousand#x,twothousand#x,fivethous#x,tenthous#x,odd#x,even#x,stringu1#x,stringu2#x,string4#x] parquet @@ -1001,7 +1001,7 @@ create or replace temporary view x as select * from -- !query analysis CreateViewCommand `x`, select * from (values (1,11), (2,22), (3,null), (4,44), (5,null)) - as v(x1, x2), false, true, LocalTempView, true + as v(x1, x2), false, true, LocalTempView, UNSUPPORTED, true +- Project [x1#x, x2#x] +- SubqueryAlias v +- Project [col1#x AS x1#x, col2#x AS x2#x] @@ -1015,7 +1015,7 @@ create or replace temporary view y as select * from -- !query analysis CreateViewCommand `y`, select * from (values (1,111), (2,222), (3,333), (4,null)) - as v(y1, y2), false, true, LocalTempView, true + as v(y1, y2), false, true, LocalTempView, UNSUPPORTED, true +- Project [y1#x, y2#x] +- SubqueryAlias v +- Project [col1#x AS y1#x, col2#x AS y2#x] @@ -1625,7 +1625,7 @@ create or replace temporary view tt1 as select * from -- !query analysis CreateViewCommand `tt1`, select * from (values (1, 11), (2, NULL)) - as v(tt1_id, joincol), false, true, LocalTempView, true + as v(tt1_id, joincol), false, true, LocalTempView, UNSUPPORTED, true +- Project [tt1_id#x, joincol#x] +- SubqueryAlias v +- Project [col1#x AS tt1_id#x, col2#x AS joincol#x] @@ -1639,7 +1639,7 @@ create or replace temporary view tt2 as select * from -- !query analysis CreateViewCommand `tt2`, select * from (values (21, 11), (22, 11)) - as v(tt2_id, joincol), false, true, LocalTempView, true + as v(tt2_id, joincol), false, true, LocalTempView, UNSUPPORTED, true +- Project [tt2_id#x, joincol#x] +- SubqueryAlias v +- Project [col1#x AS tt2_id#x, col2#x AS joincol#x] @@ -1710,7 +1710,7 @@ create or replace temporary view tt3 as select * from -- !query analysis CreateViewCommand `tt3`, select * from (SELECT cast(x.id as int), repeat('xyzzy', 100) FROM range(1,10001) x) - as v(f1, f2), false, true, LocalTempView, true + as v(f1, f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x, f2#x] +- SubqueryAlias v +- Project [id#x AS f1#x, repeat(xyzzy, 100)#x AS f2#x] @@ -1726,7 +1726,7 @@ create or replace temporary view tt4 as select * from -- !query analysis CreateViewCommand `tt4`, select * from (values (0), (1), (9999)) - as v(f1), false, true, LocalTempView, true + as v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -1787,7 +1787,7 @@ create or replace temporary view tt5 as select * from -- !query analysis CreateViewCommand `tt5`, select * from (values (1, 10), (1, 11)) - as v(f1, f2), false, true, LocalTempView, true + as v(f1, f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x, f2#x] +- SubqueryAlias v +- Project [col1#x AS f1#x, col2#x AS f2#x] @@ -1801,7 +1801,7 @@ create or replace temporary view tt6 as select * from -- !query analysis CreateViewCommand `tt6`, select * from (values (1, 9), (1, 2), (2, 9)) - as v(f1, f2), false, true, LocalTempView, true + as v(f1, f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x, f2#x] +- SubqueryAlias v +- Project [col1#x AS f1#x, col2#x AS f2#x] @@ -1837,7 +1837,7 @@ create or replace temporary view xx as select * from -- !query analysis CreateViewCommand `xx`, select * from (values (1), (2), (3)) - as v(pkxx), false, true, LocalTempView, true + as v(pkxx), false, true, LocalTempView, UNSUPPORTED, true +- Project [pkxx#x] +- SubqueryAlias v +- Project [col1#x AS pkxx#x] @@ -1851,7 +1851,7 @@ create or replace temporary view yy as select * from -- !query analysis CreateViewCommand `yy`, select * from (values (101, 1), (201, 2), (301, NULL)) - as v(pkyy, pkxx), false, true, LocalTempView, true + as v(pkyy, pkxx), false, true, LocalTempView, UNSUPPORTED, true +- Project [pkyy#x, pkxx#x] +- SubqueryAlias v +- Project [col1#x AS pkyy#x, col2#x AS pkxx#x] @@ -1912,7 +1912,7 @@ create or replace temporary view zt1 as select * from -- !query analysis CreateViewCommand `zt1`, select * from (values (53)) - as v(f1), false, true, LocalTempView, true + as v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -1926,7 +1926,7 @@ create or replace temporary view zt2 as select * from -- !query analysis CreateViewCommand `zt2`, select * from (values (53)) - as v(f2), false, true, LocalTempView, true + as v(f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f2#x] +- SubqueryAlias v +- Project [col1#x AS f2#x] @@ -1971,7 +1971,7 @@ Project [f2#x, f3#x, f1#x] -- !query create temp view zv1 as select *,'dummy' AS junk from zt1 -- !query analysis -CreateViewCommand `zv1`, select *,'dummy' AS junk from zt1, false, false, LocalTempView, true +CreateViewCommand `zv1`, select *,'dummy' AS junk from zt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [f1#x, dummy AS junk#x] +- SubqueryAlias zt1 +- View (`zt1`, [f1#x]) @@ -2146,7 +2146,7 @@ create or replace temporary view a as select * from -- !query analysis CreateViewCommand `a`, select * from (values ('p'), ('q')) - as v(code), false, true, LocalTempView, true + as v(code), false, true, LocalTempView, UNSUPPORTED, true +- Project [code#x] +- SubqueryAlias v +- Project [col1#x AS code#x] @@ -2160,7 +2160,7 @@ create or replace temporary view b as select * from -- !query analysis CreateViewCommand `b`, select * from (values ('p', 1), ('p', 2)) - as v(a, num), false, true, LocalTempView, true + as v(a, num), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, num#x] +- SubqueryAlias v +- Project [col1#x AS a#x, col2#x AS num#x] @@ -2174,7 +2174,7 @@ create or replace temporary view c as select * from -- !query analysis CreateViewCommand `c`, select * from (values ('A', 'p'), ('B', 'q'), ('C', null)) - as v(name, a), false, true, LocalTempView, true + as v(name, a), false, true, LocalTempView, UNSUPPORTED, true +- Project [name#x, a#x] +- SubqueryAlias v +- Project [col1#x AS name#x, col2#x AS a#x] @@ -2346,7 +2346,7 @@ create or replace temporary view nt1 as select * from -- !query analysis CreateViewCommand `nt1`, select * from (values(1,true,true), (2,true,false), (3,false,false)) - as v(id, a1, a2), false, true, LocalTempView, true + as v(id, a1, a2), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, a1#x, a2#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS a1#x, col3#x AS a2#x] @@ -2360,7 +2360,7 @@ create or replace temporary view nt2 as select * from -- !query analysis CreateViewCommand `nt2`, select * from (values(1,1,true,true), (2,2,true,false), (3,3,false,false)) - as v(id, nt1_id, b1, b2), false, true, LocalTempView, true + as v(id, nt1_id, b1, b2), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, nt1_id#x, b1#x, b2#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS nt1_id#x, col3#x AS b1#x, col4#x AS b2#x] @@ -2374,7 +2374,7 @@ create or replace temporary view nt3 as select * from -- !query analysis CreateViewCommand `nt3`, select * from (values(1,1,true), (2,2,false), (3,3,true)) - as v(id, nt2_id, c1), false, true, LocalTempView, true + as v(id, nt2_id, c1), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, nt2_id#x, c1#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS nt2_id#x, col3#x AS c1#x] @@ -3050,7 +3050,7 @@ create or replace temporary view parent as select * from -- !query analysis CreateViewCommand `parent`, select * from (values (1, 10), (2, 20), (3, 30)) - as v(k, pd), false, true, LocalTempView, true + as v(k, pd), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, pd#x] +- SubqueryAlias v +- Project [col1#x AS k#x, col2#x AS pd#x] @@ -3064,7 +3064,7 @@ create or replace temporary view child as select * from -- !query analysis CreateViewCommand `child`, select * from (values (1, 100), (4, 400)) - as v(k, cd), false, true, LocalTempView, true + as v(k, cd), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, cd#x] +- SubqueryAlias v +- Project [col1#x AS k#x, col2#x AS cd#x] @@ -3189,7 +3189,7 @@ create or replace temporary view a as select * from -- !query analysis CreateViewCommand `a`, select * from (values (0), (1)) - as v(id), false, true, LocalTempView, true + as v(id), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias v +- Project [col1#x AS id#x] @@ -3203,7 +3203,7 @@ create or replace temporary view b as select * from -- !query analysis CreateViewCommand `b`, select * from (values (0, 0), (1, NULL)) - as v(id, a_id), false, true, LocalTempView, true + as v(id, a_id), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, a_id#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS a_id#x] @@ -3261,7 +3261,7 @@ create or replace temporary view innertab as select * from -- !query analysis CreateViewCommand `innertab`, select * from (values (123L, 42L)) - as v(id, dat1), false, true, LocalTempView, true + as v(id, dat1), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#xL, dat1#xL] +- SubqueryAlias v +- Project [col1#xL AS id#xL, col2#xL AS dat1#xL] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/limit.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/limit.sql.out index c25002d7a6be6..2a5062bd65b72 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/limit.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/limit.sql.out @@ -129,7 +129,7 @@ CreateViewCommand `INT8_TBL`, SELECT * FROM (4567890123456789, 123), (4567890123456789, 4567890123456789), (4567890123456789, -4567890123456789)) - AS v(q1, q2), false, true, LocalTempView, true + AS v(q1, q2), false, true, LocalTempView, UNSUPPORTED, true +- Project [q1#xL, q2#xL] +- SubqueryAlias v +- Project [col1#xL AS q1#xL, col2#xL AS q2#xL] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select.sql.out index 875673dd72ec0..ed15cce62dc78 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select.sql.out @@ -2,7 +2,7 @@ -- !query create or replace temporary view onek2 as select * from onek -- !query analysis -CreateViewCommand `onek2`, select * from onek, false, true, LocalTempView, true +CreateViewCommand `onek2`, select * from onek, false, true, LocalTempView, UNSUPPORTED, true +- Project [unique1#x, unique2#x, two#x, four#x, ten#x, twenty#x, hundred#x, thousand#x, twothousand#x, fivethous#x, tenthous#x, odd#x, even#x, stringu1#x, stringu2#x, string4#x] +- SubqueryAlias spark_catalog.default.onek +- Relation spark_catalog.default.onek[unique1#x,unique2#x,two#x,four#x,ten#x,twenty#x,hundred#x,thousand#x,twothousand#x,fivethous#x,tenthous#x,odd#x,even#x,stringu1#x,stringu2#x,string4#x] parquet @@ -23,7 +23,7 @@ CreateViewCommand `INT8_TBL`, select * from values (cast('4567890123456789' as bigint),cast('123' as bigint)), (cast(+4567890123456789 as bigint),cast('4567890123456789' as bigint)), (cast('+4567890123456789' as bigint),cast('-4567890123456789' as bigint)) - as INT8_TBL(q1, q2), false, true, LocalTempView, true + as INT8_TBL(q1, q2), false, true, LocalTempView, UNSUPPORTED, true +- Project [q1#xL, q2#xL] +- SubqueryAlias INT8_TBL +- LocalRelation [q1#xL, q2#xL] @@ -240,7 +240,7 @@ Union false, false CREATE OR REPLACE TEMPORARY VIEW foo AS SELECT * FROM (values(42),(3),(10),(7),(null),(null),(1)) as foo (f1) -- !query analysis -CreateViewCommand `foo`, SELECT * FROM (values(42),(3),(10),(7),(null),(null),(1)) as foo (f1), false, true, LocalTempView, true +CreateViewCommand `foo`, SELECT * FROM (values(42),(3),(10),(7),(null),(null),(1)) as foo (f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias foo +- Project [col1#x AS f1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select_distinct.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select_distinct.sql.out index bd653048a2ed7..632df1ed53fd4 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select_distinct.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/select_distinct.sql.out @@ -5,7 +5,7 @@ SELECT two, stringu1, ten, string4 FROM onek -- !query analysis CreateViewCommand `tmp`, SELECT two, stringu1, ten, string4 -FROM onek, false, true, LocalTempView, true +FROM onek, false, true, LocalTempView, UNSUPPORTED, true +- Project [two#x, stringu1#x, ten#x, string4#x] +- SubqueryAlias spark_catalog.default.onek +- Relation spark_catalog.default.onek[unique1#x,unique2#x,two#x,four#x,ten#x,twenty#x,hundred#x,thousand#x,twothousand#x,fivethous#x,tenthous#x,odd#x,even#x,stringu1#x,stringu2#x,string4#x] parquet @@ -88,7 +88,7 @@ CREATE OR REPLACE TEMPORARY VIEW disttable AS SELECT * FROM -- !query analysis CreateViewCommand `disttable`, SELECT * FROM (VALUES (1), (2), (3), (NULL)) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/union.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/union.sql.out index 1b4afc2516f83..05002a7c45386 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/union.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/union.sql.out @@ -6,7 +6,7 @@ CREATE OR REPLACE TEMPORARY VIEW INT4_TBL AS SELECT * FROM -- !query analysis CreateViewCommand `INT4_TBL`, SELECT * FROM (VALUES (0), (123456), (-123456), (2147483647), (-2147483647)) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -30,7 +30,7 @@ CreateViewCommand `INT8_TBL`, SELECT * FROM (4567890123456789, 123), (4567890123456789, 4567890123456789), (4567890123456789, -4567890123456789)) - AS v(q1, q2), false, true, LocalTempView, true + AS v(q1, q2), false, true, LocalTempView, UNSUPPORTED, true +- Project [q1#xL, q2#xL] +- SubqueryAlias v +- Project [col1#xL AS q1#xL, col2#xL AS q2#xL] @@ -46,7 +46,7 @@ CREATE OR REPLACE TEMPORARY VIEW FLOAT8_TBL AS SELECT * FROM CreateViewCommand `FLOAT8_TBL`, SELECT * FROM (VALUES (0.0), (-34.84), (-1004.30), (CAST('-1.2345678901234e+200' AS DOUBLE)), (CAST('-1.2345678901234e-200' AS DOUBLE))) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part1.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part1.sql.out index d7e222ca834fc..6cdf71e33c73f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part1.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part1.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW tenk2 AS SELECT * FROM tenk1 -- !query analysis -CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, false, LocalTempView, true +CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, false, LocalTempView, UNSUPPORTED, true +- Project [unique1#x, unique2#x, two#x, four#x, ten#x, twenty#x, hundred#x, thousand#x, twothousand#x, fivethous#x, tenthous#x, odd#x, even#x, stringu1#x, stringu2#x, string4#x] +- SubqueryAlias spark_catalog.default.tenk1 +- Relation spark_catalog.default.tenk1[unique1#x,unique2#x,two#x,four#x,ten#x,twenty#x,hundred#x,thousand#x,twothousand#x,fivethous#x,tenthous#x,odd#x,even#x,stringu1#x,stringu2#x,string4#x] parquet @@ -343,7 +343,7 @@ CreateViewCommand `int4_tbl`, select * from values (-123456), (2147483647), (-2147483647) - as int4_tbl(f1), false, false, LocalTempView, true + as int4_tbl(f1), false, false, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias int4_tbl +- LocalRelation [f1#x] @@ -522,7 +522,7 @@ SELECT i.id, sum(i.id) over (order by i.id rows between 1 preceding and 1 follow FROM range(1, 11) i -- !query analysis CreateViewCommand `v_window`, SELECT i.id, sum(i.id) over (order by i.id rows between 1 preceding and 1 following) as sum_rows -FROM range(1, 11) i, false, false, LocalTempView, true +FROM range(1, 11) i, false, false, LocalTempView, UNSUPPORTED, true +- Project [id#xL, sum_rows#xL] +- Project [id#xL, sum_rows#xL, sum_rows#xL] +- Window [sum(id#xL) windowspecdefinition(id#xL ASC NULLS FIRST, specifiedwindowframe(RowFrame, -1, 1)) AS sum_rows#xL], [id#xL ASC NULLS FIRST] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part3.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part3.sql.out index b7c9fae903000..9f2dd9bcb1783 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part3.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/postgreSQL/window_part3.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW tenk2 AS SELECT * FROM tenk1 -- !query analysis -CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, false, LocalTempView, true +CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, false, LocalTempView, UNSUPPORTED, true +- Project [unique1#x, unique2#x, two#x, four#x, ten#x, twenty#x, hundred#x, thousand#x, twothousand#x, fivethous#x, tenthous#x, odd#x, even#x, stringu1#x, stringu2#x, string4#x] +- SubqueryAlias spark_catalog.default.tenk1 +- Relation spark_catalog.default.tenk1[unique1#x,unique2#x,two#x,four#x,ten#x,twenty#x,hundred#x,thousand#x,twothousand#x,fivethous#x,tenthous#x,odd#x,even#x,stringu1#x,stringu2#x,string4#x] parquet diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/pred-pushdown.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/pred-pushdown.sql.out index 9e0c055db6dc7..74d1c69dcc532 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/pred-pushdown.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/pred-pushdown.sql.out @@ -2,7 +2,7 @@ -- !query CREATE OR REPLACE TEMPORARY VIEW tbl_a AS VALUES (1, 1), (2, 1), (3, 6) AS T(c1, c2) -- !query analysis -CreateViewCommand `tbl_a`, VALUES (1, 1), (2, 1), (3, 6) AS T(c1, c2), false, true, LocalTempView, true +CreateViewCommand `tbl_a`, VALUES (1, 1), (2, 1), (3, 6) AS T(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [c1#x, c2#x] @@ -10,7 +10,7 @@ CreateViewCommand `tbl_a`, VALUES (1, 1), (2, 1), (3, 6) AS T(c1, c2), false, tr -- !query CREATE OR REPLACE TEMPORARY VIEW tbl_b AS VALUES 1 AS T(c1) -- !query analysis -CreateViewCommand `tbl_b`, VALUES 1 AS T(c1), false, true, LocalTempView, true +CreateViewCommand `tbl_b`, VALUES 1 AS T(c1), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [c1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/query_regex_column.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/query_regex_column.sql.out index 6c14323382889..d62e4b7921363 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/query_regex_column.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/query_regex_column.sql.out @@ -12,7 +12,7 @@ AS testData(key, value1, value2) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, "1", "11"), (2, "2", "22"), (3, "3", "33"), (4, "4", "44"), (5, "5", "55"), (6, "6", "66") -AS testData(key, value1, value2), false, true, LocalTempView, true +AS testData(key, value1, value2), false, true, LocalTempView, UNSUPPORTED, true +- Project [key#x, value1#x, value2#x] +- SubqueryAlias testData +- LocalRelation [key#x, value1#x, value2#x] @@ -25,7 +25,7 @@ AS testData2(A, B, c, d) -- !query analysis CreateViewCommand `testData2`, SELECT * FROM VALUES (1, 1, 1, 2), (1, 2, 1, 2), (2, 1, 2, 3), (2, 2, 2, 3), (3, 1, 3, 4), (3, 2, 3, 4) -AS testData2(A, B, c, d), false, true, LocalTempView, true +AS testData2(A, B, c, d), false, true, LocalTempView, UNSUPPORTED, true +- Project [A#x, B#x, c#x, d#x] +- SubqueryAlias testData2 +- LocalRelation [A#x, B#x, c#x, d#x] @@ -349,7 +349,7 @@ AS testdata3(a, b) -- !query analysis CreateViewCommand `testdata3`, SELECT * FROM VALUES (0, 1), (1, 2), (2, 3), (3, 4) -AS testdata3(a, b), false, true, LocalTempView, true +AS testdata3(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testdata3 +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/selectExcept.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/selectExcept.sql.out index 24119599c532d..e02562e29835f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/selectExcept.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/selectExcept.sql.out @@ -18,7 +18,7 @@ CreateViewCommand `tbl_view`, SELECT * FROM VALUES (50, "name5", named_struct("f1", 5, "s2", named_struct("f2", 505, "f3", "e"))), (60, "name6", named_struct("f1", 6, "s2", named_struct("f2", 606, "f3", "f"))), (70, "name7", named_struct("f1", 7, "s2", named_struct("f2", 707, "f3", "g"))) -AS tbl_view(id, name, data), false, false, LocalTempView, true +AS tbl_view(id, name, data), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, name#x, data#x] +- SubqueryAlias tbl_view +- LocalRelation [id#x, name#x, data#x] @@ -351,7 +351,7 @@ DropTempViewCommand tbl_view -- !query CREATE TEMPORARY VIEW v1 AS VALUES (1, 2, NULL, 4, 5) AS T(c1, c2, c3, c4, c5) -- !query analysis -CreateViewCommand `v1`, VALUES (1, 2, NULL, 4, 5) AS T(c1, c2, c3, c4, c5), false, false, LocalTempView, true +CreateViewCommand `v1`, VALUES (1, 2, NULL, 4, 5) AS T(c1, c2, c3, c4, c5), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [c1#x, c2#x, c3#x, c4#x, c5#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/show-create-table.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/show-create-table.sql.out index b44edb8dc4d96..b1c3ad59e1515 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/show-create-table.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/show-create-table.sql.out @@ -217,7 +217,7 @@ CreateDataSourceTableCommand `spark_catalog`.`default`.`tbl`, false CREATE VIEW view_SPARK_30302 (aaa, bbb) AS SELECT a, b FROM tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`view_SPARK_30302`, [(aaa,None), (bbb,None)], SELECT a, b FROM tbl, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`view_SPARK_30302`, [(aaa,None), (bbb,None)], SELECT a, b FROM tbl, false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- SubqueryAlias spark_catalog.default.tbl +- Relation spark_catalog.default.tbl[a#x,b#x,c#x] parquet @@ -246,7 +246,7 @@ CREATE VIEW view_SPARK_30302 (aaa COMMENT 'comment with \'quoted text\' for aaa' COMMENT 'This is a comment with \'quoted text\' for view' AS SELECT a, b FROM tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`view_SPARK_30302`, [(aaa,Some(comment with 'quoted text' for aaa)), (bbb,None)], This is a comment with 'quoted text' for view, SELECT a, b FROM tbl, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`view_SPARK_30302`, [(aaa,Some(comment with 'quoted text' for aaa)), (bbb,None)], This is a comment with 'quoted text' for view, SELECT a, b FROM tbl, false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- SubqueryAlias spark_catalog.default.tbl +- Relation spark_catalog.default.tbl[a#x,b#x,c#x] parquet @@ -275,7 +275,7 @@ CREATE VIEW view_SPARK_30302 (aaa, bbb) TBLPROPERTIES ('a' = '1', 'b' = '2') AS SELECT a, b FROM tbl -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`view_SPARK_30302`, [(aaa,None), (bbb,None)], [a=1, b=2], SELECT a, b FROM tbl, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`view_SPARK_30302`, [(aaa,None), (bbb,None)], [a=1, b=2], SELECT a, b FROM tbl, false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x] +- SubqueryAlias spark_catalog.default.tbl +- Relation spark_catalog.default.tbl[a#x,b#x,c#x] parquet diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/show-tables.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/show-tables.sql.out index ce5f7995f5d13..a86cc72f0863c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/show-tables.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/show-tables.sql.out @@ -40,7 +40,7 @@ CreateTempViewUsing [tableIdent:`show_t3` StructType(StructField(e,IntegerType,t -- !query CREATE GLOBAL TEMP VIEW show_t4 AS SELECT 1 as col1 -- !query analysis -CreateViewCommand `show_t4`, SELECT 1 as col1, false, false, GlobalTempView, true +CreateViewCommand `show_t4`, SELECT 1 as col1, false, false, GlobalTempView, UNSUPPORTED, true +- Project [1 AS col1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/show-tblproperties.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/show-tblproperties.sql.out index 0ea52d7d1e8cf..f4b29105b58a7 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/show-tblproperties.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/show-tblproperties.sql.out @@ -37,7 +37,7 @@ DropTable false, false -- !query CREATE VIEW view TBLPROPERTIES('p1'='v1', 'p2'='v2') AS SELECT 1 AS c1 -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`view`, [p1=v1, p2=v2], SELECT 1 AS c1, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`view`, [p1=v1, p2=v2], SELECT 1 AS c1, false, false, PersistedView, COMPENSATION, true +- Project [1 AS c1#x] +- OneRowRelation @@ -69,7 +69,7 @@ DropTableCommand `spark_catalog`.`default`.`view`, false, true, false -- !query CREATE TEMPORARY VIEW tv AS SELECT 1 AS c1 -- !query analysis -CreateViewCommand `tv`, SELECT 1 AS c1, false, false, LocalTempView, true +CreateViewCommand `tv`, SELECT 1 AS c1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS c1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/show-views.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/show-views.sql.out index c8f2c6f9cc029..ed3690ec5c6a3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/show-views.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/show-views.sql.out @@ -22,7 +22,7 @@ CreateDataSourceTableCommand `spark_catalog`.`showdb`.`tbl`, false -- !query CREATE VIEW view_1 AS SELECT * FROM tbl -- !query analysis -CreateViewCommand `spark_catalog`.`showdb`.`view_1`, SELECT * FROM tbl, false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`showdb`.`view_1`, SELECT * FROM tbl, false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x, c#x, d#x] +- SubqueryAlias spark_catalog.showdb.tbl +- Relation spark_catalog.showdb.tbl[a#x,b#x,c#x,d#x] parquet @@ -31,7 +31,7 @@ CreateViewCommand `spark_catalog`.`showdb`.`view_1`, SELECT * FROM tbl, false, f -- !query CREATE VIEW view_2 AS SELECT * FROM tbl WHERE c='a' -- !query analysis -CreateViewCommand `spark_catalog`.`showdb`.`view_2`, SELECT * FROM tbl WHERE c='a', false, false, PersistedView, true +CreateViewCommand `spark_catalog`.`showdb`.`view_2`, SELECT * FROM tbl WHERE c='a', false, false, PersistedView, COMPENSATION, true +- Project [a#x, b#x, c#x, d#x] +- Filter (c#x = a) +- SubqueryAlias spark_catalog.showdb.tbl @@ -41,7 +41,7 @@ CreateViewCommand `spark_catalog`.`showdb`.`view_2`, SELECT * FROM tbl WHERE c=' -- !query CREATE GLOBAL TEMP VIEW view_3 AS SELECT 1 as col1 -- !query analysis -CreateViewCommand `view_3`, SELECT 1 as col1, false, false, GlobalTempView, true +CreateViewCommand `view_3`, SELECT 1 as col1, false, false, GlobalTempView, UNSUPPORTED, true +- Project [1 AS col1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/show_columns.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/show_columns.sql.out index 55c744a8c0726..27e75187cdba7 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/show_columns.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/show_columns.sql.out @@ -34,7 +34,7 @@ CreateTempViewUsing [tableIdent:`showColumn3` StructType(StructField(col3,Intege -- !query CREATE GLOBAL TEMP VIEW showColumn4 AS SELECT 1 as col1, 'abc' as `col 5` -- !query analysis -CreateViewCommand `showColumn4`, SELECT 1 as col1, 'abc' as `col 5`, false, false, GlobalTempView, true +CreateViewCommand `showColumn4`, SELECT 1 as col1, 'abc' as `col 5`, false, false, GlobalTempView, UNSUPPORTED, true +- Project [1 AS col1#x, abc AS col 5#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/sql-compatibility-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/sql-compatibility-functions.sql.out index 12269b6fde94c..a18e4ede957cf 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/sql-compatibility-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/sql-compatibility-functions.sql.out @@ -102,7 +102,7 @@ org.apache.spark.sql.AnalysisException -- !query CREATE TEMPORARY VIEW tempView1 AS VALUES (1, NAMED_STRUCT('col1', 'gamma', 'col2', 'delta')) AS T(id, st) -- !query analysis -CreateViewCommand `tempView1`, VALUES (1, NAMED_STRUCT('col1', 'gamma', 'col2', 'delta')) AS T(id, st), false, false, LocalTempView, true +CreateViewCommand `tempView1`, VALUES (1, NAMED_STRUCT('col1', 'gamma', 'col2', 'delta')) AS T(id, st), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [id#x, st#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/sql-session-variables.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/sql-session-variables.sql.out index 68310ff48ed0c..f5ce5ed2e8b6e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/sql-session-variables.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/sql-session-variables.sql.out @@ -2060,7 +2060,7 @@ WithCTE -- !query CREATE OR REPLACE TEMPORARY VIEW v AS SELECT var1 AS c1 -- !query analysis -CreateViewCommand `v`, SELECT var1 AS c1, false, true, LocalTempView, true +CreateViewCommand `v`, SELECT var1 AS c1, false, true, LocalTempView, UNSUPPORTED, true +- Project [variablereference(system.session.var1=1) AS c1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/string-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/string-functions.sql.out index c36dec0b105d7..c9b451187356a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/string-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/string-functions.sql.out @@ -1435,7 +1435,7 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException -- !query CREATE TEMPORARY VIEW fmtTable(fmtField) AS SELECT * FROM VALUES ('invalidFormat') -- !query analysis -CreateViewCommand `fmtTable`, [(fmtField,None)], SELECT * FROM VALUES ('invalidFormat'), false, false, LocalTempView, true +CreateViewCommand `fmtTable`, [(fmtField,None)], SELECT * FROM VALUES ('invalidFormat'), false, false, LocalTempView, UNSUPPORTED, true +- Project [col1#x] +- LocalRelation [col1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/struct.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/struct.sql.out index c672353ecda6c..dba912cdff72e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/struct.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/struct.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `tbl_x`, VALUES (1, NAMED_STRUCT('C', 'gamma', 'D', 'delta')), (2, NAMED_STRUCT('C', 'epsilon', 'D', 'eta')), (3, NAMED_STRUCT('C', 'theta', 'D', 'iota')) - AS T(ID, ST), false, false, LocalTempView, true + AS T(ID, ST), false, false, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [ID#x, ST#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subexp-elimination.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subexp-elimination.sql.out index 8409212f136ad..94073f2751b3e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subexp-elimination.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subexp-elimination.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES ('{"a":1, "b":"2"}', '[{"a": 1, "b":2}, {"a":2, "b":2}]'), ('{"a":1, "b":"2"}', null), ('{"a":2, "b":"3"}', '[{"a": 3, "b":4}, {"a":4, "b":5}]'), ('{"a":5, "b":"6"}', '[{"a": 6, "b":7}, {"a":8, "b":9}]'), (null, '[{"a": 1, "b":2}, {"a":2, "b":2}]') -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-aggregate.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-aggregate.sql.out index b4c9632462527..4da75ae2764f5 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-aggregate.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-aggregate.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-basic.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-basic.sql.out index 9a2f65a7377f8..81c4a15dc9f4a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-basic.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-basic.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-count-bug.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-count-bug.sql.out index 01ab697a0dc30..e003c2624009b 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-count-bug.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-count-bug.sql.out @@ -2,21 +2,21 @@ -- !query create temporary view t1(c1, c2) as values (0, 1), (1, 2) -- !query analysis -CreateViewCommand `t1`, [(c1,None), (c2,None)], values (0, 1), (1, 2), false, false, LocalTempView, true +CreateViewCommand `t1`, [(c1,None), (c2,None)], values (0, 1), (1, 2), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query create temporary view t2(c1, c2) as values (0, 2), (0, 3) -- !query analysis -CreateViewCommand `t2`, [(c1,None), (c2,None)], values (0, 2), (0, 3), false, false, LocalTempView, true +CreateViewCommand `t2`, [(c1,None), (c2,None)], values (0, 2), (0, 3), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query create temporary view t3(c1, c2) as values (0, 3), (1, 4), (2, 5) -- !query analysis -CreateViewCommand `t3`, [(c1,None), (c2,None)], values (0, 3), (1, 4), (2, 5), false, false, LocalTempView, true +CreateViewCommand `t3`, [(c1,None), (c2,None)], values (0, 3), (1, 4), (2, 5), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-cte.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-cte.sql.out index b4338b34eea13..7c3678c66c117 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-cte.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-cte.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-having.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-having.sql.out index b053cb369adca..2409cd0559bd2 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-having.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-having.sql.out @@ -20,7 +20,7 @@ CreateViewCommand `EMP`, [(id,None), (emp_name,None), (hiredate,None), (salary,N (500, 'emp 5', date '2001-01-01', double(400.00), NULL), (600, 'emp 6 - no dept', date '2001-01-01', double(400.00), 100), (700, 'emp 7', date '2010-01-01', double(400.00), 100), - (800, 'emp 8', date '2016-01-01', double(150.00), 70), false, false, LocalTempView, true + (800, 'emp 8', date '2016-01-01', double(150.00), 70), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x, col4#x, col5#x] @@ -39,7 +39,7 @@ CreateViewCommand `DEPT`, [(dept_id,None), (dept_name,None), (state,None)], VALU (30, 'dept 3', 'TX'), (40, 'dept 4 - unassigned', 'OR'), (50, 'dept 5 - unassigned', 'NJ'), - (70, 'dept 7', 'FL'), false, false, LocalTempView, true + (70, 'dept 7', 'FL'), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x] @@ -62,7 +62,7 @@ CreateViewCommand `BONUS`, [(emp_name,None), (bonus_amt,None)], VALUES ('emp 3', double(300.00)), ('emp 4', double(100.00)), ('emp 5', double(1000.00)), - ('emp 6 - no dept', double(500.00)), false, false, LocalTempView, true + ('emp 6 - no dept', double(500.00)), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-in-join-condition.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-in-join-condition.sql.out index da8ea257cfa70..1b09e8798a325 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-in-join-condition.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-in-join-condition.sql.out @@ -8,7 +8,7 @@ CREATE TEMP VIEW x(x1, x2) AS VALUES CreateViewCommand `x`, [(x1,None), (x2,None)], VALUES (2, 1), (1, 1), - (3, 4), false, false, LocalTempView, true + (3, 4), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -21,7 +21,7 @@ CREATE TEMP VIEW y(y1, y2) AS VALUES CreateViewCommand `y`, [(y1,None), (y2,None)], VALUES (0, 2), (1, 4), - (4, 11), false, false, LocalTempView, true + (4, 11), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -34,7 +34,7 @@ CREATE TEMP VIEW z(z1, z2) AS VALUES CreateViewCommand `z`, [(z1,None), (z2,None)], VALUES (4, 2), (3, 3), - (8, 1), false, false, LocalTempView, true + (8, 1), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-joins-and-set-ops.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-joins-and-set-ops.sql.out index 99de720ac47d9..55b10125f7680 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-joins-and-set-ops.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-joins-and-set-ops.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-orderby-limit.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-orderby-limit.sql.out index 4bfb6c5b843cd..3f56e346d0a53 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-orderby-limit.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-orderby-limit.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-outside-filter.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-outside-filter.sql.out index a0e485b49096e..d15466f04f800 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-outside-filter.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-outside-filter.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-within-and-or.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-within-and-or.sql.out index c43c920971d0e..7b846e5eae9c8 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-within-and-or.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/exists-subquery/exists-within-and-or.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -45,7 +45,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -72,7 +72,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-basic.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-basic.sql.out index ca68b169b41f8..4d59da8c393af 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-basic.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-basic.sql.out @@ -2,7 +2,7 @@ -- !query create temporary view tab_a as select * from values (1, 1) as tab_a(a1, b1) -- !query analysis -CreateViewCommand `tab_a`, select * from values (1, 1) as tab_a(a1, b1), false, false, LocalTempView, true +CreateViewCommand `tab_a`, select * from values (1, 1) as tab_a(a1, b1), false, false, LocalTempView, UNSUPPORTED, true +- Project [a1#x, b1#x] +- SubqueryAlias tab_a +- LocalRelation [a1#x, b1#x] @@ -11,7 +11,7 @@ CreateViewCommand `tab_a`, select * from values (1, 1) as tab_a(a1, b1), false, -- !query create temporary view tab_b as select * from values (1, 1) as tab_b(a2, b2) -- !query analysis -CreateViewCommand `tab_b`, select * from values (1, 1) as tab_b(a2, b2), false, false, LocalTempView, true +CreateViewCommand `tab_b`, select * from values (1, 1) as tab_b(a2, b2), false, false, LocalTempView, UNSUPPORTED, true +- Project [a2#x, b2#x] +- SubqueryAlias tab_b +- LocalRelation [a2#x, b2#x] @@ -22,7 +22,7 @@ create temporary view struct_tab as select struct(col1 as a, col2 as b) as recor values (1, 1), (1, 2), (2, 1), (2, 2) -- !query analysis CreateViewCommand `struct_tab`, select struct(col1 as a, col2 as b) as record from - values (1, 1), (1, 2), (2, 1), (2, 2), false, false, LocalTempView, true + values (1, 1), (1, 2), (2, 1), (2, 2), false, false, LocalTempView, UNSUPPORTED, true +- Project [struct(a, col1#x, b, col2#x) AS record#x] +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-count-bug.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-count-bug.sql.out index 390b9a886c31b..39a0a0d5997ff 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-count-bug.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-count-bug.sql.out @@ -2,21 +2,21 @@ -- !query create temporary view t1(c1, c2) as values (0, 1), (1, 2) -- !query analysis -CreateViewCommand `t1`, [(c1,None), (c2,None)], values (0, 1), (1, 2), false, false, LocalTempView, true +CreateViewCommand `t1`, [(c1,None), (c2,None)], values (0, 1), (1, 2), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query create temporary view t2(c1, c2) as values (0, 2), (0, 3) -- !query analysis -CreateViewCommand `t2`, [(c1,None), (c2,None)], values (0, 2), (0, 3), false, false, LocalTempView, true +CreateViewCommand `t2`, [(c1,None), (c2,None)], values (0, 2), (0, 3), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query create temporary view t3(c1, c2) as values (0, 3), (1, 4), (2, 5) -- !query analysis -CreateViewCommand `t3`, [(c1,None), (c2,None)], values (0, 3), (1, 4), (2, 5), false, false, LocalTempView, true +CreateViewCommand `t3`, [(c1,None), (c2,None)], values (0, 3), (1, 4), (2, 5), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-group-by.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-group-by.sql.out index 2c5e9eb6733d9..5a253f633bb11 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-group-by.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-group-by.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("t1d", 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("t1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("t1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("t1e", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("t1f", 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("t1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("t1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null), ("t3b", 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("t3b", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-having.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-having.sql.out index ec2cc088bf8a9..bddc9d16d7eba 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-having.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-having.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-joins.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-joins.sql.out index 0dfba13398228..46b4a78b9a745 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-joins.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-joins.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] @@ -113,7 +113,7 @@ create temporary view s1 as select * from values -- !query analysis CreateViewCommand `s1`, select * from values (1), (3), (5), (7), (9) - as s1(id), false, false, LocalTempView, true + as s1(id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias s1 +- LocalRelation [id#x] @@ -126,7 +126,7 @@ create temporary view s2 as select * from values -- !query analysis CreateViewCommand `s2`, select * from values (1), (3), (4), (6), (9) - as s2(id), false, false, LocalTempView, true + as s2(id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias s2 +- LocalRelation [id#x] @@ -139,7 +139,7 @@ create temporary view s3 as select * from values -- !query analysis CreateViewCommand `s3`, select * from values (3), (4), (6), (9) - as s3(id), false, false, LocalTempView, true + as s3(id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias s3 +- LocalRelation [id#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-limit.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-limit.sql.out index d19155916f4ad..a828cb92e59d3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-limit.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-limit.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-multiple-columns.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-multiple-columns.sql.out index f4cca5fd385bb..39748a324e527 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-multiple-columns.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-multiple-columns.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-null-semantics.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-null-semantics.sql.out index 7816958795d01..51fb2455c19f8 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-null-semantics.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-null-semantics.sql.out @@ -2,14 +2,14 @@ -- !query create temp view v (c) as values (1), (null) -- !query analysis -CreateViewCommand `v`, [(c,None)], values (1), (null), false, false, LocalTempView, true +CreateViewCommand `v`, [(c,None)], values (1), (null), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x] -- !query create temp view v_empty (e) as select 1 where false -- !query analysis -CreateViewCommand `v_empty`, [(e,None)], select 1 where false, false, false, LocalTempView, true +CreateViewCommand `v_empty`, [(e,None)], select 1 where false, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- Filter false +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-nullability.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-nullability.sql.out index 34a14c6f73d15..24c8273f475a8 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-nullability.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-nullability.sql.out @@ -2,7 +2,7 @@ -- !query create temp view t0 as select 1 as a_nonnullable -- !query analysis -CreateViewCommand `t0`, select 1 as a_nonnullable, false, false, LocalTempView, true +CreateViewCommand `t0`, select 1 as a_nonnullable, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS a_nonnullable#x] +- OneRowRelation @@ -10,7 +10,7 @@ CreateViewCommand `t0`, select 1 as a_nonnullable, false, false, LocalTempView, -- !query create temp view t1 as select cast(null as int) as b_nullable -- !query analysis -CreateViewCommand `t1`, select cast(null as int) as b_nullable, false, false, LocalTempView, true +CreateViewCommand `t1`, select cast(null as int) as b_nullable, false, false, LocalTempView, UNSUPPORTED, true +- Project [cast(null as int) AS b_nullable#x] +- OneRowRelation @@ -18,7 +18,7 @@ CreateViewCommand `t1`, select cast(null as int) as b_nullable, false, false, Lo -- !query create temp view t2 as select 2 as c -- !query analysis -CreateViewCommand `t2`, select 2 as c, false, false, LocalTempView, true +CreateViewCommand `t2`, select 2 as c, false, false, LocalTempView, UNSUPPORTED, true +- Project [2 AS c#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-order-by.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-order-by.sql.out index 3f78e0c62c03e..075e4c90d8110 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-order-by.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-order-by.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-set-operations.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-set-operations.sql.out index de8864ec73bbd..9239670589bcb 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-set-operations.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-set-operations.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-subquery-in-join-condition.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-subquery-in-join-condition.sql.out index 712d94ce323d6..422ac4d5c2cbf 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-subquery-in-join-condition.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-subquery-in-join-condition.sql.out @@ -8,7 +8,7 @@ CREATE TEMP VIEW x(x1, x2) AS VALUES CreateViewCommand `x`, [(x1,None), (x2,None)], VALUES (2, 1), (1, 1), - (3, 4), false, false, LocalTempView, true + (3, 4), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -21,7 +21,7 @@ CREATE TEMP VIEW y(y1, y2) AS VALUES CreateViewCommand `y`, [(y1,None), (y2,None)], VALUES (0, 2), (1, 4), - (4, 11), false, false, LocalTempView, true + (4, 11), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -34,7 +34,7 @@ CREATE TEMP VIEW z(z1, z2) AS VALUES CreateViewCommand `z`, [(z1,None), (z2,None)], VALUES (4, 2), (3, 3), - (8, 1), false, false, LocalTempView, true + (8, 1), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-with-cte.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-with-cte.sql.out index 5c1465d4fc136..0074991b4ea6a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-with-cte.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/in-with-cte.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/nested-not-in.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/nested-not-in.sql.out index 5dd0d161aed82..a098d19da594d 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/nested-not-in.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/nested-not-in.sql.out @@ -18,7 +18,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (500, "emp 5", NULL), (600, "emp 6", 100), (800, "emp 8", 70) -AS EMP(id, emp_name, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, dept_id#x] @@ -41,7 +41,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] @@ -68,7 +68,7 @@ CreateViewCommand `BONUS`, SELECT * FROM VALUES ("emp 4", 100.00D), ("emp 5", 1000.00D), ("emp 6 - no dept", 500.00D) -AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, true +AS BONUS(emp_name, bonus_amt), false, false, LocalTempView, UNSUPPORTED, true +- Project [emp_name#x, bonus_amt#x] +- SubqueryAlias BONUS +- LocalRelation [emp_name#x, bonus_amt#x] @@ -91,7 +91,7 @@ CreateViewCommand `ADDRESS`, SELECT * FROM VALUES (null, null, "addr4"), (600, "emp 6", "addr6"), (800, "emp 8", "addr8") -AS ADDRESS(id, emp_name, address), false, false, LocalTempView, true +AS ADDRESS(id, emp_name, address), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, address#x] +- SubqueryAlias ADDRESS +- LocalRelation [id#x, emp_name#x, address#x] @@ -102,7 +102,7 @@ CREATE TEMPORARY VIEW S1 AS SELECT * FROM VALUES (null, null), (5, 5), (8, 8), (11, 11) AS s1(a, b) -- !query analysis CreateViewCommand `S1`, SELECT * FROM VALUES - (null, null), (5, 5), (8, 8), (11, 11) AS s1(a, b), false, false, LocalTempView, true + (null, null), (5, 5), (8, 8), (11, 11) AS s1(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias s1 +- LocalRelation [a#x, b#x] @@ -113,7 +113,7 @@ CREATE TEMPORARY VIEW S2 AS SELECT * FROM VALUES (7, 7), (8, 8), (11, 11), (null, null) AS s2(c, d) -- !query analysis CreateViewCommand `S2`, SELECT * FROM VALUES - (7, 7), (8, 8), (11, 11), (null, null) AS s2(c, d), false, false, LocalTempView, true + (7, 7), (8, 8), (11, 11), (null, null) AS s2(c, d), false, false, LocalTempView, UNSUPPORTED, true +- Project [c#x, d#x] +- SubqueryAlias s2 +- LocalRelation [c#x, d#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-group-by.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-group-by.sql.out index b2559f63ea642..724f9f29894c1 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-group-by.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-group-by.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-joins.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-joins.sql.out index 5f6a4b9d0a546..90bcb4818091f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-joins.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-joins.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("val1d", 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("val1a", 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("val1e", 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("val1e", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("val1f", 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("val1b", null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ("val3b", 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("val3b", 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column-literal.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column-literal.sql.out index 0844e2540acc8..e8a8e46d1d122 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column-literal.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column-literal.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `m`, SELECT * FROM VALUES (null, 1.0), (2, 3.0), (4, 5.0) - AS m(a, b), false, false, LocalTempView, true + AS m(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias m +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column.sql.out index 7578a97548e06..f7dac3e2c4675 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-multi-column.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `m`, SELECT * FROM VALUES (null, 1.0), (2, 3.0), (4, 5.0) - AS m(a, b), false, false, LocalTempView, true + AS m(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias m +- LocalRelation [a#x, b#x] @@ -31,7 +31,7 @@ CreateViewCommand `s`, SELECT * FROM VALUES (0, 1.0), (2, 3.0), (4, null) - AS s(c, d), false, false, LocalTempView, true + AS s(c, d), false, false, LocalTempView, UNSUPPORTED, true +- Project [c#x, d#x] +- SubqueryAlias s +- LocalRelation [c#x, d#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column-literal.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column-literal.sql.out index f1c047fddd955..7de84bb97346a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column-literal.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column-literal.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `m`, SELECT * FROM VALUES (null, 1.0), (2, 3.0), (4, 5.0) - AS m(a, b), false, false, LocalTempView, true + AS m(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias m +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column.sql.out index 0b63a774631af..8c234dd5b7d70 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/not-in-unit-tests-single-column.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `m`, SELECT * FROM VALUES (null, 1.0), (2, 3.0), (4, 5.0) - AS m(a, b), false, false, LocalTempView, true + AS m(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias m +- LocalRelation [a#x, b#x] @@ -27,7 +27,7 @@ CreateViewCommand `s`, SELECT * FROM VALUES (null, 1.0), (2, 3.0), (6, 7.0) - AS s(c, d), false, false, LocalTempView, true + AS s(c, d), false, false, LocalTempView, UNSUPPORTED, true +- Project [c#x, d#x] +- SubqueryAlias s +- LocalRelation [c#x, d#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/simple-in.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/simple-in.sql.out index e95de3f5a0f1d..f3f5aa7fcade4 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/simple-in.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/in-subquery/simple-in.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ("t1d", 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ("t1a", 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ("t1e", 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ("t1e", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ("t1f", 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ("t1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ("t1b", null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null), ("t3b", 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ("t3b", 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] @@ -317,7 +317,7 @@ create temporary view a as select * from values -- !query analysis CreateViewCommand `a`, select * from values (1, 1), (2, 1), (null, 1), (1, 3), (null, 3), (1, null), (null, 2) - as a(a1, a2), false, false, LocalTempView, true + as a(a1, a2), false, false, LocalTempView, UNSUPPORTED, true +- Project [a1#x, a2#x] +- SubqueryAlias a +- LocalRelation [a1#x, a2#x] @@ -330,7 +330,7 @@ create temporary view b as select * from values -- !query analysis CreateViewCommand `b`, select * from values (1, 1, 2), (null, 3, 2), (1, null, 2), (1, 2, null) - as b(b1, b2, b3), false, false, LocalTempView, true + as b(b1, b2, b3), false, false, LocalTempView, UNSUPPORTED, true +- Project [b1#x, b2#x, b3#x] +- SubqueryAlias b +- LocalRelation [b1#x, b2#x, b3#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/invalid-correlation.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/invalid-correlation.sql.out index 62aa6be0bd118..95b38e1c7e0f5 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/invalid-correlation.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/invalid-correlation.sql.out @@ -6,7 +6,7 @@ AS t1(t1a, t1b, t1c) -- !query analysis CreateViewCommand `t1`, SELECT * FROM VALUES (1, 2, 3) -AS t1(t1a, t1b, t1c), false, false, LocalTempView, true +AS t1(t1a, t1b, t1c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x] @@ -19,7 +19,7 @@ AS t2(t2a, t2b, t2c) -- !query analysis CreateViewCommand `t2`, SELECT * FROM VALUES (1, 0, 1) -AS t2(t2a, t2b, t2c), false, false, LocalTempView, true +AS t2(t2a, t2b, t2c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x] @@ -32,7 +32,7 @@ AS t3(t3a, t3b, t3c) -- !query analysis CreateViewCommand `t3`, SELECT * FROM VALUES (3, 1, 2) -AS t3(t3a, t3b, t3c), false, false, LocalTempView, true +AS t3(t3a, t3b, t3c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x] @@ -178,7 +178,7 @@ AS t1(t1a, t1b, t1c) -- !query analysis CreateViewCommand `t1_copy`, SELECT * FROM VALUES (1, 2, 3) -AS t1(t1a, t1b, t1c), false, false, LocalTempView, true +AS t1(t1a, t1b, t1c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/subq-input-typecheck.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/subq-input-typecheck.sql.out index e550e52bf64b0..dbbb3e2d7062b 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/subq-input-typecheck.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/negative-cases/subq-input-typecheck.sql.out @@ -6,7 +6,7 @@ AS t1(t1a, t1b, t1c) -- !query analysis CreateViewCommand `t1`, SELECT * FROM VALUES (1, 2, 3) -AS t1(t1a, t1b, t1c), false, false, LocalTempView, true +AS t1(t1a, t1b, t1c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x] @@ -19,7 +19,7 @@ AS t2(t2a, t2b, t2c) -- !query analysis CreateViewCommand `t2`, SELECT * FROM VALUES (1, 0, 1) -AS t2(t2a, t2b, t2c), false, false, LocalTempView, true +AS t2(t2a, t2b, t2c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x] @@ -32,7 +32,7 @@ AS t3(t3a, t3b, t3c) -- !query analysis CreateViewCommand `t3`, SELECT * FROM VALUES (3, 1, 2) -AS t3(t3a, t3b, t3c), false, false, LocalTempView, true +AS t3(t3a, t3b, t3c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x] @@ -45,7 +45,7 @@ AS t1(t4a, t4b, t4c) -- !query analysis CreateViewCommand `t4`, SELECT * FROM VALUES (CAST(1 AS DOUBLE), CAST(2 AS STRING), CAST(3 AS STRING)) -AS t1(t4a, t4b, t4c), false, false, LocalTempView, true +AS t1(t4a, t4b, t4c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t4a#x, t4b#x, t4c#x] +- SubqueryAlias t1 +- LocalRelation [t4a#x, t4b#x, t4c#x] @@ -58,7 +58,7 @@ AS t1(t5a, t5b, t5c) -- !query analysis CreateViewCommand `t5`, SELECT * FROM VALUES (CAST('2011-01-01 01:01:01' AS TIMESTAMP), CAST(2 AS STRING), CAST(3 AS BIGINT)) -AS t1(t5a, t5b, t5c), false, false, LocalTempView, true +AS t1(t5a, t5b, t5c), false, false, LocalTempView, UNSUPPORTED, true +- Project [t5a#x, t5b#x, t5c#xL] +- SubqueryAlias t1 +- LocalRelation [t5a#x, t5b#x, t5c#xL] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/nested-scalar-subquery-count-bug.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/nested-scalar-subquery-count-bug.sql.out index 0dc4fa9e4808f..2a1abc0d48871 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/nested-scalar-subquery-count-bug.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/nested-scalar-subquery-count-bug.sql.out @@ -2,21 +2,21 @@ -- !query CREATE OR REPLACE VIEW t1(a1, a2) as values (0, 1), (1, 2) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t1`, [(a1,None), (a2,None)], values (0, 1), (1, 2), false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t1`, [(a1,None), (a2,None)], values (0, 1), (1, 2), false, true, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] -- !query CREATE OR REPLACE VIEW t2(b1, b2) as values (0, 2), (0, 3) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t2`, [(b1,None), (b2,None)], values (0, 2), (0, 3), false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t2`, [(b1,None), (b2,None)], values (0, 2), (0, 3), false, true, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] -- !query CREATE OR REPLACE VIEW t3(c1, c2) as values (0, 2), (0, 3) -- !query analysis -CreateViewCommand `spark_catalog`.`default`.`t3`, [(c1,None), (c2,None)], values (0, 2), (0, 3), false, true, PersistedView, true +CreateViewCommand `spark_catalog`.`default`.`t3`, [(c1,None), (c2,None)], values (0, 2), (0, 3), false, true, PersistedView, COMPENSATION, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-count-bug.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-count-bug.sql.out index f40deb3ead5ab..ebe071c5261fd 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-count-bug.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-count-bug.sql.out @@ -19,7 +19,7 @@ CreateViewCommand `l`, [(a,None), (b,None)], values (3, 3.0), (null, null), (null, 5.0), - (6, null), false, false, LocalTempView, true + (6, null), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -41,7 +41,7 @@ CreateViewCommand `r`, [(c,None), (d,None)], values (4, 1.0), (null, null), (null, 5.0), - (6, null), false, false, LocalTempView, true + (6, null), false, false, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -171,7 +171,7 @@ Project [a#x, b#x, scalar-subquery#x [a#x] AS scalarsubquery(a)#xL] -- !query CREATE TEMPORARY VIEW null_view(a, b) AS SELECT CAST(null AS int), CAST(null as int) -- !query analysis -CreateViewCommand `null_view`, [(a,None), (b,None)], SELECT CAST(null AS int), CAST(null as int), false, false, LocalTempView, true +CreateViewCommand `null_view`, [(a,None), (b,None)], SELECT CAST(null AS int), CAST(null as int), false, false, LocalTempView, UNSUPPORTED, true +- Project [cast(null as int) AS CAST(NULL AS INT)#x, cast(null as int) AS CAST(NULL AS INT)#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-predicate.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-predicate.sql.out index 48769f90faffd..3648a97e9872a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-predicate.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-predicate.sql.out @@ -2,7 +2,7 @@ -- !query CREATE OR REPLACE TEMPORARY VIEW p AS VALUES (1, 1) AS T(pk, pv) -- !query analysis -CreateViewCommand `p`, VALUES (1, 1) AS T(pk, pv), false, true, LocalTempView, true +CreateViewCommand `p`, VALUES (1, 1) AS T(pk, pv), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [pk#x, pv#x] @@ -10,7 +10,7 @@ CreateViewCommand `p`, VALUES (1, 1) AS T(pk, pv), false, true, LocalTempView, t -- !query CREATE OR REPLACE TEMPORARY VIEW c AS VALUES (1, 1) AS T(ck, cv) -- !query analysis -CreateViewCommand `c`, VALUES (1, 1) AS T(ck, cv), false, true, LocalTempView, true +CreateViewCommand `c`, VALUES (1, 1) AS T(ck, cv), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [ck#x, cv#x] @@ -110,7 +110,7 @@ CreateViewCommand `t1`, select * from values ('val1d', 10S, null, 12L, float(17.0), 25D, 26E2BD, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ('val1a', 6S, 8, 10L, float(15.0), 20D, 20E2BD, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ('val1e', 10S, null, 19L, float(17.0), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -147,7 +147,7 @@ CreateViewCommand `t2`, select * from values ('val1e', 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ('val1f', 19S, null, 19L, float(17), 25D, 26E2BD, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ('val1b', null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -182,7 +182,7 @@ CreateViewCommand `t3`, select * from values ('val1b', null, 16, 19L, float(17), 25D, 26E2BD, timestamp '2014-11-04 01:02:00.000', null), ('val3b', 8S, null, 719L, float(17), 25D, 26E2BD, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ('val3b', 8S, null, 19L, float(17), 25D, 26E2BD, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] @@ -1254,21 +1254,21 @@ Project [t1a#x, t1b#x] -- !query CREATE OR REPLACE TEMP VIEW t0(t0a, t0b) AS VALUES (1, 1), (2, 0) -- !query analysis -CreateViewCommand `t0`, [(t0a,None), (t0b,None)], VALUES (1, 1), (2, 0), false, true, LocalTempView, true +CreateViewCommand `t0`, [(t0a,None), (t0b,None)], VALUES (1, 1), (2, 0), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query CREATE OR REPLACE TEMP VIEW t1(t1a, t1b, t1c) AS VALUES (1, 1, 3) -- !query analysis -CreateViewCommand `t1`, [(t1a,None), (t1b,None), (t1c,None)], VALUES (1, 1, 3), false, true, LocalTempView, true +CreateViewCommand `t1`, [(t1a,None), (t1b,None), (t1c,None)], VALUES (1, 1, 3), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x] -- !query CREATE OR REPLACE TEMP VIEW t2(t2a, t2b, t2c) AS VALUES (1, 1, 5), (2, 2, 7) -- !query analysis -CreateViewCommand `t2`, [(t2a,None), (t2b,None), (t2c,None)], VALUES (1, 1, 5), (2, 2, 7), false, true, LocalTempView, true +CreateViewCommand `t2`, [(t2a,None), (t2b,None), (t2c,None)], VALUES (1, 1, 5), (2, 2, 7), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-select.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-select.sql.out index b7923b123d983..72e230f9bb881 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-select.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-select.sql.out @@ -28,7 +28,7 @@ CreateViewCommand `t1`, select * from values ('val1d', 10S, null, 12L, float(17.0), 25D, 26E2, timestamp '2015-05-04 01:01:00.000', date '2015-05-04'), ('val1a', 6S, 8, 10L, float(15.0), 20D, 20E2, timestamp '2014-04-04 01:02:00.001', date '2014-04-04'), ('val1e', 10S, null, 19L, float(17.0), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', date '2014-05-04') - as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, true + as t1(t1a, t1b, t1c, t1d, t1e, t1f, t1g, t1h, t1i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] +- SubqueryAlias t1 +- LocalRelation [t1a#x, t1b#x, t1c#x, t1d#xL, t1e#x, t1f#x, t1g#x, t1h#x, t1i#x] @@ -65,7 +65,7 @@ CreateViewCommand `t2`, select * from values ('val1e', 8S, null, 19L, float(17), 25D, 26E2, timestamp '2014-09-04 01:01:00.000', date '2014-09-04'), ('val1f', 19S, null, 19L, float(17), 25D, 26E2, timestamp '2014-10-04 01:01:00.000', date '2014-10-04'), ('val1b', null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-05-04 01:01:00.000', null) - as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, true + as t2(t2a, t2b, t2c, t2d, t2e, t2f, t2g, t2h, t2i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] +- SubqueryAlias t2 +- LocalRelation [t2a#x, t2b#x, t2c#x, t2d#xL, t2e#x, t2f#x, t2g#x, t2h#x, t2i#x] @@ -100,7 +100,7 @@ CreateViewCommand `t3`, select * from values ('val1b', null, 16, 19L, float(17), 25D, 26E2, timestamp '2014-11-04 01:02:00.000', null), ('val3b', 8S, null, 719L, float(17), 25D, 26E2, timestamp '2014-05-04 01:02:00.000', date '2014-05-04'), ('val3b', 8S, null, 19L, float(17), 25D, 26E2, timestamp '2015-05-04 01:02:00.000', date '2015-05-04') - as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, true + as t3(t3a, t3b, t3c, t3d, t3e, t3f, t3g, t3h, t3i), false, false, LocalTempView, UNSUPPORTED, true +- Project [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] +- SubqueryAlias t3 +- LocalRelation [t3a#x, t3b#x, t3c#x, t3d#xL, t3e#x, t3f#x, t3g#x, t3h#x, t3i#x] @@ -599,7 +599,7 @@ Project [t1a#x, scalar-subquery#x [t1a#x] AS scalarsubquery(t1a)#xL] -- !query CREATE OR REPLACE TEMPORARY VIEW t1 AS VALUES (0, 1), (1, 2) t1(c1, c2) -- !query analysis -CreateViewCommand `t1`, VALUES (0, 1), (1, 2) t1(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t1`, VALUES (0, 1), (1, 2) t1(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t1 +- LocalRelation [c1#x, c2#x] @@ -607,7 +607,7 @@ CreateViewCommand `t1`, VALUES (0, 1), (1, 2) t1(c1, c2), false, true, LocalTemp -- !query CREATE OR REPLACE TEMPORARY VIEW t2 AS VALUES (0, 2), (0, 3) t2(c1, c2) -- !query analysis -CreateViewCommand `t2`, VALUES (0, 2), (0, 3) t2(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t2`, VALUES (0, 2), (0, 3) t2(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t2 +- LocalRelation [c1#x, c2#x] @@ -820,14 +820,14 @@ Project [scalar-subquery#x [] AS b#x] -- !query CREATE OR REPLACE TEMP VIEW t1(c1, c2) AS (VALUES (0, 1), (1, 2)) -- !query analysis -CreateViewCommand `t1`, [(c1,None), (c2,None)], (VALUES (0, 1), (1, 2)), false, true, LocalTempView, true +CreateViewCommand `t1`, [(c1,None), (c2,None)], (VALUES (0, 1), (1, 2)), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query CREATE OR REPLACE TEMP VIEW t2(c1, c2) AS (VALUES (0, 2), (0, 3)) -- !query analysis -CreateViewCommand `t2`, [(c1,None), (c2,None)], (VALUES (0, 2), (0, 3)), false, true, LocalTempView, true +CreateViewCommand `t2`, [(c1,None), (c2,None)], (VALUES (0, 2), (0, 3)), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] @@ -840,7 +840,7 @@ CREATE OR REPLACE TEMP VIEW students(id, name, major, year) AS (VALUES CreateViewCommand `students`, [(id,None), (name,None), (major,None), (year,None)], (VALUES (0, 'A', 'CS', 2022), (1, 'B', 'CS', 2022), - (2, 'C', 'Math', 2022)), false, true, LocalTempView, true + (2, 'C', 'Math', 2022)), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x, col4#x] @@ -855,7 +855,7 @@ CreateViewCommand `exams`, [(sid,None), (course,None), (curriculum,None), (grade (0, 'C1', 'CS', 4, 2020), (0, 'C2', 'CS', 3, 2021), (1, 'C1', 'CS', 2, 2020), - (1, 'C2', 'CS', 1, 2021)), false, true, LocalTempView, true + (1, 'C2', 'CS', 1, 2021)), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x, col4#x, col5#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-set-op.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-set-op.sql.out index eeea71f6cd4f2..eaeff0ba9dedb 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-set-op.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/scalar-subquery/scalar-subquery-set-op.sql.out @@ -2,21 +2,21 @@ -- !query CREATE OR REPLACE TEMP VIEW t0(t0a, t0b) AS VALUES (1, 1), (2, 0) -- !query analysis -CreateViewCommand `t0`, [(t0a,None), (t0b,None)], VALUES (1, 1), (2, 0), false, true, LocalTempView, true +CreateViewCommand `t0`, [(t0a,None), (t0b,None)], VALUES (1, 1), (2, 0), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] -- !query CREATE OR REPLACE TEMP VIEW t1(t1a, t1b, t1c) AS VALUES (1, 1, 3) -- !query analysis -CreateViewCommand `t1`, [(t1a,None), (t1b,None), (t1c,None)], VALUES (1, 1, 3), false, true, LocalTempView, true +CreateViewCommand `t1`, [(t1a,None), (t1b,None), (t1c,None)], VALUES (1, 1, 3), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x] -- !query CREATE OR REPLACE TEMP VIEW t2(t2a, t2b, t2c) AS VALUES (1, 1, 5), (2, 2, 7) -- !query analysis -CreateViewCommand `t2`, [(t2a,None), (t2b,None), (t2c,None)], VALUES (1, 1, 5), (2, 2, 7), false, true, LocalTempView, true +CreateViewCommand `t2`, [(t2a,None), (t2b,None), (t2c,None)], VALUES (1, 1, 5), (2, 2, 7), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x, col3#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/subquery-offset.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/subquery-offset.sql.out index 428df8e6adf8e..104c1b0f41a10 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/subquery-offset.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/subquery/subquery-offset.sql.out @@ -139,7 +139,7 @@ CreateViewCommand `EMP`, SELECT * FROM VALUES (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100), (700, "emp 7", date "2010-01-01", 400.00D, 100), (800, "emp 8", date "2016-01-01", 150.00D, 70) -AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, true +AS EMP(id, emp_name, hiredate, salary, dept_id), false, false, LocalTempView, UNSUPPORTED, true +- Project [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] +- SubqueryAlias EMP +- LocalRelation [id#x, emp_name#x, hiredate#x, salary#x, dept_id#x] @@ -162,7 +162,7 @@ CreateViewCommand `DEPT`, SELECT * FROM VALUES (40, "dept 4 - unassigned", "OR"), (50, "dept 5 - unassigned", "NJ"), (70, "dept 7", "FL") -AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, true +AS DEPT(dept_id, dept_name, state), false, false, LocalTempView, UNSUPPORTED, true +- Project [dept_id#x, dept_name#x, state#x] +- SubqueryAlias DEPT +- LocalRelation [dept_id#x, dept_name#x, state#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/table-aliases.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/table-aliases.sql.out index a889e549d99cc..8d4bffd868753 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/table-aliases.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/table-aliases.sql.out @@ -2,7 +2,7 @@ -- !query CREATE OR REPLACE TEMPORARY VIEW testData AS SELECT * FROM VALUES (1, 1), (1, 2), (2, 1) AS testData(a, b) -- !query analysis -CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1) AS testData(a, b), false, true, LocalTempView, true +CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1) AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] @@ -158,7 +158,7 @@ Project [col1#x, col2#x] -- !query CREATE OR REPLACE TEMPORARY VIEW src1 AS SELECT * FROM VALUES (1, "a"), (2, "b"), (3, "c") AS src1(id, v1) -- !query analysis -CreateViewCommand `src1`, SELECT * FROM VALUES (1, "a"), (2, "b"), (3, "c") AS src1(id, v1), false, true, LocalTempView, true +CreateViewCommand `src1`, SELECT * FROM VALUES (1, "a"), (2, "b"), (3, "c") AS src1(id, v1), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, v1#x] +- SubqueryAlias src1 +- LocalRelation [id#x, v1#x] @@ -167,7 +167,7 @@ CreateViewCommand `src1`, SELECT * FROM VALUES (1, "a"), (2, "b"), (3, "c") AS s -- !query CREATE OR REPLACE TEMPORARY VIEW src2 AS SELECT * FROM VALUES (2, 1.0), (3, 3.2), (1, 8.5) AS src2(id, v2) -- !query analysis -CreateViewCommand `src2`, SELECT * FROM VALUES (2, 1.0), (3, 3.2), (1, 8.5) AS src2(id, v2), false, true, LocalTempView, true +CreateViewCommand `src2`, SELECT * FROM VALUES (2, 1.0), (3, 3.2), (1, 8.5) AS src2(id, v2), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, v2#x] +- SubqueryAlias src2 +- LocalRelation [id#x, v2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/timestamp.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/timestamp.sql.out index 4a48795e4cca5..6ca35b8b141dc 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/timestamp.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/timestamp.sql.out @@ -236,7 +236,7 @@ create temporary view ttf1 as select * from values CreateViewCommand `ttf1`, select * from values (1, 2), (2, 3) - as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, true + as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, UNSUPPORTED, true +- Project [current_date#x, current_timestamp#x] +- SubqueryAlias ttf1 +- LocalRelation [current_date#x, current_timestamp#x] @@ -263,7 +263,7 @@ create temporary view ttf2 as select * from values CreateViewCommand `ttf2`, select * from values (1, 2), (2, 3) - as ttf2(a, b), false, false, LocalTempView, true + as ttf2(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias ttf2 +- LocalRelation [a#x, b#x] @@ -611,7 +611,7 @@ select null - timestamp'2011-11-11 11:11:11' -- !query create temporary view ts_view as select '2011-11-11 11:11:11' str -- !query analysis -CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, true +CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 11:11:11 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp-ansi.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp-ansi.sql.out index 959eac6d5e639..e50c860270563 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp-ansi.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp-ansi.sql.out @@ -237,7 +237,7 @@ create temporary view ttf1 as select * from values CreateViewCommand `ttf1`, select * from values (1, 2), (2, 3) - as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, true + as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, UNSUPPORTED, true +- Project [current_date#x, current_timestamp#x] +- SubqueryAlias ttf1 +- LocalRelation [current_date#x, current_timestamp#x] @@ -264,7 +264,7 @@ create temporary view ttf2 as select * from values CreateViewCommand `ttf2`, select * from values (1, 2), (2, 3) - as ttf2(a, b), false, false, LocalTempView, true + as ttf2(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias ttf2 +- LocalRelation [a#x, b#x] @@ -579,7 +579,7 @@ select null - timestamp'2011-11-11 11:11:11' -- !query create temporary view ts_view as select '2011-11-11 11:11:11' str -- !query analysis -CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, true +CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 11:11:11 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp.sql.out index 4aa1ffcbc31db..098abfb3852cf 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/timestampNTZ/timestamp.sql.out @@ -237,7 +237,7 @@ create temporary view ttf1 as select * from values CreateViewCommand `ttf1`, select * from values (1, 2), (2, 3) - as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, true + as ttf1(`current_date`, `current_timestamp`), false, false, LocalTempView, UNSUPPORTED, true +- Project [current_date#x, current_timestamp#x] +- SubqueryAlias ttf1 +- LocalRelation [current_date#x, current_timestamp#x] @@ -264,7 +264,7 @@ create temporary view ttf2 as select * from values CreateViewCommand `ttf2`, select * from values (1, 2), (2, 3) - as ttf2(a, b), false, false, LocalTempView, true + as ttf2(a, b), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias ttf2 +- LocalRelation [a#x, b#x] @@ -613,7 +613,7 @@ select null - timestamp'2011-11-11 11:11:11' -- !query create temporary view ts_view as select '2011-11-11 11:11:11' str -- !query analysis -CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, true +CreateViewCommand `ts_view`, select '2011-11-11 11:11:11' str, false, false, LocalTempView, UNSUPPORTED, true +- Project [2011-11-11 11:11:11 AS str#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/transform.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/transform.sql.out index 173db880eb9d4..c8cc6aee064e6 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/transform.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/transform.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `t`, SELECT * FROM VALUES ('1', true, unhex('537061726B2053514C'), tinyint(1), 1, smallint(100), bigint(1), float(1.0), 1.0, Decimal(1.0), timestamp('1997-01-02'), date('2000-04-01')), ('2', false, unhex('537061726B2053514C'), tinyint(2), 2, smallint(200), bigint(2), float(2.0), 2.0, Decimal(2.0), timestamp('1997-01-02 03:04:05'), date('2000-04-02')), ('3', true, unhex('537061726B2053514C'), tinyint(3), 3, smallint(300), bigint(3), float(3.0), 3.0, Decimal(3.0), timestamp('1997-02-10 17:32:01-08'), date('2000-04-03')) -AS t(a, b, c, d, e, f, g, h, i, j, k, l), false, true, LocalTempView, true +AS t(a, b, c, d, e, f, g, h, i, j, k, l), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x, c#x, d#x, e#x, f#x, g#xL, h#x, i#x, j#x, k#x, l#x] +- SubqueryAlias t +- LocalRelation [a#x, b#x, c#x, d#x, e#x, f#x, g#xL, h#x, i#x, j#x, k#x, l#x] @@ -27,7 +27,7 @@ CreateViewCommand `script_trans`, SELECT * FROM VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) -AS script_trans(a, b, c), false, true, LocalTempView, true +AS script_trans(a, b, c), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x, c#x] +- SubqueryAlias script_trans +- LocalRelation [a#x, b#x, c#x] @@ -56,7 +56,7 @@ CreateViewCommand `complex_trans`, SELECT * FROM VALUES (3, 3), (1, 1), (3, 3) -as complex_trans(a, b), false, true, LocalTempView, true +as complex_trans(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias complex_trans +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/binaryComparison.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/binaryComparison.sql.out index c2dfe61b259da..d15418c17b730 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/binaryComparison.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/binaryComparison.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/booleanEquality.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/booleanEquality.sql.out index c1aa8f3c7921e..de6c0b72c1c79 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/booleanEquality.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/booleanEquality.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/caseWhenCoercion.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/caseWhenCoercion.sql.out index 7662eac61e543..4124fc57996cd 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/caseWhenCoercion.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/caseWhenCoercion.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/concat.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/concat.sql.out index 72222083172c3..b3c5034656e21 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/concat.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/concat.sql.out @@ -225,7 +225,7 @@ CreateViewCommand `various_arrays`, SELECT * FROM VALUES ( array_array1, array_array2, struct_array1, struct_array2, map_array1, map_array2 -), false, false, LocalTempView, true +), false, false, LocalTempView, UNSUPPORTED, true +- Project [boolean_array1#x, boolean_array2#x, tinyint_array1#x, tinyint_array2#x, smallint_array1#x, smallint_array2#x, int_array1#x, int_array2#x, bigint_array1#x, bigint_array2#x, decimal_array1#x, decimal_array2#x, double_array1#x, double_array2#x, float_array1#x, float_array2#x, date_array1#x, data_array2#x, timestamp_array1#x, timestamp_array2#x, string_array1#x, string_array2#x, array_array1#x, array_array2#x, ... 4 more fields] +- SubqueryAlias various_arrays +- LocalRelation [boolean_array1#x, boolean_array2#x, tinyint_array1#x, tinyint_array2#x, smallint_array1#x, smallint_array2#x, int_array1#x, int_array2#x, bigint_array1#x, bigint_array2#x, decimal_array1#x, decimal_array2#x, double_array1#x, double_array2#x, float_array1#x, float_array2#x, date_array1#x, data_array2#x, timestamp_array1#x, timestamp_array2#x, string_array1#x, string_array2#x, array_array1#x, array_array2#x, ... 4 more fields] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/dateTimeOperations.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/dateTimeOperations.sql.out index a50c797e78c20..c2787e5816883 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/dateTimeOperations.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/dateTimeOperations.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/decimalPrecision.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/decimalPrecision.sql.out index eebe370666edb..093297f03edb7 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/decimalPrecision.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/decimalPrecision.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/division.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/division.sql.out index a034c22ffcda3..22b870bc0b420 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/division.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/division.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/ifCoercion.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/ifCoercion.sql.out index edee343b59250..b1d07bd7be902 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/ifCoercion.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/ifCoercion.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/implicitTypeCasts.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/implicitTypeCasts.sql.out index 9818d54b809a5..43aaea63fd045 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/implicitTypeCasts.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/implicitTypeCasts.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/inConversion.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/inConversion.sql.out index b248ec5997297..0db96719a3fb0 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/inConversion.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/inConversion.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out index 2b8152f0cc703..0f72b0cf8a0e3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out @@ -66,7 +66,7 @@ CreateViewCommand `various_maps`, SELECT * FROM VALUES ( string_map1, string_map2, string_map3, string_map4, array_map1, array_map2, struct_map1, struct_map2 -), false, false, LocalTempView, true +), false, false, LocalTempView, UNSUPPORTED, true +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] +- SubqueryAlias various_maps +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapconcat.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapconcat.sql.out index f4c932fa29f97..dd3e56fe9322d 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapconcat.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapconcat.sql.out @@ -70,7 +70,7 @@ CreateViewCommand `various_maps`, SELECT * FROM VALUES ( struct_map1, struct_map2, string_int_map1, string_int_map2, int_string_map1, int_string_map2 -), false, false, LocalTempView, true +), false, false, LocalTempView, UNSUPPORTED, true +- Project [boolean_map1#x, boolean_map2#x, tinyint_map1#x, tinyint_map2#x, smallint_map1#x, smallint_map2#x, int_map1#x, int_map2#x, bigint_map1#x, bigint_map2#x, decimal_map1#x, decimal_map2#x, double_map1#x, double_map2#x, float_map1#x, float_map2#x, date_map1#x, date_map2#x, timestamp_map1#x, timestamp_map2#x, string_map1#x, string_map2#x, array_map1#x, array_map2#x, ... 6 more fields] +- SubqueryAlias various_maps +- LocalRelation [boolean_map1#x, boolean_map2#x, tinyint_map1#x, tinyint_map2#x, smallint_map1#x, smallint_map2#x, int_map1#x, int_map2#x, bigint_map1#x, bigint_map2#x, decimal_map1#x, decimal_map2#x, double_map1#x, double_map2#x, float_map1#x, float_map2#x, date_map1#x, date_map2#x, timestamp_map1#x, timestamp_map2#x, string_map1#x, string_map2#x, array_map1#x, array_map2#x, ... 6 more fields] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/promoteStrings.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/promoteStrings.sql.out index 0a32a7eaac474..ccd34cfaeb67f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/promoteStrings.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/promoteStrings.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/stringCastAndExpressions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/stringCastAndExpressions.sql.out index 448ab457d3951..009e91f7ffacf 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/stringCastAndExpressions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/stringCastAndExpressions.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 'aa' as a -- !query analysis -CreateViewCommand `t`, SELECT 'aa' as a, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 'aa' as a, false, false, LocalTempView, UNSUPPORTED, true +- Project [aa AS a#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/widenSetOperationTypes.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/widenSetOperationTypes.sql.out index ff009f8bd64c0..029ec4abb6faf 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/widenSetOperationTypes.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/widenSetOperationTypes.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/windowFrameCoercion.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/windowFrameCoercion.sql.out index 76595c6cbded2..170e7dff38ac3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/windowFrameCoercion.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/windowFrameCoercion.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t AS SELECT 1 -- !query analysis -CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, true +CreateViewCommand `t`, SELECT 1, false, false, LocalTempView, UNSUPPORTED, true +- Project [1 AS 1#x] +- OneRowRelation diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part1.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part1.sql.out index babc5866da886..ddfe742f7ea08 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part1.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part1.sql.out @@ -345,7 +345,7 @@ Aggregate [corr(cast(b#x as double), cast(cast(udf(cast(a#x as string)) as int) -- !query CREATE TEMPORARY VIEW regr_test AS SELECT * FROM VALUES (10,150),(20,250),(30,350),(80,540),(100,200) AS regr_test (x, y) -- !query analysis -CreateViewCommand `regr_test`, SELECT * FROM VALUES (10,150),(20,250),(30,350),(80,540),(100,200) AS regr_test (x, y), false, false, LocalTempView, true +CreateViewCommand `regr_test`, SELECT * FROM VALUES (10,150),(20,250),(30,350),(80,540),(100,200) AS regr_test (x, y), false, false, LocalTempView, UNSUPPORTED, true +- Project [x#x, y#x] +- SubqueryAlias regr_test +- LocalRelation [x#x, y#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part2.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part2.sql.out index bb8d0824eb5b7..99bc3cbf49b2a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part2.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-aggregates_part2.sql.out @@ -14,7 +14,7 @@ CreateViewCommand `int4_tbl`, select * from values (-123456), (2147483647), (-2147483647) - as int4_tbl(f1), false, false, LocalTempView, true + as int4_tbl(f1), false, false, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias int4_tbl +- LocalRelation [f1#x] @@ -29,7 +29,7 @@ CREATE OR REPLACE TEMPORARY VIEW bitwise_test AS SELECT * FROM VALUES CreateViewCommand `bitwise_test`, SELECT * FROM VALUES (1, 1, 1, 1L), (3, 3, 3, null), - (7, 7, 7, 3L) AS bitwise_test(b1, b2, b3, b4), false, true, LocalTempView, true + (7, 7, 7, 3L) AS bitwise_test(b1, b2, b3, b4), false, true, LocalTempView, UNSUPPORTED, true +- Project [b1#x, b2#x, b3#x, b4#xL] +- SubqueryAlias bitwise_test +- LocalRelation [b1#x, b2#x, b3#x, b4#xL] @@ -123,7 +123,7 @@ CREATE OR REPLACE TEMPORARY VIEW bool_test AS SELECT * FROM VALUES CreateViewCommand `bool_test`, SELECT * FROM VALUES (TRUE, null, FALSE, null), (FALSE, TRUE, null, null), - (null, TRUE, FALSE, null) AS bool_test(b1, b2, b3, b4), false, true, LocalTempView, true + (null, TRUE, FALSE, null) AS bool_test(b1, b2, b3, b4), false, true, LocalTempView, UNSUPPORTED, true +- Project [b1#x, b2#x, b3#x, b4#x] +- SubqueryAlias bool_test +- LocalRelation [b1#x, b2#x, b3#x, b4#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-join.sql.out index 909ba8ce8656f..c74124402c554 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/postgreSQL/udf-join.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `INT2_TBL`, [(f1,None)], VALUES (smallint(trim(' 1234 '))), (smallint(trim(' -1234'))), (smallint('32767')), - (smallint('-32767')), false, true, LocalTempView, true + (smallint('-32767')), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x] @@ -23,7 +23,7 @@ CREATE OR REPLACE TEMPORARY VIEW INT4_TBL AS SELECT * FROM -- !query analysis CreateViewCommand `INT4_TBL`, SELECT * FROM (VALUES (0), (123456), (-123456), (2147483647), (-2147483647)) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -47,7 +47,7 @@ CreateViewCommand `INT8_TBL`, SELECT * FROM (4567890123456789, 123), (4567890123456789, 4567890123456789), (4567890123456789, -4567890123456789)) - AS v(q1, q2), false, true, LocalTempView, true + AS v(q1, q2), false, true, LocalTempView, UNSUPPORTED, true +- Project [q1#xL, q2#xL] +- SubqueryAlias v +- Project [col1#xL AS q1#xL, col2#xL AS q2#xL] @@ -63,7 +63,7 @@ CREATE OR REPLACE TEMPORARY VIEW FLOAT8_TBL AS SELECT * FROM CreateViewCommand `FLOAT8_TBL`, SELECT * FROM (VALUES (0.0), (1004.30), (-34.84), (cast('1.2345678901234e+200' as double)), (cast('1.2345678901234e-200' as double))) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -77,7 +77,7 @@ CREATE OR REPLACE TEMPORARY VIEW TEXT_TBL AS SELECT * FROM -- !query analysis CreateViewCommand `TEXT_TBL`, SELECT * FROM (VALUES ('doh!'), ('hi de ho neighbor')) - AS v(f1), false, true, LocalTempView, true + AS v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -87,7 +87,7 @@ CreateViewCommand `TEXT_TBL`, SELECT * FROM -- !query CREATE OR REPLACE TEMPORARY VIEW tenk2 AS SELECT * FROM tenk1 -- !query analysis -CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, true, LocalTempView, true +CreateViewCommand `tenk2`, SELECT * FROM tenk1, false, true, LocalTempView, UNSUPPORTED, true +- Project [unique1#x, unique2#x, two#x, four#x, ten#x, twenty#x, hundred#x, thousand#x, twothousand#x, fivethous#x, tenthous#x, odd#x, even#x, stringu1#x, stringu2#x, string4#x] +- SubqueryAlias spark_catalog.default.tenk1 +- Relation spark_catalog.default.tenk1[unique1#x,unique2#x,two#x,four#x,ten#x,twenty#x,hundred#x,thousand#x,twothousand#x,fivethous#x,tenthous#x,odd#x,even#x,stringu1#x,stringu2#x,string4#x] parquet @@ -1005,7 +1005,7 @@ create or replace temporary view x as select * from -- !query analysis CreateViewCommand `x`, select * from (values (1,11), (2,22), (3,null), (4,44), (5,null)) - as v(x1, x2), false, true, LocalTempView, true + as v(x1, x2), false, true, LocalTempView, UNSUPPORTED, true +- Project [x1#x, x2#x] +- SubqueryAlias v +- Project [col1#x AS x1#x, col2#x AS x2#x] @@ -1019,7 +1019,7 @@ create or replace temporary view y as select * from -- !query analysis CreateViewCommand `y`, select * from (values (1,111), (2,222), (3,333), (4,null)) - as v(y1, y2), false, true, LocalTempView, true + as v(y1, y2), false, true, LocalTempView, UNSUPPORTED, true +- Project [y1#x, y2#x] +- SubqueryAlias v +- Project [col1#x AS y1#x, col2#x AS y2#x] @@ -1629,7 +1629,7 @@ create or replace temporary view tt1 as select * from -- !query analysis CreateViewCommand `tt1`, select * from (values (1, 11), (2, NULL)) - as v(tt1_id, joincol), false, true, LocalTempView, true + as v(tt1_id, joincol), false, true, LocalTempView, UNSUPPORTED, true +- Project [tt1_id#x, joincol#x] +- SubqueryAlias v +- Project [col1#x AS tt1_id#x, col2#x AS joincol#x] @@ -1643,7 +1643,7 @@ create or replace temporary view tt2 as select * from -- !query analysis CreateViewCommand `tt2`, select * from (values (21, 11), (22, 11)) - as v(tt2_id, joincol), false, true, LocalTempView, true + as v(tt2_id, joincol), false, true, LocalTempView, UNSUPPORTED, true +- Project [tt2_id#x, joincol#x] +- SubqueryAlias v +- Project [col1#x AS tt2_id#x, col2#x AS joincol#x] @@ -1786,7 +1786,7 @@ create or replace temporary view tt5 as select * from -- !query analysis CreateViewCommand `tt5`, select * from (values (1, 10), (1, 11)) - as v(f1, f2), false, true, LocalTempView, true + as v(f1, f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x, f2#x] +- SubqueryAlias v +- Project [col1#x AS f1#x, col2#x AS f2#x] @@ -1800,7 +1800,7 @@ create or replace temporary view tt6 as select * from -- !query analysis CreateViewCommand `tt6`, select * from (values (1, 9), (1, 2), (2, 9)) - as v(f1, f2), false, true, LocalTempView, true + as v(f1, f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x, f2#x] +- SubqueryAlias v +- Project [col1#x AS f1#x, col2#x AS f2#x] @@ -1836,7 +1836,7 @@ create or replace temporary view xx as select * from -- !query analysis CreateViewCommand `xx`, select * from (values (1), (2), (3)) - as v(pkxx), false, true, LocalTempView, true + as v(pkxx), false, true, LocalTempView, UNSUPPORTED, true +- Project [pkxx#x] +- SubqueryAlias v +- Project [col1#x AS pkxx#x] @@ -1850,7 +1850,7 @@ create or replace temporary view yy as select * from -- !query analysis CreateViewCommand `yy`, select * from (values (101, 1), (201, 2), (301, NULL)) - as v(pkyy, pkxx), false, true, LocalTempView, true + as v(pkyy, pkxx), false, true, LocalTempView, UNSUPPORTED, true +- Project [pkyy#x, pkxx#x] +- SubqueryAlias v +- Project [col1#x AS pkyy#x, col2#x AS pkxx#x] @@ -1911,7 +1911,7 @@ create or replace temporary view zt1 as select * from -- !query analysis CreateViewCommand `zt1`, select * from (values (53)) - as v(f1), false, true, LocalTempView, true + as v(f1), false, true, LocalTempView, UNSUPPORTED, true +- Project [f1#x] +- SubqueryAlias v +- Project [col1#x AS f1#x] @@ -1925,7 +1925,7 @@ create or replace temporary view zt2 as select * from -- !query analysis CreateViewCommand `zt2`, select * from (values (53)) - as v(f2), false, true, LocalTempView, true + as v(f2), false, true, LocalTempView, UNSUPPORTED, true +- Project [f2#x] +- SubqueryAlias v +- Project [col1#x AS f2#x] @@ -1970,7 +1970,7 @@ Project [f2#x, f3#x, f1#x] -- !query create temp view zv1 as select *,'dummy' AS junk from zt1 -- !query analysis -CreateViewCommand `zv1`, select *,'dummy' AS junk from zt1, false, false, LocalTempView, true +CreateViewCommand `zv1`, select *,'dummy' AS junk from zt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [f1#x, dummy AS junk#x] +- SubqueryAlias zt1 +- View (`zt1`, [f1#x]) @@ -2145,7 +2145,7 @@ create or replace temporary view a as select * from -- !query analysis CreateViewCommand `a`, select * from (values ('p'), ('q')) - as v(code), false, true, LocalTempView, true + as v(code), false, true, LocalTempView, UNSUPPORTED, true +- Project [code#x] +- SubqueryAlias v +- Project [col1#x AS code#x] @@ -2159,7 +2159,7 @@ create or replace temporary view b as select * from -- !query analysis CreateViewCommand `b`, select * from (values ('p', 1), ('p', 2)) - as v(a, num), false, true, LocalTempView, true + as v(a, num), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, num#x] +- SubqueryAlias v +- Project [col1#x AS a#x, col2#x AS num#x] @@ -2173,7 +2173,7 @@ create or replace temporary view c as select * from -- !query analysis CreateViewCommand `c`, select * from (values ('A', 'p'), ('B', 'q'), ('C', null)) - as v(name, a), false, true, LocalTempView, true + as v(name, a), false, true, LocalTempView, UNSUPPORTED, true +- Project [name#x, a#x] +- SubqueryAlias v +- Project [col1#x AS name#x, col2#x AS a#x] @@ -2346,7 +2346,7 @@ create or replace temporary view nt1 as select * from -- !query analysis CreateViewCommand `nt1`, select * from (values(1,true,true), (2,true,false), (3,false,false)) - as v(id, a1, a2), false, true, LocalTempView, true + as v(id, a1, a2), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, a1#x, a2#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS a1#x, col3#x AS a2#x] @@ -2360,7 +2360,7 @@ create or replace temporary view nt2 as select * from -- !query analysis CreateViewCommand `nt2`, select * from (values(1,1,true,true), (2,2,true,false), (3,3,false,false)) - as v(id, nt1_id, b1, b2), false, true, LocalTempView, true + as v(id, nt1_id, b1, b2), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, nt1_id#x, b1#x, b2#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS nt1_id#x, col3#x AS b1#x, col4#x AS b2#x] @@ -2374,7 +2374,7 @@ create or replace temporary view nt3 as select * from -- !query analysis CreateViewCommand `nt3`, select * from (values(1,1,true), (2,2,false), (3,3,true)) - as v(id, nt2_id, c1), false, true, LocalTempView, true + as v(id, nt2_id, c1), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, nt2_id#x, c1#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS nt2_id#x, col3#x AS c1#x] @@ -2732,7 +2732,7 @@ create or replace temporary view parent as select * from -- !query analysis CreateViewCommand `parent`, select * from (values (1, 10), (2, 20), (3, 30)) - as v(k, pd), false, true, LocalTempView, true + as v(k, pd), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, pd#x] +- SubqueryAlias v +- Project [col1#x AS k#x, col2#x AS pd#x] @@ -2746,7 +2746,7 @@ create or replace temporary view child as select * from -- !query analysis CreateViewCommand `child`, select * from (values (1, 100), (4, 400)) - as v(k, cd), false, true, LocalTempView, true + as v(k, cd), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, cd#x] +- SubqueryAlias v +- Project [col1#x AS k#x, col2#x AS cd#x] @@ -2871,7 +2871,7 @@ create or replace temporary view a as select * from -- !query analysis CreateViewCommand `a`, select * from (values (0), (1)) - as v(id), false, true, LocalTempView, true + as v(id), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x] +- SubqueryAlias v +- Project [col1#x AS id#x] @@ -2885,7 +2885,7 @@ create or replace temporary view b as select * from -- !query analysis CreateViewCommand `b`, select * from (values (0, 0), (1, NULL)) - as v(id, a_id), false, true, LocalTempView, true + as v(id, a_id), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#x, a_id#x] +- SubqueryAlias v +- Project [col1#x AS id#x, col2#x AS a_id#x] @@ -2943,7 +2943,7 @@ create or replace temporary view innertab as select * from -- !query analysis CreateViewCommand `innertab`, select * from (values (123L, 42L)) - as v(id, dat1), false, true, LocalTempView, true + as v(id, dat1), false, true, LocalTempView, UNSUPPORTED, true +- Project [id#xL, dat1#xL] +- SubqueryAlias v +- Project [col1#xL AS id#xL, col2#xL AS dat1#xL] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-count.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-count.sql.out index 57c42b338c41a..2540daef71424 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-count.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-count.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (1, 1), (null, 2), (1, null), (null, null) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-cross-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-cross-join.sql.out index c704623140d67..c5ee1742f5d7c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-cross-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-cross-join.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nt1`, select * from values ("one", 1), ("two", 2), ("three", 3) - as nt1(k, v1), false, false, LocalTempView, true + as nt1(k, v1), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- LocalRelation [k#x, v1#x] @@ -27,7 +27,7 @@ CreateViewCommand `nt2`, select * from values ("one", 1), ("two", 22), ("one", 5) - as nt2(k, v2), false, false, LocalTempView, true + as nt2(k, v2), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v2#x] +- SubqueryAlias nt2 +- LocalRelation [k#x, v2#x] @@ -142,7 +142,7 @@ Project [cast(udf(cast(key#x as string)) as string) AS udf(key)#x, cast(udf(cast -- !query create temporary view A(a, va) as select * from nt1 -- !query analysis -CreateViewCommand `A`, [(a,None), (va,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `A`, [(a,None), (va,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) @@ -155,7 +155,7 @@ CreateViewCommand `A`, [(a,None), (va,None)], select * from nt1, false, false, L -- !query create temporary view B(b, vb) as select * from nt1 -- !query analysis -CreateViewCommand `B`, [(b,None), (vb,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `B`, [(b,None), (vb,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) @@ -168,7 +168,7 @@ CreateViewCommand `B`, [(b,None), (vb,None)], select * from nt1, false, false, L -- !query create temporary view C(c, vc) as select * from nt1 -- !query analysis -CreateViewCommand `C`, [(c,None), (vc,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `C`, [(c,None), (vc,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) @@ -181,7 +181,7 @@ CreateViewCommand `C`, [(c,None), (vc,None)], select * from nt1, false, false, L -- !query create temporary view D(d, vd) as select * from nt1 -- !query analysis -CreateViewCommand `D`, [(d,None), (vd,None)], select * from nt1, false, false, LocalTempView, true +CreateViewCommand `D`, [(d,None), (vd,None)], select * from nt1, false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- View (`nt1`, [k#x, v1#x]) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except-all.sql.out index 74ae6c0c584a8..37c10b6fcd03c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except-all.sql.out @@ -4,7 +4,7 @@ CREATE TEMPORARY VIEW tab1 AS SELECT * FROM VALUES (0), (1), (2), (2), (2), (2), (3), (null), (null) AS tab1(c1) -- !query analysis CreateViewCommand `tab1`, SELECT * FROM VALUES - (0), (1), (2), (2), (2), (2), (3), (null), (null) AS tab1(c1), false, false, LocalTempView, true + (0), (1), (2), (2), (2), (2), (3), (null), (null) AS tab1(c1), false, false, LocalTempView, UNSUPPORTED, true +- Project [c1#x] +- SubqueryAlias tab1 +- LocalRelation [c1#x] @@ -15,7 +15,7 @@ CREATE TEMPORARY VIEW tab2 AS SELECT * FROM VALUES (1), (2), (2), (3), (5), (5), (null) AS tab2(c1) -- !query analysis CreateViewCommand `tab2`, SELECT * FROM VALUES - (1), (2), (2), (3), (5), (5), (null) AS tab2(c1), false, false, LocalTempView, true + (1), (2), (2), (3), (5), (5), (null) AS tab2(c1), false, false, LocalTempView, UNSUPPORTED, true +- Project [c1#x] +- SubqueryAlias tab2 +- LocalRelation [c1#x] @@ -36,7 +36,7 @@ CreateViewCommand `tab3`, SELECT * FROM VALUES (1, 3), (2, 3), (2, 2) - AS tab3(k, v), false, false, LocalTempView, true + AS tab3(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab3 +- LocalRelation [k#x, v#x] @@ -57,7 +57,7 @@ CreateViewCommand `tab4`, SELECT * FROM VALUES (2, 2), (2, 2), (2, 20) - AS tab4(k, v), false, false, LocalTempView, true + AS tab4(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab4 +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except.sql.out index 07649c3e5620b..4a7a38bd88496 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-except.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `t1`, select * from values ("two", 2), ("three", 3), ("one", NULL) - as t1(k, v), false, false, LocalTempView, true + as t1(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias t1 +- LocalRelation [k#x, v#x] @@ -33,7 +33,7 @@ CreateViewCommand `t2`, select * from values ("one", 5), ("one", NULL), (NULL, 5) - as t2(k, v), false, false, LocalTempView, true + as t2(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias t2 +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-analytics.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-analytics.sql.out index 8e1eb80b4bac8..fbee3e2c8c89f 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-analytics.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-analytics.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] @@ -75,7 +75,7 @@ AS courseSales(course, year, earnings) -- !query analysis CreateViewCommand `courseSales`, SELECT * FROM VALUES ("dotNET", 2012, 10000), ("Java", 2012, 20000), ("dotNET", 2012, 5000), ("dotNET", 2013, 48000), ("Java", 2013, 30000) -AS courseSales(course, year, earnings), false, true, LocalTempView, true +AS courseSales(course, year, earnings), false, true, LocalTempView, UNSUPPORTED, true +- Project [course#x, year#x, earnings#x] +- SubqueryAlias courseSales +- LocalRelation [course#x, year#x, earnings#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-by.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-by.sql.out index 59e71ad0bfc8d..5811a4ff6566c 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-by.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-group-by.sql.out @@ -6,7 +6,7 @@ AS testData(a, b) -- !query analysis CreateViewCommand `testData`, SELECT * FROM VALUES (1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2), (null, 1), (3, null), (null, null) -AS testData(a, b), false, true, LocalTempView, true +AS testData(a, b), false, true, LocalTempView, UNSUPPORTED, true +- Project [a#x, b#x] +- SubqueryAlias testData +- LocalRelation [a#x, b#x] @@ -240,7 +240,7 @@ CREATE OR REPLACE TEMPORARY VIEW testDataHasSameNameWithAlias AS SELECT * FROM V (1, 1, 3), (1, 2, 1) AS testDataHasSameNameWithAlias(k, a, v) -- !query analysis CreateViewCommand `testDataHasSameNameWithAlias`, SELECT * FROM VALUES -(1, 1, 3), (1, 2, 1) AS testDataHasSameNameWithAlias(k, a, v), false, true, LocalTempView, true +(1, 1, 3), (1, 2, 1) AS testDataHasSameNameWithAlias(k, a, v), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, a#x, v#x] +- SubqueryAlias testDataHasSameNameWithAlias +- LocalRelation [k#x, a#x, v#x] @@ -404,7 +404,7 @@ CreateViewCommand `test_agg`, SELECT * FROM VALUES (2, true), (3, false), (3, null), (4, null), (4, null), - (5, null), (5, true), (5, false) AS test_agg(k, v), false, true, LocalTempView, true + (5, null), (5, true), (5, false) AS test_agg(k, v), false, true, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias test_agg +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-having.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-having.sql.out index 441fda84479e0..f5cbe4abf3538 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-having.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-having.sql.out @@ -12,7 +12,7 @@ CreateViewCommand `hav`, select * from values ("two", 2), ("three", 3), ("one", 5) - as hav(k, v), false, false, LocalTempView, true + as hav(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias hav +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-inner-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-inner-join.sql.out index 1454be010d9c9..129575c77e732 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-inner-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-inner-join.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t1 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -11,7 +11,7 @@ CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW t2 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -20,7 +20,7 @@ CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW t3 AS SELECT * FROM VALUES (1), (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t3`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t3`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -29,7 +29,7 @@ CreateViewCommand `t3`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, fal -- !query CREATE TEMPORARY VIEW t4 AS SELECT * FROM VALUES (1), (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t4`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t4`, SELECT * FROM VALUES (1), (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -43,7 +43,7 @@ SELECT udf(a) AS a, udf('b') AS tag FROM t2 -- !query analysis CreateViewCommand `ta`, SELECT udf(a) AS a, udf('a') AS tag FROM t1 UNION ALL -SELECT udf(a) AS a, udf('b') AS tag FROM t2, false, false, LocalTempView, true, [udf] +SELECT udf(a) AS a, udf('b') AS tag FROM t2, false, false, LocalTempView, UNSUPPORTED, true, [udf] +- Union false, false :- Project [cast(udf(cast(a#x as string)) as int) AS a#x, cast(udf(cast(a as string)) as string) AS tag#x] : +- SubqueryAlias t1 @@ -69,7 +69,7 @@ SELECT udf(a) AS a, udf('b') AS tag FROM t4 -- !query analysis CreateViewCommand `tb`, SELECT udf(a) AS a, udf('a') AS tag FROM t3 UNION ALL -SELECT udf(a) AS a, udf('b') AS tag FROM t4, false, false, LocalTempView, true, [udf] +SELECT udf(a) AS a, udf('b') AS tag FROM t4, false, false, LocalTempView, UNSUPPORTED, true, [udf] +- Union false, false :- Project [cast(udf(cast(a#x as string)) as int) AS a#x, cast(udf(cast(a as string)) as string) AS tag#x] : +- SubqueryAlias t3 diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-intersect-all.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-intersect-all.sql.out index 323f07a7d8339..35306746932e2 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-intersect-all.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-intersect-all.sql.out @@ -18,7 +18,7 @@ CreateViewCommand `tab1`, SELECT * FROM VALUES (2, 3), (null, null), (null, null) - AS tab1(k, v), false, false, LocalTempView, true + AS tab1(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab1 +- LocalRelation [k#x, v#x] @@ -41,7 +41,7 @@ CreateViewCommand `tab2`, SELECT * FROM VALUES (3, 4), (null, null), (null, null) - AS tab2(k, v), false, false, LocalTempView, true + AS tab2(k, v), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v#x] +- SubqueryAlias tab2 +- LocalRelation [k#x, v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-join-empty-relation.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-join-empty-relation.sql.out index d5ffa3ebb2bb5..ebd5127112cc0 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-join-empty-relation.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-join-empty-relation.sql.out @@ -2,7 +2,7 @@ -- !query CREATE TEMPORARY VIEW t1 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -11,7 +11,7 @@ CreateViewCommand `t1`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW t2 AS SELECT * FROM VALUES (1) AS GROUPING(a) -- !query analysis -CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, true +CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- SubqueryAlias GROUPING +- LocalRelation [a#x] @@ -20,7 +20,7 @@ CreateViewCommand `t2`, SELECT * FROM VALUES (1) AS GROUPING(a), false, false, L -- !query CREATE TEMPORARY VIEW empty_table as SELECT a FROM t2 WHERE false -- !query analysis -CreateViewCommand `empty_table`, SELECT a FROM t2 WHERE false, false, false, LocalTempView, true +CreateViewCommand `empty_table`, SELECT a FROM t2 WHERE false, false, false, LocalTempView, UNSUPPORTED, true +- Project [a#x] +- Filter false +- SubqueryAlias t2 diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-natural-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-natural-join.sql.out index 324622e615da0..5fc413c66326b 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-natural-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-natural-join.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nt1`, select * from values ("one", 1), ("two", 2), ("three", 3) - as nt1(k, v1), false, false, LocalTempView, true + as nt1(k, v1), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- LocalRelation [k#x, v1#x] @@ -27,7 +27,7 @@ CreateViewCommand `nt2`, select * from values ("one", 1), ("two", 22), ("one", 5) - as nt2(k, v2), false, false, LocalTempView, true + as nt2(k, v2), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v2#x] +- SubqueryAlias nt2 +- LocalRelation [k#x, v2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-outer-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-outer-join.sql.out index 8eee8746637cd..df2169386249a 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-outer-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-outer-join.sql.out @@ -6,7 +6,7 @@ as t1(int_col1) -- !query analysis CreateViewCommand `t1`, SELECT * FROM VALUES (-234), (145), (367), (975), (298) -as t1(int_col1), false, true, LocalTempView, true +as t1(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t1 +- LocalRelation [int_col1#x] @@ -19,7 +19,7 @@ as t2(int_col0, int_col1) -- !query analysis CreateViewCommand `t2`, SELECT * FROM VALUES (-769, -244), (-800, -409), (940, 86), (-507, 304), (-367, 158) -as t2(int_col0, int_col1), false, true, LocalTempView, true +as t2(int_col0, int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col0#x, int_col1#x] +- SubqueryAlias t2 +- LocalRelation [int_col0#x, int_col1#x] @@ -58,7 +58,7 @@ Project [udf(sum(udf(coalesce(int_col1, int_col0))))#xL, (udf(coalesce(int_col1, -- !query CREATE OR REPLACE TEMPORARY VIEW t1 AS SELECT * FROM VALUES (97) as t1(int_col1) -- !query analysis -CreateViewCommand `t1`, SELECT * FROM VALUES (97) as t1(int_col1), false, true, LocalTempView, true +CreateViewCommand `t1`, SELECT * FROM VALUES (97) as t1(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t1 +- LocalRelation [int_col1#x] @@ -67,7 +67,7 @@ CreateViewCommand `t1`, SELECT * FROM VALUES (97) as t1(int_col1), false, true, -- !query CREATE OR REPLACE TEMPORARY VIEW t2 AS SELECT * FROM VALUES (0) as t2(int_col1) -- !query analysis -CreateViewCommand `t2`, SELECT * FROM VALUES (0) as t2(int_col1), false, true, LocalTempView, true +CreateViewCommand `t2`, SELECT * FROM VALUES (0) as t2(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t2 +- LocalRelation [int_col1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-pivot.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-pivot.sql.out index e92b7003d6e58..5cfa86309f6d1 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-pivot.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-pivot.sql.out @@ -14,7 +14,7 @@ CreateViewCommand `courseSales`, select * from values ("dotNET", 2012, 5000), ("dotNET", 2013, 48000), ("Java", 2013, 30000) - as courseSales(course, year, earnings), false, false, LocalTempView, true + as courseSales(course, year, earnings), false, false, LocalTempView, UNSUPPORTED, true +- Project [course#x, year#x, earnings#x] +- SubqueryAlias courseSales +- LocalRelation [course#x, year#x, earnings#x] @@ -29,7 +29,7 @@ create temporary view years as select * from values CreateViewCommand `years`, select * from values (2012, 1), (2013, 2) - as years(y, s), false, false, LocalTempView, true + as years(y, s), false, false, LocalTempView, UNSUPPORTED, true +- Project [y#x, s#x] +- SubqueryAlias years +- LocalRelation [y#x, s#x] @@ -44,7 +44,7 @@ create temporary view yearsWithComplexTypes as select * from values CreateViewCommand `yearsWithComplexTypes`, select * from values (2012, array(1, 1), map('1', 1), struct(1, 'a')), (2013, array(2, 2), map('2', 2), struct(2, 'b')) - as yearsWithComplexTypes(y, a, m, s), false, false, LocalTempView, true + as yearsWithComplexTypes(y, a, m, s), false, false, LocalTempView, UNSUPPORTED, true +- Project [y#x, a#x, m#x, s#x] +- SubqueryAlias yearsWithComplexTypes +- LocalRelation [y#x, a#x, m#x, s#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-udaf.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-udaf.sql.out index b04e49da481da..248ed95df9ded 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-udaf.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-udaf.sql.out @@ -6,7 +6,7 @@ as t1(int_col1) -- !query analysis CreateViewCommand `t1`, SELECT * FROM VALUES (1), (2), (3), (4) -as t1(int_col1), false, true, LocalTempView, true +as t1(int_col1), false, true, LocalTempView, UNSUPPORTED, true +- Project [int_col1#x] +- SubqueryAlias t1 +- LocalRelation [int_col1#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-union.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-union.sql.out index 671c7a4765296..a1436d0a77c83 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-union.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-union.sql.out @@ -2,7 +2,7 @@ -- !query CREATE OR REPLACE TEMPORARY VIEW t1 AS VALUES (1, 'a'), (2, 'b') tbl(c1, c2) -- !query analysis -CreateViewCommand `t1`, VALUES (1, 'a'), (2, 'b') tbl(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t1`, VALUES (1, 'a'), (2, 'b') tbl(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl +- LocalRelation [c1#x, c2#x] @@ -10,7 +10,7 @@ CreateViewCommand `t1`, VALUES (1, 'a'), (2, 'b') tbl(c1, c2), false, true, Loca -- !query CREATE OR REPLACE TEMPORARY VIEW t2 AS VALUES (1.0, 1), (2.0, 4) tbl(c1, c2) -- !query analysis -CreateViewCommand `t2`, VALUES (1.0, 1), (2.0, 4) tbl(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t2`, VALUES (1.0, 1), (2.0, 4) tbl(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl +- LocalRelation [c1#x, c2#x] @@ -97,7 +97,7 @@ Project [cast(udf(cast(cast(udf(cast(a#xL as string)) as bigint) as string)) as -- !query CREATE OR REPLACE TEMPORARY VIEW p1 AS VALUES 1 T(col) -- !query analysis -CreateViewCommand `p1`, VALUES 1 T(col), false, true, LocalTempView, true +CreateViewCommand `p1`, VALUES 1 T(col), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [col#x] @@ -105,7 +105,7 @@ CreateViewCommand `p1`, VALUES 1 T(col), false, true, LocalTempView, true -- !query CREATE OR REPLACE TEMPORARY VIEW p2 AS VALUES 1 T(col) -- !query analysis -CreateViewCommand `p2`, VALUES 1 T(col), false, true, LocalTempView, true +CreateViewCommand `p2`, VALUES 1 T(col), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [col#x] @@ -113,7 +113,7 @@ CreateViewCommand `p2`, VALUES 1 T(col), false, true, LocalTempView, true -- !query CREATE OR REPLACE TEMPORARY VIEW p3 AS VALUES 1 T(col) -- !query analysis -CreateViewCommand `p3`, VALUES 1 T(col), false, true, LocalTempView, true +CreateViewCommand `p3`, VALUES 1 T(col), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [col#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-window.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-window.sql.out index e18f67055913f..c10988310c0a9 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-window.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udf/udf-window.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `testData`, SELECT * FROM VALUES (3, 2147483650L, 100.001D, date("2020-12-31"), timestamp_seconds(1609372800), "b"), (null, null, null, null, null, null), (3, 1L, 1.0D, date("2017-08-01"), timestamp_seconds(1501545600), null) -AS testData(val, val_long, val_double, val_date, val_timestamp, cate), false, true, LocalTempView, true +AS testData(val, val_long, val_double, val_date, val_timestamp, cate), false, true, LocalTempView, UNSUPPORTED, true +- Project [val#x, val_long#xL, val_double#x, val_date#x, val_timestamp#x, cate#x] +- SubqueryAlias testData +- LocalRelation [val#x, val_long#xL, val_double#x, val_date#x, val_timestamp#x, cate#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/udtf/udtf.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/udtf/udtf.sql.out index cdfa4f69f6e70..74ea9261462d6 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/udtf/udtf.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/udtf/udtf.sql.out @@ -14,7 +14,7 @@ DropTableCommand `spark_catalog`.`default`.`t2`, true, true, false -- !query CREATE OR REPLACE TEMPORARY VIEW t1 AS VALUES (0, 1), (1, 2) t(c1, c2) -- !query analysis -CreateViewCommand `t1`, VALUES (0, 1), (1, 2) t(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t1`, VALUES (0, 1), (1, 2) t(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [c1#x, c2#x] @@ -22,7 +22,7 @@ CreateViewCommand `t1`, VALUES (0, 1), (1, 2) t(c1, c2), false, true, LocalTempV -- !query CREATE OR REPLACE TEMPORARY VIEW t2 AS VALUES (0, 1), (1, 2), (1, 3) t(partition_col, input) -- !query analysis -CreateViewCommand `t2`, VALUES (0, 1), (1, 2), (1, 3) t(partition_col, input), false, true, LocalTempView, true +CreateViewCommand `t2`, VALUES (0, 1), (1, 2), (1, 3) t(partition_col, input), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias t +- LocalRelation [partition_col#x, input#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/union.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/union.sql.out index 44dff64f3a72e..cafdd850e86d6 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/union.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/union.sql.out @@ -2,7 +2,7 @@ -- !query CREATE OR REPLACE TEMPORARY VIEW t1 AS VALUES (1, 'a'), (2, 'b') tbl(c1, c2) -- !query analysis -CreateViewCommand `t1`, VALUES (1, 'a'), (2, 'b') tbl(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t1`, VALUES (1, 'a'), (2, 'b') tbl(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl +- LocalRelation [c1#x, c2#x] @@ -10,7 +10,7 @@ CreateViewCommand `t1`, VALUES (1, 'a'), (2, 'b') tbl(c1, c2), false, true, Loca -- !query CREATE OR REPLACE TEMPORARY VIEW t2 AS VALUES (1.0, 1), (2.0, 4) tbl(c1, c2) -- !query analysis -CreateViewCommand `t2`, VALUES (1.0, 1), (2.0, 4) tbl(c1, c2), false, true, LocalTempView, true +CreateViewCommand `t2`, VALUES (1.0, 1), (2.0, 4) tbl(c1, c2), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl +- LocalRelation [c1#x, c2#x] @@ -97,7 +97,7 @@ Project [a#xL] -- !query CREATE OR REPLACE TEMPORARY VIEW p1 AS VALUES 1 T(col) -- !query analysis -CreateViewCommand `p1`, VALUES 1 T(col), false, true, LocalTempView, true +CreateViewCommand `p1`, VALUES 1 T(col), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [col#x] @@ -105,7 +105,7 @@ CreateViewCommand `p1`, VALUES 1 T(col), false, true, LocalTempView, true -- !query CREATE OR REPLACE TEMPORARY VIEW p2 AS VALUES 1 T(col) -- !query analysis -CreateViewCommand `p2`, VALUES 1 T(col), false, true, LocalTempView, true +CreateViewCommand `p2`, VALUES 1 T(col), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [col#x] @@ -113,7 +113,7 @@ CreateViewCommand `p2`, VALUES 1 T(col), false, true, LocalTempView, true -- !query CREATE OR REPLACE TEMPORARY VIEW p3 AS VALUES 1 T(col) -- !query analysis -CreateViewCommand `p3`, VALUES 1 T(col), false, true, LocalTempView, true +CreateViewCommand `p3`, VALUES 1 T(col), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias T +- LocalRelation [col#x] @@ -184,7 +184,7 @@ Union false, false -- !query CREATE OR REPLACE TEMPORARY VIEW t3 AS VALUES (decimal(1)) tbl(v) -- !query analysis -CreateViewCommand `t3`, VALUES (decimal(1)) tbl(v), false, true, LocalTempView, true +CreateViewCommand `t3`, VALUES (decimal(1)) tbl(v), false, true, LocalTempView, UNSUPPORTED, true +- SubqueryAlias tbl +- LocalRelation [v#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/unpivot.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/unpivot.sql.out index 3b3a64073cbf8..7f4d1a5b7d467 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/unpivot.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/unpivot.sql.out @@ -8,7 +8,7 @@ create temporary view courseEarnings as select * from values CreateViewCommand `courseEarnings`, select * from values ("dotNET", 15000, 48000, 22500), ("Java", 20000, 30000, NULL) - as courseEarnings(course, `2012`, `2013`, `2014`), false, false, LocalTempView, true + as courseEarnings(course, `2012`, `2013`, `2014`), false, false, LocalTempView, UNSUPPORTED, true +- Project [course#x, 2012#x, 2013#x, 2014#x] +- SubqueryAlias courseEarnings +- LocalRelation [course#x, 2012#x, 2013#x, 2014#x] @@ -73,7 +73,7 @@ create temporary view courseEarningsAndSales as select * from values CreateViewCommand `courseEarningsAndSales`, select * from values ("dotNET", 15000, NULL, 48000, 1, 22500, 1), ("Java", 20000, 1, 30000, 2, NULL, NULL) - as courseEarningsAndSales(course, earnings2012, sales2012, earnings2013, sales2013, earnings2014, sales2014), false, false, LocalTempView, true + as courseEarningsAndSales(course, earnings2012, sales2012, earnings2013, sales2013, earnings2014, sales2014), false, false, LocalTempView, UNSUPPORTED, true +- Project [course#x, earnings2012#x, sales2012#x, earnings2013#x, sales2013#x, earnings2014#x, sales2014#x] +- SubqueryAlias courseEarningsAndSales +- LocalRelation [course#x, earnings2012#x, sales2012#x, earnings2013#x, sales2013#x, earnings2014#x, sales2014#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/using-join.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/using-join.sql.out index 3c9c6ec169afa..5a74c4be107e3 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/using-join.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/using-join.sql.out @@ -10,7 +10,7 @@ CreateViewCommand `nt1`, select * from values ("one", 1), ("two", 2), ("three", 3) - as nt1(k, v1), false, false, LocalTempView, true + as nt1(k, v1), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v1#x] +- SubqueryAlias nt1 +- LocalRelation [k#x, v1#x] @@ -29,7 +29,7 @@ CreateViewCommand `nt2`, select * from values ("two", 22), ("one", 5), ("four", 4) - as nt2(k, v2), false, false, LocalTempView, true + as nt2(k, v2), false, false, LocalTempView, UNSUPPORTED, true +- Project [k#x, v2#x] +- SubqueryAlias nt2 +- LocalRelation [k#x, v2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-binding-config.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-binding-config.sql.out new file mode 100644 index 0000000000000..ba4f643ffdef4 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-binding-config.sql.out @@ -0,0 +1,557 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +SET spark.sql.viewSchemaBindingMode +-- !query analysis +SetCommand (spark.sql.viewSchemaBindingMode,None) + + +-- !query +SET spark.sql.viewSchemaBindingMode = EVOLUTION +-- !query analysis +java.lang.IllegalArgumentException +The value of spark.sql.viewSchemaBindingMode should be one of COMPENSATION, DISABLED, but was EVOLUTION + + +-- !query +SET spark.sql.viewSchemaBindingMode = DISABLED +-- !query analysis +SetCommand (spark.sql.viewSchemaBindingMode,Some(DISABLED)) + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT 1 +-- !query analysis +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 44, + "fragment" : "WITH SCHEMA BINDING" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT 1 +-- !query analysis +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 49, + "fragment" : "WITH SCHEMA COMPENSATION" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT 1 +-- !query analysis +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 51, + "fragment" : "WITH SCHEMA TYPE EVOLUTION" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT 1 +-- !query analysis +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 46, + "fragment" : "WITH SCHEMA EVOLUTION" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT 1 +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT 1, false, true, PersistedView, UNSUPPORTED, true + +- Project [1 AS 1#x] + +- OneRowRelation + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +SHOW TABLE EXTENDED LIKE 'v' +-- !query analysis +ShowTablesCommand default, v, [namespace#x, tableName#x, isTemporary#x, information#x], true + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTableCommand `spark_catalog`.`default`.`v`, true, true, false + + +-- !query +CREATE OR REPLACE TEMPORARY VIEW v AS SELECT 1 +-- !query analysis +CreateViewCommand `v`, SELECT 1, false, true, LocalTempView, UNSUPPORTED, true + +- Project [1 AS 1#x] + +- OneRowRelation + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +SHOW TABLE EXTENDED LIKE 'v' +-- !query analysis +ShowTablesCommand default, v, [namespace#x, tableName#x, isTemporary#x, information#x], true + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTempViewCommand v + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, UNSUPPORTED, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"BIGINT\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +SET spark.sql.viewSchemaBindingMode = COMPENSATION +-- !query analysis +SetCommand (spark.sql.viewSchemaBindingMode,Some(COMPENSATION)) + + +-- !query +SET spark.sql.ansi.enabled = false +-- !query analysis +SetCommand (spark.sql.ansi.enabled,Some(false)) + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, COMPENSATION, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE t +-- !query analysis +DropTable false, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as bigint) AS c1#xL] + +- LocalRelation [col1#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#xL as int) AS c1#x] + +- Project [c1#xL] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +INSERT INTO t VALUES ('a', 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 MAP, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.catalyst.ExtendedAnalysisException +{ + "errorClass" : "DATATYPE_MISMATCH.CAST_WITHOUT_SUGGESTION", + "sqlState" : "42K09", + "messageParameters" : { + "sqlExpr" : "\"c1\"", + "srcType" : "\"MAP\"", + "targetType" : "\"INT\"" + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 15, + "stopIndex" : 15, + "fragment" : "v" + } ] +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, COMPENSATION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [cast(c1#x as int) AS c1#x, cast(c2#x as int) AS c2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c3 INT NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTableCommand `spark_catalog`.`default`.`v`, true, true, false + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-binding.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-binding.sql.out new file mode 100644 index 0000000000000..5a55f4d76b648 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-binding.sql.out @@ -0,0 +1,272 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, BINDING, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE t +-- !query analysis +DropTable false, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"BIGINT\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, BINDING, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [cast(c1#x as int) AS c1#x, cast(c2#x as int) AS c2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE t +-- !query analysis +DropTable false, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +SET spark.sql.viewSchemaBindingMode=DISABLED +-- !query analysis +SetCommand (spark.sql.viewSchemaBindingMode,Some(DISABLED)) + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, UNSUPPORTED, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +ALTER VIEW v WITH SCHEMA BINDING +-- !query analysis +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 14, + "stopIndex" : 32, + "fragment" : "WITH SCHEMA BINDING" + } ] +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE t +-- !query analysis +DropTable false, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"BIGINT\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTableCommand `spark_catalog`.`default`.`v`, true, true, false + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-compensation.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-compensation.sql.out new file mode 100644 index 0000000000000..64295a6f9bc0c --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-compensation.sql.out @@ -0,0 +1,414 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +SET spark.sql.ansi.enabled = false +-- !query analysis +SetCommand (spark.sql.ansi.enabled,Some(false)) + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, COMPENSATION, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE t +-- !query analysis +DropTable false, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as bigint) AS c1#xL] + +- LocalRelation [col1#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#xL as int) AS c1#x] + +- Project [c1#xL] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +INSERT INTO t VALUES ('a', 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 MAP, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.catalyst.ExtendedAnalysisException +{ + "errorClass" : "DATATYPE_MISMATCH.CAST_WITHOUT_SUGGESTION", + "sqlState" : "42K09", + "messageParameters" : { + "sqlExpr" : "\"c1\"", + "srcType" : "\"MAP\"", + "targetType" : "\"INT\"" + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 15, + "stopIndex" : 15, + "fragment" : "v" + } ] +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, COMPENSATION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [cast(c1#x as int) AS c1#x, cast(c2#x as int) AS c2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c3 INT NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES(1) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as int) AS c1#x] + +- LocalRelation [col1#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, BINDING, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES('1') +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as string) AS c1#x] + +- LocalRelation [col1#x] + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"STRING\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +ALTER VIEW v WITH SCHEMA COMPENSATION +-- !query analysis +AlterViewSchemaBindingCommand `spark_catalog`.`default`.`v`, COMPENSATION + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTableCommand `spark_catalog`.`default`.`v`, true, true, false + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-evolution.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-evolution.sql.out new file mode 100644 index 0000000000000..258edf31d4c17 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-evolution.sql.out @@ -0,0 +1,781 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c4 STRING NOT NULL, c5 DOUBLE) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2.0) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c4, c5] ++- Project [cast(col1#x as string) AS c4#x, cast(col2#x as double) AS c5#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c4#x, c5#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c4#x, c5#x]) + +- Project [c4#x, c5#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c4#x,c5#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c4 STRING, c5 DOUBLE, c6 DATE) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01') +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c4, c5, c6] ++- Project [cast(col1#x as string) AS c4#x, cast(col2#x as double) AS c5#x, cast(col3#x as date) AS c6#x] + +- LocalRelation [col1#x, col2#x, col3#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c4#x, c5#x, c6#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c4#x, c5#x, c6#x]) + +- Project [c4#x, c5#x, c6#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c4#x,c5#x,c6#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,None), (a2,None)], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#x, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#x, a2#x]) + +- Project [c1#x AS a1#x, c2#x AS a2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 DOUBLE) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2.0) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as double) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#x, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#x, a2#x]) + +- Project [c1#x AS a1#x, c2#x AS a2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING, c2 DOUBLE, c3 DATE) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01') +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2, c3] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as double) AS c2#x, cast(col3#x as date) AS c3#x] + +- LocalRelation [col1#x, col2#x, col3#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#x, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#x, a2#x]) + +- Project [c1#x AS a1#x, c2#x AS a2#x] + +- Project [c1#x, c2#x, c3#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x,c3#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,None), (a2,None)], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#x, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#x, a2#x]) + +- Project [c1#x AS a1#x, c2#x AS a2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v (a1, a2) AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c3 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v (a1, a2) AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT COMMENT 'c1', c2 INT COMMENT 'c2') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,None), (a2,None)], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,None), (a2,None)], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6c', c2 STRING COMMENT 'c2 6c') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#xL, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#xL, a2#x]) + +- Project [c1#xL AS a1#xL, c2#x AS a2#x] + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +CREATE OR REPLACE VIEW v(a1 COMMENT 'a1', a2 COMMENT 'a2') WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,Some(a1)), (a2,Some(a2))], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6d', c2 STRING COMMENT 'c2 6d') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#xL, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#xL, a2#x]) + +- Project [c1#xL AS a1#xL, c2#x AS a2#x] + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, EVOLUTION, true + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6e', c2 STRING COMMENT 'c2 6e') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#xL, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#xL, c2#x]) + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t1 +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t1 + + +-- !query +CREATE TABLE t1(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t1`, false + + +-- !query +DROP TABLE IF EXISTS t2 +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t2 + + +-- !query +CREATE TABLE t2(c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t2`, false + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t1, t2 +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t1, t2, false, true, PersistedView, EVOLUTION, true + +- Project [c1#x, c2#x] + +- Join Inner + :- SubqueryAlias spark_catalog.default.t1 + : +- Relation spark_catalog.default.t1[c1#x] parquet + +- SubqueryAlias spark_catalog.default.t2 + +- Relation spark_catalog.default.t2[c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x, c2#x] + +- Join Inner + :- SubqueryAlias spark_catalog.default.t1 + : +- Relation spark_catalog.default.t1[c1#x] parquet + +- SubqueryAlias spark_catalog.default.t2 + +- Relation spark_catalog.default.t2[c2#x] parquet + + +-- !query +DROP TABLE IF EXISTS t2 +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t2 + + +-- !query +CREATE TABLE t2(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t2`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.catalyst.ExtendedAnalysisException +{ + "errorClass" : "COLUMN_ALREADY_EXISTS", + "sqlState" : "42711", + "messageParameters" : { + "columnName" : "`c1`" + } +} + + +-- !query +DROP TABLE IF EXISTS t1 +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t1 + + +-- !query +DROP TABLE IF EXISTS t2 +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t2 + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES(1) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as int) AS c1#x] + +- LocalRelation [col1#x] + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, COMPENSATION, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +ALTER VIEW v WITH SCHEMA EVOLUTION +-- !query analysis +AlterViewSchemaBindingCommand `spark_catalog`.`default`.`v`, EVOLUTION + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTableCommand `spark_catalog`.`default`.`v`, true, true, false + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-type-evolution.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-type-evolution.sql.out new file mode 100644 index 0000000000000..95aa35d59fdc8 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/view-schema-type-evolution.sql.out @@ -0,0 +1,456 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x AS c1#x, c2#x AS c2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 DOUBLE) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2.0) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as double) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x AS c1#x, c2#x AS c2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING, c2 DOUBLE, c3 DATE) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01') +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2, c3] ++- Project [cast(col1#x as string) AS c1#x, cast(col2#x as double) AS c2#x, cast(col3#x as date) AS c3#x] + +- LocalRelation [col1#x, col2#x, col3#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x AS c1#x, c2#x AS c2#x] + +- Project [c1#x, c2#x, c3#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x,c3#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1, c2] ++- Project [cast(col1#x as int) AS c1#x, cast(col2#x as int) AS c2#x] + +- LocalRelation [col1#x, col2#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x, c2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x, c2#x]) + +- Project [c1#x AS c1#x, c2#x AS c2#x] + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c3 INT, c2 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT COMMENT 'c1', c2 INT COMMENT 'c2') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,None), (a2,None)], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#x, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6a', c2 STRING COMMENT 'c2 6a') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#xL, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#xL, a2#x]) + +- Project [c1#xL AS a1#xL, c2#x AS a2#x] + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +CREATE OR REPLACE VIEW v(a1 COMMENT 'a1', a2 COMMENT 'a2') WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, [(a1,Some(a1)), (a2,Some(a2))], SELECT * FROM t, false, true, PersistedView, TYPE EVOLUTION, true + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6b', c2 STRING COMMENT 'c2 6b') USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +SELECT * FROM v +-- !query analysis +Project [a1#xL, a2#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [a1#xL, a2#x]) + +- Project [c1#xL AS a1#xL, c2#x AS a2#x] + +- Project [c1#xL, c2#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#xL,c2#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES(1) +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as int) AS c1#x] + +- LocalRelation [col1#x] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT * FROM t +-- !query analysis +CreateViewCommand `spark_catalog`.`default`.`v`, SELECT * FROM t, false, true, PersistedView, COMPENSATION, true + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t + + +-- !query +CREATE TABLE t(c1 STRING) USING PARQUET +-- !query analysis +CreateDataSourceTableCommand `spark_catalog`.`default`.`t`, false + + +-- !query +INSERT INTO t VALUES('1') +-- !query analysis +InsertIntoHadoopFsRelationCommand file:[not included in comparison]/{warehouse_dir}/t, false, Parquet, [path=file:[not included in comparison]/{warehouse_dir}/t], Append, `spark_catalog`.`default`.`t`, org.apache.spark.sql.execution.datasources.InMemoryFileIndex(file:[not included in comparison]/{warehouse_dir}/t), [c1] ++- Project [cast(col1#x as string) AS c1#x] + +- LocalRelation [col1#x] + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [cast(c1#x as int) AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +ALTER VIEW v WITH SCHEMA TYPE EVOLUTION +-- !query analysis +AlterViewSchemaBindingCommand `spark_catalog`.`default`.`v`, TYPE EVOLUTION + + +-- !query +SELECT * FROM v +-- !query analysis +Project [c1#x] ++- SubqueryAlias spark_catalog.default.v + +- View (`spark_catalog`.`default`.`v`, [c1#x]) + +- Project [c1#x AS c1#x] + +- Project [c1#x] + +- SubqueryAlias spark_catalog.default.t + +- Relation spark_catalog.default.t[c1#x] parquet + + +-- !query +DESCRIBE EXTENDED v +-- !query analysis +DescribeTableCommand `spark_catalog`.`default`.`v`, true, [col_name#x, data_type#x, comment#x] + + +-- !query +DROP VIEW IF EXISTS v +-- !query analysis +DropTableCommand `spark_catalog`.`default`.`v`, true, true, false + + +-- !query +DROP TABLE IF EXISTS t +-- !query analysis +DropTable true, false ++- ResolvedIdentifier V2SessionCatalog(spark_catalog), default.t diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/window.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/window.sql.out index a7168db622a66..8c129534e7d03 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/window.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/window.sql.out @@ -22,7 +22,7 @@ CreateViewCommand `testData`, SELECT * FROM VALUES (3, 2147483650L, 100.001D, date("2020-12-31"), timestamp_seconds(1609372800), "b"), (null, null, null, null, null, null), (3, 1L, 1.0D, date("2017-08-01"), timestamp_seconds(1501545600), null) -AS testData(val, val_long, val_double, val_date, val_timestamp, cate), false, true, LocalTempView, true +AS testData(val, val_long, val_double, val_date, val_timestamp, cate), false, true, LocalTempView, UNSUPPORTED, true +- Project [val#x, val_long#xL, val_double#x, val_date#x, val_timestamp#x, cate#x] +- SubqueryAlias testData +- LocalRelation [val#x, val_long#xL, val_double#x, val_date#x, val_timestamp#x, cate#x] @@ -67,7 +67,7 @@ CreateViewCommand `basic_pays`, SELECT * FROM VALUES ('Pamela Castillo','SCM',11303), ('Larry Bott','SCM',11798), ('Barry Jones','SCM',10586) -AS basic_pays(employee_name, department, salary), false, true, LocalTempView, true +AS basic_pays(employee_name, department, salary), false, true, LocalTempView, UNSUPPORTED, true +- Project [employee_name#x, department#x, salary#x] +- SubqueryAlias basic_pays +- LocalRelation [employee_name#x, department#x, salary#x] @@ -96,7 +96,7 @@ CreateViewCommand `test_ignore_null`, SELECT * FROM VALUES ('a', 6, 'z'), ('a', 7, 'v'), ('a', 8, null) -AS test_ignore_null(content, id, v), false, true, LocalTempView, true +AS test_ignore_null(content, id, v), false, true, LocalTempView, UNSUPPORTED, true +- Project [content#x, id#x, v#x] +- SubqueryAlias test_ignore_null +- LocalRelation [content#x, id#x, v#x] @@ -1284,7 +1284,7 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException -- !query create or replace temp view t1 (p, o) as values (1, 1), (1, 1), (1, 2), (2, 1), (2, 1), (2, 2) -- !query analysis -CreateViewCommand `t1`, [(p,None), (o,None)], values (1, 1), (1, 1), (1, 2), (2, 1), (2, 1), (2, 2), false, true, LocalTempView, true +CreateViewCommand `t1`, [(p,None), (o,None)], values (1, 1), (1, 1), (1, 2), (2, 1), (2, 1), (2, 2), false, true, LocalTempView, UNSUPPORTED, true +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/xml-functions.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/xml-functions.sql.out index 05b8eed46d1d6..de9fb2f395210 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/xml-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/xml-functions.sql.out @@ -359,7 +359,7 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException -- !query CREATE TEMPORARY VIEW xmlTable(xmlField, a) AS SELECT * FROM VALUES ('

1"2"

', 'a') -- !query analysis -CreateViewCommand `xmlTable`, [(xmlField,None), (a,None)], SELECT * FROM VALUES ('

1"2"

', 'a'), false, false, LocalTempView, true +CreateViewCommand `xmlTable`, [(xmlField,None), (a,None)], SELECT * FROM VALUES ('

1"2"

', 'a'), false, false, LocalTempView, UNSUPPORTED, true +- Project [col1#x, col2#x] +- LocalRelation [col1#x, col2#x] diff --git a/sql/core/src/test/resources/sql-tests/inputs/view-schema-binding-config.sql b/sql/core/src/test/resources/sql-tests/inputs/view-schema-binding-config.sql new file mode 100644 index 0000000000000..fccdcb920fd37 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/inputs/view-schema-binding-config.sql @@ -0,0 +1,117 @@ +-- This test suits check the spark.sql.viewSchemaBindingMode configuration. +-- It can be DISABLED and COMPENSATION + +-- Verify the default binding is COMPENSATION +SET spark.sql.viewSchemaBindingMode; + +-- Verify which values are allowed +SET spark.sql.viewSchemaBindingMode = EVOLUTION; + +-- 1. Test DISABLED mode. +SET spark.sql.viewSchemaBindingMode = DISABLED; + +-- 1.a Attempts to use the SCHEMA BINDING clause fail with FEATURE_NOT_ENABLED +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT 1; +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT 1; +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT 1; +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT 1; + +-- 1.b Existing SHOW and DESCRIBE should behave as before Spark 4.4.0 +CREATE OR REPLACE VIEW v AS SELECT 1; +DESCRIBE EXTENDED v; +SHOW TABLE EXTENDED LIKE 'v'; +DROP VIEW IF EXISTS v; + +CREATE OR REPLACE TEMPORARY VIEW v AS SELECT 1; +DESCRIBE EXTENDED v; +SHOW TABLE EXTENDED LIKE 'v'; +DROP VIEW IF EXISTS v; + +-- 1.c Views get invalidated if the types change in an unsafe matter +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; +CREATE OR REPLACE VIEW v AS SELECT * FROM t; +SELECT * FROM v; +-- Baseline: v(c1 INT); +DESCRIBE EXTENDED v; + +-- Widen the column c1 in t +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET; +-- The view should be invalidated, cannot upcast from BIGINT to INT +SELECT * FROM v; + +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- 2. Test COMPENSATION mode. In this mode Spark tolerates any supported CAST, not just up cast +SET spark.sql.viewSchemaBindingMode = COMPENSATION; + +-- To verify ANSI_MODE is enforced even if ANSI_MODE is turned off. +SET spark.sql.ansi.enabled = false; + +-- 2.a In COMPENSATION views get invalidated if the type can't cast +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; +CREATE OR REPLACE VIEW v AS SELECT * FROM t; +SELECT * FROM v; +-- Baseline: v(c1 INT); +DESCRIBE EXTENDED v; + +-- Widen the column c1 in t +DROP TABLE t; +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET; +INSERT INTO t VALUES (1); +SELECT * FROM v; +-- The view still describes as v(c1 BIGINT) +DESCRIBE EXTENDED v; + +-- 2.b In COMPENSATION views ignore added columns and change the type +-- Expect the added column to be ignore, but the type will be tolerated, as long as it can cast +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING NOT NULL, c2 INT) USING PARQUET; +INSERT INTO t VALUES ('1', 2); +SELECT * FROM v; +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- Runtime error if the cast fails +INSERT INTO t VALUES ('a', 2); +SELECT * FROM v; + +-- Compile time error if the cast can't be done +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 MAP, c2 INT) USING PARQUET; + +-- The view should be invalidated, we can't cast a MAP to INT +SELECT * FROM v; + +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- 2.c Still can't drop a column, though +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v AS SELECT * FROM t; +SELECT * FROM v; + +-- Describes as v(c1 INT, c2 INT) +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; + +-- The view should be invalidated, it lost a column +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- 2.d Attempt to rename a column +DROP TABLE IF EXISTS t; +CREATE TABLE t(c3 INT NOT NULL, c2 INT) USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- 99 Cleanup +DROP VIEW IF EXISTS v; +DROP TABLE IF EXISTS t; diff --git a/sql/core/src/test/resources/sql-tests/inputs/view-schema-binding.sql b/sql/core/src/test/resources/sql-tests/inputs/view-schema-binding.sql new file mode 100644 index 0000000000000..9ccae83e74675 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/inputs/view-schema-binding.sql @@ -0,0 +1,64 @@ +-- This test suite checks that the WITH SCHEMA BINDING clause is correctly implemented + +-- New view with schema binding +-- 1.a BINDING is persisted +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t; +SELECT * FROM v; +-- Baseline: v(c1 INT); +DESCRIBE EXTENDED v; + +-- Widen the column c1 in t +DROP TABLE t; +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET; +-- The view should be invalidated, cannot upcast from BIGINT to INT +SELECT * FROM v; + +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- 1.b In BINDING views get invalidated if a column is lost +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET; +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t; +SELECT * FROM v; +-- Baseline: v(c1 INT, c2 INT); +DESCRIBE EXTENDED v; + +-- Drop the column c2 from t +DROP TABLE t; +CREATE TABLE t(c1 INT) USING PARQUET; +-- The view should be invalidated, it lost a column +SELECT * FROM v; + +-- The view still describes as v(c1 INT, c2 INT); +DESCRIBE EXTENDED v; + +-- Test ALTER VIEW ... WITH SCHEMA BINDING +SET spark.sql.viewSchemaBindingMode=DISABLED; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; +CREATE OR REPLACE VIEW v AS SELECT * FROM t; +SELECT * FROM v; +-- Baseline: v(c1 INT); +-- There is no binding recorded +DESCRIBE EXTENDED v; + +ALTER VIEW v WITH SCHEMA BINDING; +-- Baseline: v(c1 INT); +-- There is SCHEMA BINDING recorded +DESCRIBE EXTENDED v; + +DROP TABLE t; +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET; +-- The view should be invalidated, cannot upcast from BIGINT to INT +SELECT * FROM v; + +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- 99 Cleanup +DROP VIEW IF EXISTS v; +DROP TABLE IF EXISTS t; diff --git a/sql/core/src/test/resources/sql-tests/inputs/view-schema-compensation.sql b/sql/core/src/test/resources/sql-tests/inputs/view-schema-compensation.sql new file mode 100644 index 0000000000000..21a3ce1e12293 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/inputs/view-schema-compensation.sql @@ -0,0 +1,90 @@ +-- This test suite checks the WITH SCHEMA COMPENSATION clause +-- Disable ANSI mode to ensure we are forcing it explicitly in the CASTS +SET spark.sql.ansi.enabled = false; + +-- In COMPENSATION views get invalidated if the type can't cast +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT * FROM t; +SELECT * FROM v; +-- Baseline: v(c1 INT); +DESCRIBE EXTENDED v; + +-- Widen the column c1 in t +DROP TABLE t; +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET; +INSERT INTO t VALUES (1); +SELECT * FROM v; +-- The view still describes as v(c1 BIGINT) +DESCRIBE EXTENDED v; + +-- In COMPENSATION views ignore added a column and change the type +-- Expect the added column to be ignore, but the type will be tolerated, as long as it can cast +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING NOT NULL, c2 INT) USING PARQUET; +INSERT INTO t VALUES ('1', 2); +SELECT * FROM v; +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- Runtime error if the cast fails +INSERT INTO t VALUES ('a', 2); +SELECT * FROM v; + +-- Compile time error if the cast can't be done +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 MAP, c2 INT) USING PARQUET; + +-- The view should be invalidated, we can't cast a MAP to INT +SELECT * FROM v; + +-- The view still describes as v(c1 INT); +DESCRIBE EXTENDED v; + +-- Still can't drop a column, though +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v AS SELECT * FROM t; +SELECT * FROM v; + +-- Describes as v(c1 INT, c2 INT) +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET; + +-- The view should be invalidated, it lost a column +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Attempt to rename a column, this fails +DROP TABLE IF EXISTS t; +CREATE TABLE t(c3 INT NOT NULL, c2 INT) USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Test ALTER VIEW ... WITH SCHEMA ... +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT) USING PARQUET; +INSERT INTO t VALUES(1); +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING) USING PARQUET; +INSERT INTO t VALUES('1'); + +-- This fails, because teh view uses SCHEMA BINDING +SELECT * FROM v; + +-- Now upgrade the view to schema compensation +ALTER VIEW v WITH SCHEMA COMPENSATION; +DESCRIBE EXTENDED v; + +-- Success +SELECT * FROM v; + +-- Cleanup +DROP VIEW IF EXISTS v; +DROP TABLE IF EXISTS t; diff --git a/sql/core/src/test/resources/sql-tests/inputs/view-schema-evolution.sql b/sql/core/src/test/resources/sql-tests/inputs/view-schema-evolution.sql new file mode 100644 index 0000000000000..5ff153acef25c --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/inputs/view-schema-evolution.sql @@ -0,0 +1,155 @@ +-- This test suite checks the WITH SCHEMA TYPE EVOLUTION clause + +-- In EVOLUTION mode Spark will inherit everything from the query, unless +-- a column list is given. In that case it behaves like TYPE EVOLUTION +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- In EVOLUTION views inherit column type changes and name changes +DROP TABLE IF EXISTS t; +CREATE TABLE t(c4 STRING NOT NULL, c5 DOUBLE) USING PARQUET; +INSERT INTO t VALUES ('1', 2.0); +SELECT * FROM v; +-- The view now describes as v(c3 STRING, c4 DOUBLE) +DESCRIBE EXTENDED v; + +-- In EVOLUTION new columns are inherited +DROP TABLE IF EXISTS t; +CREATE TABLE t(c4 STRING, c5 DOUBLE, c6 DATE) USING PARQUET; +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01'); +SELECT * FROM v; +-- The view describes as v(c4 STRING, c5 DOUBLE, c6 DATE) +DESCRIBE EXTENDED v; + +-- We can even drop columns +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t; +SELECT * FROM v; +-- Describes as v(c1 INT, c2 INT) +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT) USING PARQUET; +SELECT * FROM v; +-- The view describes as v(c1 INT) +DESCRIBE EXTENDED v; + +-- If a column list is given it behaves like TYPE EVOLUTION +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- In EVOLUTION views with explicit column lists still inherit column type changes +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING NOT NULL, c2 DOUBLE) USING PARQUET; +INSERT INTO t VALUES ('1', 2.0); +SELECT * FROM v; +-- The view now describes as v(a1 STRING, a2 DOUBLE) +DESCRIBE EXTENDED v; + +-- In EVOLUTION views with explicit column lists no new columns are inherited +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING, c2 DOUBLE, c3 DATE) USING PARQUET; +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01'); +SELECT * FROM v; +-- The view still describes as v(a1 STRING, a2 DOUBLE) +DESCRIBE EXTENDED v; + +-- In EVOLUTION views with explicit column lists can't drop a column +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t; +SELECT * FROM v; + +-- Describes as v(a1 INT, a2 INT) +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT) USING PARQUET; + +-- The view should be invalidated, it lost a column +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Attempt to rename a column +DROP TABLE IF EXISTS t; +CREATE TABLE t(c3 INT, c2 INT) USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Test preservation of comments +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT COMMENT 'c1', c2 INT COMMENT 'c2') USING PARQUET; + +-- EVOLUTION, column list, but no comments +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +-- EVOLUTION, column list, but no comments +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6c', c2 STRING COMMENT 'c2 6c') USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- EVOLUTION, column list with comments +CREATE OR REPLACE VIEW v(a1 COMMENT 'a1', a2 COMMENT 'a2') WITH SCHEMA EVOLUTION AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6d', c2 STRING COMMENT 'c2 6d') USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- EVOLUTION, no column list +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6e', c2 STRING COMMENT 'c2 6e') USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Test error condition where a duplicate column name is produced +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(c1 INT) USING PARQUET; +DROP TABLE IF EXISTS t2; +CREATE TABLE t2(c2 INT) USING PARQUET; +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t1, t2; +SELECT * FROM v; +DROP TABLE IF EXISTS t2; +CREATE TABLE t2(c1 INT) USING PARQUET; +-- This should fail with a duplicate column error +SELECT * FROM v; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; + +-- Test ALTER VIEW ... WITH SCHEMA EVOLUTION + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT) USING PARQUET; +INSERT INTO t VALUES(1); +CREATE OR REPLACE VIEW v AS SELECT * FROM t; + +ALTER VIEW v WITH SCHEMA EVOLUTION; +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING, c2 INT) USING PARQUET; +-- No error, extra column +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- clean up +DROP VIEW IF EXISTS v; +DROP TABLE IF EXISTS t; diff --git a/sql/core/src/test/resources/sql-tests/inputs/view-schema-type-evolution.sql b/sql/core/src/test/resources/sql-tests/inputs/view-schema-type-evolution.sql new file mode 100644 index 0000000000000..c0278f15b6418 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/inputs/view-schema-type-evolution.sql @@ -0,0 +1,90 @@ +-- This test suite checks the WITH SCHEMA TYPE EVOLUTION clause + +-- In TYPE EVOLUTION mode Spark will inherit the view column types from the query +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING NOT NULL, c2 DOUBLE) USING PARQUET; +INSERT INTO t VALUES ('1', 2.0); +SELECT * FROM v; +-- The view now describes as v(c1 STRING, c2 DOUBLE) +DESCRIBE EXTENDED v; + +-- In TYPE EVOLUTION no new columns are inherited +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING, c2 DOUBLE, c3 DATE) USING PARQUET; +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01'); +SELECT * FROM v; +-- The view still describes as v(c1 STRING, c2 DOUBLE) +DESCRIBE EXTENDED v; + +-- Still can't drop a column +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET; +INSERT INTO t VALUES (1, 2); +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t; +SELECT * FROM v; + +-- Describes as v(c1 INT, c2 INT) +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT) USING PARQUET; + +-- The view should be invalid, it lost a column +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Attempt to rename a column +DROP TABLE IF EXISTS t; +CREATE TABLE t(c3 INT, c2 INT) USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Test preservation of comments +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT COMMENT 'c1', c2 INT COMMENT 'c2') USING PARQUET; + +-- Inherit comments from the table, if none are given +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6a', c2 STRING COMMENT 'c2 6a') USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- TYPE EVOLUTION, column list with comments +CREATE OR REPLACE VIEW v(a1 COMMENT 'a1', a2 COMMENT 'a2') WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t; +DESCRIBE EXTENDED v; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6b', c2 STRING COMMENT 'c2 6b') USING PARQUET; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Test ALTER VIEW ... WITH SCHEMA TYPE EVOLUTION + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 INT) USING PARQUET; +INSERT INTO t VALUES(1); +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT * FROM t; + +DROP TABLE IF EXISTS t; +CREATE TABLE t(c1 STRING) USING PARQUET; +INSERT INTO t VALUES('1'); +SELECT * FROM v; +DESCRIBE EXTENDED v; + +ALTER VIEW v WITH SCHEMA TYPE EVOLUTION; +SELECT * FROM v; +DESCRIBE EXTENDED v; + +-- Cleanup +DROP VIEW IF EXISTS v; +DROP TABLE IF EXISTS t; diff --git a/sql/core/src/test/resources/sql-tests/results/ansi/keywords.sql.out b/sql/core/src/test/resources/sql-tests/results/ansi/keywords.sql.out index dee73b082ee99..5c8cd52eb4ee2 100644 --- a/sql/core/src/test/resources/sql-tests/results/ansi/keywords.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/ansi/keywords.sql.out @@ -23,6 +23,7 @@ AUTHORIZATION true BETWEEN false BIGINT false BINARY false +BINDING false BOOLEAN false BOTH true BUCKET false @@ -52,6 +53,7 @@ COMMENT false COMMIT false COMPACT false COMPACTIONS false +COMPENSATION false COMPUTE false CONCATENATE false CONSTRAINT true diff --git a/sql/core/src/test/resources/sql-tests/results/charvarchar.sql.out b/sql/core/src/test/resources/sql-tests/results/charvarchar.sql.out index 8ff5865168878..3e7dc1858b42c 100644 --- a/sql/core/src/test/resources/sql-tests/results/charvarchar.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/charvarchar.sql.out @@ -193,6 +193,7 @@ Created By [not included in comparison] Type VIEW View Text select * from char_tbl View Original Text select * from char_tbl +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.default View Query Output Columns [c, v] @@ -362,6 +363,7 @@ Created By [not included in comparison] Type VIEW View Text select * from char_tbl2 View Original Text select * from char_tbl2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.default View Query Output Columns [c, v] @@ -422,6 +424,7 @@ Created By [not included in comparison] Type VIEW View Text select * from char_tbl2 View Original Text select * from char_tbl2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.default View Query Output Columns [c, v] Table Properties [yes=no] @@ -482,6 +485,7 @@ Created By [not included in comparison] Type VIEW View Text select * from char_tbl2 View Original Text select * from char_tbl2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.default View Query Output Columns [c, v] diff --git a/sql/core/src/test/resources/sql-tests/results/describe.sql.out b/sql/core/src/test/resources/sql-tests/results/describe.sql.out index 10c27ea0cc794..004802c48d4c0 100644 --- a/sql/core/src/test/resources/sql-tests/results/describe.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/describe.sql.out @@ -536,6 +536,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM t View Original Text SELECT * FROM t +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.default View Query Output Columns [a, b, c, d] @@ -560,6 +561,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM t View Original Text SELECT * FROM t +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.default View Query Output Columns [a, b, c, d] diff --git a/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out b/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out index 97a3f6c8f2ee2..3830b47ba8a6d 100644 --- a/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out @@ -975,7 +975,7 @@ Execute CreateViewCommand (1) Output: [] (2) CreateViewCommand -Arguments: `spark_catalog`.`default`.`explain_view`, SELECT key, val FROM explain_temp1, false, false, PersistedView, true +Arguments: `spark_catalog`.`default`.`explain_view`, SELECT key, val FROM explain_temp1, false, false, PersistedView, COMPENSATION, true (3) LogicalRelation Arguments: parquet, [key#x, val#x], `spark_catalog`.`default`.`explain_temp1`, false diff --git a/sql/core/src/test/resources/sql-tests/results/explain.sql.out b/sql/core/src/test/resources/sql-tests/results/explain.sql.out index e21d968eb252e..c0dee38e6d07a 100644 --- a/sql/core/src/test/resources/sql-tests/results/explain.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/explain.sql.out @@ -870,7 +870,7 @@ Execute CreateViewCommand (1) Output: [] (2) CreateViewCommand -Arguments: `spark_catalog`.`default`.`explain_view`, SELECT key, val FROM explain_temp1, false, false, PersistedView, true +Arguments: `spark_catalog`.`default`.`explain_view`, SELECT key, val FROM explain_temp1, false, false, PersistedView, COMPENSATION, true (3) LogicalRelation Arguments: parquet, [key#x, val#x], `spark_catalog`.`default`.`explain_temp1`, false diff --git a/sql/core/src/test/resources/sql-tests/results/keywords.sql.out b/sql/core/src/test/resources/sql-tests/results/keywords.sql.out index 7f86e84aa3c75..9138fcd552d87 100644 --- a/sql/core/src/test/resources/sql-tests/results/keywords.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/keywords.sql.out @@ -23,6 +23,7 @@ AUTHORIZATION false BETWEEN false BIGINT false BINARY false +BINDING false BOOLEAN false BOTH false BUCKET false @@ -52,6 +53,7 @@ COMMENT false COMMIT false COMPACT false COMPACTIONS false +COMPENSATION false COMPUTE false CONCATENATE false CONSTRAINT false diff --git a/sql/core/src/test/resources/sql-tests/results/postgreSQL/create_view.sql.out b/sql/core/src/test/resources/sql-tests/results/postgreSQL/create_view.sql.out index 5a36cfd2369b4..4c2fd671229a1 100644 --- a/sql/core/src/test/resources/sql-tests/results/postgreSQL/create_view.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/postgreSQL/create_view.sql.out @@ -267,6 +267,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM base_table View Original Text SELECT * FROM base_table +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [a, id] @@ -332,6 +333,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM base_table View Original Text SELECT * FROM base_table +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [a, id] @@ -387,6 +389,7 @@ View Text SELECT t1.a AS t1_a, t2.a AS t2_a View Original Text SELECT t1.a AS t1_a, t2.a AS t2_a FROM base_table t1, base_table2 t2 WHERE t1.id = t2.id +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [t1_a, t2_a] @@ -459,6 +462,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM base_table WHERE id IN (SELECT id FROM base_table2) View Original Text SELECT * FROM base_table WHERE id IN (SELECT id FROM base_table2) +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [a, id] @@ -489,6 +493,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT t1.id, t2.a FROM base_table t1, (SELECT * FROM base_table2) t2 View Original Text SELECT t1.id, t2.a FROM base_table t1, (SELECT * FROM base_table2) t2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [id, a] @@ -519,6 +524,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM base_table WHERE EXISTS (SELECT 1 FROM base_table2) View Original Text SELECT * FROM base_table WHERE EXISTS (SELECT 1 FROM base_table2) +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [a, id] @@ -549,6 +555,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM base_table WHERE NOT EXISTS (SELECT 1 FROM base_table2) View Original Text SELECT * FROM base_table WHERE NOT EXISTS (SELECT 1 FROM base_table2) +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [a, id] @@ -579,6 +586,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM base_table WHERE EXISTS (SELECT 1) View Original Text SELECT * FROM base_table WHERE EXISTS (SELECT 1) +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.temp_view_test View Query Output Columns [a, id] @@ -790,6 +798,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM t1 CROSS JOIN t2 View Original Text SELECT * FROM t1 CROSS JOIN t2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.testviewschm2 View Query Output Columns [num, name, num2, value] @@ -840,6 +849,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num2 View Original Text SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.testviewschm2 View Query Output Columns [num, name, num2, value] @@ -890,6 +900,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 View Original Text SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.testviewschm2 View Query Output Columns [num, name, num2, value] @@ -940,6 +951,7 @@ Created By [not included in comparison] Type VIEW View Text SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 AND t2.value = 'xxx' View Original Text SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num2 AND t2.value = 'xxx' +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.testviewschm2 View Query Output Columns [num, name, num2, value] @@ -1060,6 +1072,7 @@ AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f) View Original Text SELECT * FROM tbl1 WHERE tbl1.a BETWEEN (SELECT d FROM tbl2 WHERE c = 1) AND (SELECT e FROM tbl3 WHERE f = 2) AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f) +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.testviewschm2 View Query Output Columns [a, b] @@ -1099,6 +1112,7 @@ View Original Text SELECT * FROM tbl1 WHERE tbl1.a BETWEEN (SELECT d FROM tbl2 WHERE c = 1) AND (SELECT e FROM tbl3 WHERE f = 2) AND EXISTS (SELECT g FROM tbl4 LEFT JOIN tbl3 ON tbl4.h = tbl3.f) AND NOT EXISTS (SELECT g FROM tbl4 LEFT JOIN tmptbl ON tbl4.h = tmptbl.j) +View Schema Mode COMPENSATION View Catalog and Namespace spark_catalog.testviewschm2 View Query Output Columns [a, b] diff --git a/sql/core/src/test/resources/sql-tests/results/show-tables.sql.out b/sql/core/src/test/resources/sql-tests/results/show-tables.sql.out index 442f0fe5d5f27..0bf70132e597a 100644 --- a/sql/core/src/test/resources/sql-tests/results/show-tables.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/show-tables.sql.out @@ -124,6 +124,7 @@ Created Time [not included in comparison] Last Access [not included in comparison] Created By [not included in comparison] Type: VIEW +View Schema Mode: COMPENSATION Schema: root |-- e: integer (nullable = true) diff --git a/sql/core/src/test/resources/sql-tests/results/view-schema-binding-config.sql.out b/sql/core/src/test/resources/sql-tests/results/view-schema-binding-config.sql.out new file mode 100644 index 0000000000000..9afee1d54c229 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/view-schema-binding-config.sql.out @@ -0,0 +1,794 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +SET spark.sql.viewSchemaBindingMode +-- !query schema +struct +-- !query output +spark.sql.viewSchemaBindingMode COMPENSATION + + +-- !query +SET spark.sql.viewSchemaBindingMode = EVOLUTION +-- !query schema +struct<> +-- !query output +java.lang.IllegalArgumentException +The value of spark.sql.viewSchemaBindingMode should be one of COMPENSATION, DISABLED, but was EVOLUTION + + +-- !query +SET spark.sql.viewSchemaBindingMode = DISABLED +-- !query schema +struct +-- !query output +spark.sql.viewSchemaBindingMode DISABLED + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT 1 +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 44, + "fragment" : "WITH SCHEMA BINDING" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT 1 +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 49, + "fragment" : "WITH SCHEMA COMPENSATION" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT 1 +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 51, + "fragment" : "WITH SCHEMA TYPE EVOLUTION" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT 1 +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 26, + "stopIndex" : 46, + "fragment" : "WITH SCHEMA EVOLUTION" + } ] +} + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT 1 +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT 1 +View Original Text SELECT 1 +View Catalog and Namespace spark_catalog.default +View Query Output Columns [1] + + +-- !query +SHOW TABLE EXTENDED LIKE 'v' +-- !query schema +struct +-- !query output +default v false Catalog: spark_catalog +Database: default +Table: v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type: VIEW +View Text: SELECT 1 +View Original Text: SELECT 1 +View Catalog and Namespace: spark_catalog.default +View Query Output Columns: [1] +Schema: root + |-- 1: integer (nullable = false) + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE TEMPORARY VIEW v AS SELECT 1 +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +1 int + + +-- !query +SHOW TABLE EXTENDED LIKE 'v' +-- !query schema +struct +-- !query output + v true Table: v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type: VIEW +View Text: SELECT 1 +View Catalog and Namespace: spark_catalog.default +View Query Output Columns: [1] +Schema: root + |-- 1: integer (nullable = false) + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"BIGINT\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +SET spark.sql.viewSchemaBindingMode = COMPENSATION +-- !query schema +struct +-- !query output +spark.sql.viewSchemaBindingMode COMPENSATION + + +-- !query +SET spark.sql.ansi.enabled = false +-- !query schema +struct +-- !query output +spark.sql.ansi.enabled false + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +INSERT INTO t VALUES ('a', 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.SparkNumberFormatException +{ + "errorClass" : "CAST_INVALID_INPUT", + "sqlState" : "22018", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "expression" : "'a'", + "sourceType" : "\"STRING\"", + "targetType" : "\"INT\"" + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 15, + "stopIndex" : 15, + "fragment" : "v" + } ] +} + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 MAP, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.ExtendedAnalysisException +{ + "errorClass" : "DATATYPE_MISMATCH.CAST_WITHOUT_SUGGESTION", + "sqlState" : "42K09", + "messageParameters" : { + "sqlExpr" : "\"c1\"", + "srcType" : "\"MAP\"", + "targetType" : "\"INT\"" + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 15, + "stopIndex" : 15, + "fragment" : "v" + } ] +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c3 INT NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + diff --git a/sql/core/src/test/resources/sql-tests/results/view-schema-binding.sql.out b/sql/core/src/test/resources/sql-tests/results/view-schema-binding.sql.out new file mode 100644 index 0000000000000..6aafe016db28d --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/view-schema-binding.sql.out @@ -0,0 +1,399 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode BINDING +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"BIGINT\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode BINDING +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode BINDING +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode BINDING +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +SET spark.sql.viewSchemaBindingMode=DISABLED +-- !query schema +struct +-- !query output +spark.sql.viewSchemaBindingMode DISABLED + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +ALTER VIEW v WITH SCHEMA BINDING +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.parser.ParseException +{ + "errorClass" : "FEATURE_NOT_ENABLED", + "sqlState" : "56038", + "messageParameters" : { + "configKey" : "spark.sql.viewSchemaBindingMode", + "configValue" : "COMPENSATION", + "featureName" : "VIEW ... WITH SCHEMA ..." + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 14, + "stopIndex" : 32, + "fragment" : "WITH SCHEMA BINDING" + } ] +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"BIGINT\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + diff --git a/sql/core/src/test/resources/sql-tests/results/view-schema-compensation.sql.out b/sql/core/src/test/resources/sql-tests/results/view-schema-compensation.sql.out new file mode 100644 index 0000000000000..ffd1fbec47bbb --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/view-schema-compensation.sql.out @@ -0,0 +1,593 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +SET spark.sql.ansi.enabled = false +-- !query schema +struct +-- !query output +spark.sql.ansi.enabled false + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +INSERT INTO t VALUES ('a', 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.SparkNumberFormatException +{ + "errorClass" : "CAST_INVALID_INPUT", + "sqlState" : "22018", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "expression" : "'a'", + "sourceType" : "\"STRING\"", + "targetType" : "\"INT\"" + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 15, + "stopIndex" : 15, + "fragment" : "v" + } ] +} + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 MAP, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.ExtendedAnalysisException +{ + "errorClass" : "DATATYPE_MISMATCH.CAST_WITHOUT_SUGGESTION", + "sqlState" : "42K09", + "messageParameters" : { + "sqlExpr" : "\"c1\"", + "srcType" : "\"MAP\"", + "targetType" : "\"INT\"" + }, + "queryContext" : [ { + "objectType" : "", + "objectName" : "", + "startIndex" : 15, + "stopIndex" : 15, + "fragment" : "v" + } ] +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c3 INT NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES(1) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA BINDING AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode BINDING +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES('1') +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "CANNOT_UP_CAST_DATATYPE", + "sqlState" : "42846", + "messageParameters" : { + "details" : "The type path of the target object is:\n\nYou can either add an explicit cast to the input data or choose a higher precision type of the field in the target object", + "expression" : "spark_catalog.default.t.c1", + "sourceType" : "\"STRING\"", + "targetType" : "\"INT\"" + } +} + + +-- !query +ALTER VIEW v WITH SCHEMA COMPENSATION +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + diff --git a/sql/core/src/test/resources/sql-tests/results/view-schema-evolution.sql.out b/sql/core/src/test/resources/sql-tests/results/view-schema-evolution.sql.out new file mode 100644 index 0000000000000..46d6acc8d98e2 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/view-schema-evolution.sql.out @@ -0,0 +1,1113 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c4 STRING NOT NULL, c5 DOUBLE) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2.0) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2.0 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c4 string +c5 double + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c4, c5] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c4 STRING, c5 DOUBLE, c6 DATE) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01') +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2.0 2022-01-01 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c4 string +c5 double +c6 date + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c4, c5, c6] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int +a2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 DOUBLE) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2.0) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2.0 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 string +a2 double + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING, c2 DOUBLE, c3 DATE) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01') +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2.0 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 string +a2 double + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int +a2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v (a1, a2) AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int +a2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c3 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v (a1, a2) AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int +a2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT COMMENT 'c1', c2 INT COMMENT 'c2') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int c1 +a2 int c2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int c1 +a2 int c2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6c', c2 STRING COMMENT 'c2 6c') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 bigint c1 +a2 string c2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +CREATE OR REPLACE VIEW v(a1 COMMENT 'a1', a2 COMMENT 'a2') WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 bigint a1 +a2 string a2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6d', c2 STRING COMMENT 'c2 6d') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 bigint a1 +a2 string a2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 bigint c1 6d +c2 string c2 6d + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6e', c2 STRING COMMENT 'c2 6e') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 bigint c1 6e +c2 string c2 6e + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t1 +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t1(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t2 +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t2(c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA EVOLUTION AS SELECT * FROM t1, t2 +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t2 +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t2(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.catalyst.ExtendedAnalysisException +{ + "errorClass" : "COLUMN_ALREADY_EXISTS", + "sqlState" : "42711", + "messageParameters" : { + "columnName" : "`c1`" + } +} + + +-- !query +DROP TABLE IF EXISTS t1 +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t2 +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES(1) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +ALTER VIEW v WITH SCHEMA EVOLUTION +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 string +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + diff --git a/sql/core/src/test/resources/sql-tests/results/view-schema-type-evolution.sql.out b/sql/core/src/test/resources/sql-tests/results/view-schema-type-evolution.sql.out new file mode 100644 index 0000000000000..707715120a861 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/view-schema-type-evolution.sql.out @@ -0,0 +1,663 @@ +-- Automatically generated by SQLQueryTestSuite +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT NOT NULL, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING NOT NULL, c2 DOUBLE) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2.0) +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2.0 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 string +c2 double + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING, c2 DOUBLE, c3 DATE) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES ('1', 2.0, DATE'2022-01-01') +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2.0 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 string +c2 double + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES (1, 2) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 2 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c2", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c3 INT, c2 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct<> +-- !query output +org.apache.spark.sql.AnalysisException +{ + "errorClass" : "INCOMPATIBLE_VIEW_SCHEMA_CHANGE", + "sqlState" : "51024", + "messageParameters" : { + "actualCols" : "[]", + "colName" : "c1", + "expectedNum" : "1", + "suggestion" : "CREATE OR REPLACE VIEW spark_catalog.default.v AS SELECT * FROM t", + "viewName" : "`spark_catalog`.`default`.`v`" + } +} + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int +c2 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT COMMENT 'c1', c2 INT COMMENT 'c2') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v(a1, a2) WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 int c1 +a2 int c2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6a', c2 STRING COMMENT 'c2 6a') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 bigint c1 +a2 string c2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +CREATE OR REPLACE VIEW v(a1 COMMENT 'a1', a2 COMMENT 'a2') WITH SCHEMA TYPE EVOLUTION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 bigint a1 +a2 string a2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 BIGINT COMMENT 'c1 6b', c2 STRING COMMENT 'c2 6b') USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output + + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +a1 bigint a1 +a2 string a2 + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1, c2] + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 INT) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES(1) +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE OR REPLACE VIEW v WITH SCHEMA COMPENSATION AS SELECT * FROM t +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + + + +-- !query +CREATE TABLE t(c1 STRING) USING PARQUET +-- !query schema +struct<> +-- !query output + + + +-- !query +INSERT INTO t VALUES('1') +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 int + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode COMPENSATION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +ALTER VIEW v WITH SCHEMA TYPE EVOLUTION +-- !query schema +struct<> +-- !query output + + + +-- !query +SELECT * FROM v +-- !query schema +struct +-- !query output +1 + + +-- !query +DESCRIBE EXTENDED v +-- !query schema +struct +-- !query output +c1 string + +# Detailed Table Information +Catalog spark_catalog +Database default +Table v +Created Time [not included in comparison] +Last Access [not included in comparison] +Created By [not included in comparison] +Type VIEW +View Text SELECT * FROM t +View Original Text SELECT * FROM t +View Schema Mode TYPE EVOLUTION +View Catalog and Namespace spark_catalog.default +View Query Output Columns [c1] + + +-- !query +DROP VIEW IF EXISTS v +-- !query schema +struct<> +-- !query output + + + +-- !query +DROP TABLE IF EXISTS t +-- !query schema +struct<> +-- !query output + diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala index 1888844b9b986..d54606e9b7ce8 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala @@ -899,46 +899,48 @@ abstract class SQLViewSuite extends QueryTest with SQLTestUtils { test("resolve a view when the dataTypes of referenced table columns changed") { withTable("tab1") { - spark.range(1, 10).selectExpr("id", "id + 1 id1").write.saveAsTable("tab1") - withView("testView") { - sql("CREATE VIEW testView AS SELECT * FROM tab1") - - // Allow casting from IntegerType to LongType - val df = (1 until 10).map(i => (i, i + 1)).toDF("id", "id1") - df.write.format("json").mode(SaveMode.Overwrite).saveAsTable("tab1") - checkAnswer(sql("SELECT * FROM testView ORDER BY id1"), (1 to 9).map(i => Row(i, i + 1))) - - // Casting from DoubleType to LongType might truncate, throw an AnalysisException. - val df2 = (1 until 10).map(i => (i.toDouble, i.toDouble)).toDF("id", "id1") - df2.write.format("json").mode(SaveMode.Overwrite).saveAsTable("tab1") - checkError( - exception = intercept[AnalysisException](sql("SELECT * FROM testView")), - errorClass = "CANNOT_UP_CAST_DATATYPE", - parameters = Map( - "expression" -> s"$SESSION_CATALOG_NAME.default.tab1.id", - "sourceType" -> "\"DOUBLE\"", - "targetType" -> "\"BIGINT\"", - "details" -> ("The type path of the target object is:\n\n" + - "You can either add an explicit cast to the input data or " + - "choose a higher precision type of the field in the target object") + withSQLConf("spark.sql.viewSchemaBindingMode" -> "DISABLED") { + spark.range(1, 10).selectExpr("id", "id + 1 id1").write.saveAsTable("tab1") + withView("testView") { + sql("CREATE VIEW testView AS SELECT * FROM tab1") + + // Allow casting from IntegerType to LongType + val df = (1 until 10).map(i => (i, i + 1)).toDF("id", "id1") + df.write.format("json").mode(SaveMode.Overwrite).saveAsTable("tab1") + checkAnswer(sql("SELECT * FROM testView ORDER BY id1"), (1 to 9).map(i => Row(i, i + 1))) + + // Casting from DoubleType to LongType might truncate, throw an AnalysisException. + val df2 = (1 until 10).map(i => (i.toDouble, i.toDouble)).toDF("id", "id1") + df2.write.format("json").mode(SaveMode.Overwrite).saveAsTable("tab1") + checkError( + exception = intercept[AnalysisException](sql("SELECT * FROM testView")), + errorClass = "CANNOT_UP_CAST_DATATYPE", + parameters = Map( + "expression" -> s"$SESSION_CATALOG_NAME.default.tab1.id", + "sourceType" -> "\"DOUBLE\"", + "targetType" -> "\"BIGINT\"", + "details" -> ("The type path of the target object is:\n\n" + + "You can either add an explicit cast to the input data or " + + "choose a higher precision type of the field in the target object") + ) ) - ) - // Can't cast from ArrayType to LongType, throw an AnalysisException. - val df3 = (1 until 10).map(i => (i, Seq(i))).toDF("id", "id1") - df3.write.format("json").mode(SaveMode.Overwrite).saveAsTable("tab1") - checkError( - exception = intercept[AnalysisException](sql("SELECT * FROM testView")), - errorClass = "CANNOT_UP_CAST_DATATYPE", - parameters = Map( - "expression" -> s"$SESSION_CATALOG_NAME.default.tab1.id1", - "sourceType" -> "\"ARRAY\"", - "targetType" -> "\"BIGINT\"", - "details" -> ("The type path of the target object is:\n\n" + - "You can either add an explicit cast to the input data or " + - "choose a higher precision type of the field in the target object") + // Can't cast from ArrayType to LongType, throw an AnalysisException. + val df3 = (1 until 10).map(i => (i, Seq(i))).toDF("id", "id1") + df3.write.format("json").mode(SaveMode.Overwrite).saveAsTable("tab1") + checkError( + exception = intercept[AnalysisException](sql("SELECT * FROM testView")), + errorClass = "CANNOT_UP_CAST_DATATYPE", + parameters = Map( + "expression" -> s"$SESSION_CATALOG_NAME.default.tab1.id1", + "sourceType" -> "\"ARRAY\"", + "targetType" -> "\"BIGINT\"", + "details" -> ("The type path of the target object is:\n\n" + + "You can either add an explicit cast to the input data or " + + "choose a higher precision type of the field in the target object") + ) ) - ) + } } } } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala index e4df8c64e59ef..6b66f521e9304 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala @@ -18,7 +18,7 @@ package org.apache.spark.sql.execution.command import org.apache.spark.SparkThrowable -import org.apache.spark.sql.catalyst.analysis.{AnalysisTest, GlobalTempView, LocalTempView, UnresolvedAttribute, UnresolvedFunctionName, UnresolvedIdentifier} +import org.apache.spark.sql.catalyst.analysis.{AnalysisTest, GlobalTempView, LocalTempView, SchemaCompensation, UnresolvedAttribute, UnresolvedFunctionName, UnresolvedIdentifier} import org.apache.spark.sql.catalyst.catalog.{ArchiveResource, FileResource, FunctionResource, JarResource} import org.apache.spark.sql.catalyst.dsl.expressions._ import org.apache.spark.sql.catalyst.dsl.plans @@ -522,7 +522,8 @@ class DDLParserSuite extends AnalysisTest with SharedSparkSession { Some("SELECT * FROM tab1"), parser.parsePlan("SELECT * FROM tab1"), false, - false) + false, + SchemaCompensation) comparePlans(parsed1, expected1) val v2 = "CREATE TEMPORARY VIEW a AS SELECT * FROM tab1" @@ -569,7 +570,8 @@ class DDLParserSuite extends AnalysisTest with SharedSparkSession { Some("SELECT * FROM tab1"), parser.parsePlan("SELECT * FROM tab1"), false, - true) + true, + SchemaCompensation) comparePlans(parsed1, expected1) val v2 = diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/ShowTablesSuiteBase.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/ShowTablesSuiteBase.scala index c88217221ab76..bc61ecd4387a7 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/ShowTablesSuiteBase.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/ShowTablesSuiteBase.scala @@ -351,6 +351,7 @@ trait ShowTablesSuiteBase extends QueryTest with DDLCommandTestUtils { |Created By: |Type: VIEW |View Text: SELECT id FROM $catalog.$namespace.$table + |View Schema Mode: COMPENSATION |View Catalog and Namespace: spark_catalog.default |View Query Output Columns: [id] |Schema: root @@ -377,6 +378,7 @@ trait ShowTablesSuiteBase extends QueryTest with DDLCommandTestUtils { |Created By: |Type: VIEW |View Text: SELECT id FROM $catalog.$namespace.$table + |View Schema Mode: COMPENSATION |View Catalog and Namespace: spark_catalog.default |View Query Output Columns: [id] |Schema: root @@ -394,6 +396,7 @@ trait ShowTablesSuiteBase extends QueryTest with DDLCommandTestUtils { |Created By: |Type: VIEW |View Text: SELECT id FROM $catalog.$namespace.$table + |View Schema Mode: COMPENSATION |View Catalog and Namespace: spark_catalog.default |View Query Output Columns: [id] |Schema: root diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/v1/ShowTablesSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/v1/ShowTablesSuite.scala index 4b4742910bd18..9be802b5f1fea 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/v1/ShowTablesSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/v1/ShowTablesSuite.scala @@ -205,6 +205,7 @@ class ShowTablesSuite extends ShowTablesSuiteBase with CommandSuiteBase { |Type: VIEW |View Text: SELECT id FROM $catalog.$namespace.$table |View Original Text: SELECT id FROM $catalog.$namespace.$table + |View Schema Mode: COMPENSATION |View Catalog and Namespace: $catalog.$namespace |View Query Output Columns: [id] |Schema: root diff --git a/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/thriftserver/ThriftServerWithSparkContextSuite.scala b/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/thriftserver/ThriftServerWithSparkContextSuite.scala index 094042c8dc157..d058dd1c4dab9 100644 --- a/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/thriftserver/ThriftServerWithSparkContextSuite.scala +++ b/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/thriftserver/ThriftServerWithSparkContextSuite.scala @@ -214,7 +214,7 @@ trait ThriftServerWithSparkContextSuite extends SharedThriftServer { val sessionHandle = client.openSession(user, "") val infoValue = client.getInfo(sessionHandle, GetInfoType.CLI_ODBC_KEYWORDS) // scalastyle:off line.size.limit - assert(infoValue.getStringValue == "ADD,AFTER,ALL,ALTER,ALWAYS,ANALYZE,AND,ANTI,ANY,ANY_VALUE,ARCHIVE,ARRAY,AS,ASC,AT,AUTHORIZATION,BETWEEN,BIGINT,BINARY,BOOLEAN,BOTH,BUCKET,BUCKETS,BY,BYTE,CACHE,CASCADE,CASE,CAST,CATALOG,CATALOGS,CHANGE,CHAR,CHARACTER,CHECK,CLEAR,CLUSTER,CLUSTERED,CODEGEN,COLLATE,COLLATION,COLLECTION,COLUMN,COLUMNS,COMMENT,COMMIT,COMPACT,COMPACTIONS,COMPUTE,CONCATENATE,CONSTRAINT,COST,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,DATA,DATABASE,DATABASES,DATE,DATEADD,DATEDIFF,DATE_ADD,DATE_DIFF,DAY,DAYOFYEAR,DAYS,DBPROPERTIES,DEC,DECIMAL,DECLARE,DEFAULT,DEFINED,DELETE,DELIMITED,DESC,DESCRIBE,DFS,DIRECTORIES,DIRECTORY,DISTINCT,DISTRIBUTE,DIV,DOUBLE,DROP,ELSE,END,ESCAPE,ESCAPED,EVOLUTION,EXCEPT,EXCHANGE,EXCLUDE,EXECUTE,EXISTS,EXPLAIN,EXPORT,EXTENDED,EXTERNAL,EXTRACT,FALSE,FETCH,FIELDS,FILEFORMAT,FILTER,FIRST,FLOAT,FOLLOWING,FOR,FOREIGN,FORMAT,FORMATTED,FROM,FULL,FUNCTION,FUNCTIONS,GENERATED,GLOBAL,GRANT,GROUP,GROUPING,HAVING,HOUR,HOURS,IDENTIFIER,IF,IGNORE,ILIKE,IMMEDIATE,IMPORT,IN,INCLUDE,INDEX,INDEXES,INNER,INPATH,INPUTFORMAT,INSERT,INT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ITEMS,JOIN,KEYS,LAST,LATERAL,LAZY,LEADING,LEFT,LIKE,LIMIT,LINES,LIST,LOAD,LOCAL,LOCATION,LOCK,LOCKS,LOGICAL,LONG,MACRO,MAP,MATCHED,MERGE,MICROSECOND,MICROSECONDS,MILLISECOND,MILLISECONDS,MINUS,MINUTE,MINUTES,MONTH,MONTHS,MSCK,NAME,NAMESPACE,NAMESPACES,NANOSECOND,NANOSECONDS,NATURAL,NO,NOT,NULL,NULLS,NUMERIC,OF,OFFSET,ON,ONLY,OPTION,OPTIONS,OR,ORDER,OUT,OUTER,OUTPUTFORMAT,OVER,OVERLAPS,OVERLAY,OVERWRITE,PARTITION,PARTITIONED,PARTITIONS,PERCENT,PIVOT,PLACING,POSITION,PRECEDING,PRIMARY,PRINCIPALS,PROPERTIES,PURGE,QUARTER,QUERY,RANGE,REAL,RECORDREADER,RECORDWRITER,RECOVER,REDUCE,REFERENCES,REFRESH,RENAME,REPAIR,REPEATABLE,REPLACE,RESET,RESPECT,RESTRICT,REVOKE,RIGHT,ROLE,ROLES,ROLLBACK,ROLLUP,ROW,ROWS,SCHEMA,SCHEMAS,SECOND,SECONDS,SELECT,SEMI,SEPARATED,SERDE,SERDEPROPERTIES,SESSION_USER,SET,SETS,SHORT,SHOW,SINGLE,SKEWED,SMALLINT,SOME,SORT,SORTED,SOURCE,START,STATISTICS,STORED,STRATIFY,STRING,STRUCT,SUBSTR,SUBSTRING,SYNC,SYSTEM_TIME,SYSTEM_VERSION,TABLE,TABLES,TABLESAMPLE,TARGET,TBLPROPERTIES,TERMINATED,THEN,TIME,TIMEDIFF,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TIMESTAMP_LTZ,TIMESTAMP_NTZ,TINYINT,TO,TOUCH,TRAILING,TRANSACTION,TRANSACTIONS,TRANSFORM,TRIM,TRUE,TRUNCATE,TRY_CAST,TYPE,UNARCHIVE,UNBOUNDED,UNCACHE,UNION,UNIQUE,UNKNOWN,UNLOCK,UNPIVOT,UNSET,UPDATE,USE,USER,USING,VALUES,VAR,VARCHAR,VARIABLE,VARIANT,VERSION,VIEW,VIEWS,VOID,WEEK,WEEKS,WHEN,WHERE,WINDOW,WITH,WITHIN,X,YEAR,YEARS,ZONE") + assert(infoValue.getStringValue == "ADD,AFTER,ALL,ALTER,ALWAYS,ANALYZE,AND,ANTI,ANY,ANY_VALUE,ARCHIVE,ARRAY,AS,ASC,AT,AUTHORIZATION,BETWEEN,BIGINT,BINARY,BINDING,BOOLEAN,BOTH,BUCKET,BUCKETS,BY,BYTE,CACHE,CASCADE,CASE,CAST,CATALOG,CATALOGS,CHANGE,CHAR,CHARACTER,CHECK,CLEAR,CLUSTER,CLUSTERED,CODEGEN,COLLATE,COLLATION,COLLECTION,COLUMN,COLUMNS,COMMENT,COMMIT,COMPACT,COMPACTIONS,COMPENSATION,COMPUTE,CONCATENATE,CONSTRAINT,COST,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,DATA,DATABASE,DATABASES,DATE,DATEADD,DATEDIFF,DATE_ADD,DATE_DIFF,DAY,DAYOFYEAR,DAYS,DBPROPERTIES,DEC,DECIMAL,DECLARE,DEFAULT,DEFINED,DELETE,DELIMITED,DESC,DESCRIBE,DFS,DIRECTORIES,DIRECTORY,DISTINCT,DISTRIBUTE,DIV,DOUBLE,DROP,ELSE,END,ESCAPE,ESCAPED,EVOLUTION,EXCEPT,EXCHANGE,EXCLUDE,EXECUTE,EXISTS,EXPLAIN,EXPORT,EXTENDED,EXTERNAL,EXTRACT,FALSE,FETCH,FIELDS,FILEFORMAT,FILTER,FIRST,FLOAT,FOLLOWING,FOR,FOREIGN,FORMAT,FORMATTED,FROM,FULL,FUNCTION,FUNCTIONS,GENERATED,GLOBAL,GRANT,GROUP,GROUPING,HAVING,HOUR,HOURS,IDENTIFIER,IF,IGNORE,ILIKE,IMMEDIATE,IMPORT,IN,INCLUDE,INDEX,INDEXES,INNER,INPATH,INPUTFORMAT,INSERT,INT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ITEMS,JOIN,KEYS,LAST,LATERAL,LAZY,LEADING,LEFT,LIKE,LIMIT,LINES,LIST,LOAD,LOCAL,LOCATION,LOCK,LOCKS,LOGICAL,LONG,MACRO,MAP,MATCHED,MERGE,MICROSECOND,MICROSECONDS,MILLISECOND,MILLISECONDS,MINUS,MINUTE,MINUTES,MONTH,MONTHS,MSCK,NAME,NAMESPACE,NAMESPACES,NANOSECOND,NANOSECONDS,NATURAL,NO,NOT,NULL,NULLS,NUMERIC,OF,OFFSET,ON,ONLY,OPTION,OPTIONS,OR,ORDER,OUT,OUTER,OUTPUTFORMAT,OVER,OVERLAPS,OVERLAY,OVERWRITE,PARTITION,PARTITIONED,PARTITIONS,PERCENT,PIVOT,PLACING,POSITION,PRECEDING,PRIMARY,PRINCIPALS,PROPERTIES,PURGE,QUARTER,QUERY,RANGE,REAL,RECORDREADER,RECORDWRITER,RECOVER,REDUCE,REFERENCES,REFRESH,RENAME,REPAIR,REPEATABLE,REPLACE,RESET,RESPECT,RESTRICT,REVOKE,RIGHT,ROLE,ROLES,ROLLBACK,ROLLUP,ROW,ROWS,SCHEMA,SCHEMAS,SECOND,SECONDS,SELECT,SEMI,SEPARATED,SERDE,SERDEPROPERTIES,SESSION_USER,SET,SETS,SHORT,SHOW,SINGLE,SKEWED,SMALLINT,SOME,SORT,SORTED,SOURCE,START,STATISTICS,STORED,STRATIFY,STRING,STRUCT,SUBSTR,SUBSTRING,SYNC,SYSTEM_TIME,SYSTEM_VERSION,TABLE,TABLES,TABLESAMPLE,TARGET,TBLPROPERTIES,TERMINATED,THEN,TIME,TIMEDIFF,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TIMESTAMP_LTZ,TIMESTAMP_NTZ,TINYINT,TO,TOUCH,TRAILING,TRANSACTION,TRANSACTIONS,TRANSFORM,TRIM,TRUE,TRUNCATE,TRY_CAST,TYPE,UNARCHIVE,UNBOUNDED,UNCACHE,UNION,UNIQUE,UNKNOWN,UNLOCK,UNPIVOT,UNSET,UPDATE,USE,USER,USING,VALUES,VAR,VARCHAR,VARIABLE,VARIANT,VERSION,VIEW,VIEWS,VOID,WEEK,WEEKS,WHEN,WHERE,WINDOW,WITH,WITHIN,X,YEAR,YEARS,ZONE") // scalastyle:on line.size.limit } } diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionStateBuilder.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionStateBuilder.scala index 416299b189cd5..979ff1e24ef5c 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionStateBuilder.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionStateBuilder.scala @@ -114,6 +114,7 @@ class HiveSessionStateBuilder( TableCapabilityCheck +: CommandCheck +: CollationCheck +: + ViewSyncSchemaToMetaStore +: customCheckRules } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/command/ShowTablesSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/command/ShowTablesSuite.scala index 79b1eb6c0961a..9ee3a0277c9a1 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/command/ShowTablesSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/command/ShowTablesSuite.scala @@ -97,6 +97,7 @@ class ShowTablesSuite extends v1.ShowTablesSuiteBase with CommandSuiteBase { |Type: VIEW |View Text: SELECT id FROM $catalog.$namespace.$table |View Original Text: SELECT id FROM $catalog.$namespace.$table + |View Schema Mode: COMPENSATION |View Catalog and Namespace: $catalog.$namespace |View Query Output Columns: [id] |Table Properties: