Парсер запросов 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.