X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java index 0dd42e6..af667cc 100644 --- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java +++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java @@ -1,34 +1,150 @@ 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