⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 largecodegen.java

📁 derby database source code.good for you.
💻 JAVA
字号:
package org.apache.derbyTesting.functionTests.tests.lang;import java.sql.DriverManager;import java.sql.Connection;import java.sql.*;import java.util.Properties;import org.apache.derby.tools.ij;// This test tries to push byte code generation to the limit.// the variable numUnions can be changed to push up the byte code generated// It has to be run with a large amount of memory. if numUnions is set high e.g.//  java -Djvmflags=-Xmx512M org.apache.derbyTesting.harness.RunTest lang/largeCodeGen// This is but one code path other areas need to be tested such as large in clauses, etc.public class largeCodeGen{    public static void main(String argv[])        throws Exception    {        Statement stmt = null;        PreparedStatement pstmt = null; 		//int numUnions = 4000;		//int numUnions = 2000;		/*		  We still have problems with large queries. 		  Passes at 4000.		  With size 5000 it gets "java.lang.VerifyError: 		  (class: db2j/exe/ac601a400fx0102xc673xe3e9x000000163ac04, method: 		  execute signature: ()Lcom/ibm/db2j/protocol/Database/Language/Interface/ResultSet;) Illegal target of jump or branch". My fix affects generated method "fillResultSet". With size 10000 largeCodeGen gets Java exception: 'java.io.IOException: constant_pool(70796 > 65535)'.		*/		String tableName = "t0";				String viewName = "v0";				ij.getPropertyArg(argv); 	        Connection con = ij.startJBMS();        		con.setAutoCommit(false);		stmt = con.createStatement(); 	       System.out.println("connected");		// Create table		try {			stmt.executeUpdate("drop table " + tableName);		}catch (SQLException se)		{			// drop error ok.		}		try {			stmt.executeUpdate("drop view " + viewName);		}catch (SQLException se)		{			// drop error ok.		}		String createSQL = 	"create table " +			tableName +			"(si smallint,i int, bi bigint, r real, f float, d double precision, n5_2 numeric(5,2), dec10_3 decimal(10,3), ch20 char(3),vc varchar(20), lvc long varchar)";		stmt.executeUpdate(createSQL);		stmt.executeUpdate("insert into " + tableName + " values(2,3,4,5.3,5.3,5.3,31.13,123456.123, 'one','one','one')");				System.out.println("Building view 100 unions");  		StringBuffer createView = new StringBuffer("create view " + viewName + 												   " as select * from " + 												   tableName);		for (int i = 1; i < 100; i ++)		{			createView.append(" UNION ALL (SELECT * FROM " + tableName + ")");		}		String createViewString = createView.toString();		//System.out.println(createViewString);		stmt.executeUpdate(createView.toString());				// 2000 unions caused method too big error in verifier		largeUnionSelect(con, viewName, 2000);		// 10000 unions overflows the number of constant pool entries		largeUnionSelect(con, viewName, 10000);		    }        private static void largeUnionSelect(Connection con, String viewName,    		int numUnions) throws Exception	{		StringBuffer selectSQLBuffer  = new StringBuffer("select * from t0 ") ;		for (int i = 1; i < numUnions/100;i++)		{			selectSQLBuffer.append(" UNION ALL (SELECT * FROM " + viewName + ")");		}					try {		// Ready to execute the problematic query 		String selectSQL = selectSQLBuffer.toString();		//System.out.println(selectSQL);		System.out.println("SELECT with " + numUnions/100 * 100 + " unions");        PreparedStatement pstmt = con.prepareStatement(selectSQL);        ResultSet rs = pstmt.executeQuery();		int numRowsExpected = (numUnions/100 * 100);		int numRows = 0;		while (rs.next())		{			numRows++;			if ((numRows % 100) == 0)			checkRowData(rs);		}		System.out.println("PASS: Row data check ok");        con.commit();        pstmt.close();        con.close();		} catch (SQLException sqle)		{			System.out.println("FAILED QUERY");			do {				System.out.println(sqle.getSQLState() + ":" + sqle.getMessage());				sqle = sqle.getNextException();			} while (sqle != null);		}      }	// Check the data on the positioned row against what we inserted.	private static void checkRowData(ResultSet rs) throws Exception	{		//" values(2,3,4,5.3,5.3,5.3,31.13,123456.123, 'one','one','one')");		String[] values = {"2", "3", "4", "5.3","5.3","5.3","31.13","123456.123",						   "one","one","one"};		for (int i = 1; i <= 11; i ++)		{			String rsValue = rs.getString(i);			String expectedValue = values[i - 1];			if (!rsValue.equals(values[i-1]))				throw new Exception("Result set data value: " + rsValue +									" does not match " + values[i-1] +					                " for column " + i);						}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -