Skip to content

Commit 7cda84c

Browse files
nakamura-toclaude
andcommitted
Fix SQL file duplication by filtering based on DAO package name
Modified sqlFilesProvider() to include only SQL files matching the DAO package structure, preventing duplicate SQL files from being processed during code generation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 66f858d commit 7cda84c

File tree

1 file changed

+41
-39
lines changed

1 file changed

+41
-39
lines changed

codegen/src/main/java/org/seasar/doma/gradle/codegen/extension/CodeGenConfig.java

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.Set;
1313
import javax.inject.Inject;
1414
import javax.sql.DataSource;
15+
1516
import org.gradle.api.Action;
1617
import org.gradle.api.Project;
1718
import org.gradle.api.artifacts.Configuration;
@@ -152,19 +153,19 @@ private void applyDefaults(Project project) {
152153

153154
private Provider<DataSource> dataSourceProvider() {
154155
return url.map(
155-
it -> {
156-
String driverClassName = JdbcUtil.inferDriverClassName(it);
157-
if (driverClassName == null) {
158-
throw new CodeGenException(Message.DOMAGEN0024);
159-
}
160-
ClassLoader classLoader = createClassLoader();
161-
Driver driver =
162-
ClassUtil.newInstance(Driver.class, driverClassName, "driverClassName", classLoader);
163-
DriverWrapper driverWrapper = new DriverWrapper(driver);
164-
return globalFactory
165-
.get()
166-
.createDataSource(driverWrapper, user.getOrNull(), password.getOrNull(), url.get());
167-
});
156+
it -> {
157+
String driverClassName = JdbcUtil.inferDriverClassName(it);
158+
if (driverClassName == null) {
159+
throw new CodeGenException(Message.DOMAGEN0024);
160+
}
161+
ClassLoader classLoader = createClassLoader();
162+
Driver driver =
163+
ClassUtil.newInstance(Driver.class, driverClassName, "driverClassName", classLoader);
164+
DriverWrapper driverWrapper = new DriverWrapper(driver);
165+
return globalFactory
166+
.get()
167+
.createDataSource(driverWrapper, user.getOrNull(), password.getOrNull(), url.get());
168+
});
168169
}
169170

170171
protected ClassLoader createClassLoader() {
@@ -186,17 +187,17 @@ protected ClassLoader createClassLoader() {
186187

187188
private Provider<CodeGenDialect> codeGenDialectProvider() {
188189
return url.map(
189-
it -> {
190-
String dialectName = JdbcUtil.inferDialectName(it);
191-
if (dialectName == null) {
192-
throw new CodeGenException(Message.DOMAGEN0025);
193-
}
194-
CodeGenDialect codeGenDialect = CodeGenDialectRegistry.lookup(dialectName);
195-
if (codeGenDialect == null) {
196-
throw new CodeGenException(Message.DOMAGEN0023, dialectName);
197-
}
198-
return codeGenDialect;
199-
});
190+
it -> {
191+
String dialectName = JdbcUtil.inferDialectName(it);
192+
if (dialectName == null) {
193+
throw new CodeGenException(Message.DOMAGEN0025);
194+
}
195+
CodeGenDialect codeGenDialect = CodeGenDialectRegistry.lookup(dialectName);
196+
if (codeGenDialect == null) {
197+
throw new CodeGenException(Message.DOMAGEN0023, dialectName);
198+
}
199+
return codeGenDialect;
200+
});
200201
}
201202

202203
private Provider<LanguageClassResolver> languageClassResolverProvider() {
@@ -205,29 +206,30 @@ private Provider<LanguageClassResolver> languageClassResolverProvider() {
205206

206207
private Provider<Directory> sourceDirProvider(Project project) {
207208
return languageType.map(
208-
it -> project.getLayout().getProjectDirectory().dir("src/main/" + it.name().toLowerCase()));
209+
it -> project.getLayout().getProjectDirectory().dir("src/main/" + it.name().toLowerCase()));
209210
}
210211

211212
private Provider<Directory> testSourceDirProvider(Project project) {
212213
return languageType.map(
213-
it -> project.getLayout().getProjectDirectory().dir("src/test/" + it.name().toLowerCase()));
214+
it -> project.getLayout().getProjectDirectory().dir("src/test/" + it.name().toLowerCase()));
214215
}
215216

216217
private Provider<Generator> generatorProvider() {
217218
return globalFactory.map(
218-
it ->
219-
it.createGenerator(
220-
languageType.get(), templateEncoding.get(), templateDir.getAsFile().getOrNull()));
219+
it ->
220+
it.createGenerator(
221+
languageType.get(), templateEncoding.get(), templateDir.getAsFile().getOrNull()));
221222
}
222223

223224
private Provider<FileTree> sqlFilesProvider() {
224225
return resourceDir.map(
225-
it ->
226-
it.getAsFileTree()
227-
.matching(
228-
filterConfig -> {
229-
filterConfig.include("META-INF/**/*.sql");
230-
}));
226+
it -> {
227+
String packageName = daoConfig.getPackageName().get();
228+
String path = packageName.replace('.', '/');
229+
return it.getAsFileTree()
230+
.matching(
231+
filterConfig -> filterConfig.include("META-INF/" + path + "/*/*.sql"));
232+
});
231233
}
232234

233235
private void validateProperties(Project project) {
@@ -236,13 +238,13 @@ private void validateProperties(Project project) {
236238
}
237239
if (!dataSource.isPresent()) {
238240
throw new CodeGenException(
239-
Message.DOMAGEN0007, "dataSource", "Specify the \"url\" or the \"dataSource\" property.");
241+
Message.DOMAGEN0007, "dataSource", "Specify the \"url\" or the \"dataSource\" property.");
240242
}
241243
if (!codeGenDialect.isPresent()) {
242244
throw new CodeGenException(
243-
Message.DOMAGEN0007,
244-
"codeGenDialect",
245-
"Specify the \"url\" or the \"codeGenDialect\" property.");
245+
Message.DOMAGEN0007,
246+
"codeGenDialect",
247+
"Specify the \"url\" or the \"codeGenDialect\" property.");
246248
}
247249
if (!tableNamePattern.isPresent()) {
248250
throw new CodeGenException(Message.DOMAGEN0007, "tableNamePattern", "");

0 commit comments

Comments
 (0)