This is an automated email from the ASF dual-hosted git repository.

gurwls223 pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/spark.git

commit 26d84653ed886e66067b25bb784f7dd5c289c53b
Author: HyukjinKwon <[email protected]>
AuthorDate: Tue Apr 7 20:29:22 2020 +0900

    Revert "[SPARK-30841][SQL][DOC][3.0] Add version information to the 
configuration of SQL"
    
    This reverts commit af7fa9d12622c3b2b169c4a58d143bc21ed9e784.
---
 .../org/apache/spark/sql/internal/SQLConf.scala    | 267 +--------------------
 1 file changed, 6 insertions(+), 261 deletions(-)

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 7a10aba..9f9e556 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
@@ -177,7 +177,6 @@ object SQLConf {
   val ANALYZER_MAX_ITERATIONS = buildConf("spark.sql.analyzer.maxIterations")
     .internal()
     .doc("The max number of iterations the analyzer runs.")
-    .version("3.0.0")
     .intConf
     .createWithDefault(100)
 
@@ -186,14 +185,12 @@ object SQLConf {
       "specified by their rule names and separated by comma. It is not 
guaranteed that all the " +
       "rules in this configuration will eventually be excluded, as some rules 
are necessary " +
       "for correctness. The optimizer will log the rules that have indeed been 
excluded.")
-    .version("2.4.0")
     .stringConf
     .createOptional
 
   val OPTIMIZER_MAX_ITERATIONS = buildConf("spark.sql.optimizer.maxIterations")
     .internal()
     .doc("The max number of iterations the optimizer runs.")
-    .version("2.0.0")
     .intConf
     .createWithDefault(100)
 
@@ -201,7 +198,6 @@ object SQLConf {
     buildConf("spark.sql.optimizer.inSetConversionThreshold")
       .internal()
       .doc("The threshold of set size for InSet conversion.")
-      .version("2.0.0")
       .intConf
       .createWithDefault(10)
 
@@ -210,7 +206,6 @@ object SQLConf {
       .internal()
       .doc("Configures the max set size in InSet for which Spark will generate 
code with " +
         "switch statements. This is applicable only to bytes, shorts, ints, 
dates.")
-      .version("3.0.0")
       .intConf
       .checkValue(threshold => threshold >= 0 && threshold <= 600, "The max 
set size " +
         "for using switch statements in InSet must be non-negative and less 
than or equal to 600")
@@ -221,7 +216,6 @@ object SQLConf {
     .doc("Configures the log level for logging the change from the original 
plan to the new " +
       "plan after a rule or batch is applied. The value can be 'trace', 
'debug', 'info', " +
       "'warn', or 'error'. The default log level is 'trace'.")
-    .version("3.0.0")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValue(logLevel => Set("TRACE", "DEBUG", "INFO", "WARN", 
"ERROR").contains(logLevel),
@@ -233,7 +227,6 @@ object SQLConf {
     .internal()
     .doc("Configures a list of rules to be logged in the optimizer, in which 
the rules are " +
       "specified by their rule names and separated by comma.")
-    .version("3.0.0")
     .stringConf
     .createOptional
 
@@ -241,14 +234,12 @@ object SQLConf {
     .internal()
     .doc("Configures a list of batches to be logged in the optimizer, in which 
the batches " +
       "are specified by their batch names and separated by comma.")
-    .version("3.0.0")
     .stringConf
     .createOptional
 
   val DYNAMIC_PARTITION_PRUNING_ENABLED =
     buildConf("spark.sql.optimizer.dynamicPartitionPruning.enabled")
       .doc("When true, we will generate predicate for partition column when 
it's used as join key")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -258,7 +249,6 @@ object SQLConf {
       .doc("When true, distinct count statistics will be used for computing 
the data size of the " +
         "partitioned table after dynamic partition pruning, in order to 
evaluate if it is worth " +
         "adding an extra subquery as the pruning filter if broadcast reuse is 
not applicable.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -269,7 +259,6 @@ object SQLConf {
       "used as the fallback filter ratio for computing the data size of the 
partitioned table " +
       "after dynamic partition pruning, in order to evaluate if it is worth 
adding an extra " +
       "subquery as the pruning filter if broadcast reuse is not applicable.")
-    .version("3.0.0")
     .doubleConf
     .createWithDefault(0.5)
 
@@ -278,21 +267,18 @@ object SQLConf {
       .internal()
       .doc("When true, dynamic partition pruning will only apply when the 
broadcast exchange of " +
         "a broadcast hash join operation can be reused as the dynamic pruning 
filter.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
   val COMPRESS_CACHED = 
buildConf("spark.sql.inMemoryColumnarStorage.compressed")
     .doc("When set to true Spark SQL will automatically select a compression 
codec for each " +
       "column based on statistics of the data.")
-    .version("1.0.1")
     .booleanConf
     .createWithDefault(true)
 
   val COLUMN_BATCH_SIZE = 
buildConf("spark.sql.inMemoryColumnarStorage.batchSize")
     .doc("Controls the size of batches for columnar caching.  Larger batch 
sizes can improve " +
       "memory utilization and compression, but risk OOMs when caching data.")
-    .version("1.1.1")
     .intConf
     .createWithDefault(10000)
 
@@ -300,7 +286,6 @@ object SQLConf {
     buildConf("spark.sql.inMemoryColumnarStorage.partitionPruning")
       .internal()
       .doc("When true, enable partition pruning for in-memory columnar 
tables.")
-      .version("1.2.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -308,14 +293,12 @@ object SQLConf {
     buildConf("spark.sql.inMemoryTableScanStatistics.enable")
       .internal()
       .doc("When true, enable in-memory table scan accumulators.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
   val CACHE_VECTORIZED_READER_ENABLED =
     buildConf("spark.sql.inMemoryColumnarStorage.enableVectorizedReader")
       .doc("Enables vectorized reader for columnar caching.")
-      .version("2.3.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -323,14 +306,12 @@ object SQLConf {
     buildConf("spark.sql.columnVector.offheap.enabled")
       .internal()
       .doc("When true, use OffHeapColumnVector in ColumnarBatch.")
-      .version("2.3.0")
       .booleanConf
       .createWithDefault(false)
 
   val PREFER_SORTMERGEJOIN = buildConf("spark.sql.join.preferSortMergeJoin")
     .internal()
     .doc("When true, prefer sort merge join over shuffle hash join.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -339,7 +320,6 @@ object SQLConf {
     .doc("When true, enable use of radix sort when possible. Radix sort is 
much faster but " +
       "requires additional memory to be reserved up-front. The memory overhead 
may be " +
       "significant when sorting very small rows (up to 50% more in this 
case).")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -350,7 +330,6 @@ object SQLConf {
       "command `ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan` has been 
" +
       "run, and file-based data source tables where the statistics are 
computed directly on " +
       "the files of data.")
-    .version("1.1.0")
     .bytesConf(ByteUnit.BYTE)
     .createWithDefaultString("10MB")
 
@@ -359,7 +338,6 @@ object SQLConf {
     .doc("Minimal increase rate in number of partitions between attempts when 
executing a take " +
       "on a query. Higher values lead to more partitions read. Lower values 
might lead to " +
       "longer execution times as more jobs will be run")
-    .version("2.1.1")
     .intConf
     .createWithDefault(4)
 
@@ -367,7 +345,6 @@ object SQLConf {
     buildConf("spark.sql.hive.advancedPartitionPredicatePushdown.enabled")
       .internal()
       .doc("When true, advanced partition predicate pushdown into Hive 
metastore is enabled.")
-      .version("2.3.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -375,7 +352,6 @@ object SQLConf {
     .doc("The default number of partitions to use when shuffling data for 
joins or aggregations. " +
       "Note: For structured streaming, this configuration cannot be changed 
between query " +
       "restarts from the same checkpoint location.")
-    .version("1.1.0")
     .intConf
     .checkValue(_ > 0, "The value of spark.sql.shuffle.partitions must be 
positive")
     .createWithDefault(200)
@@ -384,14 +360,12 @@ object SQLConf {
     buildConf("spark.sql.adaptive.shuffle.targetPostShuffleInputSize")
       .internal()
       .doc("(Deprecated since Spark 3.0)")
-      .version("1.6.0")
       .bytesConf(ByteUnit.BYTE)
       .createWithDefaultString("64MB")
 
   val ADAPTIVE_EXECUTION_ENABLED = buildConf("spark.sql.adaptive.enabled")
     .doc("When true, enable adaptive query execution, which re-optimizes the 
query plan in the " +
       "middle of query execution, based on accurate runtime statistics.")
-    .version("1.6.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -401,7 +375,6 @@ object SQLConf {
       "sub-queries. By setting this config to true (together with " +
       s"'${ADAPTIVE_EXECUTION_ENABLED.key}' set to true), Spark will force 
apply adaptive query " +
       "execution for all supported queries.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -409,7 +382,6 @@ object SQLConf {
     .internal()
     .doc("Configures the log level for adaptive execution logging of plan 
changes. The value " +
       "can be 'trace', 'debug', 'info', 'warn', or 'error'. The default log 
level is 'debug'.")
-    .version("3.0.0")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValues(Set("TRACE", "DEBUG", "INFO", "WARN", "ERROR"))
@@ -420,7 +392,6 @@ object SQLConf {
       .doc("The advisory size in bytes of the shuffle partition during 
adaptive optimization " +
         s"(when ${ADAPTIVE_EXECUTION_ENABLED.key} is true). It takes effect 
when Spark " +
         "coalesces small shuffle partitions or splits skewed shuffle 
partition.")
-      .version("3.0.0")
       .fallbackConf(SHUFFLE_TARGET_POSTSHUFFLE_INPUT_SIZE)
 
   val COALESCE_PARTITIONS_ENABLED =
@@ -428,7 +399,6 @@ object SQLConf {
       .doc(s"When true and '${ADAPTIVE_EXECUTION_ENABLED.key}' is true, Spark 
will coalesce " +
         "contiguous shuffle partitions according to the target size (specified 
by " +
         s"'${ADVISORY_PARTITION_SIZE_IN_BYTES.key}'), to avoid too many small 
tasks.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -438,7 +408,6 @@ object SQLConf {
         "value is the default parallelism of the Spark cluster. This 
configuration only " +
         s"has an effect when '${ADAPTIVE_EXECUTION_ENABLED.key}' and " +
         s"'${COALESCE_PARTITIONS_ENABLED.key}' are both true.")
-      .version("3.0.0")
       .intConf
       .checkValue(_ > 0, "The minimum number of partitions must be positive.")
       .createOptional
@@ -449,7 +418,6 @@ object SQLConf {
         s"${SHUFFLE_PARTITIONS.key}. This configuration only has an effect 
when " +
         s"'${ADAPTIVE_EXECUTION_ENABLED.key}' and 
'${COALESCE_PARTITIONS_ENABLED.key}' " +
         "are both true.")
-      .version("3.0.0")
       .intConf
       .checkValue(_ > 0, "The initial number of partitions must be positive.")
       .createOptional
@@ -464,7 +432,6 @@ object SQLConf {
         s"'${COALESCE_PARTITIONS_ENABLED.key}' are both true. This feature 
also depends " +
         "on a relocatable serializer, the concatenation support codec in use 
and the new version " +
         "shuffle fetch protocol.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -473,7 +440,6 @@ object SQLConf {
       .doc(s"When true and '${ADAPTIVE_EXECUTION_ENABLED.key}' is true, Spark 
tries to use local " +
         "shuffle reader to read the shuffle data when the shuffle partitioning 
is not needed, " +
         "for example, after converting sort-merge join to broadcast-hash 
join.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -482,7 +448,6 @@ object SQLConf {
       .doc(s"When true and '${ADAPTIVE_EXECUTION_ENABLED.key}' is true, Spark 
dynamically " +
         "handles skew in sort-merge join by splitting (and replicating if 
needed) skewed " +
         "partitions.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -491,7 +456,6 @@ object SQLConf {
       .doc("A partition is considered as skewed if its size is larger than 
this factor " +
         "multiplying the median partition size and also larger than " +
         "'spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes'")
-      .version("3.0.0")
       .intConf
       .checkValue(_ > 0, "The skew factor must be positive.")
       .createWithDefault(10)
@@ -502,7 +466,6 @@ object SQLConf {
         s"threshold and also larger than 
'${SKEW_JOIN_SKEWED_PARTITION_FACTOR.key}' " +
         "multiplying the median partition size. Ideally this config should be 
set larger " +
         s"than '${ADVISORY_PARTITION_SIZE_IN_BYTES.key}'.")
-      .version("3.0.0")
       .bytesConf(ByteUnit.BYTE)
       .createWithDefaultString("256MB")
 
@@ -513,7 +476,6 @@ object SQLConf {
         "considered as the build side of a broadcast-hash join in adaptive 
execution regardless " +
         "of its size.This configuration only has an effect when " +
         s"'${ADAPTIVE_EXECUTION_ENABLED.key}' is true.")
-      .version("3.0.0")
       .doubleConf
       .checkValue(_ >= 0, "The non-empty partition ratio must be positive 
number.")
       .createWithDefault(0.2)
@@ -522,7 +484,6 @@ object SQLConf {
     buildConf("spark.sql.subexpressionElimination.enabled")
       .internal()
       .doc("When true, common subexpressions will be eliminated.")
-      .version("1.6.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -530,7 +491,6 @@ object SQLConf {
     .internal()
     .doc("Whether the query analyzer should be case sensitive or not. " +
       "Default to case insensitive. It is highly discouraged to turn on case 
sensitive mode.")
-    .version("1.4.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -540,7 +500,6 @@ object SQLConf {
       "plan to optimize them. Constraint propagation can sometimes be 
computationally expensive " +
       "for certain kinds of query plans (such as those with a large number of 
predicates and " +
       "aliases) which might negatively impact overall runtime.")
-    .version("2.2.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -549,7 +508,6 @@ object SQLConf {
     .doc("When true, string literals (including regex patterns) remain escaped 
in our SQL " +
       "parser. The default is false since Spark 2.0. Setting it to true can 
restore the behavior " +
       "prior to Spark 2.0.")
-    .version("2.2.1")
     .booleanConf
     .createWithDefault(false)
 
@@ -558,7 +516,6 @@ object SQLConf {
     .doc("When estimating the output data size of a table scan, multiply the 
file size with this " +
       "factor as the estimated data size, in case the data is compressed in 
the file and lead to" +
       " a heavily underestimated result.")
-    .version("2.3.1")
     .doubleConf
     .checkValue(_ > 0, "the value of fileDataSizeFactor must be greater than 
0")
     .createWithDefault(1.0)
@@ -567,7 +524,6 @@ object SQLConf {
     .doc("When true, the Parquet data source merges schemas collected from all 
data files, " +
          "otherwise the schema is picked from the summary file or a random 
data file " +
          "if no summary file is available.")
-    .version("1.5.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -576,7 +532,6 @@ object SQLConf {
          "summary files and we will ignore them when merging schema. 
Otherwise, if this is " +
          "false, which is the default, we will merge all part-files. This 
should be considered " +
          "as expert-only option, and shouldn't be enabled before knowing what 
it means exactly.")
-    .version("1.5.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -585,7 +540,6 @@ object SQLConf {
       "Spark SQL, do not differentiate between binary data and strings when 
writing out the " +
       "Parquet schema. This flag tells Spark SQL to interpret binary data as a 
string to provide " +
       "compatibility with these systems.")
-    .version("1.1.1")
     .booleanConf
     .createWithDefault(false)
 
@@ -594,7 +548,6 @@ object SQLConf {
       "Spark would also store Timestamp as INT96 because we need to avoid 
precision lost of the " +
       "nanoseconds field. This flag tells Spark SQL to interpret INT96 data as 
a timestamp to " +
       "provide compatibility with these systems.")
-    .version("1.3.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -602,7 +555,6 @@ object SQLConf {
     .doc("This controls whether timestamp adjustments should be applied to 
INT96 data when " +
       "converting to timestamps, for data written by Impala.  This is 
necessary because Impala " +
       "stores INT96 data with a different timezone offset than Hive & Spark.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -616,7 +568,6 @@ object SQLConf {
       "is a standard timestamp type in Parquet, which stores number of 
microseconds from the " +
       "Unix epoch. TIMESTAMP_MILLIS is also standard, but with millisecond 
precision, which " +
       "means Spark has to truncate the microsecond portion of its timestamp 
value.")
-    .version("2.3.0")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValues(ParquetOutputTimestampType.values.map(_.toString))
@@ -628,7 +579,6 @@ object SQLConf {
       "precedence would be `compression`, `parquet.compression`, " +
       "`spark.sql.parquet.compression.codec`. Acceptable values include: none, 
uncompressed, " +
       "snappy, gzip, lzo, brotli, lz4, zstd.")
-    .version("1.1.1")
     .stringConf
     .transform(_.toLowerCase(Locale.ROOT))
     .checkValues(Set("none", "uncompressed", "snappy", "gzip", "lzo", "lz4", 
"brotli", "zstd"))
@@ -636,7 +586,6 @@ object SQLConf {
 
   val PARQUET_FILTER_PUSHDOWN_ENABLED = 
buildConf("spark.sql.parquet.filterPushdown")
     .doc("Enables Parquet filter push-down optimization when set to true.")
-    .version("1.2.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -644,7 +593,6 @@ object SQLConf {
     .doc("If true, enables Parquet filter push-down optimization for Date. " +
       s"This configuration only has an effect when 
'${PARQUET_FILTER_PUSHDOWN_ENABLED.key}' is " +
       "enabled.")
-    .version("2.4.0")
     .internal()
     .booleanConf
     .createWithDefault(true)
@@ -654,17 +602,15 @@ object SQLConf {
       .doc("If true, enables Parquet filter push-down optimization for 
Timestamp. " +
         s"This configuration only has an effect when 
'${PARQUET_FILTER_PUSHDOWN_ENABLED.key}' is " +
         "enabled and Timestamp stored as TIMESTAMP_MICROS or TIMESTAMP_MILLIS 
type.")
-      .version("2.4.0")
-      .internal()
-      .booleanConf
-      .createWithDefault(true)
+    .internal()
+    .booleanConf
+    .createWithDefault(true)
 
   val PARQUET_FILTER_PUSHDOWN_DECIMAL_ENABLED =
     buildConf("spark.sql.parquet.filterPushdown.decimal")
       .doc("If true, enables Parquet filter push-down optimization for 
Decimal. " +
         s"This configuration only has an effect when 
'${PARQUET_FILTER_PUSHDOWN_ENABLED.key}' is " +
         "enabled.")
-      .version("2.4.0")
       .internal()
       .booleanConf
       .createWithDefault(true)
@@ -674,7 +620,6 @@ object SQLConf {
     .doc("If true, enables Parquet filter push-down optimization for string 
startsWith function. " +
       s"This configuration only has an effect when 
'${PARQUET_FILTER_PUSHDOWN_ENABLED.key}' is " +
       "enabled.")
-    .version("2.4.0")
     .internal()
     .booleanConf
     .createWithDefault(true)
@@ -687,7 +632,6 @@ object SQLConf {
         "By setting this value to 0 this feature can be disabled. " +
         s"This configuration only has an effect when 
'${PARQUET_FILTER_PUSHDOWN_ENABLED.key}' is " +
         "enabled.")
-      .version("2.4.0")
       .internal()
       .intConf
       .checkValue(threshold => threshold >= 0, "The threshold must not be 
negative.")
@@ -699,7 +643,6 @@ object SQLConf {
       "systems such as Apache Hive and Apache Impala use. If false, the newer 
format in Parquet " +
       "will be used. For example, decimals will be written in int-based 
format. If Parquet " +
       "output is intended for use with systems that do not support this newer 
format, set to true.")
-    .version("1.6.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -709,7 +652,6 @@ object SQLConf {
       "of org.apache.parquet.hadoop.ParquetOutputCommitter. If it is not, then 
metadata " +
       "summaries will never be created, irrespective of the value of " +
       "parquet.summary.metadata.level")
-    .version("1.5.0")
     .internal()
     .stringConf
     .createWithDefault("org.apache.parquet.hadoop.ParquetOutputCommitter")
@@ -717,7 +659,6 @@ object SQLConf {
   val PARQUET_VECTORIZED_READER_ENABLED =
     buildConf("spark.sql.parquet.enableVectorizedReader")
       .doc("Enables vectorized parquet decoding.")
-      .version("2.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -727,14 +668,12 @@ object SQLConf {
       s"This configuration only has an effect when 
'${PARQUET_FILTER_PUSHDOWN_ENABLED.key}' " +
       "is enabled and the vectorized reader is not used. You can ensure the 
vectorized reader " +
       s"is not used by setting '${PARQUET_VECTORIZED_READER_ENABLED.key}' to 
false.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(false)
 
   val PARQUET_VECTORIZED_READER_BATCH_SIZE = 
buildConf("spark.sql.parquet.columnarReaderBatchSize")
     .doc("The number of rows to include in a parquet vectorized reader batch. 
The number should " +
       "be carefully chosen to minimize overhead and avoid OOMs in reading 
data.")
-    .version("2.4.0")
     .intConf
     .createWithDefault(4096)
 
@@ -743,7 +682,6 @@ object SQLConf {
       "`orc.compress` is specified in the table-specific options/properties, 
the precedence " +
       "would be `compression`, `orc.compress`, 
`spark.sql.orc.compression.codec`." +
       "Acceptable values include: none, uncompressed, snappy, zlib, lzo.")
-    .version("2.3.0")
     .stringConf
     .transform(_.toLowerCase(Locale.ROOT))
     .checkValues(Set("none", "uncompressed", "snappy", "zlib", "lzo"))
@@ -752,7 +690,6 @@ object SQLConf {
   val ORC_IMPLEMENTATION = buildConf("spark.sql.orc.impl")
     .doc("When native, use the native version of ORC support instead of the 
ORC library in Hive. " +
       "It is 'hive' by default prior to Spark 2.4.")
-    .version("2.3.0")
     .internal()
     .stringConf
     .checkValues(Set("hive", "native"))
@@ -760,27 +697,23 @@ object SQLConf {
 
   val ORC_VECTORIZED_READER_ENABLED = 
buildConf("spark.sql.orc.enableVectorizedReader")
     .doc("Enables vectorized orc decoding.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(true)
 
   val ORC_VECTORIZED_READER_BATCH_SIZE = 
buildConf("spark.sql.orc.columnarReaderBatchSize")
     .doc("The number of rows to include in a orc vectorized reader batch. The 
number should " +
       "be carefully chosen to minimize overhead and avoid OOMs in reading 
data.")
-    .version("2.4.0")
     .intConf
     .createWithDefault(4096)
 
   val ORC_FILTER_PUSHDOWN_ENABLED = buildConf("spark.sql.orc.filterPushdown")
     .doc("When true, enable filter pushdown for ORC files.")
-    .version("1.4.0")
     .booleanConf
     .createWithDefault(true)
 
   val ORC_SCHEMA_MERGING_ENABLED = buildConf("spark.sql.orc.mergeSchema")
     .doc("When true, the Orc data source merges schemas collected from all 
data files, " +
       "otherwise the schema is picked from a random data file.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -788,7 +721,6 @@ object SQLConf {
     .doc("When true, check all the partition paths under the table\'s root 
directory " +
          "when reading data stored in HDFS. This configuration will be 
deprecated in the future " +
          s"releases and replaced by ${SPARK_IGNORE_MISSING_FILES.key}.")
-    .version("1.4.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -798,7 +730,6 @@ object SQLConf {
            "unmatching partitions can be eliminated earlier. This only affects 
Hive tables " +
            "not converted to filesource relations (see 
HiveUtils.CONVERT_METASTORE_PARQUET and " +
            "HiveUtils.CONVERT_METASTORE_ORC for more information).")
-      .version("1.5.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -808,7 +739,6 @@ object SQLConf {
            "This includes both datasource and converted Hive tables. When 
partition management " +
            "is enabled, datasource tables store partition in the Hive 
metastore, and use the " +
            "metastore to prune partitions during query planning.")
-      .version("2.1.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -817,7 +747,6 @@ object SQLConf {
       .doc("When nonzero, enable caching of partition file metadata in memory. 
All tables share " +
            "a cache that can use up to specified num bytes for file metadata. 
This conf only " +
            "has an effect when hive filesource partition management is 
enabled.")
-      .version("2.1.1")
       .longConf
       .createWithDefault(250 * 1024 * 1024)
 
@@ -833,7 +762,6 @@ object SQLConf {
       "and write it back to the table properties), INFER_ONLY (infer the 
schema but don't " +
       "attempt to write it to the table properties) and NEVER_INFER (the 
default mode-- fallback " +
       "to using the case-insensitive metastore schema instead of inferring).")
-    .version("2.1.1")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValues(HiveCaseSensitiveInferenceMode.values.map(_.toString))
@@ -846,27 +774,23 @@ object SQLConf {
       "scanned are partition columns and the query has an aggregate operator 
that satisfies " +
       "distinct semantics. By default the optimization is disabled, since it 
may return " +
       "incorrect results when the files are empty.")
-    .version("2.1.1")
     .booleanConf
     .createWithDefault(false)
 
   val COLUMN_NAME_OF_CORRUPT_RECORD = 
buildConf("spark.sql.columnNameOfCorruptRecord")
     .doc("The name of internal column for storing raw/un-parsed JSON and CSV 
records that fail " +
       "to parse.")
-    .version("1.2.0")
     .stringConf
     .createWithDefault("_corrupt_record")
 
   val BROADCAST_TIMEOUT = buildConf("spark.sql.broadcastTimeout")
     .doc("Timeout in seconds for the broadcast wait time in broadcast joins.")
-    .version("1.3.0")
     .timeConf(TimeUnit.SECONDS)
     .createWithDefaultString(s"${5 * 60}")
 
   // This is only used for the thriftserver
   val THRIFTSERVER_POOL = buildConf("spark.sql.thriftserver.scheduler.pool")
     .doc("Set a Fair Scheduler pool for a JDBC client session.")
-    .version("1.1.1")
     .stringConf
     .createOptional
 
@@ -874,27 +798,23 @@ object SQLConf {
     buildConf("spark.sql.thriftServer.incrementalCollect")
       .internal()
       .doc("When true, enable incremental collection for execution in Thrift 
Server.")
-      .version("2.0.3")
       .booleanConf
       .createWithDefault(false)
 
   val THRIFTSERVER_UI_STATEMENT_LIMIT =
     buildConf("spark.sql.thriftserver.ui.retainedStatements")
       .doc("The number of SQL statements kept in the JDBC/ODBC web UI 
history.")
-      .version("1.4.0")
       .intConf
       .createWithDefault(200)
 
   val THRIFTSERVER_UI_SESSION_LIMIT = 
buildConf("spark.sql.thriftserver.ui.retainedSessions")
     .doc("The number of SQL client sessions kept in the JDBC/ODBC web UI 
history.")
-    .version("1.4.0")
     .intConf
     .createWithDefault(200)
 
   // This is used to set the default data source
   val DEFAULT_DATA_SOURCE_NAME = buildConf("spark.sql.sources.default")
     .doc("The default data source to use in input/output.")
-    .version("1.3.0")
     .stringConf
     .createWithDefault("parquet")
 
@@ -903,7 +823,6 @@ object SQLConf {
     .doc("When true, a table created by a Hive CTAS statement (no USING 
clause) " +
       "without specifying any storage property will be converted to a data 
source table, " +
       s"using the data source set by ${DEFAULT_DATA_SOURCE_NAME.key}.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -912,26 +831,22 @@ object SQLConf {
       .doc("When true, fast stats (number of files and total size of all 
files) will be gathered" +
         " in parallel while repairing table partitions to avoid the sequential 
listing in Hive" +
         " metastore.")
-      .version("2.0.1")
       .booleanConf
       .createWithDefault(true)
 
   val PARTITION_COLUMN_TYPE_INFERENCE =
     buildConf("spark.sql.sources.partitionColumnTypeInference.enabled")
       .doc("When true, automatically infer the data types for partitioned 
columns.")
-      .version("1.5.0")
       .booleanConf
       .createWithDefault(true)
 
   val BUCKETING_ENABLED = buildConf("spark.sql.sources.bucketing.enabled")
     .doc("When false, we will treat bucketed table as normal table")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
   val BUCKETING_MAX_BUCKETS = 
buildConf("spark.sql.sources.bucketing.maxBuckets")
     .doc("The maximum number of buckets allowed.")
-    .version("2.4.0")
     .intConf
     .checkValue(_ > 0, "the value of spark.sql.sources.bucketing.maxBuckets 
must be greater than 0")
     .createWithDefault(100000)
@@ -940,42 +855,36 @@ object SQLConf {
     .internal()
     .doc("When false, we will throw an error if a query contains a cartesian 
product without " +
         "explicit CROSS JOIN syntax.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
   val ORDER_BY_ORDINAL = buildConf("spark.sql.orderByOrdinal")
     .doc("When true, the ordinal numbers are treated as the position in the 
select list. " +
          "When false, the ordinal numbers in order/sort by clause are 
ignored.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
   val GROUP_BY_ORDINAL = buildConf("spark.sql.groupByOrdinal")
     .doc("When true, the ordinal numbers in group by clauses are treated as 
the position " +
       "in the select list. When false, the ordinal numbers are ignored.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
   val GROUP_BY_ALIASES = buildConf("spark.sql.groupByAliases")
     .doc("When true, aliases in a select list can be used in group by clauses. 
When false, " +
       "an analysis exception is thrown in the case.")
-    .version("2.2.0")
     .booleanConf
     .createWithDefault(true)
 
   // 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")
-    .version("1.4.0")
     .internal()
     .stringConf
     .createOptional
 
   val FILE_COMMIT_PROTOCOL_CLASS =
     buildConf("spark.sql.sources.commitProtocolClass")
-      .version("2.1.1")
       .internal()
       .stringConf
       .createWithDefault(
@@ -987,7 +896,6 @@ object SQLConf {
         "of detected paths exceeds this value during partition discovery, it 
tries to list the " +
         "files with another Spark distributed job. This configuration is 
effective only when " +
         "using file-based sources such as Parquet, JSON and ORC.")
-      .version("1.5.0")
       .intConf
       .checkValue(parallel => parallel >= 0, "The maximum number of paths 
allowed for listing " +
         "files at driver side must not be negative")
@@ -997,7 +905,6 @@ object SQLConf {
     buildConf("spark.sql.sources.parallelPartitionDiscovery.parallelism")
       .doc("The number of parallelism to list a collection of path 
recursively, Set the " +
         "number to prevent file listing from generating too many tasks.")
-      .version("2.1.1")
       .internal()
       .intConf
       .createWithDefault(10000)
@@ -1009,7 +916,6 @@ object SQLConf {
         "schedule tasks to take advantage of data locality. It can be 
particularly " +
         "useful if data is read from a remote cluster so the scheduler could 
never " +
         "take advantage of locality anyway.")
-      .version("3.0.0")
       .internal()
       .booleanConf
       .createWithDefault(false)
@@ -1018,7 +924,6 @@ object SQLConf {
   // See SPARK-6231.
   val DATAFRAME_SELF_JOIN_AUTO_RESOLVE_AMBIGUITY =
     buildConf("spark.sql.selfJoinAutoResolveAmbiguity")
-      .version("1.4.0")
       .internal()
       .booleanConf
       .createWithDefault(true)
@@ -1026,14 +931,12 @@ object SQLConf {
   val FAIL_AMBIGUOUS_SELF_JOIN_ENABLED =
     buildConf("spark.sql.analyzer.failAmbiguousSelfJoin")
       .doc("When true, fail the Dataset query if it contains ambiguous 
self-join.")
-      .version("3.0.0")
       .internal()
       .booleanConf
       .createWithDefault(true)
 
   // Whether to retain group by columns or not in GroupedData.agg.
   val DATAFRAME_RETAIN_GROUP_COLUMNS = 
buildConf("spark.sql.retainGroupColumns")
-    .version("1.4.0")
     .internal()
     .booleanConf
     .createWithDefault(true)
@@ -1041,14 +944,12 @@ object SQLConf {
   val DATAFRAME_PIVOT_MAX_VALUES = buildConf("spark.sql.pivotMaxValues")
     .doc("When doing a pivot without specifying values for the pivot column 
this is the maximum " +
       "number of (distinct) values that will be collected without error.")
-    .version("1.6.0")
     .intConf
     .createWithDefault(10000)
 
   val RUN_SQL_ON_FILES = buildConf("spark.sql.runSQLOnFiles")
     .internal()
     .doc("When true, we could use `datasource`.`path` as table in SQL query.")
-    .version("1.6.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1056,7 +957,6 @@ object SQLConf {
     .internal()
     .doc("When true, the whole stage (of multiple operators) will be compiled 
into single java" +
       " method.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1065,7 +965,6 @@ object SQLConf {
     .internal()
     .doc("When true, embed the (whole-stage) codegen stage ID into " +
       "the class name of the generated class as a suffix")
-    .version("2.3.1")
     .booleanConf
     .createWithDefault(true)
 
@@ -1073,7 +972,6 @@ object SQLConf {
     .internal()
     .doc("The maximum number of fields (including nested fields) that will be 
supported before" +
       " deactivating whole-stage codegen.")
-    .version("2.0.0")
     .intConf
     .createWithDefault(100)
 
@@ -1083,7 +981,6 @@ object SQLConf {
       "interpreted if any compile error happens. Disabling fallback if 
`CODEGEN_ONLY`. " +
       "`NO_CODEGEN` skips codegen and goes interpreted path always. Note that 
" +
       "this config works only for tests.")
-    .version("2.4.0")
     .internal()
     .stringConf
     .checkValues(CodegenObjectFactoryMode.values.map(_.toString))
@@ -1093,14 +990,12 @@ object SQLConf {
     .internal()
     .doc("When true, (whole stage) codegen could be temporary disabled for the 
part of query that" +
       " fail to compile generated code")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
   val CODEGEN_LOGGING_MAX_LINES = 
buildConf("spark.sql.codegen.logging.maxLines")
     .internal()
     .doc("The maximum number of codegen lines to log when errors occur. Use -1 
for unlimited.")
-    .version("2.3.0")
     .intConf
     .checkValue(maxLines => maxLines >= -1, "The maximum must be a positive 
integer, 0 to " +
       "disable logging or -1 to apply no limit.")
@@ -1114,7 +1009,6 @@ object SQLConf {
       "is the largest bytecode size possible for a valid Java method. When 
running on HotSpot, " +
       s"it may be preferable to set the value to 
${CodeGenerator.DEFAULT_JVM_HUGE_METHOD_LIMIT} " +
       "to match HotSpot's implementation.")
-    .version("2.3.0")
     .intConf
     .createWithDefault(65535)
 
@@ -1126,7 +1020,6 @@ object SQLConf {
       "generated, so use the code length as metric. When running on HotSpot, a 
function's " +
       "bytecode should not go beyond 8KB, otherwise it will not be JITted; it 
also should not " +
       "be too small, otherwise there will be many function calls.")
-    .version("3.0.0")
     .intConf
     .checkValue(threshold => threshold > 0, "The threshold must be a positive 
integer.")
     .createWithDefault(1024)
@@ -1137,7 +1030,6 @@ object SQLConf {
       .doc("When true, whole stage codegen would put the logic of consuming 
rows of each " +
         "physical operator into individual methods, instead of a single big 
method. This can be " +
         "used to avoid oversized function that can miss the opportunity of JIT 
optimization.")
-      .version("2.3.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -1145,7 +1037,6 @@ object SQLConf {
     .doc("The maximum number of bytes to pack into a single partition when 
reading files. " +
       "This configuration is effective only when using file-based sources such 
as Parquet, JSON " +
       "and ORC.")
-    .version("2.0.0")
     .bytesConf(ByteUnit.BYTE)
     .createWithDefaultString("128MB") // parquet.block.size
 
@@ -1156,7 +1047,6 @@ object SQLConf {
       " over estimated, then the partitions with small files will be faster 
than partitions with" +
       " bigger files (which is scheduled first). This configuration is 
effective only when using" +
       " file-based sources such as Parquet, JSON and ORC.")
-    .version("2.0.0")
     .longConf
     .createWithDefault(4 * 1024 * 1024)
 
@@ -1165,7 +1055,6 @@ object SQLConf {
       "encountering corrupted files and the contents that have been read will 
still be returned. " +
       "This configuration is effective only when using file-based sources such 
as Parquet, JSON " +
       "and ORC.")
-    .version("2.1.1")
     .booleanConf
     .createWithDefault(false)
 
@@ -1174,28 +1063,24 @@ object SQLConf {
       "encountering missing files and the contents that have been read will 
still be returned. " +
       "This configuration is effective only when using file-based sources such 
as Parquet, JSON " +
       "and ORC.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(false)
 
   val MAX_RECORDS_PER_FILE = buildConf("spark.sql.files.maxRecordsPerFile")
     .doc("Maximum number of records to write out to a single file. " +
       "If this value is zero or negative, there is no limit.")
-    .version("2.2.0")
     .longConf
     .createWithDefault(0)
 
   val EXCHANGE_REUSE_ENABLED = buildConf("spark.sql.exchange.reuse")
     .internal()
     .doc("When true, the planner will try to find out duplicated exchanges and 
re-use them.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
   val SUBQUERY_REUSE_ENABLED = buildConf("spark.sql.execution.reuseSubquery")
     .internal()
     .doc("When true, the planner will try to find out duplicated subqueries 
and re-use them.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1207,7 +1092,6 @@ object SQLConf {
           "be a subclass of StateStoreProvider, and must have a zero-arg 
constructor. " +
           "Note: For structured streaming, this configuration cannot be 
changed between query " +
           "restarts from the same checkpoint location.")
-      .version("2.3.0")
       .stringConf
       .createWithDefault(
         
"org.apache.spark.sql.execution.streaming.state.HDFSBackedStateStoreProvider")
@@ -1217,7 +1101,6 @@ object SQLConf {
       .internal()
       .doc("Minimum number of state store delta files that needs to be 
generated before they " +
         "consolidated into snapshots.")
-      .version("2.0.0")
       .intConf
       .createWithDefault(10)
 
@@ -1225,28 +1108,24 @@ object SQLConf {
     buildConf("spark.sql.streaming.flatMapGroupsWithState.stateFormatVersion")
       .internal()
       .doc("State format version used by flatMapGroupsWithState operation in a 
streaming query")
-      .version("2.4.0")
       .intConf
       .checkValue(v => Set(1, 2).contains(v), "Valid versions are 1 and 2")
       .createWithDefault(2)
 
   val CHECKPOINT_LOCATION = buildConf("spark.sql.streaming.checkpointLocation")
     .doc("The default location for storing checkpoint data for streaming 
queries.")
-    .version("2.0.0")
     .stringConf
     .createOptional
 
   val FORCE_DELETE_TEMP_CHECKPOINT_LOCATION =
     buildConf("spark.sql.streaming.forceDeleteTempCheckpointLocation")
       .doc("When true, enable temporary checkpoint locations force delete.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
   val MIN_BATCHES_TO_RETAIN = 
buildConf("spark.sql.streaming.minBatchesToRetain")
     .internal()
     .doc("The minimum number of batches that must be retained and made 
recoverable.")
-    .version("2.1.1")
     .intConf
     .createWithDefault(100)
 
@@ -1256,7 +1135,6 @@ object SQLConf {
       "loading from files. The value adjusts a trade-off between memory usage 
vs cache miss: " +
       "'2' covers both success and direct failure cases, '1' covers only 
success case, " +
       "and '0' covers extreme case - disable cache to maximize memory size of 
executors.")
-    .version("2.4.0")
     .intConf
     .createWithDefault(2)
 
@@ -1266,7 +1144,6 @@ object SQLConf {
       .doc("State format version used by streaming aggregation operations in a 
streaming query. " +
         "State between versions are tend to be incompatible, so state format 
version shouldn't " +
         "be modified after running.")
-      .version("2.4.0")
       .intConf
       .checkValue(v => Set(1, 2).contains(v), "Valid versions are 1 and 2")
       .createWithDefault(2)
@@ -1277,7 +1154,6 @@ object SQLConf {
       "If we find a concurrent active run for a streaming query (in the same 
or different " +
       "SparkSessions on the same cluster) and this flag is true, we will stop 
the old streaming " +
       "query run to start the new one.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1287,7 +1163,6 @@ object SQLConf {
       .doc("State format version used by streaming join operations in a 
streaming query. " +
         "State between versions are tend to be incompatible, so state format 
version shouldn't " +
         "be modified after running.")
-      .version("3.0.0")
       .intConf
       .checkValue(v => Set(1, 2).contains(v), "Valid versions are 1 and 2")
       .createWithDefault(2)
@@ -1297,7 +1172,6 @@ object SQLConf {
       .internal()
       .doc("When true, the logical plan for streaming query will be checked 
for unsupported" +
         " operations.")
-      .version("2.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -1305,7 +1179,6 @@ object SQLConf {
     buildConf("spark.sql.variable.substitute")
       .doc("This enables substitution using syntax like `${var}`, 
`${system:var}`, " +
         "and `${env:var}`.")
-      .version("2.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -1316,7 +1189,6 @@ object SQLConf {
         "inserted/looked-up at a 1st-level, small, fast map, and then fallback 
to a " +
         "2nd-level, larger, slower map when 1st level is full or keys cannot 
be found. " +
         "When disabled, records go directly to the 2nd level.")
-      .version("2.3.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -1324,7 +1196,6 @@ object SQLConf {
     buildConf("spark.sql.codegen.aggregate.map.vectorized.enable")
       .internal()
       .doc("Enable vectorized aggregate hash map. This is for 
testing/benchmarking only.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -1334,7 +1205,6 @@ object SQLConf {
       .doc("When true, the code generator would split aggregate code into 
individual methods " +
         "instead of a single big method. This can be used to avoid oversized 
function that " +
         "can miss the opportunity of JIT optimization.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -1346,7 +1216,6 @@ object SQLConf {
         "However the DAG depth may become too large and cause unexpected 
behavior. This " +
         "configuration puts a limit on this: when the depth of a view exceeds 
this value during " +
         "analysis, we terminate the resolution to avoid potential errors.")
-      .version("2.2.0")
       .intConf
       .checkValue(depth => depth > 0, "The maximum depth of a view reference 
in a nested view " +
         "must be positive.")
@@ -1354,7 +1223,6 @@ object SQLConf {
 
   val STREAMING_FILE_COMMIT_PROTOCOL_CLASS =
     buildConf("spark.sql.streaming.commitProtocolClass")
-      .version("2.1.0")
       .internal()
       .stringConf
       
.createWithDefault("org.apache.spark.sql.execution.streaming.ManifestFileCommitProtocol")
@@ -1367,7 +1235,6 @@ object SQLConf {
         "'max' which chooses the maximum across multiple operators. " +
         "Note: This configuration cannot be changed between query restarts 
from the same " +
         "checkpoint location.")
-      .version("2.4.0")
       .stringConf
       .transform(_.toLowerCase(Locale.ROOT))
       .checkValue(
@@ -1382,7 +1249,6 @@ object SQLConf {
       .doc("In the case of ObjectHashAggregateExec, when the size of the 
in-memory hash map " +
         "grows too large, we will fall back to sort-based aggregation. This 
option sets a row " +
         "count threshold for the size of the hash map.")
-      .version("2.2.0")
       .intConf
       // We are trying to be conservative and use a relatively small default 
count threshold here
       // since the state object of some TypedImperativeAggregate function can 
be quite large (e.g.
@@ -1392,7 +1258,6 @@ object SQLConf {
   val USE_OBJECT_HASH_AGG = 
buildConf("spark.sql.execution.useObjectHashAggregateExec")
     .internal()
     .doc("Decides if we use ObjectHashAggregateExec")
-    .version("2.2.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1401,14 +1266,12 @@ object SQLConf {
       .doc("Whether to ignore null fields when generating JSON objects in JSON 
data source and " +
         "JSON functions such as to_json. " +
         "If false, it generates null for null fields in JSON objects.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
   val FILE_SINK_LOG_DELETION = 
buildConf("spark.sql.streaming.fileSink.log.deletion")
     .internal()
     .doc("Whether to delete the expired log files in file stream sink.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1417,7 +1280,6 @@ object SQLConf {
       .internal()
       .doc("Number of log files after which all the previous files " +
         "are compacted into the next log file.")
-      .version("2.0.0")
       .intConf
       .createWithDefault(10)
 
@@ -1425,14 +1287,12 @@ object SQLConf {
     buildConf("spark.sql.streaming.fileSink.log.cleanupDelay")
       .internal()
       .doc("How long that a file is guaranteed to be visible for all readers.")
-      .version("2.0.0")
       .timeConf(TimeUnit.MILLISECONDS)
       .createWithDefault(TimeUnit.MINUTES.toMillis(10)) // 10 minutes
 
   val FILE_SOURCE_LOG_DELETION = 
buildConf("spark.sql.streaming.fileSource.log.deletion")
     .internal()
     .doc("Whether to delete the expired log files in file stream source.")
-    .version("2.0.1")
     .booleanConf
     .createWithDefault(true)
 
@@ -1441,7 +1301,6 @@ object SQLConf {
       .internal()
       .doc("Number of log files after which all the previous files " +
         "are compacted into the next log file.")
-      .version("2.0.1")
       .intConf
       .createWithDefault(10)
 
@@ -1449,7 +1308,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.fileSource.log.cleanupDelay")
       .internal()
       .doc("How long in milliseconds a file is guaranteed to be visible for 
all readers.")
-      .version("2.0.1")
       .timeConf(TimeUnit.MILLISECONDS)
       .createWithDefault(TimeUnit.MINUTES.toMillis(10)) // 10 minutes
 
@@ -1459,14 +1317,12 @@ object SQLConf {
       .doc("When true, force the schema of streaming file source to be 
nullable (including all " +
         "the fields). Otherwise, the schema might not be compatible with 
actual data, which " +
         "leads to corruptions.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
   val FILE_SOURCE_CLEANER_NUM_THREADS =
     buildConf("spark.sql.streaming.fileSource.cleaner.numThreads")
       .doc("Number of threads used in the file source completed file cleaner.")
-      .version("3.0.0")
       .intConf
       .createWithDefault(1)
 
@@ -1474,7 +1330,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.schemaInference")
       .internal()
       .doc("Whether file-based streaming sources will infer its own schema")
-      .version("2.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -1482,7 +1337,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.pollingDelay")
       .internal()
       .doc("How long to delay polling new data when no data is available")
-      .version("2.0.0")
       .timeConf(TimeUnit.MILLISECONDS)
       .createWithDefault(10L)
 
@@ -1490,7 +1344,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.stopTimeout")
       .doc("How long to wait in milliseconds for the streaming execution 
thread to stop when " +
         "calling the streaming query's stop() method. 0 or negative values 
wait indefinitely.")
-      .version("3.0.0")
       .timeConf(TimeUnit.MILLISECONDS)
       .createWithDefaultString("0")
 
@@ -1498,7 +1351,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.noDataProgressEventInterval")
       .internal()
       .doc("How long to wait between two progress events when there is no 
data")
-      .version("2.1.1")
       .timeConf(TimeUnit.MILLISECONDS)
       .createWithDefault(10000L)
 
@@ -1507,21 +1359,18 @@ object SQLConf {
       .doc(
         "Whether streaming micro-batch engine will execute batches without 
data " +
           "for eager state management for stateful streaming queries.")
-      .version("2.4.1")
       .booleanConf
       .createWithDefault(true)
 
   val STREAMING_METRICS_ENABLED =
     buildConf("spark.sql.streaming.metricsEnabled")
       .doc("Whether Dropwizard/Codahale metrics will be reported for active 
streaming queries.")
-      .version("2.0.2")
       .booleanConf
       .createWithDefault(false)
 
   val STREAMING_PROGRESS_RETENTION =
     buildConf("spark.sql.streaming.numRecentProgressUpdates")
       .doc("The number of progress updates to retain for a streaming query")
-      .version("2.1.1")
       .intConf
       .createWithDefault(100)
 
@@ -1529,7 +1378,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.checkpointFileManagerClass")
       .doc("The class used to write checkpoint files atomically. This class 
must be a subclass " +
         "of the interface CheckpointFileManager.")
-      .version("2.4.0")
       .internal()
       .stringConf
 
@@ -1537,7 +1385,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.checkpoint.escapedPathCheck.enabled")
       .doc("Whether to detect a streaming query may pick up an incorrect 
checkpoint path due " +
         "to SPARK-26824.")
-      .version("3.0.0")
       .internal()
       .booleanConf
       .createWithDefault(true)
@@ -1548,7 +1395,6 @@ object SQLConf {
       .doc("When true, SQL commands use parallel file listing, " +
         "as opposed to single thread listing. " +
         "This usually speeds up commands that need to list many directories.")
-      .version("2.4.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -1558,7 +1404,6 @@ object SQLConf {
       s"which is larger than `${AUTO_BROADCASTJOIN_THRESHOLD.key}` to be more 
conservative. " +
       "That is to say by default the optimizer will not choose to broadcast a 
table unless it " +
       "knows for sure its size is small enough.")
-    .version("1.1.0")
     .bytesConf(ByteUnit.BYTE)
     .createWithDefault(Long.MaxValue)
 
@@ -1569,7 +1414,6 @@ object SQLConf {
       "For non-partitioned data source tables, it will be automatically 
recalculated if table " +
       "statistics are not available. For partitioned data source and 
partitioned Hive tables, " +
       s"It is '${DEFAULT_SIZE_IN_BYTES.key}' if table statistics are not 
available.")
-    .version("2.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -1578,7 +1422,6 @@ object SQLConf {
       .internal()
       .doc("The maximum estimation error allowed in HyperLogLog++ algorithm 
when generating " +
         "column level statistics.")
-      .version("2.1.1")
       .doubleConf
       .createWithDefault(0.05)
 
@@ -1589,7 +1432,6 @@ object SQLConf {
         "histogram. Note that collecting histograms takes extra cost. For 
example, collecting " +
         "column statistics usually takes only one table scan, but generating 
equi-height " +
         "histogram will cause an extra table scan.")
-      .version("2.3.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -1597,7 +1439,6 @@ object SQLConf {
     buildConf("spark.sql.statistics.histogram.numBins")
       .internal()
       .doc("The number of bins when generating histograms.")
-      .version("2.3.0")
       .intConf
       .checkValue(num => num > 1, "The number of bins must be greater than 1.")
       .createWithDefault(254)
@@ -1608,7 +1449,6 @@ object SQLConf {
       .doc("Accuracy of percentile approximation when generating equi-height 
histograms. " +
         "Larger value means better accuracy. The relative error can be deduced 
by " +
         "1.0 / PERCENTILE_ACCURACY.")
-      .version("2.3.0")
       .intConf
       .createWithDefault(10000)
 
@@ -1617,35 +1457,30 @@ object SQLConf {
       .doc("Enables automatic update for table size once table's data is 
changed. Note that if " +
         "the total number of files of the table is very large, this can be 
expensive and slow " +
         "down data change commands.")
-      .version("2.3.0")
       .booleanConf
       .createWithDefault(false)
 
   val CBO_ENABLED =
     buildConf("spark.sql.cbo.enabled")
       .doc("Enables CBO for estimation of plan statistics when set true.")
-      .version("2.2.0")
       .booleanConf
       .createWithDefault(false)
 
   val PLAN_STATS_ENABLED =
     buildConf("spark.sql.cbo.planStats.enabled")
       .doc("When true, the logical plan will fetch row counts and column 
statistics from catalog.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
   val JOIN_REORDER_ENABLED =
     buildConf("spark.sql.cbo.joinReorder.enabled")
       .doc("Enables join reorder in CBO.")
-      .version("2.2.0")
       .booleanConf
       .createWithDefault(false)
 
   val JOIN_REORDER_DP_THRESHOLD =
     buildConf("spark.sql.cbo.joinReorder.dp.threshold")
       .doc("The maximum number of joined nodes allowed in the dynamic 
programming algorithm.")
-      .version("2.2.0")
       .intConf
       .checkValue(number => number > 0, "The maximum number must be a positive 
integer.")
       .createWithDefault(12)
@@ -1655,7 +1490,6 @@ object SQLConf {
       .internal()
       .doc("The weight of cardinality (number of rows) for plan cost 
comparison in join reorder: " +
         "rows * weight + size * (1 - weight).")
-      .version("2.2.0")
       .doubleConf
       .checkValue(weight => weight >= 0 && weight <= 1, "The weight value must 
be in [0, 1].")
       .createWithDefault(0.7)
@@ -1663,13 +1497,11 @@ object SQLConf {
   val JOIN_REORDER_DP_STAR_FILTER =
     buildConf("spark.sql.cbo.joinReorder.dp.star.filter")
       .doc("Applies star-join filter heuristics to cost based join 
enumeration.")
-      .version("2.2.0")
       .booleanConf
       .createWithDefault(false)
 
   val STARSCHEMA_DETECTION = buildConf("spark.sql.cbo.starSchemaDetection")
     .doc("When true, it enables join reordering based on star schema 
detection. ")
-    .version("2.2.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -1677,7 +1509,6 @@ object SQLConf {
     .internal()
     .doc("Specifies the upper limit of the ratio between the largest fact 
tables" +
       " for a star join to be considered. ")
-    .version("2.2.0")
     .doubleConf
     .createWithDefault(0.9)
 
@@ -1691,7 +1522,6 @@ object SQLConf {
       "Zone offsets must be in the format '(+|-)HH:mm', for example '-08:00' 
or '+01:00'. " +
       "Also 'UTC' and 'Z' are supported as aliases of '+00:00'. Other short 
names are not " +
       "recommended to use because they can be ambiguous.")
-    .version("2.2.0")
     .stringConf
     .checkValue(isValidTimezone, s"Cannot resolve the given timezone with" +
       " ZoneId.of(_, ZoneId.SHORT_IDS)")
@@ -1701,7 +1531,6 @@ object SQLConf {
     buildConf("spark.sql.windowExec.buffer.in.memory.threshold")
       .internal()
       .doc("Threshold for number of rows guaranteed to be held in memory by 
the window operator")
-      .version("2.2.1")
       .intConf
       .createWithDefault(4096)
 
@@ -1709,7 +1538,6 @@ object SQLConf {
     buildConf("spark.sql.windowExec.buffer.spill.threshold")
       .internal()
       .doc("Threshold for number of rows to be spilled by window operator")
-      .version("2.2.0")
       .intConf
       
.createWithDefault(SHUFFLE_SPILL_NUM_ELEMENTS_FORCE_SPILL_THRESHOLD.defaultValue.get)
 
@@ -1718,7 +1546,6 @@ object SQLConf {
       .internal()
       .doc("Threshold for number of rows guaranteed to be held in memory by 
the sort merge " +
         "join operator")
-      .version("2.2.1")
       .intConf
       .createWithDefault(ByteArrayMethods.MAX_ROUNDED_ARRAY_LENGTH)
 
@@ -1726,7 +1553,6 @@ object SQLConf {
     buildConf("spark.sql.sortMergeJoinExec.buffer.spill.threshold")
       .internal()
       .doc("Threshold for number of rows to be spilled by sort merge join 
operator")
-      .version("2.2.0")
       .intConf
       
.createWithDefault(SHUFFLE_SPILL_NUM_ELEMENTS_FORCE_SPILL_THRESHOLD.defaultValue.get)
 
@@ -1735,7 +1561,6 @@ object SQLConf {
       .internal()
       .doc("Threshold for number of rows guaranteed to be held in memory by 
the cartesian " +
         "product operator")
-      .version("2.2.1")
       .intConf
       .createWithDefault(4096)
 
@@ -1743,14 +1568,12 @@ object SQLConf {
     buildConf("spark.sql.cartesianProductExec.buffer.spill.threshold")
       .internal()
       .doc("Threshold for number of rows to be spilled by cartesian product 
operator")
-      .version("2.2.0")
       .intConf
       
.createWithDefault(SHUFFLE_SPILL_NUM_ELEMENTS_FORCE_SPILL_THRESHOLD.defaultValue.get)
 
   val SUPPORT_QUOTED_REGEX_COLUMN_NAME = 
buildConf("spark.sql.parser.quotedRegexColumnNames")
     .doc("When true, quoted Identifiers (using backticks) in SELECT statement 
are interpreted" +
       " as regular expressions.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -1759,14 +1582,12 @@ object SQLConf {
       .internal()
       .doc("Number of points to sample per partition in order to determine the 
range boundaries" +
           " for range partitioning, typically used in global sorting (without 
limit).")
-      .version("2.3.0")
       .intConf
       .createWithDefault(100)
 
   val ARROW_EXECUTION_ENABLED =
     buildConf("spark.sql.execution.arrow.enabled")
       .doc("(Deprecated since Spark 3.0, please set 
'spark.sql.execution.arrow.pyspark.enabled'.)")
-      .version("2.3.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -1778,7 +1599,6 @@ object SQLConf {
         "2. pyspark.sql.SparkSession.createDataFrame when its input is a 
Pandas DataFrame " +
         "The following data types are unsupported: " +
         "BinaryType, MapType, ArrayType of TimestampType, and nested 
StructType.")
-      .version("3.0.0")
       .fallbackConf(ARROW_EXECUTION_ENABLED)
 
   val ARROW_SPARKR_EXECUTION_ENABLED =
@@ -1791,7 +1611,6 @@ object SQLConf {
         "4. gapply " +
         "The following data types are unsupported: " +
         "FloatType, BinaryType, ArrayType, StructType and MapType.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -1799,7 +1618,6 @@ object SQLConf {
     buildConf("spark.sql.execution.arrow.fallback.enabled")
       .doc("(Deprecated since Spark 3.0, please set " +
         "'spark.sql.execution.arrow.pyspark.fallback.enabled'.)")
-      .version("2.4.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -1807,14 +1625,12 @@ object SQLConf {
     buildConf("spark.sql.execution.arrow.pyspark.fallback.enabled")
       .doc(s"When true, optimizations enabled by 
'${ARROW_PYSPARK_EXECUTION_ENABLED.key}' will " +
         "fallback automatically to non-optimized implementations if an error 
occurs.")
-      .version("3.0.0")
       .fallbackConf(ARROW_FALLBACK_ENABLED)
 
   val ARROW_EXECUTION_MAX_RECORDS_PER_BATCH =
     buildConf("spark.sql.execution.arrow.maxRecordsPerBatch")
       .doc("When using Apache Arrow, limit the maximum number of records that 
can be written " +
         "to a single ArrowRecordBatch in memory. If set to zero or negative 
there is no limit.")
-      .version("2.3.0")
       .intConf
       .createWithDefault(10000)
 
@@ -1825,7 +1641,6 @@ object SQLConf {
         s"set, the fallback is `${BUFFER_SIZE.key}`. Note that Pandas 
execution requires more " +
         "than 4 bytes. Lowering this value could make small Pandas UDF batch 
iterated and " +
         "pipelined; however, it might degrade performance. See SPARK-27870.")
-      .version("3.0.0")
       .fallbackConf(BUFFER_SIZE)
 
   val PANDAS_GROUPED_MAP_ASSIGN_COLUMNS_BY_NAME =
@@ -1835,7 +1650,6 @@ object SQLConf {
         "to use position if not. When false, a grouped map Pandas UDF will 
assign columns from " +
         "the returned Pandas DataFrame based on position, regardless of column 
label type. " +
         "This configuration will be deprecated in future releases.")
-      .version("2.4.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -1846,7 +1660,6 @@ object SQLConf {
         "Pandas.Series to Arrow array during serialization. Arrow will raise 
errors " +
         "when detecting unsafe type conversion like overflow. When false, 
disabling Arrow's type " +
         "check and do type conversions anyway. This config only works for 
Arrow 0.11.0+.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -1860,7 +1673,6 @@ object SQLConf {
       " column names of the left node are distinct. If all the conditions are 
met, the" +
       " rule will replace the except operation with a Filter by flipping the 
filter" +
       " condition(s) of the right node.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -1871,7 +1683,6 @@ object SQLConf {
         "happens according to Hive behavior and SQL ANSI 2011 specification, 
ie. rounding the " +
         "decimal part of the result if an exact representation is not 
possible. Otherwise, NULL " +
         "is returned in those cases, as previously.")
-      .version("2.3.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -1881,7 +1692,6 @@ object SQLConf {
       .doc("When integral literal is used in decimal operations, pick a 
minimum precision " +
         "required by the literal if this config is true, to make the resulting 
precision and/or " +
         "scale smaller. This can reduce the possibility of precision lose 
and/or overflow.")
-      .version("2.3.3")
       .booleanConf
       .createWithDefault(true)
 
@@ -1891,7 +1701,6 @@ object SQLConf {
         "information. The values of options whose names that match this regex 
will be redacted " +
         "in the explain output. This redaction is applied on top of the global 
redaction " +
         s"configuration defined by ${SECRET_REDACTION_PATTERN.key}.")
-    .version("2.2.2")
     .regexConf
     .createWithDefault("(?i)url".r)
 
@@ -1901,20 +1710,17 @@ object SQLConf {
         "information. When this regex matches a string part, that string part 
is replaced by a " +
         "dummy value. This is currently used to redact the output of SQL 
explain commands. " +
         "When this conf is not set, the value from 
`spark.redaction.string.regex` is used.")
-      .version("2.3.0")
       .fallbackConf(org.apache.spark.internal.config.STRING_REDACTION_PATTERN)
 
   val CONCAT_BINARY_AS_STRING = 
buildConf("spark.sql.function.concatBinaryAsString")
     .doc("When this option is set to false and all inputs are binary, 
`functions.concat` returns " +
       "an output as binary. Otherwise, it returns as a string.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(false)
 
   val ELT_OUTPUT_AS_STRING = buildConf("spark.sql.function.eltOutputAsString")
     .doc("When this option is set to false and all inputs are binary, `elt` 
returns " +
       "an output as binary. Otherwise, it returns as a string.")
-    .version("2.3.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -1925,7 +1731,6 @@ object SQLConf {
         "user-specified schema. If the validation fails, a runtime exception 
is thrown. " +
         "When this option is set to false, the partition column value will be 
converted to null " +
         "if it can not be casted to corresponding user-specified schema.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -1933,7 +1738,6 @@ object SQLConf {
     buildConf("spark.sql.streaming.continuous.epochBacklogQueueSize")
       .doc("The max number of entries to be stored in queue to wait for late 
epochs. " +
         "If this parameter is exceeded by the size of the queue, stream will 
stop with an error.")
-      .version("3.0.0")
       .intConf
       .createWithDefault(10000)
 
@@ -1942,7 +1746,6 @@ object SQLConf {
     .internal()
     .doc("The size (measured in number of rows) of the queue used in 
continuous execution to" +
       " buffer the results of a ContinuousDataReader.")
-    .version("2.3.0")
     .intConf
     .createWithDefault(1024)
 
@@ -1951,7 +1754,6 @@ object SQLConf {
       .internal()
       .doc("The interval at which continuous execution readers will poll to 
check whether" +
         " the epoch has advanced on the driver.")
-      .version("2.3.0")
       .timeConf(TimeUnit.MILLISECONDS)
       .createWithDefault(100)
 
@@ -1960,14 +1762,12 @@ object SQLConf {
     .doc("A comma-separated list of data source short names or fully qualified 
data source " +
       "implementation class names for which Data Source V2 code path is 
disabled. These data " +
       "sources will fallback to Data Source V1 code path.")
-    .version("3.0.0")
     .stringConf
     .createWithDefault("avro,csv,json,kafka,orc,parquet,text")
 
   val DISABLED_V2_STREAMING_WRITERS = 
buildConf("spark.sql.streaming.disabledV2Writers")
     .doc("A comma-separated list of fully qualified data source register class 
names for which" +
       " StreamWriteSupport is disabled. Writes to these sources will fall back 
to the V1 Sinks.")
-    .version("2.3.1")
     .stringConf
     .createWithDefault("")
 
@@ -1978,7 +1778,6 @@ object SQLConf {
         "A comma-separated list of fully qualified data source register class 
names for which " +
           "MicroBatchReadSupport is disabled. Reads from these sources will 
fall back to the " +
           "V1 Sources.")
-      .version("2.4.0")
       .stringConf
       .createWithDefault("")
 
@@ -1999,7 +1798,6 @@ object SQLConf {
         "(which takes precedence over this setting), e.g. " +
         "dataframe.write.option(\"partitionOverwriteMode\", 
\"dynamic\").save(path)."
       )
-      .version("2.3.0")
       .stringConf
       .transform(_.toUpperCase(Locale.ROOT))
       .checkValues(PartitionOverwriteMode.values.map(_.toString))
@@ -2024,7 +1822,6 @@ object SQLConf {
         "in type coercion, e.g. converting `double` to `int` or `decimal` to 
`double` is " +
         "not allowed."
       )
-      .version("3.0.0")
       .stringConf
       .transform(_.toUpperCase(Locale.ROOT))
       .checkValues(StoreAssignmentPolicy.values.map(_.toString))
@@ -2035,7 +1832,6 @@ object SQLConf {
       "throw a runtime exception if an overflow occurs in any operation on 
integral/decimal " +
       "field. 2. Spark will forbid using the reserved keywords of ANSI SQL as 
identifiers in " +
       "the SQL parser.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -2048,7 +1844,6 @@ object SQLConf {
         "issues. Turn on this config to insert a local sort before actually 
doing repartition " +
         "to generate consistent repartition results. The performance of 
repartition() may go " +
         "down since we insert extra local sort before it.")
-        .version("2.1.4")
         .booleanConf
         .createWithDefault(true)
 
@@ -2059,7 +1854,6 @@ object SQLConf {
         "satisfying a query. This optimization allows columnar file format 
readers to avoid " +
         "reading unnecessary nested column data. Currently Parquet and ORC are 
the " +
         "data sources that implement this optimization.")
-      .version("2.4.1")
       .booleanConf
       .createWithDefault(true)
 
@@ -2070,7 +1864,6 @@ object SQLConf {
         "containing `dots` to data sources. Currently, Parquet implements both 
optimizations " +
         "while ORC only supports predicates for names containing `dots`. The 
other data sources" +
         "don't support this feature yet.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -2080,7 +1873,6 @@ object SQLConf {
       .doc("Prune nested fields from object serialization operator which are 
unnecessary in " +
         "satisfying a query. This optimization allows object serializers to 
avoid " +
         "executing unnecessary nested expressions.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -2091,7 +1883,6 @@ object SQLConf {
         "satisfying a query. Note that this optimization doesn't prune nested 
fields from " +
         "physical data source scanning. For pruning nested fields from 
scanning, please use " +
         "`spark.sql.optimizer.nestedSchemaPruning.enabled` config.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -2101,7 +1892,6 @@ object SQLConf {
       .doc("In SQL queries with a SORT followed by a LIMIT like " +
           "'SELECT x FROM t ORDER BY y LIMIT m', if m is under this threshold, 
do a top-K sort" +
           " in memory, otherwise do a global sort which spills to disk if 
necessary.")
-      .version("2.4.0")
       .intConf
       .createWithDefault(ByteArrayMethods.MAX_ROUNDED_ARRAY_LENGTH)
 
@@ -2117,7 +1907,6 @@ object SQLConf {
     .internal()
     .doc("If it is set to true, column names of the requested schema are 
passed to CSV parser. " +
       "Other column values can be ignored during parsing even if they are 
malformed.")
-    .version("2.4.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -2128,7 +1917,6 @@ object SQLConf {
       "Jupyter, the HTML table (generated by _repr_html_) will be returned. 
For plain Python " +
       "REPL, the returned outputs are formatted like dataframe.show(). In 
SparkR, the returned " +
       "outputs are showed similar to R data.frame would.")
-    .version("2.4.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -2137,14 +1925,12 @@ object SQLConf {
       s"effect when ${REPL_EAGER_EVAL_ENABLED.key} is set to true. The valid 
range of this " +
       "config is from 0 to (Int.MaxValue - 1), so the invalid config like 
negative and " +
       "greater than (Int.MaxValue - 1) will be normalized to 0 and 
(Int.MaxValue - 1).")
-    .version("2.4.0")
     .intConf
     .createWithDefault(20)
 
   val REPL_EAGER_EVAL_TRUNCATE = buildConf("spark.sql.repl.eagerEval.truncate")
     .doc("The max number of characters for each cell that is returned by eager 
evaluation. " +
       s"This only takes effect when ${REPL_EAGER_EVAL_ENABLED.key} is set to 
true.")
-    .version("2.4.0")
     .intConf
     .createWithDefault(20)
 
@@ -2155,7 +1941,6 @@ object SQLConf {
         "by the fast hash aggregate product operator. The bit is not for 
actual value, " +
         "but the actual numBuckets is determined by loadFactor " +
         "(e.g: default bit value 16 , the actual numBuckets is ((1 << 16) / 
0.5).")
-      .version("2.4.0")
       .intConf
       .checkValue(bit => bit >= 10 && bit <= 30, "The bit value must be in 
[10, 30].")
       .createWithDefault(16)
@@ -2163,7 +1948,6 @@ object SQLConf {
   val AVRO_COMPRESSION_CODEC = buildConf("spark.sql.avro.compression.codec")
     .doc("Compression codec used in writing of AVRO files. Supported codecs: " 
+
       "uncompressed, deflate, snappy, bzip2 and xz. Default codec is snappy.")
-    .version("2.4.0")
     .stringConf
     .checkValues(Set("uncompressed", "deflate", "snappy", "bzip2", "xz"))
     .createWithDefault("snappy")
@@ -2172,7 +1956,6 @@ object SQLConf {
     .doc("Compression level for the deflate codec used in writing of AVRO 
files. " +
       "Valid value must be in the range of from 1 to 9 inclusive or -1. " +
       "The default value is -1 which corresponds to 6 level in the current 
implementation.")
-    .version("2.4.0")
     .intConf
     .checkValues((1 to 9).toSet + Deflater.DEFAULT_COMPRESSION)
     .createWithDefault(Deflater.DEFAULT_COMPRESSION)
@@ -2181,7 +1964,6 @@ object SQLConf {
     .internal()
     .doc(s"If it is set to false, or ${ANSI_ENABLED.key} is true, then size of 
null returns " +
       "null. Otherwise, it returns -1, which was inherited from Hive.")
-    .version("2.4.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -2190,7 +1972,6 @@ object SQLConf {
       .internal()
       .doc("If it is set to true, the data source provider 
com.databricks.spark.avro is mapped " +
         "to the built-in but external Avro data source module for backward 
compatibility.")
-      .version("2.4.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -2201,7 +1982,6 @@ object SQLConf {
         "set operations are performed from left to right as they appear in the 
query. When set " +
         "to false and order of evaluation is not specified by parentheses, 
INTERSECT operations " +
         "are performed before any UNION, EXCEPT and MINUS operations.")
-      .version("2.4.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2210,7 +1990,6 @@ object SQLConf {
       .internal()
       .doc("When set to true, a literal with an exponent (e.g. 1E-30) would be 
parsed " +
         "as Decimal rather than Double.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2220,7 +1999,6 @@ object SQLConf {
       .doc("When set to true, negative scale of Decimal type is allowed. For 
example, " +
         "the type of number 1E10BD under legacy mode is DecimalType(2, -9), 
but is " +
         "Decimal(11, 0) in non legacy mode.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2229,7 +2007,6 @@ object SQLConf {
       .internal()
       .doc("When set to true, CREATE TABLE syntax without a provider will use 
hive " +
         s"instead of the value of ${DEFAULT_DATA_SOURCE_NAME.key}.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2238,16 +2015,14 @@ object SQLConf {
       .internal()
       .doc("When true, the bucketed table scan will list files during planning 
to figure out the " +
         "output ordering, which is expensive and may make the planning quite 
slow.")
-      .version("3.0.0")
-      .booleanConf
-      .createWithDefault(false)
+    .booleanConf
+    .createWithDefault(false)
 
   val LEGACY_HAVING_WITHOUT_GROUP_BY_AS_WHERE =
     buildConf("spark.sql.legacy.parser.havingWithoutGroupByAsWhere")
       .internal()
       .doc("If it is set to true, the parser will treat HAVING without GROUP 
BY as a normal " +
         "WHERE, which does not follow SQL standard.")
-      .version("2.4.1")
       .booleanConf
       .createWithDefault(false)
 
@@ -2255,8 +2030,7 @@ object SQLConf {
     buildConf("spark.sql.legacy.json.allowEmptyString.enabled")
       .internal()
       .doc("When set to true, the parser of JSON data source treats empty 
strings as null for " +
-        "some data types such as `IntegerType`.")
-      .version("3.0.0")
+      "some data types such as `IntegerType`.")
       .booleanConf
       .createWithDefault(false)
 
@@ -2266,7 +2040,6 @@ object SQLConf {
       .doc("When set to true, Spark returns an empty collection with 
`StringType` as element " +
         "type if the `array`/`map` function is called without any parameters. 
Otherwise, Spark " +
         "returns an empty collection with `NullType` as element type.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2275,7 +2048,6 @@ object SQLConf {
       .internal()
       .doc("When set to true, user is allowed to use 
org.apache.spark.sql.functions." +
         "udf(f: AnyRef, dataType: DataType). Otherwise, an exception will be 
thrown at runtime.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2284,7 +2056,6 @@ object SQLConf {
       .internal()
       .doc("When set to true, TRUNCATE TABLE command will not try to set back 
original " +
         "permission and ACLs when re-creating the table/partition paths.")
-      .version("2.4.6")
       .booleanConf
       .createWithDefault(false)
 
@@ -2294,7 +2065,6 @@ object SQLConf {
       .doc("When set to true, the key attribute resulted from running 
`Dataset.groupByKey` " +
         "for non-struct key type, will be named as `value`, following the 
behavior of Spark " +
         "version 2.4 and earlier.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2302,7 +2072,6 @@ object SQLConf {
     .doc("Maximum number of fields of sequence-like entries can be converted 
to strings " +
       "in debug output. Any elements beyond the limit will be dropped and 
replaced by a" +
       """ "... N more fields" placeholder.""")
-    .version("3.0.0")
     .intConf
     .createWithDefault(25)
 
@@ -2311,7 +2080,6 @@ object SQLConf {
       "longer, further output will be truncated.  The default setting always 
generates a full " +
       "plan.  Set this to a lower value such as 8k if plan strings are taking 
up too much " +
       "memory or are causing OutOfMemory errors in the driver or UI 
processes.")
-    .version("3.0.0")
     .bytesConf(ByteUnit.BYTE)
     .checkValue(i => i >= 0 && i <= ByteArrayMethods.MAX_ROUNDED_ARRAY_LENGTH, 
"Invalid " +
       "value for 'spark.sql.maxPlanStringLength'.  Length must be a valid 
string length " +
@@ -2323,7 +2091,6 @@ object SQLConf {
       .internal()
       .doc("If it is set to true, SET command will fail when the key is 
registered as " +
         "a SparkConf entry.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -2332,7 +2099,6 @@ object SQLConf {
       "java.time.LocalDate classes of Java 8 API are used as external types 
for " +
       "Catalyst's TimestampType and DateType. If it is set to false, 
java.sql.Timestamp " +
       "and java.sql.Date are used for the same purpose.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -2340,7 +2106,6 @@ object SQLConf {
     .doc("The max length of a file that can be read by the binary file data 
source. " +
       "Spark will fail fast and not attempt to read the file if its length 
exceeds this value. " +
       "The theoretical max is Int.MaxValue, though VMs might implement a 
smaller max.")
-    .version("3.0.0")
     .internal()
     .intConf
     .createWithDefault(Int.MaxValue)
@@ -2350,14 +2115,12 @@ object SQLConf {
       .internal()
       .doc("If it is set to true, date/timestamp will cast to string in binary 
comparisons " +
         "with String")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
   val DEFAULT_CATALOG = buildConf("spark.sql.defaultCatalog")
     .doc("Name of the default catalog. This will be the current catalog if 
users have not " +
       "explicitly set the current catalog yet.")
-    .version("3.0.0")
     .stringConf
     .createWithDefault(SESSION_CATALOG_NAME)
 
@@ -2369,7 +2132,6 @@ object SQLConf {
         s"be loaded by the $SESSION_CATALOG_NAME, this catalog must also 
return the table " +
         s"metadata. To delegate operations to the $SESSION_CATALOG_NAME, 
implementations can " +
         "extend 'CatalogExtension'.")
-      .version("3.0.0")
       .stringConf
       .createOptional
 
@@ -2382,7 +2144,6 @@ object SQLConf {
       "MapFromEntries, StringToMap, MapConcat and TransformKeys. When 
EXCEPTION, the query " +
       "fails if duplicated map keys are detected. When LAST_WIN, the map key 
that is inserted " +
       "at last takes precedence.")
-    .version("3.0.0")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValues(MapKeyDedupPolicy.values.map(_.toString))
@@ -2391,7 +2152,6 @@ object SQLConf {
   val LEGACY_LOOSE_UPCAST = buildConf("spark.sql.legacy.doLooseUpcast")
     .internal()
     .doc("When true, the upcast will be loose and allows string to atomic 
types.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -2405,7 +2165,6 @@ object SQLConf {
       "CORRECTED, inner CTE definitions take precedence. The default value is 
EXCEPTION, " +
       "AnalysisException is thrown while name conflict is detected in nested 
CTE. This config " +
       "will be removed in future versions and CORRECTED will be the only 
behavior.")
-    .version("3.0.0")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValues(LegacyBehaviorPolicy.values.map(_.toString))
@@ -2418,7 +2177,6 @@ object SQLConf {
       "When set to CORRECTED, classes from java.time.* packages are used for 
the same purpose. " +
       "The default value is EXCEPTION, RuntimeException is thrown when we will 
get different " +
       "results.")
-    .version("3.0.0")
     .stringConf
     .transform(_.toUpperCase(Locale.ROOT))
     .checkValues(LegacyBehaviorPolicy.values.map(_.toString))
@@ -2428,7 +2186,6 @@ object SQLConf {
     buildConf("spark.sql.legacy.followThreeValuedLogicInArrayExists")
       .internal()
       .doc("When true, the ArrayExists will follow the three-valued boolean 
logic.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(true)
 
@@ -2437,7 +2194,6 @@ object SQLConf {
       .doc("A comma-delimited string config of the optional additional remote 
Maven mirror " +
         "repositories. This is only used for downloading Hive jars in 
IsolatedClientLoader " +
         "if the default Maven Central repo is unreachable.")
-      .version("3.0.0")
       .stringConf
       .createWithDefault(
         "https://maven-central.storage-download.googleapis.com/maven2/";)
@@ -2450,7 +2206,6 @@ object SQLConf {
         "all interval units out of the specified range. If it is set to 
`false`, " +
         "`ParseException` is thrown if the input does not match to the pattern 
" +
         "defined by `from` and `to`.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2460,7 +2215,6 @@ object SQLConf {
       .doc("When true, all database and table properties are not reserved and 
available for " +
         "create/alter syntaxes. But please be aware that the reserved 
properties will be " +
         "silently removed.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2469,7 +2223,6 @@ object SQLConf {
       .internal()
       .doc("When true, only a single file can be added using ADD FILE. If 
false, then users " +
         "can add directory by passing directory path to ADD FILE.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2477,13 +2230,11 @@ object SQLConf {
     buildConf("spark.sql.legacy.mssqlserver.numericMapping.enabled")
       .internal()
       .doc("When true, use legacy MySqlServer SMALLINT and REAL type mapping.")
-      .version("2.4.5")
       .booleanConf
       .createWithDefault(false)
 
   val CSV_FILTER_PUSHDOWN_ENABLED = 
buildConf("spark.sql.csv.filterPushdown.enabled")
     .doc("When true, enable filter pushdown to CSV datasource.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(true)
 
@@ -2493,7 +2244,6 @@ object SQLConf {
       .doc("The number of partitions to be handled in one turn when use " +
         "`AlterTableAddPartitionCommand` to add partitions into table. The 
smaller " +
         "batch size is, the less memory is required for the real handler, e.g. 
Hive Metastore.")
-      .version("3.0.0")
       .intConf
       .checkValue(_ > 0, "The value of spark.sql.addPartitionInBatch.size must 
be positive")
       .createWithDefault(100)
@@ -2501,7 +2251,6 @@ object SQLConf {
   val LEGACY_ALLOW_HASH_ON_MAPTYPE = 
buildConf("spark.sql.legacy.allowHashOnMapType")
     .doc("When set to true, hash expressions can be applied on elements of 
MapType. Otherwise, " +
       "an analysis exception will be thrown.")
-    .version("3.0.0")
     .booleanConf
     .createWithDefault(false)
 
@@ -2514,7 +2263,6 @@ object SQLConf {
         "a local date/timestamp in the source calendar, interpreting the 
resulted date/" +
         "timestamp in the target calendar, and getting the number of 
micros/millis/days " +
         "since the epoch 1970-01-01 00:00:00Z.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2527,7 +2275,6 @@ object SQLConf {
         "a local date/timestamp in the source calendar, interpreting the 
resulted date/" +
         "timestamp in the target calendar, and getting the number of 
micros/millis/days " +
         "since the epoch 1970-01-01 00:00:00Z.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2540,7 +2287,6 @@ object SQLConf {
         "a local date/timestamp in the source calendar, interpreting the 
resulted date/" +
         "timestamp in the target calendar, and getting the number of 
micros/millis/days " +
         "since the epoch 1970-01-01 00:00:00Z.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 
@@ -2553,7 +2299,6 @@ object SQLConf {
         "a local date/timestamp in the source calendar, interpreting the 
resulted date/" +
         "timestamp in the target calendar, and getting the number of 
micros/millis/days " +
         "since the epoch 1970-01-01 00:00:00Z.")
-      .version("3.0.0")
       .booleanConf
       .createWithDefault(false)
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to