in kyuubi-hive-jdbc/src/main/java/org/apache/kyuubi/jdbc/hive/common/FastHiveDecimalImpl.java [9217:9299]
public static boolean fastIsValid(
int fastSignum,
long fast0,
long fast1,
long fast2,
int fastIntegerDigitCount,
int fastScale) {
boolean isValid;
if (fastSignum == 0) {
isValid =
(fast0 == 0 && fast1 == 0 && fast2 == 0 && fastIntegerDigitCount == 0 && fastScale == 0);
if (!isValid) {
System.out.println("FAST_IS_VALID signum 0 but other fields not");
}
} else {
isValid =
((fast0 >= 0 && fast0 <= MAX_LONGWORD_DECIMAL)
&& (fast1 >= 0 && fast1 <= MAX_LONGWORD_DECIMAL)
&& (fast2 >= 0 && fast2 <= MAX_HIGHWORD_DECIMAL));
if (!isValid) {
System.out.println("FAST_IS_VALID fast0 .. fast2 out of range");
} else {
if (fastScale < 0 || fastScale > HiveDecimal.MAX_SCALE) {
System.out.println("FAST_IS_VALID fastScale " + fastScale + " out of range");
isValid = false;
} else if (fastIntegerDigitCount < 0 || fastIntegerDigitCount > HiveDecimal.MAX_PRECISION) {
System.out.println(
"FAST_IS_VALID fastIntegerDigitCount " + fastIntegerDigitCount + " out of range");
isValid = false;
} else if (fastIntegerDigitCount + fastScale > HiveDecimal.MAX_PRECISION) {
System.out.println(
"FAST_IS_VALID exceeds max precision: fastIntegerDigitCount "
+ fastIntegerDigitCount
+ " and fastScale "
+ fastScale);
isValid = false;
} else {
// Verify integerDigitCount given fastScale.
final int rawPrecision = fastRawPrecision(fastSignum, fast0, fast1, fast2);
if (fastIntegerDigitCount > 0) {
if (rawPrecision != fastIntegerDigitCount + fastScale) {
System.out.println(
"FAST_IS_VALID integer case: rawPrecision "
+ rawPrecision
+ " fastIntegerDigitCount "
+ fastIntegerDigitCount
+ " fastScale "
+ fastScale);
isValid = false;
}
} else {
if (rawPrecision > fastScale) {
System.out.println(
"FAST_IS_VALID fraction only case: rawPrecision "
+ rawPrecision
+ " fastIntegerDigitCount "
+ fastIntegerDigitCount
+ " fastScale "
+ fastScale);
isValid = false;
}
}
if (isValid) {
final int trailingZeroCount =
fastTrailingDecimalZeroCount(fast0, fast1, fast2, fastIntegerDigitCount, fastScale);
if (trailingZeroCount != 0) {
System.out.println("FAST_IS_VALID exceeds max precision: trailingZeroCount != 0");
isValid = false;
}
}
}
}
}
if (!isValid) {
System.out.println("FAST_IS_VALID fast0 " + fast0);
System.out.println("FAST_IS_VALID fast1 " + fast1);
System.out.println("FAST_IS_VALID fast2 " + fast2);
System.out.println("FAST_IS_VALID fastIntegerDigitCount " + fastIntegerDigitCount);
System.out.println("FAST_IS_VALID fastScale " + fastScale);
}
return isValid;
}