summaryrefslogtreecommitdiff
path: root/examples/zigcrypto_test.zig
diff options
context:
space:
mode:
authorGravatar Vincent Rischmann2022-09-18 00:23:57 +0200
committerGravatar Vincent Rischmann2022-09-18 02:30:19 +0200
commit7d4d38c088714e7176d19abb9cf688f9485d8fc6 (patch)
tree61076e6a72498b0a825a8f8fb764207a5f202a4a /examples/zigcrypto_test.zig
parentexamples: add the zigcrypto loadable extension example (diff)
downloadzig-sqlite-7d4d38c088714e7176d19abb9cf688f9485d8fc6.tar.gz
zig-sqlite-7d4d38c088714e7176d19abb9cf688f9485d8fc6.tar.xz
zig-sqlite-7d4d38c088714e7176d19abb9cf688f9485d8fc6.zip
examples: add a binary to test the zigcrypto loadable extension
Diffstat (limited to 'examples/zigcrypto_test.zig')
-rw-r--r--examples/zigcrypto_test.zig50
1 files changed, 50 insertions, 0 deletions
diff --git a/examples/zigcrypto_test.zig b/examples/zigcrypto_test.zig
new file mode 100644
index 0000000..69a30bc
--- /dev/null
+++ b/examples/zigcrypto_test.zig
@@ -0,0 +1,50 @@
1const std = @import("std");
2const debug = std.debug;
3const mem = std.mem;
4
5const sqlite = @import("sqlite");
6
7pub fn main() anyerror!void {
8 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
9 var arena = std.heap.ArenaAllocator.init(gpa.allocator());
10 defer arena.deinit();
11 const allocator = arena.allocator();
12
13 //
14
15 var db = try sqlite.Db.init(.{
16 .mode = sqlite.Db.Mode{ .Memory = {} },
17 .open_flags = .{ .write = true },
18 });
19 defer db.deinit();
20
21 {
22 const result = sqlite.c.sqlite3_enable_load_extension(db.db, 1);
23 debug.assert(result == sqlite.c.SQLITE_OK);
24 }
25
26 {
27 var pzErrMsg: [*c]u8 = undefined;
28 const result = sqlite.c.sqlite3_load_extension(db.db, "./zig-out/lib/libzigcrypto", null, &pzErrMsg);
29 if (result != sqlite.c.SQLITE_OK) {
30 const err = sqlite.c.sqlite3_errstr(result);
31 std.debug.panic("unable to load extension, err: {s}, err message: {s}\n", .{ err, std.mem.sliceTo(pzErrMsg, 0) });
32 }
33 }
34
35 var diags = sqlite.Diagnostics{};
36
37 const blake3_digest = db.oneAlloc([]const u8, allocator, "SELECT hex(blake3('foobar'))", .{ .diags = &diags }, .{}) catch |err| {
38 debug.print("unable to get blake3 hash, err: {!}, diags: {s}\n", .{ err, diags });
39 return err;
40 };
41 debug.assert(blake3_digest != null);
42 debug.assert(mem.eql(u8, "AA51DCD43D5C6C5203EE16906FD6B35DB298B9B2E1DE3FCE81811D4806B76B7D", blake3_digest.?));
43
44 const sha3_digest = db.oneAlloc([]const u8, allocator, "SELECT hex(sha3_512('foobar'))", .{ .diags = &diags }, .{}) catch |err| {
45 debug.print("unable to get sha3 hash, err: {!}, diags: {s}\n", .{ err, diags });
46 return err;
47 };
48 debug.assert(sha3_digest != null);
49 debug.assert(mem.eql(u8, "FF32A30C3AF5012EA395827A3E99A13073C3A8D8410A708568FF7E6EB85968FCCFEBAEA039BC21411E9D43FDB9A851B529B9960FFEA8679199781B8F45CA85E2", sha3_digest.?));
50}