JSqlParser выдаст исключение, когда функция udf не определена - PullRequest
0 голосов
/ 09 октября 2018

Я использую JSqlParser, чтобы сделать простую модификацию имени таблицы, но она выдаст исключение, когда я использую некоторые udf-функции в выражениях.Как заставить его игнорировать проверку функции?

def replaceTableName(sql: String) = {
  val select = CCJSqlParserUtil.parse(sql).asInstanceOf[Select]

  val buffer = new java.lang.StringBuilder()
  val expressionDeParser = new ExpressionDeParser() {
    override def visit(tableColumn: Column) = {
      if (tableColumn.getTable.getName != null && tmpTables.contains(resolveName(tableColumn.getTable.getName))) {
        tableColumn.getTable().setName(resolveName(tableColumn.getTable().getName()))
      }
      super.visit(tableColumn)
    }

  }
  val deparser = new SelectDeParser(expressionDeParser, buffer) {
    override def visit(tableName: Table) {
      if(tmpTables.contains(resolveName(tableName.getName)))
        tableName.setName(resolveName(tableName.getName()))
      super.visit(tableName)
    }
  }
  expressionDeParser.setSelectVisitor(deparser)
  expressionDeParser.setBuffer(buffer)
  select.getSelectBody().accept(deparser)
  buffer.toString
}

Этот код будет выдавать

Причина: net.sf.jsqlparser.parser.ParseException: Обнаружен неожиданный токен: «current_date» <K_TIME_KEY_EXPR> в строке 1, столбецxx

Если мой ввод select * from table where date = sub_date(current_date('yyyyMMdd'),'1','yyyyMMdd');
sub_date и current_date - мои udfs для получения вчерашней даты.

...