diff --git a/src/main/java/core/db/AbstractTable.java b/src/main/java/core/db/AbstractTable.java index a39fbe5a5..f3089d306 100644 --- a/src/main/java/core/db/AbstractTable.java +++ b/src/main/java/core/db/AbstractTable.java @@ -44,6 +44,17 @@ public AbstractTable(String tableName, ConnectionManager connectionManager) { initColumns(); } + /** + * Truncate string to maximum length + * @param s String is truncated if its length exceeds given limit + * @param maxLength Length limit + * @return Truncated string + */ + static String truncateString(String s, int maxLength) { + if (s != null && s.length() > maxLength) return s.substring(0, maxLength); + return s; + } + protected String getTableType() { return "CACHED"; } diff --git a/src/main/java/core/db/MatchDetailsTable.java b/src/main/java/core/db/MatchDetailsTable.java index a5d236d3a..772feaa0c 100644 --- a/src/main/java/core/db/MatchDetailsTable.java +++ b/src/main/java/core/db/MatchDetailsTable.java @@ -26,9 +26,9 @@ protected void initColumns() { ColumnDescriptor.Builder.newInstance().setColumnName("MatchID").setGetter((o) -> ((Matchdetails) o).getMatchID()).setSetter((o, v) -> ((Matchdetails) o).setMatchID((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("MatchTyp").setGetter((o) -> ((Matchdetails) o).getMatchType().getId()).setSetter((o, v) -> ((Matchdetails) o).setMatchType(MatchType.getById((int) v))).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("ArenaId").setGetter((o) -> ((Matchdetails) o).getArenaID()).setSetter((o, v) -> ((Matchdetails) o).setArenaID((int) v)).setType(Types.INTEGER).isNullable(false).build(), - ColumnDescriptor.Builder.newInstance().setColumnName("ArenaName").setGetter((o) -> ((Matchdetails) o).getArenaName()).setSetter((o, v) -> ((Matchdetails) o).setArenaName((String) v)).setType(Types.VARCHAR).setLength(256).isNullable(false).build(), + ColumnDescriptor.Builder.newInstance().setColumnName("ArenaName").setGetter((o) -> truncateString(((Matchdetails) o).getArenaName(), 256)).setSetter((o, v) -> ((Matchdetails) o).setArenaName((String) v)).setType(Types.VARCHAR).setLength(256).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("Fetchdatum").setGetter((o) -> ((Matchdetails) o).getFetchDatum().toDbTimestamp()).setSetter((o, v) -> ((Matchdetails) o).setFetchDatum((HODateTime) v)).setType(Types.TIMESTAMP).isNullable(false).build(), - ColumnDescriptor.Builder.newInstance().setColumnName("GastName").setGetter((o) -> ((Matchdetails) o).getGuestTeamName()).setSetter((o, v) -> ((Matchdetails) o).setGastName((String) v)).setType(Types.VARCHAR).setLength(256).isNullable(false).build(), + ColumnDescriptor.Builder.newInstance().setColumnName("GastName").setGetter((o) -> truncateString(((Matchdetails) o).getGuestTeamName(), 256)).setSetter((o, v) -> ((Matchdetails) o).setGastName((String) v)).setType(Types.VARCHAR).setLength(256).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GastID").setGetter((o) -> ((Matchdetails) o).getGuestTeamId()).setSetter((o, v) -> ((Matchdetails) o).setGastId((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GastEinstellung").setGetter((o) -> ((Matchdetails) o).getGuestEinstellung()).setSetter((o, v) -> ((Matchdetails) o).setGuestEinstellung((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GastTore").setGetter((o) -> ((Matchdetails) o).getGuestGoals()).setSetter((o, v) -> ((Matchdetails) o).setGuestGoals((int) v)).setType(Types.INTEGER).isNullable(false).build(), @@ -42,7 +42,7 @@ protected void initColumns() { ColumnDescriptor.Builder.newInstance().setColumnName("GastTacticSkill").setGetter((o) -> ((Matchdetails) o).getGuestTacticSkill()).setSetter((o, v) -> ((Matchdetails) o).setGuestTacticSkill((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GastTacticType").setGetter((o) -> ((Matchdetails) o).getGuestTacticType()).setSetter((o, v) -> ((Matchdetails) o).setGuestTacticType((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GASTHATSTATS").setGetter((o) -> ((Matchdetails) o).getGuestHatStats()).setSetter((o, v) -> ((Matchdetails) o).setGuestHatStats((int) v)).setType(Types.INTEGER).isNullable(false).build(), - ColumnDescriptor.Builder.newInstance().setColumnName("HeimName").setGetter((o) -> ((Matchdetails) o).getHomeTeamName()).setSetter((o, v) -> ((Matchdetails) o).setHeimName((String) v)).setType(Types.VARCHAR).setLength(256).isNullable(false).build(), + ColumnDescriptor.Builder.newInstance().setColumnName("HeimName").setGetter((o) -> truncateString(((Matchdetails) o).getHomeTeamName(), 256)).setSetter((o, v) -> ((Matchdetails) o).setHeimName((String) v)).setType(Types.VARCHAR).setLength(256).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("HeimId").setGetter((o) -> ((Matchdetails) o).getHomeTeamId()).setSetter((o, v) -> ((Matchdetails) o).setHeimId((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("HeimEinstellung").setGetter((o) -> ((Matchdetails) o).getHomeEinstellung()).setSetter((o, v) -> ((Matchdetails) o).setHomeEinstellung((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("HeimTore").setGetter((o) -> ((Matchdetails) o).getHomeGoals()).setSetter((o, v) -> ((Matchdetails) o).setHomeGoals((int) v)).setType(Types.INTEGER).isNullable(false).build(), @@ -59,7 +59,7 @@ protected void initColumns() { ColumnDescriptor.Builder.newInstance().setColumnName("SpielDatum").setGetter((o) -> ((Matchdetails) o).getMatchDate().toDbTimestamp()).setSetter((o, v) -> ((Matchdetails) o).setSpielDatum((HODateTime) v)).setType(Types.TIMESTAMP).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("WetterId").setGetter((o) -> ((Matchdetails) o).getWetterId()).setSetter((o, v) -> ((Matchdetails) o).setWetterId((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("Zuschauer").setGetter((o) -> ((Matchdetails) o).getZuschauer()).setSetter((o, v) -> ((Matchdetails) o).setZuschauer((int) v)).setType(Types.INTEGER).isNullable(false).build(), - ColumnDescriptor.Builder.newInstance().setColumnName("Matchreport").setGetter((o) -> ((Matchdetails) o).getMatchreport()).setSetter((o, v) -> ((Matchdetails) o).setMatchreport((String) v)).setType(Types.VARCHAR).setLength(20000).isNullable(false).build(), + ColumnDescriptor.Builder.newInstance().setColumnName("Matchreport").setGetter((o) -> truncateString(((Matchdetails) o).getMatchreport(), 20000)).setSetter((o, v) -> ((Matchdetails) o).setMatchreport((String) v)).setType(Types.VARCHAR).setLength(20000).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("RegionID").setGetter((o) -> ((Matchdetails) o).getRegionId()).setSetter((o, v) -> ((Matchdetails) o).setRegionId((Integer) v)).setType(Types.INTEGER).isNullable(true).build(), ColumnDescriptor.Builder.newInstance().setColumnName("soldTerraces").setGetter((o) -> ((Matchdetails) o).getSoldTerraces()).setSetter((o, v) -> ((Matchdetails) o).setSoldTerraces((int) v)).setType(Types.INTEGER).isNullable(false).build(), ColumnDescriptor.Builder.newInstance().setColumnName("soldBasic").setGetter((o) -> ((Matchdetails) o).getSoldBasic()).setSetter((o, v) -> ((Matchdetails) o).setSoldBasic((int) v)).setType(Types.INTEGER).isNullable(false).build(), @@ -77,8 +77,8 @@ protected void initColumns() { ColumnDescriptor.Builder.newInstance().setColumnName("GuestGoal2").setGetter((o) -> ((Matchdetails) o).getGuestGoalsInPart(MatchEvent.MatchPartId.SECOND_HALF)).setSetter((o, v) -> ((Matchdetails) o).setGuestGoalsInPart(MatchEvent.MatchPartId.SECOND_HALF, (Integer) v)).setType(Types.INTEGER).isNullable(true).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GuestGoal3").setGetter((o) -> ((Matchdetails) o).getGuestGoalsInPart(MatchEvent.MatchPartId.OVERTIME)).setSetter((o, v) -> ((Matchdetails) o).setGuestGoalsInPart(MatchEvent.MatchPartId.OVERTIME, (Integer) v)).setType(Types.INTEGER).isNullable(true).build(), ColumnDescriptor.Builder.newInstance().setColumnName("GuestGoal4").setGetter((o) -> ((Matchdetails) o).getGuestGoalsInPart(MatchEvent.MatchPartId.PENALTY_CONTEST)).setSetter((o, v) -> ((Matchdetails) o).setGuestGoalsInPart(MatchEvent.MatchPartId.PENALTY_CONTEST, (Integer) v)).setType(Types.INTEGER).isNullable(true).build(), - ColumnDescriptor.Builder.newInstance().setColumnName("HomeFormation").setGetter((o) -> ((Matchdetails) o).getFormation(true)).setSetter((o, v) -> ((Matchdetails) o).setHomeFormation((String) v)).setType(Types.VARCHAR).setLength(5).isNullable(true).build(), - ColumnDescriptor.Builder.newInstance().setColumnName("AwayFormation").setGetter((o) -> ((Matchdetails) o).getFormation(false)).setSetter((o, v) -> ((Matchdetails) o).setAwayFormation((String) v)).setType(Types.VARCHAR).setLength(5).isNullable(true).build() + ColumnDescriptor.Builder.newInstance().setColumnName("HomeFormation").setGetter((o) -> truncateString(((Matchdetails) o).getFormation(true), 5)).setSetter((o, v) -> ((Matchdetails) o).setHomeFormation((String) v)).setType(Types.VARCHAR).setLength(5).isNullable(true).build(), + ColumnDescriptor.Builder.newInstance().setColumnName("AwayFormation").setGetter((o) -> truncateString(((Matchdetails) o).getFormation(false), 5)).setSetter((o, v) -> ((Matchdetails) o).setAwayFormation((String) v)).setType(Types.VARCHAR).setLength(5).isNullable(true).build() }; } diff --git a/src/main/resources/release_notes.md b/src/main/resources/release_notes.md index 6082a1080..6663c08b2 100644 --- a/src/main/resources/release_notes.md +++ b/src/main/resources/release_notes.md @@ -36,6 +36,7 @@ ### Matches * Fix bug loading matches with no region id (#1975) * Fix NPE when selecting match with red card (#2034) +* Fix sql error when match report is too long for the database column (#2065) ### Lineup * Fix missing player id column in lineup assistant's player table (#1930)