]> source.dussan.org Git - jackcess.git/commitdiff
ditch BIG_INT value type
authorJames Ahlborn <jtahlborn@yahoo.com>
Sat, 31 Dec 2016 17:53:48 +0000 (17:53 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Sat, 31 Dec 2016 17:53:48 +0000 (17:53 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/exprs@1077 f203690c-595d-4dc9-a70b-905162fa7fd2

src/main/java/com/healthmarketscience/jackcess/expr/Value.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/BaseDateValue.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/BaseDelayedValue.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/BaseValue.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/BigDecimalValue.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/BigIntegerValue.java [deleted file]
src/main/java/com/healthmarketscience/jackcess/impl/expr/BuiltinOperators.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/DoubleValue.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/LongValue.java

index 23a29ab3137da44de3c67e03eac26dd329532fc8..29967721eb302632eb155574865662a0d4356df0 100644 (file)
@@ -17,7 +17,6 @@ limitations under the License.
 package com.healthmarketscience.jackcess.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.Date;
 
 /**
@@ -28,7 +27,7 @@ public interface Value
 {
   public enum Type
   {
-    NULL, STRING, DATE, TIME, DATE_TIME, LONG, DOUBLE, BIG_INT, BIG_DEC;
+    NULL, STRING, DATE, TIME, DATE_TIME, LONG, DOUBLE, BIG_DEC;
 
     public boolean isNumeric() {
       return inRange(LONG, BIG_DEC);
@@ -36,7 +35,7 @@ public interface Value
 
     public boolean isIntegral() {
       // note when BOOLEAN is converted to number, it is integral
-      return ((this == LONG) || (this == BIG_INT));
+      return (this == LONG);
     }
 
     public boolean isTemporal() {
@@ -69,7 +68,5 @@ public interface Value
 
   public Double getAsDouble();
 
-  public BigInteger getAsBigInteger();
-
   public BigDecimal getAsBigDecimal();
 }
index 68ad69f53f3cc7f72d0a7bb52258739cdda236bf..1c96ba866a2fdead8e56f0a74dbb168d52a415f5 100644 (file)
@@ -17,11 +17,9 @@ limitations under the License.
 package com.healthmarketscience.jackcess.impl.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.text.DateFormat;
 import java.util.Date;
 
-import com.healthmarketscience.jackcess.expr.Value;
 import com.healthmarketscience.jackcess.impl.ColumnImpl;
 
 /**
@@ -72,11 +70,6 @@ public abstract class BaseDateValue extends BaseValue
     return getNumber();
   }
 
-  @Override
-  public BigInteger getAsBigInteger() {
-    return getAsBigDecimal().toBigInteger();
-  }
-
   @Override
   public BigDecimal getAsBigDecimal() {
     return BigDecimal.valueOf(getNumber());
index 87910be19b7fdf455aefd5977e67948616ffab8b..c75f2b592f305c7426fefeb0f6561bdee9d03b9f 100644 (file)
@@ -3,7 +3,6 @@
 package com.healthmarketscience.jackcess.impl.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.Date;
 
 import com.healthmarketscience.jackcess.expr.Value;
@@ -58,10 +57,6 @@ public abstract class BaseDelayedValue implements Value
     return getDelegate().getAsDouble();
   }
 
-  public BigInteger getAsBigInteger() {
-    return getDelegate().getAsBigInteger();
-  }
-
   public BigDecimal getAsBigDecimal() {
     return getDelegate().getAsBigDecimal();
   }
index db40372f11401472074749d05d1cd514dd4b81e8..109412bed98a7266c210a273365b74871d33671b 100644 (file)
@@ -17,7 +17,6 @@ limitations under the License.
 package com.healthmarketscience.jackcess.impl.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.Date;
 
 import com.healthmarketscience.jackcess.expr.Value;
@@ -52,10 +51,6 @@ public abstract class BaseValue implements Value
     throw invalidConversion(Value.Type.DOUBLE);
   }
 
-  public BigInteger getAsBigInteger() {
-    throw invalidConversion(Value.Type.BIG_INT);
-  }
-
   public BigDecimal getAsBigDecimal() {
     throw invalidConversion(Value.Type.BIG_DEC);
   }
index d3ff58eefeab2ee18d095ee50f9908a3f55422e2..3b64c51872527b92eb23eb0758465f58d4f58982 100644 (file)
@@ -17,7 +17,6 @@ limitations under the License.
 package com.healthmarketscience.jackcess.impl.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 
 /**
  *
@@ -55,11 +54,6 @@ public class BigDecimalValue extends BaseNumericValue
     return _val.toPlainString();
   }
 
-  @Override
-  public BigInteger getAsBigInteger() {
-    return _val.toBigInteger();
-  }
-
   @Override
   public BigDecimal getAsBigDecimal() {
     return _val;
diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/expr/BigIntegerValue.java b/src/main/java/com/healthmarketscience/jackcess/impl/expr/BigIntegerValue.java
deleted file mode 100644 (file)
index fce73ec..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Copyright (c) 2016 James Ahlborn
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package com.healthmarketscience.jackcess.impl.expr;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- *
- * @author James Ahlborn
- */
-public class BigIntegerValue extends BaseNumericValue
-{
-  private final BigInteger _val;
-
-  public BigIntegerValue(BigInteger val) 
-  {
-    _val = val;
-  }
-
-  public Type getType() {
-    return Type.BIG_INT;
-  }
-
-  public Object get() {
-    return _val;
-  }
-
-  @Override
-  protected Number getNumber() {
-    return _val;
-  }
-
-  @Override
-  public boolean getAsBoolean() {
-    return (_val.compareTo(BigInteger.ZERO) != 0L);
-  }
-
-  @Override
-  public BigInteger getAsBigInteger() {
-    return _val;
-  }
-
-  @Override
-  public BigDecimal getAsBigDecimal() {
-    return new BigDecimal(_val);
-  }
-}
index b05bc163f4122da3e604fe22aea6829efe80e70d..0329426818e05736512213b616955fa81c40136e 100644 (file)
@@ -19,7 +19,6 @@ package com.healthmarketscience.jackcess.impl.expr;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.text.DateFormat;
-import java.text.Format;
 import java.util.Date;
 import java.util.regex.Pattern;
 
@@ -86,8 +85,6 @@ public class BuiltinOperators
       return toValue(-param1.getAsLong());
     case DOUBLE:
       return toValue(-param1.getAsDouble());
-    case BIG_INT:
-      return toValue(param1.getAsBigInteger().negate());
     case BIG_DEC:
       return toValue(param1.getAsBigDecimal().negate());
     default:
@@ -117,8 +114,6 @@ public class BuiltinOperators
       return toValue(param1.getAsLong() + param2.getAsLong());
     case DOUBLE:
       return toValue(param1.getAsDouble() + param2.getAsDouble());
-    case BIG_INT:
-      return toValue(param1.getAsBigInteger().add(param2.getAsBigInteger()));
     case BIG_DEC:
       return toValue(param1.getAsBigDecimal().add(param2.getAsBigDecimal()));
     default:
@@ -146,8 +141,6 @@ public class BuiltinOperators
       return toValue(param1.getAsLong() - param2.getAsLong());
     case DOUBLE:
       return toValue(param1.getAsDouble() - param2.getAsDouble());
-    case BIG_INT:
-      return toValue(param1.getAsBigInteger().subtract(param2.getAsBigInteger()));
     case BIG_DEC:
       return toValue(param1.getAsBigDecimal().subtract(param2.getAsBigDecimal()));
     default:
@@ -172,8 +165,6 @@ public class BuiltinOperators
       return toValue(param1.getAsLong() * param2.getAsLong());
     case DOUBLE:
       return toValue(param1.getAsDouble() * param2.getAsDouble());
-    case BIG_INT:
-      return toValue(param1.getAsBigInteger().multiply(param2.getAsBigInteger()));
     case BIG_DEC:
       return toValue(param1.getAsBigDecimal().multiply(param2.getAsBigDecimal()));
     default:
@@ -207,14 +198,6 @@ public class BuiltinOperators
         throw new ArithmeticException(DIV_BY_ZERO);
       }
       return toValue(param1.getAsDouble() / d2);
-    case BIG_INT:
-      BigInteger bip1 = param1.getAsBigInteger();
-      BigInteger bip2 = param2.getAsBigInteger();
-      BigInteger[] res = bip1.divideAndRemainder(bip2);
-      if(res[1].compareTo(BigInteger.ZERO) == 0) {
-        return toValue(res[0]);
-      }
-      return toValue(new BigDecimal(bip1).divide(new BigDecimal(bip2)));
     case BIG_DEC:
       return toValue(param1.getAsBigDecimal().divide(param2.getAsBigDecimal()));
     default:
@@ -242,10 +225,9 @@ public class BuiltinOperators
     case DOUBLE:
       wasDouble = true;
       // fallthrough
-    case BIG_INT:
     case BIG_DEC:
-      BigInteger result = param1.getAsBigInteger().divide(
-          param2.getAsBigInteger());
+      BigInteger result = getAsBigInteger(param1).divide(
+          getAsBigInteger(param2));
       return (wasDouble ? toValue(result.longValue()) : toValue(result));
     default:
       throw new RuntimeException("Unexpected type " + mathType);
@@ -264,17 +246,8 @@ public class BuiltinOperators
     double result = Math.pow(param1.getAsDouble(), param2.getAsDouble());
 
     // attempt to convert integral types back to integrals if possible
-    switch(mathType) {
-    case LONG:
-      if(isIntegral(result)) {
-        return toValue((long)result);
-      }
-      break;
-    case BIG_INT:
-      if(isIntegral(result)) {
-        return toValue(BigDecimal.valueOf(result).toBigInteger());
-      }
-      break;
+    if((mathType == Value.Type.LONG) && isIntegral(result)) {
+      return toValue((long)result);
     }
 
     return toValue(result);
@@ -300,10 +273,9 @@ public class BuiltinOperators
     case DOUBLE:
       wasDouble = true;
       // fallthrough
-    case BIG_INT:
     case BIG_DEC:
-      BigInteger bi1 = param1.getAsBigInteger();
-      BigInteger bi2 = param2.getAsBigInteger().abs();
+      BigInteger bi1 = getAsBigInteger(param1);
+      BigInteger bi2 = getAsBigInteger(param2).abs();
       if(bi2.signum() == 0) {
         throw new ArithmeticException(DIV_BY_ZERO);
       }
@@ -585,8 +557,6 @@ public class BuiltinOperators
       return param1.getAsLong().compareTo(param2.getAsLong());
     case DOUBLE:
       return param1.getAsDouble().compareTo(param2.getAsDouble());
-    case BIG_INT:
-      return param1.getAsBigInteger().compareTo(param2.getAsBigInteger());
     case BIG_DEC:
       return param1.getAsBigDecimal().compareTo(param2.getAsBigDecimal());
     default:
@@ -594,10 +564,6 @@ public class BuiltinOperators
     }
   }
 
-  private static int compare(long l1, long l2) {
-    return ((l1 < l2) ? -1 : ((l1 > l2) ? 1 : 0));
-  }
-
   public static Value toValue(boolean b) {
     return (b ? TRUE_VAL : FALSE_VAL);
   }
@@ -615,7 +581,7 @@ public class BuiltinOperators
   }
 
   public static Value toValue(BigInteger s) {
-    return new BigIntegerValue(s);
+    return toValue(new BigDecimal(s));
   }
 
   public static Value toValue(BigDecimal s) {
@@ -734,4 +700,7 @@ public class BuiltinOperators
     return ((d == Math.rint(d)) && !Double.isInfinite(d) && !Double.isNaN(d));
   }
 
+  private static BigInteger getAsBigInteger(Value v) {
+    return v.getAsBigDecimal().toBigInteger();
+  }
 }
index edaf887344801598965390bc599febc32e7a0f53..7fcd840b25fbf10002a86c739b5f5f4693163fa1 100644 (file)
@@ -17,7 +17,6 @@ limitations under the License.
 package com.healthmarketscience.jackcess.impl.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 
 /**
  *
@@ -55,11 +54,6 @@ public class DoubleValue extends BaseNumericValue
     return _val;
   }
 
-  @Override
-  public BigInteger getAsBigInteger() {
-    return getAsBigDecimal().toBigInteger();
-  }
-
   @Override
   public BigDecimal getAsBigDecimal() {
     return BigDecimal.valueOf(_val);
index 8501082c2e12c5268b34d0d3354fa48c264c910c..16ac83de1f14eced536d0918a9a1f2d41962c083 100644 (file)
@@ -17,7 +17,6 @@ limitations under the License.
 package com.healthmarketscience.jackcess.impl.expr;
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 
 /**
  *
@@ -55,11 +54,6 @@ public class LongValue extends BaseNumericValue
     return _val;
   }
 
-  @Override
-  public BigInteger getAsBigInteger() {
-    return BigInteger.valueOf(_val);
-  }
-
   @Override
   public BigDecimal getAsBigDecimal() {
     return BigDecimal.valueOf(_val);