Just for completeness, this is what I end up doing
SPEC:
--------------------------------------------------------------------------------
function SQL_OK
(rc : in SQLRETURN)
return Boolean
with
Global => null,
Depends => (SQL_OK'Result => (rc)),
Post => (SQL_OK'Result =
(rc = SQL_SUCCESS or rc = SQL_SUCCESS_WITH_INFO));
--------------------------------------------------------------------------------
procedure SQLAllocEnv
(hEnv : in out SQLHENV;
Result : out SQLRETURN)
with
Inline,
Global => (Output => Environment),
Depends => ((Result, hEnv, Environment) => (hEnv)),
Pre => (SQLHANDLE (hEnv) = SQL_NULL_HANDLE),
Post => (if SQL_OK (Result) then
SQLHANDLE(hEnv) /= SQL_NULL_HANDLE
else
SQLHANDLE(hEnv) = SQL_NULL_HANDLE);
--------------------------------------------------------------------------------
procedure SQLAllocDbc
(hEnv : in SQLHENV;
hDbc : in out SQLHDBC;
Result : out SQLRETURN)
with
Inline,
Global => (Input => Environment,
Output => Database_Connection),
Depends => ((Result, hDbc, Database_Connection) =>
(hEnv, hDbc, Environment)),
Pre => (SQLHANDLE (hEnv) /= SQL_NULL_HANDLE and
SQLHANDLE (hDbc) = SQL_NULL_HANDLE),
Post => (if SQL_OK (Result) then
SQLHANDLE(hDbc) /= SQL_NULL_HANDLE
else
SQLHANDLE(hDbc) = SQL_NULL_HANDLE);
--------------------------------------------------------------------------------
BODY:
--------------------------------------------------------------------------------
function SQLAllocHandle
(HandleType : in SQL_HANDLE_TYPE;
InputHandle : in SQLHANDLE;
OutputHandlePtr : in out SQLHANDLE)
return SQLRETURN
with
Import => True,
Convention => C,
External_Name => "SQLAllocHandle";
--------------------------------------------------------------------------------
function SQL_OK
(rc : in SQLRETURN)
return Boolean
is
(rc = SQL_SUCCESS or rc = SQL_SUCCESS_WITH_INFO);
--------------------------------------------------------------------------------
procedure SQLAllocEnv
(hEnv : in out SQLHENV;
Result : out SQLRETURN)
is
begin
Result := SQLAllocHandle
(HandleType => SQL_HANDLE_ENV,
InputHandle => SQL_NULL_HANDLE,
OutputHandlePtr => SQLHANDLE (hEnv));
end SQLAllocEnv;
--------------------------------------------------------------------------------
procedure SQLAllocDbc
(hEnv : in SQLHENV;
hDbc : in out SQLHDBC;
Result : out SQLRETURN)
is
begin
Result := SQLAllocHandle
(HandleType => SQL_HANDLE_DBC,
InputHandle => SQLHANDLE (hEnv),
OutputHandlePtr => SQLHANDLE (hDbc));
end SQLAllocDbc;
--------------------------------------------------------------------------------
Thanks for the help!