1 import java.sql.*; 2 3 4 class org_h2_DriverMeta extends GdaJMeta { org_h2_DriverMeta(Connection cnc)5 public org_h2_DriverMeta (Connection cnc) throws Exception { 6 super (cnc); 7 ResultSet rs; 8 rs = cnc.getMetaData().getSchemas(); 9 while (rs.next ()) { 10 if (rs.getBoolean (3)) 11 schemaAddCurrent (rs.getString (1)); 12 } 13 } 14 getCatalog()15 public String getCatalog () throws Exception { 16 return cnc.getCatalog (); 17 } 18 getTables(String catalog, String schema, String name)19 public GdaJResultSet getTables (String catalog, String schema, String name) throws Exception { 20 return new org_h2_DriverMetaTables (this, catalog, schema, name); 21 } 22 getViews(String catalog, String schema, String name)23 public GdaJResultSet getViews (String catalog, String schema, String name) throws Exception { 24 ResultSet rs; 25 if ((catalog != null) && (schema != null)) { 26 PreparedStatement ps; 27 if (name != null) { 28 ps = cnc.prepareStatement ("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION, CHECK_OPTION, IS_UPDATABLE::boolean FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_CATALOG = ? AND TABLE_SCHEMA = ? AND TABLE_NAME = ?"); 29 ps.setString (3, name); 30 } 31 else 32 ps = cnc.prepareStatement ("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION, CHECK_OPTION, IS_UPDATABLE::boolean FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_CATALOG = ? AND TABLE_SCHEMA = ?"); 33 ps.setString (1, catalog); 34 ps.setString (2, schema); 35 rs = ps.executeQuery(); 36 } 37 else { 38 Statement stmt = cnc.createStatement (); 39 rs = stmt.executeQuery ("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION, CHECK_OPTION, IS_UPDATABLE::boolean FROM INFORMATION_SCHEMA.VIEWS"); 40 } 41 //return new GdaJResultSet (rs); 42 return new org_h2_DriverMetaViews (rs); 43 } 44 } 45 46 /* 47 * Meta data for tables 48 */ 49 class org_h2_DriverMetaTables extends GdaJMetaTables { org_h2_DriverMetaTables(GdaJMeta jm, String catalog, String schema, String name)50 public org_h2_DriverMetaTables (GdaJMeta jm, String catalog, String schema, String name) throws Exception { 51 super (jm); 52 rs = md.getTables (catalog, schema, name, null); 53 } 54 fillNextRow(long c_pointer)55 public boolean fillNextRow (long c_pointer) throws Exception { 56 if (! rs.next ()) 57 return false; 58 59 GdaJValue cv; 60 61 cv = col_values.elementAt (0); 62 cv.setCValue (rs, 0, c_pointer); 63 cv = col_values.elementAt (1); 64 cv.setCValue (rs, 1, c_pointer); 65 cv = col_values.elementAt (2); 66 cv.setCValue (rs, 2, c_pointer); 67 cv = col_values.elementAt (3); 68 cv.setCValue (rs, 3, c_pointer); 69 70 cv = col_values.elementAt (5); 71 cv.setCValue (rs, 4, c_pointer); 72 73 cv = col_values.elementAt (6); 74 String ln = GdaJValue.toLower (rs.getString (2) + "." + rs.getString (3)); 75 if (jm.schemaIsCurrent (rs.getString (2))) 76 cv.setCString (c_pointer, 6, GdaJValue.toLower (rs.getString (3))); 77 else 78 cv.setCString (c_pointer, 6, ln); 79 cv = col_values.elementAt (7); 80 cv.setCString (c_pointer, 7, ln); 81 82 return true; 83 } 84 } 85 86 /* 87 * Meta data for views 88 */ 89 class org_h2_DriverMetaViews extends GdaJResultSet { org_h2_DriverMetaViews(ResultSet rs)90 public org_h2_DriverMetaViews (ResultSet rs) throws Exception { 91 super (rs); 92 } 93 columnTypesDeclared()94 protected void columnTypesDeclared () { 95 GdaJValue cv = col_values.elementAt (0); 96 cv.no_null = true; 97 cv.convert_lc = true; 98 (col_values.elementAt (1)).convert_lc = true; 99 (col_values.elementAt (2)).convert_lc = true; 100 } 101 } 102