1 5 package org.h2.test.synth; 6 7 import java.io.PrintWriter ; 8 import java.io.StringWriter ; 9 import java.sql.*; 10 import java.util.*; 11 12 import org.h2.test.TestBase; 13 14 class Result implements Comparable { 15 static final int SUCCESS=0, BOOLEAN=1, INT=2, EXCEPTION=3, RESULTSET=4; 16 private int type; 17 private boolean bool; 18 private int intValue; 19 private SQLException exception; 20 private ArrayList rows; 21 private ArrayList header; 22 String sql; 23 24 Result(String sql) { 25 this.sql = sql; 26 type = SUCCESS; 27 } 28 29 Result(String sql, SQLException e) { 30 this.sql = sql; 31 type = EXCEPTION; 32 exception = e; 33 } 34 35 Result(String sql, boolean b) { 36 this.sql = sql; 37 type = BOOLEAN; 38 this.bool = b; 39 } 40 41 Result(String sql, int i) { 42 this.sql = sql; 43 type = INT; 44 this.intValue = i; 45 } 46 47 Result(TestSynth config, String sql, ResultSet rs) { 48 this.sql = sql; 49 type = RESULTSET; 50 try { 51 rows = new ArrayList(); 52 header = new ArrayList(); 53 ResultSetMetaData meta = rs.getMetaData(); 54 int len = meta.getColumnCount(); 55 Column[] cols = new Column[len]; 56 for(int i=0; i<len; i++) { 57 cols[i] = new Column(meta, i+1); 58 } 59 while(rs.next()) { 60 Row row = new Row(config, rs, len); 61 rows.add(row); 62 } 63 Collections.sort(rows); 64 } catch(SQLException e) { 65 TestBase.logError("error reading result set", e); 68 } 69 } 70 71 public String toString() { 72 switch(type) { 73 case SUCCESS: 74 return "success"; 75 case BOOLEAN: 76 return "boolean: " + this.bool; 77 case INT: 78 return "int: " + this.intValue; 79 case EXCEPTION: { 80 StringWriter w = new StringWriter (); 81 exception.printStackTrace(new PrintWriter (w)); 82 return "exception: "+exception.getSQLState()+": "+exception.getMessage() + "\r\n"+w.toString(); 83 } 84 case RESULTSET: 85 String result = "ResultSet { // size=" + rows.size() + "\r\n "; 86 for(int i=0; i<header.size(); i++) { 87 Column column = (Column)header.get(i); 88 result += column.toString() + "; "; 89 } 90 result += "} = {\r\n"; 91 for(int i=0; i<rows.size(); i++) { 92 Row row = (Row)rows.get(i); 93 result += " { " + row.toString() + "};\r\n"; 94 } 95 return result + "}"; 96 default: 97 throw new Error ("internal"); 98 } 99 } 100 101 public int compareTo(Object o) { 102 Result r = (Result)o; 103 switch(type) { 104 case EXCEPTION: 105 if(r.type != EXCEPTION) { 106 return 1; 107 } 108 return 0; 109 case BOOLEAN: 111 case INT: 112 case SUCCESS: 113 case RESULTSET: 114 return toString().compareTo(r.toString()); 115 default: 116 throw new Error ("internal"); 117 } 118 } 119 120 public void log() { 121 switch(type) { 122 case SUCCESS: 123 System.out.println("> ok"); 124 break; 125 case EXCEPTION: 126 System.out.println("> exception"); 127 break; 128 case INT: 129 if(intValue==0) { 130 System.out.println("> ok"); 131 } else { 132 System.out.println("> update count: "+intValue); 133 } 134 break; 135 case RESULTSET: 136 System.out.println("> rs "+rows.size()); 137 break; 138 } 139 System.out.println(); 140 } 141 142 } 143 | Popular Tags |