Open sebaterrazas opened 3 days ago
No deberías tocar el catálogo, deberías insertar R y S sin utilizar el alias.
Y es posible (depende de como modificas la gramática) que el visitor visitTableList
sea modificado para que haga otras cosas en los casos nuevos.
En particular al visitar tu consulta de ejemplo no debería evaluarse el if que mencionas
if (!from_tables.insert({alias, table_name}).second) {
throw QueryException("Table " + alias + " should only appear once in the FROM clause");
}
Hola! Le he estado dando vuelta a un tema y todavía no logro entender la lógica que tengo que implementar. Para una consulta del tipo:
Entiendo que hay que tratarla como si
(R LEFT OUTER JOIN S ON R.a = S.x) AS LOJ
fuera untable AS identifier
(Parser). Mi tema es que más adelante, en el código base se hace esto enquery_preprocessor.cc
:En general, entiendo que
alias
sería el identifier después del AS y quetable_name
es la tabla que ya está en el catálogo. Pero en este caso, no entiendo cual sería el table_name. Osea, debería usar la tabla R y modificarla respecto a la consulta? Debería crear una nueva tabla en el catálogo con el nombre de alias del LEFT OUTER JOIN? O debería insertar ambas tablas (R y S) sin utilizar el alias?