@@ -132,7 +132,11 @@ pub async fn get_sql_query_param(
132132 } else if single_table_name. is_some ( ) {
133133 table_name = single_table_name. map ( |x| x. to_string ( ) ) ;
134134 } else {
135- panic ! ( "failed to find an appropriate table name while processing WHERE statement" )
135+ error ! (
136+ "Failed to infer table name while processing WHERE clause. Expression: {}" ,
137+ left
138+ ) ;
139+ return None ;
136140 }
137141
138142 let column_name = translate_column_name_expr ( left) ;
@@ -148,13 +152,30 @@ pub async fn get_sql_query_param(
148152 . lock ( )
149153 . await
150154 . fetch_table ( & table_names, db_conn)
151- . await
152- . unwrap_or_else ( || panic ! ( "Failed to fetch columns for table {table_name}" ) ) ;
155+ . await ;
156+
157+ if columns. is_none ( ) {
158+ error ! (
159+ "Table '{}' not found in database schema. Check that the table exists and is accessible." ,
160+ table_name
161+ ) ;
162+ return None ;
163+ }
164+
165+ let columns = columns. unwrap ( ) ;
153166
154167 // get column and return TsFieldType
155- let column = columns
156- . get ( column_name. as_str ( ) )
157- . unwrap_or_else ( || panic ! ( "Failed to find the column from the table schema of {table_name}" ) ) ;
168+ let column = columns. get ( column_name. as_str ( ) ) ;
169+ if column. is_none ( ) {
170+ let available_columns = columns. keys ( ) . map ( |k| k. as_str ( ) ) . collect :: < Vec < _ > > ( ) . join ( ", " ) ;
171+ error ! (
172+ "Column '{}' not found in table '{}'. Available columns: {}" ,
173+ column_name, table_name, available_columns
174+ ) ;
175+ return None ;
176+ }
177+
178+ let column = column. unwrap ( ) ;
158179 Some ( ( column. field_type . to_owned ( ) , column. is_nullable , Some ( expr_placeholder) ) )
159180 }
160181 _ => None ,
@@ -731,16 +752,35 @@ pub async fn translate_assignment(
731752 let value = get_expr_placeholder ( & assignment. value ) ;
732753
733754 if value. is_some ( ) {
734- let table_details = & DB_SCHEMA
755+ let table_details = DB_SCHEMA
735756 . lock ( )
736757 . await
737758 . fetch_table ( & vec ! [ table_name] , db_conn)
738759 . await
739- . unwrap ( ) ;
740- let column_name = translate_column_name_assignment ( assignment) . unwrap ( ) ;
741- let field = table_details
742- . get ( & column_name)
743- . unwrap_or_else ( || panic ! ( "Failed to find the column detail for {column_name}" ) ) ;
760+ . ok_or_else ( || TsGeneratorError :: TableNotFoundInSchema {
761+ table : table_name. to_string ( ) ,
762+ } ) ?;
763+
764+ let column_name = translate_column_name_assignment ( assignment) . ok_or_else ( || {
765+ TsGeneratorError :: InsertStatementProcessingFailed {
766+ reason : "Failed to extract column name from assignment" . to_string ( ) ,
767+ query : format ! ( "UPDATE {} SET {} = ..." , table_name, assignment) ,
768+ }
769+ } ) ?;
770+
771+ let field = table_details. get ( & column_name) . ok_or_else ( || {
772+ let available_columns = table_details
773+ . keys ( )
774+ . map ( |k| k. as_str ( ) )
775+ . collect :: < Vec < _ > > ( )
776+ . join ( ", " ) ;
777+ TsGeneratorError :: ColumnNotFoundInTable {
778+ column : column_name. clone ( ) ,
779+ table : table_name. to_string ( ) ,
780+ available_columns,
781+ }
782+ } ) ?;
783+
744784 let _ = ts_query. insert_param ( & field. field_type , & field. is_nullable , & value) ;
745785 }
746786 Ok ( ( ) )
0 commit comments