You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/08/08 22:13:28 UTC
svn commit: r684074 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src:
main/java/org/apache/ibatis/metadata/ test/java/org/apache/ibatis/metadata/
Author: cbegin
Date: Fri Aug 8 13:13:28 2008
New Revision: 684074
URL: http://svn.apache.org/viewvc?rev=684074&view=rev
Log:
Added DB Metadata classes
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Column.java (with props)
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Database.java (with props)
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/DatabaseFactory.java (with props)
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Table.java (with props)
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/MetadataTest.java (with props)
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Column.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Column.java?rev=684074&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Column.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Column.java Fri Aug 8 13:13:28 2008
@@ -0,0 +1,40 @@
+package org.apache.ibatis.metadata;
+
+public class Column {
+
+ private String name;
+ private int type;
+
+ public Column(String name, int type) {
+ this.name = name;
+ this.type = type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final Column column = (Column) o;
+
+ if (type != column.type) return false;
+ if (name != null ? !name.equals(column.name) : column.name != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (name != null ? name.hashCode() : 0);
+ result = 29 * result + type;
+ return result;
+ }
+
+}
Propchange: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Column.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Database.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Database.java?rev=684074&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Database.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Database.java Fri Aug 8 13:13:28 2008
@@ -0,0 +1,57 @@
+package org.apache.ibatis.metadata;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Database {
+
+ private String catalog;
+ private String schema;
+
+ private Map tables = new HashMap();
+
+ public Database(String catalog, String schema) {
+ this.catalog = catalog;
+ this.schema = schema;
+ }
+
+ public String getCatalog() {
+ return catalog;
+ }
+
+ public String getSchema() {
+ return schema;
+ }
+
+ public void addTable(Table table) {
+ tables.put(table.getName().toUpperCase(), table);
+ }
+
+ public Table getTable(String name) {
+ return (Table)tables.get(name.toUpperCase());
+ }
+
+ public String[] getTableNames() {
+ return (String[])tables.keySet().toArray(new String[tables.size()]);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final Database database = (Database) o;
+
+ if (catalog != null ? !catalog.equals(database.catalog) : database.catalog != null) return false;
+ if (schema != null ? !schema.equals(database.schema) : database.schema != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (catalog != null ? catalog.hashCode() : 0);
+ result = 29 * result + (schema != null ? schema.hashCode() : 0);
+ return result;
+ }
+
+}
Propchange: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Database.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/DatabaseFactory.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/DatabaseFactory.java?rev=684074&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/DatabaseFactory.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/DatabaseFactory.java Fri Aug 8 13:13:28 2008
@@ -0,0 +1,58 @@
+package org.apache.ibatis.metadata;
+
+import javax.sql.DataSource;
+import java.sql.*;
+
+public class DatabaseFactory {
+ private DatabaseFactory() {
+ }
+
+ public static Database newDatabase(DataSource dataSource, String catalogFilter, String schemaFilter) throws SQLException {
+ Database database = new Database(catalogFilter, schemaFilter);
+ Connection conn = dataSource.getConnection();
+ ResultSet rs = null;
+ try {
+ DatabaseMetaData dbmd = conn.getMetaData();
+
+ try {
+ rs = dbmd.getColumns(catalogFilter, schemaFilter, null, null);
+ while (rs.next()) {
+ String catalogName = rs.getString("TABLE_CAT");
+ String schemaName = rs.getString("TABLE_SCHEM");
+ String tableName = rs.getString("TABLE_NAME");
+ String columnName = rs.getString("COLUMN_NAME");
+ int dataType = Integer.parseInt(rs.getString("DATA_TYPE"));
+ Table table = database.getTable(tableName);
+ if (table == null) {
+ table = new Table(tableName);
+ table.setCatalog(catalogName);
+ table.setSchema(schemaName);
+ database.addTable(table);
+ }
+ table.addColumn(new Column(columnName, dataType));
+ }
+ } finally {
+ if (rs != null) rs.close();
+ }
+
+ try {
+ String[] tableNames = database.getTableNames();
+ for (int i=0; i < tableNames.length; i++) {
+ Table table = database.getTable(tableNames[i]);
+ rs = dbmd.getPrimaryKeys(catalogFilter, schemaFilter, table.getName());
+ if (rs.next()) {
+ String columnName = rs.getString("COLUMN_NAME");
+ table.setPrimaryKey (table.getColumn(columnName));
+ }
+ }
+ } finally {
+ if (rs != null) rs.close();
+ }
+
+ } finally {
+ conn.close();
+ }
+ return database;
+ }
+
+}
Propchange: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/DatabaseFactory.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Table.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Table.java?rev=684074&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Table.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Table.java Fri Aug 8 13:13:28 2008
@@ -0,0 +1,69 @@
+package org.apache.ibatis.metadata;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Table {
+ private String name;
+ private String catalog;
+ private String schema;
+ private Map columns = new HashMap();
+ private Column primaryKey;
+
+ public Table(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getCatalog() {
+ return catalog;
+ }
+
+ public void setCatalog(String catalog) {
+ this.catalog = catalog;
+ }
+
+ public String getSchema() {
+ return schema;
+ }
+
+ public void setSchema(String schema) {
+ this.schema = schema;
+ }
+
+ public void addColumn(Column col) {
+ columns.put(col.getName().toUpperCase(), col);
+ }
+
+ public Column getColumn(String name) {
+ return (Column) columns.get(name.toUpperCase());
+ }
+
+ public String[] getColumnNames() {
+ return (String[]) columns.keySet().toArray(new String[columns.size()]);
+ }
+
+ public void setPrimaryKey(Column column) {
+ primaryKey = column;
+ }
+
+ public Column getPrimaryKey() {
+ return primaryKey;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ final Table table = (Table) o;
+ if (name != null ? !name.equals(table.name) : table.name != null) return false;
+ return true;
+ }
+
+ public int hashCode() {
+ return (name != null ? name.hashCode() : 0);
+ }
+
+}
Propchange: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/metadata/Table.java
------------------------------------------------------------------------------
svn:executable = *
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/MetadataTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/MetadataTest.java?rev=684074&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/MetadataTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/MetadataTest.java Fri Aug 8 13:13:28 2008
@@ -0,0 +1,59 @@
+package org.apache.ibatis.metadata;
+
+import org.apache.ibatis.BaseDataTest;
+import org.junit.Test;
+import org.junit.Before;
+
+import javax.sql.DataSource;
+
+import junit.framework.Assert;
+
+import java.sql.Types;
+
+public class MetadataTest extends BaseDataTest {
+
+ private DataSource dataSource;
+
+ @Before
+ public void setup() throws Exception {
+ dataSource = createSimpleDataSource(BaseDataTest.BLOG_PROPERTIES);
+ }
+
+ @Test
+ public void testShouldGetAllTableNames() throws Exception {
+ Database db = DatabaseFactory.newDatabase(dataSource,null,"APP");
+ Assert.assertNotNull(db.getTable("blog"));
+ Assert.assertNotNull(db.getTable("Author"));
+ Assert.assertNotNull(db.getTable("tAg"));
+ Assert.assertNotNull(db.getTable("PosT"));
+ }
+
+ @Test
+ public void testShouldEnsureDatabasesTablesAndColumnsEqualityWorks() throws Exception {
+ Database db = DatabaseFactory.newDatabase(dataSource, null, null);
+ Database db2 = DatabaseFactory.newDatabase(dataSource, null, null);
+ Assert.assertNotNull(db);
+ Assert.assertTrue(db.equals(db2));
+ Assert.assertTrue(db.hashCode() == db.hashCode());
+ Table t = db.getTable("blog");
+ Table t2 = db.getTable("author");
+ Assert.assertNotNull(t);
+ Assert.assertNotNull(t2);
+ Assert.assertFalse(t.equals(t2));
+ Assert.assertTrue(t.getCatalog().equals(t.getCatalog()));
+ Assert.assertTrue(t.getSchema().equals(t.getSchema()));
+ Assert.assertTrue(t.equals(t));
+ Assert.assertTrue(t.hashCode() == t.hashCode());
+ Assert.assertEquals("BLOG",t.getName());
+ Assert.assertEquals(3, t.getColumnNames().length);
+ Column c = t.getColumn("author_id");
+ Column c2 = t.getColumn("id");
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(c2);
+ Assert.assertEquals(Types.INTEGER, c.getType());
+ Assert.assertFalse(c.equals(c2));
+ Assert.assertTrue(c.equals(c));
+ Assert.assertTrue(c.hashCode() == c.hashCode());
+ }
+
+}
Propchange: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/metadata/MetadataTest.java
------------------------------------------------------------------------------
svn:executable = *