1 /* @include ensdatabaseadaptor ************************************************
2 **
3 ** Ensembl Database Adaptor functions
4 **
5 ** @author Copyright (C) 1999 Ensembl Developers
6 ** @author Copyright (C) 2006 Michael K. Schuster
7 ** @version $Revision: 1.28 $
8 ** @modified 2009 by Alan Bleasby for incorporation into EMBOSS core
9 ** @modified $Date: 2012/08/05 10:37:32 $ by $Author: mks $
10 ** @@
11 **
12 ** This library is free software; you can redistribute it and/or
13 ** modify it under the terms of the GNU Lesser General Public
14 ** License as published by the Free Software Foundation; either
15 ** version 2.1 of the License, or (at your option) any later version.
16 **
17 ** This library is distributed in the hope that it will be useful,
18 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20 ** Lesser General Public License for more details.
21 **
22 ** You should have received a copy of the GNU Lesser General Public
23 ** License along with this library; if not, write to the Free Software
24 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 ** MA  02110-1301,  USA.
26 **
27 ******************************************************************************/
28 
29 #ifndef ENSDATABASEADAPTOR_H
30 #define ENSDATABASEADAPTOR_H
31 
32 /* ========================================================================= */
33 /* ============================= include files ============================= */
34 /* ========================================================================= */
35 
36 #include "ensdatabaseconnection.h"
37 
38 AJ_BEGIN_DECLS
39 
40 
41 
42 
43 /* ========================================================================= */
44 /* =============================== constants =============================== */
45 /* ========================================================================= */
46 
47 extern const char *ensKDatabaseadaptorRegCollection;
48 extern const char *ensKDatabaseadaptorRegMulti;
49 extern const char *ensKDatabaseadaptorRegSpecies;
50 
51 
52 
53 
54 /* @const EnsMDatabaseadaptorGroups *******************************************
55 **
56 ** Number of Ensembl Database Adaptor groups
57 **
58 ** The number of Ensembl Database Adaptor groups has to correlate with the
59 ** EnsEDatabaseadaptorGroup enumeration list and the
60 ** static const char *databaseadaptorGroup[] array. It is used by the
61 ** ensregistry.[ch] module.
62 **
63 ******************************************************************************/
64 
65 #define EnsMDatabaseadaptorGroups 17
66 
67 
68 
69 
70 /* @enum EnsEDatabaseadaptorGroup *********************************************
71 **
72 ** Ensembl Database Adaptor Group enumeration
73 **
74 ** @value ensEDatabaseadaptorGroupNULL Null
75 ** @value ensEDatabaseadaptorGroupCore Core
76 ** @value ensEDatabaseadaptorGroupVega Vega
77 ** @value ensEDatabaseadaptorGroupOtherFeatures Other features
78 ** @value ensEDatabaseadaptorGroupCopyDNA DNA reference
79 ** @value ensEDatabaseadaptorGroupGeneticVariation Genetic variation
80 ** @value ensEDatabaseadaptorGroupFunctionalGenomics Functional genomics
81 ** @value ensEDatabaseadaptorGroupComparativeGenomics Comparative genomics
82 ** @value ensEDatabaseadaptorGroupOntology Ontology
83 ** @value ensEDatabaseadaptorGroupQualityCheck Quality check
84 ** @value ensEDatabaseadaptorGroupPipeline Pipleine
85 ** @value ensEDatabaseadaptorGroupHive Hive
86 ** @value ensEDatabaseadaptorGroupCoreExpressionEST Core expression EST
87 ** @value ensEDatabaseadaptorGroupCoreExpressionGNF Core expression GNF
88 ** @value ensEDatabaseadaptorGroupAncestral Ancestral
89 ** @value ensEDatabaseadaptorGroupWebsite Webiste
90 ** @value ensEDatabaseadaptorGroupProduction Production
91 ** @@
92 ******************************************************************************/
93 
94 typedef enum EnsODatabaseadaptorGroup
95 {
96     ensEDatabaseadaptorGroupNULL,
97     ensEDatabaseadaptorGroupCore,
98     ensEDatabaseadaptorGroupVega,
99     ensEDatabaseadaptorGroupOtherFeatures,
100     ensEDatabaseadaptorGroupCopyDNA,
101     ensEDatabaseadaptorGroupGeneticVariation,
102     ensEDatabaseadaptorGroupFunctionalGenomics,
103     ensEDatabaseadaptorGroupComparativeGenomics,
104     ensEDatabaseadaptorGroupOntology,
105     ensEDatabaseadaptorGroupQualityCheck,
106     ensEDatabaseadaptorGroupPipeline,
107     ensEDatabaseadaptorGroupHive,
108     ensEDatabaseadaptorGroupCoreExpressionEST,
109     ensEDatabaseadaptorGroupCoreExpressionGNF,
110     ensEDatabaseadaptorGroupAncestral,
111     ensEDatabaseadaptorGroupWebsite,
112     ensEDatabaseadaptorGroupProduction
113 } EnsEDatabaseadaptorGroup;
114 
115 
116 
117 
118 /* ========================================================================= */
119 /* ============================== public data ============================== */
120 /* ========================================================================= */
121 
122 /* @data EnsPDatabaseadaptor **************************************************
123 **
124 ** Ensembl Database Adaptor.
125 **
126 ** Holds the Ensembl Database Group, the species name and the Ensembl
127 ** Database Connection object connected to this SQL database.
128 **
129 ** @alias EnsSDatabaseadaptor
130 ** @alias EnsODatabaseadaptor
131 **
132 ** @alias EnsPAttributeadaptor
133 ** @alias EnsPDatabaseentryadaptor
134 ** @alias EnsPGvgenotypeadaptor
135 ** @alias EnsPGvsynonymadaptor
136 ** @alias EnsPMarkermaplocationadaptor
137 ** @alias EnsPMarkersynonymadaptor
138 ** @alias EnsPSupportingfeatureadaptor
139 **
140 ** @attr Databaseconnection [EnsPDatabaseconnection]
141 ** Ensembl Database Connection
142 ** @attr Species [AjPStr] Species
143 ** @attr SpeciesNames [AjPList]
144 ** AJAX List of AJAX String (species name) objects
145 ** @attr Group [EnsEDatabaseadaptorGroup]
146 ** Ensembl Database Adaptor Group enumeration
147 ** @attr Multispecies [AjBool] Multi-species database
148 ** @attr Identifier [ajuint] Species identifier, defaults to 1U
149 ** @attr Padding [ajuint] Padding to alignment boundary
150 ** @@
151 ******************************************************************************/
152 
153 typedef struct EnsSDatabaseadaptor
154 {
155     EnsPDatabaseconnection Databaseconnection;
156     AjPStr Species;
157     AjPList SpeciesNames;
158     EnsEDatabaseadaptorGroup Group;
159     AjBool Multispecies;
160     ajuint Identifier;
161     ajuint Padding;
162 } EnsODatabaseadaptor;
163 
164 #define EnsPDatabaseadaptor EnsODatabaseadaptor*
165 
166 
167 
168 
169 /* ========================================================================= */
170 /* =========================== public functions ============================ */
171 /* ========================================================================= */
172 
173 /*
174 ** Prototype definitions
175 */
176 
177 /* Ensembl Database Adaptor */
178 
179 EnsPDatabaseadaptor ensRegistryGetDatabaseadaptor(
180     EnsEDatabaseadaptorGroup dbag,
181     AjPStr alias);
182 
183 EnsPDatabaseadaptor ensRegistryGetReferenceadaptor(EnsPDatabaseadaptor dba);
184 
185 EnsPDatabaseadaptor ensDatabaseadaptorNewDatabasename(
186     EnsPDatabaseconnection dbc,
187     AjPStr database);
188 
189 EnsPDatabaseadaptor ensDatabaseadaptorNewIni(EnsPDatabaseconnection dbc,
190                                              AjPStr database,
191                                              AjPStr species,
192                                              EnsEDatabaseadaptorGroup dbag,
193                                              AjBool multi,
194                                              ajuint identifier);
195 
196 EnsPDatabaseadaptor ensDatabaseadaptorNewUrl(const AjPStr url);
197 
198 void ensDatabaseadaptorDel(EnsPDatabaseadaptor *Pdba);
199 
200 EnsPDatabaseconnection ensDatabaseadaptorGetDatabaseconnection(
201     const EnsPDatabaseadaptor dba);
202 
203 EnsEDatabaseadaptorGroup ensDatabaseadaptorGetGroup(
204     const EnsPDatabaseadaptor dba);
205 
206 ajuint ensDatabaseadaptorGetIdentifier(
207     const EnsPDatabaseadaptor dba);
208 
209 AjBool ensDatabaseadaptorGetMultispecies(
210     const EnsPDatabaseadaptor dba);
211 
212 AjPStr ensDatabaseadaptorGetSpecies(
213     const EnsPDatabaseadaptor dba);
214 
215 const AjPList ensDatabaseadaptorLoadSpeciesnames(EnsPDatabaseadaptor dba);
216 
217 AjBool ensDatabaseadaptorSetDatabaseconnection(EnsPDatabaseadaptor dba,
218                                                EnsPDatabaseconnection dbc);
219 
220 AjBool ensDatabaseadaptorSetGroup(EnsPDatabaseadaptor dba,
221                                   EnsEDatabaseadaptorGroup dbag);
222 
223 AjBool ensDatabaseadaptorSetIdentifier(EnsPDatabaseadaptor dba,
224                                        ajuint identifier);
225 
226 AjBool ensDatabaseadaptorSetMultispecies(EnsPDatabaseadaptor dba,
227                                          AjBool multi);
228 
229 AjBool ensDatabaseadaptorSetSpecies(EnsPDatabaseadaptor dba, AjPStr species);
230 
231 AjBool ensDatabaseadaptorTrace(const EnsPDatabaseadaptor dba, ajuint level);
232 
233 AjBool ensDatabaseadaptorMatch(const EnsPDatabaseadaptor dba1,
234                                const EnsPDatabaseadaptor dba2);
235 
236 AjBool ensDatabaseadaptorMatchcomponents(const EnsPDatabaseadaptor dba,
237                                          const EnsPDatabaseconnection dbc,
238                                          const AjPStr species,
239                                          EnsEDatabaseadaptorGroup dbag,
240                                          AjBool multi,
241                                          ajuint identifier);
242 
243 AjBool ensDatabaseadaptorDisconnect(EnsPDatabaseadaptor dba);
244 
245 AjBool ensDatabaseadaptorEscapeC(EnsPDatabaseadaptor dba,
246                                  char **Ptxt,
247                                  const AjPStr str);
248 
249 AjBool ensDatabaseadaptorEscapeS(EnsPDatabaseadaptor dba,
250                                  AjPStr *Pstr,
251                                  const AjPStr str);
252 
253 AjBool ensDatabaseadaptorSqlstatementDel(EnsPDatabaseadaptor dba,
254                                          AjPSqlstatement *Psqls);
255 
256 AjPSqlstatement ensDatabaseadaptorSqlstatementNew(EnsPDatabaseadaptor dba,
257                                                   const AjPStr statement);
258 
259 AjBool ensDatabaseadaptorFetchSchemabuild(EnsPDatabaseadaptor dba,
260                                           AjPStr *Pbuild);
261 
262 EnsEDatabaseadaptorGroup ensDatabaseadaptorGroupFromStr(const AjPStr group);
263 
264 const char *ensDatabaseadaptorGroupToChar(EnsEDatabaseadaptorGroup dbag);
265 
266 /*
267 ** End of prototype definitions
268 */
269 
270 
271 
272 
273 AJ_END_DECLS
274 
275 #endif /* !ENSDATABASEADAPTOR_H */
276