conceptql 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +208 -27
- data/LICENSE +21 -0
- data/README.md +28 -98
- data/bin/conceptql +2 -1
- data/bin/conceptql_utils +6 -0
- data/config/multiple_vocabularies.csv +4 -0
- data/config/provenance.yml +471 -436
- data/config/race.yml +50 -0
- data/config/vocabularies.csv +87 -0
- data/lib/conceptql/behaviors/code_lister.rb +23 -0
- data/lib/conceptql/behaviors/drugish.rb +13 -8
- data/lib/conceptql/behaviors/labish.rb +15 -9
- data/lib/conceptql/behaviors/metadatable.rb +102 -34
- data/lib/conceptql/behaviors/provenanceable.rb +15 -19
- data/lib/conceptql/behaviors/single_event.rb +11 -0
- data/lib/conceptql/behaviors/timeless.rb +11 -0
- data/lib/conceptql/behaviors/utilizable.rb +206 -0
- data/lib/conceptql/behaviors/windowable.rb +27 -0
- data/lib/conceptql/cli.rb +99 -134
- data/lib/conceptql/columnizer.rb +75 -0
- data/lib/conceptql/data_model/base.rb +462 -0
- data/lib/conceptql/data_model/gdm.rb +155 -0
- data/lib/conceptql/data_model/gdm_wide.rb +42 -0
- data/lib/conceptql/data_model/omopv4_plus.rb +12 -0
- data/lib/conceptql/data_model.rb +30 -0
- data/lib/conceptql/database.rb +195 -23
- data/lib/conceptql/date_adjuster.rb +57 -27
- data/lib/conceptql/diagram.rb +243 -0
- data/lib/conceptql/lexicon/lexicon_gdm.rb +47 -0
- data/lib/conceptql/lexicon/lexicon_no_db.rb +49 -0
- data/lib/conceptql/lexicon/lexicon_ohdsi.rb +63 -0
- data/lib/conceptql/lexicon/lexicon_strategy.rb +116 -0
- data/lib/conceptql/lexicon.rb +111 -0
- data/lib/conceptql/nodifier.rb +45 -15
- data/lib/conceptql/operators/after.rb +24 -21
- data/lib/conceptql/operators/any_overlap.rb +6 -6
- data/lib/conceptql/operators/before.rb +24 -16
- data/lib/conceptql/operators/binary_operator_operator.rb +52 -13
- data/lib/conceptql/operators/casting_operator.rb +24 -17
- data/lib/conceptql/operators/co_reported.rb +78 -9
- data/lib/conceptql/operators/concurrent_within.rb +29 -17
- data/lib/conceptql/operators/contains.rb +9 -9
- data/lib/conceptql/operators/count.rb +9 -9
- data/lib/conceptql/operators/date_range.rb +40 -18
- data/lib/conceptql/operators/death.rb +10 -2
- data/lib/conceptql/operators/dedup.rb +31 -0
- data/lib/conceptql/operators/during.rb +5 -12
- data/lib/conceptql/operators/episode.rb +146 -0
- data/lib/conceptql/operators/equal.rb +6 -3
- data/lib/conceptql/operators/ethnicity.rb +49 -0
- data/lib/conceptql/operators/except.rb +15 -20
- data/lib/conceptql/operators/filter.rb +20 -8
- data/lib/conceptql/operators/first.rb +14 -3
- data/lib/conceptql/operators/from.rb +33 -12
- data/lib/conceptql/operators/gender.rb +27 -11
- data/lib/conceptql/operators/hospice.rb +19 -0
- data/lib/conceptql/operators/hospitalization.rb +19 -0
- data/lib/conceptql/operators/information_periods.rb +36 -0
- data/lib/conceptql/operators/invalid.rb +4 -5
- data/lib/conceptql/operators/last.rb +14 -3
- data/lib/conceptql/operators/match.rb +91 -0
- data/lib/conceptql/operators/multiple_vocabularies.rb +172 -0
- data/lib/conceptql/operators/numeric.rb +52 -29
- data/lib/conceptql/operators/numeric_filter.rb +68 -0
- data/lib/conceptql/operators/occurrence.rb +133 -48
- data/lib/conceptql/operators/one_in_two_out.rb +198 -62
- data/lib/conceptql/operators/operator.rb +321 -408
- data/lib/conceptql/operators/pass_thru.rb +9 -5
- data/lib/conceptql/operators/person.rb +12 -2
- data/lib/conceptql/operators/person_filter.rb +5 -3
- data/lib/conceptql/operators/place_of_service_filter.rb +11 -15
- data/lib/conceptql/operators/provenance.rb +25 -36
- data/lib/conceptql/operators/provider_filter.rb +40 -14
- data/lib/conceptql/operators/race.rb +48 -7
- data/lib/conceptql/operators/read.rb +77 -58
- data/lib/conceptql/operators/recall.rb +20 -20
- data/lib/conceptql/operators/snf.rb +19 -0
- data/lib/conceptql/operators/sum.rb +23 -12
- data/lib/conceptql/operators/temporal_operator.rb +80 -54
- data/lib/conceptql/operators/time_window.rb +13 -15
- data/lib/conceptql/operators/trim_date.rb +71 -0
- data/lib/conceptql/operators/trim_date_end.rb +20 -40
- data/lib/conceptql/operators/trim_date_start.rb +20 -43
- data/lib/conceptql/operators/union.rb +59 -35
- data/lib/conceptql/operators/vocabulary.rb +151 -0
- data/lib/conceptql/paths.rb +41 -0
- data/lib/conceptql/query.rb +165 -46
- data/lib/conceptql/query_modifiers/gdm/admission_date_query_modifier.rb +46 -0
- data/lib/conceptql/query_modifiers/gdm/drug_query_modifier.rb +54 -0
- data/lib/conceptql/query_modifiers/gdm/lab_query_modifier.rb +57 -0
- data/lib/conceptql/query_modifiers/gdm/pos_query_modifier.rb +46 -0
- data/lib/conceptql/query_modifiers/gdm/provenance_query_modifier.rb +45 -0
- data/lib/conceptql/query_modifiers/gdm/provider_query_modifier.rb +53 -0
- data/lib/conceptql/query_modifiers/gdm_wide/admission_date_query_modifier.rb +42 -0
- data/lib/conceptql/query_modifiers/gdm_wide/drug_query_modifier.rb +52 -0
- data/lib/conceptql/query_modifiers/gdm_wide/lab_query_modifier.rb +55 -0
- data/lib/conceptql/query_modifiers/gdm_wide/pos_query_modifier.rb +37 -0
- data/lib/conceptql/query_modifiers/gdm_wide/provenance_query_modifier.rb +38 -0
- data/lib/conceptql/query_modifiers/omopv4_plus/admission_date_query_modifier.rb +45 -0
- data/lib/conceptql/query_modifiers/omopv4_plus/drug_query_modifier.rb +80 -0
- data/lib/conceptql/query_modifiers/omopv4_plus/pos_query_modifier.rb +47 -0
- data/lib/conceptql/query_modifiers/omopv4_plus/provenance_query_modifier.rb +45 -0
- data/lib/conceptql/query_modifiers/omopv4_plus/provider_query_modifier.rb +26 -0
- data/lib/conceptql/query_modifiers/query_modifier.rb +6 -2
- data/lib/conceptql/rdbms/duckdb.rb +25 -0
- data/lib/conceptql/rdbms/generic.rb +120 -0
- data/lib/conceptql/rdbms/postgres.rb +51 -0
- data/lib/conceptql/rdbms/spark.rb +22 -0
- data/lib/conceptql/rdbms.rb +22 -0
- data/lib/conceptql/scope.rb +353 -41
- data/lib/conceptql/sql_formatters/formatter.rb +25 -0
- data/lib/conceptql/sql_formatters.rb +22 -0
- data/lib/conceptql/utils.rb +113 -0
- data/lib/conceptql/utils_cli.rb +17 -0
- data/lib/conceptql/version.rb +3 -1
- data/lib/conceptql/visitors/metadata_extractor.rb +54 -0
- data/lib/conceptql/vocabularies/behaviors/costish.rb +24 -0
- data/lib/conceptql/vocabularies/behaviors/gdmish.rb +19 -0
- data/lib/conceptql/vocabularies/behaviors/omopish.rb +32 -0
- data/lib/conceptql/vocabularies/dynamic_vocabularies.rb +63 -0
- data/lib/conceptql/vocabularies/entry.rb +138 -0
- data/lib/conceptql/vocabularies/vocabulary_class_factory.rb +85 -0
- data/lib/conceptql/window/base.rb +26 -0
- data/lib/conceptql/window/date_range.rb +25 -0
- data/lib/conceptql/window/table.rb +116 -0
- data/lib/conceptql/window.rb +72 -0
- data/lib/conceptql.rb +53 -10
- data/lib/sequel/extensions/pg_ctas_explain.rb +22 -0
- data/lib/sequel/extensions/pg_vacuum_table.rb +23 -0
- data/schemas/gdm.yml +882 -0
- data/schemas/gdm_wide.yml +757 -0
- data/schemas/ohdsi_vocabs.yml +143 -0
- data/schemas/omopv4_plus.yml +729 -0
- data/schemas/omopv4_plus_more_ignorables.tsv +13 -0
- metadata +262 -2068
- data/.gitignore +0 -25
- data/Gemfile +0 -6
- data/Guardfile +0 -56
- data/LICENSE.txt +0 -22
- data/Rakefile +0 -35
- data/conceptql.gemspec +0 -31
- data/doc/ConceptQL Specification (alpha).pdf +0 -0
- data/doc/converter.rb +0 -33
- data/doc/diagram_0.png +0 -0
- data/doc/implementation_notes.md +0 -39
- data/doc/metadata.md +0 -89
- data/doc/spec/02f44ad35d266ddd0a4df1691d26bf4a297b30604fc3f44b0391d6d852d23a9f.png +0 -0
- data/doc/spec/0360fc0c2b7a88fd82ffc4d13387b76766649d5d42aa8f9349bbf60a81ac6119.png +0 -0
- data/doc/spec/04491942fcbd741982514f9eb12aeecf3d54b5b69a2b50c8331f7700169d5521.png +0 -0
- data/doc/spec/05f9b844571ffceeed2def3025fb60c68552817b8b73d3c8a76939dbc08b7c65.png +0 -0
- data/doc/spec/067241a3579767a802d4f8e20fd35b60adbe377c9a6512ef135f164a5accfb27.png +0 -0
- data/doc/spec/1102fa717b1c2df67af5220bf3ae219afafd79be7bba0c117e301983385ada52.png +0 -0
- data/doc/spec/11f57941951bad5a75f9a16f38a31a3c6bf3046a475aac6e398e780892fab4ad.png +0 -0
- data/doc/spec/15268bc45993d3f57ccf915877f91e48bdee684f24faa614249915833cac4af9.png +0 -0
- data/doc/spec/253845fe6162621af407ebd110296ff4f6d8a3f23ec75dfb4ea8cda30be71262.png +0 -0
- data/doc/spec/26fd52b5ac55438dd9f81b4a3f3913f1058c9f225c8a5e129007c1e9413d5881.png +0 -0
- data/doc/spec/2b57886a9cba66bb696e4b399c51ad0dc95cd64b952709fafc819a79d573f09e.png +0 -0
- data/doc/spec/307a8b5a7edd6e42f8be16523a4c939faf1a0533385c861d7004b6af8addd7d1.png +0 -0
- data/doc/spec/328467a6a419c7c05e299b8097e5e000686068ded8dc6d5f2e2de6f51976c315.png +0 -0
- data/doc/spec/39d6a8eb71cae51b1d6937c97134e51f04fd47c54535ff0915fe6a8b4f197fb2.png +0 -0
- data/doc/spec/3f46dee4d775d1a29d52b68af6552f8ea3abd8303094e749714fc77bd7958155.png +0 -0
- data/doc/spec/44ec6743d5d77d15b8a487c2058bf3e455d34adc91c46ea05767f6e0e471a75e.png +0 -0
- data/doc/spec/462153be527b28dc2cb5259c0aec62e1f529e8b60dc6e9c23fd1e06e8be933c9.png +0 -0
- data/doc/spec/4a3b47ed1c54f96ebdae693d41c36c51884c4546ef799a4108085708fb7b964e.png +0 -0
- data/doc/spec/514f263e976d07c0d9e0a86c79bcbdcddc7d444d7b72135294ad78758effd28f.png +0 -0
- data/doc/spec/58113a57a37431a402d2547369eba3a481bf1dbbfd82dc384406a5c91f6df01f.png +0 -0
- data/doc/spec/5d331d74c460d75814b2d3138a9b7d90b5ddb2dcd85e1f5f260d183745fc3a1e.png +0 -0
- data/doc/spec/5d6ff62038b75d6f240d65f35d1520a131c221f47d3801554c8c2be5d528ebb0.png +0 -0
- data/doc/spec/62323426e381ec21c967971a67e1f4a6d89dae92154bd937284e00b67f67fdd3.png +0 -0
- data/doc/spec/6705af65d728c0d5c50d6c4d46253017a91eb459dbb1f40f92449f05d5562f4a.png +0 -0
- data/doc/spec/68fac940a32c7e40caacf8e560c61da552d57633d015ba98f2e98ec040a00c5b.png +0 -0
- data/doc/spec/6a34c0ef589c9c976fe41f3e67e799e198499f5b9c3ebfd240fb91f73e893573.png +0 -0
- data/doc/spec/6b48534236697d1ccfa1f5403764782f9d228f9eb706789cfa80203882b7b13a.png +0 -0
- data/doc/spec/7aa76b4d29874719466c2cbafc9936e9f12e504bf31e1a09d26ca3fffa8ba1a6.png +0 -0
- data/doc/spec/7b9db2986ab9ada45cfb9451ef87ff1a2d99c908083334b7ccdceb8a92387fa9.png +0 -0
- data/doc/spec/8101d9b89d9ba8070d585432707b43a8acdb4c2a3e9d37c3f7114b5e3ea9e800.png +0 -0
- data/doc/spec/886bf85249a704668a55c5161bceaac10be4a41a94b91606f49851dfa017526c.png +0 -0
- data/doc/spec/8ed478d8c81a58a202d0c51348fca246df206fc24a0567b163d4e0bdab56ca46.png +0 -0
- data/doc/spec/9139440329dcb815df89bc70182c3827868402a74ff64d0253706dcaff723dca.png +0 -0
- data/doc/spec/99392f56dfb0e5be3f45a12a7f1ba846d094e430f526dfeaa30b606837cd34c0.png +0 -0
- data/doc/spec/a4450e8c0fe0e2fde92fe9bd61952f907b1976c1aa3ba963b809bed079d42b09.png +0 -0
- data/doc/spec/a4bc7382a1154ea9856544fd48418f3dd9ce474ca94b8859fc323749c6cc1f55.png +0 -0
- data/doc/spec/a79274742cf6fac6f6c9f4a0eb651aeb452f9c43b537c8e6ccaefecd05b7105c.png +0 -0
- data/doc/spec/a9b4528726adec2a90f3f00139d8d0492f13c51f03c2f9ed6a5134b1b26b44a9.png +0 -0
- data/doc/spec/af5ae3787e80bf0771f18f1a04fe4c5d9291e1e0f963ac408a7bc198d2f1ee28.png +0 -0
- data/doc/spec/ba572c4f4dbade65be55f141df16cf7b3e7d09e0aec4e4e5debc4f2075277371.png +0 -0
- data/doc/spec/ba90ef705f7be91c53c5eb4a81a439fa0f7c48532214bd3db3cc5c069160543e.png +0 -0
- data/doc/spec/c1d0402862221d85aceedc7d76b3f82149b612cbd972f14d0ca9011e1e2c455c.png +0 -0
- data/doc/spec/c2157d8a6b73abe4f22ba5042159f32502c74bf6d762be28d2df6831586822c7.png +0 -0
- data/doc/spec/c5329a7f4937096a57b2e01efb9d542f84a4e2329a1e9381d08c630583ccad37.png +0 -0
- data/doc/spec/c82077b9455d0f9abc2c45ee1a298e38b99c9ce9cd685f65d87b376d7718d7ad.png +0 -0
- data/doc/spec/c93dd18894a245a5647f99e1867d3779e4cd34c9c8f8860600ff0c837a5ffa53.png +0 -0
- data/doc/spec/cc960a268d51ccf2ebde657d36848f780213834844900018bce3d111843f7b0f.png +0 -0
- data/doc/spec/d39452b58257c95a7cba07afed4877417b0c227f3690e2bff22c9eca89eac845.png +0 -0
- data/doc/spec/d64993258ffbef9406d9ab9136de7af530626b3a69e9eeb75835e11f11dabf62.png +0 -0
- data/doc/spec/da450cdd0c94a1301bd98560339a45caa8041e09974352a56ecfb144e9a5e4d4.png +0 -0
- data/doc/spec/dbc66b3ae6bd7123d77dd04b64f8a24498d048725a55c5340b15f5ae0a1ff307.png +0 -0
- data/doc/spec/de589af36fa854e006a1563c93e644e2210f2a5616babb779f7f38aadb6c1ed7.png +0 -0
- data/doc/spec/defbd0b853d895802663f507761ad297d82e167f516c6082686a2a19b76012c5.png +0 -0
- data/doc/spec/e1cb0863b21e14256d61a54200316791f6547c78ba2f0156c110f4500f9bbd49.png +0 -0
- data/doc/spec/e8630103287f7c9d28eff40b3b1826e24846e776b877f7b8554257acbe621e1c.png +0 -0
- data/doc/spec/e9b384fa7dec5f1a06479c4b289e06b1e60e4f23f7630aff6d03c52595f500f8.png +0 -0
- data/doc/spec/ea935ac31f3b57ff373646780a1fba34a38c9e086dc771eb7fc16c65a7e20cfc.png +0 -0
- data/doc/spec/eb8f5511f7d88bd0f8ba73420fc10f7c78405db7f4373d778a827058707f888e.png +0 -0
- data/doc/spec/ebacbd092e3d1a3c7b745a381e51e8ff9d63a21db23a16940193e18e57bc866f.png +0 -0
- data/doc/spec/ed039f82867241393b1a6a7153d3690461103934c72c1f3eaa3d99a12bb40885.png +0 -0
- data/doc/spec/ee283d6a4b69cf10da2df703be3a16830be9cd8cd4f68c5f7afdf558ea28fa76.png +0 -0
- data/doc/spec/f0c734b099841a754ae0366afb00e992ad4814479b65e4a7de23c6e3dd85c09a.png +0 -0
- data/doc/spec/f6b4fc31703cfb6327bbbd4614af8bb72da6d39fa3d53ada63a70157f2fad80e.png +0 -0
- data/doc/spec/f766f2e3aa13420e3ba0f823ac7956b311ed7c6c20be26b72324fadd87f36712.png +0 -0
- data/doc/spec/ff7d5b5573d09bd7c4cdd3aeda124d18bf82ec46673a62881b399a75d69f3f53.png +0 -0
- data/doc/spec.md +0 -2258
- data/doc/spec.md.cql +0 -1930
- data/lib/conceptql/annotate_grapher.rb +0 -127
- data/lib/conceptql/fake_annotater.rb +0 -129
- data/lib/conceptql/knitter.rb +0 -221
- data/lib/conceptql/logger.rb +0 -10
- data/lib/conceptql/operators/complement.rb +0 -43
- data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator.rb +0 -34
- data/lib/conceptql/operators/condition_occurrence_source_vocabulary_operator_union.rb +0 -28
- data/lib/conceptql/operators/condition_type.rb +0 -79
- data/lib/conceptql/operators/cpt.rb +0 -28
- data/lib/conceptql/operators/cpt_or_hcpcs.rb +0 -27
- data/lib/conceptql/operators/drg.rb +0 -42
- data/lib/conceptql/operators/drug_type_concept.rb +0 -30
- data/lib/conceptql/operators/from_seer_visits.rb +0 -29
- data/lib/conceptql/operators/hcpcs.rb +0 -28
- data/lib/conceptql/operators/icd10.rb +0 -19
- data/lib/conceptql/operators/icd10_pcs.rb +0 -28
- data/lib/conceptql/operators/icd9.rb +0 -19
- data/lib/conceptql/operators/icd9_procedure.rb +0 -28
- data/lib/conceptql/operators/intersect.rb +0 -39
- data/lib/conceptql/operators/loinc.rb +0 -28
- data/lib/conceptql/operators/medcode.rb +0 -17
- data/lib/conceptql/operators/medcode_procedure.rb +0 -28
- data/lib/conceptql/operators/ndc.rb +0 -32
- data/lib/conceptql/operators/observation_by_enttype.rb +0 -32
- data/lib/conceptql/operators/observation_period.rb +0 -32
- data/lib/conceptql/operators/overlapped_by.rb +0 -26
- data/lib/conceptql/operators/overlaps.rb +0 -21
- data/lib/conceptql/operators/place_of_service_code.rb +0 -31
- data/lib/conceptql/operators/procedure_occurrence.rb +0 -27
- data/lib/conceptql/operators/prodcode.rb +0 -32
- data/lib/conceptql/operators/revenue_code.rb +0 -40
- data/lib/conceptql/operators/rxnorm.rb +0 -28
- data/lib/conceptql/operators/snomed.rb +0 -25
- data/lib/conceptql/operators/source_vocabulary_operator.rb +0 -88
- data/lib/conceptql/operators/standard_vocabulary_operator.rb +0 -66
- data/lib/conceptql/operators/started_by.rb +0 -23
- data/lib/conceptql/operators/to_seer_visits.rb +0 -29
- data/lib/conceptql/operators/visit_occurrence.rb +0 -32
- data/lib/conceptql/operators/vocabulary_operator.rb +0 -45
- data/lib/conceptql/query_modifiers/drug_query_modifier.rb +0 -45
- data/lib/conceptql/query_modifiers/pos_query_modifier.rb +0 -31
- data/lib/conceptql/sql_formatter.rb +0 -22
- data/test/all.rb +0 -3
- data/test/all_operations_test.rb +0 -45
- data/test/code_list_test.rb +0 -23
- data/test/data/omopv4/care_site.csv +0 -0
- data/test/data/omopv4/cohort.csv +0 -0
- data/test/data/omopv4/condition_era.csv +0 -0
- data/test/data/omopv4/condition_occurrence.csv +0 -34044
- data/test/data/omopv4/death.csv +0 -1
- data/test/data/omopv4/drug_cost.csv +0 -0
- data/test/data/omopv4/drug_era.csv +0 -0
- data/test/data/omopv4/drug_exposure.csv +0 -2
- data/test/data/omopv4/location.csv +0 -0
- data/test/data/omopv4/observation.csv +0 -2
- data/test/data/omopv4/observation_period.csv +0 -1
- data/test/data/omopv4/organization.csv +0 -0
- data/test/data/omopv4/payer_plan_period.csv +0 -0
- data/test/data/omopv4/person.csv +0 -250
- data/test/data/omopv4/procedure_cost.csv +0 -0
- data/test/data/omopv4/procedure_occurrence.csv +0 -35099
- data/test/data/omopv4/provider.csv +0 -0
- data/test/data/omopv4/visit_occurrence.csv +0 -14931
- data/test/data/omopv4_plus/care_site.csv +0 -0
- data/test/data/omopv4_plus/cohort.csv +0 -0
- data/test/data/omopv4_plus/concept.csv +0 -352
- data/test/data/omopv4_plus/condition_era.csv +0 -0
- data/test/data/omopv4_plus/condition_occurrence.csv +0 -46673
- data/test/data/omopv4_plus/death.csv +0 -9
- data/test/data/omopv4_plus/drug_cost.csv +0 -13921
- data/test/data/omopv4_plus/drug_era.csv +0 -0
- data/test/data/omopv4_plus/drug_exposure.csv +0 -13921
- data/test/data/omopv4_plus/headers/care_site.csv +0 -1
- data/test/data/omopv4_plus/headers/cohort.csv +0 -1
- data/test/data/omopv4_plus/headers/concept.csv +0 -1
- data/test/data/omopv4_plus/headers/condition_era.csv +0 -1
- data/test/data/omopv4_plus/headers/condition_occurrence.csv +0 -1
- data/test/data/omopv4_plus/headers/death.csv +0 -1
- data/test/data/omopv4_plus/headers/drug_cost.csv +0 -1
- data/test/data/omopv4_plus/headers/drug_era.csv +0 -1
- data/test/data/omopv4_plus/headers/drug_exposure.csv +0 -1
- data/test/data/omopv4_plus/headers/location.csv +0 -1
- data/test/data/omopv4_plus/headers/observation.csv +0 -1
- data/test/data/omopv4_plus/headers/observation_period.csv +0 -1
- data/test/data/omopv4_plus/headers/organization.csv +0 -1
- data/test/data/omopv4_plus/headers/payer_plan_period.csv +0 -1
- data/test/data/omopv4_plus/headers/person.csv +0 -1
- data/test/data/omopv4_plus/headers/procedure_cost.csv +0 -1
- data/test/data/omopv4_plus/headers/procedure_occurrence.csv +0 -1
- data/test/data/omopv4_plus/headers/provider.csv +0 -1
- data/test/data/omopv4_plus/headers/source_to_concept_map.csv +0 -1
- data/test/data/omopv4_plus/headers/visit_occurrence.csv +0 -1
- data/test/data/omopv4_plus/headers/vocabulary.csv +0 -1
- data/test/data/omopv4_plus/location.csv +0 -0
- data/test/data/omopv4_plus/observation.csv +0 -0
- data/test/data/omopv4_plus/observation_period.csv +0 -147
- data/test/data/omopv4_plus/organization.csv +0 -736
- data/test/data/omopv4_plus/payer_plan_period.csv +0 -808
- data/test/data/omopv4_plus/person.csv +0 -250
- data/test/data/omopv4_plus/procedure_cost.csv +0 -20123
- data/test/data/omopv4_plus/procedure_occurrence.csv +0 -27273
- data/test/data/omopv4_plus/provider.csv +0 -10193
- data/test/data/omopv4_plus/source_to_concept_map.csv +0 -285
- data/test/data/omopv4_plus/visit_occurrence.csv +0 -45125
- data/test/data/omopv4_plus/vocabulary.csv +0 -60
- data/test/db.rb +0 -15
- data/test/db_setup.rb +0 -408
- data/test/db_teardown.rb +0 -33
- data/test/fake_annotater_test.rb +0 -31
- data/test/helper.rb +0 -129
- data/test/knitter/conceptql.md.cql +0 -39
- data/test/knitter/conceptql.md.expect +0 -43
- data/test/knitter/empty.md.cql +0 -0
- data/test/knitter/except.md.cql +0 -13
- data/test/knitter/except.md.expect +0 -14
- data/test/knitter/fake.md.cql +0 -10
- data/test/knitter/fake.md.expect +0 -13
- data/test/knitter/many.md.cql +0 -7
- data/test/knitter/many.md.expect +0 -14
- data/test/knitter/no_conceptql.md.cql +0 -36
- data/test/knitter/title.md.cql +0 -12
- data/test/knitter/title.md.expect +0 -15
- data/test/knitter/union.md.cql +0 -11
- data/test/knitter/union.md.expect +0 -14
- data/test/knitter_test.rb +0 -69
- data/test/query_test.rb +0 -36
- data/test/results/omopv4/after/anno_1 +0 -25
- data/test/results/omopv4/after/anno_2 +0 -48
- data/test/results/omopv4/after/anno_3 +0 -34
- data/test/results/omopv4/after/anno_4 +0 -60
- data/test/results/omopv4/after/anno_5 +0 -68
- data/test/results/omopv4/after/anno_6 +0 -60
- data/test/results/omopv4/after/crit_at_least +0 -7
- data/test/results/omopv4/after/crit_basic +0 -32
- data/test/results/omopv4/after/crit_occurrences +0 -12
- data/test/results/omopv4/after/crit_within +0 -6
- data/test/results/omopv4/any_overlap/crit_basic1 +0 -15
- data/test/results/omopv4/any_overlap/crit_basic2 +0 -15
- data/test/results/omopv4/any_overlap/crit_occurrences1 +0 -2
- data/test/results/omopv4/any_overlap/crit_occurrences2 +0 -15
- data/test/results/omopv4/any_overlap/crit_within +0 -8
- data/test/results/omopv4/before/crit_at_least +0 -6
- data/test/results/omopv4/before/crit_basic1 +0 -48
- data/test/results/omopv4/before/crit_basic2 +0 -7
- data/test/results/omopv4/before/crit_occurrences +0 -13
- data/test/results/omopv4/before/crit_within +0 -18
- data/test/results/omopv4/co_reported/anno_1 +0 -43
- data/test/results/omopv4/co_reported/anno_2 +0 -66
- data/test/results/omopv4/complement/anno_duplicate_params +0 -52
- data/test/results/omopv4/complement/anno_invalid_params +0 -37
- data/test/results/omopv4/complement/anno_no_params +0 -18
- data/test/results/omopv4/complement/count_3way_intersect +0 -4
- data/test/results/omopv4/complement/count_3way_union +0 -4
- data/test/results/omopv4/complement/count_intersect +0 -3
- data/test/results/omopv4/complement/count_union +0 -3
- data/test/results/omopv4/complement/count_union_and_intersect +0 -4
- data/test/results/omopv4/complement/crit_3way_intersect +0 -1
- data/test/results/omopv4/complement/crit_3way_union +0 -1
- data/test/results/omopv4/complement/crit_basic1 +0 -33998
- data/test/results/omopv4/complement/crit_icd9_selector +0 -54
- data/test/results/omopv4/complement/crit_intersect +0 -1
- data/test/results/omopv4/complement/crit_union +0 -1
- data/test/results/omopv4/complement/crit_union_and_intersect +0 -1
- data/test/results/omopv4/complex/anno_1 +0 -85
- data/test/results/omopv4/complex/crit_1 +0 -2
- data/test/results/omopv4/complex/crit_2 +0 -2
- data/test/results/omopv4/complex/crit_3 +0 -2
- data/test/results/omopv4/complex/crit_4 +0 -5
- data/test/results/omopv4/complex/crit_5 +0 -6
- data/test/results/omopv4/complex/crit_6 +0 -28
- data/test/results/omopv4/complex/crit_7 +0 -46
- data/test/results/omopv4/complex/crit_out_of_order_ctes +0 -7
- data/test/results/omopv4/complex/scanno_1 +0 -3
- data/test/results/omopv4/concurrent_within/crit_icd9 +0 -54
- data/test/results/omopv4/concurrent_within/crit_icd9_and_place_of_service +0 -23
- data/test/results/omopv4/concurrent_within/crit_negative_start +0 -5
- data/test/results/omopv4/condition_type/anno_icd9 +0 -39
- data/test/results/omopv4/condition_type/count_condition_era +0 -2
- data/test/results/omopv4/condition_type/count_condition_era_30_day_window +0 -2
- data/test/results/omopv4/condition_type/count_ehr_problem_list +0 -2
- data/test/results/omopv4/condition_type/count_era_0 +0 -2
- data/test/results/omopv4/condition_type/count_inpatient +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_detail +0 -2
- data/test/results/omopv4/condition_type/count_inpatient_header +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_header_2 +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_header_3 +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_header_4 +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_header_5 +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_outpatient_detail +0 -3
- data/test/results/omopv4/condition_type/count_inpatient_primary +0 -2
- data/test/results/omopv4/condition_type/count_inpatient_primary_or_first +0 -3
- data/test/results/omopv4/condition_type/count_outpatient +0 -3
- data/test/results/omopv4/condition_type/count_outpatient_detail +0 -3
- data/test/results/omopv4/condition_type/count_outpatient_header +0 -2
- data/test/results/omopv4/condition_type/count_outpatient_primary +0 -3
- data/test/results/omopv4/condition_type/count_primary +0 -3
- data/test/results/omopv4/condition_type/crit_condition_era +0 -1
- data/test/results/omopv4/condition_type/crit_condition_era_30_day_window +0 -1
- data/test/results/omopv4/condition_type/crit_ehr_problem_list +0 -1
- data/test/results/omopv4/condition_type/crit_era_0 +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_detail +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_header +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_header_2 +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_header_3 +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_header_4 +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_header_5 +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_primary +0 -1
- data/test/results/omopv4/condition_type/crit_inpatient_primary_or_first +0 -1
- data/test/results/omopv4/condition_type/crit_outpatient +0 -1
- data/test/results/omopv4/condition_type/crit_outpatient_detail +0 -1
- data/test/results/omopv4/condition_type/crit_outpatient_header +0 -1
- data/test/results/omopv4/condition_type/crit_outpatient_primary +0 -1
- data/test/results/omopv4/condition_type/crit_primary +0 -1
- data/test/results/omopv4/contains/crit_1 +0 -5
- data/test/results/omopv4/contains/crit_2 +0 -2
- data/test/results/omopv4/contains/crit_3 +0 -2
- data/test/results/omopv4/count/anno_multiple_upstreams +0 -52
- data/test/results/omopv4/count/anno_no_upstream1 +0 -18
- data/test/results/omopv4/count/anno_no_upstream2 +0 -25
- data/test/results/omopv4/count/crit_icd9_ndc +0 -8
- data/test/results/omopv4/count/crit_ndc +0 -5
- data/test/results/omopv4/count/crit_person +0 -254
- data/test/results/omopv4/cpt/anno_icd9_upstream +0 -40
- data/test/results/omopv4/cpt/anno_invalid_code +0 -22
- data/test/results/omopv4/cpt/count_1 +0 -3
- data/test/results/omopv4/cpt/crit_1 +0 -174
- data/test/results/omopv4/cpt/crit_2 +0 -1
- data/test/results/omopv4/cpt/scanno_1 +0 -17
- data/test/results/omopv4/cpt_or_hcpcs/anno_bad_format +0 -25
- data/test/results/omopv4/cpt_or_hcpcs/count_1 +0 -3
- data/test/results/omopv4/cpt_or_hcpcs/crit_1 +0 -179
- data/test/results/omopv4/cpt_or_hcpcs/crit_2 +0 -1
- data/test/results/omopv4/date_range/anno_1 +0 -15
- data/test/results/omopv4/date_range/anno_extra_argument +0 -24
- data/test/results/omopv4/date_range/anno_invalid_argument +0 -25
- data/test/results/omopv4/date_range/anno_missing_argument1 +0 -20
- data/test/results/omopv4/date_range/anno_missing_argument2 +0 -20
- data/test/results/omopv4/date_range/anno_no_upstreams +0 -38
- data/test/results/omopv4/date_range/count_1 +0 -3
- data/test/results/omopv4/date_range/count_2 +0 -3
- data/test/results/omopv4/date_range/crit_1 +0 -1
- data/test/results/omopv4/date_range/crit_2 +0 -1
- data/test/results/omopv4/death/anno_multiple_upstreams +0 -50
- data/test/results/omopv4/death/anno_no_upstreams +0 -22
- data/test/results/omopv4/death/crit_basic +0 -5
- data/test/results/omopv4/death/crit_person +0 -5
- data/test/results/omopv4/drug_type_concept/anno_has_upstreams +0 -37
- data/test/results/omopv4/drug_type_concept/anno_no_arguments +0 -18
- data/test/results/omopv4/drug_type_concept/crit_basic1 +0 -5
- data/test/results/omopv4/drug_type_concept/crit_basic2 +0 -2
- data/test/results/omopv4/during/crit_1 +0 -15
- data/test/results/omopv4/during/crit_2 +0 -2
- data/test/results/omopv4/equal/crit_1 +0 -5
- data/test/results/omopv4/equal/crit_2 +0 -5
- data/test/results/omopv4/except/anno_1 +0 -42
- data/test/results/omopv4/except/anno_2 +0 -43
- data/test/results/omopv4/except/count_complex +0 -5
- data/test/results/omopv4/except/crit_412_cpt +0 -54
- data/test/results/omopv4/except/crit_412_inpatient +0 -46
- data/test/results/omopv4/except/crit_complex +0 -1
- data/test/results/omopv4/filter/crit_1 +0 -54
- data/test/results/omopv4/first/anno_argument +0 -25
- data/test/results/omopv4/first/anno_no_upstream +0 -18
- data/test/results/omopv4/first/crit_cpt +0 -207
- data/test/results/omopv4/first/crit_icd9 +0 -42
- data/test/results/omopv4/first/crit_union +0 -45
- data/test/results/omopv4/from/anno_has_upstreams +0 -39
- data/test/results/omopv4/from/anno_multiple_arguments +0 -24
- data/test/results/omopv4/from/count_condition_occurrence +0 -3
- data/test/results/omopv4/from/count_observation_period +0 -3
- data/test/results/omopv4/from/count_person +0 -3
- data/test/results/omopv4/from_seer_visits/anno_multiple_upstreams +0 -78
- data/test/results/omopv4/from_seer_visits/anno_no_upstream +0 -18
- data/test/results/omopv4/from_seer_visits/crit_1 +0 -6
- data/test/results/omopv4/from_seer_visits/crit_2 +0 -5
- data/test/results/omopv4/from_seer_visits/crit_3 +0 -5
- data/test/results/omopv4/from_seer_visits/crit_4 +0 -6
- data/test/results/omopv4/gender/anno_has_upstreams +0 -39
- data/test/results/omopv4/gender/crit_male +0 -130
- data/test/results/omopv4/hcpcs/anno_bad_format +0 -24
- data/test/results/omopv4/hcpcs/crit_A0382 +0 -9
- data/test/results/omopv4/icd10/anno_bad_format +0 -22
- data/test/results/omopv4/icd10/anno_has_upstreams +0 -40
- data/test/results/omopv4/icd10/crit_1 +0 -5
- data/test/results/omopv4/icd10pcs/anno_bad_format +0 -28
- data/test/results/omopv4/icd10pcs/anno_has_upstreams +0 -40
- data/test/results/omopv4/icd10pcs/crit_1 +0 -2
- data/test/results/omopv4/icd9/anno_empty_label +0 -15
- data/test/results/omopv4/icd9/anno_invalid_code +0 -21
- data/test/results/omopv4/icd9/crit_1 +0 -54
- data/test/results/omopv4/icd9_procedure/crit_1 +0 -5
- data/test/results/omopv4/intersect/anno_412_inpatient +0 -42
- data/test/results/omopv4/intersect/anno_has_arguments +0 -25
- data/test/results/omopv4/intersect/anno_no_upstream +0 -18
- data/test/results/omopv4/intersect/crit_412_inpatient +0 -12
- data/test/results/omopv4/intersect/crit_412_male +0 -182
- data/test/results/omopv4/intersect/crit_complex +0 -118
- data/test/results/omopv4/invalid/anno_bad_op +0 -55
- data/test/results/omopv4/invalid/scanno_1 +0 -23
- data/test/results/omopv4/last/crit_icd9 +0 -42
- data/test/results/omopv4/loinc/crit_basic +0 -5
- data/test/results/omopv4/ndc/crit_basic +0 -5
- data/test/results/omopv4/numeric/anno_multiple_upstreams +0 -59
- data/test/results/omopv4/numeric/num_values_1 +0 -254
- data/test/results/omopv4/numeric/num_values_2 +0 -5
- data/test/results/omopv4/numeric/num_values_3 +0 -5
- data/test/results/omopv4/observation_period/anno_has_arguments +0 -36
- data/test/results/omopv4/observation_period/anno_multiple_upstreams +0 -51
- data/test/results/omopv4/observation_period/count_all_periods +0 -3
- data/test/results/omopv4/observation_period/crit_female +0 -2
- data/test/results/omopv4/observation_period/crit_icd9 +0 -5
- data/test/results/omopv4/observation_period/crit_male +0 -5
- data/test/results/omopv4/occurrence/anno_no_upstream +0 -22
- data/test/results/omopv4/occurrence/cc_412_410 +0 -1
- data/test/results/omopv4/occurrence/count_412_410 +0 -3
- data/test/results/omopv4/occurrence/crit_1 +0 -16
- data/test/results/omopv4/occurrence/crit_2 +0 -2
- data/test/results/omopv4/occurrence/crit_3 +0 -42
- data/test/results/omopv4/one_in_two_out/anno_has_arguments +0 -27
- data/test/results/omopv4/one_in_two_out/anno_multiple_upstreams +0 -54
- data/test/results/omopv4/one_in_two_out/anno_no_upstream +0 -20
- data/test/results/omopv4/one_in_two_out/count_1 +0 -3
- data/test/results/omopv4/one_in_two_out/crit_hcpcs +0 -7
- data/test/results/omopv4/one_in_two_out/crit_icd9 +0 -21
- data/test/results/omopv4/overlapped_by/crit_1 +0 -5
- data/test/results/omopv4/overlapped_by/crit_2 +0 -2
- data/test/results/omopv4/overlapped_by/crit_3 +0 -5
- data/test/results/omopv4/overlapped_by/crit_4 +0 -2
- data/test/results/omopv4/overlaps/crit_1 +0 -5
- data/test/results/omopv4/overlaps/crit_2 +0 -2
- data/test/results/omopv4/overlaps/crit_3 +0 -5
- data/test/results/omopv4/overlaps/crit_4 +0 -2
- data/test/results/omopv4/person/anno_has_arguments +0 -22
- data/test/results/omopv4/person/anno_multiple_upstreams +0 -52
- data/test/results/omopv4/person/count_2 +0 -3
- data/test/results/omopv4/person/crit_1 +0 -42
- data/test/results/omopv4/person/crit_2 +0 -1
- data/test/results/omopv4/person_filter/count_1 +0 -4
- data/test/results/omopv4/person_filter/crit_1 +0 -54
- data/test/results/omopv4/person_filter/crit_2 +0 -5
- data/test/results/omopv4/person_filter/crit_3 +0 -32
- data/test/results/omopv4/person_filter/crit_4 +0 -52
- data/test/results/omopv4/person_filter/crit_5 +0 -1
- data/test/results/omopv4/place_of_service_code/anno_has_upstreams +0 -37
- data/test/results/omopv4/place_of_service_code/anno_no_arguments +0 -18
- data/test/results/omopv4/place_of_service_code/crit_basic +0 -174
- data/test/results/omopv4/place_of_service_filter/anno_1 +0 -29
- data/test/results/omopv4/procedure_occurrence/anno_has_arguments +0 -37
- data/test/results/omopv4/procedure_occurrence/anno_multiple_upstreams +0 -51
- data/test/results/omopv4/procedure_occurrence/count_gender +0 -3
- data/test/results/omopv4/procedure_occurrence/count_icd9 +0 -3
- data/test/results/omopv4/procedure_occurrence/count_started_by +0 -3
- data/test/results/omopv4/procedure_occurrence/crit_gender +0 -1
- data/test/results/omopv4/procedure_occurrence/crit_icd9 +0 -1
- data/test/results/omopv4/procedure_occurrence/crit_started_by +0 -1
- data/test/results/omopv4/provenance/anno_1 +0 -29
- data/test/results/omopv4/provider_filter/anno_1 +0 -29
- data/test/results/omopv4/race/anno_1 +0 -37
- data/test/results/omopv4/race/anno_2 +0 -18
- data/test/results/omopv4/race/crit_1 +0 -28
- data/test/results/omopv4/read/anno_1 +0 -21
- data/test/results/omopv4/read/crit_1 +0 -2
- data/test/results/omopv4/recall/anno_1 +0 -54
- data/test/results/omopv4/recall/anno_2 +0 -66
- data/test/results/omopv4/recall/anno_3 +0 -20
- data/test/results/omopv4/recall/anno_4 +0 -18
- data/test/results/omopv4/recall/anno_5 +0 -24
- data/test/results/omopv4/recall/anno_6 +0 -270
- data/test/results/omopv4/recall/crit_1 +0 -21
- data/test/results/omopv4/recall/crit_2 +0 -54
- data/test/results/omopv4/recall/crit_3 +0 -2
- data/test/results/omopv4/recall/crit_cte_1 +0 -42
- data/test/results/omopv4/recall/crit_cte_2 +0 -42
- data/test/results/omopv4/recall/crit_nested_perm_0 +0 -54
- data/test/results/omopv4/revenue_code/crit_1 +0 -2
- data/test/results/omopv4/revenue_code/crit_basic +0 -2
- data/test/results/omopv4/revenue_code/domains_1 +0 -3
- data/test/results/omopv4/revenue_code/domains_drg100 +0 -3
- data/test/results/omopv4/rxnorm/crit_1 +0 -5
- data/test/results/omopv4/snomed/crit_1 +0 -84
- data/test/results/omopv4/started_by/crit_1 +0 -5
- data/test/results/omopv4/started_by/crit_2 +0 -2
- data/test/results/omopv4/started_by/crit_3 +0 -2
- data/test/results/omopv4/sum/anno_1 +0 -18
- data/test/results/omopv4/sum/anno_2 +0 -36
- data/test/results/omopv4/sum/num_1 +0 -5
- data/test/results/omopv4/sum/num_2 +0 -8
- data/test/results/omopv4/sum/num_3 +0 -254
- data/test/results/omopv4/time_window/anno_1 +0 -20
- data/test/results/omopv4/time_window/anno_2 +0 -40
- data/test/results/omopv4/time_window/anno_3 +0 -36
- data/test/results/omopv4/time_window/anno_4 +0 -39
- data/test/results/omopv4/time_window/anno_5 +0 -57
- data/test/results/omopv4/time_window/crit_1 +0 -54
- data/test/results/omopv4/time_window/crit_2 +0 -174
- data/test/results/omopv4/time_window/crit_3 +0 -54
- data/test/results/omopv4/time_window/crit_4 +0 -174
- data/test/results/omopv4/trim_date_end/crit_1 +0 -5
- data/test/results/omopv4/trim_date_end/crit_2 +0 -2
- data/test/results/omopv4/trim_date_end/crit_3 +0 -6
- data/test/results/omopv4/trim_date_end/crit_at_least +0 -5
- data/test/results/omopv4/trim_date_end/crit_occurrences_1 +0 -2
- data/test/results/omopv4/trim_date_end/crit_occurrences_2 +0 -6
- data/test/results/omopv4/trim_date_end/crit_within +0 -5
- data/test/results/omopv4/trim_date_start/crit_1 +0 -5
- data/test/results/omopv4/trim_date_start/crit_2 +0 -2
- data/test/results/omopv4/trim_date_start/crit_3 +0 -6
- data/test/results/omopv4/trim_date_start/crit_at_least +0 -5
- data/test/results/omopv4/trim_date_start/crit_occurrences_1 +0 -2
- data/test/results/omopv4/trim_date_start/crit_occurrences_2 +0 -6
- data/test/results/omopv4/trim_date_start/crit_within +0 -5
- data/test/results/omopv4/union/anno_1 +0 -43
- data/test/results/omopv4/union/anno_2 +0 -74
- data/test/results/omopv4/union/anno_3 +0 -18
- data/test/results/omopv4/union/anno_4 +0 -25
- data/test/results/omopv4/union/anno_5 +0 -33
- data/test/results/omopv4/union/anno_6 +0 -46
- data/test/results/omopv4/union/cc_1 +0 -1
- data/test/results/omopv4/union/cc_2 +0 -1
- data/test/results/omopv4/union/cc_3 +0 -1
- data/test/results/omopv4/union/cc_4 +0 -1
- data/test/results/omopv4/union/cc_5 +0 -1
- data/test/results/omopv4/union/count_1 +0 -3
- data/test/results/omopv4/union/count_2 +0 -3
- data/test/results/omopv4/union/count_3 +0 -3
- data/test/results/omopv4/union/count_4 +0 -3
- data/test/results/omopv4/union/count_5 +0 -4
- data/test/results/omopv4/union/scanno_1 +0 -22
- data/test/results/omopv4/union/scanno_2 +0 -36
- data/test/results/omopv4/visit_occurrence/anno_1 +0 -52
- data/test/results/omopv4/visit_occurrence/anno_2 +0 -37
- data/test/results/omopv4/visit_occurrence/crit_1 +0 -54
- data/test/results/omopv4/visit_occurrence/crit_2 +0 -7566
- data/test/results/omopv4/visit_occurrence/crit_3 +0 -14935
- data/test/results/omopv4_plus/after/anno_1 +0 -25
- data/test/results/omopv4_plus/after/anno_2 +0 -48
- data/test/results/omopv4_plus/after/anno_3 +0 -34
- data/test/results/omopv4_plus/after/anno_4 +0 -60
- data/test/results/omopv4_plus/after/anno_5 +0 -68
- data/test/results/omopv4_plus/after/anno_6 +0 -60
- data/test/results/omopv4_plus/after/crit_at_least +0 -7
- data/test/results/omopv4_plus/after/crit_basic +0 -32
- data/test/results/omopv4_plus/after/crit_occurrences +0 -12
- data/test/results/omopv4_plus/after/crit_within +0 -5
- data/test/results/omopv4_plus/any_overlap/crit_basic1 +0 -14
- data/test/results/omopv4_plus/any_overlap/crit_basic2 +0 -14
- data/test/results/omopv4_plus/any_overlap/crit_occurrences1 +0 -2
- data/test/results/omopv4_plus/any_overlap/crit_occurrences2 +0 -14
- data/test/results/omopv4_plus/any_overlap/crit_within +0 -8
- data/test/results/omopv4_plus/before/crit_at_least +0 -6
- data/test/results/omopv4_plus/before/crit_basic1 +0 -48
- data/test/results/omopv4_plus/before/crit_basic2 +0 -8
- data/test/results/omopv4_plus/before/crit_occurrences +0 -13
- data/test/results/omopv4_plus/before/crit_within +0 -17
- data/test/results/omopv4_plus/co_reported/anno_1 +0 -43
- data/test/results/omopv4_plus/co_reported/anno_2 +0 -66
- data/test/results/omopv4_plus/co_reported/anno_3 +0 -47
- data/test/results/omopv4_plus/complement/anno_duplicate_params +0 -52
- data/test/results/omopv4_plus/complement/anno_invalid_params +0 -37
- data/test/results/omopv4_plus/complement/anno_no_params +0 -18
- data/test/results/omopv4_plus/complement/count_3way_intersect +0 -4
- data/test/results/omopv4_plus/complement/count_3way_union +0 -4
- data/test/results/omopv4_plus/complement/count_intersect +0 -3
- data/test/results/omopv4_plus/complement/count_union +0 -3
- data/test/results/omopv4_plus/complement/count_union_and_intersect +0 -4
- data/test/results/omopv4_plus/complement/crit_basic1 +0 -52483
- data/test/results/omopv4_plus/complement/crit_icd9_selector +0 -52
- data/test/results/omopv4_plus/complex/anno_1 +0 -85
- data/test/results/omopv4_plus/complex/crit_1 +0 -2
- data/test/results/omopv4_plus/complex/crit_2 +0 -2
- data/test/results/omopv4_plus/complex/crit_3 +0 -2
- data/test/results/omopv4_plus/complex/crit_4 +0 -2
- data/test/results/omopv4_plus/complex/crit_5 +0 -2
- data/test/results/omopv4_plus/complex/crit_6 +0 -24
- data/test/results/omopv4_plus/complex/crit_7 +0 -45
- data/test/results/omopv4_plus/complex/crit_out_of_order_ctes +0 -15
- data/test/results/omopv4_plus/complex/scanno_1 +0 -108
- data/test/results/omopv4_plus/concurrent_within/crit_icd9 +0 -52
- data/test/results/omopv4_plus/concurrent_within/crit_icd9_and_place_of_service +0 -21
- data/test/results/omopv4_plus/concurrent_within/crit_negative_start +0 -5
- data/test/results/omopv4_plus/condition_type/anno_icd9 +0 -39
- data/test/results/omopv4_plus/condition_type/count_condition_era +0 -2
- data/test/results/omopv4_plus/condition_type/count_condition_era_30_day_window +0 -2
- data/test/results/omopv4_plus/condition_type/count_ehr_problem_list +0 -2
- data/test/results/omopv4_plus/condition_type/count_era_0 +0 -2
- data/test/results/omopv4_plus/condition_type/count_inpatient +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_detail +0 -2
- data/test/results/omopv4_plus/condition_type/count_inpatient_header +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_2 +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_3 +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_4 +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_header_5 +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_outpatient_detail +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_primary +0 -3
- data/test/results/omopv4_plus/condition_type/count_inpatient_primary_or_first +0 -3
- data/test/results/omopv4_plus/condition_type/count_outpatient +0 -3
- data/test/results/omopv4_plus/condition_type/count_outpatient_detail +0 -2
- data/test/results/omopv4_plus/condition_type/count_outpatient_header +0 -3
- data/test/results/omopv4_plus/condition_type/count_outpatient_primary +0 -3
- data/test/results/omopv4_plus/condition_type/count_primary +0 -3
- data/test/results/omopv4_plus/contains/crit_1 +0 -5
- data/test/results/omopv4_plus/contains/crit_2 +0 -2
- data/test/results/omopv4_plus/contains/crit_3 +0 -2
- data/test/results/omopv4_plus/count/anno_multiple_upstreams +0 -52
- data/test/results/omopv4_plus/count/anno_no_upstream1 +0 -18
- data/test/results/omopv4_plus/count/anno_no_upstream2 +0 -25
- data/test/results/omopv4_plus/count/crit_icd9_ndc +0 -5
- data/test/results/omopv4_plus/count/crit_ndc +0 -2
- data/test/results/omopv4_plus/count/crit_person +0 -254
- data/test/results/omopv4_plus/cpt/anno_icd9_upstream +0 -40
- data/test/results/omopv4_plus/cpt/anno_invalid_code +0 -22
- data/test/results/omopv4_plus/cpt/count_1 +0 -3
- data/test/results/omopv4_plus/cpt/crit_1 +0 -158
- data/test/results/omopv4_plus/cpt/scanno_1 +0 -17
- data/test/results/omopv4_plus/cpt_or_hcpcs/anno_bad_format +0 -25
- data/test/results/omopv4_plus/cpt_or_hcpcs/count_1 +0 -3
- data/test/results/omopv4_plus/cpt_or_hcpcs/crit_1 +0 -161
- data/test/results/omopv4_plus/date_range/anno_1 +0 -15
- data/test/results/omopv4_plus/date_range/anno_extra_argument +0 -24
- data/test/results/omopv4_plus/date_range/anno_invalid_argument +0 -25
- data/test/results/omopv4_plus/date_range/anno_missing_argument1 +0 -20
- data/test/results/omopv4_plus/date_range/anno_missing_argument2 +0 -20
- data/test/results/omopv4_plus/date_range/anno_no_upstreams +0 -38
- data/test/results/omopv4_plus/date_range/count_1 +0 -3
- data/test/results/omopv4_plus/date_range/count_2 +0 -3
- data/test/results/omopv4_plus/death/anno_multiple_upstreams +0 -50
- data/test/results/omopv4_plus/death/anno_no_upstreams +0 -22
- data/test/results/omopv4_plus/death/crit_basic +0 -14
- data/test/results/omopv4_plus/death/crit_person +0 -14
- data/test/results/omopv4_plus/drug_type_concept/anno_has_upstreams +0 -37
- data/test/results/omopv4_plus/drug_type_concept/anno_no_arguments +0 -18
- data/test/results/omopv4_plus/drug_type_concept/crit_basic1 +0 -2
- data/test/results/omopv4_plus/drug_type_concept/crit_basic2 +0 -2
- data/test/results/omopv4_plus/during/crit_1 +0 -14
- data/test/results/omopv4_plus/during/crit_2 +0 -2
- data/test/results/omopv4_plus/equal/crit_1 +0 -2
- data/test/results/omopv4_plus/equal/crit_2 +0 -2
- data/test/results/omopv4_plus/except/anno_1 +0 -42
- data/test/results/omopv4_plus/except/anno_2 +0 -43
- data/test/results/omopv4_plus/except/count_complex +0 -5
- data/test/results/omopv4_plus/except/crit_412_cpt +0 -52
- data/test/results/omopv4_plus/except/crit_412_inpatient +0 -45
- data/test/results/omopv4_plus/filter/crit_1 +0 -52
- data/test/results/omopv4_plus/first/anno_argument +0 -25
- data/test/results/omopv4_plus/first/anno_no_upstream +0 -18
- data/test/results/omopv4_plus/first/crit_cpt +0 -180
- data/test/results/omopv4_plus/first/crit_icd9 +0 -41
- data/test/results/omopv4_plus/first/crit_union +0 -52
- data/test/results/omopv4_plus/from/anno_has_upstreams +0 -39
- data/test/results/omopv4_plus/from/anno_multiple_arguments +0 -24
- data/test/results/omopv4_plus/from/count_condition_occurrence +0 -3
- data/test/results/omopv4_plus/from/count_observation_period +0 -3
- data/test/results/omopv4_plus/from/count_person +0 -3
- data/test/results/omopv4_plus/from_seer_visits/anno_multiple_upstreams +0 -78
- data/test/results/omopv4_plus/from_seer_visits/anno_no_upstream +0 -18
- data/test/results/omopv4_plus/from_seer_visits/crit_1 +0 -2
- data/test/results/omopv4_plus/from_seer_visits/crit_2 +0 -2
- data/test/results/omopv4_plus/from_seer_visits/crit_3 +0 -2
- data/test/results/omopv4_plus/from_seer_visits/crit_4 +0 -2
- data/test/results/omopv4_plus/gender/anno_has_upstreams +0 -39
- data/test/results/omopv4_plus/gender/crit_male +0 -128
- data/test/results/omopv4_plus/hcpcs/anno_bad_format +0 -24
- data/test/results/omopv4_plus/hcpcs/crit_A0382 +0 -7
- data/test/results/omopv4_plus/icd10/anno_bad_format +0 -22
- data/test/results/omopv4_plus/icd10/anno_has_upstreams +0 -40
- data/test/results/omopv4_plus/icd10/crit_1 +0 -2
- data/test/results/omopv4_plus/icd10pcs/anno_bad_format +0 -28
- data/test/results/omopv4_plus/icd10pcs/anno_has_upstreams +0 -40
- data/test/results/omopv4_plus/icd10pcs/crit_1 +0 -2
- data/test/results/omopv4_plus/icd9/anno_empty_label +0 -15
- data/test/results/omopv4_plus/icd9/anno_invalid_code +0 -21
- data/test/results/omopv4_plus/icd9/anno_valid_code +0 -3
- data/test/results/omopv4_plus/icd9/crit_1 +0 -52
- data/test/results/omopv4_plus/icd9_procedure/crit_1 +0 -5
- data/test/results/omopv4_plus/intersect/anno_412_inpatient +0 -42
- data/test/results/omopv4_plus/intersect/anno_has_arguments +0 -25
- data/test/results/omopv4_plus/intersect/anno_no_upstream +0 -18
- data/test/results/omopv4_plus/intersect/crit_412_inpatient +0 -11
- data/test/results/omopv4_plus/intersect/crit_412_male +0 -178
- data/test/results/omopv4_plus/intersect/crit_complex +0 -110
- data/test/results/omopv4_plus/invalid/anno_bad_op +0 -55
- data/test/results/omopv4_plus/invalid/scanno_1 +0 -23
- data/test/results/omopv4_plus/last/crit_icd9 +0 -41
- data/test/results/omopv4_plus/loinc/crit_basic +0 -2
- data/test/results/omopv4_plus/ndc/crit_basic +0 -2
- data/test/results/omopv4_plus/ndc/results_1 +0 -41
- data/test/results/omopv4_plus/numeric/anno_multiple_upstreams +0 -59
- data/test/results/omopv4_plus/numeric/num_values_1 +0 -254
- data/test/results/omopv4_plus/numeric/num_values_2 +0 -5
- data/test/results/omopv4_plus/numeric/num_values_3 +0 -5
- data/test/results/omopv4_plus/observation_period/anno_has_arguments +0 -36
- data/test/results/omopv4_plus/observation_period/anno_multiple_upstreams +0 -51
- data/test/results/omopv4_plus/observation_period/count_all_periods +0 -3
- data/test/results/omopv4_plus/observation_period/crit_female +0 -87
- data/test/results/omopv4_plus/observation_period/crit_icd9 +0 -28
- data/test/results/omopv4_plus/observation_period/crit_male +0 -75
- data/test/results/omopv4_plus/occurrence/anno_no_upstream +0 -22
- data/test/results/omopv4_plus/occurrence/count_412_410 +0 -3
- data/test/results/omopv4_plus/occurrence/crit_1 +0 -15
- data/test/results/omopv4_plus/occurrence/crit_2 +0 -2
- data/test/results/omopv4_plus/occurrence/crit_3 +0 -41
- data/test/results/omopv4_plus/one_in_two_out/anno_has_arguments +0 -27
- data/test/results/omopv4_plus/one_in_two_out/anno_multiple_upstreams +0 -54
- data/test/results/omopv4_plus/one_in_two_out/anno_no_upstream +0 -20
- data/test/results/omopv4_plus/one_in_two_out/count_1 +0 -3
- data/test/results/omopv4_plus/one_in_two_out/count_same_as_1 +0 -3
- data/test/results/omopv4_plus/one_in_two_out/crit_hcpcs +0 -2
- data/test/results/omopv4_plus/one_in_two_out/crit_icd9 +0 -19
- data/test/results/omopv4_plus/one_in_two_out/results_1 +0 -803
- data/test/results/omopv4_plus/one_in_two_out/results_2 +0 -803
- data/test/results/omopv4_plus/overlapped_by/crit_1 +0 -5
- data/test/results/omopv4_plus/overlapped_by/crit_2 +0 -2
- data/test/results/omopv4_plus/overlapped_by/crit_3 +0 -5
- data/test/results/omopv4_plus/overlapped_by/crit_4 +0 -2
- data/test/results/omopv4_plus/overlaps/crit_1 +0 -5
- data/test/results/omopv4_plus/overlaps/crit_2 +0 -2
- data/test/results/omopv4_plus/overlaps/crit_3 +0 -5
- data/test/results/omopv4_plus/overlaps/crit_4 +0 -2
- data/test/results/omopv4_plus/person/anno_has_arguments +0 -22
- data/test/results/omopv4_plus/person/anno_multiple_upstreams +0 -52
- data/test/results/omopv4_plus/person/count_2 +0 -3
- data/test/results/omopv4_plus/person/crit_1 +0 -41
- data/test/results/omopv4_plus/person_filter/count_1 +0 -4
- data/test/results/omopv4_plus/person_filter/crit_1 +0 -52
- data/test/results/omopv4_plus/person_filter/crit_2 +0 -10
- data/test/results/omopv4_plus/person_filter/crit_3 +0 -32
- data/test/results/omopv4_plus/person_filter/crit_4 +0 -50
- data/test/results/omopv4_plus/place_of_service_code/anno_has_upstreams +0 -37
- data/test/results/omopv4_plus/place_of_service_code/anno_no_arguments +0 -18
- data/test/results/omopv4_plus/place_of_service_code/crit_basic +0 -157
- data/test/results/omopv4_plus/place_of_service_filter/anno_1 +0 -29
- data/test/results/omopv4_plus/procedure_occurrence/anno_has_arguments +0 -37
- data/test/results/omopv4_plus/procedure_occurrence/anno_multiple_upstreams +0 -51
- data/test/results/omopv4_plus/procedure_occurrence/count_gender +0 -3
- data/test/results/omopv4_plus/procedure_occurrence/count_icd9 +0 -3
- data/test/results/omopv4_plus/procedure_occurrence/count_started_by +0 -3
- data/test/results/omopv4_plus/provenance/anno_1 +0 -29
- data/test/results/omopv4_plus/provenance/anno_bad_keyword +0 -38
- data/test/results/omopv4_plus/provenance/count_1 +0 -3
- data/test/results/omopv4_plus/provenance/count_2 +0 -3
- data/test/results/omopv4_plus/provider_filter/anno_1 +0 -29
- data/test/results/omopv4_plus/race/anno_1 +0 -37
- data/test/results/omopv4_plus/race/anno_2 +0 -18
- data/test/results/omopv4_plus/race/crit_1 +0 -32
- data/test/results/omopv4_plus/read/anno_1 +0 -15
- data/test/results/omopv4_plus/read/crit_1 +0 -2
- data/test/results/omopv4_plus/recall/anno_1 +0 -54
- data/test/results/omopv4_plus/recall/anno_2 +0 -66
- data/test/results/omopv4_plus/recall/anno_3 +0 -20
- data/test/results/omopv4_plus/recall/anno_4 +0 -18
- data/test/results/omopv4_plus/recall/anno_5 +0 -24
- data/test/results/omopv4_plus/recall/anno_6 +0 -270
- data/test/results/omopv4_plus/recall/crit_1 +0 -19
- data/test/results/omopv4_plus/recall/crit_2 +0 -52
- data/test/results/omopv4_plus/recall/crit_3 +0 -2
- data/test/results/omopv4_plus/recall/crit_cte_1 +0 -41
- data/test/results/omopv4_plus/recall/crit_cte_2 +0 -41
- data/test/results/omopv4_plus/recall/crit_nested_perm_0 +0 -52
- data/test/results/omopv4_plus/revenue_code/crit_1 +0 -2
- data/test/results/omopv4_plus/revenue_code/crit_basic +0 -2
- data/test/results/omopv4_plus/revenue_code/domains_1 +0 -3
- data/test/results/omopv4_plus/revenue_code/domains_drg100 +0 -3
- data/test/results/omopv4_plus/rxnorm/crit_1 +0 -2
- data/test/results/omopv4_plus/snomed/crit_1 +0 -2
- data/test/results/omopv4_plus/started_by/crit_1 +0 -5
- data/test/results/omopv4_plus/started_by/crit_2 +0 -2
- data/test/results/omopv4_plus/started_by/crit_3 +0 -2
- data/test/results/omopv4_plus/sum/anno_1 +0 -18
- data/test/results/omopv4_plus/sum/anno_2 +0 -36
- data/test/results/omopv4_plus/sum/num_1 +0 -2
- data/test/results/omopv4_plus/sum/num_2 +0 -5
- data/test/results/omopv4_plus/sum/num_3 +0 -254
- data/test/results/omopv4_plus/time_window/anno_1 +0 -20
- data/test/results/omopv4_plus/time_window/anno_2 +0 -40
- data/test/results/omopv4_plus/time_window/anno_3 +0 -36
- data/test/results/omopv4_plus/time_window/anno_4 +0 -39
- data/test/results/omopv4_plus/time_window/anno_5 +0 -57
- data/test/results/omopv4_plus/time_window/crit_1 +0 -52
- data/test/results/omopv4_plus/time_window/crit_2 +0 -157
- data/test/results/omopv4_plus/time_window/crit_3 +0 -52
- data/test/results/omopv4_plus/time_window/crit_4 +0 -157
- data/test/results/omopv4_plus/trim_date_end/crit_1 +0 -5
- data/test/results/omopv4_plus/trim_date_end/crit_2 +0 -2
- data/test/results/omopv4_plus/trim_date_end/crit_3 +0 -6
- data/test/results/omopv4_plus/trim_date_end/crit_at_least +0 -5
- data/test/results/omopv4_plus/trim_date_end/crit_occurrences_1 +0 -2
- data/test/results/omopv4_plus/trim_date_end/crit_occurrences_2 +0 -6
- data/test/results/omopv4_plus/trim_date_end/crit_within +0 -5
- data/test/results/omopv4_plus/trim_date_start/crit_1 +0 -5
- data/test/results/omopv4_plus/trim_date_start/crit_2 +0 -2
- data/test/results/omopv4_plus/trim_date_start/crit_3 +0 -6
- data/test/results/omopv4_plus/trim_date_start/crit_at_least +0 -5
- data/test/results/omopv4_plus/trim_date_start/crit_occurrences_1 +0 -2
- data/test/results/omopv4_plus/trim_date_start/crit_occurrences_2 +0 -6
- data/test/results/omopv4_plus/trim_date_start/crit_within +0 -5
- data/test/results/omopv4_plus/union/anno_1 +0 -43
- data/test/results/omopv4_plus/union/anno_2 +0 -74
- data/test/results/omopv4_plus/union/anno_3 +0 -18
- data/test/results/omopv4_plus/union/anno_4 +0 -25
- data/test/results/omopv4_plus/union/anno_5 +0 -33
- data/test/results/omopv4_plus/union/anno_6 +0 -46
- data/test/results/omopv4_plus/union/count_1 +0 -3
- data/test/results/omopv4_plus/union/count_2 +0 -3
- data/test/results/omopv4_plus/union/count_3 +0 -3
- data/test/results/omopv4_plus/union/count_4 +0 -3
- data/test/results/omopv4_plus/union/count_5 +0 -4
- data/test/results/omopv4_plus/union/optcc_1 +0 -3
- data/test/results/omopv4_plus/union/optcc_2 +0 -3
- data/test/results/omopv4_plus/union/optcc_3 +0 -3
- data/test/results/omopv4_plus/union/optcc_4 +0 -3
- data/test/results/omopv4_plus/union/optcc_5 +0 -3
- data/test/results/omopv4_plus/union/optcc_6 +0 -3
- data/test/results/omopv4_plus/union/scanno_1 +0 -22
- data/test/results/omopv4_plus/union/scanno_2 +0 -36
- data/test/results/omopv4_plus/visit_occurrence/anno_1 +0 -52
- data/test/results/omopv4_plus/visit_occurrence/anno_2 +0 -37
- data/test/results/omopv4_plus/visit_occurrence/crit_1 +0 -52
- data/test/results/omopv4_plus/visit_occurrence/crit_2 +0 -22945
- data/test/results/omopv4_plus/visit_occurrence/crit_3 +0 -46851
- data/test/statements/after/anno_1 +0 -7
- data/test/statements/after/anno_2 +0 -16
- data/test/statements/after/anno_3 +0 -9
- data/test/statements/after/anno_4 +0 -19
- data/test/statements/after/anno_5 +0 -21
- data/test/statements/after/anno_6 +0 -16
- data/test/statements/after/crit_at_least +0 -21
- data/test/statements/after/crit_basic +0 -20
- data/test/statements/after/crit_occurrences +0 -21
- data/test/statements/after/crit_within +0 -21
- data/test/statements/any_overlap/crit_basic1 +0 -16
- data/test/statements/any_overlap/crit_basic2 +0 -16
- data/test/statements/any_overlap/crit_occurrences1 +0 -17
- data/test/statements/any_overlap/crit_occurrences2 +0 -17
- data/test/statements/any_overlap/crit_within +0 -17
- data/test/statements/before/crit_at_least +0 -14
- data/test/statements/before/crit_basic1 +0 -13
- data/test/statements/before/crit_basic2 +0 -16
- data/test/statements/before/crit_occurrences +0 -14
- data/test/statements/before/crit_within +0 -14
- data/test/statements/co_reported/anno_1 +0 -13
- data/test/statements/co_reported/anno_2 +0 -21
- data/test/statements/co_reported/anno_3 +0 -14
- data/test/statements/complement/anno_duplicate_params +0 -11
- data/test/statements/complement/anno_invalid_params +0 -8
- data/test/statements/complement/anno_no_params +0 -3
- data/test/statements/complement/count_3way_intersect +0 -24
- data/test/statements/complement/count_3way_union +0 -18
- data/test/statements/complement/count_intersect +0 -17
- data/test/statements/complement/count_union +0 -14
- data/test/statements/complement/count_union_and_intersect +0 -27
- data/test/statements/complement/crit_basic1 +0 -7
- data/test/statements/complement/crit_icd9_selector +0 -10
- data/test/statements/complex/anno_1 +0 -29
- data/test/statements/complex/crit_1 +0 -278
- data/test/statements/complex/crit_2 +0 -43
- data/test/statements/complex/crit_3 +0 -54
- data/test/statements/complex/crit_4 +0 -17
- data/test/statements/complex/crit_5 +0 -17
- data/test/statements/complex/crit_6 +0 -20
- data/test/statements/complex/crit_7 +0 -14
- data/test/statements/complex/crit_out_of_order_ctes +0 -39
- data/test/statements/complex/scanno_1 +0 -1508
- data/test/statements/concurrent_within/crit_icd9 +0 -11
- data/test/statements/concurrent_within/crit_icd9_and_place_of_service +0 -15
- data/test/statements/concurrent_within/crit_negative_start +0 -15
- data/test/statements/condition_type/anno_icd9 +0 -7
- data/test/statements/condition_type/count_condition_era +0 -4
- data/test/statements/condition_type/count_condition_era_30_day_window +0 -4
- data/test/statements/condition_type/count_ehr_problem_list +0 -4
- data/test/statements/condition_type/count_era_0 +0 -4
- data/test/statements/condition_type/count_inpatient +0 -4
- data/test/statements/condition_type/count_inpatient_detail +0 -4
- data/test/statements/condition_type/count_inpatient_header +0 -4
- data/test/statements/condition_type/count_inpatient_header_2 +0 -4
- data/test/statements/condition_type/count_inpatient_header_3 +0 -4
- data/test/statements/condition_type/count_inpatient_header_4 +0 -4
- data/test/statements/condition_type/count_inpatient_header_5 +0 -4
- data/test/statements/condition_type/count_inpatient_outpatient_detail +0 -5
- data/test/statements/condition_type/count_inpatient_primary +0 -4
- data/test/statements/condition_type/count_inpatient_primary_or_first +0 -4
- data/test/statements/condition_type/count_outpatient +0 -4
- data/test/statements/condition_type/count_outpatient_detail +0 -4
- data/test/statements/condition_type/count_outpatient_header +0 -4
- data/test/statements/condition_type/count_outpatient_primary +0 -4
- data/test/statements/condition_type/count_primary +0 -4
- data/test/statements/contains/crit_1 +0 -16
- data/test/statements/contains/crit_2 +0 -16
- data/test/statements/contains/crit_3 +0 -16
- data/test/statements/count/anno_multiple_upstreams +0 -11
- data/test/statements/count/anno_no_upstream1 +0 -3
- data/test/statements/count/anno_no_upstream2 +0 -4
- data/test/statements/count/crit_icd9_ndc +0 -15
- data/test/statements/count/crit_ndc +0 -11
- data/test/statements/count/crit_person +0 -7
- data/test/statements/cpt/anno_icd9_upstream +0 -7
- data/test/statements/cpt/anno_invalid_code +0 -5
- data/test/statements/cpt/count_1 +0 -4
- data/test/statements/cpt/crit_1 +0 -4
- data/test/statements/cpt/scanno_1 +0 -4
- data/test/statements/cpt_or_hcpcs/anno_bad_format +0 -7
- data/test/statements/cpt_or_hcpcs/count_1 +0 -5
- data/test/statements/cpt_or_hcpcs/crit_1 +0 -5
- data/test/statements/date_range/anno_1 +0 -7
- data/test/statements/date_range/anno_extra_argument +0 -8
- data/test/statements/date_range/anno_invalid_argument +0 -7
- data/test/statements/date_range/anno_missing_argument1 +0 -6
- data/test/statements/date_range/anno_missing_argument2 +0 -6
- data/test/statements/date_range/anno_no_upstreams +0 -11
- data/test/statements/date_range/count_1 +0 -7
- data/test/statements/date_range/count_2 +0 -7
- data/test/statements/death/anno_multiple_upstreams +0 -10
- data/test/statements/death/anno_no_upstreams +0 -4
- data/test/statements/death/crit_basic +0 -3
- data/test/statements/death/crit_person +0 -7
- data/test/statements/drug_type_concept/anno_has_upstreams +0 -8
- data/test/statements/drug_type_concept/anno_no_arguments +0 -3
- data/test/statements/drug_type_concept/crit_basic1 +0 -4
- data/test/statements/drug_type_concept/crit_basic2 +0 -4
- data/test/statements/during/crit_1 +0 -16
- data/test/statements/during/crit_2 +0 -16
- data/test/statements/equal/crit_1 +0 -17
- data/test/statements/equal/crit_2 +0 -21
- data/test/statements/except/anno_1 +0 -13
- data/test/statements/except/anno_2 +0 -14
- data/test/statements/except/count_complex +0 -31
- data/test/statements/except/crit_412_cpt +0 -13
- data/test/statements/except/crit_412_inpatient +0 -13
- data/test/statements/filter/crit_1 +0 -15
- data/test/statements/first/anno_argument +0 -4
- data/test/statements/first/anno_no_upstream +0 -3
- data/test/statements/first/crit_cpt +0 -7
- data/test/statements/first/crit_icd9 +0 -7
- data/test/statements/first/crit_union +0 -14
- data/test/statements/from/anno_has_upstreams +0 -7
- data/test/statements/from/anno_multiple_arguments +0 -5
- data/test/statements/from_seer_visits/anno_multiple_upstreams +0 -17
- data/test/statements/from_seer_visits/anno_no_upstream +0 -3
- data/test/statements/from_seer_visits/crit_1 +0 -10
- data/test/statements/from_seer_visits/crit_2 +0 -11
- data/test/statements/from_seer_visits/crit_3 +0 -11
- data/test/statements/from_seer_visits/crit_4 +0 -12
- data/test/statements/gender/anno_has_upstreams +0 -7
- data/test/statements/gender/crit_male +0 -4
- data/test/statements/hcpcs/anno_bad_format +0 -6
- data/test/statements/hcpcs/crit_A0382 +0 -4
- data/test/statements/icd10/anno_bad_format +0 -5
- data/test/statements/icd10/anno_has_upstreams +0 -7
- data/test/statements/icd10/crit_1 +0 -4
- data/test/statements/icd10pcs/anno_bad_format +0 -6
- data/test/statements/icd10pcs/anno_has_upstreams +0 -7
- data/test/statements/icd10pcs/crit_1 +0 -4
- data/test/statements/icd9/anno_empty_label +0 -7
- data/test/statements/icd9/anno_invalid_code +0 -4
- data/test/statements/icd9/anno_valid_code +0 -4
- data/test/statements/icd9/crit_1 +0 -4
- data/test/statements/icd9_procedure/crit_1 +0 -4
- data/test/statements/intersect/anno_412_inpatient +0 -11
- data/test/statements/intersect/anno_has_arguments +0 -4
- data/test/statements/intersect/anno_no_upstream +0 -3
- data/test/statements/intersect/crit_412_inpatient +0 -11
- data/test/statements/intersect/crit_412_male +0 -11
- data/test/statements/intersect/crit_complex +0 -19
- data/test/statements/invalid/anno_bad_op +0 -13
- data/test/statements/invalid/scanno_1 +0 -7
- data/test/statements/last/crit_icd9 +0 -7
- data/test/statements/loinc/crit_basic +0 -4
- data/test/statements/ndc/crit_basic +0 -4
- data/test/statements/ndc/results_1 +0 -4
- data/test/statements/numeric/anno_multiple_upstreams +0 -11
- data/test/statements/numeric/num_values_1 +0 -4
- data/test/statements/numeric/num_values_2 +0 -8
- data/test/statements/numeric/num_values_3 +0 -8
- data/test/statements/observation_period/anno_has_arguments +0 -8
- data/test/statements/observation_period/anno_multiple_upstreams +0 -11
- data/test/statements/observation_period/count_all_periods +0 -4
- data/test/statements/observation_period/crit_female +0 -7
- data/test/statements/observation_period/crit_icd9 +0 -7
- data/test/statements/observation_period/crit_male +0 -7
- data/test/statements/occurrence/anno_no_upstream +0 -3
- data/test/statements/occurrence/count_412_410 +0 -17
- data/test/statements/occurrence/crit_1 +0 -8
- data/test/statements/occurrence/crit_2 +0 -11
- data/test/statements/occurrence/crit_3 +0 -11
- data/test/statements/one_in_two_out/anno_has_arguments +0 -8
- data/test/statements/one_in_two_out/anno_multiple_upstreams +0 -15
- data/test/statements/one_in_two_out/anno_no_upstream +0 -7
- data/test/statements/one_in_two_out/count_1 +0 -10
- data/test/statements/one_in_two_out/count_same_as_1 +0 -11
- data/test/statements/one_in_two_out/crit_hcpcs +0 -10
- data/test/statements/one_in_two_out/crit_icd9 +0 -11
- data/test/statements/one_in_two_out/results_1 +0 -9
- data/test/statements/one_in_two_out/results_2 +0 -9
- data/test/statements/overlapped_by/crit_1 +0 -16
- data/test/statements/overlapped_by/crit_2 +0 -16
- data/test/statements/overlapped_by/crit_3 +0 -16
- data/test/statements/overlapped_by/crit_4 +0 -16
- data/test/statements/overlaps/crit_1 +0 -16
- data/test/statements/overlaps/crit_2 +0 -16
- data/test/statements/overlaps/crit_3 +0 -16
- data/test/statements/overlaps/crit_4 +0 -16
- data/test/statements/person/anno_has_arguments +0 -4
- data/test/statements/person/anno_multiple_upstreams +0 -11
- data/test/statements/person/count_2 +0 -3
- data/test/statements/person/crit_1 +0 -7
- data/test/statements/person_filter/count_1 +0 -20
- data/test/statements/person_filter/crit_1 +0 -20
- data/test/statements/person_filter/crit_2 +0 -13
- data/test/statements/person_filter/crit_3 +0 -13
- data/test/statements/person_filter/crit_4 +0 -13
- data/test/statements/place_of_service_code/anno_has_upstreams +0 -8
- data/test/statements/place_of_service_code/anno_no_arguments +0 -3
- data/test/statements/place_of_service_code/crit_basic +0 -4
- data/test/statements/place_of_service_filter/anno_1 +0 -8
- data/test/statements/procedure_occurrence/anno_has_arguments +0 -8
- data/test/statements/procedure_occurrence/anno_multiple_upstreams +0 -11
- data/test/statements/procedure_occurrence/count_gender +0 -7
- data/test/statements/procedure_occurrence/count_icd9 +0 -7
- data/test/statements/procedure_occurrence/count_started_by +0 -19
- data/test/statements/provenance/anno_1 +0 -8
- data/test/statements/provenance/anno_bad_keyword +0 -10
- data/test/statements/provenance/count_1 +0 -8
- data/test/statements/provenance/count_2 +0 -8
- data/test/statements/provider_filter/anno_1 +0 -10
- data/test/statements/race/anno_1 +0 -8
- data/test/statements/race/anno_2 +0 -3
- data/test/statements/race/crit_1 +0 -4
- data/test/statements/read/anno_1 +0 -4
- data/test/statements/read/crit_1 +0 -8
- data/test/statements/recall/anno_1 +0 -16
- data/test/statements/recall/anno_2 +0 -18
- data/test/statements/recall/anno_3 +0 -4
- data/test/statements/recall/anno_4 +0 -3
- data/test/statements/recall/anno_5 +0 -5
- data/test/statements/recall/anno_6 +0 -107
- data/test/statements/recall/crit_1 +0 -17
- data/test/statements/recall/crit_2 +0 -14
- data/test/statements/recall/crit_3 +0 -16
- data/test/statements/recall/crit_cte_1 +0 -17
- data/test/statements/recall/crit_cte_2 +0 -17
- data/test/statements/recall/crit_nested_perm_0 +0 -28
- data/test/statements/revenue_code/crit_1 +0 -4
- data/test/statements/revenue_code/crit_basic +0 -4
- data/test/statements/revenue_code/domains_1 +0 -4
- data/test/statements/revenue_code/domains_drg100 +0 -4
- data/test/statements/rxnorm/crit_1 +0 -4
- data/test/statements/snomed/crit_1 +0 -4
- data/test/statements/started_by/crit_1 +0 -16
- data/test/statements/started_by/crit_2 +0 -16
- data/test/statements/started_by/crit_3 +0 -16
- data/test/statements/sum/anno_1 +0 -3
- data/test/statements/sum/anno_2 +0 -8
- data/test/statements/sum/num_1 +0 -11
- data/test/statements/sum/num_2 +0 -15
- data/test/statements/sum/num_3 +0 -7
- data/test/statements/time_window/anno_1 +0 -7
- data/test/statements/time_window/anno_2 +0 -11
- data/test/statements/time_window/anno_3 +0 -11
- data/test/statements/time_window/anno_4 +0 -12
- data/test/statements/time_window/anno_5 +0 -15
- data/test/statements/time_window/crit_1 +0 -11
- data/test/statements/time_window/crit_2 +0 -11
- data/test/statements/time_window/crit_3 +0 -11
- data/test/statements/time_window/crit_4 +0 -11
- data/test/statements/trim_date_end/crit_1 +0 -16
- data/test/statements/trim_date_end/crit_2 +0 -16
- data/test/statements/trim_date_end/crit_3 +0 -16
- data/test/statements/trim_date_end/crit_at_least +0 -17
- data/test/statements/trim_date_end/crit_occurrences_1 +0 -17
- data/test/statements/trim_date_end/crit_occurrences_2 +0 -17
- data/test/statements/trim_date_end/crit_within +0 -17
- data/test/statements/trim_date_start/crit_1 +0 -16
- data/test/statements/trim_date_start/crit_2 +0 -16
- data/test/statements/trim_date_start/crit_3 +0 -16
- data/test/statements/trim_date_start/crit_at_least +0 -17
- data/test/statements/trim_date_start/crit_occurrences_1 +0 -17
- data/test/statements/trim_date_start/crit_occurrences_2 +0 -17
- data/test/statements/trim_date_start/crit_within +0 -17
- data/test/statements/union/anno_1 +0 -11
- data/test/statements/union/anno_2 +0 -18
- data/test/statements/union/anno_3 +0 -3
- data/test/statements/union/anno_4 +0 -4
- data/test/statements/union/anno_5 +0 -7
- data/test/statements/union/anno_6 +0 -10
- data/test/statements/union/count_1 +0 -11
- data/test/statements/union/count_2 +0 -11
- data/test/statements/union/count_3 +0 -15
- data/test/statements/union/count_4 +0 -18
- data/test/statements/union/count_5 +0 -18
- data/test/statements/union/scanno_1 +0 -3
- data/test/statements/union/scanno_2 +0 -18
- data/test/statements/visit_occurrence/anno_1 +0 -11
- data/test/statements/visit_occurrence/anno_2 +0 -8
- data/test/statements/visit_occurrence/crit_1 +0 -7
- data/test/statements/visit_occurrence/crit_2 +0 -7
- data/test/statements/visit_occurrence/crit_3 +0 -3
|
@@ -1,95 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
|
|
5
|
-
require
|
|
6
|
-
require_relative '../query_modifiers/pos_query_modifier'
|
|
7
|
-
require_relative '../query_modifiers/drug_query_modifier'
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "zlib"
|
|
4
|
+
require_relative "../behaviors/metadatable"
|
|
5
|
+
require "forwardable"
|
|
8
6
|
|
|
9
7
|
module ConceptQL
|
|
10
8
|
module Operators
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
:visit_occurrence=> :place_of_service_source_value
|
|
31
|
-
}.freeze.each_value(&:freeze)
|
|
32
|
-
|
|
33
|
-
TABLE_COLUMNS = {
|
|
34
|
-
:care_site=>[:care_site_id, :location_id, :organization_id, :place_of_service_concept_id, :care_site_source_value, :place_of_service_source_value],
|
|
35
|
-
:cohort=>[:cohort_id, :cohort_concept_id, :cohort_start_date, :cohort_end_date, :subject_id, :stop_reason],
|
|
36
|
-
:concept=>[:concept_id, :concept_name, :concept_level, :concept_class, :vocabulary_id, :concept_code, :valid_start_date, :valid_end_date, :invalid_reason],
|
|
37
|
-
:concept_ancestor=>[:ancestor_concept_id, :descendant_concept_id, :min_levels_of_separation, :max_levels_of_separation],
|
|
38
|
-
:concept_relationship=>[:concept_id_1, :concept_id_2, :relationship_id, :valid_start_date, :valid_end_date, :invalid_reason],
|
|
39
|
-
:concept_synonym=>[:concept_synonym_id, :concept_id, :concept_synonym_name],
|
|
40
|
-
:condition_era=>[:condition_era_id, :person_id, :condition_concept_id, :condition_era_start_date, :condition_era_end_date, :condition_type_concept_id, :condition_occurrence_count],
|
|
41
|
-
:condition_occurrence=>[:condition_occurrence_id, :person_id, :condition_concept_id, :condition_start_date, :condition_end_date, :condition_type_concept_id, :stop_reason, :associated_provider_id, :visit_occurrence_id, :condition_source_value],
|
|
42
|
-
:death=>[:person_id, :death_date, :death_type_concept_id, :cause_of_death_concept_id, :cause_of_death_source_value],
|
|
43
|
-
:drug_approval=>[:ingredient_concept_id, :approval_date, :approved_by],
|
|
44
|
-
:drug_cost=>[:drug_cost_id, :drug_exposure_id, :paid_copay, :paid_coinsurance, :paid_toward_deductible, :paid_by_payer, :paid_by_coordination_benefits, :total_out_of_pocket, :total_paid, :ingredient_cost, :dispensing_fee, :average_wholesale_price, :payer_plan_period_id],
|
|
45
|
-
:drug_era=>[:drug_era_id, :person_id, :drug_concept_id, :drug_era_start_date, :drug_era_end_date, :drug_type_concept_id, :drug_exposure_count],
|
|
46
|
-
:drug_exposure=>[:drug_exposure_id, :person_id, :drug_concept_id, :drug_exposure_start_date, :drug_exposure_end_date, :drug_type_concept_id, :stop_reason, :refills, :quantity, :days_supply, :sig, :prescribing_provider_id, :visit_occurrence_id, :relevant_condition_concept_id, :drug_source_value],
|
|
47
|
-
:drug_strength=>[:drug_concept_id, :ingredient_concept_id, :amount_value, :amount_unit, :concentration_value, :concentration_enum_unit, :concentration_denom_unit, :valid_start_date, :valid_end_date, :invalid_reason],
|
|
48
|
-
:location=>[:location_id, :address_1, :address_2, :city, :state, :zip, :county, :location_source_value],
|
|
49
|
-
:observation=>[:observation_id, :person_id, :observation_concept_id, :observation_date, :observation_time, :value_as_number, :value_as_string, :value_as_concept_id, :unit_concept_id, :range_low, :range_high, :observation_type_concept_id, :associated_provider_id, :visit_occurrence_id, :relevant_condition_concept_id, :observation_source_value, :unit_source_value],
|
|
50
|
-
:observation_period=>[:observation_period_id, :person_id, :observation_period_start_date, :observation_period_end_date, :prev_ds_period_end_date],
|
|
51
|
-
:organization=>[:organization_id, :place_of_service_concept_id, :location_id, :organization_source_value, :place_of_service_source_value],
|
|
52
|
-
:payer_plan_period=>[:payer_plan_period_id, :person_id, :payer_plan_period_start_date, :payer_plan_period_end_date, :payer_source_value, :plan_source_value, :family_source_value, :prev_ds_period_end_date],
|
|
53
|
-
:person=>[:person_id, :gender_concept_id, :year_of_birth, :month_of_birth, :day_of_birth, :race_concept_id, :ethnicity_concept_id, :location_id, :provider_id, :care_site_id, :person_source_value, :gender_source_value, :race_source_value, :ethnicity_source_value],
|
|
54
|
-
:procedure_cost=>[:procedure_cost_id, :procedure_occurrence_id, :paid_copay, :paid_coinsurance, :paid_toward_deductible, :paid_by_payer, :paid_by_coordination_benefits, :total_out_of_pocket, :total_paid, :disease_class_concept_id, :revenue_code_concept_id, :payer_plan_period_id, :disease_class_source_value, :revenue_code_source_value],
|
|
55
|
-
:procedure_occurrence=>[:procedure_occurrence_id, :person_id, :procedure_concept_id, :procedure_date, :procedure_type_concept_id, :associated_provider_id, :visit_occurrence_id, :relevant_condition_concept_id, :procedure_source_value],
|
|
56
|
-
:provider=>[:provider_id, :npi, :dea, :specialty_concept_id, :care_site_id, :provider_source_value, :specialty_source_value],
|
|
57
|
-
:relationship=>[:relationship_id, :relationship_name, :is_hierarchical, :defines_ancestry, :reverse_relationship],
|
|
58
|
-
:source_to_concept_map=>[:source_code, :source_vocabulary_id, :source_code_description, :target_concept_id, :target_vocabulary_id, :mapping_type, :primary_map, :valid_start_date, :valid_end_date, :invalid_reason],
|
|
59
|
-
:visit_occurrence=>[:visit_occurrence_id, :person_id, :visit_start_date, :visit_end_date, :place_of_service_concept_id, :care_site_id, :place_of_service_source_value],
|
|
60
|
-
:vocabulary=>[:vocabulary_id, :vocabulary_name],
|
|
61
|
-
|
|
62
|
-
# Modifier Tables
|
|
63
|
-
:drug_appendix=>[:drug_name, :drug_amount, :drug_amount_units]
|
|
64
|
-
}.freeze.each_value(&:freeze)
|
|
65
|
-
|
|
66
|
-
def self.operators
|
|
67
|
-
OPERATORS
|
|
9
|
+
# Built-in operators only: the classes that call Operator.register when
|
|
10
|
+
# their file loads. Vocabulary operators are not in here; each
|
|
11
|
+
# ConceptQL::Database builds its own from its lexicon (Database#operators).
|
|
12
|
+
STATIC_OPERATORS = { omopv4_plus: {}, gdm: {}, gdm_wide: {} }.freeze
|
|
13
|
+
|
|
14
|
+
SELECTED_COLUMNS = %i[person_id
|
|
15
|
+
criterion_id
|
|
16
|
+
criterion_table
|
|
17
|
+
criterion_domain
|
|
18
|
+
start_date
|
|
19
|
+
end_date
|
|
20
|
+
value_as_number
|
|
21
|
+
value_as_string
|
|
22
|
+
value_as_concept_id
|
|
23
|
+
units_source_value
|
|
24
|
+
source_value].freeze
|
|
25
|
+
|
|
26
|
+
def self.static_operators
|
|
27
|
+
STATIC_OPERATORS
|
|
68
28
|
end
|
|
69
29
|
|
|
70
30
|
class Operator
|
|
71
31
|
extend Forwardable
|
|
72
32
|
extend ConceptQL::Metadatable
|
|
73
33
|
|
|
74
|
-
|
|
34
|
+
attr_reader :nodifier, :values, :options, :arguments, :upstreams, :op_name, :errors, :warnings
|
|
75
35
|
|
|
76
36
|
option :label, type: :string
|
|
77
37
|
|
|
78
38
|
@validations = []
|
|
79
39
|
|
|
80
40
|
class << self
|
|
81
|
-
|
|
41
|
+
attr_reader :validations, :required_columns
|
|
82
42
|
|
|
83
43
|
def register(file, *data_models)
|
|
84
|
-
data_models =
|
|
44
|
+
data_models = STATIC_OPERATORS.keys if data_models.empty?
|
|
85
45
|
data_models.each do |dm|
|
|
86
|
-
|
|
46
|
+
op_name = File.basename(file).sub(/\.rb\z/, "").downcase
|
|
47
|
+
Operators.static_operators[dm][op_name] = self
|
|
87
48
|
end
|
|
88
49
|
end
|
|
89
50
|
|
|
90
51
|
def query_columns(*tables)
|
|
91
52
|
define_method(:query_cols) do
|
|
92
|
-
table_columns(*tables)
|
|
53
|
+
dm.table_columns(*tables)
|
|
93
54
|
end
|
|
94
55
|
end
|
|
95
56
|
|
|
@@ -104,7 +65,7 @@ module ConceptQL
|
|
|
104
65
|
@required_columns << column
|
|
105
66
|
end
|
|
106
67
|
|
|
107
|
-
validation_meths =
|
|
68
|
+
validation_meths = <<-END.split.map(&:to_sym)
|
|
108
69
|
no_upstreams
|
|
109
70
|
one_upstream
|
|
110
71
|
at_least_one_upstream
|
|
@@ -121,19 +82,21 @@ module ConceptQL
|
|
|
121
82
|
validation_meths.each do |type|
|
|
122
83
|
meth = :"validate_#{type}"
|
|
123
84
|
define_method(meth) do |*args|
|
|
124
|
-
validations << [meth, *args]
|
|
85
|
+
validations << [ meth, *args ]
|
|
125
86
|
end
|
|
126
87
|
end
|
|
127
88
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
89
|
+
# Declares inherited options that this operator does not support.
|
|
90
|
+
# They leave the operator's metadata, and a statement that sets one
|
|
91
|
+
# fails validation.
|
|
92
|
+
def unsupported_options(*names)
|
|
93
|
+
names.each { |name| remove_option(name) }
|
|
94
|
+
validations << [ :validate_unsupported_options, *names ]
|
|
131
95
|
end
|
|
132
96
|
|
|
133
97
|
def inherited(subclass)
|
|
134
98
|
super
|
|
135
99
|
subclass.instance_variable_set(:@validations, validations.dup)
|
|
136
|
-
subclass.instance_variable_set(:@codes_regexp, codes_regexp.dup) if codes_regexp
|
|
137
100
|
end
|
|
138
101
|
|
|
139
102
|
def new(*)
|
|
@@ -143,20 +106,23 @@ module ConceptQL
|
|
|
143
106
|
# to it use the same code.
|
|
144
107
|
if operator.label && !operator.errors
|
|
145
108
|
operator.scope.add_operator(operator)
|
|
146
|
-
operator = Operators::Recall.new(operator.nodifier, operator.label, replaced: true)
|
|
109
|
+
operator = Operators::Recall.new(operator.nodifier, "recall", operator.label, replaced: true)
|
|
147
110
|
end
|
|
148
111
|
|
|
149
112
|
operator
|
|
150
113
|
end
|
|
151
114
|
end
|
|
152
115
|
|
|
153
|
-
def initialize(nodifier, *args)
|
|
116
|
+
def initialize(nodifier, op_name, *args)
|
|
154
117
|
@nodifier = nodifier
|
|
118
|
+
|
|
119
|
+
# Under what name was this operator instantiated?
|
|
120
|
+
# For operators like "vocabulary", this tells the instance which
|
|
121
|
+
# vocabulary operator to impersonate
|
|
122
|
+
@op_name = op_name
|
|
155
123
|
@options = {}
|
|
156
|
-
while args.last.is_a?(Hash)
|
|
157
|
-
|
|
158
|
-
end
|
|
159
|
-
args.reject!{|arg| arg.nil? || arg == ''}
|
|
124
|
+
@options = @options.merge(ConceptQL::Utils.rekey(args.pop)) while args.last.is_a?(Hash)
|
|
125
|
+
args.reject! { |arg| arg.nil? || arg == "" }
|
|
160
126
|
@upstreams, @arguments = args.partition { |arg| arg.is_a?(Array) || arg.is_a?(Operator) }
|
|
161
127
|
@values = args
|
|
162
128
|
|
|
@@ -166,7 +132,7 @@ module ConceptQL
|
|
|
166
132
|
end
|
|
167
133
|
|
|
168
134
|
def create_upstreams
|
|
169
|
-
@upstreams.map!{|stmt| to_op(stmt)}
|
|
135
|
+
@upstreams.map! { |stmt| to_op(stmt) }
|
|
170
136
|
end
|
|
171
137
|
|
|
172
138
|
def to_op(stmt)
|
|
@@ -178,47 +144,54 @@ module ConceptQL
|
|
|
178
144
|
end
|
|
179
145
|
|
|
180
146
|
def required_columns
|
|
181
|
-
self.class.required_columns
|
|
147
|
+
cols = self.class.required_columns || []
|
|
148
|
+
cols |= [ :uuid ] if options[:uuid]
|
|
149
|
+
cols
|
|
182
150
|
end
|
|
183
151
|
|
|
184
152
|
def dynamic_columns
|
|
185
153
|
scope.query_columns
|
|
186
154
|
end
|
|
187
155
|
|
|
156
|
+
def cte_name(name)
|
|
157
|
+
scope.cte_name(name)
|
|
158
|
+
end
|
|
159
|
+
|
|
188
160
|
def annotate(db, opts = {})
|
|
189
|
-
return @
|
|
161
|
+
return @annotate if defined?(@annotate)
|
|
190
162
|
|
|
191
|
-
scope_key = options[:id]||
|
|
163
|
+
scope_key = options[:id] || op_name
|
|
192
164
|
annotation = {}
|
|
193
165
|
counts = (annotation[:counts] ||= {})
|
|
194
|
-
metadata = {:annotation
|
|
195
|
-
|
|
166
|
+
metadata = { annotation: annotation }
|
|
167
|
+
|
|
168
|
+
if (name = preferred_name)
|
|
196
169
|
metadata[:name] = name
|
|
197
170
|
end
|
|
198
|
-
res = [
|
|
171
|
+
res = [ op_name, *annotate_values(db, opts) ]
|
|
199
172
|
|
|
200
173
|
if upstreams_valid?(db, opts) && scope.valid? && include_counts?(db, opts)
|
|
201
|
-
scope.with_ctes(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
174
|
+
scope.with_ctes(self, db)
|
|
175
|
+
.from_self
|
|
176
|
+
.select_group(:criterion_domain)
|
|
177
|
+
.select_append { Sequel.function(:count, 1).as(:rows) }
|
|
178
|
+
.select_append { count(:person_id).distinct.as(:n) }
|
|
179
|
+
.each do |h|
|
|
180
|
+
counts[h.delete(:criterion_domain).to_sym] = h
|
|
181
|
+
end
|
|
209
182
|
elsif !errors.empty?
|
|
210
183
|
annotation[:errors] = errors
|
|
211
184
|
scope.add_errors(scope_key, errors)
|
|
212
185
|
end
|
|
213
|
-
|
|
186
|
+
|
|
214
187
|
domains(db).each do |domain|
|
|
215
|
-
cur_counts = counts[domain] ||= {:
|
|
188
|
+
cur_counts = counts[domain] ||= { rows: 0, n: 0 }
|
|
216
189
|
scope.add_counts(scope_key, domain, cur_counts)
|
|
217
190
|
end
|
|
218
191
|
|
|
219
192
|
if defined?(@warnings) && !warnings.empty?
|
|
220
193
|
annotation[:warnings] = warnings
|
|
221
|
-
scope.add_warnings(scope_key, warnings)
|
|
194
|
+
scope.add_warnings(scope_key, warnings.dup)
|
|
222
195
|
end
|
|
223
196
|
|
|
224
197
|
if res.last.is_a?(Hash)
|
|
@@ -227,18 +200,11 @@ module ConceptQL
|
|
|
227
200
|
res << metadata
|
|
228
201
|
end
|
|
229
202
|
|
|
230
|
-
@
|
|
203
|
+
@annotate = res
|
|
231
204
|
end
|
|
232
205
|
|
|
233
206
|
def code_list(db)
|
|
234
|
-
|
|
235
|
-
upstream_op.code_list(db)
|
|
236
|
-
end
|
|
237
|
-
code_lists.flatten(1)
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
def dup_values(args)
|
|
241
|
-
self.class.new(nodifier, *args)
|
|
207
|
+
upstreams.flat_map { |upstream_op| upstream_op.code_list(db) }
|
|
242
208
|
end
|
|
243
209
|
|
|
244
210
|
def inspect
|
|
@@ -246,61 +212,96 @@ module ConceptQL
|
|
|
246
212
|
end
|
|
247
213
|
|
|
248
214
|
def evaluate(db)
|
|
249
|
-
select_it(query(db))
|
|
215
|
+
q = select_it(query(db))
|
|
216
|
+
name = cte_name(op_name)
|
|
217
|
+
opts = {}
|
|
218
|
+
opts[:materialized] = true if rdbms.supports_materialized?
|
|
219
|
+
db[name].with(name, q, opts)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def pretty_print(pp)
|
|
223
|
+
pp.object_group self do
|
|
224
|
+
unless pp_upstreams.empty?
|
|
225
|
+
pp.breakable
|
|
226
|
+
pp.text "@upstreams="
|
|
227
|
+
pp.pp pp_upstreams
|
|
228
|
+
pp.comma_breakable unless arguments.empty?
|
|
229
|
+
end
|
|
230
|
+
unless arguments.empty?
|
|
231
|
+
pp.breakable if pp_upstreams.empty?
|
|
232
|
+
pp.text "@arguments="
|
|
233
|
+
pp.pp arguments
|
|
234
|
+
end
|
|
235
|
+
end
|
|
250
236
|
end
|
|
251
237
|
|
|
252
|
-
def
|
|
253
|
-
|
|
238
|
+
def pp_upstreams
|
|
239
|
+
upstreams
|
|
254
240
|
end
|
|
255
241
|
|
|
256
|
-
def
|
|
257
|
-
|
|
242
|
+
def all_upstreams
|
|
243
|
+
upstreams
|
|
258
244
|
end
|
|
259
245
|
|
|
260
|
-
def
|
|
261
|
-
|
|
246
|
+
def sql(db)
|
|
247
|
+
evaluate(db).sql
|
|
262
248
|
end
|
|
263
249
|
|
|
264
|
-
def select_it(query,
|
|
265
|
-
|
|
266
|
-
|
|
250
|
+
def select_it(query, opts = {})
|
|
251
|
+
specific_table = opts[:specific_table]
|
|
252
|
+
specific_table ||= dm.determine_table(:source_table)
|
|
253
|
+
specific_table ||= dm.determine_table(:table)
|
|
254
|
+
specific_table ||= dm.determine_table(:domain)
|
|
255
|
+
|
|
256
|
+
dom = begin
|
|
257
|
+
opts[:domain] || domain
|
|
258
|
+
rescue StandardError
|
|
259
|
+
nil
|
|
267
260
|
end
|
|
268
261
|
|
|
269
|
-
|
|
262
|
+
opts = {
|
|
263
|
+
table: specific_table,
|
|
264
|
+
criterion_domain: dom,
|
|
265
|
+
query_columns: override_columns,
|
|
266
|
+
uuid: opts[:uuid] || options[:uuid]
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
cf = column_family || (specific_table ? ConceptQL::Scope::DEFAULT_COLUMN_FAMILY : nil)
|
|
270
|
+
opts[:replace] ||= {}
|
|
271
|
+
opts[:replace][:label] = label if label
|
|
272
|
+
opts[:replace][:column_family] = cf if cf
|
|
270
273
|
|
|
271
|
-
|
|
272
|
-
q = q.where(person_id: scope.person_ids).from_self
|
|
273
|
-
end
|
|
274
|
+
query = query.comment(comment) if comments?
|
|
274
275
|
|
|
275
|
-
|
|
276
|
+
dm.selectify(query, opts)
|
|
276
277
|
end
|
|
277
278
|
|
|
278
|
-
def
|
|
279
|
-
|
|
279
|
+
def comments?
|
|
280
|
+
ENV["CONCEPTQL_ENABLE_COMMENTS"] == "true"
|
|
280
281
|
end
|
|
281
282
|
|
|
282
|
-
def
|
|
283
|
-
|
|
283
|
+
def comment
|
|
284
|
+
PP.pp(self, "".dup, 10)
|
|
284
285
|
end
|
|
285
286
|
|
|
286
|
-
def
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
def override_columns
|
|
288
|
+
nil
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def domains(db)
|
|
292
|
+
@domains ||= determine_domains(db)
|
|
289
293
|
end
|
|
290
294
|
|
|
291
|
-
def
|
|
292
|
-
|
|
295
|
+
def tables
|
|
296
|
+
@tables ||= determine_tables
|
|
297
|
+
end
|
|
293
298
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
299
|
+
def stream
|
|
300
|
+
@stream ||= upstreams.first
|
|
301
|
+
end
|
|
297
302
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
criterion_domain]
|
|
301
|
-
columns += date_columns(query, local_domain)
|
|
302
|
-
columns += [ source_value(query, local_domain) ]
|
|
303
|
-
columns += additional_columns(query, local_domain)
|
|
303
|
+
def columns(table = nil)
|
|
304
|
+
dm.columns(table: table)
|
|
304
305
|
end
|
|
305
306
|
|
|
306
307
|
def label
|
|
@@ -310,18 +311,15 @@ module ConceptQL
|
|
|
310
311
|
end
|
|
311
312
|
end
|
|
312
313
|
|
|
313
|
-
|
|
314
|
+
def column_family; end
|
|
314
315
|
|
|
315
316
|
def valid?(db, opts = {})
|
|
316
|
-
return @errors.empty? if defined?(@errors)
|
|
317
|
-
@errors = []
|
|
318
|
-
@warnings = []
|
|
319
317
|
validate(db, opts)
|
|
320
318
|
errors.empty?
|
|
321
319
|
end
|
|
322
320
|
|
|
323
321
|
def upstreams_valid?(db, opts = {})
|
|
324
|
-
|
|
322
|
+
valid?(db, opts) && upstreams.all? { |u| u.upstreams_valid?(db, opts) }
|
|
325
323
|
end
|
|
326
324
|
|
|
327
325
|
def scope
|
|
@@ -350,94 +348,81 @@ module ConceptQL
|
|
|
350
348
|
end
|
|
351
349
|
end
|
|
352
350
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
def annotate_values(db, opts)
|
|
356
|
-
(upstreams.map { |op| op.annotate(db, opts) } + arguments).push(options)
|
|
351
|
+
def omopv4_plus?
|
|
352
|
+
data_model == :omopv4_plus
|
|
357
353
|
end
|
|
358
354
|
|
|
359
|
-
def
|
|
360
|
-
|
|
355
|
+
def gdm?
|
|
356
|
+
%i[gdm gdm_wide].include?(data_model)
|
|
361
357
|
end
|
|
362
358
|
|
|
363
|
-
def
|
|
364
|
-
|
|
365
|
-
domain = :person if domain == :death
|
|
366
|
-
Sequel.expr(make_domain_id(domain)).as(:criterion_id)
|
|
359
|
+
def wide?
|
|
360
|
+
%i[gdm_wide].include?(data_model)
|
|
367
361
|
end
|
|
368
362
|
|
|
369
|
-
def
|
|
370
|
-
(
|
|
363
|
+
def dm
|
|
364
|
+
@dm ||= DataModel.for(self, nodifier)
|
|
371
365
|
end
|
|
372
366
|
|
|
373
|
-
def
|
|
374
|
-
|
|
367
|
+
def rdbms
|
|
368
|
+
dm.rdbms
|
|
375
369
|
end
|
|
376
370
|
|
|
377
371
|
def query_cols
|
|
378
372
|
raise NotImplementedError, self
|
|
379
373
|
end
|
|
380
374
|
|
|
381
|
-
def
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
if ENV['CONCEPTQL_CHECK_COLUMNS']
|
|
387
|
-
if cols.sort != query.columns.sort
|
|
388
|
-
raise "columns don't match:\nclass: #{self.class}\nexpected: #{cols}\nactual: #{query.columns}\nvalues: #{values}\nSQL: #{query.sql}"
|
|
389
|
-
end
|
|
375
|
+
def events_per_patient
|
|
376
|
+
if upstreams.first
|
|
377
|
+
upstreams.first.events_per_patient
|
|
378
|
+
else
|
|
379
|
+
:multiple
|
|
390
380
|
end
|
|
391
|
-
|
|
392
|
-
cols
|
|
393
|
-
end
|
|
394
|
-
|
|
395
|
-
def omopv4_plus?
|
|
396
|
-
data_model == :omopv4_plus
|
|
397
381
|
end
|
|
398
382
|
|
|
399
|
-
def
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
383
|
+
def vocabularies
|
|
384
|
+
if respond_to?(:vocab_entry)
|
|
385
|
+
[ vocab_entry.omopv5_vocabulary_id ]
|
|
386
|
+
elsif upstreams.any?
|
|
387
|
+
upstreams.flat_map(&:vocabularies).uniq
|
|
388
|
+
else
|
|
389
|
+
[]
|
|
390
|
+
end
|
|
405
391
|
end
|
|
406
392
|
|
|
407
|
-
def
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
393
|
+
def multiple_vocabularies
|
|
394
|
+
if upstreams.any?
|
|
395
|
+
upstreams.first.multiple_vocabularies
|
|
396
|
+
else
|
|
397
|
+
false
|
|
411
398
|
end
|
|
412
|
-
table
|
|
413
399
|
end
|
|
414
400
|
|
|
415
|
-
def
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
if omopv4_plus?
|
|
419
|
-
cols += Array(table_vocabulary_id(table))
|
|
420
|
-
end
|
|
421
|
-
cols
|
|
401
|
+
def accept(visitor, opts = {})
|
|
402
|
+
visitor.visit(self)
|
|
403
|
+
upstreams.each { |u| u.accept(visitor, opts) }
|
|
422
404
|
end
|
|
423
405
|
|
|
424
|
-
|
|
425
|
-
|
|
406
|
+
private
|
|
407
|
+
|
|
408
|
+
def annotate_values(db, opts)
|
|
409
|
+
(upstreams.map { |op| op.annotate(db, opts) } + arguments).push(options)
|
|
426
410
|
end
|
|
427
411
|
|
|
428
|
-
def
|
|
429
|
-
|
|
412
|
+
def make_table_name(table)
|
|
413
|
+
Sequel.as(table, :tab)
|
|
430
414
|
end
|
|
431
415
|
|
|
432
|
-
def
|
|
433
|
-
|
|
416
|
+
def query_columns(query)
|
|
417
|
+
dm.query_columns(query)
|
|
434
418
|
end
|
|
435
419
|
|
|
436
|
-
def additional_columns(query,
|
|
420
|
+
def additional_columns(query, table)
|
|
437
421
|
special_columns = {
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
422
|
+
code_provenance_type: proc { code_provenance_type(query, table) },
|
|
423
|
+
file_provenance_type: proc { file_provenance_type(query, table) },
|
|
424
|
+
provider_id: proc { provider_id(query, table) },
|
|
425
|
+
visit_source_concept_id: proc { dm.place_of_service_concept_id(query, table) }
|
|
441
426
|
}
|
|
442
427
|
|
|
443
428
|
additional_cols = special_columns.each_with_object([]) do |(column, proc_obj), columns|
|
|
@@ -449,216 +434,91 @@ module ConceptQL
|
|
|
449
434
|
|
|
450
435
|
standard_columns.each do |column|
|
|
451
436
|
additional_cols << if query_columns(query).include?(column)
|
|
452
|
-
|
|
437
|
+
column
|
|
453
438
|
else
|
|
454
|
-
|
|
439
|
+
cast_column(column)
|
|
455
440
|
end
|
|
456
441
|
end
|
|
457
442
|
|
|
458
443
|
additional_cols
|
|
459
444
|
end
|
|
460
445
|
|
|
461
|
-
def source_value(query,
|
|
446
|
+
def source_value(query, table)
|
|
462
447
|
return :source_value if query_columns(query).include?(:source_value)
|
|
463
|
-
|
|
448
|
+
|
|
449
|
+
cast_column(:source_value, dm.source_value_column(query, table))
|
|
464
450
|
end
|
|
465
451
|
|
|
466
|
-
def
|
|
467
|
-
return :
|
|
468
|
-
|
|
452
|
+
def source_vocabulary_id(query, table)
|
|
453
|
+
return :source_vocabulary_id if query_columns(query).include?(:source_vocabulary_id)
|
|
454
|
+
|
|
455
|
+
cast_column(:source_vocabulary_id, dm.source_vocabulary_id(query, table))
|
|
469
456
|
end
|
|
470
457
|
|
|
471
|
-
def
|
|
472
|
-
return :
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
def place_of_service_concept_id(query, domain)
|
|
477
|
-
return :place_of_service_concept_id if query_columns(query).include?(:place_of_service_concept_id)
|
|
478
|
-
cast_column(:place_of_service_concept_id, place_of_service_concept_id_column(query, domain))
|
|
479
|
-
end
|
|
480
|
-
|
|
481
|
-
def date_columns(query, domain = nil)
|
|
482
|
-
return [:start_date, :end_date] if (query_columns(query).include?(:start_date) && query_columns(query).include?(:end_date))
|
|
483
|
-
return [:start_date, :end_date] unless domain
|
|
484
|
-
|
|
485
|
-
date_klass = Date
|
|
486
|
-
if query.db.database_type == :impala
|
|
487
|
-
date_klass = DateTime
|
|
488
|
-
end
|
|
489
|
-
|
|
490
|
-
sd = start_date_column(query, domain)
|
|
491
|
-
sd = Sequel.cast(Sequel.expr(sd), date_klass).as(:start_date) unless sd == :start_date
|
|
492
|
-
ed = end_date_column(query, domain)
|
|
493
|
-
ed = Sequel.cast(Sequel.function(:coalesce, Sequel.expr(ed), start_date_column(query, domain)), date_klass).as(:end_date) unless ed == :end_date
|
|
494
|
-
[sd, ed]
|
|
495
|
-
end
|
|
496
|
-
|
|
497
|
-
# TODO: Move these hashes into a configuration file
|
|
498
|
-
# THey are OMOP-specific bits of information and need to be abstracted away
|
|
499
|
-
|
|
500
|
-
def start_date_column(query, domain)
|
|
501
|
-
{
|
|
502
|
-
condition_occurrence: :condition_start_date,
|
|
503
|
-
death: :death_date,
|
|
504
|
-
drug_exposure: :drug_exposure_start_date,
|
|
505
|
-
drug_cost: nil,
|
|
506
|
-
payer_plan_period: :payer_plan_period_start_date,
|
|
507
|
-
person: person_date_of_birth(query),
|
|
508
|
-
procedure_occurrence: :procedure_date,
|
|
509
|
-
procedure_cost: nil,
|
|
510
|
-
observation: :observation_date,
|
|
511
|
-
observation_period: :observation_period_start_date,
|
|
512
|
-
visit_occurrence: :visit_start_date
|
|
513
|
-
}[domain]
|
|
514
|
-
end
|
|
515
|
-
|
|
516
|
-
def end_date_column(query, domain)
|
|
517
|
-
{
|
|
518
|
-
condition_occurrence: :condition_end_date,
|
|
519
|
-
death: :death_date,
|
|
520
|
-
drug_exposure: :drug_exposure_end_date,
|
|
521
|
-
drug_cost: nil,
|
|
522
|
-
payer_plan_period: :payer_plan_period_end_date,
|
|
523
|
-
person: person_date_of_birth(query),
|
|
524
|
-
procedure_occurrence: :procedure_date,
|
|
525
|
-
procedure_cost: nil,
|
|
526
|
-
observation: :observation_date,
|
|
527
|
-
observation_period: :observation_period_end_date,
|
|
528
|
-
visit_occurrence: :visit_end_date
|
|
529
|
-
}[domain]
|
|
530
|
-
end
|
|
531
|
-
|
|
532
|
-
def source_value_column(query, domain)
|
|
533
|
-
{
|
|
534
|
-
condition_occurrence: :condition_source_value,
|
|
535
|
-
death: :cause_of_death_source_value,
|
|
536
|
-
drug_exposure: :drug_source_value,
|
|
537
|
-
drug_cost: nil,
|
|
538
|
-
payer_plan_period: :payer_plan_period_source_value,
|
|
539
|
-
person: :person_source_value,
|
|
540
|
-
procedure_occurrence: :procedure_source_value,
|
|
541
|
-
procedure_cost: nil,
|
|
542
|
-
observation: :observation_source_value,
|
|
543
|
-
observation_period: nil,
|
|
544
|
-
visit_occurrence: :place_of_service_source_value
|
|
545
|
-
}[domain]
|
|
546
|
-
end
|
|
547
|
-
|
|
548
|
-
def provenance_type_column(query, domain)
|
|
549
|
-
{
|
|
550
|
-
condition_occurrence: :condition_type_concept_id,
|
|
551
|
-
death: :death_type_concept_id,
|
|
552
|
-
drug_exposure: :drug_type_concept_id,
|
|
553
|
-
observation: :observation_type_concept_id,
|
|
554
|
-
procedure_occurrence: :procedure_type_concept_id
|
|
555
|
-
}[domain]
|
|
556
|
-
end
|
|
557
|
-
|
|
558
|
-
def provenance_type_column(query, domain)
|
|
559
|
-
{
|
|
560
|
-
condition_occurrence: :condition_type_concept_id,
|
|
561
|
-
death: :death_type_concept_id,
|
|
562
|
-
drug_exposure: :drug_type_concept_id,
|
|
563
|
-
observation: :observation_type_concept_id,
|
|
564
|
-
procedure_occurrence: :procedure_type_concept_id
|
|
565
|
-
}[domain]
|
|
566
|
-
end
|
|
567
|
-
|
|
568
|
-
def provider_id_column(query, domain)
|
|
569
|
-
{
|
|
570
|
-
condition_occurrence: :associated_provider_id,
|
|
571
|
-
death: :death_type_concept_id,
|
|
572
|
-
drug_exposure: :prescribing_provider_id,
|
|
573
|
-
observation: :associated_provider_id,
|
|
574
|
-
person: :provider_id,
|
|
575
|
-
procedure_occurrence: :associated_provider_id,
|
|
576
|
-
provider: :provider_id
|
|
577
|
-
}[domain]
|
|
578
|
-
end
|
|
579
|
-
|
|
580
|
-
def place_of_service_concept_id_column(query, domain)
|
|
581
|
-
return nil if domain.nil?
|
|
582
|
-
return :place_of_service_concept_id if table_cols(domain).include?(:visit_occurrence_id)
|
|
583
|
-
return nil
|
|
584
|
-
end
|
|
585
|
-
|
|
586
|
-
def modify_query(query, domain)
|
|
587
|
-
{
|
|
588
|
-
place_of_service_concept_id: ConceptQL::QueryModifiers::PoSQueryModifier,
|
|
589
|
-
drug_name: ConceptQL::QueryModifiers::DrugQueryModifier
|
|
590
|
-
}.each do |column, klass|
|
|
591
|
-
#p [domain, column, table, join_id, source_column]
|
|
592
|
-
#p dynamic_columns
|
|
593
|
-
#p query_cols
|
|
594
|
-
next if domain.nil?
|
|
595
|
-
next unless dynamic_columns.include?(column)
|
|
596
|
-
query = klass.new(query, self).modified_query
|
|
597
|
-
end
|
|
598
|
-
|
|
599
|
-
query
|
|
600
|
-
end
|
|
601
|
-
|
|
602
|
-
def person_date_of_birth(query)
|
|
603
|
-
assemble_date(query, :year_of_birth, :month_of_birth, :day_of_birth)
|
|
604
|
-
end
|
|
605
|
-
|
|
606
|
-
def assemble_date(query, *symbols)
|
|
607
|
-
strings = symbols.map do |symbol|
|
|
608
|
-
sub = '2000'
|
|
609
|
-
col = Sequel.cast_string(symbol)
|
|
610
|
-
if symbol != :year_of_birth
|
|
611
|
-
sub = '01'
|
|
612
|
-
col = Sequel.function(:lpad, col, 2, '0')
|
|
613
|
-
end
|
|
614
|
-
Sequel.function(:coalesce, col, Sequel.expr(sub))
|
|
615
|
-
end
|
|
458
|
+
def code_provenance_type(query, table)
|
|
459
|
+
return :code_provenance_type if query_columns(query).include?(:code_provenance_type)
|
|
460
|
+
|
|
461
|
+
cast_column(:code_provenance_type, dm.provenance_type_column(query, table))
|
|
462
|
+
end
|
|
616
463
|
|
|
617
|
-
|
|
618
|
-
|
|
464
|
+
def file_provenance_type(query, table)
|
|
465
|
+
return :file_provenance_type if query_columns(query).include?(:file_provenance_type)
|
|
619
466
|
|
|
620
|
-
|
|
621
|
-
if query.db.database_type == :impala
|
|
622
|
-
date = Sequel.cast(Sequel.function(:concat_ws, '-', *strings), DateTime)
|
|
623
|
-
end
|
|
624
|
-
cast_date(query.db, date)
|
|
467
|
+
cast_column(:file_provenance_type, dm.provenance_type_column(query, table))
|
|
625
468
|
end
|
|
626
469
|
|
|
627
|
-
def
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
470
|
+
def provider_id(query, table)
|
|
471
|
+
return :provider_id if query_columns(query).include?(:provider_id)
|
|
472
|
+
|
|
473
|
+
cast_column(:provider_id, dm.provider_id_column(query, table))
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
def determine_tables
|
|
477
|
+
if upstreams.empty?
|
|
478
|
+
if respond_to?(:table)
|
|
479
|
+
[ table ]
|
|
480
|
+
else
|
|
481
|
+
[ :invalid ]
|
|
482
|
+
end
|
|
633
483
|
else
|
|
634
|
-
|
|
484
|
+
tables = upstreams.compact.map(&:tables).flatten.uniq
|
|
485
|
+
tables.empty? ? [ :invalid ] : tables
|
|
635
486
|
end
|
|
636
487
|
end
|
|
637
488
|
|
|
638
489
|
def determine_domains(db)
|
|
639
490
|
if upstreams.empty?
|
|
640
491
|
if respond_to?(:domain)
|
|
641
|
-
[domain]
|
|
492
|
+
[ domain ]
|
|
642
493
|
else
|
|
643
|
-
[:invalid]
|
|
494
|
+
[ :invalid ]
|
|
644
495
|
end
|
|
645
496
|
else
|
|
646
497
|
doms = upstreams.compact.flat_map { |up| up.domains(db) }.uniq
|
|
647
|
-
doms.empty? ? [:invalid] : doms
|
|
498
|
+
doms.empty? ? [ :invalid ] : doms
|
|
648
499
|
end
|
|
649
500
|
end
|
|
650
501
|
|
|
651
502
|
# Validation Related
|
|
652
503
|
|
|
653
504
|
def upstream_operator_names
|
|
654
|
-
@upstreams.map(&:
|
|
505
|
+
@upstreams.map(&:op_name)
|
|
655
506
|
end
|
|
656
507
|
|
|
657
508
|
def validate(db, opts = {})
|
|
509
|
+
return if @_validated
|
|
510
|
+
|
|
511
|
+
@errors = [] unless defined?(@errors)
|
|
512
|
+
@warnings = [] unless defined?(@warnings)
|
|
513
|
+
|
|
658
514
|
add_error("invalid label") if label && !label.is_a?(String)
|
|
659
515
|
self.class.validations.each do |args|
|
|
660
516
|
send(*args)
|
|
661
517
|
end
|
|
518
|
+
|
|
519
|
+
additional_validation(db, opts)
|
|
520
|
+
|
|
521
|
+
@_validated = true
|
|
662
522
|
end
|
|
663
523
|
|
|
664
524
|
def validate_no_upstreams
|
|
@@ -697,37 +557,54 @@ module ConceptQL
|
|
|
697
557
|
|
|
698
558
|
def validate_option(format, *opts)
|
|
699
559
|
opts.each do |opt|
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
end
|
|
704
|
-
end
|
|
560
|
+
next unless options.key?(opt)
|
|
561
|
+
|
|
562
|
+
add_error("wrong option format", opt.to_s, options[opt]) unless format === options[opt]
|
|
705
563
|
end
|
|
706
564
|
end
|
|
707
565
|
|
|
708
566
|
def validate_required_options(*opts)
|
|
709
567
|
opts.each do |opt|
|
|
710
|
-
unless options.
|
|
711
|
-
|
|
712
|
-
|
|
568
|
+
add_error("required option not present", opt.to_s) unless options.key?(opt)
|
|
569
|
+
end
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
# A blank value counts as not set, as in Occurrence#at_least_option
|
|
573
|
+
def validate_unsupported_options(*opts)
|
|
574
|
+
opts.each do |opt|
|
|
575
|
+
next if options[opt].to_s.strip.empty?
|
|
576
|
+
|
|
577
|
+
add_error("unsupported option", opt.to_s, options[opt])
|
|
713
578
|
end
|
|
714
579
|
end
|
|
715
580
|
|
|
716
581
|
def bad_arguments
|
|
717
|
-
return [] unless
|
|
582
|
+
return [] unless code_regexp
|
|
583
|
+
# Vocabulary#select_all? is private, so include private methods.
|
|
584
|
+
return [] if respond_to?(:select_all?, true) && select_all?
|
|
585
|
+
|
|
718
586
|
@bad_arguments ||= arguments.reject do |arg|
|
|
719
|
-
|
|
587
|
+
code_regexp === arg
|
|
720
588
|
end
|
|
721
589
|
end
|
|
722
590
|
|
|
591
|
+
# Only Vocabulary operators carry a code format (Vocabulary#code_regexp)
|
|
592
|
+
def code_regexp
|
|
593
|
+
nil
|
|
594
|
+
end
|
|
595
|
+
|
|
723
596
|
def validate_codes_match
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
597
|
+
return if bad_arguments.empty?
|
|
598
|
+
|
|
599
|
+
add_warning("improperly formatted code", *bad_arguments)
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
def additional_validation(_db, _opts = {})
|
|
603
|
+
# Do nothing by default
|
|
727
604
|
end
|
|
728
605
|
|
|
729
606
|
def add_warnings?(db, opts = {})
|
|
730
|
-
@errors.empty? && db
|
|
607
|
+
@errors.empty? && !no_db?(db, opts)
|
|
731
608
|
end
|
|
732
609
|
|
|
733
610
|
def add_error(*args)
|
|
@@ -738,32 +615,68 @@ module ConceptQL
|
|
|
738
615
|
warnings << args
|
|
739
616
|
end
|
|
740
617
|
|
|
741
|
-
def
|
|
742
|
-
|
|
618
|
+
def include_counts?(db, opts)
|
|
619
|
+
!(no_db?(db, opts) || opts[:skip_counts])
|
|
743
620
|
end
|
|
744
621
|
|
|
745
|
-
def
|
|
746
|
-
|
|
747
|
-
return args unless needs_arguments_cte?(args)
|
|
748
|
-
args = args.dup
|
|
749
|
-
first_arg = Sequel.expr(args.shift).as(:arg)
|
|
750
|
-
args.unshift(first_arg)
|
|
751
|
-
args = args.map { |v| [v] }
|
|
752
|
-
args_cte = db.values(args)
|
|
753
|
-
db[:args]
|
|
754
|
-
.with(:args, args_cte)
|
|
755
|
-
.select(:arg)
|
|
622
|
+
def skip_db?(opts)
|
|
623
|
+
opts[:skip_db]
|
|
756
624
|
end
|
|
757
625
|
|
|
758
|
-
def
|
|
759
|
-
db
|
|
626
|
+
def no_db?(db, opts = {})
|
|
627
|
+
no_db = db.nil? || db.adapter_scheme == :mock || skip_db?(opts)
|
|
628
|
+
no_db ||= table_is_missing?(db)
|
|
629
|
+
no_db
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
def table_is_missing?(_db)
|
|
633
|
+
false
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
def preferred_name
|
|
637
|
+
self.class.pref_name
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
def semi_or_inner_join(ds, table, *exprs)
|
|
641
|
+
ds = Sequel[ds] if ds.is_a?(Symbol)
|
|
642
|
+
table = Sequel[table] if table.is_a?(Symbol)
|
|
643
|
+
expr = exprs.inject(&:&)
|
|
644
|
+
if use_inner_join?
|
|
645
|
+
ds.join(table.as(:r), expr)
|
|
646
|
+
.select(*query_cols.map { |c| Sequel[:l][c] })
|
|
647
|
+
else
|
|
648
|
+
rdbms.semi_join(ds, table, *exprs)
|
|
649
|
+
end
|
|
650
|
+
end
|
|
651
|
+
|
|
652
|
+
def matching_columns
|
|
653
|
+
if scope.opts.dig(:window_opts, :window_table)
|
|
654
|
+
%i[person_id window_id]
|
|
655
|
+
else
|
|
656
|
+
[ :person_id ]
|
|
657
|
+
end
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
def use_inner_join?
|
|
661
|
+
options[:inner_join]
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
# The names in an option that lists columns (join_columns, only_columns
|
|
665
|
+
# and so on), as symbols. A JSON statement gives them as strings, and
|
|
666
|
+
# Sequel renders a String as a string literal, not as a column. Call it
|
|
667
|
+
# only for options that name columns: other options are free-form.
|
|
668
|
+
#
|
|
669
|
+
# The value is an Array or a comma-separated String, such as
|
|
670
|
+
# "uuid, start_date". A blank String is an unset option, so it gives
|
|
671
|
+
# nil.
|
|
672
|
+
def column_names_option(name)
|
|
673
|
+
value = options[name]
|
|
674
|
+
if value.is_a?(String)
|
|
675
|
+
value = value.split(",").map(&:strip).reject(&:empty?)
|
|
676
|
+
return nil if value.empty?
|
|
677
|
+
end
|
|
678
|
+
value&.map(&:to_sym)
|
|
760
679
|
end
|
|
761
680
|
end
|
|
762
681
|
end
|
|
763
682
|
end
|
|
764
|
-
|
|
765
|
-
# Require all operator subclasses eagerly
|
|
766
|
-
Dir.new(File.dirname(__FILE__)).
|
|
767
|
-
entries.
|
|
768
|
-
each{|filename| require_relative filename if filename =~ /\.rb\z/ && filename != File.basename(__FILE__)}
|
|
769
|
-
ConceptQL::Operators.operators.values.each(&:freeze)
|