Skip to content

Commit 5672410

Browse files
committed
Support to replace the table name
1 parent 04b5fc1 commit 5672410

File tree

9 files changed

+360
-13
lines changed

9 files changed

+360
-13
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
package org.seasar.doma.jdbc.criteria.metamodel;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.Objects;
6+
import java.util.function.BiFunction;
7+
import java.util.function.Function;
8+
import org.seasar.doma.DomaIllegalArgumentException;
9+
import org.seasar.doma.jdbc.entity.EntityPropertyType;
10+
import org.seasar.doma.jdbc.entity.EntityType;
11+
import org.seasar.doma.jdbc.entity.GeneratedIdPropertyType;
12+
import org.seasar.doma.jdbc.entity.NamingType;
13+
import org.seasar.doma.jdbc.entity.PostDeleteContext;
14+
import org.seasar.doma.jdbc.entity.PostInsertContext;
15+
import org.seasar.doma.jdbc.entity.PostUpdateContext;
16+
import org.seasar.doma.jdbc.entity.PreDeleteContext;
17+
import org.seasar.doma.jdbc.entity.PreInsertContext;
18+
import org.seasar.doma.jdbc.entity.PreUpdateContext;
19+
import org.seasar.doma.jdbc.entity.Property;
20+
import org.seasar.doma.jdbc.entity.TenantIdPropertyType;
21+
import org.seasar.doma.jdbc.entity.VersionPropertyType;
22+
23+
public class EntityTypeProxy<ENTITY> implements EntityType<ENTITY> {
24+
25+
private final EntityType<ENTITY> entityType;
26+
private final String qualifiedTableName;
27+
28+
public EntityTypeProxy(EntityType<ENTITY> entityType, String qualifiedTableName) {
29+
this.entityType = Objects.requireNonNull(entityType);
30+
this.qualifiedTableName = Objects.requireNonNull(qualifiedTableName);
31+
if (qualifiedTableName.contains("'")) {
32+
throw new DomaIllegalArgumentException(
33+
"qualifiedTableName", "The qualifiedTableName must not contain the single quotation(').");
34+
}
35+
if (qualifiedTableName.contains(";")) {
36+
throw new DomaIllegalArgumentException(
37+
"qualifiedTableName", "The qualifiedTableName must not contain the semicolon(;).");
38+
}
39+
if (qualifiedTableName.contains("--")) {
40+
throw new DomaIllegalArgumentException(
41+
"qualifiedTableName", "The qualifiedTableName must not contain the two hyphens(--).");
42+
}
43+
if (qualifiedTableName.contains("/")) {
44+
throw new DomaIllegalArgumentException(
45+
"qualifiedTableName", "The qualifiedTableName must not contain the slash(/).");
46+
}
47+
}
48+
49+
@Override
50+
public boolean isImmutable() {
51+
return entityType.isImmutable();
52+
}
53+
54+
@Override
55+
public String getName() {
56+
return entityType.getName();
57+
}
58+
59+
@Override
60+
public String getCatalogName() {
61+
return entityType.getCatalogName();
62+
}
63+
64+
@Override
65+
public String getSchemaName() {
66+
return entityType.getSchemaName();
67+
}
68+
69+
@Override
70+
public String getTableName() {
71+
return entityType.getTableName();
72+
}
73+
74+
@Override
75+
public String getTableName(BiFunction<NamingType, String, String> namingFunction) {
76+
return entityType.getTableName(namingFunction);
77+
}
78+
79+
@Override
80+
public String getQualifiedTableName() {
81+
return entityType.getQualifiedTableName();
82+
}
83+
84+
@Override
85+
public String getQualifiedTableName(Function<String, String> quoteFunction) {
86+
return entityType.getQualifiedTableName(quoteFunction);
87+
}
88+
89+
@Override
90+
public String getQualifiedTableName(
91+
BiFunction<NamingType, String, String> namingFunction,
92+
Function<String, String> quoteFunction) {
93+
return qualifiedTableName;
94+
}
95+
96+
@Override
97+
public boolean isQuoteRequired() {
98+
return entityType.isQuoteRequired();
99+
}
100+
101+
@Override
102+
public NamingType getNamingType() {
103+
return entityType.getNamingType();
104+
}
105+
106+
@Override
107+
public GeneratedIdPropertyType<ENTITY, ?, ?> getGeneratedIdPropertyType() {
108+
return entityType.getGeneratedIdPropertyType();
109+
}
110+
111+
@Override
112+
public VersionPropertyType<ENTITY, ?, ?> getVersionPropertyType() {
113+
return entityType.getVersionPropertyType();
114+
}
115+
116+
@Override
117+
public TenantIdPropertyType<ENTITY, ?, ?> getTenantIdPropertyType() {
118+
return entityType.getTenantIdPropertyType();
119+
}
120+
121+
@Override
122+
public List<EntityPropertyType<ENTITY, ?>> getIdPropertyTypes() {
123+
return entityType.getIdPropertyTypes();
124+
}
125+
126+
@Override
127+
public EntityPropertyType<ENTITY, ?> getEntityPropertyType(String __name) {
128+
return entityType.getEntityPropertyType(__name);
129+
}
130+
131+
@Override
132+
public List<EntityPropertyType<ENTITY, ?>> getEntityPropertyTypes() {
133+
return entityType.getEntityPropertyTypes();
134+
}
135+
136+
@Override
137+
public ENTITY newEntity(Map<String, Property<ENTITY, ?>> __args) {
138+
return entityType.newEntity(__args);
139+
}
140+
141+
@Override
142+
public Class<ENTITY> getEntityClass() {
143+
return entityType.getEntityClass();
144+
}
145+
146+
@Override
147+
public void saveCurrentStates(ENTITY entity) {
148+
entityType.saveCurrentStates(entity);
149+
}
150+
151+
@Override
152+
public ENTITY getOriginalStates(ENTITY entity) {
153+
return entityType.getOriginalStates(entity);
154+
}
155+
156+
@Override
157+
public void preInsert(ENTITY entity, PreInsertContext<ENTITY> context) {
158+
entityType.preInsert(entity, context);
159+
}
160+
161+
@Override
162+
public void preUpdate(ENTITY entity, PreUpdateContext<ENTITY> context) {
163+
entityType.preUpdate(entity, context);
164+
}
165+
166+
@Override
167+
public void preDelete(ENTITY entity, PreDeleteContext<ENTITY> context) {
168+
entityType.preDelete(entity, context);
169+
}
170+
171+
@Override
172+
public void postInsert(ENTITY entity, PostInsertContext<ENTITY> context) {
173+
entityType.postInsert(entity, context);
174+
}
175+
176+
@Override
177+
public void postUpdate(ENTITY entity, PostUpdateContext<ENTITY> context) {
178+
entityType.postUpdate(entity, context);
179+
}
180+
181+
@Override
182+
public void postDelete(ENTITY entity, PostDeleteContext<ENTITY> context) {
183+
entityType.postDelete(entity, context);
184+
}
185+
}

doma-processor/src/main/java/org/seasar/doma/internal/apt/generator/EntityMetamodelGenerator.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import org.seasar.doma.internal.util.Pair;
1616
import org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel;
1717
import org.seasar.doma.jdbc.criteria.metamodel.EntityMetamodel;
18+
import org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy;
1819
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel;
20+
import org.seasar.doma.jdbc.entity.EntityType;
1921

2022
public class EntityMetamodelGenerator extends AbstractGenerator {
2123

@@ -57,13 +59,14 @@ private void printClass() {
5759
indent();
5860
printValidateVersionStaticInitializer();
5961
printFields();
60-
printConstructor();
62+
printConstructors();
6163
printMethods();
6264
unindent();
6365
iprint("}%n");
6466
}
6567

6668
private void printFields() {
69+
printQualifiedTableNameField();
6770
printEntityTypeField();
6871
printAllPropertyMetamodelsFields();
6972
printPropertyDefFields();
@@ -81,9 +84,29 @@ private void printAllPropertyMetamodelsFields() {
8184
print("%n");
8285
}
8386

84-
private void printConstructor() {
87+
private void printQualifiedTableNameField() {
88+
iprint("private final String __qualifiedTableName;%n");
89+
print("%n");
90+
}
91+
92+
private void printConstructors() {
93+
printNoArgsConstructor();
94+
printOneArgConstructor();
95+
}
96+
97+
private void printNoArgsConstructor() {
8598
iprint("public %1$s() {%n", simpleName);
8699
indent();
100+
iprint("this(\"\");%n");
101+
unindent();
102+
iprint("}%n");
103+
print("%n");
104+
}
105+
106+
private void printOneArgConstructor() {
107+
iprint("public %1$s(String qualifiedTableName) {%n", simpleName);
108+
indent();
109+
iprint("this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName);%n");
87110
iprint(
88111
"java.util.ArrayList<%1$s<?>> __list = new java.util.ArrayList<>(%2$s);%n",
89112
PropertyMetamodel.class, entityMeta.getAllPropertyMetas().size());
@@ -138,8 +161,12 @@ private void printMethods() {
138161

139162
private void printAsTypeMethod() {
140163
iprint("@Override%n");
141-
iprint("public %1$s asType() {%n", entityTypeName);
142-
iprint(" return __entityType;%n");
164+
iprint("public %1$s<%2$s> asType() {%n", EntityType.class, entityMeta.getType());
165+
indent();
166+
iprint(
167+
"return __qualifiedTableName.isEmpty() ? __entityType : new %1$s<>(__entityType, __qualifiedTableName);%n",
168+
EntityTypeProxy.class);
169+
unindent();
143170
iprint("}%n");
144171
print("%n");
145172
}

doma-processor/src/test/resources/org/seasar/doma/internal/apt/processor/metamodel/MetamodelOptionTest_Emp.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public final class QEmpMetamodel implements org.seasar.doma.jdbc.criteria.metamo
88
org.seasar.doma.internal.Artifact.validateVersion("@VERSION@");
99
}
1010

11+
private final String __qualifiedTableName;
12+
1113
private final org.seasar.doma.internal.apt.processor.metamodel._Emp __entityType = org.seasar.doma.internal.apt.processor.metamodel._Emp.getSingletonInternal();
1214

1315
private final java.util.List<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __allPropertyMetamodels;
@@ -27,6 +29,11 @@ public final class QEmpMetamodel implements org.seasar.doma.jdbc.criteria.metamo
2729
public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<java.lang.Long> optionalLong = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel<java.lang.Long>(long.class, __entityType, "optionalLong");
2830

2931
public QEmpMetamodel() {
32+
this("");
33+
}
34+
35+
public QEmpMetamodel(String qualifiedTableName) {
36+
this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName);
3037
java.util.ArrayList<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __list = new java.util.ArrayList<>(7);
3138
__list.add(id);
3239
__list.add(name);
@@ -39,8 +46,8 @@ public final class QEmpMetamodel implements org.seasar.doma.jdbc.criteria.metamo
3946
}
4047

4148
@Override
42-
public org.seasar.doma.internal.apt.processor.metamodel._Emp asType() {
43-
return __entityType;
49+
public org.seasar.doma.jdbc.entity.EntityType<org.seasar.doma.internal.apt.processor.metamodel.Emp> asType() {
50+
return __qualifiedTableName.isEmpty() ? __entityType : new org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy<>(__entityType, __qualifiedTableName);
4451
}
4552

4653
@Override

doma-processor/src/test/resources/org/seasar/doma/internal/apt/processor/metamodel/MetamodelOptionTest_Person.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public final class QPersonMetamodel implements org.seasar.doma.jdbc.criteria.met
88
org.seasar.doma.internal.Artifact.validateVersion("@VERSION@");
99
}
1010

11+
private final String __qualifiedTableName;
12+
1113
private final org.seasar.doma.internal.apt.processor.metamodel._Person __entityType = org.seasar.doma.internal.apt.processor.metamodel._Person.getSingletonInternal();
1214

1315
private final java.util.List<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __allPropertyMetamodels;
@@ -17,20 +19,25 @@ public final class QPersonMetamodel implements org.seasar.doma.jdbc.criteria.met
1719
public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<org.seasar.doma.internal.apt.processor.metamodel.Name> name = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel<org.seasar.doma.internal.apt.processor.metamodel.Name>(org.seasar.doma.internal.apt.processor.metamodel.Name.class, __entityType, "name");
1820

1921
public QPersonMetamodel() {
22+
this("");
23+
}
24+
25+
public QPersonMetamodel(String qualifiedTableName) {
26+
this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName);
2027
java.util.ArrayList<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __list = new java.util.ArrayList<>(2);
2128
__list.add(id);
2229
__list.add(name);
2330
__allPropertyMetamodels = java.util.Collections.unmodifiableList(__list);
2431
}
2532

2633
@Override
27-
public org.seasar.doma.internal.apt.processor.metamodel._Person asType() {
28-
return __entityType;
34+
public org.seasar.doma.jdbc.entity.EntityType<org.seasar.doma.internal.apt.processor.metamodel.Person> asType() {
35+
return __qualifiedTableName.isEmpty() ? __entityType : new org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy<>(__entityType, __qualifiedTableName);
2936
}
3037

3138
@Override
3239
public java.util.List<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> allPropertyMetamodels() {
3340
return __allPropertyMetamodels;
3441
}
3542

36-
}
43+
}

doma-processor/src/test/resources/org/seasar/doma/internal/apt/processor/metamodel/MetamodelTest_Dept.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public final class QDept implements org.seasar.doma.jdbc.criteria.metamodel.Enti
88
org.seasar.doma.internal.Artifact.validateVersion("@VERSION@");
99
}
1010

11+
private final String __qualifiedTableName;
12+
1113
private final org.seasar.doma.internal.apt.processor.metamodel._Dept __entityType = org.seasar.doma.internal.apt.processor.metamodel._Dept.getSingletonInternal();
1214

1315
private final java.util.List<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __allPropertyMetamodels;
@@ -17,15 +19,20 @@ public final class QDept implements org.seasar.doma.jdbc.criteria.metamodel.Enti
1719
public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<org.seasar.doma.internal.apt.processor.metamodel.Name> name = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel<org.seasar.doma.internal.apt.processor.metamodel.Name>(org.seasar.doma.internal.apt.processor.metamodel.Name.class, __entityType, "name");
1820

1921
public QDept() {
22+
this("");
23+
}
24+
25+
public QDept(String qualifiedTableName) {
26+
this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName);
2027
java.util.ArrayList<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __list = new java.util.ArrayList<>(2);
2128
__list.add(id);
2229
__list.add(name);
2330
__allPropertyMetamodels = java.util.Collections.unmodifiableList(__list);
2431
}
2532

2633
@Override
27-
public org.seasar.doma.internal.apt.processor.metamodel._Dept asType() {
28-
return __entityType;
34+
public org.seasar.doma.jdbc.entity.EntityType<org.seasar.doma.internal.apt.processor.metamodel.Dept> asType() {
35+
return __qualifiedTableName.isEmpty() ? __entityType : new org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy<>(__entityType, __qualifiedTableName);
2936
}
3037

3138
@Override

doma-processor/src/test/resources/org/seasar/doma/internal/apt/processor/metamodel/MetamodelTest_Emp.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public final class Emp_ implements org.seasar.doma.jdbc.criteria.metamodel.Entit
88
org.seasar.doma.internal.Artifact.validateVersion("@VERSION@");
99
}
1010

11+
private final String __qualifiedTableName;
12+
1113
private final org.seasar.doma.internal.apt.processor.metamodel._Emp __entityType = org.seasar.doma.internal.apt.processor.metamodel._Emp.getSingletonInternal();
1214

1315
private final java.util.List<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __allPropertyMetamodels;
@@ -27,6 +29,11 @@ public final class Emp_ implements org.seasar.doma.jdbc.criteria.metamodel.Entit
2729
public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<java.lang.Long> optionalLong = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel<java.lang.Long>(long.class, __entityType, "optionalLong");
2830

2931
public Emp_() {
32+
this("");
33+
}
34+
35+
public Emp_(String qualifiedTableName) {
36+
this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName);
3037
java.util.ArrayList<org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel<?>> __list = new java.util.ArrayList<>(7);
3138
__list.add(id);
3239
__list.add(name);
@@ -39,8 +46,8 @@ public final class Emp_ implements org.seasar.doma.jdbc.criteria.metamodel.Entit
3946
}
4047

4148
@Override
42-
public org.seasar.doma.internal.apt.processor.metamodel._Emp asType() {
43-
return __entityType;
49+
public org.seasar.doma.jdbc.entity.EntityType<org.seasar.doma.internal.apt.processor.metamodel.Emp> asType() {
50+
return __qualifiedTableName.isEmpty() ? __entityType : new org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy<>(__entityType, __qualifiedTableName);
4451
}
4552

4653
@Override

0 commit comments

Comments
 (0)