You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Evgeny Stanilovsky (Jira)" <ji...@apache.org> on 2023/03/27 15:09:00 UTC
[jira] [Updated] (IGNITE-19106) Sql. Column namings are partially broken after upgrading to calcite 1.34
[ https://issues.apache.org/jira/browse/IGNITE-19106?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Evgeny Stanilovsky updated IGNITE-19106:
----------------------------------------
Description:
After upgrading to calcite 1.34 SqlValidator#deriveAlias and overloading call IgniteSqlValidator#deriveAlias is changed, thus requests like :
select v / 2 from t, return EXPR$ instead of column name derived from IgniteSqlValidator#deriveAlias. Fast (near) fix looks like cover both such queries:
IgnitePlanner#validateAndGetTypeMetadata ->
{noformat}
public ValidationResult validateAndGetTypeMetadata(SqlNode sqlNode) {
SqlNode validatedNode = validator().validate(sqlNode);
RelDataType type = validator().getValidatedNodeType(validatedNode);
List<List<String>> origins = validator().getFieldOrigins(validatedNode);
List<String> derived = Collections.emptyList();
if (sqlNode instanceof SqlSelect) {
SelectScope list = validator().getRawSelectScope((SqlSelect) sqlNode);
assert type.getFieldList().size() == list.getExpandedSelectList().size();
int cnt = 0;
derived = new ArrayList<>(list.getExpandedSelectList().size());
for (SqlNode node : list.getExpandedSelectList()) {
derived.add(validator().deriveAlias(node, cnt++));
}
}
return new ValidationResult(validatedNode, type, origins, derived);
}
{noformat}
and use this derived instead of aliases here:
PrepareServiceImpl#resultSetMetadata
*Be careful !* .net and cpp tests are involved too, check all issue number occurrences.
was:
After upgrading to calcite 1.34 SqlValidator#deriveAlias and overloading call IgniteSqlValidator#deriveAlias is changed, thus requests like :
select v / 2 from t, return EXPR$ instead of column name derived from IgniteSqlValidator#deriveAlias. Fast (near) fix looks like cover both such queries:
IgnitePlanner#validateAndGetTypeMetadata ->
{noformat}
public ValidationResult validateAndGetTypeMetadata(SqlNode sqlNode) {
SqlNode validatedNode = validator().validate(sqlNode);
RelDataType type = validator().getValidatedNodeType(validatedNode);
List<List<String>> origins = validator().getFieldOrigins(validatedNode);
List<String> derived = Collections.emptyList();
if (sqlNode instanceof SqlSelect) {
SelectScope list = validator().getRawSelectScope((SqlSelect) sqlNode);
assert type.getFieldList().size() == list.getExpandedSelectList().size();
int cnt = 0;
derived = new ArrayList<>(list.getExpandedSelectList().size());
for (SqlNode node : list.getExpandedSelectList()) {
derived.add(validator().deriveAlias(node, cnt++));
}
}
return new ValidationResult(validatedNode, type, origins, derived);
}
{noformat}
and use this derived instead of aliases here:
PrepareServiceImpl#resultSetMetadata
> Sql. Column namings are partially broken after upgrading to calcite 1.34
> ------------------------------------------------------------------------
>
> Key: IGNITE-19106
> URL: https://issues.apache.org/jira/browse/IGNITE-19106
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Affects Versions: 3.0.0-beta1
> Reporter: Evgeny Stanilovsky
> Priority: Major
> Labels: calcite3-required, ignite-3
>
> After upgrading to calcite 1.34 SqlValidator#deriveAlias and overloading call IgniteSqlValidator#deriveAlias is changed, thus requests like :
> select v / 2 from t, return EXPR$ instead of column name derived from IgniteSqlValidator#deriveAlias. Fast (near) fix looks like cover both such queries:
> IgnitePlanner#validateAndGetTypeMetadata ->
> {noformat}
> public ValidationResult validateAndGetTypeMetadata(SqlNode sqlNode) {
> SqlNode validatedNode = validator().validate(sqlNode);
> RelDataType type = validator().getValidatedNodeType(validatedNode);
> List<List<String>> origins = validator().getFieldOrigins(validatedNode);
> List<String> derived = Collections.emptyList();
> if (sqlNode instanceof SqlSelect) {
> SelectScope list = validator().getRawSelectScope((SqlSelect) sqlNode);
> assert type.getFieldList().size() == list.getExpandedSelectList().size();
> int cnt = 0;
> derived = new ArrayList<>(list.getExpandedSelectList().size());
> for (SqlNode node : list.getExpandedSelectList()) {
> derived.add(validator().deriveAlias(node, cnt++));
> }
> }
> return new ValidationResult(validatedNode, type, origins, derived);
> }
> {noformat}
> and use this derived instead of aliases here:
> PrepareServiceImpl#resultSetMetadata
> *Be careful !* .net and cpp tests are involved too, check all issue number occurrences.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)