changeset 1477:9600b96be7a8

fix: some errors
author sam <sam@basx.dev>
date Sat, 19 Apr 2025 17:42:42 +0700
parents 5d91e8328c3b
children 6b389ac08e5e
files semicongine/storage.nim
diffstat 1 files changed, 19 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/storage.nim	Sat Apr 19 16:32:54 2025 +0700
+++ b/semicongine/storage.nim	Sat Apr 19 17:42:42 2025 +0700
@@ -1,4 +1,5 @@
 import std/marshal
+import std/logging
 import std/algorithm
 import std/os
 import std/dirs
@@ -111,7 +112,6 @@
     sql(
       &"""CREATE TABLE IF NOT EXISTS {table} (
     key INT NOT NULL UNIQUE,
-    time INT NOT NULL,
     value BLOB NOT NULL
   )"""
     )
@@ -171,11 +171,10 @@
   let db = worldName.ensureExists(table)
   defer:
     db.close()
-  let key = $(int(now().toTime().toUnixFloat() * 1000))
-  let stm = db.prepare(&"""INSERT INTO {table} VALUES(?, ?, ?)""")
+  let key = int(now().utc.toTime.toUnixFloat * 1000)
+  let stm = db.prepare(&"""INSERT INTO {table} VALUES(?, ?)""")
   stm.bindParam(1, key)
-  stm.bindParam(2, int(now().utc.toTime.toUnixFloat * 1000))
-  stm.bindParam(3, data)
+  stm.bindParam(2, data)
   db.exec(stm)
   stm.finalize()
   if deleteOld:
@@ -214,6 +213,7 @@
 
 proc loadObjectValue[T](s: Stream): T =
   for field, value in result.fieldPairs():
+    debug "Load field " & field & " of object " & $T
     {.cast(uncheckedAssign).}:
       value = loadValue[typeof(value)](s)
 
@@ -251,15 +251,21 @@
       dir = string(dir), relative = true, checkDir = true, skipSpecial = true
     ):
       if kind in [pcFile, pcLinkToFile] and path.endsWith(".db"):
-        let db = path[0 .. ^4].ensureExists(DEFAULT_WORLD_TABLE_NAME)
-        defer:
-          db.close()
-        let dbResult = db.getValue(
-          sql(
-            &"""SELECT time FROM {DEFAULT_WORLD_TABLE_NAME} ORDER BY time DESC LIMIT 1"""
+        try:
+          let db = path[0 .. ^4].ensureExists(DEFAULT_WORLD_TABLE_NAME)
+          defer:
+            db.close()
+          let dbResult = db.getValue(
+            sql(
+              &"""SELECT key FROM {DEFAULT_WORLD_TABLE_NAME} ORDER BY key DESC LIMIT 1"""
+            )
           )
-        )
-        result.add ((parseInt(dbResult) / 1000).fromUnixFloat().local(), path[0 .. ^4])
+          result.add (
+            (parseInt(dbResult) / 1000).fromUnixFloat().local(), path[0 .. ^4]
+          )
+        except CatchableError:
+          discard
+
   result.sort(Descending)
 
 proc purgeWorld*(worldName: string) =