changeset 727:55c14e65b4be

Adding a missing test for testing method setBytes() on a PreparedStatement. In issue 7346 usage of this method was reported, so adding a test to validate it works correctly.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 02 Feb 2023 15:59:07 +0100 (2023-02-02)
parents 89bbd04036cd
children 0a22044eee9c
files tests/JDBC_API_Tester.java
diffstat 1 files changed, 117 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -77,6 +77,7 @@ final public class JDBC_API_Tester {
 		jt.Test_PSlargeresponse(con_URL);
 		jt.Test_PSmanycon(con_URL);
 		jt.Test_PSmetadata();
+		jt.Test_PSsetBytes();
 		jt.Test_PSsomeamount();
 		jt.Test_PSsqldata();
 		jt.Test_PStimedate();
@@ -2444,6 +2445,122 @@ final public class JDBC_API_Tester {
 			"0. true\ttrue\n");
 	}
 
+	private void Test_PSsetBytes() {
+		sb.setLength(0);	// clear the output log buffer
+
+		PreparedStatement pstmt = null;
+		ResultSet rs = null;
+		try {
+			sb.append("1 Create table\n");
+			pstmt = con.prepareStatement("create table t7346(col1 clob, col2 blob)");
+			sb.append("  pstmt has ")
+			.append(pstmt.getMetaData().getColumnCount())
+			.append(" result columns and ")
+			.append(pstmt.getParameterMetaData().getParameterCount())
+			.append(" parameters\n");
+			pstmt.execute();
+			pstmt.close();
+
+			sb.append("2 Prepare Insert data\n");
+			pstmt = con.prepareStatement("insert into t7346 (col1,col2) values(?,?)");
+			sb.append("  pstmt has ")
+			.append(pstmt.getMetaData().getColumnCount())
+			.append(" result columns and ")
+			.append(pstmt.getParameterMetaData().getParameterCount())
+			.append(" parameters\n");
+			String val = "0123456789abcdef";
+			pstmt.setString(1, val);
+			pstmt.setBytes(2, val.getBytes());
+			sb.append("3 Insert data row 1\n");
+			pstmt.execute();
+			val += "~!@#$%^&*()_+`1-=][{}\\|';:,<.>/?";
+			pstmt.setString(1, val);
+			pstmt.setBytes(2, val.getBytes());
+			sb.append("4 Insert data row 2\n");
+			pstmt.execute();
+			val = "\u00e0\u004f\u00d0\u0020\u00ea\u003a\u0069\u0010\u00a2\u00d8\u0008\u0001\u002b\u0030\u0030\u009d\u129d";
+			pstmt.setString(1, val);
+			pstmt.setBytes(2, val.getBytes());
+			sb.append("4 Insert data row 3\n");
+			pstmt.execute();
+			pstmt.close();
+
+			sb.append("5 Prepare Select data\n");
+			pstmt = con.prepareStatement("select col1, length(col1) as len_col1, col2, length(col2) as len_col2 from t7346");
+			sb.append("  pstmt has ")
+			.append(pstmt.getMetaData().getColumnCount())
+			.append(" result columns and ")
+			.append(pstmt.getParameterMetaData().getParameterCount())
+			.append(" parameters\n");
+			sb.append("6 Execute Select\n");
+			rs = pstmt.executeQuery();
+			if (rs != null) {
+				sb.append("  rs has ")
+				.append(rs.getMetaData().getColumnCount())
+				.append(" result columns\n");
+				sb.append("7 Show data rows\n");
+				for (int c = 1; c <= rs.getMetaData().getColumnCount(); c++) {
+					if (c > 1)
+						sb.append("\t");
+					sb.append(rs.getMetaData().getColumnName(c));
+				}
+				sb.append("\n");
+				while (rs.next()) {
+					sb.append(rs.getString("col1")).append("\t")
+					.append(rs.getInt("len_col1")).append("\t")
+					.append(rs.getString("col2")).append("\t")
+					.append(rs.getInt("len_col2")).append("\n");
+				}
+				rs.close();
+				rs = null;
+			}
+			pstmt.close();
+			pstmt = null;
+		} catch (SQLException e) {
+			sb.append("FAILED: ").append(e.getMessage()).append("\n");
+		}
+
+		closeStmtResSet(pstmt, rs);
+
+		// cleanup created test table
+		try {
+			sb.append("8 Drop table\n");
+			pstmt = con.prepareStatement("drop table if exists t7346");
+			sb.append("  pstmt has ")
+			.append(pstmt.getMetaData().getColumnCount())
+			.append(" result columns and ")
+			.append(pstmt.getParameterMetaData().getParameterCount())
+			.append(" parameters\n");
+			pstmt.execute();
+			pstmt.close();
+			pstmt = null;
+		} catch (SQLException e) {
+			sb.append("FAILED: ").append(e.getMessage()).append("\n");
+		}
+
+		closeStmtResSet(pstmt, rs);
+
+		compareExpectedOutput("Test_PSsetBytes",
+			"1 Create table\n" +
+			"  pstmt has 0 result columns and 0 parameters\n" +
+			"2 Prepare Insert data\n" +
+			"  pstmt has 0 result columns and 2 parameters\n" +
+			"3 Insert data row 1\n" +
+			"4 Insert data row 2\n" +
+			"4 Insert data row 3\n" +
+			"5 Prepare Select data\n" +
+			"  pstmt has 4 result columns and 0 parameters\n" +
+			"6 Execute Select\n" +
+			"  rs has 4 result columns\n" +
+			"7 Show data rows\n" +
+			"col1	len_col1	col2	len_col2\n" +
+			"0123456789abcdef	16	30313233343536373839616263646566	16\n" +
+			"0123456789abcdef~!@#$%^&*()_+`1-=][{}|';:,<.>/?	47	303132333435363738396162636465667E21402324255E262A28295F2B60312D3D5D5B7B7D5C7C273B3A2C3C2E3E2F3F	48\n" +
+			"àOÐ ê:i¢Ø+00ኝ	17	C3A04FC39020C3AA3A6910C2A2C39808012B3030C29DE18A9D	25\n" +
+			"8 Drop table\n" +
+			"  pstmt has 0 result columns and 0 parameters\n");
+	}
+
 	private void Test_PSsomeamount() {
 		sb.setLength(0);	// clear the output log buffer