using Runnable to comply to the SWT threading model.
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / sql / SQLMetaDataResults.java
1 package com.quantum.sql;
2
3 import java.sql.ResultSet;
4 import java.sql.ResultSetMetaData;
5 import java.sql.SQLException;
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.Vector;
9
10 import com.quantum.model.Bookmark;
11 import com.quantum.model.Entity;
12
13
14 /**
15  * @author BC
16  */
17 public class SQLMetaDataResults extends SQLResultSetResults {
18
19         /**
20          * @param query
21          */
22         private SQLMetaDataResults(String query, Bookmark bookmark, Entity entity) {
23                 super(query, bookmark, entity);
24         }
25
26         static SQLResultSetResults create(Bookmark bookmark, ResultSet set, String query, Entity entity) throws SQLException {
27
28                 SQLMetaDataResults results = new SQLMetaDataResults(query, bookmark, entity);
29                 results.parseResultSet(set);
30                 
31                 return results;
32         }
33         
34         /**
35          * @param set
36          * @param results
37          * @param metaData
38          * @param columnCount
39          * @throws SQLException
40          */
41         protected void parseResultSet(ResultSet set) throws SQLException {
42
43                 List columns = new ArrayList();
44                 columns.add(new Column("ColumnName", "", 0)); //$NON-NLS-1$
45                 columns.add(new Column("Type", "", 0)); //$NON-NLS-1$
46                 columns.add(new Column("Size", "", 0)); //$NON-NLS-1$
47                 columns.add(new Column("Nullable", "", 0)); //$NON-NLS-1$
48                 columns.add(new Column("AutoIncrement", "", 0)); //$NON-NLS-1$
49                 setColumns((Column[]) columns.toArray(new Column[columns.size()]));
50                 
51                 ResultSetMetaData metaData = set.getMetaData();
52                 
53                 List rowList = new ArrayList();
54                 for (int i = 1; i <= metaData.getColumnCount(); i++) {
55                         Vector row = new Vector();
56                         row.addElement(metaData.getColumnName(i));
57                         row.addElement(metaData.getColumnTypeName(i));
58                         int textSize = metaData.getColumnDisplaySize(i);
59                         int precision = metaData.getPrecision(i);
60                         int scale = metaData.getScale(i);
61                         if (scale == 0 && precision == 0) {
62                                 row.addElement(Integer.toString(precision));
63                         } else {
64                                 row.addElement(textSize + ", " + precision + ", " + scale); //$NON-NLS-1$ //$NON-NLS-2$
65                         }
66                         int nullable = metaData.isNullable(i);
67                         if (nullable == ResultSetMetaData.columnNoNulls) {
68                                 row.addElement("Not Null"); //$NON-NLS-1$
69                         } else if (nullable == ResultSetMetaData.columnNullable) {
70                                 row.addElement("Nullable"); //$NON-NLS-1$
71                         } else if (
72                                 nullable == ResultSetMetaData.columnNullableUnknown) {
73                                 row.addElement("Nullable"); //$NON-NLS-1$
74                         } else {
75                                 row.addElement("<Error>"); //$NON-NLS-1$
76                         }
77                         row.addElement(
78                                 (metaData.isAutoIncrement(i)
79                                         ? Boolean.TRUE
80                                         : Boolean.FALSE)
81                                         .toString());
82                         rowList.add(new Row(row));
83                 }
84                 setRows((Row[]) rowList.toArray(new Row[rowList.size()]));
85                 set.close();
86         }
87
88         public boolean isMetaData() {
89                 return true;
90         }
91 }