Skip to content

Commit 557ae1f

Browse files
authored
2.2.0 fixup (#262)
* Call splitSql before executing batch statements. * Use snake_case for treemap/drilldown reports. * Generic mapper column conversion from snake to camelCase
1 parent 3a7d2d6 commit 557ae1f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+314
-305
lines changed

src/main/java/org/ohdsi/webapi/cohortfeatures/GenerateCohortFeaturesTasklet.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
import org.json.JSONObject;
4343
import org.ohdsi.featureExtraction.FeatureExtraction;
44+
import org.ohdsi.sql.SqlSplit;
4445

4546
/**
4647
*
@@ -144,9 +145,9 @@ private int[] doTask(ChunkContext chunkContext)
144145
JSONObject jsonObject = new JSONObject(sqlJson);
145146

146147
String sql = getSql(options, jsonObject);
147-
sql = SqlTranslate.translateSql(sql, jobParams.get("target_dialect").toString(), sessionId, null);
148-
149-
this.jdbcTemplate.batchUpdate(sql);
148+
String translatedSql = SqlTranslate.translateSql(sql, jobParams.get("target_dialect").toString(), sessionId, null);
149+
String[] sqlStatements = SqlSplit.splitSql(translatedSql);
150+
this.jdbcTemplate.batchUpdate(sqlStatements);
150151
}
151152
catch (Exception e)
152153
{

src/main/java/org/ohdsi/webapi/report/mapper/GenericRowMapper.java

+8
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public JsonNode mapRow(ResultSet rs, int rowNum) throws SQLException {
3131
for (int index = 1; index <= columnCount; index++) {
3232
String column = JdbcUtils.lookupColumnName(rsmd, index);
3333
Object value = rs.getObject(column);
34+
column = this.snakeCaseToCamelCase(column);
3435
if (value == null) {
3536
objectNode.putNull(column);
3637
} else if (value instanceof Integer) {
@@ -59,4 +60,11 @@ public JsonNode mapRow(ResultSet rs, int rowNum) throws SQLException {
5960
}
6061
return objectNode;
6162
}
63+
64+
protected String snakeCaseToCamelCase(String str) {
65+
char[] delimeters = new char[] { '_' };
66+
str = WordUtils.capitalizeFully(str.toLowerCase(), delimeters)
67+
.replace("_", "");
68+
return Character.toLowerCase(str.charAt(0)) + str.substring(1);
69+
}
6270
}

src/main/resources/resources/cdmresults/sql/report/condition/drilldown/ageAtFirstOccurrence.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS conceptId,
2+
c1.concept_id,
33
c2.concept_name AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value,
5+
ard1.p10_value,
6+
ard1.p25_value,
7+
ard1.median_value,
8+
ard1.p75_value,
9+
ard1.p90_value,
10+
ard1.max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN
1313
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/condition/drilldown/byType.sql

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
SELECT
2-
c1.concept_id AS conditionConceptId,
3-
c1.concept_name AS conditionConceptName,
4-
c2.concept_group_id AS conceptId,
5-
c2.concept_group_name AS conceptName,
6-
sum(ar1.count_value) AS countValue
2+
c1.concept_id AS condition_concept_id,
3+
c1.concept_name AS condition_concept_name,
4+
c2.concept_group_id AS concept_id,
5+
c2.concept_group_name AS concept_name,
6+
sum(ar1.count_value) AS count_value
77
FROM @results_database_schema.ACHILLES_results ar1
88
INNER JOIN
99
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/condition/drilldown/prevalenceByGenderAgeYear.sql

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
SELECT
2-
c1.concept_id AS conceptId,
3-
c1.concept_name AS conceptName,
2+
c1.concept_id AS concept_id,
3+
c1.concept_name AS concept_name,
44
cast(CAST(num_stratum_4 AS INT) * 10 AS VARCHAR) + '-' + cast((CAST(num_stratum_4 AS INT) + 1) * 10 - 1 AS
5-
VARCHAR) AS trellisName,
5+
VARCHAR) AS trellis_name,
66
--age decile
7-
c2.concept_name AS seriesName,
7+
c2.concept_name AS series_name,
88
--gender
9-
CAST(num_stratum_2 AS INT) AS xCalendarYear,
9+
CAST(num_stratum_2 AS INT) AS x_calendar_year,
1010
-- calendar year, note, there could be blanks
1111
ROUND(1000 * (1.0 * num_count_value / denom_count_value),
12-
5) AS yPrevalence1000Pp --prevalence, per 1000 persons
12+
5) AS y_prevalence_1000_pp --prevalence, per 1000 persons
1313
FROM (
1414
SELECT
1515
num.stratum_1 AS num_stratum_1,

src/main/resources/resources/cdmresults/sql/report/condition/drilldown/prevalenceByMonth.sql

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
SELECT
2-
c1.concept_id AS conceptId,
3-
c1.concept_name AS conceptName,
4-
num.stratum_2 AS xCalendarMonth,
2+
c1.concept_id AS concept_id,
3+
c1.concept_name AS concept_name,
4+
num.stratum_2 AS x_calendar_month,
55
-- calendar year, note, there could be blanks
6-
round(1000 * (1.0 * num.count_value / denom.count_value), 5) AS yPrevalence1000Pp --prevalence, per 1000 persons
6+
round(1000 * (1.0 * num.count_value / denom.count_value), 5) AS y_prevalence_1000_pp --prevalence, per 1000 persons
77
FROM
88
(SELECT
99
CAST(stratum_1 AS INT) stratum_1,

src/main/resources/resources/cdmresults/sql/report/condition/treemap.sql

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
SELECT
2-
concept_hierarchy.concept_id AS conceptId,
2+
concept_hierarchy.concept_id,
33
isNull(concept_hierarchy.level4_concept_name, 'NA') + '||' + isNull(concept_hierarchy.level3_concept_name, 'NA') + '||' +
44
isNull(concept_hierarchy.level2_concept_name, 'NA') + '||' + isNull(concept_hierarchy.level2_concept_name, 'NA') + '||' +
5-
isNull(concept_hierarchy.concept_name, 'NA') AS conceptPath,
6-
ar1.count_value AS numPersons,
7-
round(1.0 * ar1.count_value / denom.count_value, 5) AS percentPersons,
8-
round(1.0 * ar2.count_value / ar1.count_value, 5) AS recordsPerPerson
5+
isNull(concept_hierarchy.concept_name, 'NA') AS concept_path,
6+
ar1.count_value AS num_persons,
7+
round(1.0 * ar1.count_value / denom.count_value, 5) AS percent_persons,
8+
round(1.0 * ar2.count_value / ar1.count_value, 5) AS records_per_person
99
FROM (SELECT *
1010
FROM @results_database_schema.ACHILLES_results WHERE analysis_id = 400) ar1
1111
INNER JOIN

src/main/resources/resources/cdmresults/sql/report/conditionera/drilldown/ageAtFirstOccurrence.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS conceptId,
2+
c1.concept_id AS concept_id,
33
c2.concept_name AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value AS min_value,
5+
ard1.p10_value AS p10_value,
6+
ard1.p25_value AS p25_value,
7+
ard1.median_value AS median_value,
8+
ard1.p75_value AS p75_value,
9+
ard1.p90_value AS p90_value,
10+
ard1.max_value AS max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN @vocab_database_schema.concept c1
1313
ON CAST(ard1.stratum_1 AS INT) = c1.concept_id

src/main/resources/resources/cdmresults/sql/report/conditionera/drilldown/lengthOfEra.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS conceptId,
2+
c1.concept_id AS concept_id,
33
'Length of era' AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value AS min_value,
5+
ard1.p10_value AS p10_value,
6+
ard1.p25_value AS p25_value,
7+
ard1.median_value AS median_value,
8+
ard1.p75_value AS p75_value,
9+
ard1.p90_value AS p90_value,
10+
ard1.max_value AS max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN @vocab_database_schema.concept c1 ON CAST(ard1.stratum_1 AS INT) = c1.concept_id
1313
WHERE ard1.analysis_id = 1007 AND ard1.count_value > 0

src/main/resources/resources/cdmresults/sql/report/conditionera/drilldown/prevalenceByGenderAgeYear.sql

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
SELECT
2-
c1.concept_id AS conceptId,
2+
c1.concept_id AS concept_id,
33
cast(CAST(num_stratum_4 AS INT) * 10 AS VARCHAR) + '-' + cast((CAST(num_stratum_4 AS INT) + 1) * 10 - 1 AS
4-
VARCHAR) AS trellisName,
4+
VARCHAR) AS trellis_name,
55
--age decile
6-
c2.concept_name AS seriesName,
6+
c2.concept_name AS series_name,
77
--gender
8-
CAST(num_stratum_2 AS INT) AS xCalendarYear,
8+
CAST(num_stratum_2 AS INT) AS x_calendar_year,
99
-- calendar year, note, there could be blanks
1010
ROUND(1000 * (1.0 * num_count_value / denom_count_value),
11-
5) AS yPrevalence1000Pp --prevalence, per 1000 persons
11+
5) AS y_prevalence_1000_pp --prevalence, per 1000 persons
1212
FROM (
1313
SELECT
1414
num.stratum_1 AS num_stratum_1,

src/main/resources/resources/cdmresults/sql/report/conditionera/drilldown/prevalenceByMonth.sql

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
SELECT
2-
c1.concept_id AS conceptId,
3-
num.stratum_2 AS xCalendarMonth,
4-
round(1000 * (1.0 * num.count_value / denom.count_value), 5) AS yPrevalence1000Pp
2+
c1.concept_id AS concept_id,
3+
num.stratum_2 AS x_calendar_month,
4+
round(1000 * (1.0 * num.count_value / denom.count_value), 5) AS y_prevalence_1000_pp
55
FROM
66
(SELECT *
77
FROM @results_database_schema.ACHILLES_results WHERE analysis_id = 1002) num

src/main/resources/resources/cdmresults/sql/report/conditionera/treemap.sql

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
SELECT
2-
concept_hierarchy.concept_id AS conceptId,
2+
concept_hierarchy.concept_id AS concept_id,
33
isNull(concept_hierarchy.level4_concept_name, 'NA') + '||' + isNull(concept_hierarchy.level3_concept_name, 'NA') + '||' +
44
isNull(concept_hierarchy.level2_concept_name, 'NA') + '||' + isNull(concept_hierarchy.level1_concept_name, 'NA') + '||' +
5-
isNull(concept_hierarchy.concept_name, 'NA') AS conceptPath,
6-
ar1.count_value AS numPersons,
7-
ROUND(1.0 * ar1.count_value / denom.count_value, 5) AS percentPersons,
8-
ROUND(ar2.avg_value, 5) AS lengthOfEra
5+
isNull(concept_hierarchy.concept_name, 'NA') AS concept_path,
6+
ar1.count_value AS num_persons,
7+
ROUND(1.0 * ar1.count_value / denom.count_value, 5) AS percent_persons,
8+
ROUND(ar2.avg_value, 5) AS length_of_era
99
FROM (SELECT *
1010
FROM @results_database_schema.ACHILLES_results WHERE analysis_id = 1000) ar1
1111
INNER JOIN

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/ageAtFirstOccurrence.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS conceptId,
2+
c1.concept_id AS concept_id,
33
c2.concept_name AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value AS min_value,
5+
ard1.p10_value AS p10_value,
6+
ard1.p25_value AS p25_value,
7+
ard1.median_value AS median_value,
8+
ard1.p75_value AS p75_value,
9+
ard1.p90_value AS p90_value,
10+
ard1.max_value AS max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN
1313
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/byType.sql

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
SELECT
2-
c1.concept_id AS drugConceptId,
3-
c2.concept_id AS conceptId,
4-
c2.concept_name AS conceptName,
5-
ar1.count_value AS countValue
2+
c1.concept_id AS drug_concept_id,
3+
c2.concept_id AS concept_id,
4+
c2.concept_name AS concept_name,
5+
ar1.count_value AS count_value
66
FROM @results_database_schema.ACHILLES_results ar1
77
INNER JOIN
88
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/daysSupplyDistribution.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS drugConceptId,
2+
c1.concept_id AS drug_concept_id,
33
'Days supply' AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value AS min_value,
5+
ard1.p10_value AS p10_value,
6+
ard1.p25_value AS p25_value,
7+
ard1.median_value AS median_value,
8+
ard1.p75_value AS p75_value,
9+
ard1.p90_value AS p90_value,
10+
ard1.max_value AS max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN
1313
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/frequencyDistribution.sql

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
SELECT
2-
c1.concept_id AS "conceptId",
3-
c1.concept_name AS "conceptName",
4-
CAST(ROUND((100.0*num.count_value / denom.count_value), 0) AS INT) AS "yNumPersons",
5-
num.stratum_2 AS "xCount"
2+
c1.concept_id AS concept_id,
3+
c1.concept_name AS concept_name,
4+
CAST(ROUND((100.0*num.count_value / denom.count_value), 0) AS INT) AS y_num_persons,
5+
num.stratum_2 AS x_count
66
FROM
77
(SELECT count_value FROM @results_database_schema.ACHILLES_results WHERE analysis_id = 1) denom,
88
(SELECT CAST(stratum_1 AS INT) stratum_1, CAST(stratum_2 AS INT) stratum_2, count_value

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/prevalenceByGenderAgeYear.sql

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
SELECT
2-
c1.concept_id AS conceptId,
3-
c1.concept_name AS conceptName,
2+
c1.concept_id AS concept_id,
3+
c1.concept_name AS concept_name,
44
cast(CAST(num_stratum_4 AS INT) * 10 AS VARCHAR) + '-' + cast((CAST(num_stratum_4 AS INT) + 1) * 10 - 1 AS
5-
VARCHAR) AS trellisName,
5+
VARCHAR) AS trellis_name,
66
--age decile
7-
c2.concept_name AS seriesName,
7+
c2.concept_name AS series_name,
88
--gender
9-
CAST(num_stratum_2 AS INT) AS xCalendarYear,
9+
CAST(num_stratum_2 AS INT) AS x_calendar_year,
1010
-- calendar year, note, there could be blanks
1111
ROUND(1000 * (1.0 * num_count_value / denom_count_value),
12-
5) AS yPrevalence1000Pp --prevalence, per 1000 persons
12+
5) AS y_prevalence_1000_pp --prevalence, per 1000 persons
1313
FROM (
1414
SELECT
1515
num.stratum_1 AS num_stratum_1,

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/prevalenceByMonth.sql

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
SELECT
2-
c1.concept_id AS conceptId,
3-
c1.concept_name AS conceptName,
4-
num.stratum_2 AS xCalendarMonth,
5-
round(1000 * (1.0 * num.count_value / denom.count_value), 5) AS yPrevalence1000Pp
2+
c1.concept_id AS concept_id,
3+
c1.concept_name AS concept_name,
4+
num.stratum_2 AS x_calendar_month,
5+
round(1000 * (1.0 * num.count_value / denom.count_value), 5) AS y_prevalence_1000_pp
66
FROM
77
(SELECT *
88
FROM @results_database_schema.ACHILLES_results WHERE analysis_id = 702) num

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/quantityDistribution.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS drugConceptId,
2+
c1.concept_id AS drug_concept_id,
33
'Quantity' AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value AS min_value,
5+
ard1.p10_value AS p10_value,
6+
ard1.p25_value AS p25_value,
7+
ard1.median_value AS median_value,
8+
ard1.p75_value AS p75_value,
9+
ard1.p90_value AS p90_value,
10+
ard1.max_value AS max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN
1313
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/drug/drilldown/refillsDistribution.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
c1.concept_id AS drugConceptId,
2+
c1.concept_id AS drug_concept_id,
33
'Refills' AS category,
4-
ard1.min_value AS minValue,
5-
ard1.p10_value AS p10Value,
6-
ard1.p25_value AS p25Value,
7-
ard1.median_value AS medianValue,
8-
ard1.p75_value AS p75Value,
9-
ard1.p90_value AS p90Value,
10-
ard1.max_value AS maxValue
4+
ard1.min_value AS min_value,
5+
ard1.p10_value AS p10_value,
6+
ard1.p25_value AS p25_value,
7+
ard1.median_value AS median_value,
8+
ard1.p75_value AS p75_value,
9+
ard1.p90_value AS p90_value,
10+
ard1.max_value AS max_value
1111
FROM @results_database_schema.ACHILLES_results_dist ard1
1212
INNER JOIN
1313
@vocab_database_schema.concept c1

src/main/resources/resources/cdmresults/sql/report/drug/treemap.sql

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
SELECT
2-
concept_hierarchy.concept_id AS conceptId,
2+
concept_hierarchy.concept_id AS concept_id,
33
isnull(concept_hierarchy.level4_concept_name, 'NA') + '||' +
44
isnull(concept_hierarchy.level3_concept_name, 'NA') + '||' +
55
isnull(concept_hierarchy.level2_concept_name, 'NA') + '||' +
66
isnull(concept_hierarchy.level1_concept_name, 'NA') + '||' +
7-
concept_hierarchy.concept_name AS conceptPath,
8-
ar1.count_value AS numPersons,
9-
round(1.0 * ar1.count_value / denom.count_value, 5) AS percentPersons,
10-
round(1.0 * ar2.count_value / ar1.count_value, 5) AS recordsPerPerson
7+
concept_hierarchy.concept_name AS concept_path,
8+
ar1.count_value AS num_persons,
9+
round(1.0 * ar1.count_value / denom.count_value, 5) AS percent_persons,
10+
round(1.0 * ar2.count_value / ar1.count_value, 5) AS records_per_person
1111
FROM (SELECT *
1212
FROM @results_database_schema.ACHILLES_results WHERE analysis_id = 700) ar1
1313
INNER JOIN

0 commit comments

Comments
 (0)