Package com.ibm.fhir.schema.control
Class FhirResourceTableGroup
- java.lang.Object
-
- com.ibm.fhir.schema.control.FhirResourceTableGroup
-
public class FhirResourceTableGroup extends Object
Utility to create all the tables associated with a particular resource type
-
-
Constructor Summary
Constructors Constructor Description FhirResourceTableGroup(PhysicalDataModel model, String schemaName, SessionVariableDef sessionVariable, Set<IDatabaseObject> procedureDependencies, Tablespace fhirTablespace, Collection<GroupPrivilege> privileges)
Public constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addComposites(List<IDatabaseObject> group, String prefix)
Add the COMPOSITES table for the given resource name prefixvoid
addDateValues(List<IDatabaseObject> group, String prefix)
CREATE TABLE device_date_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, date_start TIMESTAMP, date_end TIMESTAMP, resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_date_values_pser ON device_date_values(parameter_name_id, date_start, date_end, resource_id); CREATE INDEX idx_device_date_values_pesr ON device_date_values(parameter_name_id, date_end, date_start, resource_id); CREATE INDEX idx_device_date_values_rpse ON device_date_values(resource_id, parameter_name_id, date_start, date_end); ALTER TABLE device_date_values ADD CONSTRAINT fk_device_date_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_date_values ADD CONSTRAINT fk_device_date_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;void
addLatLngValues(List<IDatabaseObject> group, String prefix)
CREATE TABLE device_latlng_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, latitude_value DOUBLE, longitude_value DOUBLE, resource_id BIGINT NOT NULL ) CREATE INDEX idx_device_latlng_values_pnnlv ON device_latlng_values(parameter_name_id, latitude_value, resource_id); CREATE INDEX idx_device_latlng_values_pnnhv ON device_latlng_values(parameter_name_id, longitude_value, resource_id); CREATE INDEX idx_device_latlng_values_rplat ON device_latlng_values(resource_id, parameter_name_id, latitude_value); CREATE INDEX idx_device_latlng_values_rplng ON device_latlng_values(resource_id, parameter_name_id, longitude_value); ALTER TABLE device_latlng_values ADD CONSTRAINT fk_device_latlng_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_latlng_values ADD CONSTRAINT fk_device_latlng_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;void
addListLogicalResourceItems(List<IDatabaseObject> group, String prefix)
Special case for LIST resources where we attach a child table to its LIST_LOGICAL_RESOURCES to support usage of the list items in search queries.void
addLogicalResources(List<IDatabaseObject> group, String prefix)
Add the logical_resources table definition for the given resource prefixvoid
addNumberValues(List<IDatabaseObject> group, String prefix)
-- ---------------------------------------------------------------------------- -- -- ---------------------------------------------------------------------------- CREATE TABLE device_number_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, number_value DOUBLE, resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_number_values_pnnv ON device_number_values(parameter_name_id, number_value, resource_id); CREATE INDEX idx_device_number_values_rps ON device_number_values(resource_id, parameter_name_id, number_value); ALTER TABLE device_number_values ADD CONSTRAINT fk_device_number_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_number_values ADD CONSTRAINT fk_device_number_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;void
addPatientCurrentRefs(List<IDatabaseObject> group, String prefix)
Add the extension table used to support references to the current resources lists defined by the spec: https://www.hl7.org/fhir/lifecycle.html#currentvoid
addQuantityValues(List<IDatabaseObject> group, String prefix)
CREATE TABLE device_quantity_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, code VARCHAR(255 OCTETS) NOT NULL, quantity_value DOUBLE, quantity_value_low DOUBLE, quantity_value_high DOUBLE, code_system_id INT, resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_quantity_values_pnnv ON device_quantity_values(parameter_name_id, code, quantity_value, resource_id, code_system_id); CREATE INDEX idx_device_quantity_values_rps ON device_quantity_values(resource_id, parameter_name_id, code, quantity_value, code_system_id); CREATE INDEX idx_device_quantity_values_pclhsr ON device_quantity_values(parameter_name_id, code, quantity_value_low, quantity_value_high, code_system_id, resource_id); CREATE INDEX idx_device_quantity_values_pchlsr ON device_quantity_values(parameter_name_id, code, quantity_value_high, quantity_value_low, code_system_id, resource_id); CREATE INDEX idx_device_quantity_values_rpclhs ON device_quantity_values(resource_id, parameter_name_id, code, quantity_value_low, quantity_value_high, code_system_id); CREATE INDEX idx_device_quantity_values_rpchls ON device_quantity_values(resource_id, parameter_name_id, code, quantity_value_high, quantity_value_low, code_system_id); ALTER TABLE device_quantity_values ADD CONSTRAINT fk_device_quantity_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_quantity_values ADD CONSTRAINT fk_device_quantity_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;void
addResources(List<IDatabaseObject> group, String prefix)
Add the resources table definitionObjectGroup
addResourceType(String resourceTypeName)
Add all the tables required for the given resource type.void
addStrValues(List<IDatabaseObject> group, String prefix)
Add the STR_VALUES table for the given resource name prefixvoid
addTokenValues(List<IDatabaseObject> group, String prefix)
row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, code_system_id INT NOT NULL, token_value VARCHAR(255 OCTETS), resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_token_values_pncscv ON device_token_values(parameter_name_id, code_system_id, token_value, resource_id); CREATE INDEX idx_device_token_values_rps ON device_token_values(resource_id, parameter_name_id, code_system_id, token_value); ALTER TABLE device_token_values ADD CONSTRAINT fk_device_token_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_token_values ADD CONSTRAINT fk_device_token_values_cs FOREIGN KEY (code_system_id) REFERENCES code_systems; ALTER TABLE device_token_values ADD CONSTRAINT fk_device_token_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;
-
-
-
Constructor Detail
-
FhirResourceTableGroup
public FhirResourceTableGroup(PhysicalDataModel model, String schemaName, SessionVariableDef sessionVariable, Set<IDatabaseObject> procedureDependencies, Tablespace fhirTablespace, Collection<GroupPrivilege> privileges)
Public constructor
-
-
Method Detail
-
addResourceType
public ObjectGroup addResourceType(String resourceTypeName)
Add all the tables required for the given resource type. For example, if the resourceTypeName is Patient, the following tables will be added:- patient_logical_resources
- patient_resources
- patient_str_values
- patient_date_values
- patient_token_values
- patient_number_values
- patient_latlng_values
- patient_quantity_values
- Parameters:
resourceTypeName
-
-
addLogicalResources
public void addLogicalResources(List<IDatabaseObject> group, String prefix)
Add the logical_resources table definition for the given resource prefix- Parameters:
group
-prefix
-
-
addResources
public void addResources(List<IDatabaseObject> group, String prefix)
Add the resources table definitionresource_id BIGINT NOT NULL, logical_resource_id BIGINT NOT NULL, version_id INT NOT NULL, last_updated TIMESTAMP NOT NULL, is_deleted CHAR(1) NOT NULL, data BLOB(2147483647) INLINE LENGTH 10240; CREATE UNIQUE INDEX device_resource_prf_in1 ON device_resources (resource_id) INCLUDE (logical_resource_id, version_id, is_deleted);
- Parameters:
group
-prefix
-
-
addStrValues
public void addStrValues(List<IDatabaseObject> group, String prefix)
Add the STR_VALUES table for the given resource name prefixrow_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, str_value VARCHAR(511 OCTETS), str_value_lcase VARCHAR(511 OCTETS), resource_id BIGINT NOT NULL CREATE INDEX idx_device_str_values_psr ON device_str_values(parameter_name_id, str_value, resource_id); CREATE INDEX idx_device_str_values_plr ON device_str_values(parameter_name_id, str_value_lcase, resource_id); CREATE INDEX idx_device_str_values_rps ON device_str_values(resource_id, parameter_name_id, str_value); CREATE INDEX idx_device_str_values_rpl ON device_str_values(resource_id, parameter_name_id, str_value_lcase); ALTER TABLE device_str_values ADD CONSTRAINT fk_device_str_values_pnid FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_str_values ADD CONSTRAINT fk_device_str_values_pnid FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_str_values ADD CONSTRAINT fk_device_str_values_rid FOREIGN KEY (resource_id) REFERENCES device_resources;
- Parameters:
group
-prefix
-
-
addTokenValues
public void addTokenValues(List<IDatabaseObject> group, String prefix)
row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, code_system_id INT NOT NULL, token_value VARCHAR(255 OCTETS), resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_token_values_pncscv ON device_token_values(parameter_name_id, code_system_id, token_value, resource_id); CREATE INDEX idx_device_token_values_rps ON device_token_values(resource_id, parameter_name_id, code_system_id, token_value); ALTER TABLE device_token_values ADD CONSTRAINT fk_device_token_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_token_values ADD CONSTRAINT fk_device_token_values_cs FOREIGN KEY (code_system_id) REFERENCES code_systems; ALTER TABLE device_token_values ADD CONSTRAINT fk_device_token_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;
- Parameters:
group
-prefix
-
-
addDateValues
public void addDateValues(List<IDatabaseObject> group, String prefix)
CREATE TABLE device_date_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, date_start TIMESTAMP, date_end TIMESTAMP, resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_date_values_pser ON device_date_values(parameter_name_id, date_start, date_end, resource_id); CREATE INDEX idx_device_date_values_pesr ON device_date_values(parameter_name_id, date_end, date_start, resource_id); CREATE INDEX idx_device_date_values_rpse ON device_date_values(resource_id, parameter_name_id, date_start, date_end); ALTER TABLE device_date_values ADD CONSTRAINT fk_device_date_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_date_values ADD CONSTRAINT fk_device_date_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;
- Parameters:
group
-prefix
-
-
addNumberValues
public void addNumberValues(List<IDatabaseObject> group, String prefix)
-- ---------------------------------------------------------------------------- -- -- ---------------------------------------------------------------------------- CREATE TABLE device_number_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, number_value DOUBLE, resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_number_values_pnnv ON device_number_values(parameter_name_id, number_value, resource_id); CREATE INDEX idx_device_number_values_rps ON device_number_values(resource_id, parameter_name_id, number_value); ALTER TABLE device_number_values ADD CONSTRAINT fk_device_number_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_number_values ADD CONSTRAINT fk_device_number_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;
- Parameters:
group
-prefix
-
-
addLatLngValues
public void addLatLngValues(List<IDatabaseObject> group, String prefix)
CREATE TABLE device_latlng_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, latitude_value DOUBLE, longitude_value DOUBLE, resource_id BIGINT NOT NULL ) CREATE INDEX idx_device_latlng_values_pnnlv ON device_latlng_values(parameter_name_id, latitude_value, resource_id); CREATE INDEX idx_device_latlng_values_pnnhv ON device_latlng_values(parameter_name_id, longitude_value, resource_id); CREATE INDEX idx_device_latlng_values_rplat ON device_latlng_values(resource_id, parameter_name_id, latitude_value); CREATE INDEX idx_device_latlng_values_rplng ON device_latlng_values(resource_id, parameter_name_id, longitude_value); ALTER TABLE device_latlng_values ADD CONSTRAINT fk_device_latlng_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_latlng_values ADD CONSTRAINT fk_device_latlng_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;
- Parameters:
group
-prefix
-
-
addQuantityValues
public void addQuantityValues(List<IDatabaseObject> group, String prefix)
CREATE TABLE device_quantity_values ( row_id BIGINT NOT NULL, parameter_name_id INT NOT NULL, code VARCHAR(255 OCTETS) NOT NULL, quantity_value DOUBLE, quantity_value_low DOUBLE, quantity_value_high DOUBLE, code_system_id INT, resource_id BIGINT NOT NULL ) ; CREATE INDEX idx_device_quantity_values_pnnv ON device_quantity_values(parameter_name_id, code, quantity_value, resource_id, code_system_id); CREATE INDEX idx_device_quantity_values_rps ON device_quantity_values(resource_id, parameter_name_id, code, quantity_value, code_system_id); CREATE INDEX idx_device_quantity_values_pclhsr ON device_quantity_values(parameter_name_id, code, quantity_value_low, quantity_value_high, code_system_id, resource_id); CREATE INDEX idx_device_quantity_values_pchlsr ON device_quantity_values(parameter_name_id, code, quantity_value_high, quantity_value_low, code_system_id, resource_id); CREATE INDEX idx_device_quantity_values_rpclhs ON device_quantity_values(resource_id, parameter_name_id, code, quantity_value_low, quantity_value_high, code_system_id); CREATE INDEX idx_device_quantity_values_rpchls ON device_quantity_values(resource_id, parameter_name_id, code, quantity_value_high, quantity_value_low, code_system_id); ALTER TABLE device_quantity_values ADD CONSTRAINT fk_device_quantity_values_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_quantity_values ADD CONSTRAINT fk_device_quantity_values_r FOREIGN KEY (resource_id) REFERENCES device_resources;
- Parameters:
group
-prefix
-
-
addComposites
public void addComposites(List<IDatabaseObject> group, String prefix)
Add the COMPOSITES table for the given resource name prefixparameter_name_id INT NOT NULL, comp1_str BIGINT, comp1_number BIGINT, comp1_date BIGINT, comp1_token BIGINT, comp1_quantity BIGINT, comp1_latlng BIGINT, ... logical_resource_id BIGINT NOT NULL CREATE INDEX idx_device_composites_pttr ON device_composites(parameter_name_id, comp1_token, comp2_token, resource_id); CREATE INDEX idx_device_composites_ptqr ON device_composites(parameter_name_id, comp1_token, comp2_quantity, resource_id); CREATE INDEX idx_device_composites_rptt ON device_composites(resource_id, parameter_name_id, comp1_token, comp2_token); CREATE INDEX idx_device_composites_rptq ON device_composites(resource_id, parameter_name_id, comp1_token, comp2_quantity); ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_comp1_str FOREIGN KEY (comp1_str) REFERENCES device_str_values NOT ENFORCED; ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_comp1_number FOREIGN KEY (comp1_number) REFERENCES device_number_values NOT ENFORCED; ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_comp1_date FOREIGN KEY (comp1_date) REFERENCES device_date_values NOT ENFORCED; ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_comp1_token FOREIGN KEY (comp1_token) REFERENCES device_token_values NOT ENFORCED; ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_comp1_quantity FOREIGN KEY (comp1_quantity) REFERENCES device_quantity_values NOT ENFORCED; ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_comp1_latlng FOREIGN KEY (comp1_latlng) REFERENCES device_latlng_values NOT ENFORCED; ... ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_pn FOREIGN KEY (parameter_name_id) REFERENCES parameter_names; ALTER TABLE device_composites ADD CONSTRAINT fk_device_composites_r FOREIGN KEY (resource_id) REFERENCES device_logical_resources;
- Parameters:
group
-prefix
-
-
addListLogicalResourceItems
public void addListLogicalResourceItems(List<IDatabaseObject> group, String prefix)
Special case for LIST resources where we attach a child table to its LIST_LOGICAL_RESOURCES to support usage of the list items in search queries. The FK to LIST_LOGICAL_RESOURCES is its parent. We then point to the resource being referenced via a resourceType/logicalId tuple. This means that the list item record can be created before the referenced resource is created.- Parameters:
group
-prefix
-
-
addPatientCurrentRefs
public void addPatientCurrentRefs(List<IDatabaseObject> group, String prefix)
Add the extension table used to support references to the current resources lists defined by the spec: https://www.hl7.org/fhir/lifecycle.html#current- Parameters:
group
- - the group of tables for this resource (Patient in this case)prefix
- - the resource name - PATIENT
-
-