fixed ID bug
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / adapters / PostgresAdapter.java
1 package com.quantum.adapters;
2
3 import com.quantum.sql.SQLHelper;
4 import com.quantum.util.QuantumUtil;
5 import com.quantum.util.sql.TypesHelper;
6
7
8 public class PostgresAdapter extends DatabaseAdapter {
9     public String getShowTableQuery(String qualifier, boolean isDefault) {
10         return "SELECT SCHEMANAME, TABLENAME FROM PG_TABLES WHERE SCHEMANAME = '" 
11             + qualifier + "'";
12     }
13     public String getShowViewQuery(String qualifier, boolean isDefault) {
14         return "SELECT SCHEMANAME, VIEWNAME FROM PG_VIEWS WHERE SCHEMANAME = '" 
15             + qualifier + "'";
16     }
17     public String getShowSequenceQuery(String qualifier, boolean isDefault) {
18         return "SELECT SCHEMANAME, relname FROM pg_class WHERE relkind = 'S'" +
19             "AND SCHEMANAME = '" + qualifier + "'";
20     }
21         public String getNextValue(String sequence, String owner) {
22                 return "SELECT NEXTVAL('" + SQLHelper.getQualifiedName(owner, sequence) + "')";
23         }
24         public String getPrevValue(String sequence, String owner) {
25                 return "SELECT * FROM " + SQLHelper.getQualifiedName(owner, sequence);
26         }
27
28         /**
29          * Quotes a string according to the type of the column 
30          * @param string to be quoted
31          * @param type according to java.sql.Types
32          * @return
33          */
34         public String quote(String string, int type, String typeString) {
35                 // Booleans in PostgreSQL are queried "t" or "f", but require "true" or "false" when inputed.
36                 if (type == TypesHelper.BIT || type == TypesHelper.BOOLEAN ) // Postgresql seems to identify booleans as BITs
37                 {
38                         if (string.indexOf('t') >= 0 || string.indexOf('T') >= 0 )
39                                 return "true";
40                         else if (string.indexOf('f') >= 0 || string.indexOf('F') >= 0 )
41                                 return "false";
42                         else 
43                                 return string;
44                 }
45                 // use the default (upper type)
46                 return super.quote(string, type, typeString);
47         }
48
49     /**
50      * @see com.quantum.adapters.DatabaseAdapter#filterTableName(java.lang.String)
51      */
52     public String filterTableName(String tableName) {
53         // If there is no mixed case, better not quote, it's prettier on display
54         if (tableName.equals(tableName.toUpperCase())) return tableName;
55         // We quote the table name (and only the table name) because it has mixed case
56         if (QuantumUtil.getSchemaName(tableName).equals("")) {
57             return "\"" + tableName +"\""; //$NON-NLS-1$
58         } else {
59             return QuantumUtil.getSchemaName(tableName) + ".\"" + 
60                     QuantumUtil.getTableName(tableName) + "\"";
61         }
62     }
63     /**
64      * @see com.quantum.adapters.DatabaseAdapter#getDefaultSchema(java.lang.String)
65      */
66     public String getDefaultSchema(String userid) {
67         return "public";
68     }
69
70 }