Парсер запросов Apache Calcite - неожиданные двойные кавычки символов

Я использую Apache Calcite выполнять запросы к разным источникам данных. Файл модели, который я использую

inline: {
  version: '1.0',
  defaultSchema: 'sakila',
  schemas: [
    {
      name: 'sakila',
      type: 'custom',
      factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
      operand: {
        jdbcDriver: 'org.postgresql.Driver',
        jdbcUrl: 'jdbc:postgresql://localhost:5432/sakila',
        jdbcUser: 'postgres',
        jdbcPassword: 'postgres'
      }
    }
  ]
}

И запрос

select 
    "sakila"."actor"."first_name" as "actor_first_name" 
from
    "sakila"."actor"

Приведенный выше запрос не работает из-за двойных кавычек, применяемых для таблиц и столбцов. Итак, мне пришлось удалить кавычки и следующий запрос работает нормально.

select 
    sakila.actor.first_name as actor_first_name 
from
    sakila.actor

Здесь вопрос в том, что парсер запросов не разрешает некоторые запросы, если они не имеют двойных кавычек. А в некоторых случаях, как указано выше, кавычки не требуются для правильного выполнения. Кто-нибудь может подсказать почему именно так?

1 ответ

Решение

Я подозреваю, что причина в чувствительности к регистру. Предполагая, что Calcite находится в его лексическом режиме по умолчанию, если вы удалите кавычки вокруг идентификаторов, Calcite преобразует их в верхний регистр, прежде чем пытаться найти таблицы и столбцы с этими именами. Вы говорите, что он работает без кавычек, поэтому я предполагаю, что ваша схема, таблица и столбец имеют верхний регистр (SAKILA, ACTOR, FIRST_NAME).

Вы можете попросить Calcite не учитывать регистр, передав caseSensitive=false как часть строки соединения JDBC Calcite.

Другие вопросы по тегам