Skip to content

Commit bf0d1c5

Browse files
committed
Rethinking QuotingStrategy to remove dependency on the ORM model...
cleanup
1 parent 220c71a commit bf0d1c5

5 files changed

Lines changed: 25 additions & 44 deletions

File tree

cayenne/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ protected String selectAllSequencesQuery() {
6363

6464
@Override
6565
protected String dropSequenceString(DbEntity entity) {
66-
return "DROP SEQUENCE " + sequenceName(entity) + " RESTRICT ";
66+
return "DROP SEQUENCE " + adapter.getQuotingStrategy(entity).quotedFQN(entity.getCatalog(), entity.getSchema(),
67+
sequenceName(entity)) + " RESTRICT ";
6768
}
6869

6970
@Override
7071
protected String createSequenceString(DbEntity entity) {
71-
return "CREATE SEQUENCE " + sequenceName(entity) + " AS BIGINT START WITH " + pkStartValue +
72-
" INCREMENT BY " + getPkCacheSize() + " NO MAXVALUE NO CYCLE CACHE " + getPkCacheSize();
72+
return "CREATE SEQUENCE " + adapter.getQuotingStrategy(entity).quotedFQN(entity.getCatalog(),
73+
entity.getSchema(), sequenceName(entity)) + " AS BIGINT START WITH "
74+
+ pkStartValue + " INCREMENT BY " + getPkCacheSize() + " NO MAXVALUE NO CYCLE CACHE " + getPkCacheSize();
7375
}
7476
}

cayenne/src/main/java/org/apache/cayenne/dba/derby/DerbyPkGenerator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ protected String selectAllSequencesQuery() {
5959

6060
@Override
6161
protected String dropSequenceString(DbEntity entity) {
62-
return "DROP SEQUENCE " + sequenceName(entity) + " RESTRICT";
62+
return "DROP SEQUENCE " + adapter.getQuotingStrategy(entity).quotedFQN(entity.getCatalog(), entity.getSchema(),
63+
sequenceName(entity)) + " RESTRICT";
6364
}
6465

6566
@Override
6667
protected String createSequenceString(DbEntity entity) {
67-
return "CREATE SEQUENCE " + sequenceName(entity) + " AS BIGINT START WITH " + pkStartValue +
68-
" INCREMENT BY " + getPkCacheSize() + " NO MAXVALUE NO CYCLE";
68+
return "CREATE SEQUENCE " + adapter.getQuotingStrategy(entity).quotedFQN(entity.getCatalog(),
69+
entity.getSchema(), sequenceName(entity)) + " AS BIGINT START WITH "
70+
+ pkStartValue + " INCREMENT BY " + getPkCacheSize() + " NO MAXVALUE NO CYCLE";
6971
}
7072
}

cayenne/src/main/java/org/apache/cayenne/dba/h2/H2PkGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ protected H2PkGenerator(JdbcAdapter adapter) {
4444

4545
@Override
4646
protected String createSequenceString(DbEntity ent) {
47-
return "CREATE SEQUENCE " + sequenceName(ent) + " START WITH " + pkStartValue + " INCREMENT BY "
48-
+ pkCacheSize(ent) + " CACHE 1";
47+
return "CREATE SEQUENCE " + adapter.getQuotingStrategy(ent).quotedFQN(ent.getCatalog(), ent.getSchema(),
48+
sequenceName(ent)) + " START WITH " + pkStartValue + " INCREMENT BY " + pkCacheSize(ent) + " CACHE 1";
4949
}
5050

5151
@Override

cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.apache.cayenne.CayenneRuntimeException;
2323
import org.apache.cayenne.access.DataNode;
24-
import org.apache.cayenne.dba.QuotingStrategy;
2524
import org.apache.cayenne.dba.JdbcAdapter;
2625
import org.apache.cayenne.dba.JdbcPkGenerator;
2726
import org.apache.cayenne.map.DbEntity;
@@ -54,6 +53,7 @@ public class OraclePkGenerator extends JdbcPkGenerator {
5453

5554
/**
5655
* Used by DI
56+
*
5757
* @since 4.1
5858
*/
5959
public OraclePkGenerator() {
@@ -99,17 +99,7 @@ public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) {
9999

100100
// drop obsolete sequences
101101
for (DbEntity dbEntity : dbEntities) {
102-
String name;
103-
if (dbEntity.getDataMap() != null && dbEntity.getDataMap().isQuotingSQLIdentifiers()) {
104-
// the comparison name must be unquoted; render the bare sequence name without
105-
// catalog/schema, matching the legacy behavior
106-
StringBuilder buf = new StringBuilder();
107-
QuotingStrategy.NONE.appendFQN(buf, getSequencePrefix() + dbEntity.getName().toLowerCase());
108-
name = stripSchemaName(buf.toString());
109-
} else {
110-
name = stripSchemaName(sequenceName(dbEntity, QuotingStrategy.NONE));
111-
}
112-
if (sequences.contains(name)) {
102+
if (sequences.contains(sequenceName(dbEntity))) {
113103
runUpdate(node, dropSequenceString(dbEntity));
114104
}
115105
}
@@ -129,15 +119,17 @@ public List<String> dropAutoPkStatements(List<DbEntity> dbEntities) {
129119
}
130120

131121
protected String createSequenceString(DbEntity ent) {
132-
return "CREATE SEQUENCE " + sequenceName(ent) + " START WITH " + pkStartValue + " INCREMENT BY " + pkCacheSize(ent);
122+
String seqFQN = adapter.getQuotingStrategy(ent).quotedFQN(ent.getCatalog(), ent.getSchema(), sequenceName(ent));
123+
return "CREATE SEQUENCE " + seqFQN + " START WITH " + pkStartValue + " INCREMENT BY " + pkCacheSize(ent);
133124
}
134125

135126
/**
136127
* Returns a SQL string needed to drop any database objects associated with
137128
* automatic primary key generation process for a specific DbEntity.
138129
*/
139130
protected String dropSequenceString(DbEntity ent) {
140-
return "DROP SEQUENCE " + sequenceName(ent);
131+
String seqFQN = adapter.getQuotingStrategy(ent).quotedFQN(ent.getCatalog(), ent.getSchema(), sequenceName(ent));
132+
return "DROP SEQUENCE " + seqFQN;
141133
}
142134

143135
protected String selectNextValQuery(String pkGeneratingSequenceName) {
@@ -167,7 +159,8 @@ protected long longPkFromDatabase(DataNode node, DbEntity entity) {
167159
&& pkGenerator.getGeneratorName() != null) {
168160
pkGeneratingSequenceName = pkGenerator.getGeneratorName();
169161
} else {
170-
pkGeneratingSequenceName = sequenceName(entity);
162+
pkGeneratingSequenceName = adapter.getQuotingStrategy(entity).quotedFQN(entity.getCatalog(),
163+
entity.getSchema(), sequenceName(entity));
171164
}
172165

173166
try (Connection con = node.getDataSource().getConnection()) {
@@ -200,41 +193,24 @@ protected int pkCacheSize(DbEntity entity) {
200193
}
201194
}
202195

203-
/**
204-
* Returns expected primary key sequence name for a DbEntity.
205-
*/
206196
protected String sequenceName(DbEntity entity) {
207-
return sequenceName(entity, adapter.getQuotingStrategy(entity));
208-
}
209-
210-
/**
211-
* Renders the sequence name for the entity using the provided quoting style.
212-
*/
213-
private String sequenceName(DbEntity entity, QuotingStrategy quotes) {
214197

215198
// use custom generator if possible
216199
DbKeyGenerator keyGenerator = entity.getPrimaryKeyGenerator();
217-
if (keyGenerator != null && DbKeyGenerator.ORACLE_TYPE.equals(keyGenerator.getGeneratorType())
200+
if (keyGenerator != null
201+
&& DbKeyGenerator.ORACLE_TYPE.equals(keyGenerator.getGeneratorType())
218202
&& keyGenerator.getGeneratorName() != null) {
219203

220204
return keyGenerator.getGeneratorName().toLowerCase();
221205
} else {
222-
String seqName = getSequencePrefix() + entity.getName().toLowerCase();
223-
StringBuilder buf = new StringBuilder();
224-
quotes.appendFQN(buf, entity.getCatalog(), entity.getSchema(), seqName);
225-
return buf.toString();
206+
return getSequencePrefix() + entity.getName().toLowerCase();
226207
}
227208
}
228209

229210
protected String getSequencePrefix() {
230211
return _SEQUENCE_PREFIX;
231212
}
232213

233-
private String stripSchemaName(String sequenceName) {
234-
int ind = sequenceName.indexOf('.');
235-
return ind >= 0 ? sequenceName.substring(ind + 1) : sequenceName;
236-
}
237-
238214
/**
239215
* Fetches a list of existing sequences that might match Cayenne generated
240216
* ones.

cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ protected String createSequenceString(DbEntity ent) {
4545
// note that PostgreSQL 7.4 and newer supports INCREMENT BY and START WITH
4646
// however 7.3 doesn't like BY and WITH, so using older more neutral
4747
// syntax that works with all tested versions.
48-
return "CREATE SEQUENCE " + sequenceName(ent) + " INCREMENT " + pkCacheSize(ent) + " START " + pkStartValue;
48+
return "CREATE SEQUENCE " + adapter.getQuotingStrategy(ent).quotedFQN(ent.getCatalog(), ent.getSchema(),
49+
sequenceName(ent)) + " INCREMENT " + pkCacheSize(ent) + " START " + pkStartValue;
4950
}
5051

5152
@Override

0 commit comments

Comments
 (0)