From a480e10bd890c9150900d06193df8edb80293a3f Mon Sep 17 00:00:00 2001 From: Oleg Agafonov <jaydi85@gmail.com> Date: Sun, 14 Nov 2021 01:27:58 +0400 Subject: [PATCH] DB: added numerical card number field for min/max query (#8383); --- .../src/main/java/mage/cards/repository/CardCriteria.java | 5 +++-- Mage/src/main/java/mage/cards/repository/CardInfo.java | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Mage/src/main/java/mage/cards/repository/CardCriteria.java b/Mage/src/main/java/mage/cards/repository/CardCriteria.java index 2bb87995a1..db817ce7e1 100644 --- a/Mage/src/main/java/mage/cards/repository/CardCriteria.java +++ b/Mage/src/main/java/mage/cards/repository/CardCriteria.java @@ -40,6 +40,7 @@ public class CardCriteria { private String sortBy; private Long start; private Long count; + // compare numerical card numbers (123b -> 123) private int minCardNumber; private int maxCardNumber; @@ -304,12 +305,12 @@ public class CardCriteria { } if (minCardNumber != Integer.MIN_VALUE) { - where.ge("cardNumber", minCardNumber); + where.ge("cardNumberAsInt", minCardNumber); clausesCount++; } if (maxCardNumber != Integer.MAX_VALUE) { - where.le("cardNumber", maxCardNumber); + where.le("cardNumberAsInt", maxCardNumber); clausesCount++; } diff --git a/Mage/src/main/java/mage/cards/repository/CardInfo.java b/Mage/src/main/java/mage/cards/repository/CardInfo.java index 776738cb2d..995bf776e9 100644 --- a/Mage/src/main/java/mage/cards/repository/CardInfo.java +++ b/Mage/src/main/java/mage/cards/repository/CardInfo.java @@ -46,6 +46,11 @@ public class CardInfo { protected String setCode; @DatabaseField(indexName = "setCode_cardNumber_index") protected String cardNumber; + /** + * Fast access to numerical card number (number without prefix/postfix: 123b -> 123) + */ + @DatabaseField(indexName = "cardNumberAsInt_index") + protected int cardNumberAsInt; @DatabaseField(indexName = "className_index") protected String className; @DatabaseField @@ -124,6 +129,7 @@ public class CardInfo { this.name = card.getName(); this.lower_name = name.toLowerCase(Locale.ENGLISH); this.cardNumber = card.getCardNumber(); + this.cardNumberAsInt = CardUtil.parseCardNumberAsInt(card.getCardNumber()); this.setCode = card.getExpansionSetCode(); this.className = card.getClass().getCanonicalName(); this.power = card.getPower().toString(); @@ -424,7 +430,7 @@ public class CardInfo { } public int getCardNumberAsInt() { - return CardUtil.parseCardNumberAsInt(cardNumber); + return cardNumberAsInt; } public boolean isSplitCard() {