You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Zhuang (Jira)" <ji...@apache.org> on 2019/10/25 13:27:00 UTC
[jira] [Created] (CALCITE-3449) Modify sql will have sub schema in
it's table name
Zhuang created CALCITE-3449:
-------------------------------
Summary: Modify sql will have sub schema in it's table name
Key: CALCITE-3449
URL: https://issues.apache.org/jira/browse/CALCITE-3449
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.21.0
Reporter: Zhuang
When sending queries to target databse, sub schemas should be removed from the sql, but not for modify statement(update\delete\insert). For example,
{quote}delete from "sub_schema".target_table where ...
{quote}
will send following sql to target database
{quote}delete from {color:#ff0000}"sub_schema"{color}.target_table where ...
{quote}
But select quries worked as expect.
{quote}select * from "sub_schema".target_table
{quote}
will be translated into following and send to target databse.
{quote}select * from target_table
{quote}
I've done some inspect, and find that the code are different. In org.apache.calcite.rel.rel2sql.RelToSqlConverter.java, the table names have sub schemas in it.
{code:title=RelToSqlConverter.java|borderStyle=solid}public Result visit(TableModify modify) {
final Map<String, RelDataType> pairs = ImmutableMap.of();
final Context context = aliasContext(pairs, false);
// Target Table Name
final SqlIdentifier sqlTargetTable =
new SqlIdentifier(modify.getTable().getQualifiedName(), POS);
{code}
But in select query , the table name are just table name, without sub schema.
{code:title=Bar.java|borderStyle=solid}
public Result visit(TableScan e) {
final SqlIdentifier identifier;
final JdbcTable jdbcTable = e.getTable().unwrap(JdbcTable.class);
if (jdbcTable != null) {
// Use the foreign catalog, schema and table names, if they exist,
// rather than the qualified name of the shadow table in Calcite.
identifier = jdbcTable.tableName();
} else {
final List<String> qualifiedName = e.getTable().getQualifiedName();
identifier = new SqlIdentifier(qualifiedName, SqlParserPos.ZERO);
}
{code}
I'm really new to Caicite and commit issues, thanks!
--
This message was sent by Atlassian Jira
(v8.3.4#803005)