0

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

在这里,问题是查询解析器不允许某些没有双引号的查询。在某些情况下,如上述,它不需要引号来正确执行。任何人都可以对为什么会这样提出一些见解吗?

4

1 回答 1

1

我怀疑原因是区分大小写。假设 Calcite 处于其默认词法模式,如果您删除标识符周围的引号,Calcite 将在尝试查找具有这些名称的表和列之前将它们转换为大写。你说它不带引号也能工作,所以我假设你的模式、表和列都是大写的(SAKILA、ACTOR、FIRST_NAME)。

您可以通过将 caseSensitive=false 作为 Calcite JDBC 连接字符串的一部分来要求 Calcite 不区分大小写。

于 2016-02-10T03:15:41.447 回答