package com.quantum.adapters; import com.quantum.sql.SQLHelper; import com.quantum.util.QuantumUtil; import com.quantum.util.sql.TypesHelper; public class PostgresAdapter extends DatabaseAdapter { public String getShowTableQuery(String qualifier, boolean isDefault) { return "SELECT SCHEMANAME, TABLENAME FROM PG_TABLES WHERE SCHEMANAME = '" + qualifier + "'"; } public String getShowViewQuery(String qualifier, boolean isDefault) { return "SELECT SCHEMANAME, VIEWNAME FROM PG_VIEWS WHERE SCHEMANAME = '" + qualifier + "'"; } public String getShowSequenceQuery(String qualifier, boolean isDefault) { return "SELECT SCHEMANAME, relname FROM pg_class WHERE relkind = 'S'" + "AND SCHEMANAME = '" + qualifier + "'"; } public String getNextValue(String sequence, String owner) { return "SELECT NEXTVAL('" + SQLHelper.getQualifiedName(owner, sequence) + "')"; } public String getPrevValue(String sequence, String owner) { return "SELECT * FROM " + SQLHelper.getQualifiedName(owner, sequence); } /** * 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) { // Booleans in PostgreSQL are queried "t" or "f", but require "true" or "false" when inputed. if (type == TypesHelper.BIT || type == TypesHelper.BOOLEAN ) // Postgresql seems to identify booleans as BITs { if (string.indexOf('t') >= 0 || string.indexOf('T') >= 0 ) return "true"; else if (string.indexOf('f') >= 0 || string.indexOf('F') >= 0 ) return "false"; else return string; } // use the default (upper type) return super.quote(string, type, typeString); } /** * @see com.quantum.adapters.DatabaseAdapter#filterTableName(java.lang.String) */ public String filterTableName(String tableName) { // If there is no mixed case, better not quote, it's prettier on display if (tableName.equals(tableName.toUpperCase())) return tableName; // We quote the table name (and only the table name) because it has mixed case if (QuantumUtil.getSchemaName(tableName).equals("")) { return "\"" + tableName +"\""; //$NON-NLS-1$ } else { return QuantumUtil.getSchemaName(tableName) + ".\"" + QuantumUtil.getTableName(tableName) + "\""; } } /** * @see com.quantum.adapters.DatabaseAdapter#getDefaultSchema(java.lang.String) */ public String getDefaultSchema(String userid) { return "public"; } }