1--  This file is covered by the Internet Software Consortium (ISC) License
2--  Reference: ../../License.txt
3
4with CommonText;
5with AdaBase.Connection.Base;
6with AdaBase.Logger.Facility;
7with AdaBase.Interfaces.Driver;
8
9package AdaBase.Driver.Base is
10
11   package CT  renames CommonText;
12   package ACB renames AdaBase.Connection.Base;
13   package ALF renames AdaBase.Logger.Facility;
14   package AID renames AdaBase.Interfaces.Driver;
15
16   type Base_Driver is abstract new Base_Pure and AID.iDriver with private;
17
18   overriding
19   procedure command_standard_logger (driver : Base_Driver;
20                                      device : ALF.TLogger;
21                                      action : ALF.TAction);
22
23   overriding
24   procedure set_logger_filename (driver  : Base_Driver; filename : String);
25
26   overriding
27   procedure detach_custom_logger (driver : Base_Driver);
28
29   overriding
30   procedure attach_custom_logger
31     (driver        : Base_Driver;
32      logger_access : ALF.AL.BaseClass_Logger_access);
33
34   overriding
35   procedure disconnect          (driver : out Base_Driver);
36
37   overriding
38   procedure rollback            (driver : Base_Driver);
39
40   overriding
41   procedure commit              (driver : Base_Driver);
42
43   overriding
44   function last_insert_id       (driver : Base_Driver) return Trax_ID;
45
46   overriding
47   function last_sql_state       (driver : Base_Driver) return SQL_State;
48
49   overriding
50   function last_driver_code     (driver : Base_Driver) return Driver_Codes;
51
52   overriding
53   function last_driver_message  (driver : Base_Driver) return String;
54
55   overriding
56   procedure basic_connect       (driver   : out Base_Driver;
57                                  database : String;
58                                  username : String := blankstring;
59                                  password : String := blankstring;
60                                  socket   : String := blankstring);
61
62   overriding
63   procedure basic_connect       (driver   : out Base_Driver;
64                                  database : String;
65                                  username : String := blankstring;
66                                  password : String := blankstring;
67                                  hostname : String := blankstring;
68                                  port     : Posix_Port);
69
70   overriding
71   function trait_autocommit     (driver : Base_Driver)
72                                  return Boolean;
73
74   overriding
75   function trait_column_case    (driver : Base_Driver)
76                                  return Case_Modes;
77
78   overriding
79   function trait_error_mode     (driver : Base_Driver)
80                                  return Error_Modes;
81
82   overriding
83   function trait_connected      (driver : Base_Driver)
84                                  return Boolean;
85
86   overriding
87   function trait_driver         (driver : Base_Driver)
88                                  return String;
89
90   overriding
91   function trait_client_info    (driver : Base_Driver)
92                                  return String;
93
94   overriding
95   function trait_client_version (driver : Base_Driver)
96                                  return String;
97
98   overriding
99   function trait_server_info    (driver : Base_Driver)
100                                  return String;
101
102   overriding
103   function trait_server_version (driver : Base_Driver)
104                                  return String;
105
106   overriding
107   function trait_max_blob_size    (driver : Base_Driver)
108                                    return BLOB_Maximum;
109
110   overriding
111   function trait_multiquery_enabled (driver : Base_Driver)
112                                      return Boolean;
113
114   overriding
115   function trait_character_set  (driver : Base_Driver)
116                                  return String;
117
118   overriding
119   procedure set_trait_multiquery_enabled (driver : Base_Driver;
120                                           trait  : Boolean);
121
122   overriding
123   procedure set_trait_autocommit  (driver : Base_Driver;
124                                    trait  : Boolean);
125
126   overriding
127   procedure set_trait_column_case (driver : Base_Driver;
128                                    trait  : Case_Modes);
129
130   overriding
131   procedure set_trait_error_mode  (driver : Base_Driver;
132                                    trait  : Error_Modes);
133
134   overriding
135   procedure set_trait_max_blob_size (driver : Base_Driver;
136                                      trait  : BLOB_Maximum);
137
138   overriding
139   procedure set_trait_character_set (driver : Base_Driver;
140                                      trait  : String);
141
142   overriding
143   procedure query_clear_table       (driver : Base_Driver;
144                                      table  : String);
145
146   overriding
147   procedure query_drop_table        (driver      : Base_Driver;
148                                      tables      : String;
149                                      when_exists : Boolean := False;
150                                      cascade     : Boolean := False);
151
152private
153
154   logger : aliased ALF.LogFacility;
155
156   type Base_Driver is abstract new Base_Pure and AID.iDriver with
157      record
158         connection        : ACB.Base_Connection_Access;
159         connection_active : Boolean     := False;
160         dialect           : Driver_Type := foundation;
161         database          : CT.Text     := CT.blank;
162      end record;
163
164   procedure log_nominal (driver   : Base_Driver;
165                          category : Log_Category;
166                          message  : CT.Text);
167
168   procedure log_problem
169     (driver     : Base_Driver;
170      category   : Log_Category;
171      message    : CT.Text;
172      pull_codes : Boolean := False;
173      break      : Boolean := False);
174
175   overriding
176   procedure initialize (Object : in out Base_Driver) is null;
177
178   function assembly_common_select (distinct   : Boolean;
179                                    tables     : String;
180                                    columns    : String;
181                                    conditions : String;
182                                    groupby    : String;
183                                    having     : String;
184                                    order      : String) return String;
185
186   procedure private_connect (driver   : out Base_Driver;
187                              database : String;
188                              username : String;
189                              password : String;
190                              hostname : String     := blankstring;
191                              socket   : String     := blankstring;
192                              port     : Posix_Port := portless) is null;
193
194end AdaBase.Driver.Base;
195