initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / adapters / DatabaseAdapter.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/adapters/DatabaseAdapter.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/adapters/DatabaseAdapter.java
new file mode 100644 (file)
index 0000000..d17e8b0
--- /dev/null
@@ -0,0 +1,198 @@
+package com.quantum.adapters;
+
+import com.quantum.sql.SQLHelper;
+import com.quantum.util.StringUtil;
+
+/**
+ * Abstract base class for all the adapter classes. Most functions can be redefined in
+ * the adapters for the different databases. If the functions is not redefined, the base
+ * implementation (usually a direct call to the JDBC driver) is used.
+ * 
+ * @author root
+ */
+public abstract class DatabaseAdapter {
+    
+       /**
+        * Returns the SQL Query to get a list of the tables for the current user (schema) 
+        * @param info
+        * @return - A String with the SQL query 
+        */
+       public String getShowTableQuery(String schema, boolean isDefault) {
+               return null;
+       }
+       /**
+        * Returns the SQL Query to get a list of the queries for the current user (schema) 
+        * @param info
+        * @return - A String with the SQL query
+        */
+       public String getShowViewQuery(String schema, boolean isDefault) {
+               return null;
+       }
+       /**
+        * Returns the SQL Query to get a list of the sequences for the current user (schema) 
+        * @param info
+        * @return - A String with the SQL query
+        */
+       public String getShowSequenceQuery(String schema, boolean isDefault) {
+        return null;
+       }
+
+       /** Returns the SQL Query to access all the columns of a table (SELECT)
+        * @param info
+        * @param table
+        * @return - A String with the SQL query
+        */
+       public String getTableQuery( String table) {
+                       return "SELECT * FROM " + filterTableName(table); //$NON-NLS-1$
+       }
+    
+       /**
+        * Gets the SQL query to get the next value of a sequence, (incrementing it).
+        * @param sequence - The name of the sequence
+        * @param owner - The owner (schema) of it
+        * @return - A string with the SQL query
+        */
+       public String getNextValue(String sequence, String owner) {
+        return null;
+       }
+       /**
+        * Gets the SQL query to get the actual value (previously used) of a sequence, (the sequence is not altered).
+        * @param sequence - The name of the sequence
+        * @param owner - The owner (schema) of it
+        * @return - A string with the SQL query
+        */
+       public String getPrevValue(String sequence, String owner) {
+               return null;
+       }
+       /**
+        * Returns a query to get the comments on the columns of a table. 
+        * Should return a query to generate a recordset with one row where
+        * the first and only column is the comment
+        * @param tableName - The full name of the table qualified with schema if applicable
+        * @param columnName - The name of the column
+        */
+       public String getCommentsQuery(String tableName, String columnName) {
+               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 " + filterTableName(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, String typeString) {
+               if (isTextType(type, typeString)) {
+                       return "'" + StringUtil.substituteString(string, "'", "''") + "'";
+               } else if (type == java.sql.Types.DATE || type == java.sql.Types.TIMESTAMP){            
+                       string = string.trim();
+                       //Check if we have to strip the millisecods
+                       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); // strip the milliseconds
+                               
+                       return "'" + string + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+
+               }
+               return string;
+       }
+    
+    /**
+     * Indicates whether or not a particular type should be quoted in 
+     * SQL statements.  Some databases support non-standard types such as
+     * TEXT that aren't normally recognized as quoted types.
+     * 
+     * @param type according to java.sql.Types
+     * @param typeString if the type is "Other".
+     * @return
+     */
+    protected boolean isTextType(int type, String typeString) {
+        return SQLHelper.isText(type);
+    }
+    
+    
+       /**
+        * Makes an SQL insert string with the given table, names of columns and values
+        * @param string
+        * @param namesClause
+        * @param valuesClause
+        * @return
+        */
+       public String getInsert(String tableName, String namesClause, String valuesClause) {
+               String query = "INSERT INTO " + filterTableName(tableName);
+               if (namesClause != "") {
+                                       query += " (" + namesClause + ")";
+                                       query += " VALUES " + "(" + valuesClause; //$NON-NLS-1$
+                                       query += " )"; //$NON-NLS-1$
+                               }
+               return query;
+       }
+       /**
+        * Changes the name of the table, usually to allow for lowercase situations.
+        * The parent implementation does nothing to the tableName, simply returns it.
+        * @param tableName
+        * @return
+        */
+       public String filterTableName(String tableName) {
+               return tableName;
+       }
+       /**
+        * Returns a query to get the number of registers from a table
+        * @param tableName
+        * @return
+        */
+       public String getCountQuery(String tableName) {
+               return "SELECT COUNT(*) FROM " + filterTableName(tableName);    
+       }
+       /**
+        * @param string
+        * @param string2
+        * @param whereClause
+        * @param string3
+        */
+       public void getUpdate(String tableName, String string2, StringBuffer whereClause, String string3) {
+               // TODO Auto-generated method stub
+               
+       }
+       /**
+        * Returns an SQL UPDATE statement
+        * @param string
+        * @param string2
+        * @param string3
+        */
+       public String getUpdate(String tableName, String setClause, String whereClause) {
+               String query = "UPDATE " + filterTableName(tableName); //$NON-NLS-1$
+               query += " SET " + setClause; //$NON-NLS-1$
+               if (!whereClause.equals("")) query += " WHERE " + whereClause; //$NON-NLS-1$
+               return query;
+       }
+       /**
+        * Returns an SQL DELETE statement
+        * @param string
+        * @param string2
+        * @return
+        */
+       public String getDelete(String tableName, String whereClause) {
+               String query = "DELETE FROM " + filterTableName(tableName); //$NON-NLS-1$
+               if (!whereClause.equals("")) {
+                       query += " WHERE " + whereClause; //$NON-NLS-1$
+               }
+               return query;
+       }
+    /**
+     * @param userid - the userid used to connect to the database
+     * @return the default schema for the database
+     */
+    public String getDefaultSchema(String userid) {
+        return userid;
+    }
+}
\ No newline at end of file