Suppose I have two Calcite schemas from JDBC sources. One contains `users` and the other `user_todos`.
If I run a query like: SELECT u.name, t.todo FROM USERSDB.users u LEFT JOIN TODOSDB.user_todos t ON u.id = t.user_id GROUP BY u.id, u.name, t.todo What seems like the most logical thing to do would be to run: SELECT u.name FROM USERSDB.users u And then consecutively: SELECT t.todo FROM TODOSDB.user_todos WHERE t.user_id IN (...) But what happens is that the entire `user_todos` is scanned: /**/stat2.execute("SELECT \"USER_ID\", \"TODO\"\nFROM \"USER_TODOS\"\nORDER BY \"USER_ID\" NULLS LAST"); 2025-05-16 09:17:54.191653-04:00 jdbc[10]: Plan : calculate cost for plan [PUBLIC.USER_TODOS] 2025-05-16 09:17:54.191766-04:00 jdbc[10]: Plan : for table filter PUBLIC.USER_TODOS 2025-05-16 09:17:54.192225-04:00 jdbc[10]: Table : potential plan item cost 10,230 index PUBLIC.USER_TODOS.tableScan 2025-05-16 09:17:54.192361-04:00 jdbc[10]: Table : potential plan item cost 12,240 index PUBLIC.PRIMARY_KEY_C 2025-05-16 09:17:54.192465-04:00 jdbc[10]: Plan : best plan item cost 10,230 index PUBLIC.USER_TODOS.tableScan Is this intentional? Why not push down JOIN predicates or correlative predicates to the JDBC source?