1 21 22 package org.apache.derbyTesting.functionTests.tests.lang; 23 24 import org.apache.derbyTesting.junit.BaseJDBCTestCase; 25 import org.apache.derbyTesting.junit.JDBC; 26 27 import java.sql.*; 28 29 import junit.framework.Test; 30 import junit.framework.TestSuite; 31 32 38 public class PrepareExecuteDDL extends BaseJDBCTestCase { 39 40 47 private Connection connDDL; 48 49 58 private static final String [] STMTS = 59 { 60 "SELECT * FROM PED001", 61 "SELECT A, B FROM PED001", 62 "GRANT SELECT ON PED001 TO U_PED_001", 63 "GRANT SELECT(A,B) ON PED001 TO U_PED_001", 64 "REVOKE SELECT(A,B) ON PED001 FROM U_PED_001", 65 "REVOKE SELECT ON PED001 FROM U_PED_001", 66 }; 67 68 72 private static final String [] DDL = 73 { 74 "ALTER TABLE PED001 ADD COLUMN D BIGINT", 75 "ALTER TABLE PED001 ADD CONSTRAINT PED001_PK PRIMARY KEY (A)", 76 "ALTER TABLE PED001 LOCKSIZE ROW", 77 "ALTER TABLE PED001 LOCKSIZE TABLE", 78 "DROP TABLE PED001", 79 }; 80 81 84 public static Test suite() { 85 TestSuite suite = new TestSuite(); 86 for (int i = 0; i < DDL.length; i++) 87 suite.addTest(new PrepareExecuteDDL("testPrepareExcute", DDL[i])); 88 return suite; 89 } 90 private final String ddl; 91 92 private PrepareExecuteDDL(String name, String ddl) 93 { 94 super(name); 95 this.ddl = ddl; 96 } 97 98 private boolean tableDropped() 99 { 100 return ddl.startsWith("DROP TABLE "); 101 } 102 103 public void testPrepareExcute() throws SQLException 104 { 105 Connection conn = getConnection(); 106 107 PreparedStatement[] psa= new PreparedStatement[STMTS.length]; 108 for (int i = 0; i < STMTS.length; i++) 109 { 110 String sql = STMTS[i]; 111 psa[i] = conn.prepareStatement(sql); 112 } 113 114 connDDL.createStatement().execute(ddl); 115 116 for (int i = 0; i < STMTS.length; i++) 117 { 118 String sql = STMTS[i]; 119 if (sql.startsWith("SELECT ")) 120 checkSelect(psa[i], sql); 121 else if (sql.startsWith("GRANT ") 122 || sql.startsWith("REVOKE ")) 123 checkGrantRevoke(psa[i], sql); 124 else 125 fail("unknown SQL" + sql); 126 127 psa[i].close(); 128 } 129 } 130 131 private void checkSelect(PreparedStatement ps, String sql) 132 throws SQLException 133 { 134 assertEquals(true, sql.startsWith("SELECT ")); 135 136 boolean result; 137 try { 138 result = ps.execute(); 139 } catch (SQLException e) { 140 141 assertSQLState("42X05", e); 143 assertTrue(tableDropped()); 144 145 return; 146 } 147 assertTrue(result); 148 149 ResultSet rs = ps.getResultSet(); 150 151 DatabaseMetaData dmd = connDDL.getMetaData(); 152 JDBC.assertMetaDataMatch(dmd, rs.getMetaData()); 153 154 boolean isSelectStar = sql.startsWith("SELECT * "); 155 156 if (isSelectStar) 157 ; 158 159 JDBC.assertDrainResults(rs); 160 } 161 162 163 private void checkGrantRevoke(PreparedStatement ps, String sql) 164 throws SQLException 165 { 166 assertEquals(true, sql.startsWith("GRANT ") 167 || sql.startsWith("REVOKE ")); 168 169 try { 170 assertFalse(ps.execute()); 171 } catch (SQLException e) { 172 173 assertSQLState("42X05", e); 174 assertTrue(tableDropped()); 175 176 return; 177 } 178 } 179 182 protected void setUp() throws SQLException 183 { 184 185 connDDL = openDefaultConnection(); 186 Statement s = connDDL.createStatement(); 187 188 s.execute( 189 "CREATE TABLE PED001 (A INT NOT NULL, B DECIMAL(6,4), C VARCHAR(20))"); 190 191 s.close(); 192 } 193 194 198 protected void tearDown() throws Exception 199 { 200 Statement s = connDDL.createStatement(); 201 try { 202 s.execute("DROP TABLE PED001"); 203 } catch (SQLException e) { 204 assertSQLState("42Y55", e); 205 } 206 s.close(); 207 JDBC.cleanup(connDDL); 208 super.tearDown(); 209 210 } 211 } 212 | Popular Tags |