]> source.dussan.org Git - jackcess.git/commitdiff
ditch boolean type
authorJames Ahlborn <jtahlborn@yahoo.com>
Fri, 9 Dec 2016 15:06:15 +0000 (15:06 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Fri, 9 Dec 2016 15:06:15 +0000 (15:06 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/exprs@1068 f203690c-595d-4dc9-a70b-905162fa7fd2

12 files changed:
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
src/main/java/com/healthmarketscience/jackcess/impl/expr/BooleanValue.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/Expressionator.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/LongValue.java
src/main/java/com/healthmarketscience/jackcess/impl/expr/StringValue.java

index c9a2a221f9adf85e10c46352380d8b105f87d668..59f99c05861b1092fc33ae681fc3bf7e160cc701 100644 (file)
@@ -28,8 +28,7 @@ public interface Value
 {
   public enum Type
   {
-    // FIXME, ditch boolean type -> -1,0
-    NULL, BOOLEAN, STRING, DATE, TIME, DATE_TIME, LONG, DOUBLE, BIG_INT, BIG_DEC;
+    NULL, STRING, DATE, TIME, DATE_TIME, LONG, DOUBLE, BIG_INT, BIG_DEC;
 
     public boolean isNumeric() {
       return inRange(LONG, BIG_DEC);
@@ -37,7 +36,7 @@ public interface Value
 
     public boolean isIntegral() {
       // note when BOOLEAN is converted to number, it is integral
-      return ((this == LONG) || (this == BIG_INT) || (this == BOOLEAN));
+      return ((this == LONG) || (this == BIG_INT));
     }
 
     public boolean isTemporal() {
@@ -58,7 +57,7 @@ public interface Value
 
   public Object get();
 
-  public Boolean getAsBoolean();
+  public boolean getAsBoolean();
 
   public String getAsString();
 
index 8a3ff8f1e7d58b81cf555573567fd951af0f465e..ed1b8b56d059898e82b3dab0dc4f1ccd4b7a1255 100644 (file)
@@ -48,9 +48,9 @@ public abstract class BaseDateValue extends BaseValue
   }
 
   @Override
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     // ms access seems to treat dates/times as "true"
-    return Boolean.TRUE;
+    return true;
   }
 
   @Override
index 88493906ca3e2d36495f284ec37d6654205e0402..ffb919b02fd90a11a23134c31be1f237249c1332 100644 (file)
@@ -34,7 +34,7 @@ public abstract class BaseDelayedValue implements Value
     return getDelegate().get();
   }
 
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     return getDelegate().getAsBoolean();
   }
 
index d75e67142bfb572006cb9ecbf8a2590bc92aabe1..89e9de3a0adbc489490bfcce9f1718cdad3e1658 100644 (file)
@@ -28,8 +28,8 @@ import com.healthmarketscience.jackcess.expr.Value;
  */
 public abstract class BaseValue implements Value
 {
-  public Boolean getAsBoolean() {
-    throw invalidConversion(Value.Type.BOOLEAN);
+  public boolean getAsBoolean() {
+    throw invalidConversion(Value.Type.LONG);
   }
 
   public String getAsString() {
index 386eb79412c5e269219710604441558c97834912..d3ff58eefeab2ee18d095ee50f9908a3f55422e2 100644 (file)
@@ -46,7 +46,7 @@ public class BigDecimalValue extends BaseNumericValue
   }
 
   @Override
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     return (_val.compareTo(BigDecimal.ZERO) != 0L);
   }
 
index 9aa787fd0f1e562596dfee3276adaf6b6185d593..fce73ec7ae071c8543ee7d6ec0648b99b8069230 100644 (file)
@@ -46,7 +46,7 @@ public class BigIntegerValue extends BaseNumericValue
   }
 
   @Override
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     return (_val.compareTo(BigInteger.ZERO) != 0L);
   }
 
diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/expr/BooleanValue.java b/src/main/java/com/healthmarketscience/jackcess/impl/expr/BooleanValue.java
deleted file mode 100644 (file)
index cc31617..0000000
+++ /dev/null
@@ -1,89 +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;
-
-import com.healthmarketscience.jackcess.expr.Value;
-
-/**
- *
- * @author James Ahlborn
- */
-public class BooleanValue extends BaseValue
-{
-  private final Boolean _val;
-
-  public BooleanValue(Boolean val) 
-  {
-    _val = val;
-  }
-
-  public Type getType() {
-    return Type.BOOLEAN;
-  }
-
-  public Object get() {
-    return _val;
-  }
-
-  @Override
-  public Boolean getAsBoolean() {
-    return _val;
-  }
-
-  @Override
-  public String getAsString() {
-    // access seems to like -1 for true and 0 for false
-    return (_val ? "-1" : "0");
-  }
-
-  @Override
-  public Long getAsLong() {
-    // access seems to like -1 for true and 0 for false
-    return numericBoolean(_val);
-  }
-
-  @Override
-  public Double getAsDouble() {
-    // access seems to like -1 for true and 0 for false
-    return (_val ? -1d : 0d);
-  }
-
-  @Override
-  public BigInteger getAsBigInteger() {
-    // access seems to like -1 for true and 0 for false
-    return (_val ? BigInteger.valueOf(-1) : BigInteger.ZERO);
-  }
-
-  @Override
-  public BigDecimal getAsBigDecimal() {
-    // access seems to like -1 for true and 0 for false
-    return (_val ? BigDecimal.valueOf(-1) : BigDecimal.ZERO);
-  }
-
-  @Override
-  public Value toNumericValue() {
-    return new LongValue(getAsLong());
-  }
-
-  protected static long numericBoolean(Boolean b) {
-    // access seems to like -1 for true and 0 for false
-    return (b ? -1L : 0L);
-  }
-}
index 2ef3c23df4544796eaa7dacc706798d03b3a1f10..040bcf179a7898ab71e220222996f9aea707bbcd 100644 (file)
@@ -42,8 +42,10 @@ public class BuiltinOperators
       return null;
     }
   };
-  public static final Value TRUE_VAL = new BooleanValue(Boolean.TRUE);
-  public static final Value FALSE_VAL = new BooleanValue(Boolean.FALSE);
+  // access seems to like -1 for true and 0 for false (boolean values are
+  // basically an illusion)
+  public static final Value TRUE_VAL = new LongValue(-1L);
+  public static final Value FALSE_VAL = new LongValue(0L);
   public static final Value EMPTY_STR_VAL = new StringValue("");
 
   private BuiltinOperators() {}
@@ -69,8 +71,6 @@ public class BuiltinOperators
     Value.Type mathType = param1.getType();
 
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(-getAsNumericBoolean(param1));
     // case STRING: break; unsupported
     case DATE:
     case TIME:
@@ -100,8 +100,6 @@ public class BuiltinOperators
     Value.Type mathType = getSimpleMathTypePrecedence(param1, param2);
 
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(getAsNumericBoolean(param1) + getAsNumericBoolean(param2));
     case STRING: 
       // string '+' is a null-propagation (handled above) concat
       return nonNullConcat(param1, param2);
@@ -133,8 +131,6 @@ public class BuiltinOperators
     Value.Type mathType = getSimpleMathTypePrecedence(param1, param2);
 
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(getAsNumericBoolean(param1) - getAsNumericBoolean(param2));
     // case STRING: break; unsupported
     case DATE:
     case TIME:
@@ -164,8 +160,6 @@ public class BuiltinOperators
     Value.Type mathType = getGeneralMathTypePrecedence(param1, param2);
 
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(getAsNumericBoolean(param1) * getAsNumericBoolean(param2));
     // case STRING: break; unsupported
     // case DATE: break; promoted to double
     // case TIME: break; promoted to double
@@ -192,8 +186,6 @@ public class BuiltinOperators
     Value.Type mathType = getGeneralMathTypePrecedence(param1, param2);
 
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(getAsNumericBoolean(param1) / getAsNumericBoolean(param2));
     // case STRING: break; unsupported
     // case DATE: break; promoted to double
     // case TIME: break; promoted to double
@@ -233,8 +225,6 @@ public class BuiltinOperators
 
     boolean wasDouble = false;
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(getAsNumericBoolean(param1) / getAsNumericBoolean(param2));
     // case STRING: break; unsupported
     // case DATE: break; promoted to double
     // case TIME: break; promoted to double
@@ -267,7 +257,6 @@ public class BuiltinOperators
 
     // attempt to convert integral types back to integrals if possible
     switch(mathType) {
-    case BOOLEAN:
     case LONG:
       if(isIntegral(result)) {
         return toValue((long)result);
@@ -294,8 +283,6 @@ public class BuiltinOperators
 
     boolean wasDouble = false;
     switch(mathType) {
-    case BOOLEAN:
-      return toValue(getAsNumericBoolean(param1) % getAsNumericBoolean(param2));
     // case STRING: break; unsupported
     // case DATE: break; promoted to double
     // case TIME: break; promoted to double
@@ -561,8 +548,6 @@ public class BuiltinOperators
     Value.Type compareType = getGeneralMathTypePrecedence(param1, param2);
 
     switch(compareType) {
-    case BOOLEAN:
-      return compare(getAsNumericBoolean(param1), getAsNumericBoolean(param2));
     case STRING:
       // string comparison is only valid if _both_ params are strings
       if(param1.getType() != param2.getType()) {
@@ -589,10 +574,6 @@ public class BuiltinOperators
     return ((l1 < l2) ? -1 : ((l1 > l2) ? 1 : 0));
   }
 
-  private static long getAsNumericBoolean(Value v) {
-    return BooleanValue.numericBoolean(v.getAsBoolean());
-  }
-
   public static Value toValue(boolean b) {
     return (b ? TRUE_VAL : FALSE_VAL);
   }
index 4a77fb9e6bbe5908ca85dc97078b998c963c0f89..edaf887344801598965390bc599febc32e7a0f53 100644 (file)
@@ -46,7 +46,7 @@ public class DoubleValue extends BaseNumericValue
   }
 
   @Override
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     return (_val.doubleValue() != 0.0d);
   }
 
index e61639389217112a4f74489e2dd078d0431f059b..5d9c1d1a923d571b3db38cca8df1716b0f1f3d06 100644 (file)
@@ -1304,14 +1304,15 @@ public class Expressionator
         return null;
       }
 
-      if(val.getType() != Value.Type.BOOLEAN) {
-        // a single value as a conditional expression seems to act like an
-        // implicit "="
-        // FIXME, what about row validators?
-        val = BuiltinOperators.equals(val, ctx.getThisColumnValue());
-      }
-
-      return (Boolean)val.get();
+      // FIXME, is this only true for non-numeric...?
+      // if(val.getType() != Value.Type.BOOLEAN) {
+      //   // a single value as a conditional expression seems to act like an
+      //   // implicit "="
+      //   // FIXME, what about row validators?
+      //   val = BuiltinOperators.equals(val, ctx.getThisColumnValue());
+      // }
+
+      return val.getAsBoolean();
     }
 
     @Override
index a85b7ff0cc0a45d41cbcaf70bdd66574751f811b..8501082c2e12c5268b34d0d3354fa48c264c910c 100644 (file)
@@ -46,7 +46,7 @@ public class LongValue extends BaseNumericValue
   }
 
   @Override
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     return (_val.longValue() != 0L);
   }
 
index 5bbaa9d7bd868e6adaf34d0a6c65cb0b9c9dcbba..ac3688d59d7b052e9723dadcd5ecba41e6bd46f3 100644 (file)
@@ -38,9 +38,9 @@ public class StringValue extends BaseValue
   }
 
   @Override
-  public Boolean getAsBoolean() {
+  public boolean getAsBoolean() {
     // ms access seems to treat strings as "true"
-    return Boolean.TRUE;
+    return true;
   }
 
   @Override