Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/queries.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,10 @@ Each configuration entry generates one final repository class in the configured
`<sql[].name>Repository`. Every named query of that entry becomes one method of
that repository; sqlcj never generates a class per query.

- Every generated repository file begins with the fixed notice
`// Code generated by sqlcj. DO NOT EDIT.`, followed by one blank line and the
`package` declaration. The notice holds no version, timestamp, or filesystem
path.
- The repository has one `dev.sqlcj.runtime.QueryExecutor` field and one
constructor taking that executor.
- Methods appear in query-source order. A method name is the lower camel form
Expand Down Expand Up @@ -351,6 +355,8 @@ The `Author` entry of the [Quickstart](quickstart.md), which declares
`DeleteAuthor`, generates one `AuthorRepository`:

```java
// Code generated by sqlcj. DO NOT EDIT.

package com.example.app.db;

import dev.sqlcj.runtime.QueryExecutor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public final class JavaCodeGenerator implements CodeGenerator {

private static final String DEFAULT_PACKAGE = "generated";

private static final String GENERATED_NOTICE = "// Code generated by sqlcj. DO NOT EDIT.";

private final TypeResolver typeResolver = new DefaultTypeResolver();
private final String packageName;

Expand Down Expand Up @@ -71,9 +73,12 @@ private String generateSource(QueryGroupModel group, JavaNames names) {

%s

%s

%s
"""
.formatted(
GENERATED_NOTICE,
generatePackage(),
generateImports(group),
generateRepositoryJavaDoc(group).stripTrailing(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,11 @@ void shouldGenerateFromConfigurationInWorkingDirectory() throws Exception {

String source = Files.readString(generated);

assertTrue(source.startsWith("package dev.example.generated;"));
assertTrue(
source.startsWith(
"// Code generated by sqlcj. DO NOT EDIT.\n\npackage dev.example.generated;"
)
);
assertTrue(source.contains("public final class UsersRepository {"));
assertTrue(source.contains("public GetUserResult getUser(Long id)"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1237,13 +1237,21 @@ total DECIMAL(10, 2),

String users = Files.readString(usersFile);

assertTrue(users.startsWith("package dev.example.generated;"));
assertTrue(
users.startsWith(
"// Code generated by sqlcj. DO NOT EDIT.\n\npackage dev.example.generated;"
)
);
assertTrue(users.contains("public final class UsersRepository {"));
assertTrue(users.contains("public GetUserResult getUser(Long id)"));

String orders = Files.readString(ordersFile);

assertTrue(orders.startsWith("package dev.example.generated;"));
assertTrue(
orders.startsWith(
"// Code generated by sqlcj. DO NOT EDIT.\n\npackage dev.example.generated;"
)
);
assertTrue(orders.contains("public final class OrdersRepository {"));
assertTrue(orders.contains("public List<ListOrdersResult> listOrders(LocalDateTime createdAt)"));
assertTrue(orders.contains("BigDecimal total"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,43 @@ void shouldGeneratePackageDeclaration() {
);

assertTrue(
file.content().startsWith("package generated;")
file.content().startsWith(
"// Code generated by sqlcj. DO NOT EDIT.\n\npackage generated;"
)
);
}

@Test
void shouldGenerateDoNotEditNoticeBeforePackageDeclaration() {
CodeGenerator generator = new JavaCodeGenerator("dev.example.generated");

GeneratedFile file = generate(
generator,
query(
"GetUser",
QueryType.ONE,
List.of(
new QueryParameter(1, "id", ColumnType.BIGINT)
)
)
);

String source = file.content();

assertTrue(
source.startsWith(
"// Code generated by sqlcj. DO NOT EDIT.\n\npackage dev.example.generated;\n"
)
);

assertEquals(
1,
source.split("// Code generated by sqlcj\\. DO NOT EDIT\\.", -1).length - 1
);

assertTrue(source.contains(" * Generated by sqlcj."));
}

@Test
void shouldGenerateConfiguredPackageDeclarationAndPath() throws IOException {
CodeGenerator generator = new JavaCodeGenerator("dev.example.generated");
Expand Down Expand Up @@ -211,7 +244,9 @@ void shouldGenerateConfiguredPackageDeclarationAndPath() throws IOException {
);

assertTrue(
file.content().startsWith("package dev.example.generated;")
file.content().startsWith(
"// Code generated by sqlcj. DO NOT EDIT.\n\npackage dev.example.generated;"
)
);

assertCompiles(file);
Expand Down
Loading