-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathada_gui-gnoga-server-model.ads
127 lines (106 loc) · 6.24 KB
/
ada_gui-gnoga-server-model.ads
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
-- Ada_GUI implementation based on Gnoga. Adapted 2021
-- --
-- GNOGA - The GNU Omnificent GUI for Ada --
-- --
-- G N O G A . S E R V E R . M O D E L --
-- --
-- S p e c --
-- --
-- --
-- Copyright (C) 2014 David Botton --
-- --
-- This library is free software; you can redistribute it and/or modify --
-- it under terms of the GNU General Public License as published by the --
-- Free Software Foundation; either version 3, or (at your option) any --
-- later version. This library is distributed in the hope that it will be --
-- useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are --
-- granted additional permissions described in the GCC Runtime Library --
-- Exception, version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
-- --
-- For more information please go to http://www.gnoga.com --
------------------------------------------------------------------------------
-- An Active Record implementation for Ada similar to that used in Rails
with Ada.Finalization;
with Ada.Calendar;
with Ada_GUI.Gnoga.Server.Database;
package Ada_GUI.Gnoga.Server.Model is
type Active_Record
(Table_Name : access constant String;
Connection : access Gnoga.Server.Database.Connection'Class)
is new Ada.Finalization.Controlled with private;
overriding procedure Initialize (Object : in out Active_Record);
function Field_Names (A : Active_Record)
return Gnoga.Data_Array_Type;
-- Returns the Field Names supported by this Active_Record
procedure Values (A : in out Active_Record;
Map : in Gnoga.Data_Map_Type);
-- Set table values from Map ignoring any extra key/value pairs in Map
-- not found in record schema
function Values (A : Active_Record) return Gnoga.Data_Map_Type;
-- Return all values in record
procedure Value (A : in out Active_Record;
Field_Name : in String;
Value : in String);
-- Set value for Field_Name
procedure Value (A : in out Active_Record;
Field_Name : in String;
Integer_Value : in Integer);
-- Set value for Field_Name
procedure Value (A : in out Active_Record;
Field_Name : in String;
Date_Value : in Ada.Calendar.Time);
-- Set value for Field_Name
function Value (A : Active_Record; Field_Name : String) return String;
-- Return value for field_name
function Exists (A : Active_Record; Field_Name : String) return Boolean;
-- Checks for the presence of Field_Name in record
procedure Save (A : in out Active_Record);
-- Save values to row, if not the result of a find create new record
procedure Delete (A : in out Active_Record);
-- Delete this row
procedure Clear (A : in out Active_Record);
-- Clears the Active Record and mark as a new row
procedure Find (A : in out Active_Record; ID : in Positive);
-- Load row with ID
procedure Find (A : in out Active_Record; ID : in String);
-- Load row with ID, this version of Find accepts the ID as a string
-- ID must be a valid integer
procedure Find_Where (A : in out Active_Record;
Where : in String;
Create_New : in Boolean := True);
-- Load row based on where clause, note that only the first record
-- returned will be loaded. Use Model.Queries.Find_All for
-- return of multiple records. If Create_New is true then no exception
-- is thrown if the record is not found. Checking if Value ("id")
-- is empty, i.e. is a new record would confirm no results found.
procedure Find_Item (A : in out Active_Record;
Parent : in Active_Record'Class;
Create_New : in Boolean := True);
-- Return first matching record in Child Table A where:
-- Child_Table.PARENT_TABLE_NAME(with out s)_id = Child_Table.id
private
type Active_Record
(Table_Name : access constant String;
Connection : access Gnoga.Server.Database.Connection'Class)
is new Ada.Finalization.Controlled with
record
Is_New : Boolean := True;
Fields : Gnoga.Data_Array_Type;
Values : Gnoga.Data_Map_Type;
end record;
end Ada_GUI.Gnoga.Server.Model;