Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
tests: UUID vs setString test
By default, setString sends 'varchar' datatype, and PostgreSQL might result in
<<ERROR: column "id" is of type uuid but expression is of type character varying>>
There's stringType option that enables sending strings as UNSPECIFIED type to overcome that error.
fixes #1133
Loading branch information
@@ -33,10 +33,15 @@
YES , NO
}
public enum StringType {
UNSPECIFIED , VARCHAR ;
}
protected Connection con;
private BinaryMode binaryMode;
private ReWriteBatchedInserts reWriteBatchedInserts;
protected PreferQueryMode preferQueryMode;
private StringType stringType;
protected void updateProperties (Properties props ) {
if (binaryMode == BinaryMode . FORCE ) {
@@ -45,6 +50,9 @@ protected void updateProperties(Properties props) {
if (reWriteBatchedInserts == ReWriteBatchedInserts . YES ) {
PGProperty . REWRITE_BATCHED_INSERTS. set(props, true );
}
if (stringType != null ) {
PGProperty . STRING_TYPE. set(props, stringType. name(). toLowerCase());
}
}
protected void forceBinary (Properties props ) {
@@ -55,6 +63,14 @@ public final void setBinaryMode(BinaryMode binaryMode) {
this . binaryMode = binaryMode;
}
public StringType getStringType () {
return stringType;
}
public void setStringType (StringType stringType ) {
this . stringType = stringType;
}
public void setReWriteBatchedInserts (
ReWriteBatchedInserts reWriteBatchedInserts ) {
this . reWriteBatchedInserts = reWriteBatchedInserts;
@@ -9,19 +9,43 @@
import static org.junit.Assert.assertTrue ;
import org.postgresql.core.ServerVersion ;
import org.postgresql.test.TestUtil ;
import org.postgresql.test.jdbc2.BaseTest4 ;
import org.postgresql.util.PSQLState ;
import org.junit.Assert ;
import org.junit.Test ;
import org.junit.runner.RunWith ;
import org.junit.runners.Parameterized ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.sql.Statement ;
import java.sql.Types ;
import java.util.ArrayList ;
import java.util.Collection ;
import java.util.UUID ;
@RunWith (Parameterized . class)
public class UUIDTest extends BaseTest4 {
public UUIDTest (BinaryMode binaryMode , StringType stringType ) {
setBinaryMode(binaryMode);
setStringType(stringType);
}
@Parameterized.Parameters (name = " binary={0}, stringType={1}" )
public static Iterable<Object []> data () {
Collection<Object []> ids = new ArrayList<Object []> ();
for (BinaryMode binaryMode : BinaryMode . values()) {
for (StringType stringType : StringType . values()) {
ids. add(new Object []{binaryMode, stringType});
}
}
return ids;
}
@Override
public void setUp () throws Exception {
super . setUp();
@@ -60,5 +84,30 @@ public void testUUID() throws SQLException {
stmt. close();
}
@Test
public void testUUIDString () throws SQLException {
String uuid = " 0dcdf03a-058c-4fa3-b210-8385cb6810d5" ;
PreparedStatement ps = con. prepareStatement(" INSERT INTO uuidtest VALUES (?)" );
ps. setString(1 , uuid);
try {
ps. executeUpdate();
if (getStringType() == StringType . VARCHAR ) {
Assert . fail(
" setString(, uuid) should fail to insert value into UUID column when stringType=varchar."
+ " Expecting error <<column \" id\" is of type uuid but expression is of type character varying>>" );
}
} catch (SQLException e) {
if (getStringType() == StringType . VARCHAR
&& PSQLState . DATATYPE_MISMATCH. getState(). equals(e. getSQLState())) {
// The following error is expected in stringType=varchar mode
// ERROR: column "id" is of type uuid but expression is of type character varying
return ;
}
throw e;
} finally {
TestUtil . closeQuietly(ps);
}
}
}
Toggle all file notes
Toggle all file annotations