/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.extension.jdbc.gen.internal.meta; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.Arrays; import java.util.List; import java.util.Set; import org.junit.Test; import org.seasar.extension.jdbc.gen.internal.dialect.StandardGenDialect; import org.seasar.extension.jdbc.gen.meta.DbColumnMeta; import org.seasar.extension.jdbc.gen.meta.DbForeignKeyMeta; import org.seasar.extension.jdbc.gen.meta.DbTableMeta; import org.seasar.extension.jdbc.gen.meta.DbUniqueKeyMeta; import org.seasar.extension.jdbc.gen.mock.sql.GenMockDatabaseMetaData; import org.seasar.framework.mock.sql.MockDataSource; import org.seasar.framework.mock.sql.MockResultSet; import org.seasar.framework.util.ArrayMap; import static org.junit.Assert.*; /** * @author taedium * */ public class DbTableMetaReaderImplTest { /** * * @throws Exception */ @Test public void testGetPrimaryKeySet() throws Exception { final MockResultSet resultSet = new MockResultSet(); ArrayMap rowData = new ArrayMap(); rowData.put("COLUMN_NAME", "pk1"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("COLUMN_NAME", "pk2"); resultSet.addRowData(rowData); GenMockDatabaseMetaData metaData = new GenMockDatabaseMetaData() { @Override public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException { return resultSet; } }; DbTableMetaReaderImpl reader = new DbTableMetaReaderImpl( new MockDataSource(), new StandardGenDialect(), "schemaName", ".*", "", false); Set<String> list = reader.getPrimaryKeySet(metaData, new DbTableMeta()); assertEquals(2, list.size()); assertTrue(list.contains("pk1")); assertTrue(list.contains("pk2")); } /** * * @throws Exception */ @Test public void testGetDbColumnMetaList() throws Exception { final MockResultSet resultSet = new MockResultSet(); ArrayMap rowData = new ArrayMap(); rowData.put("COLUMN_NAME", "column1"); rowData.put("DATA_TYPE", Types.DECIMAL); rowData.put("TYPE_NAME", "DECIMAL"); rowData.put("COLUMN_SIZE", 10); rowData.put("DECIMAL_DIGITS", 3); rowData.put("NULLABLE", DatabaseMetaData.columnNoNulls); rowData.put("COLUMN_DEF", "10.5"); rowData.put("REMARKS", "comment1"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("COLUMN_NAME", "column2"); rowData.put("DATA_TYPE", Types.VARCHAR); rowData.put("TYPE_NAME", "VARCHAR"); rowData.put("COLUMN_SIZE", 10); rowData.put("DECIMAL_DIGITS", 0); rowData.put("NULLABLE", DatabaseMetaData.columnNullable); rowData.put("COLUMN_DEF", "aaa"); rowData.put("REMARKS", "comment2"); resultSet.addRowData(rowData); GenMockDatabaseMetaData metaData = new GenMockDatabaseMetaData() { @Override public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException { return resultSet; } }; DbTableMetaReaderImpl reader = new DbTableMetaReaderImpl( new MockDataSource(), new StandardGenDialect(), "schemaName", ".*", "", true); List<DbColumnMeta> list = reader.getDbColumnMetaList(metaData, new DbTableMeta()); assertEquals(2, list.size()); DbColumnMeta columnMeta = list.get(0); assertEquals("column1", columnMeta.getName()); assertEquals(Types.DECIMAL, columnMeta.getSqlType()); assertEquals("DECIMAL", columnMeta.getTypeName()); assertEquals(10, columnMeta.getLength()); assertEquals(3, columnMeta.getScale()); assertFalse(columnMeta.isNullable()); assertEquals("10.5", columnMeta.getDefaultValue()); assertEquals("comment1", columnMeta.getComment()); columnMeta = list.get(1); assertEquals("column2", columnMeta.getName()); assertEquals(Types.VARCHAR, columnMeta.getSqlType()); assertEquals("VARCHAR", columnMeta.getTypeName()); assertEquals(10, columnMeta.getLength()); assertEquals(0, columnMeta.getScale()); assertTrue(columnMeta.isNullable()); assertEquals("aaa", columnMeta.getDefaultValue()); assertEquals("comment2", columnMeta.getComment()); } /** * * @throws Exception */ @Test public void testGetDbTableMetaList() throws Exception { final MockResultSet resultSet = new MockResultSet(); ArrayMap rowData = new ArrayMap(); rowData.put("TABLE_CAT", "catalog1"); rowData.put("TABLE_SCHEM", "schemaName1"); rowData.put("TABLE_NAME", "table1"); rowData.put("REMARKS", "comment1"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("TABLE_CAT", "catalog2"); rowData.put("TABLE_SCHEM", "schemaName2"); rowData.put("TABLE_NAME", "table2"); rowData.put("REMARKS", "comment2"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("TABLE_CAT", "catalog3"); rowData.put("TABLE_SCHEM", "schemaName3"); rowData.put("TABLE_NAME", "table3"); rowData.put("REMARKS", "comment3"); resultSet.addRowData(rowData); GenMockDatabaseMetaData metaData = new GenMockDatabaseMetaData() { @Override public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException { return resultSet; } }; DbTableMetaReaderImpl reader = new DbTableMetaReaderImpl( new MockDataSource(), new StandardGenDialect(), "schemaName", ".*", "TABLE3", true); List<DbTableMeta> list = reader.getDbTableMetaList(metaData, "schemaName"); assertEquals(2, list.size()); assertEquals("catalog1", list.get(0).getCatalogName()); assertEquals("schemaName1", list.get(0).getSchemaName()); assertEquals("table1", list.get(0).getName()); assertEquals("comment1", list.get(0).getComment()); assertEquals("catalog2", list.get(1).getCatalogName()); assertEquals("schemaName2", list.get(1).getSchemaName()); assertEquals("table2", list.get(1).getName()); assertEquals("comment2", list.get(1).getComment()); } /** * * @throws Exception */ @Test public void testGetDbForeignKeyMetaList() throws Exception { final MockResultSet resultSet = new MockResultSet(); ArrayMap rowData = new ArrayMap(); rowData.put("PKTABLE_CAT", "dept_catalog"); rowData.put("PKTABLE_SCHEM", "dept_schema"); rowData.put("PKTABLE_NAME", "dept"); rowData.put("PKCOLUMN_NAME", "dept_no"); rowData.put("FKCOLUMN_NAME", "dept_no_fk"); rowData.put("FK_NAME", "emp_fk1"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("PKTABLE_CAT", "dept_catalog"); rowData.put("PKTABLE_SCHEM", "dept_schema"); rowData.put("PKTABLE_NAME", "dept"); rowData.put("PKCOLUMN_NAME", "dept_name"); rowData.put("FKCOLUMN_NAME", "dept_name_fk"); rowData.put("FK_NAME", "emp_fk1"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("PKTABLE_CAT", "address_catalog"); rowData.put("PKTABLE_SCHEM", "address_schema"); rowData.put("PKTABLE_NAME", "address"); rowData.put("PKCOLUMN_NAME", "address_name"); rowData.put("FKCOLUMN_NAME", "address_name_fk"); rowData.put("FK_NAME", "emp_fk2"); resultSet.addRowData(rowData); GenMockDatabaseMetaData metaData = new GenMockDatabaseMetaData() { @Override public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException { return resultSet; } }; DbTableMetaReaderImpl reader = new DbTableMetaReaderImpl( new MockDataSource(), new StandardGenDialect(), null, ".*", "", false); List<DbForeignKeyMeta> list = reader.getDbForeignKeyMetaList(metaData, new DbTableMeta()); assertEquals(2, list.size()); DbForeignKeyMeta fkMeta = list.get(0); assertEquals("emp_fk1", fkMeta.getName()); assertEquals("dept_catalog", fkMeta.getPrimaryKeyCatalogName()); assertEquals("dept_schema", fkMeta.getPrimaryKeySchemaName()); assertEquals("dept", fkMeta.getPrimaryKeyTableName()); assertEquals(2, fkMeta.getPrimaryKeyColumnNameList().size()); assertEquals(Arrays.asList("dept_no", "dept_name"), fkMeta .getPrimaryKeyColumnNameList()); assertEquals(2, fkMeta.getForeignKeyColumnNameList().size()); assertEquals(Arrays.asList("dept_no_fk", "dept_name_fk"), fkMeta .getForeignKeyColumnNameList()); fkMeta = list.get(1); assertEquals("emp_fk2", fkMeta.getName()); assertEquals("address_catalog", fkMeta.getPrimaryKeyCatalogName()); assertEquals("address_schema", fkMeta.getPrimaryKeySchemaName()); assertEquals("address", fkMeta.getPrimaryKeyTableName()); assertEquals(1, fkMeta.getPrimaryKeyColumnNameList().size()); assertEquals(Arrays.asList("address_name"), fkMeta .getPrimaryKeyColumnNameList()); assertEquals(1, fkMeta.getForeignKeyColumnNameList().size()); assertEquals(Arrays.asList("address_name_fk"), fkMeta .getForeignKeyColumnNameList()); } /** * * @throws Exception */ @Test public void testGetDbUniqueKeyMetaList() throws Exception { final MockResultSet resultSet = new MockResultSet(); ArrayMap rowData = new ArrayMap(); rowData.put("INDEX_NAME", "hoge"); rowData.put("COLUMN_NAME", "aaa"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("INDEX_NAME", "hoge"); rowData.put("COLUMN_NAME", "bbb"); resultSet.addRowData(rowData); rowData = new ArrayMap(); rowData.put("INDEX_NAME", "foo"); rowData.put("COLUMN_NAME", "ccc"); resultSet.addRowData(rowData); GenMockDatabaseMetaData metaData = new GenMockDatabaseMetaData() { @Override public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException { return resultSet; } }; DbTableMetaReaderImpl reader = new DbTableMetaReaderImpl( new MockDataSource(), new StandardGenDialect(), null, ".*", "", false); List<DbUniqueKeyMeta> list = reader.getDbUniqueKeyMetaList(metaData, new DbTableMeta()); assertEquals(2, list.size()); DbUniqueKeyMeta ukMeta = list.get(0); assertEquals("hoge", ukMeta.getName()); assertEquals(2, ukMeta.getColumnNameList().size()); assertEquals("aaa", ukMeta.getColumnNameList().get(0)); assertEquals("bbb", ukMeta.getColumnNameList().get(1)); ukMeta = list.get(1); assertEquals("foo", ukMeta.getName()); assertEquals(1, ukMeta.getColumnNameList().size()); assertEquals("ccc", ukMeta.getColumnNameList().get(0)); } }