Skip to content

Cannot resolve columns with aliases in ORDER BY

When a column A has an alias B, we no longer can use ORDER BY {A | B | 1}.

Note that this is a regression! The query used to work in 7dad8474 (picodata@56ab51a0).

Ref: picodata!1315 (merged)

Tg: https://t.me/c/1222144211/13617

Repro:

/* We should be able to use "relname" in ORDER BY according to the SQL standard. */
picodata> select name as relname from _pico_table order by relname;
2024-09-26 19:53:45.925 [25476] main/104/interactive storage.rs:77 E> Tarantool(BoxError { code: 153, message: Some("Field 'relname' was not found in space '_pico_table' format"), error_type: Some("ClientError"), errno: None, file: Some("./src/box/sql/resolve.c"), line: Some(431), fields: {}, cause: None }): prepare
2024-09-26 19:53:45.925 [25476] main/104/interactive helpers.rs:1489 E> failed to compile stmt: {_e:?}
---
- null
- 'sbroad: failed to create tarantool: Tarantool(BoxError { code: 153, message: Some("Field
  ''relname'' was not found in space ''_pico_table'' format"), error_type: Some("ClientError"),
  errno: None, file: Some("./src/box/sql/resolve.c"), line: Some(431), fields: {},
  cause: None })'
...

/* Similarly, "name" should still be available. */
picodata> select name as relname from _pico_table order by name;
---
- null
- 'sbroad: column with name "name" not found'
...

/* Sadly, even column numbers do not work... */
picodata> select name as relname from _pico_table order by 1;
2024-09-26 19:13:08.334 [25476] main/104/interactive storage.rs:77 E> Tarantool(BoxError { code: 153, message: Some("Field 'relname' was not found in space '_pico_table' format"), error_type: Some("ClientError"), errno: None, file: Some("./src/box/sql/resolve.c"), line: Some(431), fields: {}, cause: None }): prepare
2024-09-26 19:13:08.334 [25476] main/104/interactive helpers.rs:1489 E> failed to compile stmt: {_e:?}
---
- null
- 'sbroad: failed to create tarantool: Tarantool(BoxError { code: 153, message: Some("Field
  ''relname'' was not found in space ''_pico_table'' format"), error_type: Some("ClientError"),
  errno: None, file: Some("./src/box/sql/resolve.c"), line: Some(431), fields: {},
  cause: None })'
...
Edited by Dmitry Ivanov