File : oci-task_environment.adb
--with Text_IO,System.Address_Image; use Text_IO,System;
package body OCI.Task_Environment is
use type sword,ub4;
use type OCIHandle;
procedure Free(H : OCIHandle; HType : Ub4) is
Rc : Sword;
begin
if H=Empty_Handle then
return;
end if;
RC := OCIHandleFree(H, HType);
if Rc/=OCI_SUCCESS then
null;
end if;
end Free;
function Create return Thread_Environment is
Env : aliased OCIEnv := OCIEnv(Empty_Handle);
Rc : Sword;
begin
Rc := OCIEnvCreate(Env'access,
OCI_THREADED+OCI_OBJECT);
if Rc/=OCI_SUCCESS then
raise ENVIRONMENT_CREATION_ERROR;
end if;
return (RF.Controlled_Reference with Environment => Env);
end;
procedure Destroy (Object : in out Thread_Environment) is
begin
if Object.Environment/=OCIEnv(Empty_Handle) then
Free(OCIHandle(Object.Environment),OCI_HTYPE_ENV);
-- Put_Line("Environment freed");
end if;
end;
end OCI.Task_Environment;