From 7fe05878dbf3b9f4cc05b8fe933df1811a744b92 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 10 Aug 2025 09:29:23 +0800 Subject: [PATCH] Add basic FFI bindings --- ffi/conn.ha | 6 ++++++ ffi/error.ha | 3 +++ ffi/exec.ha | 3 +++ ffi/result.ha | 11 +++++++++++ ffi/status.ha | 23 +++++++++++++++++++++++ diff --git a/ffi/conn.ha b/ffi/conn.ha new file mode 100644 index 0000000000000000000000000000000000000000..7a4fae81475d5e14ae6a7713217cfc54e0aab7ff --- /dev/null +++ b/ffi/conn.ha @@ -0,0 +1,6 @@ +use types::c; + +export type conn = opaque; + +export @symbol("PQconnectdb") fn connectdb(conninfo: const *c::char) *conn; +export @symbol("PQfinish") fn finish(conn: *conn) void; diff --git a/ffi/error.ha b/ffi/error.ha new file mode 100644 index 0000000000000000000000000000000000000000..f0e770818e85e4602bb76a3dcfbb36754aecc344 --- /dev/null +++ b/ffi/error.ha @@ -0,0 +1,3 @@ +use types::c; + +export @symbol("PQerrorMessage") fn errorMessage(conn: *conn) *c::char; diff --git a/ffi/exec.ha b/ffi/exec.ha new file mode 100644 index 0000000000000000000000000000000000000000..393dc8188f5ad0904c8cf230d5e131300dc82755 --- /dev/null +++ b/ffi/exec.ha @@ -0,0 +1,3 @@ +use types::c; + +export @symbol("PQexec") fn exec(conn: *conn, query: *c::char) *result; diff --git a/ffi/result.ha b/ffi/result.ha new file mode 100644 index 0000000000000000000000000000000000000000..6d1734e0d2a6d515e415e862d4395d6758f90ab3 --- /dev/null +++ b/ffi/result.ha @@ -0,0 +1,11 @@ +use types::c; + +export type result = opaque; + +export @symbol("PQclear") fn clear(res: *result) void; + +export @symbol("PQnfields") fn nfields(res: *result) int; +export @symbol("PQfname") fn fname(res: *result, field_num: int) *c::char; +export @symbol("PQntuples") fn ntuples(res: *result) int; +export @symbol("PQgetvalue") fn getvalue(res: *result, tup_num: int, field_num: int) *c::char; +export @symbol("PQgetlength") fn getlength(res: *result, tup_num: int, field_num: int) int; diff --git a/ffi/status.ha b/ffi/status.ha new file mode 100644 index 0000000000000000000000000000000000000000..d5c123726bfb6f03ff5f2f0b9a5700a6d1162fa2 --- /dev/null +++ b/ffi/status.ha @@ -0,0 +1,23 @@ +export @symbol("PQstatus") fn status(conn: *conn) ConnStatusType; + +export type ConnStatusType = enum int { + OK, + BAD, + + STARTED, + MADE, + AWAITING_RESPONSE, + + AUTH_OK, + + SETENV, + SSL_STARTUP, + NEEDED, + CHECK_WRITABLE, + CONSUME, + GSS_STARTUP, + CHECK_TARGET, + + CHECK_STANDBY, + ALLOCATED, +}; -- 2.48.1