diff --git a/src/webserver/database/sql.rs b/src/webserver/database/sql.rs index f997065c..40f40d3c 100644 --- a/src/webserver/database/sql.rs +++ b/src/webserver/database/sql.rs @@ -604,6 +604,16 @@ mod tests { assert!(error.to_string().contains("HAVING")); } + #[test] + fn database_cannot_filter_by_computed_column_in_where() { + let FileStatement::Error(error) = + one("select sqlpage.url_encode(name) as enc from users where enc <> ''") + else { + panic!("expected rewrite error"); + }; + assert!(error.to_string().contains("WHERE")); + } + #[test] fn database_cannot_group_by_computed_column_in_expression() { let FileStatement::Error(error) = diff --git a/src/webserver/database/sql/rewrite.rs b/src/webserver/database/sql/rewrite.rs index d137f26d..9ff49ea7 100644 --- a/src/webserver/database/sql/rewrite.rs +++ b/src/webserver/database/sql/rewrite.rs @@ -227,6 +227,7 @@ fn rewrite_top_level_projection( database_projection.append(&mut rewriter.private_projection); select.projection = database_projection; + reject_computed_alias_references("WHERE", select.selection.as_ref(), &computed_columns)?; reject_computed_group_by_references(&select.group_by, &computed_columns)?; reject_computed_alias_references("HAVING", select.having.as_ref(), &computed_columns)?; reject_computed_alias_references("QUALIFY", select.qualify.as_ref(), &computed_columns)?;