Index: src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java,v retrieving revision 1.28 diff -u -c -r1.28 AbstractJdbc1Statement.java *** src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java 22 Jul 2003 05:17:09 -0000 1.28 --- src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java 22 Jul 2003 13:30:34 -0000 *************** *** 883,888 **** --- 883,891 ---- case Types.TIMESTAMP: l_pgType = PG_TIMESTAMPTZ; break; + case Types.BIT: + l_pgType = PG_BOOLEAN; + break; case Types.BINARY: case Types.VARBINARY: case Types.LONGVARBINARY: *************** *** 1480,1486 **** { case Types.INTEGER: if (x instanceof Boolean) ! bind(parameterIndex,((Boolean)x).booleanValue() ? "1" :"0", PG_BOOLEAN); else bind(parameterIndex, escapeString(x.toString()), PG_INTEGER); break; --- 1483,1489 ---- { case Types.INTEGER: if (x instanceof Boolean) ! bind(parameterIndex,((Boolean)x).booleanValue() ? "1" :"0", PG_INTEGER); else bind(parameterIndex, escapeString(x.toString()), PG_INTEGER); break; *************** *** 1493,1499 **** case Types.DECIMAL: case Types.NUMERIC: if (x instanceof Boolean) ! bind(parameterIndex, ((Boolean)x).booleanValue() ? "1" : "0", PG_BOOLEAN); else bind(parameterIndex, escapeString(x.toString()), PG_NUMERIC); break; --- 1496,1502 ---- case Types.DECIMAL: case Types.NUMERIC: if (x instanceof Boolean) ! bind(parameterIndex, ((Boolean)x).booleanValue() ? "1" : "0", PG_NUMERIC); else bind(parameterIndex, escapeString(x.toString()), PG_NUMERIC); break; *************** *** 1532,1542 **** case Types.BIT: if (x instanceof Boolean) { ! bind(parameterIndex, ((Boolean)x).booleanValue() ? "TRUE" : "FALSE", PG_TEXT); } else if (x instanceof Number) { ! bind(parameterIndex, ((Number)x).intValue()==1 ? "TRUE" : "FALSE", PG_TEXT); } else { --- 1535,1545 ---- case Types.BIT: if (x instanceof Boolean) { ! bind(parameterIndex, ((Boolean)x).booleanValue() ? "'t'" : "'f'", PG_BOOLEAN); } else if (x instanceof Number) { ! bind(parameterIndex, ((Number)x).intValue()!=0 ? "'t'" : "'f'", PG_BOOLEAN); } else { Index: src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java,v retrieving revision 1.3 diff -u -c -r1.3 ServerPreparedStmtTest.java *** src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java 29 May 2003 04:39:48 -0000 1.3 --- src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java 22 Jul 2003 13:30:34 -0000 *************** *** 26,39 **** con = TestUtil.openDB(); Statement stmt = con.createStatement(); ! TestUtil.createTable(con, "testsps", "id integer"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (1)"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (2)"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (3)"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (4)"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (6)"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (9)"); stmt.close(); } --- 26,39 ---- con = TestUtil.openDB(); Statement stmt = con.createStatement(); ! TestUtil.createTable(con, "testsps", "id integer, value boolean"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (1,'t')"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (2,'t')"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (3,'t')"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (4,'t')"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (6,'t')"); ! stmt.executeUpdate("INSERT INTO testsps VALUES (9,'f')"); stmt.close(); } *************** *** 125,130 **** --- 125,184 ---- pstmt.close(); } + // Verify we can bind booleans-as-objects ok. + public void testBooleanObjectBind() throws Exception + { + PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE value = ?"); + ((PGStatement)pstmt).setUseServerPrepare(true); + if (TestUtil.haveMinimumServerVersion(con,"7.3")) { + assertTrue(((PGStatement)pstmt).isUseServerPrepare()); + } else { + assertTrue(!((PGStatement)pstmt).isUseServerPrepare()); + } + + pstmt.setObject(1, new Boolean(false), java.sql.Types.BIT); + ResultSet rs = pstmt.executeQuery(); + assertTrue(rs.next()); + assertEquals(9, rs.getInt(1)); + rs.close(); + } + + // Verify we can bind booleans-as-integers ok. + public void testBooleanIntegerBind() throws Exception + { + PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE id = ?"); + ((PGStatement)pstmt).setUseServerPrepare(true); + if (TestUtil.haveMinimumServerVersion(con,"7.3")) { + assertTrue(((PGStatement)pstmt).isUseServerPrepare()); + } else { + assertTrue(!((PGStatement)pstmt).isUseServerPrepare()); + } + + pstmt.setObject(1, new Boolean(true), java.sql.Types.INTEGER); + ResultSet rs = pstmt.executeQuery(); + assertTrue(rs.next()); + assertEquals(1, rs.getInt(1)); + rs.close(); + } + + // Verify we can bind booleans-as-native-types ok. + public void testBooleanBind() throws Exception + { + PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE value = ?"); + ((PGStatement)pstmt).setUseServerPrepare(true); + if (TestUtil.haveMinimumServerVersion(con,"7.3")) { + assertTrue(((PGStatement)pstmt).isUseServerPrepare()); + } else { + assertTrue(!((PGStatement)pstmt).isUseServerPrepare()); + } + + pstmt.setBoolean(1, false); + ResultSet rs = pstmt.executeQuery(); + assertTrue(rs.next()); + assertEquals(9, rs.getInt(1)); + rs.close(); + } + public void testPreparedStatementsWithBinds() throws Exception { PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE id = ? or id = ?"); *************** *** 152,156 **** pstmt.close(); } - } --- 206,209 ----