Apply .gitignore

This commit is contained in:
2026-08-01 21:44:11 +05:30
parent 8449578424
commit 213f560c4a
49 changed files with 185 additions and 617 deletions

1
.gitignore vendored
View File

@@ -34,3 +34,4 @@
/cygnus-cloud-service/target
/cygnus-installer/src/target
/cygnus-installer/target
/cygnus-onprem-db/target

View File

@@ -1,206 +0,0 @@
package com.cygnus.installer;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
class DeploymentWriterTest {
@TempDir
Path temporaryDirectory;
@Test
void writesPortableProductDeploymentAndKeepsSecretsLocal() throws Exception {
UUID tenantId = UUID.randomUUID();
UUID installationId = UUID.randomUUID();
UUID installationUuid = UUID.randomUUID();
var validation = new ActivationDtos.ValidationResponse(
"activation-token",
OffsetDateTime.now().plusMinutes(5),
tenantId,
"matrix-client",
"FULL",
2);
var registration = new ActivationDtos.RegistrationResponse(
installationId,
installationUuid,
tenantId,
null,
"primary",
1,
"ACTIVE");
var profile = new ProductProfile(
"matrix",
"Matrix",
"matrix-onprem",
"MATRIX_IMAGE",
"matrix",
"installation.yml",
"MATRIX_INSTALLATION_CONFIG",
"/srv/matrix/config/installation.yml",
"8080:8080",
"/matrix/",
"/oauth2/token",
temporaryDirectory.resolve("unused.pem"),
temporaryDirectory.resolve("login-public.pem"),
"cygnus-login-2026-01",
List.of("region"));
Files.writeString(profile.loginEncryptionPublicKey(), "login-public-key");
var settings = new InstallerSettings(
"matrix",
URI.create("https://cloud.example.com"),
URI.create("http://host.docker.internal:8090"),
"/api/v1/installations",
"production",
temporaryDirectory,
temporaryDirectory,
"1",
new IniDocument(Map.of()));
Path output = new DeploymentWriter().write(
temporaryDirectory.resolve("output"),
installationUuid,
"primary",
"matrix-client",
validation,
registration,
new InstallationKeyService().generate(),
"encrypted.assertion.value",
settings,
profile,
"registry.example.com/matrix:1.0.0",
Map.of("region", "north"),
new RuntimeConfiguration(
"http://host.docker.internal:8090",
"jdbc:postgresql://db:5432/matrix",
"postgres",
"db-secret",
"redis",
"7901",
"redis-secret",
false,
"PT10S",
"PT30S"));
String config = Files.readString(output.resolve("config/installation.yml"));
String compose = Files.readString(output.resolve("compose.yml"));
assertThat(config)
.contains("client-id: \"matrix-client\"")
.contains("installation-id: \"" + installationId + "\"")
.contains("cloud-url: \"http://host.docker.internal:8090\"")
.contains("token-url: \"http://host.docker.internal:8090/oauth2/token\"")
.contains("region: \"north\"")
.doesNotContain("activation-token");
assertThat(compose)
.contains("matrix-onprem:")
.contains("- \"8080:8080\"")
.contains("./config:/srv/matrix/config:ro")
.contains("MATRIX_INSTALLATION_CONFIG");
assertThat(Files.readString(output.resolve(".env")))
.contains("MATRIX_IMAGE=\"registry.example.com/matrix:1.0.0\"")
.contains("MATRIX_DB_URL=\"jdbc:postgresql://db:5432/matrix\"")
.contains("REDIS_HOST=\"redis\"")
.contains("REDIS_DATABASE=\"1\"")
.contains("CYGNUS_CLOUD_BASE_URL=\"http://host.docker.internal:8090\"")
.contains("CYGNUS_TOKEN_URL=\"http://host.docker.internal:8090/oauth2/token\"")
.contains("CYGNUS_CLIENT_ID=\"matrix-client\"")
.contains("CYGNUS_INSTALLATION_ID=\"primary\"")
.contains("CYGNUS_CLIENT_ASSERTION=\"file:/srv/matrix/config/machine-assertion.jwt\"")
.contains("CYGNUS_LOGIN_PUBLIC_KEY=\"file:/srv/matrix/config/keys/login-public.pem\"");
assertThat(output.resolve("config/keys/login-public.pem"))
.hasContent("login-public-key");
assertThat(output.resolve("config/machine-assertion.jwt")).hasContent(
"encrypted.assertion.value");
assertThat(output.resolve("config/keys/client-signing-private.pem"))
.isRegularFile();
}
@Test
void refusesToOverwriteCloudServiceConfiguration() throws Exception {
Path cloudConfig = temporaryDirectory.resolve("config");
Path cloudKeys = cloudConfig.resolve("keys");
Files.createDirectories(cloudKeys);
Path assertionPublic = cloudKeys.resolve("assertion-decryption-public.pem");
Path loginPublic = cloudKeys.resolve("login-public.pem");
Files.writeString(assertionPublic, "assertion-public-key");
Files.writeString(loginPublic, "login-public-key");
var profile = new ProductProfile(
"matrix",
"Matrix",
"matrix-onprem",
"MATRIX_IMAGE",
"matrix",
"installation.yml",
"MATRIX_INSTALLATION_CONFIG",
"/srv/matrix/config/installation.yml",
"8080:8080",
"/matrix/",
"/oauth2/token",
assertionPublic,
loginPublic,
"cygnus-login-2026-01",
List.of());
assertThatThrownBy(() -> new DeploymentWriter().write(
temporaryDirectory,
UUID.randomUUID(),
"primary",
"matrix-client",
new ActivationDtos.ValidationResponse(
"activation-token",
OffsetDateTime.now().plusMinutes(5),
UUID.randomUUID(),
"matrix-client",
"FULL",
2),
new ActivationDtos.RegistrationResponse(
UUID.randomUUID(),
UUID.randomUUID(),
UUID.randomUUID(),
null,
"primary",
1,
"ACTIVE"),
new InstallationKeyService().generate(),
"assertion",
new InstallerSettings(
"matrix",
URI.create("https://cloud.example.com"),
URI.create("https://cloud.example.com"),
"/api/v1/installations",
"production",
temporaryDirectory,
temporaryDirectory,
"1",
new IniDocument(Map.of())),
profile,
"registry.example.com/matrix:1.0.0",
Map.of(),
new RuntimeConfiguration(
"https://cloud.example.com",
"jdbc:postgresql://db/matrix",
"postgres",
"secret",
"redis",
"7901",
"secret",
false,
"PT10S",
"PT30S")))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("cloud-service configuration");
assertThat(assertionPublic).hasContent("assertion-public-key");
assertThat(loginPublic).hasContent("login-public-key");
}
}

View File

@@ -1,34 +0,0 @@
package com.cygnus.installer;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.time.Duration;
import java.util.List;
import org.junit.jupiter.api.Test;
class DockerPrerequisiteCheckerTest {
@Test
void blocksInstallationWhenDockerIsUnavailable() {
CommandExecutor executor = executorReturning(new CommandResult(127, "not found"));
DockerPrerequisiteChecker checker = new DockerPrerequisiteChecker(executor);
assertThrows(PrerequisiteException.class, checker::verify);
}
@Test
void acceptsDockerEngineAndComposeV2() {
CommandExecutor executor = executorReturning(new CommandResult(0, "ok"));
DockerPrerequisiteChecker checker = new DockerPrerequisiteChecker(executor);
assertDoesNotThrow(checker::verify);
}
private CommandExecutor executorReturning(CommandResult result) {
return new CommandExecutor() {
@Override
public CommandResult execute(List<String> command, Duration timeout) {
return result;
}
};
}
}

View File

@@ -1,103 +0,0 @@
package com.cygnus.installer;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.nio.file.Files;
import java.nio.file.Path;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
class IniConfigurationLoaderTest {
@TempDir
Path temporaryDirectory;
private final IniConfigurationLoader loader = new IniConfigurationLoader();
@Test
void loadsAndNormalizesInstallerSettings() throws Exception {
Path ini = write("""
[installer]
product=matrix
cloud_service_url=https://cloud.example.com/
container_cloud_service_url=http://host.docker.internal:8090/
installer_api_base_path=/api/v1/installations/
environment=production
""");
InstallerSettings settings = loader.load(ini, "1.2.3");
assertThat(settings.product()).isEqualTo("matrix");
assertThat(settings.cloudServiceUrl().toString())
.isEqualTo("https://cloud.example.com");
assertThat(settings.containerCloudServiceUrl().toString())
.isEqualTo("http://host.docker.internal:8090");
assertThat(settings.validationPath())
.isEqualTo("/api/v1/installations/activation/validate");
assertThat(settings.registrationPath())
.isEqualTo("/api/v1/installations/register");
assertThat(settings.defaultOutputDirectory())
.isEqualTo(Path.of("./matrix-installation"));
}
@Test
void defaultsContainerCloudUrlToCanonicalCloudUrl() throws Exception {
Path ini = write("""
[installer]
product=matrix
cloud_service_url=https://cloud.example.com/
installer_api_base_path=/api/v1/installations
environment=production
""");
InstallerSettings settings = loader.load(ini, "1.2.3");
assertThat(settings.containerCloudServiceUrl())
.isEqualTo(settings.cloudServiceUrl());
}
@Test
void rejectsUnknownProduct() throws Exception {
Path ini = write("""
[installer]
product=unknown
cloud_service_url=https://cloud.example.com
installer_api_base_path=/api/v1/installations
environment=production
""");
assertThatThrownBy(() -> loader.load(ini, "1"))
.isInstanceOf(InstallerConfigurationException.class)
.hasMessageContaining("Unsupported product");
}
@Test
void rejectsInvalidCloudUrlAndApiPath() throws Exception {
Path invalidUrl = write("""
[installer]
product=cygnus
cloud_service_url=cloud.example.com
installer_api_base_path=/api/v1/installations
environment=production
""");
assertThatThrownBy(() -> loader.load(invalidUrl, "1"))
.hasMessageContaining("absolute http(s) URL");
Path invalidPath = write("""
[installer]
product=cygnus
cloud_service_url=https://cloud.example.com
installer_api_base_path=api/v1/installations
environment=production
""");
assertThatThrownBy(() -> loader.load(invalidPath, "1"))
.hasMessageContaining("absolute safe URL path");
}
private Path write(String content) throws Exception {
Path path = temporaryDirectory.resolve("installer-" + System.nanoTime() + ".ini");
Files.writeString(path, content);
return path;
}
}

View File

@@ -1,35 +0,0 @@
package com.cygnus.installer;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.nio.file.Path;
import java.util.Map;
import org.junit.jupiter.api.Test;
class InstallationServiceTest {
@Test
void rejectsIncompleteRequestBeforeCallingInfrastructure() {
InstallationService service =
new InstallationService(
null, null, null, null, null, null, null, null, null);
assertThatThrownBy(() -> service.install(
new InstallationRequest(
"",
"",
"",
"",
"",
"",
"",
"",
"",
Path.of("."),
Map.of(),
null),
(percentage, message) -> {}))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("Client code is required");
}
}

View File

@@ -1,60 +0,0 @@
package com.cygnus.installer;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.KeyPairGenerator;
import java.util.Base64;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
class MachineAssertionServiceTest {
@TempDir
Path temporaryDirectory;
@Test
void generatesEncryptedAssertionUsingOnlyCloudPublicKey() throws Exception {
var generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048);
var cloudKeys = generator.generateKeyPair();
Path cloudPublicKey = temporaryDirectory.resolve("cloud-public.pem");
Files.writeString(cloudPublicKey, pem(
"PUBLIC KEY", cloudKeys.getPublic().getEncoded()));
ProductProfile profile = new ProductProfile(
"matrix",
"Matrix",
"matrix-onprem",
"MATRIX_IMAGE",
"matrix",
"installation.yml",
"MATRIX_INSTALLATION_CONFIG",
"/opt/matrix/config/installation.yml",
"8080:8080",
"/matrix/",
"/oauth2/token",
cloudPublicKey,
cloudPublicKey,
"cygnus-login-2026-01",
List.of());
String assertion = new MachineAssertionService().generate(
"matrix-client",
"primary",
"https://cloud.example.com/oauth2/token",
new InstallationKeyService().generate(),
profile);
assertThat(assertion.split("\\.")).hasSize(5);
assertThat(assertion).doesNotContain("matrix-client");
}
private String pem(String type, byte[] encoded) {
return "-----BEGIN " + type + "-----\n"
+ Base64.getMimeEncoder(64, new byte[] {'\n'})
.encodeToString(encoded)
+ "\n-----END " + type + "-----\n";
}
}

View File

@@ -1,56 +0,0 @@
package com.cygnus.installer;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.file.Files;
import java.nio.file.Path;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
class ProductProfileRegistryTest {
@TempDir
Path temporaryDirectory;
@Test
void appliesProductProfileOverridesWithoutInstallerBranching() throws Exception {
Path publicKey = temporaryDirectory.resolve("cloud.pem");
Files.writeString(publicKey, "test");
Path loginPublicKey = temporaryDirectory.resolve("login.pem");
Files.writeString(loginPublicKey, "test-login");
Path ini = temporaryDirectory.resolve("installer.ini");
Files.writeString(ini, """
[installer]
product=cygnus
cloud_service_url=https://cloud.example.com
installer_api_base_path=/api/v1/installations
environment=production
[profile.cygnus]
display_name=Cygnus
assertion_encryption_public_key=cloud.pem
login_encryption_public_key=login.pem
login_key_id=cygnus-login-2026-01
service_name=custom-cygnus
image_environment_variable=CYGNUS_IMAGE
configuration_root=cygnus
configuration_file_name=installation.yml
installation_config_environment_variable=CYGNUS_INSTALLATION_CONFIG
container_configuration_path=/opt/cygnus/config/installation.yml
port_mapping=8080:8080
service_path=/matrix/
token_path=/oauth2/token
optional_fields=region,site_code
""");
InstallerSettings settings = new IniConfigurationLoader().load(ini, "1");
ProductProfile profile = new ProductProfileRegistry().resolve(settings);
assertThat(profile.displayName()).isEqualTo("Cygnus");
assertThat(profile.serviceName()).isEqualTo("custom-cygnus");
assertThat(profile.optionalInstallationFields())
.containsExactly("region", "site_code");
assertThat(profile.assertionEncryptionPublicKey()).isEqualTo(publicKey);
assertThat(profile.loginEncryptionPublicKey()).isEqualTo(loginPublicKey);
}
}

View File

@@ -8,5 +8,6 @@ import lombok.Setter;
public class Option {
private Object value;
private String label;
private String description;
private String group;
}

View File

@@ -37,3 +37,25 @@ List<Operation> rows = dbFunctions.query(
Large reports can use `stream(...)` so rows are consumed without retaining the
whole result in memory. PostgreSQL cursor fetching is enabled by running reads with
auto-commit disabled and the configured fetch size.
## Dynamic multi-value parameters
Use a typed array parameter with PostgreSQL `ANY` when the number of values is
not known in advance. The cached query remains parameterized:
```sql
select ... where op.description = any(?)
```
```java
dbExecutor.query(
queryId,
new Object[] { portfolioId, SqlArrayParameter.text(descriptions) },
Option.class);
```
Factories are available for text, integer, smallint, bigint, numeric, boolean,
UUID, date, timestamp and timestamp-with-time-zone arrays. Use
`SqlArrayParameter.of(postgresType, values)` for another PostgreSQL scalar or
enum type. An empty collection is valid and causes `= ANY(empty_array)` to
match no rows.

View File

@@ -1,5 +1,6 @@
package com.cygnus.db;
import java.sql.Array;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
@@ -18,7 +19,11 @@ final class ParameterBinder {
}
private void bind(PreparedStatement statement, int index, Object value) throws SQLException {
if (value instanceof SqlParameter parameter) {
if (value instanceof SqlArrayParameter parameter) {
Array array = statement.getConnection().createArrayOf(
parameter.elementType(), parameter.values());
statement.setArray(index, array);
} else if (value instanceof SqlParameter parameter) {
if (parameter.value() == null) statement.setNull(index, parameter.sqlType());
else statement.setObject(index, parameter.value(), parameter.sqlType());
} else if (value == null) {

View File

@@ -0,0 +1,57 @@
package com.cygnus.db;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.util.Collection;
import java.util.Objects;
import java.util.UUID;
import java.util.regex.Pattern;
/**
* A typed SQL array parameter for PostgreSQL expressions such as
* {@code column_name = ANY(?)}.
*/
public record SqlArrayParameter(String elementType, Object[] values) {
private static final Pattern TYPE_NAME = Pattern.compile(
"[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)?");
public SqlArrayParameter {
elementType = Objects.requireNonNull(elementType, "elementType").trim();
if (!TYPE_NAME.matcher(elementType).matches()) {
throw new IllegalArgumentException("Invalid SQL array element type: " + elementType);
}
values = Objects.requireNonNull(values, "values").clone();
}
@Override
public Object[] values() {
return values.clone();
}
public static SqlArrayParameter of(String elementType, Object... values) {
return new SqlArrayParameter(elementType, values);
}
public static SqlArrayParameter of(String elementType, Collection<?> values) {
Objects.requireNonNull(values, "values");
return new SqlArrayParameter(elementType, values.toArray());
}
public static SqlArrayParameter text(String... values) { return of("text", (Object[]) values); }
public static SqlArrayParameter text(Collection<String> values) { return of("text", values); }
public static SqlArrayParameter integer(Integer... values) { return of("integer", (Object[]) values); }
public static SqlArrayParameter smallint(Short... values) { return of("smallint", (Object[]) values); }
public static SqlArrayParameter bigint(Long... values) { return of("bigint", (Object[]) values); }
public static SqlArrayParameter numeric(BigDecimal... values) { return of("numeric", (Object[]) values); }
public static SqlArrayParameter bool(Boolean... values) { return of("boolean", (Object[]) values); }
public static SqlArrayParameter uuid(UUID... values) { return of("uuid", (Object[]) values); }
public static SqlArrayParameter date(LocalDate... values) { return of("date", (Object[]) values); }
public static SqlArrayParameter timestamp(LocalDateTime... values) {
return of("timestamp", (Object[]) values);
}
public static SqlArrayParameter timestampWithTimeZone(OffsetDateTime... values) {
return of("timestamptz", (Object[]) values);
}
}

View File

@@ -0,0 +1,98 @@
package com.cygnus.db;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import java.lang.reflect.Proxy;
import java.sql.Array;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.Test;
class ParameterBinderTest {
@Test
void bindsDynamicTextCollectionAsOneTypedSqlArray() throws Exception {
BindingCapture capture = new BindingCapture();
new ParameterBinder().bind(capture.statement(), new Object[] {
SqlArrayParameter.text(List.of("CATEGORY", "PRODUCT"))
});
assertEquals("text", capture.elementType.get());
assertArrayEquals(new Object[] {"CATEGORY", "PRODUCT"}, capture.values.get());
assertEquals(1, capture.parameterIndex.get());
}
@Test
void supportsUuidAndEmptyArrays() throws Exception {
UUID id = UUID.randomUUID();
BindingCapture uuidCapture = new BindingCapture();
new ParameterBinder().bind(uuidCapture.statement(),
new Object[] {SqlArrayParameter.uuid(id)});
assertEquals("uuid", uuidCapture.elementType.get());
assertArrayEquals(new Object[] {id}, uuidCapture.values.get());
BindingCapture emptyCapture = new BindingCapture();
new ParameterBinder().bind(emptyCapture.statement(),
new Object[] {SqlArrayParameter.integer()});
assertEquals("integer", emptyCapture.elementType.get());
assertArrayEquals(new Object[0], emptyCapture.values.get());
}
private static final class BindingCapture {
private final AtomicReference<String> elementType = new AtomicReference<>();
private final AtomicReference<Object[]> values = new AtomicReference<>();
private final AtomicInteger parameterIndex = new AtomicInteger();
private final Array sqlArray = proxy(Array.class, (method, args) -> defaultValue(method.getReturnType()));
PreparedStatement statement() {
Connection connection = proxy(Connection.class, (method, args) -> {
if (method.getName().equals("createArrayOf")) {
elementType.set((String) args[0]);
values.set(((Object[]) args[1]).clone());
return sqlArray;
}
return defaultValue(method.getReturnType());
});
return proxy(PreparedStatement.class, (method, args) -> {
if (method.getName().equals("getConnection")) return connection;
if (method.getName().equals("setArray")) {
parameterIndex.set((Integer) args[0]);
assertSame(sqlArray, args[1]);
return null;
}
return defaultValue(method.getReturnType());
});
}
}
@SuppressWarnings("unchecked")
private static <T> T proxy(Class<T> type, Handler handler) {
return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class<?>[] {type},
(proxy, method, args) -> handler.invoke(method, args));
}
private static Object defaultValue(Class<?> type) {
if (!type.isPrimitive()) return null;
if (type == boolean.class) return false;
if (type == byte.class) return (byte) 0;
if (type == short.class) return (short) 0;
if (type == int.class) return 0;
if (type == long.class) return 0L;
if (type == float.class) return 0F;
if (type == double.class) return 0D;
if (type == char.class) return '\0';
return null;
}
@FunctionalInterface
private interface Handler {
Object invoke(java.lang.reflect.Method method, Object[] args) throws Throwable;
}
}

View File

@@ -1,3 +0,0 @@
artifactId=cygnus-onprem-db
groupId=com.cygnus
version=1.0.0-SNAPSHOT

View File

@@ -1,25 +0,0 @@
com/cygnus/db/RowConsumer.class
com/cygnus/db/RowView.class
com/cygnus/db/QueryDefinitionException.class
com/cygnus/db/QueryDefinitionProvider.class
com/cygnus/db/CygnusDbExecutor.class
com/cygnus/db/SqlParameter.class
com/cygnus/db/ObjectRowMapperFactory$RecordMetadata.class
com/cygnus/db/JdbcCygnusDbExecutor.class
com/cygnus/db/JdbcCygnusDbExecutor$SqlWork.class
com/cygnus/db/QueryDefinition.class
com/cygnus/db/QueryType.class
com/cygnus/db/ObjectRowMapperFactory$TypeMetadata.class
com/cygnus/db/TransactionCallback.class
com/cygnus/db/RowMapper.class
com/cygnus/db/ObjectRowMapperFactory.class
com/cygnus/db/DatabaseExecutionException.class
com/cygnus/db/ObjectRowMapperFactory$FieldBinding.class
com/cygnus/db/TransactionOperations.class
com/cygnus/db/ValueConverter.class
com/cygnus/db/ExecutorOptions.class
com/cygnus/db/DbResult.class
com/cygnus/db/ParameterBinder.class
com/cygnus/db/ObjectRowMapperFactory$BeanMetadata.class
com/cygnus/db/JdbcCygnusDbExecutor$TransactionOperationsImpl.class
com/cygnus/db/ImmutableRowView.class

View File

@@ -1,19 +0,0 @@
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/CygnusDbExecutor.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/DatabaseExecutionException.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/DbResult.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/ExecutorOptions.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/ImmutableRowView.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/JdbcCygnusDbExecutor.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/ObjectRowMapperFactory.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/ParameterBinder.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/QueryDefinition.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/QueryDefinitionException.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/QueryDefinitionProvider.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/QueryType.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/RowConsumer.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/RowMapper.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/RowView.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/SqlParameter.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/TransactionCallback.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/TransactionOperations.java
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/main/java/com/cygnus/db/ValueConverter.java

View File

@@ -1,2 +0,0 @@
com/cygnus/db/JdbcCygnusDbExecutorTest.class
com/cygnus/db/JdbcCygnusDbExecutorTest$Person.class

View File

@@ -1 +0,0 @@
/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/src/test/java/com/cygnus/db/JdbcCygnusDbExecutorTest.java

View File

@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="com.cygnus.db.JdbcCygnusDbExecutorTest" time="0.124" tests="5" errors="0" skipped="0" failures="0">
<properties>
<property name="java.specification.version" value="25"/>
<property name="sun.jnu.encoding" value="UTF-8"/>
<property name="java.class.path" value="/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/test-classes:/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/classes:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter/5.12.2/junit-jupiter-5.12.2.jar:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.12.2/junit-jupiter-api-5.12.2.jar:/Users/maddy/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar:/Users/maddy/.m2/repository/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.jar:/Users/maddy/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.12.2/junit-jupiter-params-5.12.2.jar:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.12.2/junit-jupiter-engine-5.12.2.jar:/Users/maddy/.m2/repository/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.jar:/Users/maddy/.m2/repository/com/h2database/h2/2.3.232/h2-2.3.232.jar:"/>
<property name="java.vm.vendor" value="Homebrew"/>
<property name="sun.arch.data.model" value="64"/>
<property name="java.vendor.url" value="https://github.com/Homebrew/homebrew-core/issues"/>
<property name="user.timezone" value="Asia/Kolkata"/>
<property name="os.name" value="Mac OS X"/>
<property name="java.vm.specification.version" value="25"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="US"/>
<property name="sun.boot.library.path" value="/opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home/lib"/>
<property name="sun.java.command" value="/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/surefire/surefirebooter-20260801204254090_6.jar /Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/surefire 2026-08-01T20-42-53_787-jvmRun1 surefire-20260801204254090_4tmp surefire_1-20260801204254090_5tmp"/>
<property name="http.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/test-classes:/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/classes:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter/5.12.2/junit-jupiter-5.12.2.jar:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.12.2/junit-jupiter-api-5.12.2.jar:/Users/maddy/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar:/Users/maddy/.m2/repository/org/junit/platform/junit-platform-commons/1.12.2/junit-platform-commons-1.12.2.jar:/Users/maddy/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.12.2/junit-jupiter-params-5.12.2.jar:/Users/maddy/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.12.2/junit-jupiter-engine-5.12.2.jar:/Users/maddy/.m2/repository/org/junit/platform/junit-platform-engine/1.12.2/junit-platform-engine-1.12.2.jar:/Users/maddy/.m2/repository/com/h2database/h2/2.3.232/h2-2.3.232.jar:"/>
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="/Users/maddy"/>
<property name="user.language" value="en"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.version.date" value="2026-01-20"/>
<property name="java.home" value="/opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home"/>
<property name="file.separator" value="/"/>
<property name="basedir" value="/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db"/>
<property name="java.vm.compressedOopsMode" value="Zero based"/>
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="apple.awt.application.name" value="ForkedBooter"/>
<property name="surefire.real.class.path" value="/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db/target/surefire/surefirebooter-20260801204254090_6.jar"/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="ftp.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
<property name="java.runtime.version" value="25.0.2"/>
<property name="user.name" value="maddy"/>
<property name="stdout.encoding" value="UTF-8"/>
<property name="path.separator" value=":"/>
<property name="os.version" value="26.5.2"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="java.vendor.version" value="Homebrew"/>
<property name="localRepository" value="/Users/maddy/.m2/repository"/>
<property name="java.vendor.url.bug" value="https://github.com/Homebrew/homebrew-core/issues"/>
<property name="java.io.tmpdir" value="/var/folders/1l/36214rdn79755j30lcnmgsqh0000gn/T/"/>
<property name="java.version" value="25.0.2"/>
<property name="user.dir" value="/Users/maddy/Projects/cygnus/matrix/cygnus-onprem-db"/>
<property name="os.arch" value="aarch64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="native.encoding" value="UTF-8"/>
<property name="java.library.path" value="/Users/maddy/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="UTF-8"/>
<property name="java.vendor" value="Homebrew"/>
<property name="java.vm.version" value="25.0.2"/>
<property name="stdin.encoding" value="UTF-8"/>
<property name="sun.io.unicode.encoding" value="UnicodeBig"/>
<property name="socksNonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
<property name="java.class.version" value="69.0"/>
</properties>
<testcase name="executesProcedureAndStreamsWithoutMaterializingRows" classname="com.cygnus.db.JdbcCygnusDbExecutorTest" time="0.095"/>
<testcase name="executesInsertUpdateDeleteAndGeneratedKeys" classname="com.cygnus.db.JdbcCygnusDbExecutorTest" time="0.004"/>
<testcase name="mapsSelectDirectlyToRecordsAndDynamicRows" classname="com.cygnus.db.JdbcCygnusDbExecutorTest" time="0.009"/>
<testcase name="rollsBackFailedTransactions" classname="com.cygnus.db.JdbcCygnusDbExecutorTest" time="0.003"/>
<testcase name="rejectsLegacyStringReplacementQueries" classname="com.cygnus.db.JdbcCygnusDbExecutorTest" time="0.002"/>
</testsuite>

View File

@@ -1,4 +0,0 @@
-------------------------------------------------------------------------------
Test set: com.cygnus.db.JdbcCygnusDbExecutorTest
-------------------------------------------------------------------------------
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.124 s -- in com.cygnus.db.JdbcCygnusDbExecutorTest