@@ -47,17 +47,46 @@ def fetch_data(conn: Connection, sql_limit: int, eval_function_name: str, grade_
4747 """
4848 limit = max (1 , min (sql_limit , DEFAULT_SQL_LIMIT ))
4949
50- sql_query_template = """
51- SELECT DISTINCT ON (S.submission, RA."partId")
52- S.submission, S.answer, S.grade, RA."gradeParams"::json as grade_params, RA."partId"
53- FROM "Submission" S
54- INNER JOIN public."ResponseArea" RA ON S."responseAreaId" = RA.id
55- INNER JOIN "EvaluationFunction" EF ON RA."evaluationFunctionId" = EF.id
56- WHERE
57- EF.name = :name_param AND
58- RA."gradeParams"::jsonb = (:params_param)::jsonb
59- LIMIT :limit_param;
60- """
50+ # Start with mandatory filters
51+ where_clauses = ["EF.name = :name_param" ]
52+ params = {
53+ "name_param" : eval_function_name ,
54+ "limit_param" : limit
55+ }
56+
57+ # Conditionally add the gradeParams filter
58+ if grade_params_json :
59+ where_clauses .append ("RA.\" gradeParams\" ::jsonb = (:params_param)::jsonb" )
60+ params ["params_param" ] = grade_params_json
61+
62+ # Combine clauses with AND
63+ where_sql = " AND " .join (where_clauses )
64+
65+ # Start with mandatory filters
66+ where_clauses = ["EF.name = :name_param" ]
67+ params = {
68+ "name_param" : eval_function_name ,
69+ "limit_param" : limit
70+ }
71+
72+ # Conditionally add the gradeParams filter
73+ if grade_params_json :
74+ where_clauses .append ("RA.\" gradeParams\" ::jsonb = (:params_param)::jsonb" )
75+ params ["params_param" ] = grade_params_json
76+
77+ # Combine clauses with AND
78+ where_sql = " AND " .join (where_clauses )
79+
80+ sql_query_template = f"""
81+ SELECT
82+ S.submission, S.answer, S.grade, RA."gradeParams"::json as grade_params
83+ FROM "Submission" S
84+ INNER JOIN public."ResponseArea" RA ON S."responseAreaId" = RA.id
85+ INNER JOIN "EvaluationFunction" EF ON RA."evaluationFunctionId" = EF.id
86+ WHERE
87+ { where_sql }
88+ LIMIT :limit_param;
89+ """
6190
6291 data_records = []
6392 try :
@@ -228,11 +257,10 @@ def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, Any]:
228257 eval_function_name = payload .get ('eval_function_name' )
229258 grade_params_json = payload .get ('grade_params_json' )
230259
231- if not endpoint_to_test or not eval_function_name or not grade_params_json :
260+ if not endpoint_to_test or not eval_function_name :
232261 missing_fields = []
233262 if not endpoint_to_test : missing_fields .append ("'endpoint'" )
234263 if not eval_function_name : missing_fields .append ("'eval_function_name'" )
235- if not grade_params_json : missing_fields .append ("'grade_params_json'" )
236264 raise ValueError (f"Missing required input fields: { ', ' .join (missing_fields )} " )
237265
238266 conn = get_db_connection ()
0 commit comments