From b8d42da230dc514ee180b289ff13489d9bc64988 Mon Sep 17 00:00:00 2001 From: NovaFox161 Date: Sun, 12 Apr 2020 00:11:06 -0500 Subject: [PATCH] ITS FINALLY FIXED! THE RANDOM ERROR IS NO MORE! "So after reviewing her code basically she is an idiot (but I enabled her) basically she was using the Result after consuming it because she wanted to do it in a weird ass way, or partly because she doesn't quite understand Reactor. I thought it was -fine-, but since I am incapable of reading turned out it was the problem so it's fixed now" - Dannie --- .../discal/core/database/DatabaseManager.java | 481 ++++++++---------- 1 file changed, 223 insertions(+), 258 deletions(-) diff --git a/core/src/main/java/org/dreamexposure/discal/core/database/DatabaseManager.java b/core/src/main/java/org/dreamexposure/discal/core/database/DatabaseManager.java index 5225c367..1b67650a 100644 --- a/core/src/main/java/org/dreamexposure/discal/core/database/DatabaseManager.java +++ b/core/src/main/java/org/dreamexposure/discal/core/database/DatabaseManager.java @@ -22,7 +22,6 @@ import java.util.UUID; import java.util.function.Function; import discord4j.core.object.util.Snowflake; -import io.netty.util.IllegalReferenceCountException; import io.r2dbc.pool.ConnectionPool; import io.r2dbc.pool.ConnectionPoolConfiguration; import io.r2dbc.spi.Connection; @@ -467,20 +466,18 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, APIKey) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .next() - .map(row -> { - UserAPIAccount account = new UserAPIAccount(); - account.setAPIKey(APIKey); - account.setUserId(row.get("USER_ID", String.class)); - account.setBlocked(row.get("BLOCKED", Boolean.class)); - account.setTimeIssued(row.get("TIME_ISSUED", Long.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UserAPIAccount account = new UserAPIAccount(); + account.setAPIKey(APIKey); + account.setUserId(row.get("USER_ID", String.class)); + account.setBlocked(row.get("BLOCKED", Boolean.class)); + account.setTimeIssued(row.get("TIME_ISSUED", Long.class)); - return account; - }) - .onErrorResume(IllegalReferenceCountException.class, e -> Mono.empty()) + return account; + })) + .next() .onErrorResume(e -> { - LogFeed.log(LogObject.forException("Failed to get calendar data", e, DatabaseManager.class)); + LogFeed.log(LogObject.forException("Failed to get API user data", e, DatabaseManager.class)); return Mono.empty(); }); } @@ -496,34 +493,32 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, guildId.asString()) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + GuildSettings set = new GuildSettings(guildId); + + set.setUseExternalCalendar(row.get("EXTERNAL_CALENDAR", Boolean.class)); + set.setPrivateKey(row.get("PRIVATE_KEY", String.class)); + set.setEncryptedAccessToken(row.get("ACCESS_TOKEN", String.class)); + set.setEncryptedRefreshToken(row.get("REFRESH_TOKEN", String.class)); + set.setControlRole(row.get("CONTROL_ROLE", String.class)); + set.setDiscalChannel(row.get("DISCAL_CHANNEL", String.class)); + set.setSimpleAnnouncements(row.get("SIMPLE_ANNOUNCEMENT", Boolean.class)); + set.setLang(row.get("LANG", String.class)); + set.setPrefix(row.get("PREFIX", String.class)); + set.setPatronGuild(row.get("PATRON_GUILD", Boolean.class)); + set.setDevGuild(row.get("DEV_GUILD", Boolean.class)); + set.setMaxCalendars(row.get("MAX_CALENDARS", Integer.class)); + set.setDmAnnouncementsFromString(row.get("DM_ANNOUNCEMENTS", String.class)); + set.setTwelveHour(row.get("12_HOUR", Boolean.class)); + set.setBranded(row.get("BRANDED", Boolean.class)); + + //Store in cache... + guildSettingsCache.remove(guildId); + guildSettingsCache.put(guildId, set); + + return set; + })) .next() - .map(row -> { - GuildSettings set = new GuildSettings(guildId); - - set.setUseExternalCalendar(row.get("EXTERNAL_CALENDAR", Boolean.class)); - set.setPrivateKey(row.get("PRIVATE_KEY", String.class)); - set.setEncryptedAccessToken(row.get("ACCESS_TOKEN", String.class)); - set.setEncryptedRefreshToken(row.get("REFRESH_TOKEN", String.class)); - set.setControlRole(row.get("CONTROL_ROLE", String.class)); - set.setDiscalChannel(row.get("DISCAL_CHANNEL", String.class)); - set.setSimpleAnnouncements(row.get("SIMPLE_ANNOUNCEMENT", Boolean.class)); - set.setLang(row.get("LANG", String.class)); - set.setPrefix(row.get("PREFIX", String.class)); - set.setPatronGuild(row.get("PATRON_GUILD", Boolean.class)); - set.setDevGuild(row.get("DEV_GUILD", Boolean.class)); - set.setMaxCalendars(row.get("MAX_CALENDARS", Integer.class)); - set.setDmAnnouncementsFromString(row.get("DM_ANNOUNCEMENTS", String.class)); - set.setTwelveHour(row.get("12_HOUR", Boolean.class)); - set.setBranded(row.get("BRANDED", Boolean.class)); - - //Store in cache... - guildSettingsCache.remove(guildId); - guildSettingsCache.put(guildId, set); - - return set; - }) - .onErrorReturn(IllegalReferenceCountException.class, new GuildSettings(guildId)) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get guild settings", e, DatabaseManager.class)); return Mono.just(new GuildSettings(guildId)); @@ -540,16 +535,13 @@ public class DatabaseManager { .bind(0, guildId.asString()) .bind(1, 1) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + String calId = row.get("CALENDAR_ID", String.class); + String calAddr = row.get("CALENDAR_ADDRESS", String.class); + boolean external = row.get("EXTERNAL", Boolean.class); + return CalendarData.fromData(guildId, 1, calId, calAddr, external); + })) .next() - .map(row -> { - String calId = row.get("CALENDAR_ID", String.class); - String calAddr = row.get("CALENDAR_ADDRESS", String.class); - boolean external = row.get("EXTERNAL", Boolean.class); - return CalendarData.fromData(guildId, 1, calId, - calAddr, external); - }) - .onErrorResume(IllegalReferenceCountException.class, e -> Mono.empty()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get calendar data", e, DatabaseManager.class)); return Mono.empty(); @@ -566,16 +558,13 @@ public class DatabaseManager { .bind(0, guildId.asString()) .bind(1, calendarNumber) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + String calId = row.get("CALENDAR_ID", String.class); + String calAddr = row.get("CALENDAR_ADDRESS", String.class); + boolean external = row.get("EXTERNAL", Boolean.class); + return CalendarData.fromData(guildId, calendarNumber, calId, calAddr, external); + })) .next() - .map(row -> { - String calId = row.get("CALENDAR_ID", String.class); - String calAddr = row.get("CALENDAR_ADDRESS", String.class); - boolean external = row.get("EXTERNAL", Boolean.class); - return CalendarData.fromData(guildId, calendarNumber, calId, - calAddr, external); - }) - .onErrorResume(IllegalReferenceCountException.class, e -> Mono.empty()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get calendar data", e, DatabaseManager.class)); return Mono.empty(); @@ -590,16 +579,14 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, guildId.asString()) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(row -> { - String calId = row.get("CALENDAR_ID", String.class); - String calAddr = row.get("CALENDAR_ADDRESS", String.class); - boolean external = row.get("EXTERNAL", Boolean.class); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + String calId = row.get("CALENDAR_ID", String.class); + String calAddr = row.get("CALENDAR_ADDRESS", String.class); + boolean external = row.get("EXTERNAL", Boolean.class); - return CalendarData.fromData(guildId, 1, calId, calAddr, external); - }) + return CalendarData.fromData(guildId, 1, calId, calAddr, external); + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get all guild calendars", e, DatabaseManager.class)); return Mono.just(new ArrayList<>()); @@ -612,10 +599,12 @@ public class DatabaseManager { String query = "SELECT COUNT(*) FROM " + calendarTableName + ";"; return Mono.from(c.createStatement(query).execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + Integer calendars = row.get(0, Integer.class); + + return calendars == null ? 0 : calendars; + })) .next() - .flatMap(row -> Mono.justOrEmpty(row.get(0, Integer.class)).defaultIfEmpty(-1)) - .onErrorReturn(IllegalReferenceCountException.class, -1) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get calendar count", e, DatabaseManager.class)); return Mono.just(-1); @@ -635,16 +624,14 @@ public class DatabaseManager { .bind(0, guildId.asString()) .bind(1, copiedEventId) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .next() - .map(row -> { - String id = row.get("EVENT_ID", String.class); - long end = row.get("EVENT_END", Long.class); - String img = row.get("IMAGE_LINK", String.class); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + String id = row.get("EVENT_ID", String.class); + long end = row.get("EVENT_END", Long.class); + String img = row.get("IMAGE_LINK", String.class); - return EventData.fromImage(guildId, id, end, img); - }) - .onErrorResume(IllegalReferenceCountException.class, e -> Mono.empty()) + return EventData.fromImage(guildId, id, end, img); + })) + .next() .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get event data", e, DatabaseManager.class)); return Mono.empty(); @@ -660,19 +647,17 @@ public class DatabaseManager { .bind(0, guildId.asString()) .bind(1, eventId) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .next() - .map(row -> { - RsvpData data = new RsvpData(guildId, eventId); - data.setEventEnd(row.get("EVENT_END", Long.class)); - data.setGoingOnTimeFromString(row.get("GOING_ON_TIME", String.class)); - data.setGoingLateFromString(row.get("GOING_LATE", String.class)); - data.setNotGoingFromString(row.get("NOT_GOING", String.class)); - data.setUndecidedFromString(row.get("UNDECIDED", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + RsvpData data = new RsvpData(guildId, eventId); + data.setEventEnd(row.get("EVENT_END", Long.class)); + data.setGoingOnTimeFromString(row.get("GOING_ON_TIME", String.class)); + data.setGoingLateFromString(row.get("GOING_LATE", String.class)); + data.setNotGoingFromString(row.get("NOT_GOING", String.class)); + data.setUndecidedFromString(row.get("UNDECIDED", String.class)); - return data; - }) - .onErrorResume(IllegalReferenceCountException.class, e -> Mono.empty()) + return data; + })) + .next() .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get rsvp data", e, DatabaseManager.class)); return Mono.empty(); @@ -687,29 +672,27 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, announcementId) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .next() - .map(r -> { - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) - .onErrorResume(IllegalReferenceCountException.class, e -> Mono.empty()) + return a; + })) + .next() .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get announcement", e, DatabaseManager.class)); return Mono.empty(); @@ -724,31 +707,29 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, guildId.asString()) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(r -> { - UUID announcementId = UUID.fromString(r.get("ANNOUNCEMENT_ID", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class)); - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) + return a; + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get all announcements for guild", e, DatabaseManager.class)); @@ -763,32 +744,30 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(r -> { - UUID announcementId = UUID.fromString(r.get("ANNOUNCEMENT_ID", String.class)); - Snowflake guildId = Snowflake.of(r.get("GUILD_ID", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class)); + Snowflake guildId = Snowflake.of(row.get("GUILD_ID", String.class)); - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) + return a; + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get announcements by type", e, DatabaseManager.class)); @@ -805,32 +784,30 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, type.name()) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(r -> { - UUID announcementId = UUID.fromString(r.get("ANNOUNCEMENT_ID", String.class)); - Snowflake guildId = Snowflake.of(r.get("GUILD_ID", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class)); + Snowflake guildId = Snowflake.of(row.get("GUILD_ID", String.class)); - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) + return a; + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get announcements by type", e, DatabaseManager.class)); @@ -845,32 +822,30 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(r -> { - UUID announcementId = UUID.fromString(r.get("ANNOUNCEMENT_ID", String.class)); - Snowflake guildId = Snowflake.of(r.get("GUILD_ID", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class)); + Snowflake guildId = Snowflake.of(row.get("GUILD_ID", String.class)); - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) + return a; + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get enabled announcements", e, DatabaseManager.class)); @@ -887,32 +862,30 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, type.name()) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(r -> { - UUID announcementId = UUID.fromString(r.get("ANNOUNCEMENT_ID", String.class)); - Snowflake guildId = Snowflake.of(r.get("GUILD_ID", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class)); + Snowflake guildId = Snowflake.of(row.get("GUILD_ID", String.class)); - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) + return a; + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get announcements by type", e, DatabaseManager.class)); @@ -929,31 +902,29 @@ public class DatabaseManager { return Mono.from(c.createStatement(query) .bind(0, guildId) .execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) - .map(r -> { - UUID announcementId = UUID.fromString(r.get("ANNOUNCEMENT_ID", String.class)); + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class)); - Announcement a = new Announcement(announcementId, guildId); - a.setSubscriberRoleIdsFromString(r.get("SUBSCRIBERS_ROLE", String.class)); - a.setSubscriberUserIdsFromString(r.get("SUBSCRIBERS_USER", String.class)); - a.setAnnouncementChannelId(r.get("CHANNEL_ID", String.class)); - a.setAnnouncementType(AnnouncementType - .valueOf(r.get("ANNOUNCEMENT_TYPE", String.class)) - ); - a.setEventId(r.get("EVENT_ID", String.class)); - a.setEventColor(EventColor - .fromNameOrHexOrID(r.get("EVENT_COLOR", String.class)) - ); - a.setHoursBefore(r.get("HOURS_BEFORE", Integer.class)); - a.setMinutesBefore(r.get("MINUTES_BEFORE", Integer.class)); - a.setInfo(r.get("INFO", String.class)); - a.setEnabled(r.get("ENABLED", Boolean.class)); - a.setInfoOnly(r.get("INFO_ONLY", Boolean.class)); + Announcement a = new Announcement(announcementId, guildId); + a.setSubscriberRoleIdsFromString(row.get("SUBSCRIBERS_ROLE", String.class)); + a.setSubscriberUserIdsFromString(row.get("SUBSCRIBERS_USER", String.class)); + a.setAnnouncementChannelId(row.get("CHANNEL_ID", String.class)); + a.setAnnouncementType(AnnouncementType + .valueOf(row.get("ANNOUNCEMENT_TYPE", String.class)) + ); + a.setEventId(row.get("EVENT_ID", String.class)); + a.setEventColor(EventColor + .fromNameOrHexOrID(row.get("EVENT_COLOR", String.class)) + ); + a.setHoursBefore(row.get("HOURS_BEFORE", Integer.class)); + a.setMinutesBefore(row.get("MINUTES_BEFORE", Integer.class)); + a.setInfo(row.get("INFO", String.class)); + a.setEnabled(row.get("ENABLED", Boolean.class)); + a.setInfoOnly(row.get("INFO_ONLY", Boolean.class)); - return a; - }) + return a; + })) .collectList() - .onErrorReturn(IllegalReferenceCountException.class, new ArrayList<>()) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get enabled announcements for guild", e, DatabaseManager.class)); @@ -967,10 +938,11 @@ public class DatabaseManager { String query = "SELECT COUNT(*) FROM " + announcementTableName + ";"; return Mono.from(c.createStatement(query).execute()); - }).flatMapMany(res -> res.map((row, rowMetadata) -> row)) + }).flatMapMany(res -> res.map((row, rowMetadata) -> { + Integer announcements = row.get(0, Integer.class); + return announcements == null ? 0 : announcements; + })) .next() - .flatMap(row -> Mono.justOrEmpty(row.get(0, Integer.class)).defaultIfEmpty(0)) - .onErrorReturn(IllegalReferenceCountException.class, -1) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to get announcement count", e, DatabaseManager.class)); return Mono.just(-1); @@ -987,7 +959,6 @@ public class DatabaseManager { .execute()); }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete announcement", e, DatabaseManager.class)); return Mono.just(false); @@ -1007,7 +978,6 @@ public class DatabaseManager { .execute()); }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete announcements for event", e, DatabaseManager.class)); return Mono.just(false); @@ -1027,7 +997,6 @@ public class DatabaseManager { .execute()); }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete event data", e, DatabaseManager.class)); return Mono.just(false); @@ -1045,7 +1014,6 @@ public class DatabaseManager { }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete all event data for guild", e, DatabaseManager.class)); return Mono.just(false); @@ -1062,7 +1030,6 @@ public class DatabaseManager { .execute()); }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete all announcements for guild", e, DatabaseManager.class)); return Mono.just(false); @@ -1079,7 +1046,6 @@ public class DatabaseManager { .execute()); }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete all rsvps for guild", e, DatabaseManager.class)); return Mono.just(false); @@ -1098,7 +1064,6 @@ public class DatabaseManager { .execute()); }).flatMapMany(Result::getRowsUpdated) .then(Mono.just(true)) - .onErrorReturn(IllegalReferenceCountException.class, false) .onErrorResume(e -> { LogFeed.log(LogObject.forException("Failed to delete calendar", e, DatabaseManager.class)); return Mono.just(false);