diff --git a/src/example/java/it.cavallium.dbengine.client/Example.java b/src/example/java/it.cavallium.dbengine.client/Example.java new file mode 100644 index 0000000..2046506 --- /dev/null +++ b/src/example/java/it.cavallium.dbengine.client/Example.java @@ -0,0 +1,17 @@ +package it.cavallium.dbengine.client; + +import it.cavallium.dbengine.database.Column; +import it.cavallium.dbengine.database.disk.LLLocalDatabaseConnection; +import java.nio.file.Path; +import java.util.List; + +public class Example { + + public static void main(String[] args) { + System.out.println("Test"); + new LLLocalDatabaseConnection(Path.of("/tmp/"), true) + .connect() + .flatMap(conn -> conn.getDatabase("testdb", List.of(Column.hashMap("testmap")), false)) + .block(); + } +} \ No newline at end of file diff --git a/src/main/java/it/cavallium/dbengine/database/LLDatabaseConnection.java b/src/main/java/it/cavallium/dbengine/database/LLDatabaseConnection.java index 9eb0339..569c568 100644 --- a/src/main/java/it/cavallium/dbengine/database/LLDatabaseConnection.java +++ b/src/main/java/it/cavallium/dbengine/database/LLDatabaseConnection.java @@ -1,23 +1,22 @@ package it.cavallium.dbengine.database; import it.cavallium.dbengine.database.analyzer.TextFieldsAnalyzer; -import java.io.IOException; import java.time.Duration; import java.util.List; import reactor.core.publisher.Mono; public interface LLDatabaseConnection { - Mono connect(); + Mono connect(); - LLKeyValueDatabase getDatabase(String name, List columns, boolean lowMemory) throws IOException; + Mono getDatabase(String name, List columns, boolean lowMemory); - LLLuceneIndex getLuceneIndex(String name, + Mono getLuceneIndex(String name, int instancesCount, TextFieldsAnalyzer textFieldsAnalyzer, Duration queryRefreshDebounceTime, Duration commitDebounceTime, - boolean lowMemory) throws IOException; + boolean lowMemory); Mono disconnect(); } diff --git a/src/main/java/it/cavallium/dbengine/database/collections/SubStageGetterMapDeep.java b/src/main/java/it/cavallium/dbengine/database/collections/SubStageGetterMapDeep.java index f6dcd14..1861807 100644 --- a/src/main/java/it/cavallium/dbengine/database/collections/SubStageGetterMapDeep.java +++ b/src/main/java/it/cavallium/dbengine/database/collections/SubStageGetterMapDeep.java @@ -7,24 +7,35 @@ import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -public class SubStageGetterMapDeep> implements - SubStageGetter, DatabaseStageEntry>> { +public class SubStageGetterMapDeep> implements + SubStageGetter, DatabaseStageEntry>> { private final SubStageGetter subStageGetter; + private final FixedLengthSerializer keySerializer; private final int keyLength; private final int keyExtLength; - public SubStageGetterMapDeep(SubStageGetter subStageGetter, int keyLength, int keyExtLength) { + public SubStageGetterMapDeep(SubStageGetter subStageGetter, + FixedLengthSerializer keySerializer, + int keyLength, + int keyExtLength) { this.subStageGetter = subStageGetter; + this.keySerializer = keySerializer; this.keyLength = keyLength; this.keyExtLength = keyExtLength; } @Override - public Mono>> subStage(LLDictionary dictionary, + public Mono>> subStage(LLDictionary dictionary, @Nullable CompositeSnapshot snapshot, byte[] prefixKey, Flux keyFlux) { - return Mono.just(new DatabaseMapDictionary<>(dictionary, subStageGetter, prefixKey, keyLength, keyExtLength)); + return Mono.just(new DatabaseMapDictionary<>(dictionary, + subStageGetter, + keySerializer, + prefixKey, + keyLength, + keyExtLength + )); } } diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDatabaseConnection.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDatabaseConnection.java index 034a5e3..048cf33 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDatabaseConnection.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDatabaseConnection.java @@ -1,15 +1,14 @@ package it.cavallium.dbengine.database.disk; -import java.io.IOException; +import it.cavallium.dbengine.database.Column; +import it.cavallium.dbengine.database.LLDatabaseConnection; +import it.cavallium.dbengine.database.LLLuceneIndex; +import it.cavallium.dbengine.database.analyzer.TextFieldsAnalyzer; import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; import java.util.LinkedList; import java.util.List; -import it.cavallium.dbengine.database.Column; -import it.cavallium.dbengine.database.LLDatabaseConnection; -import it.cavallium.dbengine.database.LLLuceneIndex; -import it.cavallium.dbengine.database.analyzer.TextFieldsAnalyzer; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -24,48 +23,59 @@ public class LLLocalDatabaseConnection implements LLDatabaseConnection { } @Override - public Mono connect() { + public Mono connect() { return Mono - .fromCallable(() -> { + .fromCallable(() -> { if (Files.notExists(basePath)) { Files.createDirectories(basePath); } - return null; + return this; }) .subscribeOn(Schedulers.boundedElastic()); } @Override - public LLLocalKeyValueDatabase getDatabase(String name, List columns, boolean lowMemory) throws IOException { - return new LLLocalKeyValueDatabase(name, basePath.resolve("database_" + name), columns, new LinkedList<>(), - crashIfWalError, lowMemory); + public Mono getDatabase(String name, List columns, boolean lowMemory) { + return Mono + .fromCallable(() -> new LLLocalKeyValueDatabase(name, + basePath.resolve("database_" + name), + columns, + new LinkedList<>(), + crashIfWalError, + lowMemory + )) + .subscribeOn(Schedulers.boundedElastic()); } @Override - public LLLuceneIndex getLuceneIndex(String name, + public Mono getLuceneIndex(String name, int instancesCount, TextFieldsAnalyzer textFieldsAnalyzer, Duration queryRefreshDebounceTime, Duration commitDebounceTime, - boolean lowMemory) throws IOException { - if (instancesCount != 1) { - return new LLLocalMultiLuceneIndex(basePath.resolve("lucene"), - name, - instancesCount, - textFieldsAnalyzer, - queryRefreshDebounceTime, - commitDebounceTime, - lowMemory - ); - } else { - return new LLLocalLuceneIndex(basePath.resolve("lucene"), - name, - textFieldsAnalyzer, - queryRefreshDebounceTime, - commitDebounceTime, - lowMemory - ); - } + boolean lowMemory) { + return Mono + .fromCallable(() -> { + if (instancesCount != 1) { + return new LLLocalMultiLuceneIndex(basePath.resolve("lucene"), + name, + instancesCount, + textFieldsAnalyzer, + queryRefreshDebounceTime, + commitDebounceTime, + lowMemory + ); + } else { + return new LLLocalLuceneIndex(basePath.resolve("lucene"), + name, + textFieldsAnalyzer, + queryRefreshDebounceTime, + commitDebounceTime, + lowMemory + ); + } + }) + .subscribeOn(Schedulers.boundedElastic()); } @Override diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java index 49f6ace..268d80d 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java @@ -61,6 +61,8 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { Options options = openRocksDb(path, crashIfWalError, lowMemory); try { List descriptors = new LinkedList<>(); + descriptors + .add(new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY)); for (Column column : columns) { descriptors .add(new ColumnFamilyDescriptor(column.getName().getBytes(StandardCharsets.US_ASCII))); @@ -240,6 +242,7 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { }); List descriptors = new LinkedList<>(); + descriptors.add(new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY)); for (byte[] existingColumnFamily : existingColumnFamilies) { descriptors.add(new ColumnFamilyDescriptor(existingColumnFamily)); } diff --git a/src/test/java/it/cavallium/dbengine/client/Database.java b/src/test/java/it/cavallium/dbengine/client/Database.java index ff3b02f..6c7ef8e 100644 --- a/src/test/java/it/cavallium/dbengine/client/Database.java +++ b/src/test/java/it/cavallium/dbengine/client/Database.java @@ -1,3 +1,5 @@ package it.cavallium.dbengine.client; -public class Database {} +public class Database { + +}