Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
name: check

on: push

on:
pull_request:
push:
branches:
- master
jobs:
lint:
runs-on: ubuntu-latest
Expand All @@ -10,9 +11,9 @@ jobs:
uses: actions/checkout@v2

- name: setup-zig
uses: mlugg/setup-zig@v1
uses: mlugg/setup-zig@v2
with:
version: 0.14.0
version: 0.15.1

- name: lint
run: |
Expand All @@ -27,13 +28,11 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@v2
with:
submodules: recursive

- name: setup-zig
uses: mlugg/setup-zig@v1
uses: mlugg/setup-zig@v2
with:
version: 0.14.0
version: 0.15.1

- name: test
run: |
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Build and use RocksDB in zig.

# Build Dependencies

`rocksdb-zig` is pinned to [Zig `0.13`](https://ziglang.org/download/), so you will need to have it installed.
`rocksdb-zig` is pinned to [Zig `0.15`](https://ziglang.org/download/), so you will need to have it installed.

# Usage

Expand Down
6 changes: 1 addition & 5 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,7 @@ pub fn build(b: *Build) void {
});
bindings_mod.addImport("rocksdb", rocksdb_mod);

const tests = b.addTest(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/lib.zig"),
});
const tests = b.addTest(.{ .root_module = bindings_mod });
const test_step = b.step("test", "Run bindings tests");
tests.root_module.addImport("rocksdb", rocksdb_mod);
test_step.dependOn(&b.addRunArtifact(tests).step);
Expand Down
1 change: 1 addition & 0 deletions build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
.hash = "N-V-__8AAAKhcQL5PtDzqfPNCjk1LJCK8svO8KtC-f_3bj6z",
},
},
.minimum_zig_version = "0.15.0",
.paths = .{
"build.zig",
"build.zig.zon",
Expand Down
13 changes: 4 additions & 9 deletions src/data.zig
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,14 @@ const Allocator = std.mem.Allocator;
/// data that was allocated by rocksdb and must be freed by rocksdb
pub const Data = struct {
data: []const u8,
free: *const fn (?*anyopaque) callconv(.C) void,
free: *const fn (?*anyopaque) callconv(.c) void,

pub fn deinit(self: @This()) void {
pub fn deinit(self: Data) void {
self.free(@ptrCast(@constCast(self.data.ptr)));
}

pub fn format(
self: @This(),
comptime _: []const u8,
options: std.fmt.FormatOptions,
writer: anytype,
) !void {
try std.fmt.formatBuf(self.data, options, writer);
pub fn format(self: Data, writer: *std.io.Writer) !void {
try writer.print("{any}", .{self});
}
};

Expand Down
37 changes: 23 additions & 14 deletions src/database.zig
Original file line number Diff line number Diff line change
Expand Up @@ -246,14 +246,18 @@ pub const DB = struct {
return ri;
}

pub fn liveFiles(self: *const Self, allocator: Allocator) Allocator.Error!std.ArrayList(LiveFile) {
pub fn liveFiles(self: *const Self, allocator: Allocator) Allocator.Error![]const LiveFile {
const files = rdb.rocksdb_livefiles(self.db).?;
defer rdb.rocksdb_livefiles_destroy(files);
const num_files: usize = @intCast(rdb.rocksdb_livefiles_count(files));
var livefiles = std.ArrayList(LiveFile).init(allocator);

var livefiles: std.ArrayList(LiveFile) = .empty;
defer livefiles.deinit(allocator);

var key_size: usize = 0;
for (0..num_files) |i| {
const file_num: c_int = @intCast(i);
try livefiles.append(.{
try livefiles.append(allocator, .{
.allocator = allocator,
.column_family_name = try copy(allocator, rdb.rocksdb_livefiles_column_family_name(files, file_num)),
.name = try copy(allocator, rdb.rocksdb_livefiles_name(files, file_num)),
Expand All @@ -265,8 +269,8 @@ pub const DB = struct {
.num_deletions = rdb.rocksdb_livefiles_deletions(files, file_num),
});
}
rdb.rocksdb_livefiles_destroy(files);
return livefiles;

return try livefiles.toOwnedSlice(allocator);
}

pub fn propertyValueCf(
Expand Down Expand Up @@ -506,15 +510,17 @@ test DB {
var err_str: ?Data = null;
defer if (err_str) |e| e.deinit();
runTest(&err_str) catch |e| {
std.debug.print("{}: {?}\n", .{ e, err_str });
std.debug.print("{}: {?f}\n", .{ e, err_str });
return e;
};
}

fn runTest(err_str: *?Data) !void {
const allocator = std.testing.allocator;

{
var db, const families = try DB.open(
std.testing.allocator,
allocator,
"test-state",
.{
.create_if_missing = true,
Expand All @@ -527,7 +533,7 @@ fn runTest(err_str: *?Data) !void {
err_str,
);
defer db.deinit();
defer std.testing.allocator.free(families);
defer allocator.free(families);
const a_family = families[1].handle;

_ = try db.put(a_family, "hello", "world", err_str);
Expand All @@ -553,7 +559,7 @@ fn runTest(err_str: *?Data) !void {
}

var db, const families = try DB.open(
std.testing.allocator,
allocator,
"test-state",
.{
.create_if_missing = true,
Expand All @@ -566,9 +572,12 @@ fn runTest(err_str: *?Data) !void {
err_str,
);
defer db.deinit();
defer std.testing.allocator.free(families);
const lfs = try db.liveFiles(std.testing.allocator);
defer lfs.deinit();
defer for (lfs.items) |lf| lf.deinit();
try std.testing.expect(std.mem.eql(u8, "another", lfs.items[0].column_family_name));
defer allocator.free(families);

const lfs = try db.liveFiles(allocator);
defer {
for (lfs) |lf| lf.deinit();
allocator.free(lfs);
}
try std.testing.expect(std.mem.eql(u8, "another", lfs[0].column_family_name));
}