• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openmrs / openmrs-core / 15461553759

05 Jun 2025 07:52AM UTC coverage: 64.868% (-0.009%) from 64.877%
15461553759

push

github

rkorytkowski
TRUNK-6345 Fix testing framework to be used by modules for openmrs-core 2.4+

(cherry picked from commit 202eb8b65)

4 of 9 new or added lines in 2 files covered. (44.44%)

10 existing lines in 8 files now uncovered.

23340 of 35981 relevant lines covered (64.87%)

0.65 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.0
/api/src/main/java/org/openmrs/api/db/hibernate/HibernateAdministrationDAO.java
1
/**
2
 * This Source Code Form is subject to the terms of the Mozilla Public License,
3
 * v. 2.0. If a copy of the MPL was not distributed with this file, You can
4
 * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
5
 * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
6
 *
7
 * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
8
 * graphic logo is a trademark of OpenMRS Inc.
9
 */
10
package org.openmrs.api.db.hibernate;
11

12
import javax.persistence.criteria.CriteriaBuilder;
13
import javax.persistence.criteria.CriteriaQuery;
14
import javax.persistence.criteria.Predicate;
15
import javax.persistence.criteria.Root;
16
import java.sql.Statement;
17
import java.sql.Connection;
18
import java.sql.SQLException;
19
import java.util.ArrayList;
20
import java.util.Collections;
21
import java.util.List;
22

23
import org.hibernate.FlushMode;
24
import org.hibernate.MappingException;
25
import org.hibernate.Session;
26
import org.hibernate.SessionFactory;
27
import org.hibernate.boot.Metadata;
28
import org.hibernate.engine.spi.SessionImplementor;
29
import org.hibernate.jdbc.Work;
30
import org.hibernate.mapping.Column;
31
import org.hibernate.mapping.PersistentClass;
32
import org.hibernate.metadata.ClassMetadata;
33
import org.hibernate.type.StringType;
34
import org.hibernate.type.TextType;
35
import org.hibernate.type.Type;
36
import org.openmrs.GlobalProperty;
37
import org.openmrs.OpenmrsObject;
38
import org.openmrs.api.APIException;
39
import org.openmrs.api.db.AdministrationDAO;
40
import org.openmrs.api.db.DAOException;
41
import org.openmrs.util.DatabaseUtil;
42
import org.openmrs.util.HandlerUtil;
43
import org.openmrs.util.OpenmrsConstants;
44
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
46
import org.springframework.beans.BeansException;
47
import org.springframework.context.ApplicationContext;
48
import org.springframework.context.ApplicationContextAware;
49
import org.springframework.validation.Errors;
50
import org.springframework.validation.Validator;
51

52
/**
53
 * Hibernate specific database methods for the AdministrationService
54
 *
55
 * @see org.openmrs.api.context.Context
56
 * @see org.openmrs.api.db.AdministrationDAO
57
 * @see org.openmrs.api.AdministrationService
58
 */
59
public class HibernateAdministrationDAO implements AdministrationDAO, ApplicationContextAware {
60
        
61
        private static final Logger log = LoggerFactory.getLogger(HibernateAdministrationDAO.class);
1✔
62
        private static final String PROPERTY = "property";
63
        
64
        /**
65
         * Hibernate session factory
66
         */
67
        private SessionFactory sessionFactory;
68

69
        private Metadata metadata;
70
        
71
        public HibernateAdministrationDAO() {
1✔
72
        }
1✔
73
        
74
        /**
75
         * Set session factory
76
         *
77
         * @param sessionFactory
78
         */
79
        public void setSessionFactory(SessionFactory sessionFactory) {
80
                this.sessionFactory = sessionFactory;
1✔
81
        }
1✔
82
        
83
        /**
84
         * @see org.openmrs.api.db.AdministrationDAO#getGlobalProperty(java.lang.String)
85
         */
86
        @Override
87
        public String getGlobalProperty(String propertyName) throws DAOException {
88
                GlobalProperty gp = getGlobalPropertyObject(propertyName);
×
89
                
90
                // if no gp exists, return a null value
91
                if (gp == null) {
×
92
                        return null;
×
93
                }
94
                
95
                return gp.getPropertyValue();
×
96
        }
97

98
        /**
99
         * @see org.openmrs.api.db.AdministrationDAO#getGlobalPropertyObject(java.lang.String)
100
         */
101
        @Override
102
        public GlobalProperty getGlobalPropertyObject(String propertyName) {
103
                Session session = sessionFactory.getCurrentSession();
1✔
104

105
                if (isDatabaseStringComparisonCaseSensitive()) {
1✔
106
                        CriteriaBuilder cb = session.getCriteriaBuilder();
1✔
107
                        CriteriaQuery<GlobalProperty> query = cb.createQuery(GlobalProperty.class);
1✔
108
                        Root<GlobalProperty> root = query.from(GlobalProperty.class);
1✔
109

110
                        Predicate condition = (propertyName != null)
1✔
111
                                ? cb.equal(cb.lower(root.get(PROPERTY)), propertyName.toLowerCase())
1✔
112
                                : cb.isNull(root.get(PROPERTY));
1✔
113

114
                        query.where(condition);
1✔
115

116
                        return session.createQuery(query).uniqueResult();
1✔
117
                } else {
118
                        return session.get(GlobalProperty.class, propertyName);
×
119
                }
120
        }
121

122
        @Override
123
        public GlobalProperty getGlobalPropertyByUuid(String uuid) throws DAOException {
124
                return HibernateUtil.getUniqueEntityByUUID(sessionFactory, GlobalProperty.class, uuid);
1✔
125
        }
126

127
        /**
128
         * @see org.openmrs.api.db.AdministrationDAO#getAllGlobalProperties()
129
         */
130
        @Override
131
        public List<GlobalProperty> getAllGlobalProperties() throws DAOException {
132
                Session session = sessionFactory.getCurrentSession();
1✔
133
                CriteriaBuilder cb = session.getCriteriaBuilder();
1✔
134
                CriteriaQuery<GlobalProperty> query = cb.createQuery(GlobalProperty.class);
1✔
135
                Root<GlobalProperty> root = query.from(GlobalProperty.class);
1✔
136

137
                query.orderBy(cb.asc(root.get(PROPERTY)));
1✔
138

139
                return session.createQuery(query).getResultList();
1✔
140
        }
141
        
142
        /**
143
         * @see org.openmrs.api.db.AdministrationDAO#getGlobalPropertiesByPrefix(java.lang.String)
144
         */
145
        @Override
146
        public List<GlobalProperty> getGlobalPropertiesByPrefix(String prefix) {
147
                if (prefix == null) {
1✔
148
                        log.warn("Attempted to get global properties with a null prefix");
1✔
149
                        return Collections.emptyList();
1✔
150
                }
151

152
                Session session = sessionFactory.getCurrentSession();
1✔
153
                CriteriaBuilder cb = session.getCriteriaBuilder();
1✔
154
                CriteriaQuery<GlobalProperty> query = cb.createQuery(GlobalProperty.class);
1✔
155
                Root<GlobalProperty> root = query.from(GlobalProperty.class);
1✔
156

157
                query.where(cb.like(cb.lower(root.get(PROPERTY)), MatchMode.START.toLowerCasePattern(prefix)));
1✔
158

159
                return session.createQuery(query).getResultList();
1✔
160
        }
161
        
162
        /**
163
         * @see org.openmrs.api.db.AdministrationDAO#getGlobalPropertiesBySuffix(java.lang.String)
164
         */
165
        @Override
166
        public List<GlobalProperty> getGlobalPropertiesBySuffix(String suffix) {
167
                if (suffix == null) {
1✔
168
                        log.warn("Attempted to get global properties with a null suffix");
1✔
169
                        return Collections.emptyList();
1✔
170
                }
171

172
                Session session = sessionFactory.getCurrentSession();
1✔
173
                CriteriaBuilder cb = session.getCriteriaBuilder();
1✔
174
                CriteriaQuery<GlobalProperty> query = cb.createQuery(GlobalProperty.class);
1✔
175
                Root<GlobalProperty> root = query.from(GlobalProperty.class);
1✔
176

177
                query.where(cb.like(cb.lower(root.get(PROPERTY)), MatchMode.END.toLowerCasePattern(suffix)));
1✔
178

179
                return session.createQuery(query).getResultList();
1✔
180
        }
181
        
182
        /**
183
         * @see org.openmrs.api.db.AdministrationDAO#deleteGlobalProperty(GlobalProperty)
184
         */
185
        @Override
186
        public void deleteGlobalProperty(GlobalProperty property) throws DAOException {
187
                sessionFactory.getCurrentSession().delete(property);
1✔
188
        }
1✔
189
        
190
        /**
191
         * @see org.openmrs.api.db.AdministrationDAO#saveGlobalProperty(org.openmrs.GlobalProperty)
192
         */
193
        @Override
194
        public GlobalProperty saveGlobalProperty(GlobalProperty gp) throws DAOException {
195
                GlobalProperty gpObject = getGlobalPropertyObject(gp.getProperty());
1✔
196
                if (gpObject != null) {
1✔
197
                        gpObject.setPropertyValue(gp.getPropertyValue());
1✔
198
                        gpObject.setDescription(gp.getDescription());
1✔
199
                        sessionFactory.getCurrentSession().update(gpObject);
1✔
200
                        return gpObject;
1✔
201
                } else {
202
                        sessionFactory.getCurrentSession().save(gp);
1✔
203
                        return gp;
1✔
204
                }
205
        }
206
        
207
        /**
208
         * @see org.openmrs.api.db.AdministrationDAO#executeSQL(java.lang.String, boolean)
209
         */
210
        @Override
211
        public List<List<Object>> executeSQL(String sql, boolean selectOnly) throws DAOException {
212
                
213
                // (solution for junit tests that usually use hsql
214
                // hsql does not like the backtick.  Replace the backtick with the hsql
215
                // escape character: the double quote (or nothing).
216
                if (HibernateUtil.isHSQLDialect(sessionFactory)) {
1✔
217
                        sql = sql.replace("`", "");
×
218
                }
219
                return DatabaseUtil.executeSQL(sessionFactory.getCurrentSession(), sql, selectOnly);
1✔
220
        }
221
        
222
        @Override
223
        public int getMaximumPropertyLength(Class<? extends OpenmrsObject> aClass, String fieldName) {
224
                PersistentClass persistentClass = metadata.getEntityBinding(aClass.getName().split("_")[0]);
1✔
225
                if (persistentClass == null) {
1✔
226
                        throw new APIException("Couldn't find a class in the hibernate configuration named: " + aClass.getName());
×
227
                } else {
228
                        int fieldLength;
229
                        try {
230
                                fieldLength = ((Column) persistentClass.getProperty(fieldName).getColumnIterator().next()).getLength();
1✔
231
                        }
232
                        catch (Exception e) {
×
233
                                log.debug("Could not determine maximum length", e);
×
234
                                return -1;
×
235
                        }
1✔
236
                        return fieldLength;
1✔
237
                }
238
        }
239
        
240
        @Override
241
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
242
                HibernateSessionFactoryBean sessionFactoryBean = (HibernateSessionFactoryBean) applicationContext
1✔
243
                        .getBean("&sessionFactory");
1✔
244
                metadata = sessionFactoryBean.getMetadata();
1✔
245
        }
1✔
246
        
247
        /**
248
         * @see org.openmrs.api.db.AdministrationDAO#validate(java.lang.Object, Errors)
249
         * <strong>Should</strong> Pass validation if field lengths are correct
250
         * <strong>Should</strong> Fail validation if field lengths are not correct
251
         * <strong>Should</strong> Fail validation for location class if field lengths are not correct
252
         * <strong>Should</strong> Pass validation for location class if field lengths are correct
253
         */
254
        
255
        //@SuppressWarnings({ "deprecation", "unchecked", "rawtypes" })
256
        @Override
257
        public void validate(Object object, Errors errors) throws DAOException {
258
                Class entityClass = object.getClass();
1✔
259
                ClassMetadata metadata = null;
1✔
260
                try {
261
                        metadata = sessionFactory.getClassMetadata(entityClass);
1✔
262
                }
263
                catch (MappingException ex) {
1✔
264
                        log.debug(entityClass + " is not a hibernate mapped entity", ex);
1✔
265
                }
1✔
266
                if (metadata != null) {
1✔
267
                        String[] propNames = metadata.getPropertyNames();
1✔
268
                        Object identifierType = metadata.getIdentifierType();
1✔
269
                        String identifierName = metadata.getIdentifierPropertyName();
1✔
270
                        if (identifierType instanceof StringType || identifierType instanceof TextType) {
1✔
271
                                int maxLength = getMaximumPropertyLength(entityClass, identifierName);
1✔
272
                                String identifierValue = (String) metadata.getIdentifier(object,
1✔
273
                                    (SessionImplementor) sessionFactory.getCurrentSession());
1✔
274
                                if (identifierValue != null) {
1✔
275
                                        int identifierLength = identifierValue.length();
1✔
276
                                        if (identifierLength > maxLength) {
1✔
277
                                                
278
                                                errors.rejectValue(identifierName, "error.exceededMaxLengthOfField", new Object[] { maxLength },
1✔
279
                                                    null);
280
                                        }
281
                                }
282
                        }
283
                        for (String propName : propNames) {
1✔
284
                                Type propType = metadata.getPropertyType(propName);
1✔
285
                                if (propType instanceof StringType || propType instanceof TextType) {
1✔
286
                                        String propertyValue = (String) metadata.getPropertyValue(object, propName);
1✔
287
                                        if (propertyValue != null) {
1✔
288
                                                int maxLength = getMaximumPropertyLength(entityClass, propName);
1✔
289
                                                int propertyValueLength = propertyValue.length();
1✔
290
                                                if (propertyValueLength > maxLength) {
1✔
291
                                                        errors.rejectValue(propName, "error.exceededMaxLengthOfField", new Object[] { maxLength },
1✔
292
                                                                        null);
293
                                                }
294
                                        }
295
                                }
296
                        }
297
                }
298
                FlushMode previousFlushMode = sessionFactory.getCurrentSession().getHibernateFlushMode();
1✔
299
                sessionFactory.getCurrentSession().setHibernateFlushMode(FlushMode.MANUAL);
1✔
300
                try {
301
                        for (Validator validator : getValidators(object)) {
1✔
302
                                validator.validate(object, errors);
1✔
303
                        }
1✔
304
                        
305
                }
306
                
307
                finally {
308
                        sessionFactory.getCurrentSession().setHibernateFlushMode(previousFlushMode);
1✔
309
                }
310
                
311
        }
1✔
312
        
313
        /**
314
         * Fetches all validators that are registered
315
         *
316
         * @param obj the object that will be validated
317
         * @return list of compatible validators
318
         */
319
        protected List<Validator> getValidators(Object obj) {
320
                List<Validator> matchingValidators = new ArrayList<>();
1✔
321

322
                List<Validator> validators = HandlerUtil.getHandlersForType(Validator.class, obj.getClass());
1✔
323
                
324
                for (Validator validator : validators) {
1✔
325
                        if (validator.supports(obj.getClass())) {
1✔
326
                                matchingValidators.add(validator);
1✔
327
                        }
328
                }
1✔
329
                
330
                return matchingValidators;
1✔
331
        }
332
        
333
        @Override
334
        public boolean isDatabaseStringComparisonCaseSensitive() {
335
                GlobalProperty gp = (GlobalProperty) sessionFactory.getCurrentSession().get(GlobalProperty.class,
1✔
336
                    OpenmrsConstants.GP_CASE_SENSITIVE_DATABASE_STRING_COMPARISON);
337
                if (gp != null) {
1✔
338
                        return Boolean.valueOf(gp.getPropertyValue());
1✔
339
                } else {
UNCOV
340
                        return true;
×
341
                }
342
        }
343
        
344
        /**
345
         * Updates PostgreSQL Sequences after core data insertion
346
         * 
347
         * @see org.openmrs.api.db.AdministrationDAO#updatePostgresSequence()
348
         */
349
        @Override
350
        public void updatePostgresSequence() throws DAOException {
351
                
352
                if (HibernateUtil.isPostgreSQLDialect(sessionFactory)) {
×
353
                        
354
                        // All the required PostgreSQL sequences that need to be updated
355
                        String postgresSequences = "SELECT setval('person_person_id_seq', (SELECT MAX(person_id) FROM person)+1);"
×
356
                                + "SELECT setval('person_name_person_name_id_seq', (SELECT MAX(person_name_id) FROM person_name)+1);"
357
                                + "SELECT setval('person_attribute_type_person_attribute_type_id_seq', (SELECT MAX(person_attribute_type_id) FROM person_attribute_type)+1);"
358
                                + "SELECT setval('relationship_type_relationship_type_id_seq', (SELECT MAX(relationship_type_id) FROM relationship_type)+1);"
359
                                + "SELECT setval('users_user_id_seq', (SELECT MAX(user_id) FROM users)+1);"
360
                                + "SELECT setval('care_setting_care_setting_id_seq', (SELECT MAX(care_setting_id) FROM care_setting)+1);"
361
                                + "SELECT setval('concept_datatype_concept_datatype_id_seq', (SELECT MAX(concept_datatype_id) FROM concept_datatype)+1);"
362
                                + "SELECT setval('concept_map_type_concept_map_type_id_seq', (SELECT MAX(concept_map_type_id) FROM concept_map_type)+1);"
363
                                + "SELECT setval('concept_stop_word_concept_stop_word_id_seq', (SELECT MAX(concept_stop_word_id) FROM concept_stop_word)+1);"
364
                                + "SELECT setval('concept_concept_id_seq', (SELECT MAX(concept_id) FROM concept)+1);"
365
                                + "SELECT setval('concept_name_concept_name_id_seq', (SELECT MAX(concept_name_id) FROM concept_name)+1);"
366
                                + "SELECT setval('concept_class_concept_class_id_seq', (SELECT MAX(concept_class_id) FROM concept_class)+1);"
367
                                + "SELECT setval('concept_reference_source_concept_source_id_seq', (SELECT MAX(concept_source_id) FROM concept_reference_source)+1);"
368
                                + "SELECT setval('encounter_role_encounter_role_id_seq', (SELECT MAX(encounter_role_id) FROM encounter_role)+1);"
369
                                + "SELECT setval('field_type_field_type_id_seq', (SELECT MAX(field_type_id) FROM field_type)+1);"
370
                                + "SELECT setval('hl7_source_hl7_source_id_seq', (SELECT MAX(hl7_source_id) FROM hl7_source)+1);"
371
                                + "SELECT setval('location_location_id_seq', (SELECT MAX(location_id) FROM location)+1);"
372
                                + "SELECT setval('encounter_encounter_id_seq', (SELECT MAX(encounter_id) FROM encounter)+1);"
373
                                + "SELECT setval('concept_description_concept_description_id_seq', (SELECT MAX(concept_description_id) FROM concept_description)+1);"
374
                                + "SELECT setval('conditions_condition_id_seq', (SELECT MAX(condition_id) FROM conditions)+1);"
375
                                + "SELECT setval('encounter_diagnosis_diagnosis_id_seq', (SELECT MAX(diagnosis_id) FROM encounter_diagnosis)+1);"
376
                                + "SELECT setval('diagnosis_attribute_type_diagnosis_attribute_type_id_seq', (SELECT MAX(diagnosis_attribute_type_id) FROM diagnosis_attribute_type)+1);"
377
                                + "SELECT setval('visit_visit_id_seq', (SELECT MAX(visit_id) FROM visit)+1);"
378
                                + "SELECT setval('concept_reference_term_concept_reference_term_id_seq', (SELECT MAX(concept_reference_term_id) FROM concept_reference_term)+1);"
379
                                + "SELECT setval('orders_order_id_seq', (SELECT MAX(order_id) FROM orders)+1);"
380
                                + "SELECT setval('order_group_order_group_id_seq', (SELECT MAX(order_group_id) FROM order_group)+1);"
381
                                + "SELECT setval('concept_reference_map_concept_map_id_seq', (SELECT MAX(concept_map_id) FROM concept_reference_map)+1);"
382
                                + "SELECT setval('order_group_attribute_type_order_group_attribute_type_id_seq', (SELECT MAX(order_group_attribute_type_id) FROM order_group_attribute_type)+1);"
383
                                + "SELECT setval('encounter_provider_encounter_provider_id_seq', (SELECT MAX(encounter_provider_id) FROM encounter_provider)+1);"
384
                                + "SELECT setval('provider_attribute_type_provider_attribute_type_id_seq', (SELECT MAX(provider_attribute_type_id) FROM provider_attribute_type)+1);"
385
                                + "SELECT setval('program_attribute_type_program_attribute_type_id_seq', (SELECT MAX(program_attribute_type_id) FROM program_attribute_type)+1);"
386
                                + "SELECT setval('concept_state_conversion_concept_state_conversion_id_seq', (SELECT MAX(concept_state_conversion_id) FROM concept_state_conversion)+1);"
387
                                + "SELECT setval('program_program_id_seq', (SELECT MAX(program_id) FROM program)+1);"
388
                                + "SELECT setval('concept_attribute_type_concept_attribute_type_id_seq', (SELECT MAX(concept_attribute_type_id) FROM concept_attribute_type)+1);"
389
                                + "SELECT setval('concept_name_tag_concept_name_tag_id_seq', (SELECT MAX(concept_name_tag_id) FROM concept_name_tag)+1);"
390
                                + "SELECT setval('allergy_reaction_allergy_reaction_id_seq', (SELECT MAX(allergy_reaction_id) FROM allergy_reaction)+1);"
391
                                + "SELECT setval('cohort_cohort_id_seq', (SELECT MAX(cohort_id) FROM cohort)+1);"
392
                                + "SELECT setval('cohort_member_cohort_member_id_seq', (SELECT MAX(cohort_member_id) FROM cohort_member)+1);"
393
                                + "SELECT setval('visit_type_visit_type_id_seq', (SELECT MAX(visit_type_id) FROM visit_type)+1);"
394
                                + "SELECT setval('visit_attribute_type_visit_attribute_type_id_seq', (SELECT MAX(visit_attribute_type_id) FROM visit_attribute_type)+1);"
395
                                + "SELECT setval('order_attribute_type_order_attribute_type_id_seq', (SELECT MAX(order_attribute_type_id) FROM order_attribute_type)+1);"
396
                                + "SELECT setval('medication_dispense_medication_dispense_id_seq', (SELECT MAX(medication_dispense_id) FROM medication_dispense)+1);"
397
                                + "SELECT setval('order_set_attribute_type_order_set_attribute_type_id_seq', (SELECT MAX(order_set_attribute_type_id) FROM order_set_attribute_type)+1);"
398
                                + "SELECT setval('person_address_person_address_id_seq', (SELECT MAX(person_address_id) FROM person_address)+1);"
399
                                + "SELECT setval('patient_identifier_patient_identifier_id_seq', (SELECT MAX(patient_identifier_id) FROM patient_identifier)+1);"
400
                                + "SELECT setval('relationship_relationship_id_seq', (SELECT MAX(relationship_id) FROM relationship)+1);"
401
                                + "SELECT setval('provider_provider_id_seq', (SELECT MAX(provider_id) FROM provider)+1);"
402
                                + "SELECT setval('encounter_type_encounter_type_id_seq', (SELECT MAX(encounter_type_id) FROM encounter_type)+1);"
403
                                + "SELECT setval('person_attribute_person_attribute_id_seq', (SELECT MAX(person_attribute_id) FROM person_attribute)+1);"
404
                                + "SELECT setval('allergy_allergy_id_seq', (SELECT MAX(allergy_id) FROM allergy)+1);"
405
                                + "SELECT setval('location_attribute_type_location_attribute_type_id_seq', (SELECT MAX(location_attribute_type_id) FROM location_attribute_type)+1);"
406
                                + "SELECT setval('order_frequency_order_frequency_id_seq', (SELECT MAX(order_frequency_id) FROM order_frequency)+1);"
407
                                + "SELECT setval('patient_program_patient_program_id_seq', (SELECT MAX(patient_program_id) FROM patient_program)+1);"
408
                                + "SELECT setval('form_field_form_field_id_seq', (SELECT MAX(form_field_id) FROM form_field)+1);"
409
                                + "SELECT setval('concept_proposal_concept_proposal_id_seq', (SELECT MAX(concept_proposal_id) FROM concept_proposal)+1);"
410
                                + "SELECT setval('program_workflow_program_workflow_id_seq', (SELECT MAX(program_workflow_id) FROM program_workflow)+1);"
411
                                + "SELECT setval('program_workflow_state_program_workflow_state_id_seq', (SELECT MAX(program_workflow_state_id) FROM program_workflow_state)+1);"
412
                                + "SELECT setval('patient_state_patient_state_id_seq', (SELECT MAX(patient_state_id) FROM patient_state)+1);"
413
                                + "SELECT setval('obs_obs_id_seq', (SELECT MAX(obs_id) FROM obs)+1);"
414
                                + "SELECT setval('order_type_order_type_id_seq', (SELECT MAX(order_type_id) FROM order_type)+1);"
415
                                + "SELECT setval('patient_identifier_type_patient_identifier_type_id_seq', (SELECT MAX(patient_identifier_type_id) FROM patient_identifier_type)+1);"
416
                                + "SELECT setval('scheduler_task_config_task_config_id_seq', (SELECT MAX(task_config_id) FROM scheduler_task_config)+1);"
417
                                + "SELECT setval('scheduler_task_config_property_task_config_property_id_seq', (SELECT MAX(task_config_property_id) FROM scheduler_task_config_property)+1)"
418
                                + "";
419
                        Session session = sessionFactory.getCurrentSession();
×
420
                        
421
                        session.doWork(new Work() {
×
422
                                
423
                                @Override
424
                                public void execute(Connection con) throws SQLException {
425
                                        Statement stmt = con.createStatement();
×
426
                                        stmt.addBatch(postgresSequences);
×
427
                                        stmt.executeBatch();
×
428
                                }
×
429
                        });
430
                }
431
        }
×
432
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc