@@ -91,13 +91,28 @@ def __init__(self):
9191 self .xt = "xt"
9292 self .ap = "ap"
9393
94+ # Repeated Strings:
95+ self .c_dob = "c.date_of_birth"
96+
9497 def build_subject_selection_query (
9598 self ,
9699 criteria : Dict [str , str ],
97100 user : "User" ,
98101 subject : "Subject" ,
99102 subjects_to_retrieve : Optional [int ] = None ,
100103 ) -> tuple [str , dict ]:
104+ # Clear previous state to avoid duplicate SQL fragments
105+ self .sql_select = []
106+ self .sql_from = []
107+ self .sql_where = []
108+ self .sql_from_episode = []
109+ self .sql_from_genetic_condition_diagnosis = []
110+ self .sql_from_cancer_audit_datasets = []
111+ self .bind_vars = {}
112+ self .criteria_value_count = 0
113+ self .xt = "xt"
114+ self .ap = "ap"
115+
101116 self ._build_select_clause ()
102117 self ._build_main_from_clause ()
103118 self ._start_where_clause ()
@@ -108,39 +123,42 @@ def build_subject_selection_query(
108123 self ._end_where_clause (1 )
109124
110125 query = " " .join (
111- self .sql_select
112- + self .sql_from
113- + self .sql_from_episode
114- + self .sql_from_genetic_condition_diagnosis
115- + self .sql_from_cancer_audit_datasets
116- + self .sql_where
126+ str (part )
127+ for part in (
128+ self .sql_select
129+ + self .sql_from
130+ + self .sql_from_episode
131+ + self .sql_from_genetic_condition_diagnosis
132+ + self .sql_from_cancer_audit_datasets
133+ + self .sql_where
134+ )
117135 )
118136 logging .info ("Final query: %s" , query )
119137 return query , self .bind_vars
120138
121139 def _build_select_clause (self ) -> None :
122140 columns : list [str ] = [
123- "ss.screening_subject_id, " ,
124- "ss.subject_nhs_number, " ,
125- "c.person_family_name, " ,
126- "c.person_given_name, " ,
127- "ss.datestamp, " ,
128- "ss.screening_status_id, " ,
129- "ss.ss_reason_for_change_id, " ,
130- "ss.screening_status_change_date, " ,
131- "ss.screening_due_date, " ,
132- "ss.sdd_reason_for_change_id, " ,
133- "ss.sdd_change_date, " ,
134- "ss.calculated_sdd, " ,
135- "ss.surveillance_screen_due_date, " ,
136- "ss.calculated_ssdd, " ,
137- "ss.surveillance_sdd_rsn_change_id, " ,
138- "ss.surveillance_sdd_change_date, " ,
139- "ss.lynch_screening_due_date, " ,
140- "ss.lynch_sdd_reason_for_change_id, " ,
141- "ss.lynch_sdd_change_date, " ,
142- "ss.lynch_calculated_sdd, " ,
143- "c.date_of_birth," ,
141+ "ss.screening_subject_id" ,
142+ "ss.subject_nhs_number" ,
143+ "c.person_family_name" ,
144+ "c.person_given_name" ,
145+ "ss.datestamp" ,
146+ "ss.screening_status_id" ,
147+ "ss.ss_reason_for_change_id" ,
148+ "ss.screening_status_change_date" ,
149+ "ss.screening_due_date" ,
150+ "ss.sdd_reason_for_change_id" ,
151+ "ss.sdd_change_date" ,
152+ "ss.calculated_sdd" ,
153+ "ss.surveillance_screen_due_date" ,
154+ "ss.calculated_ssdd" ,
155+ "ss.surveillance_sdd_rsn_change_id" ,
156+ "ss.surveillance_sdd_change_date" ,
157+ "ss.lynch_screening_due_date" ,
158+ "ss.lynch_sdd_reason_for_change_id" ,
159+ "ss.lynch_sdd_change_date" ,
160+ "ss.lynch_calculated_sdd" ,
161+ self . c_dob ,
144162 "c.date_of_death " ,
145163 ]
146164 self .sql_select .append ("SELECT " + ", " .join (columns ))
@@ -649,7 +667,7 @@ def _check_if_not_modifier_is_valid_for_criteria_key(self) -> None:
649667 )
650668
651669 def _add_criteria_nhs_number (self ) -> None :
652- self .sql_where .append (" c.nhs_number = ' :nhs_number' " )
670+ self .sql_where .append (" AND c.nhs_number = :nhs_number " )
653671 self .bind_vars ["nhs_number" ] = self .criteria_value
654672
655673 def _add_criteria_subject_age (self ) -> None :
@@ -2684,7 +2702,7 @@ def _add_criteria_date_field(
26842702 self ._add_check_comparing_one_date_with_another (
26852703 date_column_name ,
26862704 " = " ,
2687- self ._add_years_to_oracle_date ("c.date_of_birth" , self .criteria_value ),
2705+ self ._add_years_to_oracle_date (self . c_dob , self .criteria_value ),
26882706 False ,
26892707 )
26902708 elif (
@@ -2695,9 +2713,7 @@ def _add_criteria_date_field(
26952713 self ._add_check_comparing_one_date_with_another (
26962714 date_column_name ,
26972715 " = " ,
2698- self ._add_years_to_oracle_date (
2699- "c.date_of_birth" , criteria_words [0 ][:- 2 ]
2700- ),
2716+ self ._add_years_to_oracle_date (self .c_dob , criteria_words [0 ][:- 2 ]),
27012717 False ,
27022718 )
27032719 elif self ._is_valid_date (self .criteria_value ):
0 commit comments