with base_specific_domains; use base_specific_domains; -- Step 1 with abstract_interface_generator; with generator_support; use generator_support; procedure dixie_interface_view is -- Step 2 type the_records is (emp_rec, sal_rec); -- Step 3 type the_procedures is (startup, open_emp_cursor, emp_fetch, -- Step 4 new_sal_row, add_year, keep_it, trash_it, close_emp_cursor); type the_errors is (row_not_found, cursor_already_open, -- Step 5 fetch_not_done, no_duplicates, cursor_not_open); package make_interface is new abstract_interface_generator -- Step 6 ("dixie_conc_interface", "dixie_abs_interface", "dixie_dbms_specific", (1=> dixie_employee_def_pkg, 2=> dixie_salary_def_pkg), the_records, the_procedures, the_errors, (1=> 100, 2=> 1001, 3=> -508, 4=> -803, 5=> -501)); begin declare -- Step 7 type rec_comps1 is (emp_id, emp_lastname, emp_firstname, emp_address, emp_weight); package rec1 is new make_interface.record_generator -- Step 8 (rec_comps1, emp_rec, false); package comp_11 is new rec1.component_generator -- Step 9 (emp_id, employee_id_not_null); package comp_12 is new rec1.component_generator (emp_lastname, name_not_null); package comp_13 is new rec1.component_generator (emp_firstname, name_not_null); package comp_14 is new rec1.component_generator (emp_address, address_not_null); package comp_15 is new rec1.component_generator (emp_weight, weight_not_null); begin -- Step 10 rec1.generate_record; end; declare type rec_comps2 is (new_emp_id, new_emp_sal, new_emp_pts); package rec2 is new make_interface.record_generator (rec_comps2, sal_rec, false); package comp_21 is new rec2.component_generator (new_emp_id, employee_id_not_null); package comp_22 is new rec2.component_generator (new_emp_sal, salary_not_null); package comp_23 is new rec2.component_generator (new_emp_pts, points_type); begin rec2.generate_record; end; declare -- Step 11 package proc1 is new make_interface.procedure_without_parameters_generator (startup, commit, "set_transaction"); -- The set transaction SQL procedure is only used with the RDB DBMS. -- Therefore, it is not one of the standard SQL statement types and has -- no corresponding ada procedure kind. "commit" can be used though -- because it a kind of procedure without parameters like set transaction. begin proc1.generate_procedure; end; declare package proc2 is new make_interface.procedure_without_parameters_generator (keep_it, commit, "commit_transaction"); begin proc2.generate_procedure; end; declare package proc9 is new make_interface.procedure_without_parameters_generator (close_emp_cursor, close, "close_emp_cursor"); begin proc9.generate_procedure; end; declare package proc3 is new make_interface.procedure_without_parameters_generator (trash_it, rollback, "rollback_transaction"); begin proc3.generate_procedure; end; declare type abs_params4 is (in_emp_id, result); type con_params4 is (in_emp_id, result); package proc4 is new make_interface.procedure_with_parameters_generator (open_emp_cursor, abs_params4, open, "open_employees_cursor", con_params4, (1=> cursor_already_open)); package param41 is new proc4.params_of_domain_type_generator (in_emp_id, employee_id_not_null); package param42 is new proc4.params_of_error_conditions_generator (result); begin proc4.generate_procedure; end; declare type abs_params5 is (fetch_rec, fetch_done); type con_params5 is ( emp_id, emp_lastname, emp_firstname, emp_address, emp_weight, fetch_done); package proc5 is new make_interface.procedure_with_parameters_generator (emp_fetch, abs_params5, fetch, "fetch_employees", con_params5, (1=> row_not_found, 2=> cursor_not_open)); package param51 is new proc5.params_of_record_type_generator (fetch_rec, emp_rec); package param52 is new proc5.params_of_error_conditions_generator (fetch_done); begin proc5.generate_procedure; end; declare type abs_params6 is (insert_rec, insert_done); type con_params6 is (new_emp_id, new_emp_sal, new_emp_pts, insert_done); package proc6 is new make_interface.procedure_with_parameters_generator (new_sal_row, abs_params6, insert_values, "insert_sal_hist_row", con_params6, (1=> no_duplicates)); package param61 is new proc6.params_of_record_type_generator (insert_rec, sal_rec); package param62 is new proc6.params_of_error_conditions_generator (insert_done); begin proc6.generate_procedure; end; declare type abs_params7 is (in_emp_id, change_done); type con_params7 is (in_emp_id, change_done); package proc7 is new make_interface.procedure_with_parameters_generator (add_year, abs_params7, update_searched, "update_job_hist", params_to_concrete_procedure => con_params7); package param71 is new proc7.params_of_domain_type_generator (in_emp_id, employee_id_not_null); package param72 is new proc7.params_of_boolean_type_generator (change_done); begin proc7.generate_procedure; end; make_interface.generate_interface; -- Step 12 end;