package org.mariadb.jdbc;
import org.junit.Test;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Types;
import static org.junit.Assert.*;
public class DataNTypeTest extends BaseTest {
@Test
public void testSetNClob() throws Exception {
createTable("testSetNClob", "id int not null primary key, strm text", "CHARSET utf8");
PreparedStatement stmt = sharedConnection.prepareStatement("insert into testSetNClob (id, strm) values (?,?)");
NClob nclob = sharedConnection.createNClob();
OutputStream stream = nclob.setAsciiStream(1);
byte[] bytes = "hello".getBytes();
stream.write(bytes);
stmt.setInt(1, 1);
stmt.setNClob(2, nclob);
stmt.execute();
ResultSet rs = sharedConnection.createStatement().executeQuery("select * from testSetNClob");
assertTrue(rs.next());
assertTrue(rs.getObject(2) instanceof String);
assertTrue(rs.getString(2).equals("hello"));
NClob resultNClob = rs.getNClob(2);
assertNotNull(resultNClob);
assertEquals(5, resultNClob.getAsciiStream().available());
}
@Test
public void testSetObjectNClob() throws Exception {
createTable("testSetObjectNClob", "id int not null primary key, strm text, strm2 text", "CHARSET utf8");
PreparedStatement stmt = sharedConnection.prepareStatement("insert into testSetObjectNClob (id, strm, strm2) values (?,?,?)");
NClob nclob = sharedConnection.createNClob();
OutputStream stream = nclob.setAsciiStream(1);
byte[] bytes = "hello".getBytes();
stream.write(bytes);
stmt.setInt(1, 2);
stmt.setObject(2, nclob);
stmt.setObject(3, nclob, Types.NCLOB);
stmt.execute();
ResultSet rs = sharedConnection.createStatement().executeQuery("select * from testSetObjectNClob");
assertTrue(rs.next());
assertTrue(rs.getObject(2) instanceof String);
assertTrue(rs.getString(2).equals("hello"));
assertEquals(5, rs.getNClob(2).getAsciiStream().available());
assertTrue(rs.getObject(3) instanceof String);
assertTrue(rs.getString(3).equals("hello"));
assertEquals(5, rs.getNClob(3).getAsciiStream().available());
}
@Test
public void testSetNString() throws Exception {
createTable("testSetNString", "id int not null primary key, strm varchar(10)", "CHARSET utf8");
PreparedStatement stmt = sharedConnection.prepareStatement("insert into testSetNString (id, strm) values (?,?)");
stmt.setInt(1, 1);
stmt.setNString(2, "hello");
stmt.execute();
ResultSet rs = sharedConnection.createStatement().executeQuery("select * from testSetNString");
assertTrue(rs.next());
assertTrue(rs.getObject(2) instanceof String);
assertTrue(rs.getNString(2).equals("hello"));
}
@Test
public void testSetObjectNString() throws Exception {
createTable("testSetObjectNString", "id int not null primary key, strm varchar(10), strm2 varchar(10)", "CHARSET utf8");
PreparedStatement stmt = sharedConnection.prepareStatement("insert into testSetObjectNString (id, strm, strm2) values (?, ?, ?)");
stmt.setInt(1, 2);
stmt.setObject(2, "hello");
stmt.setObject(3, "hello", Types.NCLOB);
stmt.execute();
ResultSet rs = sharedConnection.createStatement().executeQuery("select * from testSetObjectNString");
assertTrue(rs.next());
assertTrue(rs.getObject(2) instanceof String);
assertTrue(rs.getString(2).equals("hello"));
assertTrue(rs.getObject(3) instanceof String);
assertTrue(rs.getString(3).equals("hello"));
assertEquals(5, rs.getNClob(2).getAsciiStream().available());
assertEquals(5, rs.getNClob(3).getAsciiStream().available());
}
@Test
public void testSetNCharacter() throws Exception {
createTable("testSetNCharacter", "id int not null primary key, strm text", "CHARSET utf8");
PreparedStatement stmt = sharedConnection.prepareStatement("insert into testSetNCharacter (id, strm) values (?,?)");
String toInsert = "\u00D8abcdefgh\njklmn\"";
stmt.setInt(1, 1);
stmt.setNCharacterStream(2, new StringReader(toInsert));
stmt.execute();
stmt.setInt(1, 2);
stmt.setNCharacterStream(2, new StringReader(toInsert), 3);
stmt.execute();
ResultSet rs = sharedConnection.createStatement().executeQuery("select * from testSetNCharacter");
assertTrue(rs.next());
assertTrue(rs.getObject(2) instanceof String);
assertTrue(rs.getCharacterStream(2) instanceof Reader);
checkCharStream(rs.getCharacterStream(2), toInsert);
assertTrue(rs.next());
checkCharStream(rs.getCharacterStream(2), toInsert.substring(0, 3));
}
@Test
public void testSetObjectNCharacter() throws Exception {
createTable("testSetObjectNCharacter", "id int not null primary key, strm text", "CHARSET utf8");
PreparedStatement stmt = sharedConnection.prepareStatement("insert into testSetObjectNCharacter (id, strm) values (?,?)");
String toInsert = "\u00D8abcdefgh\njklmn\"";
;
stmt.setInt(1, 1);
stmt.setObject(2, new StringReader(toInsert));
stmt.execute();
stmt.setInt(1, 2);
stmt.setObject(2, new StringReader(toInsert), Types.LONGNVARCHAR);
stmt.execute();
stmt.setInt(1, 3);
stmt.setObject(2, new StringReader(toInsert), Types.LONGNVARCHAR, 3);
stmt.execute();
ResultSet rs = sharedConnection.createStatement().executeQuery("select * from testSetObjectNCharacter");
assertTrue(rs.next());
Reader reader1 = rs.getObject(2, Reader.class);
assertNotNull(reader1);
assertTrue(rs.getObject(2) instanceof String);
assertTrue(rs.getCharacterStream(2) instanceof Reader);
checkCharStream(rs.getCharacterStream(2), toInsert);
assertTrue(rs.next());
assertTrue(rs.getObject(2) instanceof String);
checkCharStream(rs.getCharacterStream(2), toInsert);
assertTrue(rs.next());
checkCharStream(rs.getCharacterStream(2), toInsert.substring(0, 3));
}
private void checkCharStream(Reader reader, String comparedValue) throws Exception {
StringBuilder sb = new StringBuilder();
int ch;
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
assertEquals(comparedValue, sb.toString());
}
}