All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.mlsql.dsl.adaptor.SelectGrammarAdaptor.scala Maven / Gradle / Ivy

The newest version!
package tech.mlsql.dsl.adaptor

import org.antlr.v4.runtime.misc.Interval
import streaming.dsl.DslAdaptor
import streaming.dsl.parser.{DSLSQLLexer, DSLSQLParser}
import streaming.dsl.template.TemplateMerge
import tech.mlsql.dsl.processor.GrammarProcessListener

/**
  * 2019-04-12 WilliamZhu([email protected])
  */
class SelectGrammarAdaptor(grammarProcessListener: GrammarProcessListener) extends DslAdaptor {
  override def parse(ctx: DSLSQLParser.SqlContext): Unit = {
    val input = ctx.start.getTokenSource().asInstanceOf[DSLSQLLexer]._input

    val start = ctx.start.getStartIndex()
    val stop = ctx.stop.getStopIndex()
    val interval = new Interval(start, stop)
    val originalText = input.getText(interval)

    val wowText = TemplateMerge.merge(originalText, grammarProcessListener.sqel.env().toMap)

    val chunks = wowText.split("\\s+")
    val tableName = chunks.last.replace(";", "")
    val sql = wowText.replaceAll(s"((?i)as)[\\s|\\n]+${tableName}", "")
    val spark = grammarProcessListener.sqel.sparkSession
    val parser = spark.sessionState.sqlParser
    parser.parsePlan(sql)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy