1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.sql.parser.sql.common.value.literal.LiteralValue;
22
23 import java.math.BigDecimal;
24 import java.math.BigInteger;
25
26
27
28
29 @Getter
30 public final class NumberLiteralValue implements LiteralValue<Number> {
31
32 private final Number value;
33
34 public NumberLiteralValue(final String value) {
35 this.value = getNumber(value);
36 }
37
38 private Number getNumber(final String value) {
39 try {
40 return getBigInteger(value);
41 } catch (final NumberFormatException ex) {
42
43 return new BigDecimal(value);
44 }
45 }
46
47 private static Number getBigInteger(final String value) {
48 BigInteger result = new BigInteger(value);
49 if (result.compareTo(new BigInteger(String.valueOf(Integer.MIN_VALUE))) >= 0 && result.compareTo(new BigInteger(String.valueOf(Integer.MAX_VALUE))) <= 0) {
50 return result.intValue();
51 }
52 if (result.compareTo(new BigInteger(String.valueOf(Long.MIN_VALUE))) >= 0 && result.compareTo(new BigInteger(String.valueOf(Long.MAX_VALUE))) <= 0) {
53 return result.longValue();
54 }
55 return result;
56 }
57 }