Skip to content

Commit b8e5bb6

Browse files
Vinod K Cmarmbrus
authored andcommitted
[SPARK-8628] [SQL] Race condition in AbstractSparkSQLParser.parse
Made lexical iniatialization as lazy val Author: Vinod K C <vinod.kc@huawei.com> Closes apache#7015 from vinodkc/handle_lexical_initialize_schronization and squashes the following commits: b6d1c74 [Vinod K C] Avoided repeated lexical initialization 5863cf7 [Vinod K C] Removed space e27c66c [Vinod K C] Avoid reinitialization of lexical in parse method ef4f60f [Vinod K C] Reverted import order e9fc49a [Vinod K C] handle synchronization in SqlLexical.initialize
1 parent c1befd7 commit b8e5bb6

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/AbstractSparkSQLParser.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ package org.apache.spark.sql.catalyst
2020
import scala.language.implicitConversions
2121
import scala.util.parsing.combinator.lexical.StdLexical
2222
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
23-
import scala.util.parsing.combinator.{PackratParsers, RegexParsers}
23+
import scala.util.parsing.combinator.PackratParsers
2424
import scala.util.parsing.input.CharArrayReader.EofCh
2525

2626
import org.apache.spark.sql.catalyst.plans.logical._
@@ -30,12 +30,14 @@ private[sql] abstract class AbstractSparkSQLParser
3030

3131
def parse(input: String): LogicalPlan = {
3232
// Initialize the Keywords.
33-
lexical.initialize(reservedWords)
33+
initLexical
3434
phrase(start)(new lexical.Scanner(input)) match {
3535
case Success(plan, _) => plan
3636
case failureOrError => sys.error(failureOrError.toString)
3737
}
3838
}
39+
/* One time initialization of lexical.This avoid reinitialization of lexical in parse method */
40+
protected lazy val initLexical: Unit = lexical.initialize(reservedWords)
3941

4042
protected case class Keyword(str: String) {
4143
def normalize: String = lexical.normalizeKeyword(str)

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class SqlParser extends AbstractSparkSQLParser with DataTypeParser {
4040

4141
def parseExpression(input: String): Expression = {
4242
// Initialize the Keywords.
43-
lexical.initialize(reservedWords)
43+
initLexical
4444
phrase(projection)(new lexical.Scanner(input)) match {
4545
case Success(plan, _) => plan
4646
case failureOrError => sys.error(failureOrError.toString)

0 commit comments

Comments
 (0)