ncs_mdes_warehouse 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +12 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero.rb +817 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/address.rb +101 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit.rb +365 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_2.rb +359 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_3.rb +368 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_baby_name.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_baby_name_2.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_baby_name_3.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_decorate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_decorate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_decorate_room_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_diagnose_2_3.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_ethnic_origin_3.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_household_3.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li.rb +374 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li_baby_name.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li_decorate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_race_new_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_renovate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_renovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_renovate_room_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/contact.rb +77 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/drf_therm_verification.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/dwelling_unit.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_2.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_cond.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_detail.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_detail_2.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_habits.rb +164 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_habits_2.rb +173 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_lice.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_lice_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_otc.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_otc_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_pet_type.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_pet_type_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_prescr.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_prescr_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_renovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_saq.rb +260 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_suppl.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_suppl_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/email.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/env_equipment.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/env_equipment_prob_log.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/event.rb +68 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1.rb +374 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_2.rb +380 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_cancer.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_cancer_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_educ.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration.rb +239 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration_age_elig.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration_hidden_du.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration_pregnant.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_inventory.rb +203 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_inventory_age.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_inventory_age_elig.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_unit.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/incident.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/incident_media.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/incident_unanticipated.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/institution.rb +68 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/instrument.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/internet_usage.rb +92 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/internet_usage_participate.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_contact.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_household_dwelling.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_household.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_institute.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_participant.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_provider.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/listing_unit.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/low_high_script.rb +119 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/multi_mode.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/nine_mth_mother.rb +65 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/nine_mth_mother_detail.rb +143 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_provider.rb +80 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_provider_refusal.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_respondent.rb +152 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_respondent_influ.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt.rb +128 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_dutype.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_noaccess.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_refusal.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_vacant.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_eval.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_lang2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_staff.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_target.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_auth.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_consent.rb +95 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_consent_reconsideration.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_consent_sample.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_rvis.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_verif.rb +215 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_verif_child.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_verif_diff.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_vis_consent.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment.rb +275 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_2.rb +275 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_info_source.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_info_source_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_source.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_source_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_svc.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_svc_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_samp_frame.rb +299 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener.rb +293 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_day1.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_day2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_employ.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_ethnic_orig.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_pr_office.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_list.rb +89 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person.rb +119 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person_ethnic_origin.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person_race_new.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_cati.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_details.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_saq.rb +92 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_status_history.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg.rb +422 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_cool.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_heat2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_pdecorate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_prenovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_saq.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_sp_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_screening_performed.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/prec_therm_cert.rb +41 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_2.rb +362 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_know_ncs.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_know_ncs_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi.rb +371 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_2.rb +380 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_know_ncs.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_know_ncs_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb.rb +371 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_2.rb +380 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_know_ncs.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_know_ncs_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1.rb +521 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_2.rb +497 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_3.rb +422 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_commute.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_commute_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_commute_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_cool.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_cool_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_cool_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_diagnose_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_diagnose_2_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_ethnic_origin_3.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_heat2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_heat2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_heat2_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_local_trav.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_local_trav_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_local_trav_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_nonenglish2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pdecorate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pdecorate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pdecorate_room_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pet_type.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pet_type_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pet_type_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate2_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate_room_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_race_new_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_room_mold.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_room_mold_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq.rb +188 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq_2.rb +236 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq_3.rb +236 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq_4.rb +227 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_ethnic_origin_3.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_race.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_race_new_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2.rb +452 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_2.rb +440 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_3.rb +359 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_cool.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_cool_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_cool_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_diagnose_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_diagnose_2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_diagnose_2_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_heat2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_heat2_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_heat2_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_pdecorate2_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_pdecorate2_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_pdecorate2_room_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_prenovate_room.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_prenovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_prenovate_room_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_room_mold.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_room_mold_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq_2.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq_3.rb +116 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq_4.rb +110 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li_2.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li_cool.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li_cool_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider.rb +77 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider_logistics.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider_role.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider_role_pbs.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/psu.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ref_freezer_verification.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_dist.rb +74 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_dist_samp.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_receipt_confirm.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_receipt_store.rb +65 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_shipping.rb +53 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sampled_persons_ineligibility.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_mother.rb +281 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_mother_detail.rb +266 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_mother_pet.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq.rb +218 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_2.rb +221 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_3.rb +221 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_formula_type.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_formula_type_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_formula_type_3.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_supp.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_supp_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_supp_3.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_water.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_water_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_water_3.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood.rb +194 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_2.rb +197 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_draw.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_draw_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_hemolyze.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_hemolyze_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube_2.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube_comments.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube_comments_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood.rb +110 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_2.rb +110 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_3.rb +122 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_specimen.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_specimen_2.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_specimen_3.rb +35 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_equipment.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_pickup.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_receipt.rb +80 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_shipping.rb +56 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_spsc_info.rb +26 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_storage.rb +62 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_urine.rb +110 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/srsc_info.rb +26 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ssu.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff.rb +65 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_cert_training.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_exp_data_cllctn_tasks.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_exp_mngmnt_tasks.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_language.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_validation.rb +38 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_weekly_expense.rb +44 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/study_center.rb +26 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/subsample_doc.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf.rb +152 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_2.rb +155 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_blank_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_blank_collected_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_collected_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_filled_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_n_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_n_collected_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled2_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_sample.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_sample_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_saq.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_saq_eat.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_saq_prob.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_subsamples.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_subsamples_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq.rb +143 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_2.rb +146 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_blank_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_blank_collected_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_collected_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_filled_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_n_collected.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_n_collected_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled2_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_sample.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_sample_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_saq.rb +98 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_saq_prob.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_subsamples.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_subsamples_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/telephone.rb +83 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother.rb +92 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_2.rb +92 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_detail.rb +59 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_detail_2.rb +59 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_habits.rb +185 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_habits_2.rb +185 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_race.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_race_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tracing_int.rb +395 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/trh_meter_calibration.rb +77 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tsu.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother.rb +302 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_2.rb +305 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_detail.rb +302 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_detail_2.rb +302 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_lice.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_lice_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_renovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq.rb +293 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_2.rb +296 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_brand.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_brand_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_type.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_type_2.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_supplement.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_supplement_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_water.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_water_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother.rb +350 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_2.rb +353 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_cond.rb +29 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_detail.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_detail_2.rb +50 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_habits.rb +194 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_habits_2.rb +200 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_otc.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_otc_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_prescr.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_prescr_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_suppl.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_suppl_2.rb +47 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_pet_type.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_pet_type_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_renovate_room.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_renovate_room_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_room_mold.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_room_mold_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_saq.rb +245 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag.rb +131 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_2.rb +137 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_outside.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_outside_2.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_saq.rb +89 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_saq_outside.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_saq_prob.rb +32 -0
- data/generated_models/ncs_navigator/warehouse/models/three_point_zero/validation_ins.rb +233 -0
- data/lib/ncs_navigator/warehouse/configuration.rb +21 -0
- data/lib/ncs_navigator/warehouse/transformers.rb +2 -0
- data/lib/ncs_navigator/warehouse/transformers/enum_transformer.rb +130 -29
- data/lib/ncs_navigator/warehouse/transformers/foreign_key_index.rb +126 -0
- data/lib/ncs_navigator/warehouse/transformers/foreign_key_index/database_key_provider.rb +16 -0
- data/lib/ncs_navigator/warehouse/transformers/foreign_key_index/static_key_provider.rb +20 -0
- data/lib/ncs_navigator/warehouse/transformers/sql/sql_statements.treetop +27 -0
- data/lib/ncs_navigator/warehouse/transformers/sql_transformer.rb +107 -0
- data/lib/ncs_navigator/warehouse/version.rb +1 -1
- data/ncs_mdes_warehouse.gemspec +3 -1
- data/spec/ncs_navigator/warehouse/configuration_spec.rb +13 -0
- data/spec/ncs_navigator/warehouse/transformers/enum_transformer_spec.rb +160 -9
- data/spec/ncs_navigator/warehouse/transformers/foreign_key_index/database_key_provider_spec.rb +18 -0
- data/spec/ncs_navigator/warehouse/transformers/foreign_key_index_spec.rb +115 -0
- data/spec/ncs_navigator/warehouse/transformers/sql_transformer_spec.rb +157 -0
- data/spec/spec_helper.rb +1 -0
- metadata +431 -12
@@ -82,6 +82,27 @@ module NcsNavigator::Warehouse
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
##
|
86
|
+
# The foreign key index used during an ETL run. The default value
|
87
|
+
# is correct for virtually any case.
|
88
|
+
#
|
89
|
+
# @return [Object]
|
90
|
+
def foreign_key_index
|
91
|
+
@foreign_key_index ||= Transformers::ForeignKeyIndex.new
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Specify a different foreign key index implementation to
|
96
|
+
# use. This will only rarely be necessary or useful. The default
|
97
|
+
# value is correct for virtually any case.
|
98
|
+
#
|
99
|
+
# @return [void]
|
100
|
+
# @param [#record_and_verify,#report_errors] index the replacement
|
101
|
+
# foreign key index implementation.
|
102
|
+
def foreign_key_index=(index)
|
103
|
+
@foreign_key_index = index
|
104
|
+
end
|
105
|
+
|
85
106
|
####
|
86
107
|
#### Hooks
|
87
108
|
####
|
@@ -17,10 +17,12 @@ module NcsNavigator::Warehouse
|
|
17
17
|
autoload :EnumTransformer, 'ncs_navigator/warehouse/transformers/enum_transformer'
|
18
18
|
autoload :EventStartFromContactTransformer, 'ncs_navigator/warehouse/transformers/event_start_from_contact_transformer'
|
19
19
|
autoload :Filters, 'ncs_navigator/warehouse/transformers/filters'
|
20
|
+
autoload :ForeignKeyIndex, 'ncs_navigator/warehouse/transformers/foreign_key_index'
|
20
21
|
autoload :NoBlankForeignKeysFilter, 'ncs_navigator/warehouse/transformers/no_blank_foreign_keys_filter'
|
21
22
|
autoload :NoSsuOutreachAllSsusFilter, 'ncs_navigator/warehouse/transformers/no_ssu_outreach_all_ssus_filter'
|
22
23
|
autoload :NoSsuOutreachPlaceholderFilter, 'ncs_navigator/warehouse/transformers/no_ssu_outreach_placeholder_filter'
|
23
24
|
autoload :SamplingUnits, 'ncs_navigator/warehouse/transformers/sampling_units'
|
25
|
+
autoload :SqlTransformer, 'ncs_navigator/warehouse/transformers/sql_transformer'
|
24
26
|
autoload :SubprocessTransformer, 'ncs_navigator/warehouse/transformers/subprocess_transformer'
|
25
27
|
autoload :VdrXml, 'ncs_navigator/warehouse/transformers/vdr_xml'
|
26
28
|
end
|
@@ -35,7 +35,12 @@ module NcsNavigator::Warehouse::Transformers
|
|
35
35
|
# @return [Filters] the filters in use on this transformer.
|
36
36
|
attr_reader :filters
|
37
37
|
|
38
|
-
|
38
|
+
##
|
39
|
+
# @return [Symbol] the name of the duplicates mode in use on this
|
40
|
+
# transformer.
|
41
|
+
attr_reader :duplicates
|
42
|
+
|
43
|
+
def_delegators :@configuration, :log, :shell, :foreign_key_index
|
39
44
|
|
40
45
|
##
|
41
46
|
# @param [Configuration] configuration
|
@@ -43,6 +48,11 @@ module NcsNavigator::Warehouse::Transformers
|
|
43
48
|
# @param [Hash<Symbol, Object>] options
|
44
49
|
# @option options [Array<#call>,#call] :filters a list of
|
45
50
|
# filters to use for this transformer
|
51
|
+
# @option options [:error,:ignore,:replace] the desired behavior when this
|
52
|
+
# transformer encounters a record with the same PK as one already seen.
|
53
|
+
# `:error` means blindly save (and let the database error out).
|
54
|
+
# `:ignore` means do not attempt to save the duplicate.
|
55
|
+
# `:replace` means substitute the duplicate for the existing record.
|
46
56
|
#
|
47
57
|
# @see Filters
|
48
58
|
def initialize(configuration, enum, options={})
|
@@ -50,6 +60,8 @@ module NcsNavigator::Warehouse::Transformers
|
|
50
60
|
@enum = enum
|
51
61
|
filter_list = options.delete(:filters)
|
52
62
|
@filters = Filters.new(filter_list ? [*filter_list].compact : [])
|
63
|
+
@duplicates = options.delete(:duplicates) || :error
|
64
|
+
@duplicates_strategy = select_duplicates_strategy
|
53
65
|
end
|
54
66
|
|
55
67
|
##
|
@@ -90,45 +102,62 @@ module NcsNavigator::Warehouse::Transformers
|
|
90
102
|
receive_transform_error(record, status)
|
91
103
|
else
|
92
104
|
filters.call([record]).each do |filtered_record|
|
93
|
-
save_model_instance(filtered_record, status)
|
105
|
+
saved_record = save_model_instance(filtered_record, status)
|
106
|
+
foreign_key_index.record_and_verify(saved_record) if saved_record
|
94
107
|
end
|
95
108
|
end
|
96
109
|
end
|
110
|
+
foreign_key_index.report_errors(status)
|
97
111
|
end
|
98
112
|
|
99
|
-
def save_model_instance(
|
100
|
-
|
101
|
-
|
102
|
-
log.
|
103
|
-
status.
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
113
|
+
def save_model_instance(incoming_record, status)
|
114
|
+
record = process_duplicate_if_appropriate(incoming_record)
|
115
|
+
unless record
|
116
|
+
log.info("Ignoring duplicate record #{record_ident incoming_record}.")
|
117
|
+
status.record_count += 1
|
118
|
+
return
|
119
|
+
end
|
120
|
+
|
121
|
+
saved_record =
|
122
|
+
if !has_valid_psu?(record)
|
123
|
+
msg = "Invalid PSU ID. The list of valid PSU IDs for this Study Center is #{@configuration.navigator.psus.collect(&:id).inspect}."
|
124
|
+
log.error "#{record_ident record}: #{msg}"
|
125
|
+
status.unsuccessful_record(record, msg,
|
126
|
+
:attribute_name => 'psu_id',
|
127
|
+
:attribute_value => record.psu_id.inspect)
|
128
|
+
nil
|
129
|
+
elsif record.valid?
|
130
|
+
log.debug("Saving valid record #{record_ident record}.")
|
131
|
+
begin
|
132
|
+
if record.save
|
133
|
+
record
|
134
|
+
else
|
135
|
+
msg = "Could not save valid record #{record.inspect}. #{record_messages(record).join(' ')}"
|
136
|
+
log.error msg
|
137
|
+
status.unsuccessful_record(record, msg)
|
138
|
+
nil
|
139
|
+
end
|
140
|
+
rescue => e
|
141
|
+
msg = "Error on save. #{e.class}: #{e}."
|
111
142
|
log.error msg
|
112
143
|
status.unsuccessful_record(record, msg)
|
144
|
+
nil
|
113
145
|
end
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
record, "Invalid: #{e}.",
|
125
|
-
:attribute_name => prop,
|
126
|
-
:attribute_value => record.send(prop).inspect
|
127
|
-
)
|
146
|
+
else
|
147
|
+
log.error "Invalid record. #{record_messages(record).join(' ')}"
|
148
|
+
record.errors.keys.each do |prop|
|
149
|
+
record.errors[prop].each do |e|
|
150
|
+
status.unsuccessful_record(
|
151
|
+
record, "Invalid: #{e}.",
|
152
|
+
:attribute_name => prop,
|
153
|
+
:attribute_value => record.send(prop).inspect
|
154
|
+
)
|
155
|
+
end
|
128
156
|
end
|
157
|
+
nil
|
129
158
|
end
|
130
|
-
end
|
131
159
|
status.record_count += 1
|
160
|
+
saved_record
|
132
161
|
end
|
133
162
|
|
134
163
|
def receive_transform_error(error, status)
|
@@ -163,5 +192,77 @@ module NcsNavigator::Warehouse::Transformers
|
|
163
192
|
true
|
164
193
|
end
|
165
194
|
end
|
195
|
+
|
196
|
+
def process_duplicate_if_appropriate(record)
|
197
|
+
if @duplicates_strategy.duplicate?(record)
|
198
|
+
@duplicates_strategy.to_save(record)
|
199
|
+
else
|
200
|
+
record
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def select_duplicates_strategy
|
205
|
+
case duplicates
|
206
|
+
when :error
|
207
|
+
ErrorDuplicatesStrategy.new
|
208
|
+
when :ignore
|
209
|
+
IgnoreDuplicatesStrategy.new(@configuration)
|
210
|
+
when :replace
|
211
|
+
ReplaceDuplicatesStrategy.new(@configuration)
|
212
|
+
else
|
213
|
+
fail "Unknown duplicates mode #{duplicates.inspect}."
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
##
|
218
|
+
# @private
|
219
|
+
class ErrorDuplicatesStrategy
|
220
|
+
def duplicate?(record)
|
221
|
+
false
|
222
|
+
end
|
223
|
+
|
224
|
+
# to_save will never be called for this strategy
|
225
|
+
end
|
226
|
+
|
227
|
+
##
|
228
|
+
# @private
|
229
|
+
class AbstractDoSomethingWithDuplicatesStrategy
|
230
|
+
extend Forwardable
|
231
|
+
|
232
|
+
def_delegators :@configuration, :log
|
233
|
+
|
234
|
+
def initialize(configuration)
|
235
|
+
@configuration = configuration
|
236
|
+
@fk_index = configuration.foreign_key_index
|
237
|
+
end
|
238
|
+
|
239
|
+
def duplicate?(record)
|
240
|
+
@fk_index.seen?(record.class, record.key.first)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
##
|
245
|
+
# @private
|
246
|
+
class IgnoreDuplicatesStrategy < AbstractDoSomethingWithDuplicatesStrategy
|
247
|
+
def to_save(duplicate_record)
|
248
|
+
nil
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
##
|
253
|
+
# @private
|
254
|
+
class ReplaceDuplicatesStrategy < AbstractDoSomethingWithDuplicatesStrategy
|
255
|
+
def to_save(duplicate_record)
|
256
|
+
log.info "Updating duplicate record #{duplicate_record.class}##{duplicate_record.key.first}"
|
257
|
+
|
258
|
+
reloaded = duplicate_record.class.get(*duplicate_record.key)
|
259
|
+
|
260
|
+
duplicate_record.class.properties.each do |prop|
|
261
|
+
reloaded[prop.name] = duplicate_record[prop.name]
|
262
|
+
end
|
263
|
+
|
264
|
+
reloaded
|
265
|
+
end
|
266
|
+
end
|
166
267
|
end
|
167
268
|
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'ncs_navigator/warehouse'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module NcsNavigator::Warehouse::Transformers
|
5
|
+
##
|
6
|
+
# Provides for in-memory reporting of foreign key violations during
|
7
|
+
# ETL runs.
|
8
|
+
#
|
9
|
+
# When FK constraint violations are delegated to the database, only
|
10
|
+
# one can be reported per ETL execution. This class (or one like it)
|
11
|
+
# allows for all foreign key violations to be reported across an
|
12
|
+
# entire run.
|
13
|
+
#
|
14
|
+
# @see Configuration#foreign_key_index
|
15
|
+
class ForeignKeyIndex
|
16
|
+
autoload :DatabaseKeyProvider, 'ncs_navigator/warehouse/transformers/foreign_key_index/database_key_provider'
|
17
|
+
autoload :StaticKeyProvider, 'ncs_navigator/warehouse/transformers/foreign_key_index/static_key_provider'
|
18
|
+
|
19
|
+
##
|
20
|
+
# The object that will be used to pre-initialize the known keys list for
|
21
|
+
# a particular model. It has a single method (`existing_keys`) which takes
|
22
|
+
# a single argument, the model class for which keys should be provided, and
|
23
|
+
# returns an array of the known keys for that model.
|
24
|
+
#
|
25
|
+
# `existing_keys` will be called at most once for each model class. It will
|
26
|
+
# be called the first time either a record of the model's type is
|
27
|
+
# encountered or the first time a foreign key of the model's type is
|
28
|
+
# encountered.
|
29
|
+
#
|
30
|
+
# @return [#existing_keys]
|
31
|
+
attr_reader :existing_key_provider
|
32
|
+
|
33
|
+
##
|
34
|
+
# @param [Hash<Symbol, Object>] options
|
35
|
+
# @option options [#existing_keys] :existing_key_provider (an instance of DatabaseKeyProvider)
|
36
|
+
# See {#existing_key_provider} for more information.
|
37
|
+
def initialize(options={})
|
38
|
+
@existing_key_provider = if options.has_key?(:existing_key_provider)
|
39
|
+
options[:existing_key_provider] || StaticKeyProvider.new # empty if nil
|
40
|
+
else
|
41
|
+
DatabaseKeyProvider.new
|
42
|
+
end
|
43
|
+
@seen_keys = {}
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# Records the key for this record in the index and verifies its
|
48
|
+
# foreign keys. If any are not satisfied, they will be stored for
|
49
|
+
# later evaluation.
|
50
|
+
#
|
51
|
+
# @param [DataMapper::Resource] record the record whose key we
|
52
|
+
# want to record and whose foreign references we want to verify.
|
53
|
+
# @return [void]
|
54
|
+
def record_and_verify(record)
|
55
|
+
seen_keys(record.class) << record.key.first # no CPKs in MDES
|
56
|
+
|
57
|
+
record.class.relationships.each do |belongs_to|
|
58
|
+
verify_relationship(record, belongs_to)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Reviews any references that initially failed against the final
|
64
|
+
# set of keys. If any are still unresolveable, it records errors
|
65
|
+
# against the provided transform status.
|
66
|
+
#
|
67
|
+
# Each failed reference will be reported by this method only
|
68
|
+
# once. This is so that it is safe to share a single instance of
|
69
|
+
# this class across multiple transformers, reporting only the
|
70
|
+
# newly encountered errors for each transform in turn.
|
71
|
+
#
|
72
|
+
# @return [void]
|
73
|
+
# @param [TransformStatus] transform_status
|
74
|
+
def report_errors(transform_status)
|
75
|
+
interim_unsatisfied.each do |relationship_instance|
|
76
|
+
if !seen?(relationship_instance.foreign_model, relationship_instance.reference_value)
|
77
|
+
transform_status.transform_errors << relationship_instance.create_error
|
78
|
+
end
|
79
|
+
end
|
80
|
+
interim_unsatisfied.clear
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# @return [Boolean] has the index seen a record of the given type with the
|
85
|
+
# given ID.
|
86
|
+
def seen?(model_class, id)
|
87
|
+
seen_keys(model_class).include?(id)
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def verify_relationship(record, belongs_to)
|
93
|
+
reference_name = belongs_to.child_key.first.name
|
94
|
+
reference_value = record.send(reference_name)
|
95
|
+
foreign_model = belongs_to.parent_model.to_s
|
96
|
+
|
97
|
+
if reference_value && !seen?(foreign_model, reference_value)
|
98
|
+
interim_unsatisfied << RelationshipInstance.new(
|
99
|
+
record.id, record.class.to_s, foreign_model, reference_name, reference_value
|
100
|
+
)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def seen_keys(model_class)
|
105
|
+
@seen_keys[model_class.to_s] ||= begin
|
106
|
+
existing_keys = existing_key_provider.existing_keys(model_class) || []
|
107
|
+
Set.new(existing_keys)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def interim_unsatisfied
|
112
|
+
@interim_unsatisfied ||= []
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# @private
|
117
|
+
class RelationshipInstance < Struct.new(:record_id, :model_class, :foreign_model, :reference_key, :reference_value)
|
118
|
+
def create_error
|
119
|
+
NcsNavigator::Warehouse::TransformError.new(
|
120
|
+
:record_id => record_id, :model_class => model_class,
|
121
|
+
:message => "Unsatisfied foreign key #{reference_key}=#{reference_value} referencing #{foreign_model}."
|
122
|
+
)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'ncs_navigator/warehouse'
|
2
|
+
|
3
|
+
module NcsNavigator::Warehouse::Transformers
|
4
|
+
class ForeignKeyIndex
|
5
|
+
##
|
6
|
+
# Provides existing key lists out of the configured DataMapper "working"
|
7
|
+
# repo.
|
8
|
+
class DatabaseKeyProvider
|
9
|
+
def existing_keys(model_class)
|
10
|
+
::DataMapper.repository(:mdes_warehouse_working).adapter.select(
|
11
|
+
"SELECT #{model_class.key.first.name} FROM #{model_class.mdes_table_name}"
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'ncs_navigator/warehouse'
|
2
|
+
|
3
|
+
module NcsNavigator::Warehouse::Transformers
|
4
|
+
class ForeignKeyIndex
|
5
|
+
##
|
6
|
+
# An existing key provider for {ForeignKeyIndex} that uses a statically
|
7
|
+
# configured hash of keys.
|
8
|
+
class StaticKeyProvider
|
9
|
+
attr_accessor :known_keys
|
10
|
+
|
11
|
+
def initialize(known_keys={})
|
12
|
+
@known_keys = known_keys
|
13
|
+
end
|
14
|
+
|
15
|
+
def existing_keys(model_class)
|
16
|
+
known_keys[model_class.to_s]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module NcsNavigator::Warehouse::Transformers::Sql
|
2
|
+
grammar SqlStatements
|
3
|
+
rule script
|
4
|
+
stmts:(stmt:statement ';')* last_stmt:statement? {
|
5
|
+
def statements
|
6
|
+
(stmts + [last_stmt]).collect { |s| s.text_value.strip }.reject { |s| s.empty? }
|
7
|
+
end
|
8
|
+
|
9
|
+
def stmts
|
10
|
+
super.elements.map { |e| e.stmt }
|
11
|
+
end
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
rule statement
|
16
|
+
(sql_string / other_expression)+
|
17
|
+
end
|
18
|
+
|
19
|
+
rule other_expression
|
20
|
+
[^';]+
|
21
|
+
end
|
22
|
+
|
23
|
+
rule sql_string
|
24
|
+
"'" (!"'" .)* "'"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'ncs_navigator/warehouse'
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
require 'treetop'
|
5
|
+
|
6
|
+
module NcsNavigator::Warehouse::Transformers
|
7
|
+
##
|
8
|
+
# A transformer that executes raw SQL (most likely INSERTs or UPDATEs) on the
|
9
|
+
# warehouse working database during ETL. It captures and reports affected
|
10
|
+
# record counts and errors.
|
11
|
+
class SqlTransformer
|
12
|
+
class << self
|
13
|
+
##
|
14
|
+
# Splits a string into separate SQL statements on semicolons. It attempts
|
15
|
+
# to avoid splitting on semicolons that are in string literals, though it
|
16
|
+
# only currently supports standard SQL string literals completely. It will
|
17
|
+
# not properly handle PostgreSQL `E''` string literals that contain
|
18
|
+
# backslash-escaped single quotes.
|
19
|
+
def extract_statements(s)
|
20
|
+
Treetop.load File.expand_path('../sql/sql_statements.treetop', __FILE__)
|
21
|
+
|
22
|
+
parser = Sql::SqlStatementsParser.new
|
23
|
+
if result = parser.parse(s)
|
24
|
+
result.statements
|
25
|
+
else
|
26
|
+
fail "Parse failed: #{parser.failure_reason}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
extend Forwardable
|
32
|
+
|
33
|
+
def_delegators :@configuration, :shell, :log
|
34
|
+
attr_reader :statements, :name
|
35
|
+
|
36
|
+
##
|
37
|
+
# Creates a new SqlTransformer. You must provide at exactly one of the
|
38
|
+
# `:statements`, `:file`, or `:script` options. If you provide more than one
|
39
|
+
# the behavior of this transformer is undefined.
|
40
|
+
#
|
41
|
+
# @param [Configuration] configuration
|
42
|
+
# @param [Hash<Symbol, Object>] options
|
43
|
+
#
|
44
|
+
# @option options :statements [Array<String>] a list of SQL statements
|
45
|
+
# already separated into strings. These strings will be sent as-is to the
|
46
|
+
# database (no further processing).
|
47
|
+
# @option options :file [String] the name of a file from which to read
|
48
|
+
# semicolon-separated SQL statements. The file will be separated into
|
49
|
+
# statements using {.extract_statements}.
|
50
|
+
# @option options :script [String] a string containing semicolon-separated
|
51
|
+
# SQL statements. The string will be separated into statements using
|
52
|
+
# {.extract_statements}.
|
53
|
+
# @option options :name [String] the name to use when describing this
|
54
|
+
# transformer. A default will be generated if not provided.
|
55
|
+
# @option options :adapter [a datamapper adapter object] the adapter
|
56
|
+
# against which to `execute` the statements. The default is nearly always
|
57
|
+
# fine; this option is provided for testing.
|
58
|
+
def initialize(configuration, options={})
|
59
|
+
@configuration = configuration
|
60
|
+
@statements = select_statements(options)
|
61
|
+
@name = options.delete(:name) ||
|
62
|
+
"SQL Transformer with #{statements.size} statement#{statements.size == 1 ? '' : 's'}"
|
63
|
+
@adapter = options.delete(:adapter) || ::DataMapper.repository(:mdes_warehouse_working).adapter
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Executes the configured SQL statments, one at time, stopping at the first
|
68
|
+
# error.
|
69
|
+
#
|
70
|
+
# @return [void]
|
71
|
+
# @param [TransformStatus] transform_status
|
72
|
+
def transform(transform_status)
|
73
|
+
NcsNavigator::Warehouse::TransformStatus.transaction do |tx|
|
74
|
+
stmt_ct = statements.size
|
75
|
+
statements.each_with_index do |stmt, i|
|
76
|
+
log.debug("Executing SQL statement in SQL transformer: \n#{stmt}")
|
77
|
+
shell.clear_line_and_say("[#{name}] Executing statement #{i + 1}/#{stmt_ct}...")
|
78
|
+
begin
|
79
|
+
result = @adapter.execute(stmt)
|
80
|
+
transform_status.record_count += result.affected_rows
|
81
|
+
rescue Exception => e
|
82
|
+
transform_status.transform_errors << NcsNavigator::Warehouse::TransformError.
|
83
|
+
for_exception(e, "Exception while executing SQL statement \"#{stmt}\" (#{i + 1} of #{stmt_ct}).")
|
84
|
+
shell.clear_line_and_say("[#{name}] Failed on #{i + 1}/#{stmt_ct}.")
|
85
|
+
tx.rollback
|
86
|
+
return
|
87
|
+
end
|
88
|
+
end
|
89
|
+
shell.clear_line_and_say("[#{name}] Executed #{stmt_ct} SQL statement#{stmt_ct == 1 ? '' : 's'}.")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def select_statements(options)
|
96
|
+
if options[:statements]
|
97
|
+
options[:statements]
|
98
|
+
elsif options[:script]
|
99
|
+
self.class.extract_statements(options[:script])
|
100
|
+
elsif options[:file]
|
101
|
+
self.class.extract_statements(File.read(options[:file]))
|
102
|
+
else
|
103
|
+
fail "One of :file, :script, or :statements must be specified."
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|