def parse()

in DataProcessing/datax-host/src/main/scala/datax/sql/TransformSqlParser.scala [27:95]


  def parse(lines: Seq[String]):ParsedResult = {
    val commands = new ListBuffer[SqlCommand]
    val viewReferenceCounts = new mutable.HashMap[String, Int]
    val statementBuffer = new ListBuffer[String]

    def appendTable(name: String) = {
      val sql = combineLines(statementBuffer)
      commands.append(buildSqlCommand(sql, name))

      if(name!=null && !name.isEmpty) {
        if (viewReferenceCounts.contains(name)) throw new EngineException(s"dataset name '$name' has been created, please check the query to make sure it is not created again")

        viewReferenceCounts(name) = 0

        viewReferenceCounts.keys.foreach(k => {
          if(s"\\b$k\\b".r.findFirstMatchIn(sql).isDefined){
            viewReferenceCounts(k) += 1
          }
        })
      }
    }

    var tableName:String = null
    var lineNumber = 1
    lines.foreach(line => {
      if(line.trim().isEmpty) {
        // skipped
      }
      else if(line.matches(ProductConstant.ProductQuery)){
        if(statementBuffer.size==0){
          // skipped
        }
        else{
          appendTable(tableName)
        }

        tableName = null
        statementBuffer.clear()
      }
      else{
        "^\\s*--".r.findFirstMatchIn(line) match {
          case Some(m) =>
          //skipped
          case None =>
            if(statementBuffer.length==0){
              "^\\s*([a-zA-Z0-9_]+)\\s*=(.*)$".r.findFirstMatchIn(line) match {
                case Some(m) =>
                  tableName = m.group(1)
                  statementBuffer += m.group(2).trim
                case None =>
                  statementBuffer+=line.trim
              }
            }
            else
              statementBuffer+=line.trim
        }
      }

      lineNumber+=1
    })

    if(tableName!=null && statementBuffer.size>0){
      appendTable(tableName)
      tableName = null
      statementBuffer.clear()
    }

    ParsedResult(commands, viewReferenceCounts.toMap)
  }