fixed Bug 1024299
[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 Name", "", 0)); //$NON-NLS-1$
46                 columns.add(new Column("Size", "", 0)); //$NON-NLS-1$
47                 columns.add(new Column("Scale", "", 0)); //$NON-NLS-1$
48                 columns.add(new Column("Nullable", "", 0)); //$NON-NLS-1$
49                 columns.add(new Column("AutoIncrement", "", 0)); //$NON-NLS-1$
50                 columns.add(new Column("Type", "", 0)); //$NON-NLS-1$
51                 setColumns((Column[]) columns.toArray(new Column[columns.size()]));
52                 
53                 ResultSetMetaData metaData = set.getMetaData();
54                 
55                 List rowList = new ArrayList();
56                 for (int i = 1; i <= metaData.getColumnCount(); i++) {
57                         Vector row = new Vector();
58                         row.addElement(metaData.getColumnName(i));
59                         row.addElement(metaData.getColumnTypeName(i));
60                         int precision = metaData.getPrecision(i);
61                         if (precision == 0) {
62                                 precision = metaData.getColumnDisplaySize(i);
63                         }
64                         int scale = metaData.getScale(i);
65                         
66                         row.addElement(new Integer(precision));
67                         row.addElement(new Integer(scale));
68                         
69                         int nullable = metaData.isNullable(i);
70                         if (nullable == ResultSetMetaData.columnNoNulls) {
71                                 row.addElement("Not Null"); //$NON-NLS-1$
72                         } else if (nullable == ResultSetMetaData.columnNullable) {
73                                 row.addElement("Nullable"); //$NON-NLS-1$
74                         } else if (
75                                 nullable == ResultSetMetaData.columnNullableUnknown) {
76                                 row.addElement("Nullable"); //$NON-NLS-1$
77                         } else {
78                                 row.addElement("<Error>"); //$NON-NLS-1$
79                         }
80                         row.addElement(
81                                 (metaData.isAutoIncrement(i)
82                                         ? Boolean.TRUE
83                                         : Boolean.FALSE)
84                                         .toString());
85                         rowList.add(new Row(row));
86                         row.addElement(new Integer(metaData.getColumnType(i)));
87                 }
88                 setRows((Row[]) rowList.toArray(new Row[rowList.size()]));
89         }
90
91         public boolean isMetaData() {
92                 return true;
93         }
94 }