OPENJPA-2816 had to revert dd9bce0cc9 due to side effect

Changing the delimitedFromDb handling had a negative side effect on PostgreSQL.
Postgres uses all lower internally, thus comparing those from the db to the generated
columns does not get detected as equal, which leads to wrong metadata.

We have to come back to HerdDB and also need to re-evaluate DBDict#delimitAll.
This commit is contained in:
Mark Struberg 2021-05-03 23:29:48 +02:00
parent 813154a570
commit cb4e47b82c
3 changed files with 8 additions and 13 deletions

View File

@ -116,9 +116,7 @@ public class ClassTableJDBCSeq
@Override
protected Column addPrimaryKeyColumn(Table table) {
DBDictionary dict = getConfiguration().getDBDictionaryInstance();
DBIdentifier delimitedColumnName = dict.fromDBName(getPrimaryKeyColumn(), DBIdentifier.DBIdentifierType.COLUMN);
Column pkColumn = table.addColumn(dict.getValidColumnName
(delimitedColumnName, table));
Column pkColumn = table.addColumn(dict.getValidColumnName(getPrimaryKeyColumnIdentifier(), table));
pkColumn.setType(dict.getPreferredType(Types.VARCHAR));
pkColumn.setJavaType(JavaTypes.STRING);
pkColumn.setSize(dict.characterColumnSize);

View File

@ -167,7 +167,7 @@ public class TableJDBCSeq extends AbstractJDBCSeq implements Configurable {
* <code>ID</code>.
*/
public void setPrimaryKeyColumn(String primaryKeyColumn) {
_pkColumnName = DBIdentifier.newColumn(primaryKeyColumn);
_pkColumnName = DBIdentifier.newColumn(primaryKeyColumn, _conf.getDBDictionaryInstance().delimitAll());
}
/**
@ -375,9 +375,7 @@ public class TableJDBCSeq extends AbstractJDBCSeq implements Configurable {
*/
protected Column addPrimaryKeyColumn(Table table) {
DBDictionary dict = _conf.getDBDictionaryInstance();
DBIdentifier delimitedColumnName = dict.fromDBName(getPrimaryKeyColumn(), DBIdentifier.DBIdentifierType.COLUMN);
Column pkColumn = table.addColumn(dict.getValidColumnName
(delimitedColumnName, table));
Column pkColumn = table.addColumn(dict.getValidColumnName(getPrimaryKeyColumnIdentifier(), table));
pkColumn.setType(dict.getPreferredType(Types.TINYINT));
pkColumn.setJavaType(JavaTypes.INT);
return pkColumn;

View File

@ -18,13 +18,12 @@
*/
package org.apache.openjpa.jdbc.kernel;
import static org.jmock.AbstractExpectations.returnValue;
import static org.junit.Assert.assertEquals;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.util.function.Supplier;
import javax.sql.DataSource;
import org.junit.Ignore;
import org.junit.Test;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
@ -41,13 +40,12 @@ 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 ResultSet mockRS = context.mock(ResultSet.class);
final DataSource mockDS = context.mock(DataSource.class);
final DatabaseMetaData mockMetaData = context.mock(DatabaseMetaData.class);
@Test
@ -151,7 +149,8 @@ public class TableJDBCSeqTest {
Column result = instance.addPrimaryKeyColumn(table);
if (dict.delimitAll()) {
assertEquals("\"ID\"", result.getIdentifier().getName());
final DBIdentifier identifier = result.getIdentifier();
assertEquals("\"ID\"", identifier.getName());
} else {
assertEquals("ID", result.getIdentifier().getName());
}