@@ -486,6 +486,72 @@ describe('ConditionOptimization', () => {
486486 ` ) ) ;
487487 } ) ;
488488
489+ it ( 'deduplicates identical parameter conditions after moving into an existing upstream WHERE' , ( ) => {
490+ const sql = `
491+ with active_users as (
492+ select u.id, u.status
493+ from users u
494+ where u.status = :status
495+ )
496+ select *
497+ from active_users au
498+ where au.status = :status
499+ ` ;
500+
501+ const result = optimizeConditions ( sql ) ;
502+
503+ expect ( result . ok ) . toBe ( true ) ;
504+ expect ( result . applied ) . toEqual ( [
505+ expect . objectContaining ( {
506+ phaseKind : 'parameter_condition_placement' ,
507+ kind : 'move_condition' ,
508+ toScopeId : 'cte:active_users' ,
509+ columnReferences : [ 'au.status' ]
510+ } )
511+ ] ) ;
512+ expect ( result . skipped ) . toEqual ( [ ] ) ;
513+ expect ( normalizeSql ( result . sql ) ) . toBe ( normalizeSql ( `
514+ with active_users as (
515+ select u.id, u.status
516+ from users u
517+ where u.status = :status
518+ )
519+ select *
520+ from active_users au
521+ ` ) ) ;
522+ } ) ;
523+
524+ it ( 'deduplicates identical parameter conditions after moving into an existing JOIN ON condition' , ( ) => {
525+ const sql = `
526+ select *
527+ from orders o
528+ join users u
529+ on u.id = o.user_id
530+ and u.status = :status
531+ where u.status = :status
532+ ` ;
533+
534+ const result = optimizeConditions ( sql ) ;
535+
536+ expect ( result . ok ) . toBe ( true ) ;
537+ expect ( result . applied ) . toEqual ( [
538+ expect . objectContaining ( {
539+ phaseKind : 'parameter_condition_placement' ,
540+ kind : 'move_condition' ,
541+ toScopeId : 'join_on:u' ,
542+ columnReferences : [ 'u.status' ]
543+ } )
544+ ] ) ;
545+ expect ( result . skipped ) . toEqual ( [ ] ) ;
546+ expect ( normalizeSql ( result . sql ) ) . toBe ( normalizeSql ( `
547+ select *
548+ from orders o
549+ join users u
550+ on u.id = o.user_id
551+ and u.status = :status
552+ ` ) ) ;
553+ } ) ;
554+
489555 it ( 'keeps ambiguous wildcard outputs skipped instead of guessing a source column' , ( ) => {
490556 const sql = `
491557 select *
@@ -843,6 +909,41 @@ describe('ConditionOptimization', () => {
843909 ` ) ) ;
844910 } ) ;
845911
912+ it ( 'deduplicates identical static predicates after moving into an existing upstream WHERE' , ( ) => {
913+ const sql = `
914+ with active_users as (
915+ select u.id, u.status
916+ from users u
917+ where u.status = 'active'
918+ )
919+ select *
920+ from active_users au
921+ where au.status = 'active'
922+ ` ;
923+
924+ const result = optimizeConditions ( sql ) ;
925+
926+ expect ( result . ok ) . toBe ( true ) ;
927+ expect ( result . applied ) . toEqual ( [
928+ expect . objectContaining ( {
929+ phaseKind : 'static_predicate_placement' ,
930+ kind : 'move_static_predicate' ,
931+ toScopeId : 'cte:active_users' ,
932+ columnReferences : [ 'au.status' ]
933+ } )
934+ ] ) ;
935+ expect ( result . skipped ) . toEqual ( [ ] ) ;
936+ expect ( normalizeSql ( result . sql ) ) . toBe ( normalizeSql ( `
937+ with active_users as (
938+ select u.id, u.status
939+ from users u
940+ where u.status = 'active'
941+ )
942+ select *
943+ from active_users au
944+ ` ) ) ;
945+ } ) ;
946+
846947 it ( 'prunes same-block optional WHERE branches even when the query groups later' , ( ) => {
847948 const sql = `
848949 select customer_id, count(*) as order_count
0 commit comments