I had an idea to make this work backwardly compatible.  It should not break
existing Rya repositories:
Encode the java sized integers as-is, then for anything out of range, use
MAX/MIN and concatenate the new big integer encoding.

Here is the current way of encoding returning a string:
            return INTEGER_STRING_TYPE_ENCODER.
encode(Integer.parseInt(data));

Here is my replacement:

if  (value >= Integer.MAX) { //  value is a string, fix this with
parseint() and catch or similar
    return INTEGER_STRING_TYPE_ENCODER.encode(Integer.MAX) +
bigIntegerEncode(value) ;
} else if (value <= Integer.MIN) {
    return INTEGER_STRING_TYPE_ENCODER.encode(Integer.MIN)  +
bigIntegerEncode(value) ;
} else {
            return INTEGER_STRING_TYPE_ENCODER.
encode(Integer.parseInt(data));
}

The only disadvantage I see is that every big integer literal that you
store will have an extra 8 bytes.  Regular integers are unencumbered.

david.

On Tue, Jan 10, 2017 at 3:32 PM, David Lotts <dlo...@gmail.com> wrote:

> > RDF parser confused between large numeric data type with integer. Any
> work around for this?  This is a recent build from master branch 3.2.10 I
> think.
>
> This issue is reported here: https://issues.apache.org/jira/browse/RYA-43
>
> This has a mechanically simple fix, but it breaks existing
> implementations.  So making it backward compatible is probably why it has
> not been done yet.  Backward compatible can be done by designing a way to
> mix the encoding from LexiTypeEncoders.bigIntegerEncoder() with the
> existing LexiTypeEncoders.integerEncoder().  Or create a new Lexical
> encoder, that handles both, or maybe upgrade utility to modify the data.
>
> So you could do this as a work around in your own code if you have luxury
> of starting from an empty Rya repo:
>
> Copy 
> /rya.api/src/main/java/org/apache/rya/api/resolver/impl/IntegerRyaTypeResolver.java
> to LittleIntegerRyaTypeResolver.java
>
> Then, in IntegerRyaTypeResolver.java, where-ever it uses a Integer,
> replace with a BigInteger.
> Replace LexiTypeEncoders.integerEncoder()  with LexiTypeEncoders.
> bigIntegerEncoder()
>     https://github.com/calrissian/mango/blob/master/mango-core/
> src/main/java/org/calrissian/mango/types/encoders/lexi/
> BigIntegerEncoder.java
>
> Test and done!
>
> david.
>

Reply via email to