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() {