Initial Development #1
@ -0,0 +1,87 @@
|
||||
package solutions.bitbadger.documents.java.query;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import solutions.bitbadger.documents.DocumentException;
|
||||
import solutions.bitbadger.documents.Field;
|
||||
import solutions.bitbadger.documents.query.CountQuery;
|
||||
import solutions.bitbadger.documents.support.ForceDialect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static solutions.bitbadger.documents.support.TypesKt.TEST_TABLE;
|
||||
|
||||
/**
|
||||
* Unit tests for the `Count` object
|
||||
*/
|
||||
@DisplayName("JVM | Java | Query | CountQuery")
|
||||
public class CountQueryTest {
|
||||
|
||||
/**
|
||||
* Clear the connection string (resets Dialect)
|
||||
*/
|
||||
@AfterEach
|
||||
public void cleanUp() {
|
||||
ForceDialect.none();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("all generates correctly")
|
||||
public void all() {
|
||||
assertEquals(String.format("SELECT COUNT(*) AS it FROM %s", TEST_TABLE), CountQuery.all(TEST_TABLE),
|
||||
"Count query not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byFields generates correctly | PostgreSQL")
|
||||
public void byFieldsPostgres() {
|
||||
ForceDialect.postgres();
|
||||
assertEquals(String.format("SELECT COUNT(*) AS it FROM %s WHERE data->>'test' = :field0", TEST_TABLE),
|
||||
CountQuery.byFields(TEST_TABLE, List.of(Field.equal("test", "", ":field0"))),
|
||||
"Count query not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byFields generates correctly | SQLite")
|
||||
public void byFieldsSQLite() {
|
||||
ForceDialect.sqlite();
|
||||
assertEquals(String.format("SELECT COUNT(*) AS it FROM %s WHERE data->>'test' = :field0", TEST_TABLE),
|
||||
CountQuery.byFields(TEST_TABLE, List.of(Field.equal("test", "", ":field0"))),
|
||||
"Count query not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byContains generates correctly | PostgreSQL")
|
||||
public void byContainsPostgres() throws DocumentException {
|
||||
ForceDialect.postgres();
|
||||
assertEquals(String.format("SELECT COUNT(*) AS it FROM %s WHERE data @> :criteria", TEST_TABLE),
|
||||
CountQuery.byContains(TEST_TABLE), "Count query not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byContains fails | SQLite")
|
||||
public void byContainsSQLite() {
|
||||
ForceDialect.sqlite();
|
||||
assertThrows(DocumentException.class, () -> CountQuery.byContains(TEST_TABLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byJsonPath generates correctly | PostgreSQL")
|
||||
public void byJsonPathPostgres() throws DocumentException {
|
||||
ForceDialect.postgres();
|
||||
assertEquals(
|
||||
String.format("SELECT COUNT(*) AS it FROM %s WHERE jsonb_path_exists(data, :path::jsonpath)",
|
||||
TEST_TABLE),
|
||||
CountQuery.byJsonPath(TEST_TABLE), "Count query not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byJsonPath fails | SQLite")
|
||||
public void byJsonPathSQLite() {
|
||||
ForceDialect.sqlite();
|
||||
assertThrows(DocumentException.class, () -> CountQuery.byJsonPath(TEST_TABLE));
|
||||
}
|
||||
}
|
@ -0,0 +1,133 @@
|
||||
package solutions.bitbadger.documents.java.query;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import solutions.bitbadger.documents.Dialect;
|
||||
import solutions.bitbadger.documents.DocumentException;
|
||||
import solutions.bitbadger.documents.DocumentIndex;
|
||||
import solutions.bitbadger.documents.query.DefinitionQuery;
|
||||
import solutions.bitbadger.documents.support.ForceDialect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static solutions.bitbadger.documents.support.TypesKt.TEST_TABLE;
|
||||
|
||||
/**
|
||||
* Unit tests for the `Definition` object
|
||||
*/
|
||||
@DisplayName("JVM | Java | Query | DefinitionQuery")
|
||||
public class DefinitionQueryTest {
|
||||
|
||||
/**
|
||||
* Clear the connection string (resets Dialect)
|
||||
*/
|
||||
@AfterEach
|
||||
public void cleanUp() {
|
||||
ForceDialect.none();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTableFor generates correctly")
|
||||
public void ensureTableFor() {
|
||||
assertEquals("CREATE TABLE IF NOT EXISTS my.table (data JSONB NOT NULL)",
|
||||
DefinitionQuery.ensureTableFor("my.table", "JSONB"),
|
||||
"CREATE TABLE statement not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTable generates correctly | PostgreSQL")
|
||||
public void ensureTablePostgres() throws DocumentException {
|
||||
ForceDialect.postgres();
|
||||
assertEquals(String.format("CREATE TABLE IF NOT EXISTS %s (data JSONB NOT NULL)", TEST_TABLE),
|
||||
DefinitionQuery.ensureTable(TEST_TABLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTable generates correctly | SQLite")
|
||||
public void ensureTableSQLite() throws DocumentException {
|
||||
ForceDialect.sqlite();
|
||||
assertEquals(String.format("CREATE TABLE IF NOT EXISTS %s (data TEXT NOT NULL)", TEST_TABLE),
|
||||
DefinitionQuery.ensureTable(TEST_TABLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTable fails when no dialect is set")
|
||||
public void ensureTableFailsUnknown() {
|
||||
assertThrows(DocumentException.class, () -> DefinitionQuery.ensureTable(TEST_TABLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureKey generates correctly with schema")
|
||||
public void ensureKeyWithSchema() throws DocumentException {
|
||||
assertEquals("CREATE UNIQUE INDEX IF NOT EXISTS idx_table_key ON test.table ((data->>'id'))",
|
||||
DefinitionQuery.ensureKey("test.table", Dialect.POSTGRESQL),
|
||||
"CREATE INDEX for key statement with schema not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureKey generates correctly without schema")
|
||||
public void ensureKeyWithoutSchema() throws DocumentException {
|
||||
assertEquals(
|
||||
String.format("CREATE UNIQUE INDEX IF NOT EXISTS idx_%1$s_key ON %1$s ((data->>'id'))", TEST_TABLE),
|
||||
DefinitionQuery.ensureKey(TEST_TABLE, Dialect.SQLITE),
|
||||
"CREATE INDEX for key statement without schema not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureIndexOn generates multiple fields and directions")
|
||||
public void ensureIndexOnMultipleFields() throws DocumentException {
|
||||
assertEquals(
|
||||
"CREATE INDEX IF NOT EXISTS idx_table_gibberish ON test.table ((data->>'taco'), (data->>'guac') DESC, (data->>'salsa') ASC)",
|
||||
DefinitionQuery.ensureIndexOn("test.table", "gibberish", List.of("taco", "guac DESC", "salsa ASC"),
|
||||
Dialect.POSTGRESQL),
|
||||
"CREATE INDEX for multiple field statement not constructed correctly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureIndexOn generates nested field | PostgreSQL")
|
||||
public void ensureIndexOnNestedPostgres() throws DocumentException {
|
||||
assertEquals(String.format("CREATE INDEX IF NOT EXISTS idx_%1$s_nest ON %1$s ((data#>>'{a,b,c}'))", TEST_TABLE),
|
||||
DefinitionQuery.ensureIndexOn(TEST_TABLE, "nest", List.of("a.b.c"), Dialect.POSTGRESQL),
|
||||
"CREATE INDEX for nested PostgreSQL field incorrect");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureIndexOn generates nested field | SQLite")
|
||||
public void ensureIndexOnNestedSQLite() throws DocumentException {
|
||||
assertEquals(
|
||||
String.format("CREATE INDEX IF NOT EXISTS idx_%1$s_nest ON %1$s ((data->'a'->'b'->>'c'))", TEST_TABLE),
|
||||
DefinitionQuery.ensureIndexOn(TEST_TABLE, "nest", List.of("a.b.c"), Dialect.SQLITE),
|
||||
"CREATE INDEX for nested SQLite field incorrect");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureDocumentIndexOn generates Full | PostgreSQL")
|
||||
public void ensureDocumentIndexOnFullPostgres() throws DocumentException {
|
||||
ForceDialect.postgres();
|
||||
assertEquals(String.format("CREATE INDEX IF NOT EXISTS idx_%1$s_document ON %1$s USING GIN (data)", TEST_TABLE),
|
||||
DefinitionQuery.ensureDocumentIndexOn(TEST_TABLE, DocumentIndex.FULL),
|
||||
"CREATE INDEX for full document index incorrect");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureDocumentIndexOn generates Optimized | PostgreSQL")
|
||||
public void ensureDocumentIndexOnOptimizedPostgres() throws DocumentException {
|
||||
ForceDialect.postgres();
|
||||
assertEquals(
|
||||
String.format("CREATE INDEX IF NOT EXISTS idx_%1$s_document ON %1$s USING GIN (data jsonb_path_ops)",
|
||||
TEST_TABLE),
|
||||
DefinitionQuery.ensureDocumentIndexOn(TEST_TABLE, DocumentIndex.OPTIMIZED),
|
||||
"CREATE INDEX for optimized document index incorrect");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureDocumentIndexOn fails | SQLite")
|
||||
public void ensureDocumentIndexOnFailsSQLite() {
|
||||
ForceDialect.sqlite();
|
||||
assertThrows(DocumentException.class,
|
||||
() -> DefinitionQuery.ensureDocumentIndexOn(TEST_TABLE, DocumentIndex.FULL));
|
||||
}
|
||||
}
|
@ -4,10 +4,10 @@ import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.assertThrows
|
||||
import solutions.bitbadger.documents.Configuration
|
||||
import solutions.bitbadger.documents.Dialect
|
||||
import solutions.bitbadger.documents.DocumentException
|
||||
import solutions.bitbadger.documents.Field
|
||||
import solutions.bitbadger.documents.support.ForceDialect
|
||||
import solutions.bitbadger.documents.support.TEST_TABLE
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
/**
|
||||
@ -16,75 +16,72 @@ import kotlin.test.assertEquals
|
||||
@DisplayName("JVM | Kotlin | Query | CountQuery")
|
||||
class CountQueryTest {
|
||||
|
||||
/** Test table name */
|
||||
private val tbl = "test_table"
|
||||
|
||||
/**
|
||||
* Clear the connection string (resets Dialect)
|
||||
*/
|
||||
@AfterEach
|
||||
fun cleanUp() {
|
||||
Configuration.dialectValue = null
|
||||
ForceDialect.none()
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("all generates correctly")
|
||||
fun all() =
|
||||
assertEquals("SELECT COUNT(*) AS it FROM $tbl", CountQuery.all(tbl), "Count query not constructed correctly")
|
||||
assertEquals("SELECT COUNT(*) AS it FROM $TEST_TABLE", CountQuery.all(TEST_TABLE), "Count query not constructed correctly")
|
||||
|
||||
@Test
|
||||
@DisplayName("byFields generates correctly (PostgreSQL)")
|
||||
@DisplayName("byFields generates correctly | PostgreSQL")
|
||||
fun byFieldsPostgres() {
|
||||
Configuration.dialectValue = Dialect.POSTGRESQL
|
||||
ForceDialect.postgres()
|
||||
assertEquals(
|
||||
"SELECT COUNT(*) AS it FROM $tbl WHERE data->>'test' = :field0",
|
||||
CountQuery.byFields(tbl, listOf(Field.equal("test", "", ":field0"))),
|
||||
"SELECT COUNT(*) AS it FROM $TEST_TABLE WHERE data->>'test' = :field0",
|
||||
CountQuery.byFields(TEST_TABLE, listOf(Field.equal("test", "", ":field0"))),
|
||||
"Count query not constructed correctly"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byFields generates correctly (PostgreSQL)")
|
||||
@DisplayName("byFields generates correctly | SQLite")
|
||||
fun byFieldsSQLite() {
|
||||
Configuration.dialectValue = Dialect.SQLITE
|
||||
ForceDialect.sqlite()
|
||||
assertEquals(
|
||||
"SELECT COUNT(*) AS it FROM $tbl WHERE data->>'test' = :field0",
|
||||
CountQuery.byFields(tbl, listOf(Field.equal("test", "", ":field0"))),
|
||||
"SELECT COUNT(*) AS it FROM $TEST_TABLE WHERE data->>'test' = :field0",
|
||||
CountQuery.byFields(TEST_TABLE, listOf(Field.equal("test", "", ":field0"))),
|
||||
"Count query not constructed correctly"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byContains generates correctly (PostgreSQL)")
|
||||
@DisplayName("byContains generates correctly | PostgreSQL")
|
||||
fun byContainsPostgres() {
|
||||
Configuration.dialectValue = Dialect.POSTGRESQL
|
||||
ForceDialect.postgres()
|
||||
assertEquals(
|
||||
"SELECT COUNT(*) AS it FROM $tbl WHERE data @> :criteria", CountQuery.byContains(tbl),
|
||||
"SELECT COUNT(*) AS it FROM $TEST_TABLE WHERE data @> :criteria", CountQuery.byContains(TEST_TABLE),
|
||||
"Count query not constructed correctly"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byContains fails (SQLite)")
|
||||
@DisplayName("byContains fails | SQLite")
|
||||
fun byContainsSQLite() {
|
||||
Configuration.dialectValue = Dialect.SQLITE
|
||||
assertThrows<DocumentException> { CountQuery.byContains(tbl) }
|
||||
ForceDialect.sqlite()
|
||||
assertThrows<DocumentException> { CountQuery.byContains(TEST_TABLE) }
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byJsonPath generates correctly (PostgreSQL)")
|
||||
@DisplayName("byJsonPath generates correctly | PostgreSQL")
|
||||
fun byJsonPathPostgres() {
|
||||
Configuration.dialectValue = Dialect.POSTGRESQL
|
||||
ForceDialect.postgres()
|
||||
assertEquals(
|
||||
"SELECT COUNT(*) AS it FROM $tbl WHERE jsonb_path_exists(data, :path::jsonpath)",
|
||||
CountQuery.byJsonPath(tbl), "Count query not constructed correctly"
|
||||
"SELECT COUNT(*) AS it FROM $TEST_TABLE WHERE jsonb_path_exists(data, :path::jsonpath)",
|
||||
CountQuery.byJsonPath(TEST_TABLE), "Count query not constructed correctly"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("byJsonPath fails (SQLite)")
|
||||
@DisplayName("byJsonPath fails | SQLite")
|
||||
fun byJsonPathSQLite() {
|
||||
Configuration.dialectValue = Dialect.SQLITE
|
||||
assertThrows<DocumentException> { CountQuery.byJsonPath(tbl) }
|
||||
ForceDialect.sqlite()
|
||||
assertThrows<DocumentException> { CountQuery.byJsonPath(TEST_TABLE) }
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,11 @@ import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.assertThrows
|
||||
import solutions.bitbadger.documents.Configuration
|
||||
import solutions.bitbadger.documents.Dialect
|
||||
import solutions.bitbadger.documents.DocumentException
|
||||
import solutions.bitbadger.documents.DocumentIndex
|
||||
import solutions.bitbadger.documents.support.ForceDialect
|
||||
import solutions.bitbadger.documents.support.TEST_TABLE
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
/**
|
||||
@ -16,15 +17,12 @@ import kotlin.test.assertEquals
|
||||
@DisplayName("JVM | Kotlin | Query | DefinitionQuery")
|
||||
class DefinitionQueryTest {
|
||||
|
||||
/** Test table name */
|
||||
private val tbl = "test_table"
|
||||
|
||||
/**
|
||||
* Clear the connection string (resets Dialect)
|
||||
*/
|
||||
@AfterEach
|
||||
fun cleanUp() {
|
||||
Configuration.dialectValue = null
|
||||
ForceDialect.none()
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -36,23 +34,29 @@ class DefinitionQueryTest {
|
||||
)
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTable generates correctly (PostgreSQL)")
|
||||
@DisplayName("ensureTable generates correctly | PostgreSQL")
|
||||
fun ensureTablePostgres() {
|
||||
Configuration.dialectValue = Dialect.POSTGRESQL
|
||||
assertEquals("CREATE TABLE IF NOT EXISTS $tbl (data JSONB NOT NULL)", DefinitionQuery.ensureTable(tbl))
|
||||
ForceDialect.postgres()
|
||||
assertEquals(
|
||||
"CREATE TABLE IF NOT EXISTS $TEST_TABLE (data JSONB NOT NULL)",
|
||||
DefinitionQuery.ensureTable(TEST_TABLE)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTable generates correctly (SQLite)")
|
||||
@DisplayName("ensureTable generates correctly | SQLite")
|
||||
fun ensureTableSQLite() {
|
||||
Configuration.dialectValue = Dialect.SQLITE
|
||||
assertEquals("CREATE TABLE IF NOT EXISTS $tbl (data TEXT NOT NULL)", DefinitionQuery.ensureTable(tbl))
|
||||
ForceDialect.sqlite()
|
||||
assertEquals(
|
||||
"CREATE TABLE IF NOT EXISTS $TEST_TABLE (data TEXT NOT NULL)",
|
||||
DefinitionQuery.ensureTable(TEST_TABLE)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureTable fails when no dialect is set")
|
||||
fun ensureTableFailsUnknown() {
|
||||
assertThrows<DocumentException> { DefinitionQuery.ensureTable(tbl) }
|
||||
assertThrows<DocumentException> { DefinitionQuery.ensureTable(TEST_TABLE) }
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -68,8 +72,8 @@ class DefinitionQueryTest {
|
||||
@DisplayName("ensureKey generates correctly without schema")
|
||||
fun ensureKeyWithoutSchema() =
|
||||
assertEquals(
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_key ON $tbl ((data->>'id'))",
|
||||
DefinitionQuery.ensureKey(tbl, Dialect.SQLITE),
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_${TEST_TABLE}_key ON $TEST_TABLE ((data->>'id'))",
|
||||
DefinitionQuery.ensureKey(TEST_TABLE, Dialect.SQLITE),
|
||||
"CREATE INDEX for key statement without schema not constructed correctly"
|
||||
)
|
||||
|
||||
@ -86,49 +90,49 @@ class DefinitionQueryTest {
|
||||
)
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureIndexOn generates nested PostgreSQL field")
|
||||
@DisplayName("ensureIndexOn generates nested field | PostgreSQL")
|
||||
fun ensureIndexOnNestedPostgres() =
|
||||
assertEquals(
|
||||
"CREATE INDEX IF NOT EXISTS idx_${tbl}_nest ON $tbl ((data#>>'{a,b,c}'))",
|
||||
DefinitionQuery.ensureIndexOn(tbl, "nest", listOf("a.b.c"), Dialect.POSTGRESQL),
|
||||
"CREATE INDEX IF NOT EXISTS idx_${TEST_TABLE}_nest ON $TEST_TABLE ((data#>>'{a,b,c}'))",
|
||||
DefinitionQuery.ensureIndexOn(TEST_TABLE, "nest", listOf("a.b.c"), Dialect.POSTGRESQL),
|
||||
"CREATE INDEX for nested PostgreSQL field incorrect"
|
||||
)
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureIndexOn generates nested SQLite field")
|
||||
@DisplayName("ensureIndexOn generates nested field | SQLite")
|
||||
fun ensureIndexOnNestedSQLite() =
|
||||
assertEquals(
|
||||
"CREATE INDEX IF NOT EXISTS idx_${tbl}_nest ON $tbl ((data->'a'->'b'->>'c'))",
|
||||
DefinitionQuery.ensureIndexOn(tbl, "nest", listOf("a.b.c"), Dialect.SQLITE),
|
||||
"CREATE INDEX IF NOT EXISTS idx_${TEST_TABLE}_nest ON $TEST_TABLE ((data->'a'->'b'->>'c'))",
|
||||
DefinitionQuery.ensureIndexOn(TEST_TABLE, "nest", listOf("a.b.c"), Dialect.SQLITE),
|
||||
"CREATE INDEX for nested SQLite field incorrect"
|
||||
)
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureDocumentIndexOn generates Full for PostgreSQL")
|
||||
@DisplayName("ensureDocumentIndexOn generates Full | PostgreSQL")
|
||||
fun ensureDocumentIndexOnFullPostgres() {
|
||||
Configuration.dialectValue = Dialect.POSTGRESQL
|
||||
ForceDialect.postgres()
|
||||
assertEquals(
|
||||
"CREATE INDEX IF NOT EXISTS idx_${tbl}_document ON $tbl USING GIN (data)",
|
||||
DefinitionQuery.ensureDocumentIndexOn(tbl, DocumentIndex.FULL),
|
||||
"CREATE INDEX IF NOT EXISTS idx_${TEST_TABLE}_document ON $TEST_TABLE USING GIN (data)",
|
||||
DefinitionQuery.ensureDocumentIndexOn(TEST_TABLE, DocumentIndex.FULL),
|
||||
"CREATE INDEX for full document index incorrect"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureDocumentIndexOn generates Optimized for PostgreSQL")
|
||||
@DisplayName("ensureDocumentIndexOn generates Optimized | PostgreSQL")
|
||||
fun ensureDocumentIndexOnOptimizedPostgres() {
|
||||
Configuration.dialectValue = Dialect.POSTGRESQL
|
||||
ForceDialect.postgres()
|
||||
assertEquals(
|
||||
"CREATE INDEX IF NOT EXISTS idx_${tbl}_document ON $tbl USING GIN (data jsonb_path_ops)",
|
||||
DefinitionQuery.ensureDocumentIndexOn(tbl, DocumentIndex.OPTIMIZED),
|
||||
"CREATE INDEX IF NOT EXISTS idx_${TEST_TABLE}_document ON $TEST_TABLE USING GIN (data jsonb_path_ops)",
|
||||
DefinitionQuery.ensureDocumentIndexOn(TEST_TABLE, DocumentIndex.OPTIMIZED),
|
||||
"CREATE INDEX for optimized document index incorrect"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ensureDocumentIndexOn fails for SQLite")
|
||||
@DisplayName("ensureDocumentIndexOn fails | SQLite")
|
||||
fun ensureDocumentIndexOnFailsSQLite() {
|
||||
Configuration.dialectValue = Dialect.SQLITE
|
||||
assertThrows<DocumentException> { DefinitionQuery.ensureDocumentIndexOn(tbl, DocumentIndex.FULL) }
|
||||
ForceDialect.sqlite()
|
||||
assertThrows<DocumentException> { DefinitionQuery.ensureDocumentIndexOn(TEST_TABLE, DocumentIndex.FULL) }
|
||||
}
|
||||
}
|
||||
|
24
src/jvm/src/test/kotlin/support/ForceDialect.kt
Normal file
24
src/jvm/src/test/kotlin/support/ForceDialect.kt
Normal file
@ -0,0 +1,24 @@
|
||||
package solutions.bitbadger.documents.support
|
||||
|
||||
import solutions.bitbadger.documents.Configuration
|
||||
|
||||
/**
|
||||
* These functions use a dummy connection string to force the given dialect for a given test
|
||||
*/
|
||||
object ForceDialect {
|
||||
|
||||
@JvmStatic
|
||||
fun postgres() {
|
||||
Configuration.connectionString = ":postgresql:"
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun sqlite() {
|
||||
Configuration.connectionString = ":sqlite:"
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun none() {
|
||||
Configuration.connectionString = null
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user