Skip to content

Commit

Permalink
fixed: All summarized values in Tour Book view are wrong when a tour …
Browse files Browse the repository at this point in the history
…contains multiple tags and the tour tag filter is activated

#223
  • Loading branch information
wolfgang-ch committed Aug 28, 2020
1 parent 6cf0aa9 commit 23c69ff
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public abstract class TVITourBookItem extends TreeViewerItem implements ITourIte

static {

SQL_ALL_TOUR_FIELDS = NL
SQL_ALL_TOUR_FIELDS = UI.EMPTY_STRING

+ "tourID, " // 1 //$NON-NLS-1$

Expand Down Expand Up @@ -182,7 +182,7 @@ public abstract class TVITourBookItem extends TreeViewerItem implements ITourIte
;

SQL_ALL_OTHER_FIELDS__COLUMN_START_NUMBER = 86;
SQL_ALL_OTHER_FIELDS = NL
SQL_ALL_OTHER_FIELDS = UI.EMPTY_STRING

/////////////////////////////////////////////////////////////////////////
// -------- JOINT TABLES, they are added at the end --------------
Expand All @@ -192,7 +192,7 @@ public abstract class TVITourBookItem extends TreeViewerItem implements ITourIte
+ "Tmarker.markerId " // SQL_ALL_OTHER_FIELDS__COLUMN_START_NUMBER + 2 //$NON-NLS-1$
;

SQL_SUM_FIELDS = NL
SQL_SUM_FIELDS = UI.EMPTY_STRING

+ "TourDistance, " + NL //$NON-NLS-1$
+ "TourRecordingTime, " + NL //$NON-NLS-1$
Expand Down Expand Up @@ -234,25 +234,25 @@ public abstract class TVITourBookItem extends TreeViewerItem implements ITourIte

;

SQL_SUM_COLUMNS = NL
SQL_SUM_COLUMNS = UI.EMPTY_STRING

+ "SUM( CAST(TourDistance AS BIGINT)), " + NL // 0 //$NON-NLS-1$
+ "SUM( CAST(TourRecordingTime AS BIGINT)), " + NL // 1 //$NON-NLS-1$
+ "SUM( CAST(TourDrivingTime AS BIGINT)), " + NL // 2 //$NON-NLS-1$
+ "SUM( CAST(TourAltUp AS BIGINT)), " + NL // 3 //$NON-NLS-1$
+ "SUM( CAST(TourAltDown AS BIGINT)), " + NL // 4 //$NON-NLS-1$
+ "SUM(1), " + NL // 5 //$NON-NLS-1$
+ "SUM( CAST(TourDistance AS BIGINT)), " + NL // 0 //$NON-NLS-1$
+ "SUM( CAST(TourRecordingTime AS BIGINT)), " + NL // 1 //$NON-NLS-1$
+ "SUM( CAST(TourDrivingTime AS BIGINT)), " + NL // 2 //$NON-NLS-1$
+ "SUM( CAST(TourAltUp AS BIGINT)), " + NL // 3 //$NON-NLS-1$
+ "SUM( CAST(TourAltDown AS BIGINT)), " + NL // 4 //$NON-NLS-1$
+ "SUM(1), " + NL // 5 //$NON-NLS-1$
//
+ "MAX(MaxSpeed), " + NL // 6 //$NON-NLS-1$
+ "MAX(MaxAltitude), " + NL // 7 //$NON-NLS-1$
+ "MAX(MaxPulse), " + NL // 8 //$NON-NLS-1$
+ "MAX(MaxSpeed), " + NL // 6 //$NON-NLS-1$
+ "MAX(MaxAltitude), " + NL // 7 //$NON-NLS-1$
+ "MAX(MaxPulse), " + NL // 8 //$NON-NLS-1$
//
+ "AVG( CASE WHEN AvgPulse = 0 THEN NULL ELSE AvgPulse END ), " + NL // 9 //$NON-NLS-1$
+ "AVG( CASE WHEN AvgCadence = 0 THEN NULL ELSE DOUBLE(AvgCadence) * CadenceMultiplier END ), " + NL // 10 //$NON-NLS-1$
+ "AVG( CASE WHEN AvgTemperature = 0 THEN NULL ELSE DOUBLE(AvgTemperature) / TemperatureScale END ), " + NL // 11 //$NON-NLS-1$
+ "AVG( CASE WHEN WeatherWindDir = 0 THEN NULL ELSE WeatherWindDir END ), " + NL // 12 //$NON-NLS-1$
+ "AVG( CASE WHEN WeatherWindSpd = 0 THEN NULL ELSE WeatherWindSpd END ), " + NL // 13 //$NON-NLS-1$
+ "AVG( CASE WHEN RestPulse = 0 THEN NULL ELSE RestPulse END ), " + NL // 14 //$NON-NLS-1$
+ "AVG( CASE WHEN AvgPulse = 0 THEN NULL ELSE AvgPulse END ), " + NL // 9 //$NON-NLS-1$
+ "AVG( CASE WHEN AvgCadence = 0 THEN NULL ELSE DOUBLE(AvgCadence) * CadenceMultiplier END ), " + NL // 10 //$NON-NLS-1$
+ "AVG( CASE WHEN AvgTemperature = 0 THEN NULL ELSE DOUBLE(AvgTemperature) / TemperatureScale END ), " + NL // 11 //$NON-NLS-1$
+ "AVG( CASE WHEN WeatherWindDir = 0 THEN NULL ELSE WeatherWindDir END ), " + NL // 12 //$NON-NLS-1$
+ "AVG( CASE WHEN WeatherWindSpd = 0 THEN NULL ELSE WeatherWindSpd END ), " + NL // 13 //$NON-NLS-1$
+ "AVG( CASE WHEN RestPulse = 0 THEN NULL ELSE RestPulse END ), " + NL // 14 //$NON-NLS-1$
//
+ "SUM( CAST(Calories AS BIGINT)), " + NL // 15 //$NON-NLS-1$
+ "SUM( CAST(Power_TotalWork AS BIGINT)), " + NL // 16 //$NON-NLS-1$
Expand All @@ -267,10 +267,10 @@ public abstract class TVITourBookItem extends TreeViewerItem implements ITourIte

+ "SUM( CAST(cadenceZone_SlowTime AS BIGINT)), " + NL // 22 //$NON-NLS-1$
+ "SUM( CAST(cadenceZone_FastTime AS BIGINT)), " + NL // 23 //$NON-NLS-1$
+ "AVG( CASE WHEN cadenceZones_DelimiterValue = 0 THEN NULL ELSE cadenceZones_DelimiterValue END ), " + NL // 24 //$NON-NLS-1$
+ "AVG( CASE WHEN cadenceZones_DelimiterValue = 0 THEN NULL ELSE cadenceZones_DelimiterValue END ), " + NL // 24 //$NON-NLS-1$

+ "MIN(CASE WHEN weather_Temperature_Min = 0 THEN NULL ELSE weather_Temperature_Min END), " + NL // 25 //$NON-NLS-1$
+ "MAX(CASE WHEN weather_Temperature_Max = 0 THEN NULL ELSE weather_Temperature_Max END) " + NL // 26 //$NON-NLS-1$
+ "MIN(CASE WHEN weather_Temperature_Min = 0 THEN NULL ELSE weather_Temperature_Min END), " + NL // 25 //$NON-NLS-1$
+ "MAX(CASE WHEN weather_Temperature_Max = 0 THEN NULL ELSE weather_Temperature_Max END) " + NL // 26 //$NON-NLS-1$
;

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@

public class TVITourBookRoot extends TVITourBookItem {


/**
* @param view
* @param viewLayout
Expand All @@ -55,43 +54,47 @@ private void getItemsHierarchical() {
setChildren(children);

final SQLFilter sqlFilter = new SQLFilter(SQLFilter.TAG_FILTER);
String fromTourData;
String sqlFromTourData;

final String sqlFilterWhereClause = sqlFilter.getWhereClause().trim();
final boolean isSqlWhereClause = sqlFilterWhereClause.length() > 0;

final String sqlWhereClause = isSqlWhereClause
? " WHERE 1=1 " + sqlFilterWhereClause + NL //$NON-NLS-1$
? "WHERE 1=1 " + NL + sqlFilterWhereClause + NL //$NON-NLS-1$
: UI.EMPTY_STRING;

if (sqlFilter.isTagFilterActive()) {

// with tag filter

fromTourData = NL
sqlFromTourData = UI.EMPTY_STRING

+ "FROM (" + NL // //$NON-NLS-1$

+ "FROM (" + NL // //$NON-NLS-1$
+ " SELECT" + NL // //$NON-NLS-1$

+ " SELECT " + NL // //$NON-NLS-1$
// this is necessary otherwise tours can occure multiple times when a tour contains multiple tags !!!
+ " DISTINCT TourId," + NL // //$NON-NLS-1$

+ " StartYear," + NL //$NON-NLS-1$
+ SQL_SUM_FIELDS + NL
+ " StartYear," + NL // //$NON-NLS-1$
+ " " + SQL_SUM_FIELDS

+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL//$NON-NLS-1$
+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL // //$NON-NLS-1$

// get tag id's
+ " LEFT OUTER JOIN " + TourDatabase.JOINTABLE__TOURDATA__TOURTAG + " jTdataTtag" + NL //$NON-NLS-1$ //$NON-NLS-2$
+ " ON tourID = jTdataTtag.TourData_tourId " + NL //$NON-NLS-1$
+ " LEFT JOIN " + TourDatabase.JOINTABLE__TOURDATA__TOURTAG + " jTdataTtag" + NL //$NON-NLS-1$ //$NON-NLS-2$
+ " ON tourID = jTdataTtag.TourData_tourId " + NL // //$NON-NLS-1$

+ sqlWhereClause
+ " " + sqlWhereClause

+ ") td " + NL//$NON-NLS-1$
+ ") NecessaryNameOtherwiseItDoNotWork" + NL // //$NON-NLS-1$
;

} else {

// without tag filter

fromTourData = NL
sqlFromTourData = UI.EMPTY_STRING

+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL //$NON-NLS-1$

Expand All @@ -100,23 +103,23 @@ private void getItemsHierarchical() {

final boolean isShowSummaryRow = tourBookView.isShowSummaryRow();

final String groupBy = isShowSummaryRow
final String sqlGroupBy = isShowSummaryRow

// show a summary row
? " GROUP BY ROLLUP(StartYear) " + NL //$NON-NLS-1$
: " GROUP BY StartYear " + NL; //$NON-NLS-1$
? "GROUP BY ROLLUP(StartYear)" + NL // //$NON-NLS-1$
: "GROUP BY StartYear" + NL; // //$NON-NLS-1$

final String sql = NL +

"SELECT " + NL //$NON-NLS-1$
"SELECT" + NL // //$NON-NLS-1$

+ " StartYear, " + NL //$NON-NLS-1$
+ " StartYear," + NL // //$NON-NLS-1$
+ SQL_SUM_COLUMNS

+ fromTourData
+ groupBy
+ sqlFromTourData
+ sqlGroupBy

+ " ORDER BY StartYear " + NL //$NON-NLS-1$
+ "ORDER BY StartYear" + NL // //$NON-NLS-1$
;

try (Connection conn = TourDatabase.getInstance().getConnection()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,77 +56,80 @@ protected void fetchChildren() {
final ArrayList<TreeViewerItem> children = new ArrayList<>();
setChildren(children);

String sumYearField = UI.EMPTY_STRING;
String sumYearFieldSub = UI.EMPTY_STRING;
String sqlSumYearField = UI.EMPTY_STRING;
String sqlSumYearFieldSub = UI.EMPTY_STRING;

if (isWeekDisplayed) {

// show weeks

sumYearField = "StartWeekYear"; //$NON-NLS-1$
sumYearFieldSub = "StartWeek"; //$NON-NLS-1$
sqlSumYearField = "StartWeekYear"; //$NON-NLS-1$
sqlSumYearFieldSub = "StartWeek"; //$NON-NLS-1$

} else {

// show months

sumYearField = "StartYear"; //$NON-NLS-1$
sumYearFieldSub = "StartMonth"; //$NON-NLS-1$
sqlSumYearField = "StartYear"; //$NON-NLS-1$
sqlSumYearFieldSub = "StartMonth"; //$NON-NLS-1$
}

final SQLFilter sqlFilter = new SQLFilter(SQLFilter.TAG_FILTER);
String fromTourData;
String sqlFromTourData;

if (sqlFilter.isTagFilterActive()) {

// with tag filter

fromTourData = NL
sqlFromTourData = NL

+ "FROM ( " + NL //$NON-NLS-1$
+ "FROM (" + NL // //$NON-NLS-1$

+ " SELECT " + NL //$NON-NLS-1$
+ " SELECT" + NL // //$NON-NLS-1$

+ sumYearField + ", " + NL //$NON-NLS-1$
+ sumYearFieldSub + ", " + NL //$NON-NLS-1$
+ SQL_SUM_FIELDS + NL
// this is necessary otherwise tours can occure multiple times when a tour contains multiple tags !!!
+ " DISTINCT TourId," + NL // //$NON-NLS-1$

+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL//$NON-NLS-1$
+ " " + sqlSumYearField + "," + NL // //$NON-NLS-1$
+ " " + sqlSumYearFieldSub + "," + NL // //$NON-NLS-1$
+ " " + SQL_SUM_FIELDS + NL

+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL // //$NON-NLS-1$

// get tag id's
+ " LEFT OUTER JOIN " + TourDatabase.JOINTABLE__TOURDATA__TOURTAG + " jTdataTtag" + NL //$NON-NLS-1$ //$NON-NLS-2$
+ " ON tourID = jTdataTtag.TourData_tourId" + NL //$NON-NLS-1$
+ " LEFT OUTER JOIN " + TourDatabase.JOINTABLE__TOURDATA__TOURTAG + " jTdataTtag" + NL //$NON-NLS-1$ //$NON-NLS-2$
+ " ON tourID = jTdataTtag.TourData_tourId" + NL // //$NON-NLS-1$

+ " WHERE " + sumYearField + "=?" + NL //$NON-NLS-1$ //$NON-NLS-2$
+ sqlFilter.getWhereClause()
+ " WHERE " + sqlSumYearField + "=?" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ " " + sqlFilter.getWhereClause()

+ ") td " + NL//$NON-NLS-1$
+ ") NecessaryNameOtherwiseItDoNotWork" + NL // //$NON-NLS-1$
;

} else {

// without tag filter

fromTourData = NL
sqlFromTourData = NL

+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL //$NON-NLS-1$
+ " FROM " + TourDatabase.TABLE_TOUR_DATA + NL // //$NON-NLS-1$

+ " WHERE " + sumYearField + "=?" + NL //$NON-NLS-1$ //$NON-NLS-2$
+ " WHERE " + sqlSumYearField + "=?" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ sqlFilter.getWhereClause() + NL;
}

final String sql = NL +

"SELECT " + NL //$NON-NLS-1$
"SELECT" + NL // //$NON-NLS-1$

+ sumYearField + ", " + NL //$NON-NLS-1$
+ sumYearFieldSub + ", " + NL //$NON-NLS-1$
+ sqlSumYearField + "," + NL // //$NON-NLS-1$
+ sqlSumYearFieldSub + "," + NL // //$NON-NLS-1$
+ SQL_SUM_COLUMNS

+ fromTourData
+ sqlFromTourData

+ " GROUP BY " + sumYearField + "," + sumYearFieldSub + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ " ORDER BY " + sumYearFieldSub + NL // //$NON-NLS-1$
+ "GROUP BY " + sqlSumYearField + "," + sqlSumYearFieldSub + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ "ORDER BY " + sqlSumYearFieldSub + NL // //$NON-NLS-1$
;

try (Connection conn = TourDatabase.getInstance().getConnection()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public TVITourBookYearCategorized(final TourBookView view,
setParentItem(parentItem);
}

/**
* Fetch all tour data within a month/week category.
*/
@Override
protected void fetchChildren() {

Expand Down Expand Up @@ -66,26 +69,26 @@ protected void fetchChildren() {

final String sqlString = NL

+ "SELECT " // //$NON-NLS-1$
+ "SELECT" + NL // //$NON-NLS-1$

+ SQL_ALL_TOUR_FIELDS + UI.COMMA_SPACE + NL
+ SQL_ALL_OTHER_FIELDS + NL

+ " FROM " + TourDatabase.TABLE_TOUR_DATA + " TourData" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ "FROM " + TourDatabase.TABLE_TOUR_DATA + " TourData" + NL // //$NON-NLS-1$ //$NON-NLS-2$

// get tag id's
+ " LEFT OUTER JOIN " + TourDatabase.JOINTABLE__TOURDATA__TOURTAG + " jTdataTtag" //$NON-NLS-1$ //$NON-NLS-2$
+ " ON TourData.tourId = jTdataTtag.TourData_tourId" // //$NON-NLS-1$
+ "LEFT OUTER JOIN " + TourDatabase.JOINTABLE__TOURDATA__TOURTAG + " jTdataTtag" //$NON-NLS-1$ //$NON-NLS-2$
+ " ON TourData.tourId = jTdataTtag.TourData_tourId" + NL // //$NON-NLS-1$

// get marker id's
+ " LEFT OUTER JOIN " + TourDatabase.TABLE_TOUR_MARKER + " Tmarker" //$NON-NLS-1$ //$NON-NLS-2$
+ " ON TourData.tourId = Tmarker.TourData_tourId" + NL // //$NON-NLS-1$
+ "LEFT OUTER JOIN " + TourDatabase.TABLE_TOUR_MARKER + " Tmarker" // //$NON-NLS-1$ //$NON-NLS-2$
+ " ON TourData.tourId = Tmarker.TourData_tourId" + NL // //$NON-NLS-1$

+ " WHERE " + sumYear + " = ?" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ " AND " + sumYearSub + " = ?" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ sqlFilter.getWhereClause()
+ "WHERE " + sumYear + " = ?" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ " AND " + sumYearSub + " = ?" + NL // //$NON-NLS-1$ //$NON-NLS-2$
+ " " + sqlFilter.getWhereClause()

+ " ORDER BY TourStartTime\n"; //$NON-NLS-1$
+ "ORDER BY TourStartTime" + NL; // //$NON-NLS-1$

try (Connection conn = TourDatabase.getInstance().getConnection()) {

Expand Down

0 comments on commit 23c69ff

Please sign in to comment.