Importing the XDebugProxy code in the HEAD. The repo was tagged with T_BEFORE_XDEBUGP...
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.sql / src / net / sourceforge / phpdt / sql / adapters / DatabaseAdapter.java
index 0dd42e6..af667cc 100644 (file)
 package net.sourceforge.phpdt.sql.adapters;
 
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+import net.sourceforge.phpdt.sql.model.Entity;
+import net.sourceforge.phpdt.sql.model.EntityFactory;
+import net.sourceforge.phpdt.sql.sql.DbElementsConstants;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.SQLHelper;
+import net.sourceforge.phpdt.sql.sql.SQLResults;
+
+/**
+ * @author root
+ * Abstract base class for all the adapter classes
+ */
 public abstract class DatabaseAdapter {
-       public abstract DatabaseAdapter getInstance();
-    public abstract String getShowTableQuery(DatabaseInfo info);
-    public String getShowViewQuery(DatabaseInfo info) {
-        throw new FeatureNotSupported("Views");
-    }
-    public String getShowSequenceQuery(DatabaseInfo info) {
-        throw new FeatureNotSupported("Sequences");
-    }
+    
+       public abstract String getShowTableQuery(DatabaseInfo info);
+       public String getShowViewQuery(DatabaseInfo info) {
+               return null;
+       }
+       public String getShowSequenceQuery(DatabaseInfo info) {
+        return null;
+       }
        public final String getShowTableQuery(DatabaseInfo info, String table) {
                String schema = info.getSchema();
-               if (schema.equals("")) {
-               return "SELECT * FROM " + table;
+               if (schema.equals("")) { //$NON-NLS-1$
+                       return "SELECT * FROM " + table; //$NON-NLS-1$
                } else {
-               return "SELECT * FROM " + info.getSchema() + "." + table;
+                       return "SELECT * FROM " + info.getSchema() + "." + table; //$NON-NLS-1$ //$NON-NLS-2$
                }
        }
-    public final String getTableCountQuery(DatabaseInfo info, String table) {
-               String schema = info.getSchema();
-               if (schema.equals("")) {
-               return "SELECT COUNT(*) FROM " + table;
-               } else {
-               return "SELECT COUNT(*) FROM " + info.getSchema() + "." + table;
+    
+    
+    
+    // BCH: Not used
+//     public final String getTableCountQuery(DatabaseInfo info, String table) {
+//             String schema = info.getSchema();
+//             if (schema.equals("")) { //$NON-NLS-1$
+//                     return "SELECT COUNT(*) FROM " + table; //$NON-NLS-1$
+//             } else {
+//                     return "SELECT COUNT(*) FROM " + info.getSchema() + "." + table; //$NON-NLS-1$ //$NON-NLS-2$
+//             }
+//     }
+       public String getNextValue(String sequence) {
+        return null;
+       }
+       //Doesn't seem to be used at the moment
+//     public String getTableListFilter() {
+//             return null;
+//     }
+
+       /**
+        * @param table
+        * @return : A query to get an empty ResultSet (null if failed) for that table or view.
+        * Subclassed if needed by the different database adapters
+        */
+       public String getEmptySetQuery(String table){
+               return "SELECT * FROM " + table + " WHERE (1 = 0)"; //$NON-NLS-1$ //$NON-NLS-2$
+       }
+    
+       /**
+        * Quotes a string according to the type of the column 
+        * @param string to be quoted
+        * @param type according to java.sql.Types
+        * @return
+        */
+       public String quote(String string, int type) {
+               if (SQLHelper.isText(type)){
+                       if (string.indexOf('\'') >= 0)
+                               return '"' + string + '"';
+                       else
+                               return "'" + string + "'";                                               //$NON-NLS-1$ //$NON-NLS-2$
                }
+               else if (type == java.sql.Types.DATE || type == java.sql.Types.TIMESTAMP){              
+                       string = string.trim();
+                       String sub = string.substring(string.length() - 2, string.length() - 1);
+                       if (string.length() > 1 && sub.equals(".")) //$NON-NLS-1$
+                               string = string.substring(0, string.length() - 2);
+                       return "'" + string + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+
+               }
+               return string;
+       }
+    
+    
+    /**
+     * Get a list of entities (tables, views, sequences) for a particular
+     * bookmark.
+     * 
+     * @param bookmark -
+     *     the bookmark that describes the database that is being accessed.
+     * @return 
+     *     an array of entity objects representing the tables, views and sequences.
+     * @throws SQLException
+     */
+    public Entity[] getEntities(Bookmark bookmark) throws SQLException {
+        Connection connection = bookmark.getConnection();
+        Entity[] result = getEntities(bookmark, connection);
+        return (result == null) ? new Entity[0] : result;
     }
-    public String getNextValue(String sequence) {
-        throw new FeatureNotSupported("Sequences");
+    
+    protected Entity[] getEntities(Bookmark bookmark, Connection connection) throws SQLException {
+        
+        List list = new ArrayList();
+        String[] types = { 
+            DbElementsConstants.Table, 
+            DbElementsConstants.View, 
+            DbElementsConstants.Sequence };
+            
+        for (int i = 0; i < types.length; i++) {
+            list.addAll(getEntitiesList(bookmark, connection, types[i]));
+        }
+
+        return (Entity[]) list.toArray(new Entity[0]);
     }
-    public String getTableListFilter() {
-        return null;
+
+    protected List getEntitiesList(Bookmark bookmark, Connection connection, String type) 
+        throws SQLException {
+            
+        String sql = getSQL(bookmark, type);
+        List list = new ArrayList();
+        
+        if (sql != null) {
+            SQLResults results = MultiSQLServer.getInstance().execute(connection, sql);
+            for (int i = 1, size = (results == null) ? 0 : results.getRowCount(); i <= size; i++) {
+                list.add(EntityFactory.getInstance().create(
+                    bookmark, bookmark.getSchema(), results.getElement(1, i).toString(), type));
+            }
+        }
+        return list;
+    }
+
+    private String getSQL(Bookmark bookmark, String type) {
+        DatabaseInfo info = DatabaseInfo.create(bookmark);
+        if (DbElementsConstants.Table.equals(type)) {
+            return getShowTableQuery(info);
+        } else if (DbElementsConstants.View.equals(type)) {
+            return getShowViewQuery(info);
+        } else if (DbElementsConstants.Sequence.equals(type)) {
+            return getShowSequenceQuery(info);
+        } else {
+            return null;
+        }
     }
 }
\ No newline at end of file