From b22144cdfbf056cebf0de17f57c32e428afd93cf Mon Sep 17 00:00:00 2001 From: DualFroz Date: Tue, 1 Sep 2026 16:13:13 +0200 Subject: [PATCH] feat(cli): extend Main --- src/main/kotlin/kestrel/cli/Main.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kestrel/cli/Main.kt b/src/main/kotlin/kestrel/cli/Main.kt index 777d038..4763ed5 100644 --- a/src/main/kotlin/kestrel/cli/Main.kt +++ b/src/main/kotlin/kestrel/cli/Main.kt @@ -2,9 +2,11 @@ package kestrel.cli import java.io.File import kestrel.persistence.Persistence +import kestrel.store.sql.DiskCatalog fun main(arguments: Array) { var dataDir: File? = null + var diskDir: File? = null var scriptPath: String? = null var index = 0 while (index < arguments.size) { @@ -16,13 +18,27 @@ fun main(arguments: Array) { argument.startsWith("--data=") -> { dataDir = File(argument.substringAfter('=')); index += 1 } + argument == "--disk" -> { + diskDir = File(arguments[index + 1]); index += 2 + } + argument.startsWith("--disk=") -> { + diskDir = File(argument.substringAfter('=')); index += 1 + } else -> { scriptPath = argument; index += 1 } } } + if (dataDir != null && diskDir != null) { + System.err.println("Error: --data (in-memory engine, text WAL) and --disk (disk-backed engine) are mutually exclusive") + return + } val persistence = dataDir?.let { Persistence(it) } - val repl = Repl(persistence = persistence) + val diskCatalog = diskDir?.let { + it.mkdirs() + DiskCatalog.open(File(it, "kestrel.data"), File(it, "kestrel.wal")) + } + val repl = Repl(persistence = persistence, diskCatalog = diskCatalog) val reader = if (scriptPath != null) File(scriptPath).bufferedReader() else System.`in`.bufferedReader() reader.use { repl.run(it) } }