- Fixed ID generation for files and directories in OurDBFS, preventing collisions and improving data integrity. This ensures that IDs are consistently and uniquely assigned. - Updated save methods to correctly update the `metadata.id` field across all FSEntry types (File, Directory, Symlink). This change solves a previous issue where IDs weren't being properly persisted. - Added incremental mode to OurDB, improving performance for large datasets. This allows for more efficient updates instead of full overwrites.
46 lines
1.2 KiB
V
46 lines
1.2 KiB
V
module ourdb_fs
|
|
|
|
import os
|
|
import freeflowuniverse.herolib.data.ourdb
|
|
|
|
// Factory method for creating a new OurDBFS instance
|
|
@[params]
|
|
pub struct VFSParams {
|
|
pub:
|
|
data_dir string // Directory to store OurDBFS data
|
|
metadata_dir string // Directory to store OurDBFS metadata
|
|
incremental_mode bool // Whether to enable incremental mode
|
|
}
|
|
|
|
// Factory method for creating a new OurDBFS instance
|
|
pub fn new(params VFSParams) !&OurDBFS {
|
|
if !os.exists(params.data_dir) {
|
|
os.mkdir(params.data_dir) or { return error('Failed to create data directory: ${err}') }
|
|
}
|
|
if !os.exists(params.metadata_dir) {
|
|
os.mkdir(params.metadata_dir) or {
|
|
return error('Failed to create metadata directory: ${err}')
|
|
}
|
|
}
|
|
|
|
mut db_meta := ourdb.new(
|
|
path: '${params.metadata_dir}/ourdb_fs.db_meta'
|
|
incremental_mode: params.incremental_mode
|
|
)!
|
|
mut db_data := ourdb.new(
|
|
path: '${params.data_dir}/vfs_metadata.db_meta'
|
|
incremental_mode: params.incremental_mode
|
|
)!
|
|
|
|
mut fs := &OurDBFS{
|
|
root_id: 1
|
|
block_size: 1024 * 4
|
|
data_dir: params.data_dir
|
|
metadata_dir: params.metadata_dir
|
|
db_meta: &db_meta
|
|
db_data: &db_data
|
|
}
|
|
|
|
return fs
|
|
}
|