Initial Development #1

Merged
danieljsummers merged 88 commits from v1-rc into main 2025-04-16 01:29:20 +00:00
82 changed files with 232 additions and 537 deletions
Showing only changes of commit 11e3200ff7 - Show all commits

View File

@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>solutions.bitbadger.documents</groupId>
<artifactId>common</artifactId>
<version>4.0.0-alpha1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>solutions.bitbadger</groupId>
<artifactId>documents</artifactId>
<version>4.0.0-alpha1-SNAPSHOT</version>
</parent>
<name>${project.groupId}:${project.artifactId}</name>
<description>Expose a document store interface for PostgreSQL and SQLite (Common Library)</description>
<url>https://bitbadger.solutions/open-source/relational-documents/jvm/</url>
<scm>
<connection>scm:git:https://git.bitbadger.solutions/bit-badger/solutions.bitbadger.documents.git</connection>
<developerConnection>scm:git:https://git.bitbadger.solutions/bit-badger/solutions.bitbadger.documents.git</developerConnection>
<url>https://git.bitbadger.solutions/bit-badger/solutions.bitbadger.documents</url>
</scm>
<build>
<sourceDirectory>src/main/kotlin</sourceDirectory>
<testSourceDirectory>src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.2</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -23,7 +23,8 @@ fun <TDoc> Connection.customList(
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
clazz: Class<TDoc>, clazz: Class<TDoc>,
mapFunc: (ResultSet, Class<TDoc>) -> TDoc mapFunc: (ResultSet, Class<TDoc>) -> TDoc
) = Custom.list(query, parameters, clazz, this, mapFunc) ) =
solutions.bitbadger.documents.jvm.Custom.list(query, parameters, clazz, this, mapFunc)
/** /**
* Execute a query that returns one or no results * Execute a query that returns one or no results
@ -39,7 +40,8 @@ fun <TDoc> Connection.customSingle(
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
clazz: Class<TDoc>, clazz: Class<TDoc>,
mapFunc: (ResultSet, Class<TDoc>) -> TDoc mapFunc: (ResultSet, Class<TDoc>) -> TDoc
) = Custom.single(query, parameters, clazz, this, mapFunc) ) =
solutions.bitbadger.documents.jvm.Custom.single(query, parameters, clazz, this, mapFunc)
/** /**
* Execute a query that returns no results * Execute a query that returns no results
@ -48,7 +50,7 @@ fun <TDoc> Connection.customSingle(
* @param parameters Parameters to use for the query * @param parameters Parameters to use for the query
*/ */
fun Connection.customNonQuery(query: String, parameters: Collection<Parameter<*>> = listOf()) = fun Connection.customNonQuery(query: String, parameters: Collection<Parameter<*>> = listOf()) =
Custom.nonQuery(query, parameters, this) solutions.bitbadger.documents.jvm.Custom.nonQuery(query, parameters, this)
/** /**
* Execute a query that returns a scalar result * Execute a query that returns a scalar result
@ -64,7 +66,8 @@ fun <T : Any> Connection.customScalar(
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
clazz: Class<T>, clazz: Class<T>,
mapFunc: (ResultSet, Class<T>) -> T mapFunc: (ResultSet, Class<T>) -> T
) = Custom.scalar(query, parameters, clazz, this, mapFunc) ) =
solutions.bitbadger.documents.jvm.Custom.scalar(query, parameters, clazz, this, mapFunc)
// ~~~ DEFINITION QUERIES ~~~ // ~~~ DEFINITION QUERIES ~~~

View File

@ -1,10 +1,10 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import AutoId; import solutions.bitbadger.documents.AutoId;
import solutions.bitbadger.documents.DocumentException; import solutions.bitbadger.documents.DocumentException;
import solutions.bitbadger.documents.java.java.testDocs.*; import solutions.bitbadger.documents.java.support.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import kotlin.Pair; import kotlin.Pair;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.java; package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,10 +1,10 @@
package solutions.bitbadger.documents.java.java; package solutions.bitbadger.documents.java.jvm;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import solutions.bitbadger.documents.*; import solutions.bitbadger.documents.*;
import solutions.bitbadger.documents.java.jvm.Parameters; import solutions.bitbadger.documents.jvm.Parameters;
import java.util.List; import java.util.List;

View File

@ -1,15 +1,15 @@
package solutions.bitbadger.documents.java.java.integration.common; package solutions.bitbadger.documents.java.jvm.integration.common;
import solutions.bitbadger.documents.Field; import solutions.bitbadger.documents.Field;
import solutions.bitbadger.documents.java.jvm.Count; import solutions.bitbadger.documents.jvm.Count;
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase; import solutions.bitbadger.documents.support.ThrowawayDatabase;
import solutions.bitbadger.documents.java.java.testDocs.JsonDocument; import solutions.bitbadger.documents.java.support.JsonDocument;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static solutions.bitbadger.documents.java.integration.TypesKt.TEST_TABLE; import static solutions.bitbadger.documents.support.TypesKt.TEST_TABLE;
/** /**
* Integration tests for the `Count` object * Integration tests for the `Count` object

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.java.integration.postgresql; package solutions.bitbadger.documents.java.jvm.integration.postgresql;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import solutions.bitbadger.documents.java.integration.postgresql.PgDB; import solutions.bitbadger.documents.java.jvm.integration.common.CountFunctions;
import solutions.bitbadger.documents.java.java.integration.common.CountFunctions; import solutions.bitbadger.documents.jvm.integration.postgresql.PgDB;
/** /**
* PostgreSQL integration tests for the `Count` object / `count*` connection extension functions * PostgreSQL integration tests for the `Count` object / `count*` connection extension functions

View File

@ -1,10 +1,10 @@
package solutions.bitbadger.documents.java.java.integration.sqlite; package solutions.bitbadger.documents.java.jvm.integration.sqlite;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import solutions.bitbadger.documents.DocumentException; import solutions.bitbadger.documents.DocumentException;
import solutions.bitbadger.documents.java.integration.sqlite.SQLiteDB; import solutions.bitbadger.documents.java.jvm.integration.common.CountFunctions;
import solutions.bitbadger.documents.java.java.integration.common.CountFunctions; import solutions.bitbadger.documents.jvm.integration.sqlite.SQLiteDB;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
public class ByteIdClass { public class ByteIdClass {

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
public class IntIdClass { public class IntIdClass {

View File

@ -1,12 +1,12 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
import kotlinx.serialization.Serializable; import kotlinx.serialization.Serializable;
import solutions.bitbadger.documents.java.jvm.Document; import solutions.bitbadger.documents.jvm.Document;
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase; import solutions.bitbadger.documents.support.ThrowawayDatabase;
import java.util.List; import java.util.List;
import static solutions.bitbadger.documents.java.integration.TypesKt.TEST_TABLE; import static solutions.bitbadger.documents.support.TypesKt.TEST_TABLE;
@Serializable @Serializable
public class JsonDocument { public class JsonDocument {

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
public class LongIdClass { public class LongIdClass {

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
public class ShortIdClass { public class ShortIdClass {

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
public class StringIdClass { public class StringIdClass {

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.java.testDocs; package solutions.bitbadger.documents.java.support;
public class SubDocument { public class SubDocument {

View File

@ -1,10 +1,8 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import AutoId
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertNotEquals import kotlin.test.assertNotEquals

View File

@ -1,8 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import solutions.bitbadger.documents.*
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertTrue import kotlin.test.assertTrue

View File

@ -1,12 +1,8 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import AutoId
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Dialect
import solutions.bitbadger.documents.DocumentException
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,9 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import solutions.bitbadger.documents.Dialect
import solutions.bitbadger.documents.DocumentException
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue

View File

@ -1,8 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import solutions.bitbadger.documents.DocumentIndex
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,8 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import solutions.bitbadger.documents.FieldMatch
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,10 +1,9 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.*
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotSame import kotlin.test.assertNotSame
import kotlin.test.assertNull import kotlin.test.assertNull

View File

@ -1,8 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import solutions.bitbadger.documents.Op
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,8 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import solutions.bitbadger.documents.ParameterName
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,10 +1,7 @@
package solutions.bitbadger.documents.common package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.Parameter
import solutions.bitbadger.documents.ParameterType
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNull import kotlin.test.assertNull

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java package solutions.bitbadger.documents.jvm
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
@ -38,7 +38,8 @@ class ParametersTest {
@DisplayName("nameFields works when changing fields") @DisplayName("nameFields works when changing fields")
fun nameFieldsChange() { fun nameFieldsChange() {
val fields = listOf( val fields = listOf(
Field.equal("a", ""), Field.equal("e", "", ":hi"), Field.equal("b", ""), Field.notExists("z")) Field.equal("a", ""), Field.equal("e", "", ":hi"), Field.equal("b", ""), Field.notExists("z")
)
val named = Parameters.nameFields(fields) val named = Parameters.nameFields(fields)
assertEquals(fields.size, named.size, "There should have been 4 fields in the list") assertEquals(fields.size, named.size, "There should have been 4 fields in the list")
assertNotSame(fields.elementAt(0), named.elementAt(0), "The first field should not be the same") assertNotSame(fields.elementAt(0), named.elementAt(0), "The first field should not be the same")

View File

@ -1,13 +1,8 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.java.extensions.countAll import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.extensions.countByContains import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.extensions.countByFields
import solutions.bitbadger.documents.java.extensions.countByJsonPath
import solutions.bitbadger.documents.java.integration.JsonDocument
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,16 +1,12 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.*
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.Parameter import solutions.bitbadger.documents.jvm.Results
import solutions.bitbadger.documents.ParameterType import solutions.bitbadger.documents.query.Count
import solutions.bitbadger.documents.common.* import solutions.bitbadger.documents.query.Delete
import solutions.bitbadger.documents.java.* import solutions.bitbadger.documents.query.Find
import solutions.bitbadger.documents.java.extensions.* import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.integration.JsonDocument
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import solutions.bitbadger.documents.java.jvm.Results
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertNull import kotlin.test.assertNull

View File

@ -1,11 +1,11 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.DocumentIndex import solutions.bitbadger.documents.DocumentIndex
import solutions.bitbadger.documents.java.extensions.ensureDocumentIndex import solutions.bitbadger.documents.extensions.ensureDocumentIndex
import solutions.bitbadger.documents.java.extensions.ensureFieldIndex import solutions.bitbadger.documents.extensions.ensureFieldIndex
import solutions.bitbadger.documents.java.extensions.ensureTable import solutions.bitbadger.documents.extensions.ensureTable
import solutions.bitbadger.documents.java.integration.TEST_TABLE import solutions.bitbadger.documents.support.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase import solutions.bitbadger.documents.support.ThrowawayDatabase
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertTrue import kotlin.test.assertTrue

View File

@ -1,10 +1,10 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.java.extensions.* import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.integration.JsonDocument import solutions.bitbadger.documents.support.JsonDocument
import solutions.bitbadger.documents.java.integration.TEST_TABLE import solutions.bitbadger.documents.support.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase import solutions.bitbadger.documents.support.ThrowawayDatabase
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,11 +1,10 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import AutoId import solutions.bitbadger.documents.AutoId
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.common.* import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.extensions.* import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.integration.*
import kotlin.test.* import kotlin.test.*
/** /**

View File

@ -1,13 +1,8 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.java.extensions.existsByContains import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.extensions.existsByFields import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.extensions.existsById
import solutions.bitbadger.documents.java.extensions.existsByJsonPath
import solutions.bitbadger.documents.java.integration.JsonDocument
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertTrue import kotlin.test.assertTrue

View File

@ -1,11 +1,10 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.FieldMatch import solutions.bitbadger.documents.FieldMatch
import solutions.bitbadger.documents.common.* import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.extensions.* import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.integration.*
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertNull import kotlin.test.assertNull

View File

@ -1,10 +1,8 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.java.extensions.* import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.integration.JsonDocument import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertNotNull import kotlin.test.assertNotNull

View File

@ -1,10 +1,8 @@
package solutions.bitbadger.documents.java.integration.common package solutions.bitbadger.documents.jvm.integration.common
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.java.extensions.* import solutions.bitbadger.documents.extensions.*
import solutions.bitbadger.documents.java.integration.JsonDocument import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import kotlin.test.* import kotlin.test.*

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Count import solutions.bitbadger.documents.jvm.integration.common.Count
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Custom import solutions.bitbadger.documents.jvm.integration.common.Custom
import kotlin.test.Test import kotlin.test.Test

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Definition import solutions.bitbadger.documents.jvm.integration.common.Definition
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Delete import solutions.bitbadger.documents.jvm.integration.common.Delete
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Document import solutions.bitbadger.documents.jvm.integration.common.Document
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Exists import solutions.bitbadger.documents.jvm.integration.common.Exists
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Find import solutions.bitbadger.documents.jvm.integration.common.Find
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Patch import solutions.bitbadger.documents.jvm.integration.common.Patch
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,18 +1,11 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import AutoId import solutions.bitbadger.documents.*
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.extensions.customNonQuery
import solutions.bitbadger.documents.Parameter import solutions.bitbadger.documents.extensions.customScalar
import solutions.bitbadger.documents.ParameterType import solutions.bitbadger.documents.extensions.ensureTable
import solutions.bitbadger.documents.common.* import solutions.bitbadger.documents.jvm.*
import solutions.bitbadger.documents.java.* import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.extensions.customNonQuery
import solutions.bitbadger.documents.java.extensions.customScalar
import solutions.bitbadger.documents.java.extensions.ensureTable
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import solutions.bitbadger.documents.java.jvm.DocumentConfig
import solutions.bitbadger.documents.java.jvm.Results
/** /**
* A wrapper for a throwaway PostgreSQL database * A wrapper for a throwaway PostgreSQL database

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.postgresql package solutions.bitbadger.documents.jvm.integration.postgresql
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.RemoveFields import solutions.bitbadger.documents.jvm.integration.common.RemoveFields
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.Count import solutions.bitbadger.documents.jvm.integration.common.Count
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Custom import solutions.bitbadger.documents.jvm.integration.common.Custom
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.Definition import solutions.bitbadger.documents.jvm.integration.common.Definition
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.Delete import solutions.bitbadger.documents.jvm.integration.common.Delete
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import solutions.bitbadger.documents.java.integration.common.Document import solutions.bitbadger.documents.jvm.integration.common.Document
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.Exists import solutions.bitbadger.documents.jvm.integration.common.Exists
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.Find import solutions.bitbadger.documents.jvm.integration.common.Find
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.Patch import solutions.bitbadger.documents.jvm.integration.common.Patch
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,9 +1,9 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.integration.common.RemoveFields import solutions.bitbadger.documents.jvm.integration.common.RemoveFields
import kotlin.test.Test import kotlin.test.Test
/** /**

View File

@ -1,17 +1,10 @@
package solutions.bitbadger.documents.java.integration.sqlite package solutions.bitbadger.documents.jvm.integration.sqlite
import AutoId import solutions.bitbadger.documents.*
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.extensions.customScalar
import solutions.bitbadger.documents.Parameter import solutions.bitbadger.documents.extensions.ensureTable
import solutions.bitbadger.documents.ParameterType import solutions.bitbadger.documents.jvm.*
import solutions.bitbadger.documents.common.* import solutions.bitbadger.documents.support.*
import solutions.bitbadger.documents.java.*
import solutions.bitbadger.documents.java.extensions.customScalar
import solutions.bitbadger.documents.java.extensions.ensureTable
import solutions.bitbadger.documents.java.integration.TEST_TABLE
import solutions.bitbadger.documents.java.integration.ThrowawayDatabase
import solutions.bitbadger.documents.java.jvm.DocumentConfig
import solutions.bitbadger.documents.java.jvm.Results
import java.io.File import java.io.File
/** /**

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
@ -8,7 +8,6 @@ import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Dialect import solutions.bitbadger.documents.Dialect
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.java.query.Count
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName

View File

@ -1,14 +1,13 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import AutoId import solutions.bitbadger.documents.AutoId
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Dialect import solutions.bitbadger.documents.Dialect
import solutions.bitbadger.documents.DocumentException import solutions.bitbadger.documents.DocumentException
import solutions.bitbadger.documents.java.query.Document
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
@ -7,9 +7,6 @@ import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Dialect import solutions.bitbadger.documents.Dialect
import solutions.bitbadger.documents.Field import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.FieldMatch import solutions.bitbadger.documents.FieldMatch
import solutions.bitbadger.documents.java.query.byFields
import solutions.bitbadger.documents.java.query.byId
import solutions.bitbadger.documents.java.query.orderBy
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**
@ -29,7 +26,7 @@ class QueryTest {
@Test @Test
@DisplayName("statementWhere generates correctly") @DisplayName("statementWhere generates correctly")
fun statementWhere() = fun statementWhere() =
assertEquals("x WHERE y", solutions.bitbadger.documents.java.query.statementWhere("x", "y"), "Statements not combined correctly") assertEquals("x WHERE y", statementWhere("x", "y"), "Statements not combined correctly")
@Test @Test
@DisplayName("byId generates a numeric ID query (PostgreSQL)") @DisplayName("byId generates a numeric ID query (PostgreSQL)")

View File

@ -1,11 +1,10 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.* import solutions.bitbadger.documents.*
import solutions.bitbadger.documents.common.*
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,12 +1,10 @@
package solutions.bitbadger.documents.common.query package solutions.bitbadger.documents.query
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import solutions.bitbadger.documents.* import solutions.bitbadger.documents.*
import solutions.bitbadger.documents.common.*
import solutions.bitbadger.documents.java.query.Where
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java package solutions.bitbadger.documents.support
import solutions.bitbadger.documents.DocumentSerializer import solutions.bitbadger.documents.DocumentSerializer
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper

View File

@ -1,4 +1,4 @@
package solutions.bitbadger.documents.java.integration package solutions.bitbadger.documents.support
import java.sql.Connection import java.sql.Connection

View File

@ -1,7 +1,7 @@
package solutions.bitbadger.documents.java.integration package solutions.bitbadger.documents.support
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import solutions.bitbadger.documents.java.extensions.insert import solutions.bitbadger.documents.extensions.insert
/** The test table name to use for integration tests */ /** The test table name to use for integration tests */
const val TEST_TABLE = "test_table" const val TEST_TABLE = "test_table"

View File

@ -1,24 +0,0 @@
package solutions.bitbadger.documents.kotlin
import kotlinx.serialization.json.Json
object Configuration {
/**
* JSON serializer; replace to configure with non-default options
*
* The default sets `encodeDefaults` to `true` and `explicitNulls` to `false`; see
* https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/json.md for all configuration options
*/
@JvmField
var json = Json {
encodeDefaults = true
explicitNulls = false
coerceInputValues = true
}
/** The JSON serializer to use for documents */
@JvmStatic
var serializer: DocumentSerializer = DocumentSerializerKotlin()
}

View File

@ -5,6 +5,7 @@ import solutions.bitbadger.documents.Field
import solutions.bitbadger.documents.FieldMatch import solutions.bitbadger.documents.FieldMatch
import solutions.bitbadger.documents.Parameter import solutions.bitbadger.documents.Parameter
import solutions.bitbadger.documents.ParameterType import solutions.bitbadger.documents.ParameterType
import solutions.bitbadger.documents.query.Count
import java.sql.Connection import java.sql.Connection

View File

@ -1,7 +1,9 @@
package solutions.bitbadger.documents.kotlin package solutions.bitbadger.documents.kotlin
import solutions.bitbadger.documents.*
import solutions.bitbadger.documents.Configuration import solutions.bitbadger.documents.Configuration
import solutions.bitbadger.documents.Parameter import solutions.bitbadger.documents.jvm.Parameters
import solutions.bitbadger.documents.jvm.Custom as JvmCustom
import java.sql.Connection import java.sql.Connection
import java.sql.ResultSet import java.sql.ResultSet
@ -15,17 +17,16 @@ object Custom {
* *
* @param query The query to retrieve the results * @param query The query to retrieve the results
* @param parameters Parameters to use for the query * @param parameters Parameters to use for the query
* @param clazz The class of the document to be returned
* @param conn The connection over which the query should be executed * @param conn The connection over which the query should be executed
* @param mapFunc The mapping function between the document and the domain item * @param mapFunc The mapping function between the document and the domain item
* @return A list of results for the given query * @return A list of results for the given query
*/ */
inline fun <reified TDoc> list( inline fun <reified TDoc : Any> list(
query: String, query: String,
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
conn: Connection, conn: Connection,
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc mapFunc: (ResultSet) -> TDoc
) = Custom.list(query, parameters, TDoc::class.java, conn, mapFunc) ) = Parameters.apply(conn, query, parameters).use { Results.toCustomList(it, mapFunc) }
/** /**
* Execute a query that returns a list of results (creates connection) * Execute a query that returns a list of results (creates connection)
@ -35,10 +36,10 @@ object Custom {
* @param mapFunc The mapping function between the document and the domain item * @param mapFunc The mapping function between the document and the domain item
* @return A list of results for the given query * @return A list of results for the given query
*/ */
inline fun <reified TDoc> list( inline fun <reified TDoc : Any> list(
query: String, query: String,
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc mapFunc: (ResultSet) -> TDoc
) = Configuration.dbConn().use { list(query, parameters, it, mapFunc) } ) = Configuration.dbConn().use { list(query, parameters, it, mapFunc) }
/** /**
@ -50,12 +51,12 @@ object Custom {
* @param mapFunc The mapping function between the document and the domain item * @param mapFunc The mapping function between the document and the domain item
* @return The document if one matches the query, `null` otherwise * @return The document if one matches the query, `null` otherwise
*/ */
inline fun <reified TDoc> single( inline fun <reified TDoc : Any> single(
query: String, query: String,
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
conn: Connection, conn: Connection,
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc mapFunc: (ResultSet) -> TDoc
) = Custom.single(query, parameters, TDoc::class.java, conn, mapFunc) ) = list("$query LIMIT 1", parameters, conn, mapFunc).singleOrNull()
/** /**
* Execute a query that returns one or no results * Execute a query that returns one or no results
@ -65,10 +66,10 @@ object Custom {
* @param mapFunc The mapping function between the document and the domain item * @param mapFunc The mapping function between the document and the domain item
* @return The document if one matches the query, `null` otherwise * @return The document if one matches the query, `null` otherwise
*/ */
inline fun <reified TDoc> single( inline fun <reified TDoc : Any> single(
query: String, query: String,
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc noinline mapFunc: (ResultSet) -> TDoc
) = Configuration.dbConn().use { single(query, parameters, it, mapFunc) } ) = Configuration.dbConn().use { single(query, parameters, it, mapFunc) }
/** /**
@ -79,7 +80,7 @@ object Custom {
* @param parameters Parameters to use for the query * @param parameters Parameters to use for the query
*/ */
fun nonQuery(query: String, parameters: Collection<Parameter<*>> = listOf(), conn: Connection) = fun nonQuery(query: String, parameters: Collection<Parameter<*>> = listOf(), conn: Connection) =
Custom.nonQuery(query, parameters, conn) JvmCustom.nonQuery(query, parameters, conn)
/** /**
* Execute a query that returns no results * Execute a query that returns no results
@ -103,8 +104,13 @@ object Custom {
query: String, query: String,
parameters: Collection<Parameter<*>> = listOf(), parameters: Collection<Parameter<*>> = listOf(),
conn: Connection, conn: Connection,
noinline mapFunc: (ResultSet, Class<T>) -> T mapFunc: (ResultSet) -> T
) = Custom.scalar(query, parameters, T::class.java, conn, mapFunc) ) = Parameters.apply(conn, query, parameters).use { stmt ->
stmt.executeQuery().use { rs ->
rs.next()
mapFunc(rs)
}
}
/** /**
* Execute a query that returns a scalar result * Execute a query that returns a scalar result
@ -115,6 +121,6 @@ object Custom {
* @return The scalar value from the query * @return The scalar value from the query
*/ */
inline fun <reified T : Any> scalar( inline fun <reified T : Any> scalar(
query: String, parameters: Collection<Parameter<*>> = listOf(), noinline mapFunc: (ResultSet, Class<T>) -> T query: String, parameters: Collection<Parameter<*>> = listOf(), mapFunc: (ResultSet) -> T
) = Configuration.dbConn().use { scalar(query, parameters, it, mapFunc) } ) = Configuration.dbConn().use { scalar(query, parameters, it, mapFunc) }
} }

View File

@ -0,0 +1,33 @@
package solutions.bitbadger.documents.kotlin
import kotlinx.serialization.json.Json
/**
* Configuration for document serialization
*/
object DocumentConfig {
val options = Json {
coerceInputValues = true
encodeDefaults = true
explicitNulls = false
}
/**
* Serialize a document to JSON
*
* @param document The document to be serialized
* @return The JSON string with the serialized document
*/
inline fun <reified TDoc> serialize(document: TDoc) =
options.encodeToString(document)
/**
* Deserialize a document from JSON
*
* @param json The JSON string with the serialized document
* @return The document created from the given JSON
*/
inline fun <reified TDoc> deserialize(json: String) =
options.decodeFromString<TDoc>(json)
}

View File

@ -0,0 +1,21 @@
package solutions.bitbadger.documents.kotlin
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
/**
* Unit tests for the `Configuration` object
*/
@DisplayName("Kotlin | DocumentConfig")
class DocumentConfigTest {
@Test
@DisplayName("Default JSON options are as expected")
fun defaultJsonOptions() {
assertTrue(DocumentConfig.options.configuration.encodeDefaults, "Encode Defaults should have been set")
assertFalse(DocumentConfig.options.configuration.explicitNulls, "Explicit Nulls should not have been set")
assertTrue(DocumentConfig.options.configuration.coerceInputValues, "Coerce Input Values should have been set")
}
}

View File

@ -1,118 +0,0 @@
package solutions.bitbadger.documents
import java.sql.Connection
import java.sql.ResultSet
/**
* Custom query execution functions
*/
object Custom {
/**
* Execute a query that returns a list of results
*
* @param query The query to retrieve the results
* @param parameters Parameters to use for the query
* @param clazz The class of the document to be returned
* @param conn The connection over which the query should be executed
* @param mapFunc The mapping function between the document and the domain item
* @return A list of results for the given query
*/
inline fun <reified TDoc> list(
query: String,
parameters: Collection<Parameter<*>> = listOf(),
conn: Connection,
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc
) = Custom.list(query, parameters, TDoc::class.java, conn, mapFunc)
/**
* Execute a query that returns a list of results (creates connection)
*
* @param query The query to retrieve the results
* @param parameters Parameters to use for the query
* @param mapFunc The mapping function between the document and the domain item
* @return A list of results for the given query
*/
inline fun <reified TDoc> list(
query: String,
parameters: Collection<Parameter<*>> = listOf(),
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc
) = Configuration.dbConn().use { list(query, parameters, it, mapFunc) }
/**
* Execute a query that returns one or no results
*
* @param query The query to retrieve the results
* @param parameters Parameters to use for the query
* @param conn The connection over which the query should be executed
* @param mapFunc The mapping function between the document and the domain item
* @return The document if one matches the query, `null` otherwise
*/
inline fun <reified TDoc> single(
query: String,
parameters: Collection<Parameter<*>> = listOf(),
conn: Connection,
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc
) = Custom.single(query, parameters, TDoc::class.java, conn, mapFunc)
/**
* Execute a query that returns one or no results
*
* @param query The query to retrieve the results
* @param parameters Parameters to use for the query
* @param mapFunc The mapping function between the document and the domain item
* @return The document if one matches the query, `null` otherwise
*/
inline fun <reified TDoc> single(
query: String,
parameters: Collection<Parameter<*>> = listOf(),
noinline mapFunc: (ResultSet, Class<TDoc>) -> TDoc
) = Configuration.dbConn().use { single(query, parameters, it, mapFunc) }
/**
* Execute a query that returns no results
*
* @param query The query to retrieve the results
* @param conn The connection over which the query should be executed
* @param parameters Parameters to use for the query
*/
fun nonQuery(query: String, parameters: Collection<Parameter<*>> = listOf(), conn: Connection) =
Custom.nonQuery(query, parameters, conn)
/**
* Execute a query that returns no results
*
* @param query The query to retrieve the results
* @param parameters Parameters to use for the query
*/
fun nonQuery(query: String, parameters: Collection<Parameter<*>> = listOf()) =
Configuration.dbConn().use { nonQuery(query, parameters, it) }
/**
* Execute a query that returns a scalar result
*
* @param query The query to retrieve the result
* @param parameters Parameters to use for the query
* @param conn The connection over which the query should be executed
* @param mapFunc The mapping function between the document and the domain item
* @return The scalar value from the query
*/
inline fun <reified T : Any> scalar(
query: String,
parameters: Collection<Parameter<*>> = listOf(),
conn: Connection,
noinline mapFunc: (ResultSet, Class<T>) -> T
) = Custom.scalar(query, parameters, T::class.java, conn, mapFunc)
/**
* Execute a query that returns a scalar result
*
* @param query The query to retrieve the result
* @param parameters Parameters to use for the query
* @param mapFunc The mapping function between the document and the domain item
* @return The scalar value from the query
*/
inline fun <reified T : Any> scalar(
query: String, parameters: Collection<Parameter<*>> = listOf(), noinline mapFunc: (ResultSet, Class<T>) -> T
) = Configuration.dbConn().use { scalar(query, parameters, it, mapFunc) }
}

View File

@ -45,7 +45,6 @@
</properties> </properties>
<modules> <modules>
<module>common</module>
<module>jvm</module> <module>jvm</module>
</modules> </modules>

View File

@ -1,57 +0,0 @@
package solutions.bitbadger.documents.java;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import solutions.bitbadger.documents.common.Dialect;
import solutions.bitbadger.documents.common.DocumentException;
import static org.junit.jupiter.api.Assertions.*;
/**
* Unit tests for the `Configuration` object
*/
@DisplayName("Java | Configuration")
final public class ConfigurationTest {
@Test
@DisplayName("Default JSON options are as expected")
public void defaultJsonOptions() {
assertTrue(Configuration.json.getConfiguration().getEncodeDefaults(), "Encode Defaults should have been set");
assertFalse(Configuration.json.getConfiguration().getExplicitNulls(),
"Explicit Nulls should not have been set");
assertTrue(Configuration.json.getConfiguration().getCoerceInputValues(),
"Coerce Input Values should have been set");
}
@Test
@DisplayName("Default ID field is `id`")
public void defaultIdField() {
assertEquals("id", Configuration.idField, "Default ID field incorrect");
}
@Test
@DisplayName("Default Auto ID strategy is `DISABLED`")
public void defaultAutoId() {
assertEquals(AutoId.DISABLED, Configuration.autoIdStrategy, "Default Auto ID strategy should be `disabled`");
}
@Test
@DisplayName("Default ID string length should be 16")
public void defaultIdStringLength() {
assertEquals(16, Configuration.idStringLength, "Default ID string length should be 16");
}
@Test
@DisplayName("Dialect is derived from connection string")
public void dialectIsDerived() {
try {
assertThrows(DocumentException.class, Configuration::dialect);
Configuration.setConnectionString("jdbc:postgresql:db");
assertEquals(Dialect.POSTGRESQL, Configuration.dialect());
} catch (DocumentException ex) {
fail(ex);
} finally {
Configuration.setConnectionString(null);
}
}
}

View File

@ -1,21 +0,0 @@
package solutions.bitbadger.documents
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
/**
* Unit tests for the `Configuration` object
*/
@DisplayName("Kotlin | Configuration")
class ConfigurationTest {
@Test
@DisplayName("Default JSON options are as expected")
fun defaultJsonOptions() {
assertTrue(Configuration.json.configuration.encodeDefaults, "Encode Defaults should have been set")
assertFalse(Configuration.json.configuration.explicitNulls, "Explicit Nulls should not have been set")
assertTrue(Configuration.json.configuration.coerceInputValues, "Coerce Input Values should have been set")
}
}