unit test and improve PostgresArray
This commit is contained in:
parent
f8de575b77
commit
ea130581a3
@ -42,7 +42,10 @@ public class PostgresArray {
|
|||||||
tokenizer.remove("\"", "\"");
|
tokenizer.remove("\"", "\"");
|
||||||
final T[] array = newGenericArray(elementClass, tokenizer.getSize()); // Create a new array of the specified type and length
|
final T[] array = newGenericArray(elementClass, tokenizer.getSize()); // Create a new array of the specified type and length
|
||||||
for ( int n = 0; n < tokenizer.getSize(); ++n ) {
|
for ( int n = 0; n < tokenizer.getSize(); ++n ) {
|
||||||
array[n] = itemParser.apply(tokenizer.getToken(n).trim().replace("\\\"", "\""));
|
final String token = tokenizer.getToken(n);
|
||||||
|
if ( !"NULL".equals(token) ) {
|
||||||
|
array[n] = itemParser.apply(token.trim().replace("\\\"", "\""));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,88 @@
|
|||||||
|
package net.hostsharing.hsadminng.mapper;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@DataJpaTest
|
||||||
|
class PostgresArrayIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
EntityManager em;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldCreateEmptyArray() {
|
||||||
|
em.createNativeQuery("""
|
||||||
|
create or replace function returnEmptyArray()
|
||||||
|
returns text[]
|
||||||
|
stable leakproof
|
||||||
|
language plpgsql as $$
|
||||||
|
declare
|
||||||
|
emptyArray text[] = '{}';
|
||||||
|
begin
|
||||||
|
return emptyArray;
|
||||||
|
end; $$;
|
||||||
|
""").executeUpdate();
|
||||||
|
final byte[] pgArray = (byte[]) em.createNativeQuery("SELECT returnEmptyArray()", String[].class).getSingleResult();
|
||||||
|
|
||||||
|
final String[] result = PostgresArray.fromPostgresArray(pgArray, String.class, Function.identity());
|
||||||
|
|
||||||
|
assertThat(result).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldCreateStringArray() {
|
||||||
|
em.createNativeQuery("""
|
||||||
|
create or replace function returnStringArray()
|
||||||
|
returns varchar(63)[]
|
||||||
|
stable leakproof
|
||||||
|
language plpgsql as $$
|
||||||
|
declare
|
||||||
|
text1 text = 'one';
|
||||||
|
text2 text = 'two, three';
|
||||||
|
text3 text = 'four; five';
|
||||||
|
text4 text = 'say "Hello" to me';
|
||||||
|
begin
|
||||||
|
return array[text1, text2, text3, null, text4];
|
||||||
|
end; $$;
|
||||||
|
""").executeUpdate();
|
||||||
|
final byte[] pgArray = (byte[]) em.createNativeQuery("SELECT returnStringArray()", String[].class).getSingleResult();
|
||||||
|
|
||||||
|
final String[] result = PostgresArray.fromPostgresArray(pgArray, String.class, Function.identity());
|
||||||
|
|
||||||
|
assertThat(result).containsExactly("one", "two, three", "four; five", null, "say \"Hello\" to me");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldCreateUUidArray() {
|
||||||
|
em.createNativeQuery("""
|
||||||
|
create or replace function returnUuidArray()
|
||||||
|
returns uuid[]
|
||||||
|
stable leakproof
|
||||||
|
language plpgsql as $$
|
||||||
|
declare
|
||||||
|
uuid1 UUID = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
|
||||||
|
uuid2 UUID = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
||||||
|
uuid3 UUID = '01234567-89ab-cdef-0123-456789abcdef';
|
||||||
|
begin
|
||||||
|
return ARRAY[uuid1, uuid2, null, uuid3];
|
||||||
|
end; $$;
|
||||||
|
""").executeUpdate();
|
||||||
|
final byte[] pgArray = (byte[]) em.createNativeQuery("SELECT returnUuidArray()", UUID[].class).getSingleResult();
|
||||||
|
|
||||||
|
final UUID[] result = PostgresArray.fromPostgresArray(pgArray, UUID.class, UUID::fromString);
|
||||||
|
|
||||||
|
assertThat(result).containsExactly(
|
||||||
|
UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"),
|
||||||
|
UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8"),
|
||||||
|
null,
|
||||||
|
UUID.fromString("01234567-89ab-cdef-0123-456789abcdef"));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user