Skip to content

Commit 80b0fe2

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 <[email protected]> Closes #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 (cherry picked from commit b8e5bb6) Signed-off-by: Michael Armbrust <[email protected]>
1 parent f9cd5cc commit 80b0fe2

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
@@ -39,7 +39,7 @@ class SqlParser extends AbstractSparkSQLParser with DataTypeParser {
3939

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

0 commit comments

Comments
 (0)