From fba595a302e394a20dd85529ba60707950d48ce6 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 12 Feb 2013 12:30:11 +0100 Subject: [PATCH] [#1977] Remove the confusing concept of having a "main key" as opposed to a "primary key" --- .../jooq/util/DefaultGeneratorStrategy.java | 2 +- .../jooq/util/GeneratorStrategyWrapper.java | 2 +- .../java/org/jooq/util/JavaGenerator.java | 16 ++++++------ .../jooq/util/AbstractTableDefinition.java | 26 ++++++------------- .../java/org/jooq/util/TableDefinition.java | 4 +-- .../main/java/org/jooq/UpdatableRecord.java | 4 +-- .../main/java/org/jooq/UpdatableTable.java | 13 ++++------ .../java/org/jooq/impl/AbstractRecord.java | 8 +++--- jOOQ/src/main/java/org/jooq/impl/DAOImpl.java | 2 +- .../src/main/java/org/jooq/impl/Executor.java | 4 +-- .../java/org/jooq/impl/InsertQueryImpl.java | 2 +- .../main/java/org/jooq/impl/LoaderImpl.java | 12 ++++----- .../main/java/org/jooq/impl/MergeImpl.java | 2 +- .../src/main/java/org/jooq/impl/MetaImpl.java | 2 +- .../org/jooq/impl/UpdatableRecordImpl.java | 18 ++++++------- .../org/jooq/impl/UpdatableTableImpl.java | 2 +- 16 files changed, 53 insertions(+), 66 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java index 1bcdc7551f..f76942029d 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java @@ -123,7 +123,7 @@ public class DefaultGeneratorStrategy extends AbstractGeneratorStrategy { if (mode == Mode.DAO) { TableDefinition table = (TableDefinition) definition; - List keyColumns = table.getMainUniqueKey().getKeyColumns(); + List keyColumns = table.getPrimaryKey().getKeyColumns(); String name = DAO.class.getName(); diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java index c3318d0528..722727ed0d 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java @@ -177,7 +177,7 @@ class GeneratorStrategyWrapper extends AbstractGeneratorStrategy { reserved = reservedColumns(UDTRecordImpl.class); } else if (definition instanceof ColumnDefinition) { - if (((ColumnDefinition) definition).getContainer().getMainUniqueKey() != null) { + if (((ColumnDefinition) definition).getContainer().getPrimaryKey() != null) { reserved = reservedColumns(UpdatableRecordImpl.class); } else { diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index 894a98bf7c..9a68757993 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -463,7 +463,7 @@ public class JavaGenerator extends AbstractGenerator { protected void generateRecord(TableDefinition table) { log.info("Generating record", getStrategy().getFileName(table, Mode.RECORD)); - final UniqueKeyDefinition key = table.getMainUniqueKey(); + final UniqueKeyDefinition key = table.getPrimaryKey(); final String className = getStrategy().getJavaClassName(table, Mode.RECORD); final String tableIdentifier = getStrategy().getFullJavaIdentifier(table); final String recordType = getStrategy().getFullJavaClassName(table, Mode.RECORD); @@ -1147,7 +1147,7 @@ public class JavaGenerator extends AbstractGenerator { String tType = "Void"; String pType = getStrategy().getFullJavaClassName(table, Mode.POJO); - UniqueKeyDefinition key = table.getMainUniqueKey(); + UniqueKeyDefinition key = table.getPrimaryKey(); ColumnDefinition keyColumn = null; if (key != null) { @@ -1352,7 +1352,7 @@ public class JavaGenerator extends AbstractGenerator { } protected void generateTable(SchemaDefinition schema, TableDefinition table) { - UniqueKeyDefinition mainKey = table.getMainUniqueKey(); + UniqueKeyDefinition primaryKey = table.getPrimaryKey(); final String className = getStrategy().getJavaClassName(table); final String fullClassName = getStrategy().getFullJavaClassName(table); @@ -1363,7 +1363,7 @@ public class JavaGenerator extends AbstractGenerator { log.info("Generating table", getStrategy().getFileName(table) + " [input=" + table.getInputName() + ", output=" + table.getOutputName() + - ", pk=" + (mainKey != null ? mainKey.getName() : "N/A") + + ", pk=" + (primaryKey != null ? primaryKey.getName() : "N/A") + "]"); JavaWriter out = new JavaWriter(getStrategy().getFile(table)); @@ -1371,7 +1371,7 @@ public class JavaGenerator extends AbstractGenerator { printClassJavadoc(out, table); Class baseClass; - if (generateRelations() && mainKey != null) { + if (generateRelations() && primaryKey != null) { baseClass = UpdatableTableImpl.class; } else { baseClass = TableImpl.class; @@ -1440,11 +1440,11 @@ public class JavaGenerator extends AbstractGenerator { } // The primary / main unique key - if (mainKey != null) { - final String keyFullId = getStrategy().getFullJavaIdentifier(mainKey); + if (primaryKey != null) { + final String keyFullId = getStrategy().getFullJavaIdentifier(primaryKey); out.tab(1).overrideInherit(); - out.tab(1).println("public %s<%s> getMainKey() {", UniqueKey.class, recordType); + out.tab(1).println("public %s<%s> getPrimaryKey() {", UniqueKey.class, recordType); out.tab(2).println("return %s;", keyFullId); out.tab(1).println("}"); } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java index 115db1b65c..fa212da7f1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java @@ -55,8 +55,8 @@ implements TableDefinition { private List uniqueKeys; private List foreignKeys; - private boolean mainUniqueKeyLoaded; - private UniqueKeyDefinition mainUniqueKey; + private boolean primaryKeyLoaded; + private UniqueKeyDefinition primaryKey; private boolean identityLoaded; private IdentityDefinition identity; @@ -65,30 +65,20 @@ implements TableDefinition { } @Override - public final UniqueKeyDefinition getMainUniqueKey() { - if (!mainUniqueKeyLoaded) { - mainUniqueKeyLoaded = true; + public final UniqueKeyDefinition getPrimaryKey() { + if (!primaryKeyLoaded) { + primaryKeyLoaded = true; // Try finding a primary key first for (ColumnDefinition column : getColumns()) { if (column.getPrimaryKey() != null) { - mainUniqueKey = column.getPrimaryKey(); - return mainUniqueKey; - } - } - - // Find best matching unique key. Matching algorithm: - // 1. Prefer single-column indexes - // 2. Prefer scalar-type indexes - for (ColumnDefinition column : getColumns()) { - for (UniqueKeyDefinition uniqueKey : column.getUniqueKeys()) { - mainUniqueKey = uniqueKey; - return mainUniqueKey; + primaryKey = column.getPrimaryKey(); + return primaryKey; } } } - return mainUniqueKey; + return primaryKey; } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/util/TableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/TableDefinition.java index 661f8d86ba..562ed5a2bc 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/TableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/TableDefinition.java @@ -69,9 +69,9 @@ public interface TableDefinition extends Definition { ColumnDefinition getColumn(int columnIndex); /** - * Get the primary key or the main unique key for this table + * Get the primary key for this table */ - UniqueKeyDefinition getMainUniqueKey(); + UniqueKeyDefinition getPrimaryKey(); /** * Get the unique keys for this table diff --git a/jOOQ/src/main/java/org/jooq/UpdatableRecord.java b/jOOQ/src/main/java/org/jooq/UpdatableRecord.java index eb5fe99a3a..f9d32b1238 100644 --- a/jOOQ/src/main/java/org/jooq/UpdatableRecord.java +++ b/jOOQ/src/main/java/org/jooq/UpdatableRecord.java @@ -84,7 +84,7 @@ public interface UpdatableRecord> extends TableReco UpdatableTable getTable(); /** - * A view holding values for the {@link UpdatableTable#getMainKey()} + * A view holding values for the {@link UpdatableTable#getPrimaryKey()} *

* This method returns a "view" of this record itself. Modifications to the * returned record will affect values in this record. @@ -294,7 +294,7 @@ public interface UpdatableRecord> extends TableReco * AND [version/timestamp fields = version/timestamp values] *

* This is in fact the same as calling - * delete(getTable().getMainKey().getFieldsArray()) + * delete(getTable().getPrimaryKey().getFieldsArray()) * * @return 1 if the record was deleted from the database. * 0 if deletion was not necessary. diff --git a/jOOQ/src/main/java/org/jooq/UpdatableTable.java b/jOOQ/src/main/java/org/jooq/UpdatableTable.java index eae6eb9d6d..05f941cd14 100644 --- a/jOOQ/src/main/java/org/jooq/UpdatableTable.java +++ b/jOOQ/src/main/java/org/jooq/UpdatableTable.java @@ -50,21 +50,18 @@ import org.jooq.conf.Settings; public interface UpdatableTable extends Table { /** - * Retrieve the table's main unique key. If there exists a - * PRIMARY KEY in the table, the PRIMARY KEY is - * returned. Otherwise, the most suitable UNIQUE KEY is - * returned. + * Retrieve the table's primary key * - * @return The main key. This is never null because - * {@link UpdatableTable}'s always have at least one key. + * @return The primary key. This is never null for an updatable + * table. */ - UniqueKey getMainKey(); + UniqueKey getPrimaryKey(); /** * Retrieve all of the table's unique keys. * * @return All keys. This is never null or empty, because - * {@link UpdatableTable}'s always have at least one key. This + * {@link UpdatableTable}'s always have at least a primary key. This * method returns an unmodifiable list. */ List> getKeys(); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java index 9943758168..50b8ec611c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java @@ -266,11 +266,11 @@ abstract class AbstractRecord extends AbstractStore implements Record { @Override public final void setValue(Field field, T value) { - UniqueKey mainKey = getMainKey(); + UniqueKey key = getPrimaryKey(); Value val = getValue0(field); // Normal fields' changed flag is always set to true - if (mainKey == null || !mainKey.getFields().contains(field)) { + if (key == null || !key.getFields().contains(field)) { val.setValue(value); } @@ -315,7 +315,7 @@ abstract class AbstractRecord extends AbstractStore implements Record { /** * Subclasses may override this */ - UniqueKey getMainKey() { + UniqueKey getPrimaryKey() { return null; } @@ -485,7 +485,7 @@ abstract class AbstractRecord extends AbstractStore implements Record { // flags should all be reset in order for the returned record to be // updatable using store() if (result instanceof AbstractRecord) { - UniqueKey key = ((AbstractRecord) result).getMainKey(); + UniqueKey key = ((AbstractRecord) result).getPrimaryKey(); if (key != null) { boolean isKeySet = true; diff --git a/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java b/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java index 789a04798d..5b89f1c645 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java @@ -268,7 +268,7 @@ public abstract class DAOImpl, P, T> implements DAO private final Field pk() { if (table instanceof UpdatableTable) { UpdatableTable updatable = (UpdatableTable) table; - UniqueKey key = updatable.getMainKey(); + UniqueKey key = updatable.getPrimaryKey(); if (key.getFields().size() == 1) { return key.getFields().get(0); diff --git a/jOOQ/src/main/java/org/jooq/impl/Executor.java b/jOOQ/src/main/java/org/jooq/impl/Executor.java index 34af9e2ed3..82053e209a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Executor.java +++ b/jOOQ/src/main/java/org/jooq/impl/Executor.java @@ -5440,7 +5440,7 @@ public class Executor implements Configuration { @Support public final > int executeUpdate(R record) throws DataAccessException { UpdateQuery update = updateQuery(record.getTable()); - Utils.addConditions(update, record, record.getTable().getMainKey().getFieldsArray()); + Utils.addConditions(update, record, record.getTable().getPrimaryKey().getFieldsArray()); update.setRecord(record); return update.execute(); } @@ -5470,7 +5470,7 @@ public class Executor implements Configuration { @Support public final > int executeDelete(R record) throws DataAccessException { DeleteQuery delete = deleteQuery(record.getTable()); - Utils.addConditions(delete, record, record.getTable().getMainKey().getFieldsArray()); + Utils.addConditions(delete, record, record.getTable().getPrimaryKey().getFieldsArray()); return delete.execute(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index 36ab73dcfe..fbb82d15b3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -375,7 +375,7 @@ class InsertQueryImpl extends AbstractStoreQuery implements Condition condition = null; List> key = new ArrayList>(); - for (Field f : into.getMainKey().getFields()) { + for (Field f : into.getPrimaryKey().getFields()) { Field field = (Field) f; Field value = (Field) insertMaps.getMap().get(field); diff --git a/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java b/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java index d8fd400b28..54faf8c99b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/LoaderImpl.java @@ -116,7 +116,7 @@ class LoaderImpl> implements private char separator = CSVParser.DEFAULT_SEPARATOR; private String nullString = null; private Field[] fields; - private boolean[] mainKey; + private boolean[] primaryKey; // Result data // ----------- @@ -270,13 +270,13 @@ class LoaderImpl> implements @Override public final LoaderImpl fields(Field... f) { this.fields = f; - this.mainKey = new boolean[f.length]; + this.primaryKey = new boolean[f.length]; if (updatable != null) { for (int i = 0; i < fields.length; i++) { if (fields[i] != null) { - if (updatable.getMainKey().getFields().contains(fields[i])) { - mainKey[i] = true; + if (updatable.getPrimaryKey().getFields().contains(fields[i])) { + primaryKey[i] = true; } } } @@ -371,7 +371,7 @@ class LoaderImpl> implements insert.onDuplicateKeyUpdate(true); for (int i = 0; i < row.length; i++) { - if (i < fields.length && fields[i] != null && !mainKey[i]) { + if (i < fields.length && fields[i] != null && !primaryKey[i]) { addValueForUpdate0(insert, fields[i], row[i]); } } @@ -383,7 +383,7 @@ class LoaderImpl> implements SelectQuery select = create.selectQuery(table); for (int i = 0; i < row.length; i++) { - if (i < fields.length && mainKey[i]) { + if (i < fields.length && primaryKey[i]) { select.addConditions(getCondition(fields[i], row[i])); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java index 4917ca74b6..90d91a8110 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java @@ -920,7 +920,7 @@ implements Condition condition = null; if (getH2Keys().isEmpty()) { if (table instanceof UpdatableTable) { - UniqueKey key = ((UpdatableTable) table).getMainKey(); + UniqueKey key = ((UpdatableTable) table).getPrimaryKey(); onFields.addAll(key.getFields()); for (int i = 0; i < key.getFields().size(); i++) { diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index f0a7fd8d1c..c68ef7b599 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -313,7 +313,7 @@ class MetaImpl implements Meta { } @Override - public final UniqueKey getMainKey() { + public final UniqueKey getPrimaryKey() { return null; } diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java index 83138df4bc..0d13ae1550 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java @@ -85,7 +85,7 @@ public class UpdatableRecordImpl> extends TableReco @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public Record key() { - RecordImpl result = new RecordImpl(getMainKey().getFields()); + RecordImpl result = new RecordImpl(getPrimaryKey().getFields()); for (Field field : result.fields) { result.setValue(field, getValue0(field)); @@ -111,13 +111,13 @@ public class UpdatableRecordImpl> extends TableReco } @Override - final UniqueKey getMainKey() { - return getTable().getMainKey(); + final UniqueKey getPrimaryKey() { + return getTable().getPrimaryKey(); } @Override public final int store() { - TableField[] keys = getMainKey().getFieldsArray(); + TableField[] keys = getPrimaryKey().getFieldsArray(); boolean executeUpdate = false; for (TableField field : keys) { @@ -153,7 +153,7 @@ public class UpdatableRecordImpl> extends TableReco @Override public final int update() { - return storeUpdate(getMainKey().getFieldsArray()); + return storeUpdate(getPrimaryKey().getFieldsArray()); } private final int storeInsert() { @@ -310,7 +310,7 @@ public class UpdatableRecordImpl> extends TableReco @Override public final int delete() { - TableField[] keys = getMainKey().getFieldsArray(); + TableField[] keys = getPrimaryKey().getFieldsArray(); try { DeleteQuery delete1 = create().deleteQuery(getTable()); @@ -352,7 +352,7 @@ public class UpdatableRecordImpl> extends TableReco SelectQuery select = create().selectQuery(); select.addSelect(f); select.addFrom(getTable()); - Utils.addConditions(select, this, getMainKey().getFieldsArray()); + Utils.addConditions(select, this, getPrimaryKey().getFieldsArray()); if (select.execute() == 1) { AbstractRecord record = (AbstractRecord) select.getResult().get(0); @@ -374,7 +374,7 @@ public class UpdatableRecordImpl> extends TableReco result.add(identity.getField()); } - result.addAll(getMainKey().getFields()); + result.addAll(getPrimaryKey().getFields()); return result; } @@ -383,7 +383,7 @@ public class UpdatableRecordImpl> extends TableReco R copy = create().newRecord(getTable()); // Copy all fields. This marks them all as isChanged, which is important - List> key = getMainKey().getFields(); + List> key = getPrimaryKey().getFields(); for (Field field : fields) { // Don't copy key values diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdatableTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdatableTableImpl.java index c92d1d352a..862b41d32c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableTableImpl.java @@ -78,7 +78,7 @@ public class UpdatableTableImpl extends TableImpl implement * Subclasses should override this method */ @Override - public UniqueKey getMainKey() { + public UniqueKey getPrimaryKey() { return null; }