1 package com.quadcap.sql.meta; 2 3 40 41 import java.io.IOException ; 42 43 import java.util.Iterator ; 44 import java.util.Vector ; 45 46 import java.sql.SQLException ; 47 48 import com.quadcap.sql.Column; 49 import com.quadcap.sql.Database; 50 import com.quadcap.sql.Expression; 51 import com.quadcap.sql.Relation; 52 import com.quadcap.sql.Row; 53 import com.quadcap.sql.Session; 54 import com.quadcap.sql.Table; 55 import com.quadcap.sql.View; 56 57 import com.quadcap.sql.index.BCursor; 58 import com.quadcap.sql.index.Btree; 59 60 import com.quadcap.sql.types.*; 61 62 import com.quadcap.util.Debug; 63 64 69 public class MetaTables extends MetaCursor { 70 static Column[] cols = { 71 new Column("TABLE_CAT", typeString), 72 new Column("TABLE_SCHEM", typeString), 73 new Column("TABLE_NAME", typeString), 74 new Column("TABLE_TYPE", typeString), 75 new Column("REMARKS", typeString) 76 }; 77 78 static int[] sortColumns = { 4, 2, 3 }; 79 80 public MetaTables(Session session, Expression predicate) 81 throws SQLException 82 { 83 super(session, predicate); 84 try { 85 addColumns(cols); 86 Database db = session.getDatabase(); 87 session.getTableWriteLock("#Schema"); 88 synchronized (db.getFile().getLock()) { 89 Iterator iter = db.getRelationNameIterator(); 90 while (iter.hasNext()) { 91 String name = (String )iter.next(); 92 93 Relation r = db.getRelation(name); 94 Row row = makeRow(r); 95 if (rowMatch(row)) { 96 addRow(row); 97 } 98 } 99 } 100 sort(); 101 } catch (ValueException e) { 102 Debug.print(e); 103 SQLException te = new SQLException (e.toString(), "Q000P"); 104 te.setNextException(e); 105 throw te; 106 } catch (IOException e) { 107 Debug.print(e); 108 throw new SQLException (e.toString(), "Q000Q"); 109 } 110 } 111 112 public int[] getSortColumns() { 113 return sortColumns; 114 } 115 116 Row makeRow(Relation r) throws SQLException { 117 Row row = new Row(5); 118 row.set(1, ValueNull.valueNull); 119 doTableName(2, row, r.getName()); 120 row.set(4, new ValueString(r.getType())); 121 if (r instanceof View) { 122 row.set(5, new ValueString(((View)r).toString())); 123 } else { 124 row.set(5, ValueNull.valueNull); 125 } 126 return row; 127 } 128 129 } 130 | Popular Tags |