Return-Path: Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: (qmail 21871 invoked from network); 20 Jul 2006 19:35:01 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 20 Jul 2006 19:35:00 -0000 Received: (qmail 99598 invoked by uid 500); 20 Jul 2006 16:22:54 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 99568 invoked by uid 500); 20 Jul 2006 16:22:54 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 99541 invoked by uid 99); 20 Jul 2006 16:22:54 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Jul 2006 09:22:54 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Jul 2006 09:22:51 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 584821A981D; Thu, 20 Jul 2006 09:22:30 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r423976 [2/2] - in /db/derby/code/trunk/java: client/org/apache/derby/client/am/ client/org/apache/derby/client/net/ drda/org/apache/derby/impl/drda/ engine/org/apache/derby/iapi/reference/ engine/org/apache/derby/impl/sql/compile/ testing/... Date: Thu, 20 Jul 2006 16:22:21 -0000 To: derby-commits@db.apache.org From: rhillegas@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060720162231.584821A981D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/compatibility/JDBCDriverTest.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/compatibility/JDBCDriverTest.java?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/compatibility/JDBCDriverTest.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/compatibility/JDBCDriverTest.java Thu Jul 20 09:22:18 2006 @@ -46,9 +46,7 @@ ///////////////////////////////////////////////////////////// private static final String ALL_TYPES_TABLE = "allTypesTable"; - private static final String BOOLEAN_TABLE = "booleanTable"; private static final String KEY_COLUMN = "keyCol"; - private static final String RICOCHET_BOOLEAN_PROC = "ricochetBooleanProc"; // // Data values to be stuffed into columns of ALL_TYPES_TABLE. @@ -119,11 +117,6 @@ ( Types.VARCHAR, "varchar(5)", IBM_2_4, DRB_10_0, VM_1_3 ), new TypeDescriptor ( Types.VARBINARY, "varchar(5) for bit data", IBM_2_4, DRB_10_0, VM_1_3 ), - - // 10.2 types - - new TypeDescriptor - ( JDBC_BOOLEAN, "boolean", null, DRB_10_2, VM_1_3 ), }; // @@ -155,44 +148,9 @@ new Timestamp( 1L ), SAMPLE_STRING, SAMPLE_BYTES, - - // 10.2 columns - - new Boolean( true ), - }; - - // - // Describes columns for the boolean table test. - // - private static final TypeDescriptor[] BOOLEAN_TABLE_TYPES = - { - new TypeDescriptor - ( JDBC_BOOLEAN, "boolean", null, DRB_10_2, VM_1_3 ), - }; - - // - // This table needs to have the same number of entries as BOOLEAN_TABLE_TYPES. - // - private static final Object[][] BOOLEAN_ROWS = - { - new Object[] { new Boolean( true ) }, - new Object[] { new Boolean( false ) }, }; // - // Describe signature of the RICOCHET_BOOLEAN_PROC procedure - // - private static final int INVALUE = 0; - private static final int OUTVALUE = INVALUE + 1; - private static final TypeDescriptor[] RICOCHET_BOOLEAN_PROC_TYPES = - { - new TypeDescriptor - ( JDBC_BOOLEAN, "INVALUE", null, DRB_10_2, VM_1_3 ), - new TypeDescriptor - ( JDBC_BOOLEAN, "OUTVALUE", null, DRB_10_2, VM_1_3 ), - }; - - // // This table needs to have the same number of rows as ALL_TYPES. // Each row in this table needs to have the same number of columns as // rows in ALL_TYPES. The testSanity() test case enforces this at run time. @@ -207,39 +165,38 @@ // private static final T_CN[] COERCIONS = { - // B|B|C|B|C|D|D|D|R|I|L|L|N|R|S|T|T|V|V|B - // I|L|H|I|L|A|E|O|E|N|O|O|U|E|M|I|I|A|A|O - // G|O|A|N|O|T|C|U|A|T|N|N|M|A|A|M|M|R|R|O - // I|B|R|A|B|E|I|B|L|E|G|G|E|L|L|E|E|C|B|L - // N|-|-|R|-|-|M|L|-|G|V|V|R|-|L|-|S|H|I|E - // T|-|-|Y|-|-|A|E|-|E|A|A|I|-|I|-|T|A|N|A - // -|-|-|-|-|-|L|-|-|R|R|R|C|-|N|-|A|R|A|N - // -|-|-|-|-|-|-|-|-|-|C|B|-|-|T|-|M|-|R|- - // -|-|-|-|-|-|-|-|-|-|H|I|-|-|-|-|P|-|Y|- - // -|-|-|-|-|-|-|-|-|-|A|N|-|-|-|-|-|-|-|- - // -|-|-|-|-|-|-|-|-|-|R|A|-|-|-|-|-|-|-|- - // -|-|-|-|-|-|-|-|-|-|-|R|-|-|-|-|-|-|-|- - // -|-|-|-|-|-|-|-|-|-|-|Y|-|-|-|-|-|-|-|- - new T_CN( Types.BIGINT, new boolean[] { Y,_,Y,_,_,_,_,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.BLOB, new boolean[] { _,Y,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ } ), - new T_CN( Types.CHAR, new boolean[] { _,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_,_ } ), - new T_CN( Types.BINARY, new boolean[] { _,_,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_ } ), - new T_CN( Types.CLOB, new boolean[] { _,_,_,_,Y,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ } ), - new T_CN( Types.DATE, new boolean[] { _,_,_,_,_,Y,_,_,_,_,_,_,_,_,_,_,_,_,_,_ } ), - new T_CN( Types.DECIMAL, new boolean[] { Y,_,_,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.DOUBLE, new boolean[] { Y,_,_,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.REAL, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.INTEGER, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.LONGVARCHAR, new boolean[] { _,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_,_ } ), - new T_CN( Types.LONGVARBINARY, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_ } ), - new T_CN( Types.NUMERIC, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.REAL, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.SMALLINT, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), - new T_CN( Types.TIME, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,Y,_,_,_,_ } ), - new T_CN( Types.TIMESTAMP, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,Y,_,_,_ } ), - new T_CN( Types.VARCHAR, new boolean[] { _,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_,_ } ), - new T_CN( Types.VARBINARY, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_ } ), - new T_CN( JDBC_BOOLEAN, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_,Y } ), + // B|B|C|B|C|D|D|D|R|I|L|L|N|R|S|T|T|V|V + // I|L|H|I|L|A|E|O|E|N|O|O|U|E|M|I|I|A|A + // G|O|A|N|O|T|C|U|A|T|N|N|M|A|A|M|M|R|R + // I|B|R|A|B|E|I|B|L|E|G|G|E|L|L|E|E|C|B + // N|-|-|R|-|-|M|L|-|G|V|V|R|-|L|-|S|H|I + // T|-|-|Y|-|-|A|E|-|E|A|A|I|-|I|-|T|A|N + // -|-|-|-|-|-|L|-|-|R|R|R|C|-|N|-|A|R|A + // -|-|-|-|-|-|-|-|-|-|C|B|-|-|T|-|M|-|R + // -|-|-|-|-|-|-|-|-|-|H|I|-|-|-|-|P|-|Y + // -|-|-|-|-|-|-|-|-|-|A|N|-|-|-|-|-|-|- + // -|-|-|-|-|-|-|-|-|-|R|A|-|-|-|-|-|-|- + // -|-|-|-|-|-|-|-|-|-|-|R|-|-|-|-|-|-|- + // -|-|-|-|-|-|-|-|-|-|-|Y|-|-|-|-|-|-|- + new T_CN( Types.BIGINT, new boolean[] { Y,_,Y,_,_,_,_,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.BLOB, new boolean[] { _,Y,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ } ), + new T_CN( Types.CHAR, new boolean[] { _,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_ } ), + new T_CN( Types.BINARY, new boolean[] { _,_,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y } ), + new T_CN( Types.CLOB, new boolean[] { _,_,_,_,Y,_,_,_,_,_,_,_,_,_,_,_,_,_,_ } ), + new T_CN( Types.DATE, new boolean[] { _,_,_,_,_,Y,_,_,_,_,_,_,_,_,_,_,_,_,_ } ), + new T_CN( Types.DECIMAL, new boolean[] { Y,_,_,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.DOUBLE, new boolean[] { Y,_,_,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.REAL, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.INTEGER, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.LONGVARCHAR, new boolean[] { _,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_ } ), + new T_CN( Types.LONGVARBINARY, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y } ), + new T_CN( Types.NUMERIC, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.REAL, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.SMALLINT, new boolean[] { Y,_,Y,_,_,_,Y,Y,Y,Y,Y,_,Y,Y,Y,_,_,Y,_ } ), + new T_CN( Types.TIME, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,Y,_,_,_ } ), + new T_CN( Types.TIMESTAMP, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,Y,_,_ } ), + new T_CN( Types.VARCHAR, new boolean[] { _,_,Y,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y,_ } ), + new T_CN( Types.VARBINARY, new boolean[] { _,_,_,_,_,_,_,_,_,_,_,Y,_,_,_,_,_,_,Y } ), }; ///////////////////////////////////////////////////////////// @@ -264,18 +221,6 @@ ///////////////////////////////////////////////////////////// // - // DATABASE-SIDE FUNCTIONS - // - ///////////////////////////////////////////////////////////// - - public static void ricochetBooleanProc( Boolean inValue, Boolean[] outValue ) - throws Exception - { - outValue[ 0 ] = inValue; - } - - ///////////////////////////////////////////////////////////// - // // TEST ENTRY POINTS // ///////////////////////////////////////////////////////////// @@ -314,54 +259,6 @@ close( conn ); } - /** - *

- * Test the boolean datatype added in release 10.2. - *

- */ - public void testBoolean() - throws Exception - { - Connection conn = getConnection(); - - // make sure we can read a legacy BOOLEAN column, regardless - // of the client/server/vm combination - readLegacyBooleanColumn( conn ); - readLegacyBooleanMetadata( conn ); - - if ( getServerVersion().atLeast( DRB_10_2 ) ) - { - TypeDescriptor[] types = BOOLEAN_TABLE_TYPES; - String tableName = BOOLEAN_TABLE; - Object[][] rows = makeRows( BOOLEAN_ROWS ); - ArrayList casts = new ArrayList(); - - dropTable( conn, tableName ); - createTable( conn, tableName, types ); - checkDBMetadata( conn, tableName ); - stuffTable( conn, tableName, types, rows ); - readTable( conn, tableName, types, rows, casts ); - - truncateTable( conn, tableName ); - insertCasts( conn, tableName, types, casts ); - verifyInsertedCasts( conn, tableName, types, casts ); - - dropProcedure( conn, RICOCHET_BOOLEAN_PROC ); - executeDDL - ( - conn, - "create procedure " + RICOCHET_BOOLEAN_PROC + - "( in inValue boolean, out outValue boolean )\n" + - "parameter style java no sql language java external name\n" + - "'" + getClass().getName() + "." + RICOCHET_BOOLEAN_PROC + "'" - ); - checkProcMetadata( conn, RICOCHET_BOOLEAN_PROC, RICOCHET_BOOLEAN_PROC_TYPES ); - callBooleanProc( conn ); - } - - close( conn ); - } - ///////////////////////////////////////////////////////////// // // TEST DATATYPES @@ -718,11 +615,6 @@ switch( originalJDbcType ) { - case JDBC_BOOLEAN: - if ( usingEmbeddedClient() ) { return Types.BIT; } - else if ( doesNotSupportBoolean() ) { return Types.SMALLINT; } - else { return originalJDbcType; } - //This kludge compensates for the fact that the DRDA clients report // that NUMERIC columns are DECIMAL. See bug 584. case Types.NUMERIC: @@ -733,16 +625,6 @@ } } - private boolean supportsBoolean() { return !doesNotSupportBoolean(); } - - private boolean doesNotSupportBoolean() - { - return - ( getServerVMVersion().equals( VM_1_3 ) ) || - ( usingDerbyClient() && !getDriverVersion().atLeast( DRB_10_2 ) ) || - ( usingDB2Client() ); - } - // // This kludge compensates for the fact that servers return // different jdbc types depending on their vm. @@ -894,275 +776,10 @@ ///////////////////////////////////////////////////////////// // - // TEST BOOLEAN - // - ///////////////////////////////////////////////////////////// - - // - // Read a system column that is BOOLEAN - // - private void readLegacyBooleanColumn( Connection conn ) - throws Exception - { - PreparedStatement ps = prepare( conn, "select systemalias from sys.sysaliases" ); - ResultSet rs = ps.executeQuery(); - int count = 0; - - while ( rs.next() ) - { - boolean result = rs.getBoolean( 1 ); - - count++; - } - println( "Read " + count + " booleans from sys.sysaliases" ); - - close( rs ); - close( ps ); - } - - // - // Read a metadata scrap that is BOOLEAN. Just make sure this succeeds. - // - private void readLegacyBooleanMetadata( Connection conn ) - throws Exception - { - DatabaseMetaData dbmd = conn.getMetaData(); - - boolean allTablesAreSelectable = dbmd.allTablesAreSelectable(); - boolean allProceduresAreCallable = dbmd.allProceduresAreCallable(); - } - - private void insertCasts( Connection conn, String tableName, TypeDescriptor[] types, List casts ) - throws Exception - { - PreparedStatement ps = makeInsert( conn, tableName, types ); - int count = casts.size(); - int key = 1; - - for ( int i = 0; i < count; i++ ) - { - Object value = casts.get( i ); - - value = castTheCast( types[ 0 ], value ); - - if ( value != null ) - { - int param = 1; - ps.setInt( param++, key++ ); - setParameter( ps, param++, value ); - ps.execute(); - } - } - } - - ///////////////////////////////////////////////////////////// - // // MINIONS // ///////////////////////////////////////////////////////////// - // - // Check insert casting. - // - // - // This method accounts for the following irregularities in our network - // layer: - // - // o ResultSet.getString() on a boolean column, in old clients, return - // "1" rather than "true". - // o PreparedStatement.setBigDecimal() doesn't work on BOOLEAN columns - // masquerading as SMALLINTs. - // - // Returns null if we should ignore the cast because of some deficiency - // in the client. - // - private Object castTheCast( TypeDescriptor type, Object value ) - { - int jdbctype = type.getJdbcType(); - - if ( value == null ) { return null; } - - switch ( jdbctype ) - { - case JDBC_BOOLEAN: - if ( supportsBoolean() ) { return value; } - // - // Old clients return "1" instead of "true" from - // ResultSet.getString(). This will fail in the server because - // 1 cannot be cast to a boolean. Note that for db2jcc, we - // can't return "true" because db2jcc refused to coerce - // that to a SMALLINT. - // - else if ( value instanceof String ) - { - if ( usingDerbyClient() ) { return value.equals( "1" ) ? "true" : "false"; } - else { return null; } - } - // - // Old clients can't stuff BigDecimal into a short apparently - // - else if ( value instanceof BigDecimal ) { return null; } - else { return value; } - - default: return value; - } - } - - // - // Verify inserted casts. - // - private void verifyInsertedCasts - ( Connection conn, String tableName, TypeDescriptor[] types, List casts ) - throws Exception - { - PreparedStatement ps = readTableQuery( conn, tableName, types ); - ResultSet rs = ps.executeQuery(); - int count = casts.size(); - int tastyColumn = 2; - - for ( int i = 0; i < count; i++ ) - { - Object value = casts.get( i ); - - if ( castTheCast( types[ 0 ], value ) != null ) - { - rs.next(); - checkParameter( rs, tastyColumn, value ); - } - } - } - - // - // Test the calling of a procedure with boolean args. - // - private void callBooleanProc( Connection conn ) - throws Exception - { - // the db2 driver can't handle the jdbc boolean type - int outParamType = ( usingDB2Client() ? Types.SMALLINT : JDBC_BOOLEAN ); - - CallableStatement cs = prepareCall - ( - conn, - "call " + RICOCHET_BOOLEAN_PROC + "( ?, ? )" - ); - cs.registerOutParameter( 2, outParamType ); - - callBooleanProc( cs, new Boolean( false ) ); - callBooleanProc( cs, new Boolean( true ) ); - callBooleanProc( cs, null ); - } - private void callBooleanProc( CallableStatement cs, Boolean value ) - throws Exception - { - TypeDescriptor inType = RICOCHET_BOOLEAN_PROC_TYPES[ INVALUE ]; - TypeDescriptor outType = RICOCHET_BOOLEAN_PROC_TYPES[ OUTVALUE ]; - ArrayList coercedTypes = new ArrayList(); - ArrayList casts = new ArrayList(); - - setParameter( cs, INVALUE + 1, inType, value ); - cs.execute(); - - Object retval = getOutArg( cs, OUTVALUE + 1, outType ); - - compareObjects( "Result should be " + value + " but is " + retval, value, retval ); - - // make sure getObject() works - retval = squeezeReturnArg( cs.getObject( OUTVALUE + 1 ) ); - compareObjects( "Result should be " + value + " but is " + retval, value, retval ); - - // try all legal getXXX() methods on the output arg - println( "Checking coercions for " + value ); - checkBooleanProcCoercions( cs, coercedTypes, casts ); - - // now try setting the input parameter using all of the legal types - doublecheckBooleanProcCoercions( cs, coercedTypes, casts ); - } - private Object squeezeReturnArg( Object original ) - { - if ( original == null ) { return null; } - - if ( supportsBoolean() ) { return original; } - // Special case for embedded configuration on 1.3 - else if ( original instanceof Boolean ) { return original; } - // - // Account for the fact that old configurations can't - // handle boolean values and coerce them to Integers - // when you call CallableStatement.getObject(). - // - else - { - int value = ((Integer) original).intValue(); - boolean boolValue = ( value == 0 ? false : true ); - - return new Boolean( boolValue ); - } - } - private void checkBooleanProcCoercions - ( CallableStatement cs, ArrayList coercedTypes, ArrayList casts ) - throws Exception - { - TypeDescriptor outType = RICOCHET_BOOLEAN_PROC_TYPES[ OUTVALUE ]; - T_CN coercionDesc = COERCIONS[ getCoercionIndex( outType.getJdbcType() ) ]; - boolean[] coercions = coercionDesc.getCoercions(); - int count = coercions.length; - int legalCoercions = 0; - - // make sure we can call all the appropriate getXXX() methods on - // the output parameter - for ( int i = 0; i < count; i++ ) - { - if ( coercions[ i ] ) - { - legalCoercions++; - - int jdbcType = COERCIONS[ i ].getJdbcType(); - Object retval = getOutArg( cs, OUTVALUE + 1, jdbcType ); - - if ( retval != null ) - { - coercedTypes.add( new Integer( jdbcType ) ); - casts.add( retval ); - } - - println( "\t" + jdbcType + ":\t" + retval ); - } - } - } - private void doublecheckBooleanProcCoercions - ( CallableStatement cs, ArrayList coercedTypes, ArrayList casts ) - throws Exception - { - TypeDescriptor inType = RICOCHET_BOOLEAN_PROC_TYPES[ INVALUE ]; - int castCount = casts.size(); - - println( "Performing " + castCount + " coercions..." ); - for ( int i = 0; i < castCount; i++ ) - { - int jdbcType = ((Integer) coercedTypes.get( i )).intValue(); - TypeDescriptor type = getType( jdbcType ); - Object insertValue = casts.get( i ); - Object transmogrifiedValue = castTheCast( inType, insertValue ); - - if ( transmogrifiedValue != null ) - { - setParameter( cs, INVALUE + 1, type, transmogrifiedValue ); - cs.execute(); - - // make sure we get what we set - Object outval = getOutArg( cs, OUTVALUE + 1, type ); - - compareObjects - ( - "Result for " + insertValue.getClass().getName() + - " should be " + insertValue + " but is " + outval, - insertValue, - outval - ); - } - } - } - /////////////////// // // TYPE MANAGEMENT @@ -1271,16 +888,7 @@ // client does not support nulls of this type. - switch( jdbcType ) - { - case JDBC_BOOLEAN: - ps.setNull( param, Types.SMALLINT ); - break; - - default: - fail( "Unsupported Derby type: " + type.getDerbyTypeName() ); - break; - } + fail( "Unsupported Derby type: " + type.getDerbyTypeName() ); } // Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/BooleanTest.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/BooleanTest.java?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/BooleanTest.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/BooleanTest.java Thu Jul 20 09:22:18 2006 @@ -1,706 +0,0 @@ -/* - - Derby - Class org.apache.derbyTesting.functionTests.tests.junitTests.lang.BooleanTest - - Copyright 2005 The Apache Software Foundation or its licensors, as applicable. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - */ -/** - *

- * This JUnit test verifies behavior of the BOOLEAN datatype. - *

- * - * @author Rick - */ - -package org.apache.derbyTesting.functionTests.tests.junitTests.lang; - -import java.math.*; -import java.sql.*; -import java.util.*; - -import junit.framework.*; - -import org.apache.derby.tools.ij; -import org.apache.derbyTesting.functionTests.util.BigDecimalHandler; -import org.apache.derbyTesting.functionTests.util.DerbyJUnitTest; - -public class BooleanTest extends DerbyJUnitTest -{ - ///////////////////////////////////////////////////////////// - // - // CONSTANTS - // - ///////////////////////////////////////////////////////////// - - private static final String BOOLEAN_TABLE = "BOOLCOL_499"; - private static final String CASTING_TABLE = "BOOLEANCASTS"; - - private static final Boolean TRUE = Boolean.TRUE; - private static final Boolean FALSE = Boolean.FALSE; - - private static final String NEGATE_BOOLEAN_FUNC = "negateBooleanFunc"; - private static boolean HAVE_BIG_DECIMAL; - - static{ - if(BigDecimalHandler.representation != BigDecimalHandler.BIGDECIMAL_REPRESENTATION) - HAVE_BIG_DECIMAL = false; - else - HAVE_BIG_DECIMAL = true; - } - - ///////////////////////////////////////////////////////////// - // - // STATE - // - ///////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////// - // - // CONSTRUCTOR - // - ///////////////////////////////////////////////////////////// - - public BooleanTest() {} - - ///////////////////////////////////////////////////////////// - // - // DATABASE FUNCTIONS - // - ///////////////////////////////////////////////////////////// - - public static Boolean negateBooleanFunc( Boolean inValue ) - throws Exception - { - return new Boolean( !inValue.booleanValue() ); - } - - ///////////////////////////////////////////////////////////// - // - // ENTRY POINT - // - ///////////////////////////////////////////////////////////// - - /** - *

- * Entry point for running this suite standalone. - *

- */ - public static void main( String args[] ) - throws Exception - { - runUnderOldHarness( args, suite() ); - } - - ///////////////////////////////////////////////////////////// - // - // JUnit BEHAVIOR - // - ///////////////////////////////////////////////////////////// - - /** - *

- * JUnit boilerplate which adds as test cases all public methods - * whose names start with the string "test" in the named classes. - * When you want to add a new class of tests, just wire it into - * this suite. - *

- */ - public static Test suite() - { - TestSuite testSuite = new TestSuite(); - - testSuite.addTestSuite( BooleanTest.class ); - - return testSuite; - } - - ///////////////////////////////////////////////////////////// - // - // TEST ENTRY POINTS - // - ///////////////////////////////////////////////////////////// - - /** - *

- * Tests for the BOOLEAN datatype. - *

- */ - public void testBoolean() - throws Exception - { - //setDebug( true ); - - Connection conn = ij.startJBMS(); - - createSchema( conn ); - populateTables( conn ); - verifyCatalogs( conn ); - verifySort( conn ); - - // now verify casts - truncateTable( conn, BOOLEAN_TABLE ); - castFromBoolean( conn ); - castToBoolean( conn ); - implicitCasts( conn ); - - verifyBooleanInSelect( conn ); - verifyBooleanInValuesClause( conn ); - } - - // create schema for this test - private void createSchema( Connection conn ) - throws Exception - { - dropTable( conn, BOOLEAN_TABLE ); - dropTable( conn, CASTING_TABLE ); - dropFunction( conn, NEGATE_BOOLEAN_FUNC ); - executeDDL - ( - conn, - "create table " + BOOLEAN_TABLE + "( keyCol int, booleanCol boolean )" - ); - // verify that you can create an index on BOOLEAN columns - executeDDL - ( - conn, - "create index boolIdx on " + BOOLEAN_TABLE + "( booleanCol )" - ); - - executeDDL - ( - conn, - "create table " + CASTING_TABLE + - "(\n" + - "keyCol int,\n" + - "\n" + - "smallintCol smallint,\n" + - "integerCol integer,\n" + - "bigintCol bigint,\n" + - "\n" + - "decimalCol decimal,\n" + - "realCol real,\n" + - "doubleCol double,\n" + - "floatCol float,\n" + - "\n" + - "charCol char(5),\n" + - "varcharCol varchar(5),\n" + - "longvarcharCol long varchar,\n" + - "\n" + - "charforbitdataCol char(5) for bit data,\n" + - "varcharforbitdataCol varchar(5) for bit data,\n" + - "\n" + - "clobCol clob,\n" + - "blobCol blob,\n" + - "\n" + - "dateCol date,\n" + - "timeCol time,\n" + - "timestampCol timestamp\n" + - ")" - ); - - executeDDL - ( - conn, - "create function " + NEGATE_BOOLEAN_FUNC + - "( inValue boolean ) returns boolean\n" + - "parameter style java no sql language java external name\n" + - "'" + getClass().getName() + "." + NEGATE_BOOLEAN_FUNC + "'" - ); - } - - // populate tables for this test - private void populateTables( Connection conn ) - throws Exception - { - execute - ( - conn, - "insert into " + BOOLEAN_TABLE + - "( keyCol, booleanCol ) values\n" + - "( 1, true ), ( 2, false ),\n" + - "( 3, true ), ( 4, false ),\n" + - "( 5, true ), ( 6, false ),\n" + - "( 7, true ), ( 8, false ),\n" + - "( 9, null ), ( 10, unknown )" - ); - - // the first tuple contains values which cast to true, - // the second tuple contains values which cast to false, - // the third tuple contains values which cast to null - execute - ( - conn, - "insert into " + CASTING_TABLE + - " values\n" + - "(\n" + - "1,\n" + - "\n" + - "1,\n" + - "1,\n" + - "1,\n" + - "\n" + - "1.0,\n" + - "1.0,\n" + - "1.0,\n" + - "1.0,\n" + - "\n" + - "'true',\n" + - "'true',\n" + - "'true',\n" + - "\n" + - "X'0001',\n" + - "X'0001',\n" + - "\n" + - "cast('true' as clob),\n" + - "cast(X'0001' as blob),\n" + - "\n" + - "date('1992-01-01'),\n" + - "time('09:30:15'),\n" + - "timestamp('1997-06-30 01:01:01')\n" + - "),\n" + - "(\n" + - "2,\n" + - "\n" + - "0,\n" + - "0,\n" + - "0,\n" + - "\n" + - "0.0,\n" + - "0.0,\n" + - "0.0,\n" + - "0.0,\n" + - "\n" + - "'false',\n" + - "'false',\n" + - "'false',\n" + - "\n" + - "X'0000',\n" + - "X'0000',\n" + - "\n" + - "cast('false' as clob),\n" + - "cast(X'0000' as blob),\n" + - "\n" + - "date('1992-01-01'),\n" + - "time('09:30:15'),\n" + - "timestamp('1997-06-30 01:01:01')\n" + - "),\n" + - "(\n" + - "3,\n" + - "\n" + - "null,\n" + - "null,\n" + - "null,\n" + - "\n" + - "null,\n" + - "null,\n" + - "null,\n" + - "null,\n" + - "\n" + - "null,\n" + - "null,\n" + - "null,\n" + - "\n" + - "null,\n" + - "null,\n" + - "\n" + - "null,\n" + - "null,\n" + - "\n" + - "null,\n" + - "null,\n" + - "null\n" + - ")" - ); - } - - // verify that the boolean column is correctly typed in the catalogs - private void verifyCatalogs( Connection conn ) - throws Exception - { - assertScalar - ( - conn, - - "select c.columndatatype\n" + - "from sys.syscolumns c, sys.systables t\n" + - "where t.tablename = " + singleQuote( BOOLEAN_TABLE ) + "\n" + - "and c.referenceid = t.tableid\n" + - "and c.columnname='BOOLEANCOL'", - - "BOOLEAN" - ); - } - - // verify that nulls sort before false which sorts before true - // create schema for this test - private void verifySort( Connection conn ) - throws Exception - { - PreparedStatement ps = prepare - ( - conn, - "select booleanCol from " + BOOLEAN_TABLE + " order by booleanCol" - ); - ResultSet rs = ps.executeQuery(); - - // 2 nulls, 4 falses, 4 trues - assertColumnEquals - ( - rs, - 1, - new Object[] - { - null, null, - FALSE, FALSE, FALSE, FALSE, - TRUE, TRUE, TRUE, TRUE - } - ); - - close( rs ); - close( ps ); - } - - // verify casts from BOOLEAN to legal types - private void castFromBoolean( Connection conn ) - throws Exception - { - execute - ( - conn, - "insert into " + BOOLEAN_TABLE + - "( keyCol, booleanCol ) values\n" + - "( 1, true ), ( 2, false ), ( 3, null )" - ); - - PreparedStatement ps = null; - if (HAVE_BIG_DECIMAL) - { - ps = prepare - ( - conn, - "select\n" + - "keyCol\n" + - ", cast ( booleanCol as smallint )\n" + - ", cast ( booleanCol as integer )\n" + - ", cast ( booleanCol as bigint )\n" + - ",cast ( booleanCol as decimal )\n" + - ",cast ( booleanCol as real )\n" + - ",cast ( booleanCol as double )\n" + - ",cast ( booleanCol as float )\n" + - ",cast ( booleanCol as char(5) )\n" + - ",cast ( booleanCol as varchar(5) )\n" + - ",cast ( booleanCol as long varchar )\n" + - ",cast ( booleanCol as clob )\n" + - "from " + BOOLEAN_TABLE + " order by keyCol" - ); - } - else - { - ps = prepare - ( - conn, - "select\n" + - "keyCol\n" + - ", cast ( booleanCol as smallint )\n" + - ", cast ( booleanCol as integer )\n" + - ", cast ( booleanCol as bigint )\n" + - ",cast ( booleanCol as real )\n" + - ",cast ( booleanCol as double )\n" + - ",cast ( booleanCol as float )\n" + - ",cast ( booleanCol as char(5) )\n" + - ",cast ( booleanCol as varchar(5) )\n" + - ",cast ( booleanCol as long varchar )\n" + - ",cast ( booleanCol as clob )\n" + - "from " + BOOLEAN_TABLE + " order by keyCol" - ); - } - - ResultSet rs = ps.executeQuery(); - - rs.next(); - if (HAVE_BIG_DECIMAL) - { - assertRow - ( - rs, - new Object[] - { - new Integer( 1 ), - new Integer( 1 ), - new Integer( 1 ), - new Long( 1L ), - new BigDecimal( 1.0 ), - new Float( 1.0 ), - new Double( 1.0 ), - new Float( 1.0 ), - "true ", - "true", - "true", - "true", - } - ); - } - else - { - assertRow - ( - rs, - new Object[] - { - new Integer( 1 ), - new Integer( 1 ), - new Integer( 1 ), - new Long( 1L ), - new Float( 1.0 ), - new Double( 1.0 ), - new Float( 1.0 ), - "true ", - "true", - "true", - "true", - } - ); - } - - rs.next(); - if (HAVE_BIG_DECIMAL) - { - assertRow - ( - rs, - new Object[] - { - new Integer( 2 ), - new Integer( 0 ), - new Integer( 0 ), - new Long( 0L ), - new BigDecimal( 0.0 ), - new Float( 0.0 ), - new Double( 0.0 ), - new Float( 0.0 ), - "false", - "false", - "false", - "false", - } - ); - } - else - { - assertRow - ( - rs, - new Object[] - { - new Integer( 2 ), - new Integer( 0 ), - new Integer( 0 ), - new Long( 0L ), - new Float( 0.0 ), - new Double( 0.0 ), - new Float( 0.0 ), - "false", - "false", - "false", - "false", - } - ); - } - - rs.next(); - if (HAVE_BIG_DECIMAL) - { - assertRow - ( - rs, - new Object[] - { - new Integer( 3 ), - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - } - ); - } - else - { - assertRow - ( - rs, - new Object[] - { - new Integer( 3 ), - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - } - ); - } - - close( rs ); - close( ps ); - } - - // verify casts to BOOLEAN from legal types - private void castToBoolean( Connection conn ) - throws Exception - { - PreparedStatement ps = prepare - ( - conn, - "select\n" + - "keyCol\n" + - ", cast (smallintcol as boolean)\n" + - ", cast (integercol as boolean)\n" + - ", cast (bigintcol as boolean)\n" + - ", cast (decimalcol as boolean)\n" + - ", cast (realcol as boolean)\n" + - ", cast (doublecol as boolean)\n" + - ", cast (floatcol as boolean)\n" + - ", cast (charcol as boolean)\n" + - ", cast (varcharcol as boolean)\n" + - "from " + CASTING_TABLE + " order by keyCol\n" - ); - ResultSet rs = ps.executeQuery(); - - rs.next(); - verifyCasts( rs, 2, 10, TRUE ); - rs.next(); - verifyCasts( rs, 2, 10, FALSE ); - rs.next(); - verifyCasts( rs, 2, 10, null ); - - close( rs ); - close( ps ); - } - - // verify that the language adds the correct implicit casts - private void implicitCasts( Connection conn ) - throws Exception - { - int base = 100; - - base = verifyImplicitCast( conn, "smallintCol", base ); - base = verifyImplicitCast( conn, "integerCol", base ); - base = verifyImplicitCast( conn, "bigintCol", base ); - base = verifyImplicitCast( conn, "decimalCol", base ); - base = verifyImplicitCast( conn, "realCol", base ); - base = verifyImplicitCast( conn, "doubleCol", base ); - base = verifyImplicitCast( conn, "floatCol", base ); - base = verifyImplicitCast( conn, "charCol", base ); - base = verifyImplicitCast( conn, "varcharCol", base ); - base = verifyImplicitCast( conn, "longvarcharCol", base ); - - // - // If we try to implicitly cast from clob to boolean, we - // get the following error: - // - // ERROR 22005: An attempt was made to get a data value of type 'boolean' from a data value of type 'CLOB'. - } - // - // Test a single implicit cast. Increment the base for the next round. - // - private int verifyImplicitCast( Connection conn, String colName, int base ) - throws Exception - { - execute - ( - conn, - "insert into " + BOOLEAN_TABLE + - "( keyCol, booleanCol )\n" + - "select keyCol + " + base + ", " + colName + "\n" + - "from " + CASTING_TABLE - ); - PreparedStatement ps = prepare - ( - conn, - "select keyCol, booleanCol from " + BOOLEAN_TABLE + " where keyCol > " + base + "\n" + - "order by keyCol\n" - ); - ResultSet rs = ps.executeQuery(); - - assertColumnEquals( rs, 2, new Object[] { TRUE, FALSE, null } ); - - close( rs ); - close( ps ); - - return base + 100; - } - - private void verifyCasts - ( ResultSet rs, int firstColumn, int lastColumn, Boolean expectedValue ) - throws Exception - { - for ( int columnNumber = firstColumn; columnNumber <= lastColumn; columnNumber++ ) - { - assertColumnEquals( "Column number " + columnNumber, rs, columnNumber, expectedValue ); - } - } - - // verify that we can select an expression which evaluates to a boolean value - private void verifyBooleanInSelect( Connection conn ) - throws Exception - { - PreparedStatement ps = prepare - ( - conn, - "select (booleanCol > booleanCol) from " + BOOLEAN_TABLE - ); - ResultSet rs = ps.executeQuery(); - - while( rs.next() ) - { - assertFalse( rs.getBoolean( 1 ) ); - } - - close( rs ); - close( ps ); - } - - // verify that we can use a boolean expression in a values clause - private void verifyBooleanInValuesClause( Connection conn ) - throws Exception - { - assertScalar - ( - conn, - "values " + NEGATE_BOOLEAN_FUNC + "( true )", - FALSE - ); - assertScalar - ( - conn, - "values " + NEGATE_BOOLEAN_FUNC + "( (current_date > '1994-02-23') )", - FALSE - ); - } - -} Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/LangSuite.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/LangSuite.java?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/LangSuite.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/LangSuite.java Thu Jul 20 09:22:18 2006 @@ -1,94 +0,0 @@ -/* - - Derby - Class org.apache.derbyTesting.functionTests.tests.junitTests.lang.LangSuite - - Copyright 2005 The Apache Software Foundation or its licensors, as applicable. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - */ -/** - *

- * A suite for running language layer junit tests. - *

- */ - -package org.apache.derbyTesting.functionTests.tests.junitTests.lang; - -import java.io.*; -import java.sql.*; -import java.util.*; - -import junit.framework.*; - -import org.apache.derbyTesting.functionTests.util.DerbyJUnitTest; - -public class LangSuite extends DerbyJUnitTest -{ - ///////////////////////////////////////////////////////////// - // - // CONSTANTS - // - ///////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////// - // - // STATE - // - ///////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////// - // - // JUnit BEHAVIOR - // - ///////////////////////////////////////////////////////////// - - /** - *

- * JUnit boilerplate which adds as test cases all public methods - * whose names start with the string "test" in the named classes. - * When you want to add a new class of tests, just wire it into - * this suite. - *

- */ - public static Test suite() - { - TestSuite testSuite = new TestSuite(); - - testSuite.addTestSuite( BooleanTest.class ); - - return testSuite; - } - - ///////////////////////////////////////////////////////////// - // - // ENTRY POINT - // - ///////////////////////////////////////////////////////////// - - /** - *

- * Entry point for running this suite inside the old-fashioned - * test harness. - *

- */ - public static void main( String args[] ) - throws Exception - { - runUnderOldHarness( args, suite() ); - } - - - -} - Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/build.xml URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/build.xml?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/build.xml (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/build.xml Thu Jul 20 09:22:18 2006 @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/default_app.properties URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/default_app.properties?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/default_app.properties (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/lang/default_app.properties Thu Jul 20 09:22:18 2006 @@ -1,31 +0,0 @@ -# -# This is the default system properties file for Language JUnit tests. -# -# *** DO NOT PUT PROPERTIES FOR THE DERBY SYSTEM IN THIS FILE. -# *** THEY BELONG IN default_derby.properties. -# -# This file will get handed to the test on the command line in a -p -# argument. -# -# This causes ij to load the driver and make an -# initial connection to the database. -# -# The .java test has to call util.getPropertyArg and util.startJBMS -# to process the property file. See any of the .java tests for this code. -# -# If you want to alter these to use a different driver, connect to a different -# database, or to not be used, override this file by creating -# a file _app.properties to be used instead of this file. -# -# - -ij.database=jdbc:derby:wombat;create=true -ij.protocol=jdbc:derby: - -ij.defaultResourcePackage=/org/apache/derbyTesting/functionTests/tests/junitTests/lang/ -ij.showNoConnectionsAtStart=true -ij.showNoCountForSelect=true - -# DataSource properties, only used if ij.dataSource is set -ij.dataSource.databaseName=wombat -ij.dataSource.createDatabase=create Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/db2Compatibility.sql URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/db2Compatibility.sql?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/db2Compatibility.sql (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/db2Compatibility.sql Thu Jul 20 09:22:18 2006 @@ -99,6 +99,7 @@ drop schema "sysok" restrict; -- data types not supported +create table NOTYPE(i int, b BOOLEAN); create table NOTYPE(i int, b TINYINT); create table NOTYPE(i int, b java.lang.String); create table NOTYPE(i int, b com.acme.Address); @@ -306,6 +307,7 @@ -- INSTANCEOF in where clause of select, delete, update, -- beetle 5224 +create table t1 (i int, s smallint, c10 char(10), vc30 varchar(30), b boolean); create table mm (x org.apache.derbyTesting.functionTests.util.ManyMethods); create table sc (x org.apache.derbyTesting.functionTests.util.SubClass); select i from t1 where i instanceof java.lang.Integer; @@ -334,6 +336,8 @@ -- beetle 5233 create table testtype1(col1 bit); create table testtype2(col1 bit varying(10)); +--- boolean datatype already disabled +create table testtype3(col1 boolean); create table testtype4(col1 LONG NVARCHAR); create table testtype5(col1 LONG VARBINARY); create table testtype6(col1 LONG BIT VARYING); @@ -612,6 +616,18 @@ -- (4) USING should be disabled in INNER JOIN of SELECT statement SELECT * FROM t1 RIGHT OUTER JOIN t2 USING (col1); + +-- (5) TRUE and FALSE constants should be disabled in WHERE clause of SELECT statement +SELECT * FROM t1 INNER JOIN t2 ON t1.col1 = t2.col1 WHERE true; +SELECT * FROM t1 INNER JOIN t2 ON t1.col1 = t2.col1 WHERE false; + +-- (5) TRUE and FALSE constants should be disabled in WHERE clause of DELETE statement +DELETE FROM t1 where true; +DELETE FROM t1 where false; + +-- (5) TRUE and FALSE constants should be disabled in WHERE clause of DELETE statement +UPDATE t2 SET col1 = NULL WHERE true; +UPDATE t2 SET col1 = NULL WHERE false; -- (6) AT ISOLATION clause should be disabled in SELECT statement -- AT ISOLATION not supported in both Cloudscape and DB2 mode and that is why rather than getting feature not implemented, we will get syntax error Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/logop.sql URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/logop.sql?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/logop.sql (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/logop.sql Thu Jul 20 09:22:18 2006 @@ -156,6 +156,7 @@ select x from s where not ( ( (1 = 1) or (2 = 2) ) and (3 = 4) ); select x from s where (1 = 2) and not ( (3 = 3) or (4 = 4) ); select x from s where not ( (1 = 2) and ( (3 = 3) or (4 = 4) ) ); +-- following NOTs in select clause won't work because it results in a transient boolean datatype select ( not ( (1 = 1) or (2 = 2) ) and (3 = 4) ) from s; -- select ( not ( ( (1 = 1) or (2 = 2) ) and (3 = 4) ) ) from s; Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/procedureInTrigger.sql URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/procedureInTrigger.sql?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/procedureInTrigger.sql (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/procedureInTrigger.sql Thu Jul 20 09:22:18 2006 @@ -508,7 +508,7 @@ --- check delete failed select * from t2; --- check index is not created -select count(*) from SYS.SYSCONGLOMERATES where CONGLOMERATENAME='IX' and ISINDEX=true; +select count(*) from SYS.SYSCONGLOMERATES where CONGLOMERATENAME='IX' and ISINDEX=1; drop trigger create_index_trig; --- create an index to test we cannot drop it from a procedure called by a trigger @@ -521,5 +521,5 @@ --- check delete failed select * from t1; --- check index is not dropped -select count(*) from SYS.SYSCONGLOMERATES where CONGLOMERATENAME='IX' and ISINDEX=true; +select count(*) from SYS.SYSCONGLOMERATES where CONGLOMERATENAME='IX' and ISINDEX=1; drop trigger drop_index_trig; Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/schemas.sql URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/schemas.sql?rev=423976&r1=423975&r2=423976&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/schemas.sql (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/schemas.sql Thu Jul 20 09:22:18 2006 @@ -430,6 +430,7 @@ where i = (select i from test.t t2 where s = (select i from test.t t3 where s = 2)); -- correlated subqueries +-- exists disallowed in select clause select (exists (select * from test.ttt where iii = (select 11 from test.tt where ii = i and ii <> 1)) ) a