private static String toArrayIndexPath(int idx) { // todo: encode the idx using something like http://www.zanopha.com/docs/elen.pdf // so we get lexicographic ordering. return toLexSortableString(idx); }
private static String toArrayIndexPath(int idx) { // todo: encode the idx using something like http://www.zanopha.com/docs/elen.pdf // so we get lexicographic ordering. return toLexSortableString(idx, '['); }
public static String toLexSortableString(int value) { return toLexSortableString(Integer.toString(value)); }
public static String toLexSortableString(long value) { return toLexSortableString(Long.toString(value)); }
@Override public void build(StringBuilder sql, ArrayList<Consumer<Query<Map<String, Object>>>> binds, AtomicInteger bindCounter) { int b1 = bindCounter.incrementAndGet(); sql.append(":f").append(b1); binds.add(query -> { if( value == null ) { query.bind("f" + b1, String.valueOf(NULL_VALUE_PREFIX)); } else if( value == Boolean.FALSE ) { query.bind("f" + b1, String.valueOf(FALSE_VALUE_PREFIX)); } else if( value == Boolean.TRUE ) { query.bind("f" + b1, String.valueOf(TRUE_VALUE_PREFIX)); } else if( value.getClass() == String.class ) { query.bind("f" + b1, STRING_VALUE_PREFIX+value.toString()); } else if( value instanceof Number ) { query.bind("f" + b1, toLexSortableString(value.toString())); } else { query.bind("f" + b1, STRING_VALUE_PREFIX+value.toString()); } }); } }
@Test @SuppressWarnings("unchecked") public void testFloatsValues() { assertThat(toLexSortableString("1.01")).isEqualTo("[101-"); assertThat(toLexSortableString("-100.5")).isEqualTo("--68994["); String last=null; for (int i = 0; i < 9000; i++) { String value = rtrim(String.format("23.%04d",i),"0"); String next = toLexSortableString(value); if( last != null ) { assertThat((Comparable)last).isLessThan(next); } last = next; } }
@Test public void testDataTypes() { // see: http://www.zanopha.com/docs/elen.pdf int intitialValue = 1234567890; String r1 = toLexSortableString(intitialValue); assertThat(r1).isEqualTo("[[[2101234567890"); int r2 = JsonRecordSupport.fromLexSortableStringToInt(r1); assertThat(r2).isEqualTo(intitialValue); }
@Test public void testDataTypes() { // see: http://www.zanopha.com/docs/elen.pdf int intitialValue = 1234567890; String r1 = JsonRecordSupport.toLexSortableString(intitialValue, '+'); assertThat(r1).isEqualTo("+++2101234567890"); int r2 = JsonRecordSupport.fromLexSortableStringToInt(r1, '+'); assertThat(r2).isEqualTo(intitialValue); }
@Test public void testSmallValues() { for (int i = 0; i < 10; i++) { String r1 = JsonRecordSupport.toLexSortableString(i, '+'); int r2 = JsonRecordSupport.fromLexSortableStringToInt(r1, '+'); assertThat(r2).isEqualTo(i); } } }
@Test @SuppressWarnings("unchecked") public void testSmallValues() { String last=null; for (int i = -1000; i < 1000; i++) { String next = toLexSortableString(i); if( last != null ) { assertThat((Comparable)last).isLessThan(next); } last = next; } }
value = toLexSortableString(value); // encode it so we can lexically sort. } else if( nextToken == JsonToken.VALUE_TRUE ) { ovalue = value;