blob: fd31e41913bdfbc94e628d9b24851bc0d39ed728 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.openjpa.jdbc.kernel;
import static org.junit.Assert.assertEquals;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.util.function.Supplier;
import org.junit.Ignore;
import org.junit.Test;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
import org.apache.openjpa.jdbc.identifier.DBIdentifier;
import org.apache.openjpa.jdbc.schema.Column;
import org.apache.openjpa.jdbc.schema.Schema;
import org.apache.openjpa.jdbc.schema.SchemaGroup;
import org.apache.openjpa.jdbc.schema.Table;
import org.apache.openjpa.jdbc.sql.DBDictionary;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JUnitRuleMockery;
import org.junit.Rule;
/**
* Unit tests for TableJDBCSeq and subclasses.
*/
@Ignore // column delimitAll needs a complete overhault.
public class TableJDBCSeqTest {
@Rule
public JUnitRuleMockery context = new JUnitRuleMockery();
final Connection mockConnection = context.mock(Connection.class);
final DatabaseMetaData mockMetaData = context.mock(DatabaseMetaData.class);
@Test
public void testTableJDBCSeq() throws Exception {
testAddPrimaryKeyColumnWithDelimitAll(false, () -> new TableJDBCSeq());
}
@Test
public void testTableJDBCSeqDelimitAll() throws Exception {
testAddPrimaryKeyColumnWithDelimitAll(true, () -> new TableJDBCSeq());
}
@Test
public void testClassTableJDBCSeq() throws Exception {
testAddPrimaryKeyColumnWithDelimitAll(false, () -> new ClassTableJDBCSeq());
}
@Test
public void testClassTableJDBCSeqDelimitAll() throws Exception {
testAddPrimaryKeyColumnWithDelimitAll(true, () -> new ClassTableJDBCSeq());
}
@Test
public void testValueTableJDBCSeq() throws Exception {
testAddPrimaryKeyColumnWithDelimitAll(false, () -> new ValueTableJDBCSeq());
}
@Test
public void testValueTableJDBCSeqDelimitAll() throws Exception {
testAddPrimaryKeyColumnWithDelimitAll(true, () -> new ValueTableJDBCSeq());
}
/**
* Testing that addPrimaryKeyColumn returns a column identifier respecting dist#delimitAll.
*/
private void testAddPrimaryKeyColumnWithDelimitAll(boolean delimitAll,
Supplier<? extends TableJDBCSeq> builder) throws Exception {
JDBCConfiguration configurationImpl = new JDBCConfigurationImpl(false, false);
context.checking(new Expectations() {
{
// No activity on the connection other than getting the metadata.
allowing(mockConnection).getMetaData();
will(returnValue(mockMetaData));
allowing(mockMetaData).getDatabaseProductName();
will(returnValue("MockDB"));
allowing(mockMetaData).getDriverName();
will(returnValue("MockDB"));
allowing(mockMetaData).getDriverVersion();
will(returnValue("1.0"));
allowing(mockMetaData).getDatabaseProductVersion();
will(returnValue("10"));
allowing(mockMetaData).getDatabaseMajorVersion();
will(returnValue(10));
allowing(mockMetaData).getDatabaseMinorVersion();
will(returnValue(0));
allowing(mockMetaData).getJDBCMajorVersion();
will(returnValue(4));
allowing(mockMetaData).getJDBCMinorVersion();
will(returnValue(0));
allowing(mockMetaData).supportsMixedCaseIdentifiers();
will(returnValue(true));
allowing(mockMetaData).supportsMixedCaseQuotedIdentifiers();
will(returnValue(true));
allowing(mockMetaData).storesLowerCaseQuotedIdentifiers();
will(returnValue(false));
allowing(mockMetaData).storesUpperCaseQuotedIdentifiers();
will(returnValue(false));
allowing(mockMetaData).storesMixedCaseQuotedIdentifiers();
will(returnValue(false));
allowing(mockMetaData).supportsGetGeneratedKeys();
will(returnValue(false));
}
});
Table table = new Table(DBIdentifier.newTable("mytable"), new Schema(DBIdentifier.newSchema("myschema"), new SchemaGroup()));
TableJDBCSeq instance = new ClassTableJDBCSeq();
DBDictionary dict = new DBDictionary();
dict.setConfiguration(configurationImpl);
dict.setDelimitIdentifiers(delimitAll);
dict.connectedConfiguration(mockConnection);
configurationImpl.setDBDictionary(dict);
instance.setConfiguration(configurationImpl);
Column result = instance.addPrimaryKeyColumn(table);
if (dict.delimitAll()) {
final DBIdentifier identifier = result.getIdentifier();
assertEquals("\"ID\"", identifier.getName());
} else {
assertEquals("ID", result.getIdentifier().getName());
}
assertEquals(dict.delimitAll(), result.getIdentifier().isDelimited());
}
}