Forgot to add that to the article, but yes, we parse the statement and route SelectStmt[1] to replicas. If there is an UPDATE in the SELECT, we don't handle that at the moment, but can be easily added.

[1] https://docs.rs/pg_query/6.0.0/pg_query/protobuf/struct.Sele...

Do you have to traverse the syntax tree to determine that?

Yup.