Skip to content

Commit

Permalink
[CONJ-589] clob truncation on last byte correction
Browse files Browse the repository at this point in the history
report test on appropriate test case
  • Loading branch information
rusher committed Dec 21, 2018
1 parent 0d2baa4 commit a9a15c2
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 45 deletions.
2 changes: 1 addition & 1 deletion src/main/java/org/mariadb/jdbc/MariaDbClob.java
Expand Up @@ -311,7 +311,7 @@ public void truncate(final long truncateLen) throws SQLException {
} else if (firstByte >> 3 != -2) {
throw new UncheckedIOException("invalid UTF8", new CharacterCodingException());
} else if (pos + 2 < offset + length) {
if (len + 2 < truncateLen) {
if (len + 2 <= truncateLen) {
pos += 3;
len += 2;
} else {
Expand Down
42 changes: 0 additions & 42 deletions src/test/java/org/mariadb/jdbc/BlobTest.java
Expand Up @@ -310,48 +310,6 @@ public void testClob3() throws Exception {
assertEquals("Øhello", result);
}

@Test
public void clobLength() throws Exception {
Statement stmt = sharedConnection.createStatement();
try (ResultSet rs = stmt
.executeQuery("SELECT 'ab$c', 'ab¢c', 'abहc', 'ab\uD801\uDC37c', 'ab𐍈c' from dual")) {
while (rs.next()) {

Clob clob1 = rs.getClob(1);
Clob clob2 = rs.getClob(2);
Clob clob3 = rs.getClob(3);
Clob clob4 = rs.getClob(4);
Clob clob5 = rs.getClob(5);

assertEquals(4, clob1.length());
assertEquals(4, clob2.length());
assertEquals(4, clob3.length());
assertEquals(5, clob4.length());
assertEquals(5, clob5.length());

clob1.truncate(3);
clob2.truncate(3);
clob3.truncate(3);
clob4.truncate(3);
clob5.truncate(3);

assertEquals(3, clob1.length());
assertEquals(3, clob2.length());
assertEquals(3, clob3.length());
assertEquals(3, clob4.length());
assertEquals(3, clob5.length());

assertEquals("ab$", clob1.getSubString(1, 3));
assertEquals("ab¢", clob2.getSubString(1, 3));
assertEquals("abह", clob3.getSubString(1, 3));
assertEquals("ab�", clob4.getSubString(1, 3));
assertEquals("ab�", clob5.getSubString(1, 3));
}
}
}



@Test
public void testBlob() throws SQLException, IOException {
PreparedStatement stmt = sharedConnection
Expand Down
56 changes: 54 additions & 2 deletions src/test/java/org/mariadb/jdbc/MariaDbClobTest.java
Expand Up @@ -9,10 +9,13 @@
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.sql.Clob;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class MariaDbClobTest {
public class MariaDbClobTest extends BaseTest {

private final byte[] bytes = "abcde🙏fgh".getBytes(StandardCharsets.UTF_8);

Expand Down Expand Up @@ -228,8 +231,13 @@ public void truncate() throws SQLException {
MariaDbClob clob = new MariaDbClob(bytes);
clob.truncate(20);
assertEquals("abcde🙏f", clob.getSubString(1, 8));
clob.truncate(8);
assertEquals("abcde🙏f", clob.getSubString(1, 8));
assertEquals("abcde🙏", clob.getSubString(1, 7));
clob.truncate(7);
assertEquals("abcde🙏", clob.getSubString(1, 8));
clob.truncate(6);
assertEquals("abcde�", clob.getSubString(1, 8));
clob.truncate(4);
assertEquals("abcd", clob.getSubString(1, 7));
clob.truncate(0);
Expand All @@ -239,8 +247,12 @@ public void truncate() throws SQLException {
8);
clob2.truncate(20);
assertEquals("cde🙏f", clob2.getSubString(1, 8));
clob2.truncate(4);
clob2.truncate(6);
assertEquals("cde🙏f", clob2.getSubString(1, 8));
clob2.truncate(5);
assertEquals("cde🙏", clob2.getSubString(1, 8));
clob2.truncate(4);
assertEquals("cde�", clob2.getSubString(1, 8));
clob2.truncate(0);
assertEquals("", clob2.getSubString(1, 7));

Expand All @@ -253,4 +265,44 @@ public void free() {
assertEquals(0, blob.length);
}

@Test
public void clobLength() throws Exception {
Statement stmt = sharedConnection.createStatement();
try (ResultSet rs = stmt
.executeQuery("SELECT 'ab$c', 'ab¢c', 'abहc', 'ab\uD801\uDC37c', 'ab𐍈c' from dual")) {
while (rs.next()) {

Clob clob1 = rs.getClob(1);
Clob clob2 = rs.getClob(2);
Clob clob3 = rs.getClob(3);
Clob clob4 = rs.getClob(4);
Clob clob5 = rs.getClob(5);

assertEquals(4, clob1.length());
assertEquals(4, clob2.length());
assertEquals(4, clob3.length());
assertEquals(5, clob4.length());
assertEquals(5, clob5.length());

clob1.truncate(3);
clob2.truncate(3);
clob3.truncate(3);
clob4.truncate(3);
clob5.truncate(3);

assertEquals(3, clob1.length());
assertEquals(3, clob2.length());
assertEquals(3, clob3.length());
assertEquals(3, clob4.length());
assertEquals(3, clob5.length());

assertEquals("ab$", clob1.getSubString(1, 3));
assertEquals("ab¢", clob2.getSubString(1, 3));
assertEquals("abह", clob3.getSubString(1, 3));
assertEquals("ab�", clob4.getSubString(1, 3));
assertEquals("ab�", clob5.getSubString(1, 3));
}
}
}

}

0 comments on commit a9a15c2

Please sign in to comment.