You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2026/06/14 20:52:32 UTC
(cayenne) 02/02: CAY-2962 Allow unconstrained VARCHAR
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch past-M2
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit c1ac549f05597c3e726bb0fc7d397348cbf46d67
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Sun Jun 14 16:09:17 2026 -0400
CAY-2962 Allow unconstrained VARCHAR
---
.../dbsync/merge/token/db/AddColumnToDb.java | 4 +-
.../dbsync/merge/token/db/SetColumnTypeToDb.java | 4 +-
.../java/org/apache/cayenne/dba/AutoAdapter.java | 4 +-
.../java/org/apache/cayenne/dba/DbAdapter.java | 40 +++++-
.../java/org/apache/cayenne/dba/JdbcAdapter.java | 141 ++++++++-------------
.../java/org/apache/cayenne/dba/TypesMapping.java | 4 +
.../org/apache/cayenne/dba/db2/DB2Adapter.java | 30 ++---
.../org/apache/cayenne/dba/derby/DerbyAdapter.java | 6 +-
.../cayenne/dba/firebird/FirebirdAdapter.java | 6 +-
.../cayenne/dba/frontbase/FrontBaseAdapter.java | 2 +-
.../java/org/apache/cayenne/dba/h2/H2Adapter.java | 2 +-
.../apache/cayenne/dba/hsqldb/HSQLDBAdapter.java | 2 +-
.../apache/cayenne/dba/ingres/IngresAdapter.java | 18 +--
.../org/apache/cayenne/dba/mysql/MySQLAdapter.java | 4 +-
.../apache/cayenne/dba/oracle/OracleAdapter.java | 4 +-
.../cayenne/dba/postgres/PostgresAdapter.java | 16 +--
.../apache/cayenne/dba/sqlite/SQLiteAdapter.java | 2 +-
.../cayenne/dba/sqlserver/SQLServerAdapter.java | 2 +-
.../apache/cayenne/dba/sybase/SybaseAdapter.java | 2 +-
19 files changed, 143 insertions(+), 150 deletions(-)
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
index 2f42b98d1..c5b6dd86f 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddColumnToDb.java
@@ -54,8 +54,8 @@ public class AddColumnToDb extends AbstractToDbToken.EntityAndColumn {
QuotingStrategy context = adapter.getQuotingStrategy();
appendPrefix(sqlBuffer, context);
- sqlBuffer.append(JdbcAdapter.getType(adapter, getColumn()));
- sqlBuffer.append(JdbcAdapter.sizeAndPrecision(adapter, getColumn()));
+ sqlBuffer.append(adapter.preferredNativeColumnType(getColumn()).nativeType());
+ sqlBuffer.append(JdbcAdapter.sizeAndScale(adapter, getColumn()));
return Collections.singletonList(sqlBuffer.toString());
}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
index a83da363b..4e5535406 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetColumnTypeToDb.java
@@ -62,8 +62,8 @@ public class SetColumnTypeToDb extends AbstractToDbToken.Entity {
StringBuffer sqlBuffer = new StringBuffer();
appendPrefix(sqlBuffer, adapter.getQuotingStrategy());
- sqlBuffer.append(JdbcAdapter.getType(adapter, columnNew));
- sqlBuffer.append(JdbcAdapter.sizeAndPrecision(adapter, columnNew));
+ sqlBuffer.append(adapter.preferredNativeColumnType(columnNew).nativeType());
+ sqlBuffer.append(JdbcAdapter.sizeAndScale(adapter, columnNew));
return Collections.singletonList(sqlBuffer.toString());
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
index ad2c21bd0..9bb3e7c1c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
@@ -175,8 +175,8 @@ public class AutoAdapter implements DbAdapter {
* @since 5.0
*/
@Override
- public int defaultCharLength() {
- return getAdapter().defaultCharLength();
+ public int defaultCharColumnLength() {
+ return getAdapter().defaultCharColumnLength();
}
@Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
index 3e32f9690..57fa0a289 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/DbAdapter.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.dba;
+import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
import org.apache.cayenne.access.translator.ParameterBinding;
@@ -30,9 +31,9 @@ import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.ProcedureQuery;
-import org.apache.cayenne.query.Select;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLAction;
+import org.apache.cayenne.query.Select;
import java.sql.PreparedStatement;
import java.util.Collection;
@@ -125,21 +126,46 @@ public interface DbAdapter {
/**
* Returns true if supplied type can have a scale attribute as a part of column definition.
*
- * @param type sql type code
- * @return <code>true</code> if a given type supports scale
- *
* @since 5.0
*/
boolean typeSupportsScale(int type);
/**
* Returns the length to use for an unconstrained character column (a CHAR/VARCHAR-family column with no max
- * length) when this database requires a length. Adapters whose database accepts a length-free character type
- * instead declare an {@link NativeColumnType#asUnconstrained() unconstrained} native type.
+ * length) when this database requires a length.
*
* @since 5.0
*/
- int defaultCharLength();
+ int defaultCharColumnLength();
+
+ /**
+ * @since 5.0
+ */
+ default NativeColumnType preferredNativeColumnType(DbAttribute column) {
+ NativeColumnType[] variants = nativeColumnTypes(column.getType());
+ if (variants == null || variants.length == 0) {
+ String entityName = column.getEntity() != null
+ ? column.getEntity().getFullyQualifiedName()
+ : "<null>";
+ throw new CayenneRuntimeException("Undefined type for attribute '%s.%s': %s."
+ , entityName, column.getName(), column.getType());
+ }
+
+ if (column.isGenerated()) {
+ for (NativeColumnType variant : variants) {
+ if (variant.autoIncrement()) {
+ return variant;
+ }
+ }
+ } else if (TypesMapping.isCharacterWithMaxLengthSupport(column.getType()) && column.getMaxLength() <= 0) {
+ for (NativeColumnType variant : variants) {
+ if (variant.unconstrained()) {
+ return variant;
+ }
+ }
+ }
+ return variants[0];
+ }
/**
* Returns a collection of SQL statements needed to drop a database table.
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index 1b05fea64..7ef8c8713 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -68,7 +68,7 @@ public class JdbcAdapter implements DbAdapter {
private PkGenerator pkGenerator;
protected QuotingStrategy quotingStrategy;
- protected int defaultCharLength = 255;
+ protected int defaultCharColumnLength;
protected Map<Integer, NativeColumnType[]> nativeColumnTypes;
protected ExtendedTypeMap extendedTypes;
@@ -92,6 +92,7 @@ public class JdbcAdapter implements DbAdapter {
@Inject ValueObjectTypeRegistry valueObjectTypeRegistry) {
// init defaults
+ this.defaultCharColumnLength = 255;
this.setSupportsBatchUpdates(false);
this.setSupportsUniqueConstraints(true);
this.caseInsensitiveCollations = runtimeProperties.getBoolean(Constants.CI_PROPERTY, false);
@@ -99,7 +100,7 @@ public class JdbcAdapter implements DbAdapter {
this.quotingStrategy = createQuotingStrategy();
this.ejbqlTranslator = createEJBQLTranslator();
- this.nativeColumnTypes = indexBySqlType(createExternalTypes());
+ this.nativeColumnTypes = indexBySqlType(createNativeTypes());
this.extendedTypes = new ExtendedTypeMap();
initExtendedTypes(defaultExtendedTypes, userExtendedTypes, extendedTypeFactories, valueObjectTypeRegistry);
}
@@ -126,42 +127,42 @@ public class JdbcAdapter implements DbAdapter {
*
* @since 5.0
*/
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
- NativeColumnType.of(Types.ARRAY, "ARRAY"),
- NativeColumnType.of(Types.BIGINT, "BIGINT"),
- NativeColumnType.of(Types.ROWID, "ROWID"),
- NativeColumnType.of(Types.BINARY, "BINARY"),
- NativeColumnType.of(Types.BIT, "BIT"),
- NativeColumnType.of(Types.BLOB, "BLOB"),
- NativeColumnType.of(Types.BOOLEAN, "BOOLEAN"),
- NativeColumnType.of(Types.CHAR, "CHAR"),
- NativeColumnType.of(Types.NCHAR, "NCHAR"),
- NativeColumnType.of(Types.CLOB, "CLOB"),
- NativeColumnType.of(Types.NCLOB, "NCLOB"),
- NativeColumnType.of(Types.DATALINK, "DATALINK"),
- NativeColumnType.of(Types.DATE, "DATE"),
- NativeColumnType.of(Types.DECIMAL, "DECIMAL"),
- NativeColumnType.of(Types.DOUBLE, "DOUBLE"),
- NativeColumnType.of(Types.FLOAT, "FLOAT"),
- NativeColumnType.of(Types.INTEGER, "INTEGER"),
- NativeColumnType.of(Types.JAVA_OBJECT, "JAVA_OBJECT"),
- NativeColumnType.of(Types.LONGVARBINARY, "LONGVARBINARY"),
- NativeColumnType.of(Types.LONGVARCHAR, "LONGVARCHAR"),
- NativeColumnType.of(Types.LONGNVARCHAR, "LONGNVARCHAR"),
- NativeColumnType.of(Types.NUMERIC, "NUMERIC"),
- NativeColumnType.of(Types.OTHER, "OTHER"),
- NativeColumnType.of(Types.REAL, "REAL"),
- NativeColumnType.of(Types.REF, "REF"),
- NativeColumnType.of(Types.SMALLINT, "SMALLINT"),
- NativeColumnType.of(Types.STRUCT, "STRUCT"),
- NativeColumnType.of(Types.TIME, "TIME"),
- NativeColumnType.of(Types.TIMESTAMP, "TIMESTAMP"),
- NativeColumnType.of(Types.TINYINT, "TINYINT"),
- NativeColumnType.of(Types.VARBINARY, "VARBINARY"),
- NativeColumnType.of(Types.VARCHAR, "VARCHAR"),
- NativeColumnType.of(Types.NVARCHAR, "NVARCHAR"),
- NativeColumnType.of(Types.SQLXML, "SQLXML"),
+ NativeColumnType.of(Types.ARRAY, "ARRAY"),
+ NativeColumnType.of(Types.BIGINT, "BIGINT"),
+ NativeColumnType.of(Types.ROWID, "ROWID"),
+ NativeColumnType.of(Types.BINARY, "BINARY"),
+ NativeColumnType.of(Types.BIT, "BIT"),
+ NativeColumnType.of(Types.BLOB, "BLOB"),
+ NativeColumnType.of(Types.BOOLEAN, "BOOLEAN"),
+ NativeColumnType.of(Types.CHAR, "CHAR"),
+ NativeColumnType.of(Types.NCHAR, "NCHAR"),
+ NativeColumnType.of(Types.CLOB, "CLOB"),
+ NativeColumnType.of(Types.NCLOB, "NCLOB"),
+ NativeColumnType.of(Types.DATALINK, "DATALINK"),
+ NativeColumnType.of(Types.DATE, "DATE"),
+ NativeColumnType.of(Types.DECIMAL, "DECIMAL"),
+ NativeColumnType.of(Types.DOUBLE, "DOUBLE"),
+ NativeColumnType.of(Types.FLOAT, "FLOAT"),
+ NativeColumnType.of(Types.INTEGER, "INTEGER"),
+ NativeColumnType.of(Types.JAVA_OBJECT, "JAVA_OBJECT"),
+ NativeColumnType.of(Types.LONGVARBINARY, "LONGVARBINARY"),
+ NativeColumnType.of(Types.LONGVARCHAR, "LONGVARCHAR"),
+ NativeColumnType.of(Types.LONGNVARCHAR, "LONGNVARCHAR"),
+ NativeColumnType.of(Types.NUMERIC, "NUMERIC"),
+ NativeColumnType.of(Types.OTHER, "OTHER"),
+ NativeColumnType.of(Types.REAL, "REAL"),
+ NativeColumnType.of(Types.REF, "REF"),
+ NativeColumnType.of(Types.SMALLINT, "SMALLINT"),
+ NativeColumnType.of(Types.STRUCT, "STRUCT"),
+ NativeColumnType.of(Types.TIME, "TIME"),
+ NativeColumnType.of(Types.TIMESTAMP, "TIMESTAMP"),
+ NativeColumnType.of(Types.TINYINT, "TINYINT"),
+ NativeColumnType.of(Types.VARBINARY, "VARBINARY"),
+ NativeColumnType.of(Types.VARCHAR, "VARCHAR"),
+ NativeColumnType.of(Types.NVARCHAR, "NVARCHAR"),
+ NativeColumnType.of(Types.SQLXML, "SQLXML"),
};
}
@@ -284,7 +285,6 @@ public class JdbcAdapter implements DbAdapter {
*
* @param type sql type code
* @return <code>true</code> if a given type supports scale
- *
* @since 5.0
*/
@Override
@@ -297,8 +297,8 @@ public class JdbcAdapter implements DbAdapter {
* @since 5.0
*/
@Override
- public int defaultCharLength() {
- return defaultCharLength;
+ public int defaultCharColumnLength() {
+ return defaultCharColumnLength;
}
/**
@@ -383,52 +383,27 @@ public class JdbcAdapter implements DbAdapter {
@Override
public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column) {
sqlBuffer.append(quotingStrategy.quotedName(column));
- sqlBuffer.append(' ').append(getType(this, column));
+ sqlBuffer.append(' ').append(preferredNativeColumnType(column).nativeType());
- sqlBuffer.append(sizeAndPrecision(this, column));
+ sqlBuffer.append(sizeAndScale(this, column));
sqlBuffer.append(column.isMandatory() ? " NOT NULL" : " NULL");
}
/**
- * Selects the native type variant to use for a column: the auto-increment variant for a generated column,
- * the {@link NativeColumnType#unconstrained() unconstrained} variant for a character column with no max length,
- * otherwise the primary variant.
- *
- * @since 5.0
+ * @deprecated in favor of {@link #sizeAndScale(DbAdapter, DbAttribute)}
*/
- public static NativeColumnType selectNativeType(DbAdapter adapter, DbAttribute column) {
- NativeColumnType[] variants = adapter.nativeColumnTypes(column.getType());
- if (variants == null || variants.length == 0) {
- String entityName = column.getEntity() != null
- ? column.getEntity().getFullyQualifiedName()
- : "<null>";
- throw new CayenneRuntimeException("Undefined type for attribute '%s.%s': %s."
- , entityName, column.getName(), column.getType());
- }
-
- if (column.isGenerated()) {
- for (NativeColumnType variant : variants) {
- if (variant.autoIncrement()) {
- return variant;
- }
- }
- } else if (isLengthBearingCharacter(column.getType()) && column.getMaxLength() <= 0) {
- for (NativeColumnType variant : variants) {
- if (variant.unconstrained()) {
- return variant;
- }
- }
- }
- return variants[0];
+ @Deprecated(since = "5.0", forRemoval = true)
+ public static String sizeAndPrecision(DbAdapter adapter, DbAttribute column) {
+ return sizeAndScale(adapter, column);
}
- public static String sizeAndPrecision(DbAdapter adapter, DbAttribute column) {
+ public static String sizeAndScale(DbAdapter adapter, DbAttribute column) {
int type = column.getType();
// an unconstrained character column either uses a length-free native type, or falls back to the
// adapter's default length for databases that require one
- if (isLengthBearingCharacter(type) && column.getMaxLength() <= 0) {
- return selectNativeType(adapter, column).unconstrained() ? "" : "(" + adapter.defaultCharLength() + ")";
+ if (TypesMapping.isCharacterWithMaxLengthSupport(type) && column.getMaxLength() <= 0) {
+ return adapter.preferredNativeColumnType(column).unconstrained() ? "" : "(" + adapter.defaultCharColumnLength() + ")";
}
if (!adapter.typeSupportsLength(type) && !adapter.typeSupportsScale(type)) {
@@ -437,7 +412,7 @@ public class JdbcAdapter implements DbAdapter {
int len = column.getMaxLength();
int scale = TypesMapping.isDateTime(column.getType())
- || TypesMapping.isDecimal(column.getType()) && column.getType() != Types.FLOAT
+ || TypesMapping.isDecimal(column.getType()) && column.getType() != Types.FLOAT
? column.getScale() : -1;
if (len > 0) {
@@ -451,13 +426,12 @@ public class JdbcAdapter implements DbAdapter {
return "";
}
+ /**
+ * @deprecated in favor of {@link #preferredNativeColumnType(DbAttribute)}
+ */
+ @Deprecated(since = "5.0", forRemoval = true)
public static String getType(DbAdapter adapter, DbAttribute column) {
- if (column.getType() == Types.OTHER) {
- // TODO: warn that this is unsupported yet
- return "OTHER";
- }
-
- return selectNativeType(adapter, column).nativeType();
+ return adapter.preferredNativeColumnType(column).nativeType();
}
/**
@@ -513,7 +487,7 @@ public class JdbcAdapter implements DbAdapter {
// sort joins in the order PK are set in target, to avoid errors on some DBs
List<DbJoin> joins = rel.getJoins();
- if(rel.isToPK()) {
+ if (rel.isToPK()) {
List<DbAttribute> pks = rel.getTargetEntity().getPrimaryKeys();
joins.sort(Comparator.comparingInt(join -> pks.indexOf(join.getTarget())));
}
@@ -726,7 +700,4 @@ public class JdbcAdapter implements DbAdapter {
return this;
}
- private static boolean isLengthBearingCharacter(int type) {
- return type == Types.CHAR || type == Types.NCHAR || type == Types.VARCHAR || type == Types.NVARCHAR;
- }
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/TypesMapping.java b/cayenne/src/main/java/org/apache/cayenne/dba/TypesMapping.java
index 3f1b62f31..99639bab2 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/TypesMapping.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/TypesMapping.java
@@ -286,6 +286,10 @@ public class TypesMapping {
|| type == Types.CLOB || type == Types.NCLOB || type == Types.LONGVARCHAR || type == Types.LONGNVARCHAR;
}
+ static boolean isCharacterWithMaxLengthSupport(int type) {
+ return type == CHAR || type == NCHAR || type == VARCHAR || type == NVARCHAR;
+ }
+
/**
* Returns true if supplied type is a binary type.
*
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
index 7270d8b16..cb36c17cd 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
@@ -52,8 +52,6 @@ public class DB2Adapter extends JdbcAdapter {
private static final String FOR_BIT_DATA_SUFFIX = " FOR BIT DATA";
- private static final String TRIM_FUNCTION = "RTRIM";
-
public DB2Adapter(@Inject RuntimeProperties runtimeProperties,
@Inject(Constants.DEFAULT_TYPES_LIST) List<ExtendedType> defaultExtendedTypes,
@Inject(Constants.USER_TYPES_LIST) List<ExtendedType> userExtendedTypes,
@@ -64,7 +62,7 @@ public class DB2Adapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "ARRAY"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
@@ -120,7 +118,7 @@ public class DB2Adapter extends JdbcAdapter {
*/
@Override
public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column) {
- String type = getType(this, column);
+ String type = preferredNativeColumnType(column).nativeType();
sqlBuffer.append(quotingStrategy.quotedName(column)).append(' ');
@@ -130,7 +128,7 @@ public class DB2Adapter extends JdbcAdapter {
if(column.getType() == Types.NCHAR) {
column.setMaxLength(maxLength / 2);
}
- String length = sizeAndPrecision(this, column);
+ String length = sizeAndScale(this, column);
column.setMaxLength(maxLength);
// assemble...
@@ -210,22 +208,16 @@ public class DB2Adapter extends JdbcAdapter {
*/
@Override
public int preferredBindingType(int jdbcType) {
- switch (jdbcType) {
- case Types.NCHAR:
- return Types.CHAR;
- case Types.NVARCHAR:
- return Types.VARCHAR;
- case Types.LONGNVARCHAR:
- return Types.LONGVARCHAR;
- case Types.NCLOB:
- return Types.CLOB;
-
- default:
- return jdbcType;
- }
+ return switch (jdbcType) {
+ case Types.NCHAR -> Types.CHAR;
+ case Types.NVARCHAR -> Types.VARCHAR;
+ case Types.LONGNVARCHAR -> Types.LONGVARCHAR;
+ case Types.NCLOB -> Types.CLOB;
+ default -> jdbcType;
+ };
}
- final class DB2BooleanType extends BooleanType {
+ static final class DB2BooleanType extends BooleanType {
@Override
public void setJdbcObject(PreparedStatement st, Boolean val, int pos, int type, int precision) throws Exception {
if (val != null) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
index f6713f4d1..ce17daf32 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
@@ -70,7 +70,7 @@ public class DerbyAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "ARRAY"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
@@ -146,8 +146,8 @@ public class DerbyAdapter extends JdbcAdapter {
*/
@Override
public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column) {
- String type = getType(this, column);
- String length = sizeAndPrecision(this, column);
+ String type = preferredNativeColumnType(column).nativeType();
+ String length = sizeAndScale(this, column);
sqlBuffer.append(quotingStrategy.quotedName(column));
sqlBuffer.append(' ');
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
index 466d0112d..43044ddc1 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
@@ -62,7 +62,7 @@ public class FirebirdAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "BLOB"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
@@ -110,8 +110,8 @@ public class FirebirdAdapter extends JdbcAdapter {
}
public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column) {
- String type = getType(this, column);
- String length = sizeAndPrecision(this, column);
+ String type = preferredNativeColumnType(column).nativeType();
+ String length = sizeAndScale(this, column);
sqlBuffer.append(quotingStrategy.quotedName(column));
sqlBuffer.append(' ');
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
index b44daf5a8..ff841b9e7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
@@ -68,7 +68,7 @@ public class FrontBaseAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.BIGINT, "LONGINT"),
NativeColumnType.of(Types.BINARY, "BIT"),
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
index 2f9de43b7..657a4dc31 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
@@ -56,7 +56,7 @@ public class H2Adapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "ARRAY"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
index 0e031871c..f5ca77d79 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
@@ -68,7 +68,7 @@ public class HSQLDBAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "ARRAY"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
index 3de597ef8..08cb738d4 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
@@ -56,7 +56,7 @@ public class IngresAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "ARRAY"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
@@ -125,14 +125,14 @@ public class IngresAdapter extends JdbcAdapter {
}
@Override
- public void createTableAppendColumn(StringBuffer buf, DbAttribute at) {
- String type = getType(this, at);
- buf.append(quotingStrategy.quotedName(at)).append(' ').append(type);
+ public void createTableAppendColumn(StringBuffer buf, DbAttribute column) {
+ String type = preferredNativeColumnType(column).nativeType();
+ buf.append(quotingStrategy.quotedName(column)).append(' ').append(type);
// append size and precision (if applicable)
- if (typeSupportsLength(at.getType())) {
- int len = at.getMaxLength();
- int scale = TypesMapping.isDecimal(at.getType()) ? at.getScale() : -1;
+ if (typeSupportsLength(column.getType())) {
+ int len = column.getMaxLength();
+ int scale = TypesMapping.isDecimal(column.getType()) ? column.getScale() : -1;
// sanity check
if (scale > len) {
@@ -150,12 +150,12 @@ public class IngresAdapter extends JdbcAdapter {
}
}
- if (at.isGenerated()) {
+ if (column.isGenerated()) {
buf.append(" GENERATED BY DEFAULT AS IDENTITY ");
}
// Ingres does not like "null" for non mandatory fields
- if (at.isMandatory()) {
+ if (column.isMandatory()) {
buf.append(" NOT NULL");
}
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index 7a5edb83d..06a851668 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -83,7 +83,7 @@ public class MySQLAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.BIGINT, "BIGINT"),
NativeColumnType.of(Types.BINARY, "BINARY"),
@@ -337,7 +337,7 @@ public class MySQLAdapter extends JdbcAdapter {
@Override
public void createTableAppendColumn(StringBuffer sqlBuffer, DbAttribute column) {
- String type = getType(this, column);
+ String type = preferredNativeColumnType(column).nativeType();
sqlBuffer.append(quotingStrategy.quotedName(column));
sqlBuffer.append(' ').append(type);
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
index 4f7da00be..0f020db24 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
@@ -164,11 +164,11 @@ public class OracleAdapter extends JdbcAdapter {
setSupportsBatchUpdates(true);
// VARCHAR2 standard maximum, used for an unconstrained character column
- this.defaultCharLength = 4000;
+ this.defaultCharColumnLength = 4000;
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.BIGINT, "NUMBER"),
NativeColumnType.of(Types.BINARY, "RAW"),
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
index 90dc06fdb..905995265 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
@@ -69,7 +69,7 @@ public class PostgresAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.BIGINT, "bigint"),
NativeColumnType.of(Types.BIGINT, "bigserial").asAutoIncrement(),
@@ -235,19 +235,19 @@ public class PostgresAdapter extends JdbcAdapter {
return buf.toString();
}
- private void createAttribute(DbEntity ent, QuotingStrategy context, StringBuilder buf, DbAttribute at) {
+ private void createAttribute(DbEntity ent, QuotingStrategy context, StringBuilder buf, DbAttribute column) {
// attribute may not be fully valid, do a simple check
- if (at.getType() == TypesMapping.NOT_DEFINED) {
+ if (column.getType() == TypesMapping.NOT_DEFINED) {
throw new CayenneRuntimeException("Undefined type for attribute '%s.%s'"
- , ent.getFullyQualifiedName(), at.getName());
+ , ent.getFullyQualifiedName(), column.getName());
}
// getType / sizeAndPrecision pick the right variant (auto-increment serial, unconstrained "text", ...)
- buf.append(context.quotedName(at))
+ buf.append(context.quotedName(column))
.append(' ')
- .append(getType(this, at))
- .append(sizeAndPrecision(this, at))
- .append(at.isMandatory() ? " NOT" : "")
+ .append(preferredNativeColumnType(column).nativeType())
+ .append(sizeAndScale(this, column))
+ .append(column.isMandatory() ? " NOT" : "")
.append(" NULL");
}
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
index 70b193d92..7a1013a0f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
@@ -65,7 +65,7 @@ public class SQLiteAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.ARRAY, "ARRAY"),
NativeColumnType.of(Types.BIGINT, "BIGINT"),
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
index a93235110..682ecbc95 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
@@ -82,7 +82,7 @@ public class SQLServerAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.BIGINT, "bigint"),
NativeColumnType.of(Types.BINARY, "binary"),
diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
index 29b49abb1..30d64e194 100644
--- a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
@@ -59,7 +59,7 @@ public class SybaseAdapter extends JdbcAdapter {
}
@Override
- protected NativeColumnType[] createExternalTypes() {
+ protected NativeColumnType[] createNativeTypes() {
return new NativeColumnType[]{
NativeColumnType.of(Types.BIGINT, "decimal(19,0)"),
NativeColumnType.of(Types.BINARY, "binary"),