Package org.apache.cassandra.db.marshal
Class DecimalType
- All Implemented Interfaces:
Comparator<ByteBuffer>,AssignmentTestable
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.cassandra.db.marshal.NumberType
NumberType.NumberArgumentDeserializer<M extends org.apache.commons.lang3.mutable.Mutable<Number>>Nested classes/interfaces inherited from class org.apache.cassandra.db.marshal.AbstractType
AbstractType.ComparisonType, AbstractType.DefaultArgumentDeserializerNested classes/interfaces inherited from interface org.apache.cassandra.cql3.AssignmentTestable
AssignmentTestable.TestResult -
Field Summary
FieldsFields inherited from class org.apache.cassandra.db.marshal.AbstractType
comparatorSet, comparisonType, isByteOrderComparable, reverseComparator -
Method Summary
Modifier and TypeMethodDescriptionTakes the absolute value of the argument.Adds the left argument to the right one.booleanDefines if the type allows an empty set of bytes (new byte[0]) as valid input.<V> ByteSourceasComparableBytes(ValueAccessor<V> accessor, V data, ByteComparable.Version version) Constructs a byte-comparable representation.<VL,VR> int compareCustom(VL left, ValueAccessor<VL> accessorL, VR right, ValueAccessor<VR> accessorR) Implement IFF ComparisonType is CUSTOM Compares the byte representation of two instances of this class, for types where this cannot be done by simple in-order comparison of the unsigned bytes Standard Java compare semanticsDivides the left argument by the right one.Raises e to the power of the argument.protected BigDecimalexp(BigDecimal input) <V> VfromComparableBytes(ValueAccessor<V> accessor, ByteSource.Peekable comparableBytes, ByteComparable.Version version) Translates the given byte-ordered representation to the common, non-byte-ordered binary representation of a payload for this abstract type (the latter, common binary representation is what we mostly work with in the storage engine internals).fromJSONObject(Object parsed) Given a parsed JSON string, return a byte representation of the object.fromString(String source) get a byte representation of the given string.booleanbooleanChecks if this type support floating point numbers.Takes the natural logrithm of the argument.protected BigDecimallog(BigDecimal input) Takes the log base 10 of the arguement.protected BigDecimallog10(BigDecimal input) Return the remainder.Multiplies the left argument with the right one.Negates the argument.Rounds the argument to the nearest whole number.Substracts the left argument from the right one.protected BigDecimaltoBigDecimal(Number number) Converts the specified number into aBigDecimal.toJSONString(ByteBuffer buffer, ProtocolVersion protocolVersion) Converts the specified value into its JSON representation.Methods inherited from class org.apache.cassandra.db.marshal.AbstractType
asComparableBytes, asCQLTypeStringList, checkComparable, compare, compare, compareCollectionMembers, compareForCQL, compose, compose, decompose, decomposeUntyped, expandUserTypes, freeze, freezeNestedMulticellTypes, fromComparableBytes, getCompatibleTypeIfKnown, getComponents, getString, getString, getString, isCollection, isCompatibleWith, isCounter, isFreezable, isFrozenCollection, isMultiCell, isNull, isNull, isReversed, isSerializationCompatibleWith, isTuple, isUDT, isValueCompatibleWith, isValueCompatibleWithInternal, isValueLengthFixed, isVector, parseDefaultParameters, read, readArray, readBuffer, readBuffer, referencesDuration, referencesUserType, referencesUserType, skipValue, subTypes, testAssignment, testAssignment, toCQLString, toJSONString, toString, toString, udfType, unfreeze, unwrap, validate, validate, validateCellValue, validateCollectionMember, valueLengthIfFixed, withUpdatedUserType, writeValue, writeValue, writtenLength, writtenLengthMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
instance
-
-
Method Details
-
allowsEmpty
public boolean allowsEmpty()Description copied from class:AbstractTypeDefines if the type allows an empty set of bytes (new byte[0]) as valid input. TheAbstractType.validate(Object, ValueAccessor)andAbstractType.compose(Object, ValueAccessor)methods must allow empty bytes when this returns true, and must reject empty bytes when this is false. As of this writing, the main user of this API is for testing to know what types allow empty values and what types don't, so that the data that gets generated understands whenByteBufferUtil.EMPTY_BYTE_BUFFERis allowed as valid data.- Overrides:
allowsEmptyin classAbstractType<BigDecimal>
-
isEmptyValueMeaningless
public boolean isEmptyValueMeaningless()Description copied from class:AbstractType- Overrides:
isEmptyValueMeaninglessin classAbstractType<BigDecimal>
-
isFloatingPoint
public boolean isFloatingPoint()Description copied from class:NumberTypeChecks if this type support floating point numbers.- Overrides:
isFloatingPointin classNumberType<BigDecimal>- Returns:
trueif this type support floating point numbers,falseotherwise.
-
compareCustom
public <VL,VR> int compareCustom(VL left, ValueAccessor<VL> accessorL, VR right, ValueAccessor<VR> accessorR) Description copied from class:AbstractTypeImplement IFF ComparisonType is CUSTOM Compares the byte representation of two instances of this class, for types where this cannot be done by simple in-order comparison of the unsigned bytes Standard Java compare semantics- Overrides:
compareCustomin classAbstractType<BigDecimal>
-
asComparableBytes
public <V> ByteSource asComparableBytes(ValueAccessor<V> accessor, V data, ByteComparable.Version version) Constructs a byte-comparable representation. This is rather difficult and involves reconstructing the decimal. To compare, we need a normalized value, i.e. one with a sign, exponent and (0,1) mantissa. To avoid loss of precision, both exponent and mantissa need to be base-100. We can't get this directly off the serialized bytes, as they have base-10 scale and base-256 unscaled part. We store: - sign bit inverted * 0x80 + 0x40 + signed exponent length, where exponent is negated if value is negative - zero or more exponent bytes (as given by length) - 0x80 + first pair of decimal digits, negative if value is negative, rounded to -inf - zero or more 0x80 + pair of decimal digits, always positive - trailing 0x00 Zero is special-cased as 0x80. Because the trailing 00 cannot be produced from a pair of decimal digits (positive or not), no value can be a prefix of another. Encoding examples: 1.1 as c1 = 0x80 (positive number) + 0x40 + (positive exponent) 0x01 (exp length 1) 01 = exponent 1 (100^1) 81 = 0x80 + 01 (0.01) 8a = 0x80 + 10 (....10) 0.0110e2 00 -1 as 3f = 0x00 (negative number) + 0x40 - (negative exponent) 0x01 (exp length 1) ff = exponent -1. negative number, thus 100^1 7f = 0x80 - 01 (-0.01) -0.01e2 00 -99.9 as 3f = 0x00 (negative number) + 0x40 - (negative exponent) 0x01 (exp length 1) ff = exponent -1. negative number, thus 100^1 1c = 0x80 - 100 (-1.00) 8a = 0x80 + 10 (+....10) -0.999e2 00- Overrides:
asComparableBytesin classAbstractType<BigDecimal>
-
fromComparableBytes
public <V> V fromComparableBytes(ValueAccessor<V> accessor, ByteSource.Peekable comparableBytes, ByteComparable.Version version) Description copied from class:AbstractTypeTranslates the given byte-ordered representation to the common, non-byte-ordered binary representation of a payload for this abstract type (the latter, common binary representation is what we mostly work with in the storage engine internals). If the given bytes don't correspond to the encoding of some payload value for this abstract type, anIllegalArgumentExceptionmay be thrown.- Overrides:
fromComparableBytesin classAbstractType<BigDecimal>- Parameters:
accessor- value accessor used to construct the value.comparableBytes- A byte-ordered representation (presumably of a payload for this abstract type).version- The byte-comparable version used to construct the representation.- Returns:
- A of a payload for this abstract type, corresponding to the given byte-ordered representation, constructed using the supplied value accessor.
- See Also:
-
fromString
Description copied from class:AbstractTypeget a byte representation of the given string.- Specified by:
fromStringin classAbstractType<BigDecimal>- Throws:
MarshalException
-
fromJSONObject
Description copied from class:AbstractTypeGiven a parsed JSON string, return a byte representation of the object.- Specified by:
fromJSONObjectin classAbstractType<BigDecimal>- Parameters:
parsed- the result of parsing a json string- Throws:
MarshalException
-
toJSONString
Description copied from class:AbstractTypeConverts the specified value into its JSON representation.The buffer position will stay the same.
- Overrides:
toJSONStringin classAbstractType<BigDecimal>- Parameters:
buffer- the value to convertprotocolVersion- the protocol version to use for the conversion- Returns:
- a JSON string representing the specified value
-
asCQL3Type
- Overrides:
asCQL3Typein classAbstractType<BigDecimal>
-
getSerializer
- Specified by:
getSerializerin classAbstractType<BigDecimal>
-
getArgumentDeserializer
- Overrides:
getArgumentDeserializerin classAbstractType<BigDecimal>- Returns:
- the deserializer used to deserialize the function arguments of this type.
-
toBigDecimal
Converts the specified number into aBigDecimal.- Parameters:
number- the value to convert- Returns:
- the converted value
-
add
Description copied from class:NumberTypeAdds the left argument to the right one.- Specified by:
addin classNumberType<BigDecimal>- Parameters:
left- the left argumentright- the right argument- Returns:
- the addition result
-
substract
Description copied from class:NumberTypeSubstracts the left argument from the right one.- Specified by:
substractin classNumberType<BigDecimal>- Parameters:
left- the left argumentright- the right argument- Returns:
- the substraction result
-
multiply
Description copied from class:NumberTypeMultiplies the left argument with the right one.- Specified by:
multiplyin classNumberType<BigDecimal>- Parameters:
left- the left argumentright- the right argument- Returns:
- the multiplication result
-
divide
Description copied from class:NumberTypeDivides the left argument by the right one.- Specified by:
dividein classNumberType<BigDecimal>- Parameters:
left- the left argumentright- the right argument- Returns:
- the division result
-
mod
Description copied from class:NumberTypeReturn the remainder.- Specified by:
modin classNumberType<BigDecimal>- Parameters:
left- the left argumentright- the right argument- Returns:
- the remainder
-
negate
Description copied from class:NumberTypeNegates the argument.- Specified by:
negatein classNumberType<BigDecimal>- Parameters:
input- the argument to negate- Returns:
- the negated argument
-
abs
Description copied from class:NumberTypeTakes the absolute value of the argument.- Specified by:
absin classNumberType<BigDecimal>- Parameters:
input- the argument to take the absolute value of- Returns:
- a ByteBuffer containing the absolute value of the argument. The type of the contents of the ByteBuffer will match that of the input.
-
exp
Description copied from class:NumberTypeRaises e to the power of the argument.- Specified by:
expin classNumberType<BigDecimal>- Parameters:
input- the argument to raise e to- Returns:
- a ByteBuffer containg the value of e (the base of natural logarithms) raised to the power of the argument. The type of the contents of the ByteBuffer will be a double, unless the input is a DecimalType or IntegerType, in which the ByteBuffer will contain a DecimalType.
-
exp
-
log
Description copied from class:NumberTypeTakes the natural logrithm of the argument.- Specified by:
login classNumberType<BigDecimal>- Parameters:
input- the argument to take the natural log (ln) of- Returns:
- a ByteBuffer containg the log base e (ln) of the argument. The type of the contents of the ByteBuffer will be a double, unless the input is a DecimalType or IntegerType, in which the ByteBuffer will contain a DecimalType.
-
log
-
log10
Description copied from class:NumberTypeTakes the log base 10 of the arguement.- Specified by:
log10in classNumberType<BigDecimal>- Parameters:
input- the argument to take the log base ten of- Returns:
- a ByteBuffer containg the log base 10 of the argument. The type of the contents of the ByteBuffer will be a double, unless the input is a DecimalType or IntegerType, in which the ByteBuffer will contain a DecimalType.
-
log10
-
round
Description copied from class:NumberTypeRounds the argument to the nearest whole number.- Specified by:
roundin classNumberType<BigDecimal>- Parameters:
input- the argument to round- Returns:
- a ByteBuffer containg the rounded argument. If the input is an integral type, the ByteBuffer will contain a copy of the input. If the input is a float, the ByteBuffer will contain an int32. If the input is a double, the output will contain a long. If the input is a DecimalType, the output will contain an IntegerType.
-
getMaskedValue
- Overrides:
getMaskedValuein classAbstractType<BigDecimal>- Returns:
- A fixed, serialized value to be used when the column is masked, to be returned instead of the real value.
-