-----------------------------------------------------------------------
-- ado-schemas-entities -- Entity types cache
-- Copyright (C) 2011, 2012, 2017 Stephane Carrez
-- Written by Stephane Carrez (Stephane.Carrez@gmail.com)
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-----------------------------------------------------------------------
with Ada.Containers;
with Ada.Containers.Indefinite_Hashed_Maps;
with Ada.Strings.Hash;
with ADO.Sessions;
with ADO.Parameters;
with ADO.Caches;
package ADO.Schemas.Entities is
No_Entity_Type : exception;
-- The entity cache maintains a static cache of database entities.
type Entity_Cache is new ADO.Caches.Cache_Type with private;
-- Expand the name into a target parameter value to be used in the SQL query.
-- The Expander can return a T_NULL when a value is not found or
-- it may also raise some exception.
overriding
function Expand (Instance : in out Entity_Cache;
Name : in String) return ADO.Parameters.Parameter;
-- Find the entity type index associated with the given database table.
-- Raises the No_Entity_Type exception if no such mapping exist.
function Find_Entity_Type (Cache : in Entity_Cache;
Table : in Class_Mapping_Access) return ADO.Entity_Type;
-- Find the entity type index associated with the given database table.
-- Raises the No_Entity_Type exception if no such mapping exist.
function Find_Entity_Type (Cache : in Entity_Cache;
Name : in Util.Strings.Name_Access) return ADO.Entity_Type;
-- Initialize the entity cache by reading the database entity table.
procedure Initialize (Cache : in out Entity_Cache;
Session : in out ADO.Sessions.Session'Class);
private
package Entity_Map is new
Ada.Containers.Indefinite_Hashed_Maps (Key_Type => String,
Element_Type => ADO.Entity_Type,
Hash => Ada.Strings.Hash,
Equivalent_Keys => "=");
type Entity_Cache is new ADO.Caches.Cache_Type with record
Entities : Entity_Map.Map;
end record;
end ADO.Schemas.Entities;