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