File : oci-thread.ads


with 
  Ada.Task_Attributes,
  OCI.Lib,
  OCI.Task_Error,
  Ada.Task_Identification,
  OCI.Task_Environment;
use 
   OCI.Task_Error,
   OCI.Task_Environment,
   Ada.Task_Identification,
   OCI.Lib;
package OCI.Thread is 

  function Error return OCIError;
  function Environment return OCIEnv;
  
   protected Synch is
      procedure Same_Environment_In(
         Task_ID1 : Task_ID;
         Task_ID2 : Task_ID := Current_Task);
      function Environment return Thread_Environment;
   end Synch;

  -- Setup the same environment in 2 different tasks
  -- otherwise every task will have different environments.
  -- if both tasks have Environments created 
  -- (it happens after first call to any OCI related function automaticaly)
  -- an exception will be raise;
  procedure Same_Environment_In(
         Task_ID1 : Task_ID;
         Task_ID2 : Task_ID := Current_Task) renames Synch.Same_Environment_In;

     THE_SAME_TASKS : exception;
     BOTH_ENVIRONMENT_ALREADY_CREATED : exception;

private

  package Environment_attr is new
      Ada.Task_Attributes(Thread_Environment, Init_Environment);

  package Error_attr is new
      Ada.Task_Attributes(Thread_Error, Init_Error);
      
end OCI.Thread