Java Util SQL Parser выдает исключение для правильного оператора - PullRequest
0 голосов
/ 07 сентября 2018

Мое утверждение

new_call.cdctype=goal.cdctype

Когда я вызываю метод CCJSqlParser.SQLCondition () для этого, я получаю исключение, говорящее

Encountered " "=" "= "" at line 1, column 17.
Was expecting one of:
    "NOT" ...
    "LIKE" ...
    "ILIKE" ...
    "NOT" ...
    "NOT" ...

Любое понимание того, почему это происходит? Я проверяю условия соединения и думаю, что это подходящее выражение для условия соединения.

Код:

String sql = "new_call.cdctype=goal.cdctype";
CCJSqlParser parser = new CCJSqlParser(new StringReader(sql));
    String errorMsg=null;
    try {
        parser.SQLCondition();
    } catch (ParseException e) {
        errorMsg=e.getMessage();
    }
    return errorMsg;

1 Ответ

0 голосов
/ 10 сентября 2018

Если вы углубитесь в грамматику JSqlParsers , вы обнаружите, что SQLCondition - это только одно из:

  • в
  • между
  • isnull
  • существует
  • как выражение.

Вы указали так называемое RegularCondition .

Вот два метода для анализа вашего состояния:

//Shortcut
Expression parseCondExpression = CCJSqlParserUtil.parseCondExpression("new_call.cdctype=goal.cdctype");
System.out.println(parseCondExpression);

//from issue
String sql = "new_call.cdctype=goal.cdctype";
CCJSqlParser parser = new CCJSqlParser(new StringProvider(sql));
try {
    parser.RegularCondition();
} catch (ParseException e) {
    e.printStackTrace();
}

Кстати, я использую JSqlParser V1.2. Ваша версия выглядит немного старше, потому что параметр конструктора парсера теперь Provider .

...