/** * Use an instance of ArgumentResolver instead, e.g. {@link DefaultArgumentResolver} */ @Deprecated public static Object resolveArgReferences(Object arg) { return new DefaultArgumentResolver().resolveArgument(arg); }
@Override public final Object resolveArgument(Object arg) { while (true) { if (canResolveCustomType(arg)) { arg = resolveCustomType(arg); } else if (arg instanceof AtomicReference) { arg = ((AtomicReference<?>) arg).get(); } else if (arg instanceof AtomicBoolean) { // Not a subclass of Number so we need to unwrap it return ((AtomicBoolean) arg).get() ? 1 : 0; } else if (arg instanceof Enum<?>) { return ((Enum<?>) arg).name(); } else if (arg instanceof ThreadLocal) { arg = ((ThreadLocal<?>) arg).get(); } else { return arg; } } }
public void testSanitizeStringEscapesSingleQuotes() { ArgumentResolver defaultArgumentResolver = new DefaultArgumentResolver(); assertEquals("'Sam''s'", SqlUtils.toSanitizedString("Sam's", defaultArgumentResolver)); }
public void testSanitizeStringUsesArgumentResolver() { ArgumentResolver argumentResolver = new DefaultArgumentResolver(); assertEquals("'APPLE'", SqlUtils.toSanitizedString(TestEnum.APPLE, argumentResolver)); assertEquals("1", SqlUtils.toSanitizedString(new AtomicBoolean(true), argumentResolver)); argumentResolver = new DefaultArgumentResolver() { @Override protected boolean canResolveCustomType(Object arg) { return arg instanceof Enum<?>; } @Override protected Object resolveCustomType(Object arg) { return ((Enum<?>) arg).ordinal(); } }; assertEquals("0", SqlUtils.toSanitizedString(TestEnum.APPLE, argumentResolver)); }
/** * Use an instance of ArgumentResolver instead, e.g. {@link DefaultArgumentResolver} */ @Deprecated public static Object resolveArgReferences(Object arg) { return new DefaultArgumentResolver().resolveArgument(arg); }
public void testBlobLiterals() { ArgumentResolver defaultArgumentResolver = new DefaultArgumentResolver(); assertEquals("X''", SqlUtils.toSanitizedString(new byte[0], defaultArgumentResolver)); assertEquals("X'94'", SqlUtils.toSanitizedString(new byte[]{(byte) 0x94}, defaultArgumentResolver)); assertEquals("X'5daa'", SqlUtils.toSanitizedString(new byte[]{(byte) 0x5d, (byte) 0xaa}, defaultArgumentResolver)); assertEquals("X'08312f'", SqlUtils.toSanitizedString( new byte[]{(byte) 0x08, (byte) 0x31, (byte) 0x2f}, defaultArgumentResolver)); assertEquals("X'7be6cd4b'", SqlUtils.toSanitizedString( new byte[]{(byte) 0x7b, (byte) 0xe6, (byte) 0xcd, (byte) 0x4b}, defaultArgumentResolver)); }
@Override public final Object resolveArgument(Object arg) { while (true) { if (canResolveCustomType(arg)) { arg = resolveCustomType(arg); } else if (arg instanceof AtomicReference) { arg = ((AtomicReference<?>) arg).get(); } else if (arg instanceof AtomicBoolean) { // Not a subclass of Number so we need to unwrap it return ((AtomicBoolean) arg).get() ? 1 : 0; } else if (arg instanceof Enum<?>) { return ((Enum<?>) arg).name(); } else if (arg instanceof ThreadLocal) { arg = ((ThreadLocal<?>) arg).get(); } else { return arg; } } }
public void testSanitizeStringHandlesNullCharacters() { ArgumentResolver defaultArgumentResolver = new DefaultArgumentResolver(); assertEquals("CAST(ZEROBLOB(1) AS TEXT)", SqlUtils.toSanitizedString("\0", defaultArgumentResolver)); assertEquals("CAST(ZEROBLOB(2) AS TEXT)", SqlUtils.toSanitizedString("\0\0", defaultArgumentResolver)); assertEquals("CAST(ZEROBLOB(1) AS TEXT) || 'ABC'", SqlUtils.toSanitizedString("\0ABC", defaultArgumentResolver)); assertEquals("CAST(ZEROBLOB(2) AS TEXT) || 'ABC'", SqlUtils.toSanitizedString("\0\0ABC", defaultArgumentResolver)); assertEquals("CAST(ZEROBLOB(1) AS TEXT) || 'A' || CAST(ZEROBLOB(1) AS TEXT) || 'B''C'", SqlUtils.toSanitizedString("\0A\0B'C", defaultArgumentResolver)); assertEquals("CAST(ZEROBLOB(1) AS TEXT) || 'ABC' || CAST(ZEROBLOB(1) AS TEXT)", SqlUtils.toSanitizedString("\0ABC\0", defaultArgumentResolver)); assertEquals("CAST(ZEROBLOB(1) AS TEXT) || 'ABC' || CAST(ZEROBLOB(2) AS TEXT)", SqlUtils.toSanitizedString("\0ABC\0\0", defaultArgumentResolver)); assertEquals("'A' || CAST(ZEROBLOB(1) AS TEXT) || 'BC' || CAST(ZEROBLOB(1) AS TEXT)", SqlUtils.toSanitizedString("A\0BC\0", defaultArgumentResolver)); assertEquals("'A' || CAST(ZEROBLOB(2) AS TEXT) || 'BC' || CAST(ZEROBLOB(1) AS TEXT)", SqlUtils.toSanitizedString("A\0\0BC\0", defaultArgumentResolver)); assertEquals("'A' || CAST(ZEROBLOB(1) AS TEXT) || 'B' || CAST(ZEROBLOB(1) AS TEXT) || 'C'", SqlUtils.toSanitizedString("A\0B\0C", defaultArgumentResolver)); assertEquals("'ABC' || CAST(ZEROBLOB(1) AS TEXT)", SqlUtils.toSanitizedString("ABC\0", defaultArgumentResolver)); }